In [1]:
from harness import Harness
import pandas
from harness.python.ext import HarnessExtension
In [2]:
class NetworkXMixin:
graph = None
class NetworkXExtension(HarnessExtension):
imports = 'networkx'
mixin = NetworkXMixin
def keywords(self, dataframe):
return {
'G': lambda: dataframe.graph,
'df': lambda: dataframe,
}
def to_graph(self, source, target, edge_attr=True, df=None):
df.graph = self.module_.from_pandas_dataframe(
df, source, target, edge_attr
)
return df.graph
def callback(self, dataframe, value):
if isinstance(value, self.module_.Graph):
return dataframe
return value
def edges(self, df):
return df.graph.edges()
def nodes(self, df):
return df.graph.nodes()
In [3]:
extensions = [
'harness.python.ext.base.JinjaExtension',
'harness.python.ext.SciKit.SciKitExtension',
'harness.python.ext.Bokeh.BokehModelsExtension',
'harness.python.ext.Bokeh.BokehPlottingExtension',
'harness.python.ext.Bokeh.BokehChartsExtension',
'__main__.NetworkXExtension'
]
In [4]:
df = Harness(pandas.np.random.randn(10,2), extensions=extensions)
In [5]:
df.to_graph(source=0, target=1)
Out[5]:
In [6]:
df.to_graph(0, 1).edges()
Out[6]:
In [7]:
df.edges()
Out[7]:
In [8]:
Harness(df.spring_layout()).transpose().sample(2)
Out[8]:
In [9]:
%matplotlib inline
df.draw_circular()
In [10]: