Hierarchal Louvain
This notebook illustrates the embedding of a graph by the hierarchical Louvain algorithm.
[1]:
from IPython.display import SVG
[2]:
import numpy as np
[3]:
from sknetwork.data import karate_club, painters, movie_actor
from sknetwork.embedding import LouvainNE
from sknetwork.visualization import svg_graph, svg_bigraph
Graphs
[4]:
graph = karate_club(metadata=True)
adjacency = graph.adjacency
labels = graph.labels
[5]:
louvain = LouvainNE(2)
embedding = louvain.fit_transform(adjacency)
[6]:
image = svg_graph(adjacency, position=embedding, labels=labels)
SVG(image)
[6]:
Directed graphs
[7]:
graph = painters(metadata=True)
adjacency = graph.adjacency
position = graph.position
names = graph.names
[8]:
louvain = LouvainNE(2)
embedding = louvain.fit_transform(adjacency)
[9]:
image = svg_graph(adjacency, position=embedding, names=names)
SVG(image)
[9]:
Bipartite graphs
[10]:
graph = movie_actor(metadata=True)
biadjacency = graph.biadjacency
names_row = graph.names_row
names_col = graph.names_col
[11]:
louvain = LouvainNE()
louvain.fit(biadjacency)
[11]:
LouvainNE(n_components=2, scale=0.1)
[12]:
embedding_row = louvain.embedding_row_
embedding_col = louvain.embedding_col_
[13]:
image = svg_bigraph(biadjacency, names_row, names_col,
position_row=embedding_row, position_col=embedding_col,
color_row='blue', color_col='red')
SVG(image)
[13]: