NetworkXでネットワーク構造の分析
networkxはPythonのグラフ理論を扱うためのライブラリで、様々なタイプのグラフ(有向グラフ、無向グラフなど)の作成、操作、解析が可能です。このライブラリはグラフのノードやエッジの属性を簡単に扱え、複雑なネットワーク構造の分析に広く使われています。
この記事では簡単なソーシャルネットワークグラフを作成してみます。
networkx ライブラリを使用してグラフを作成します。
import networkx as nx
G = nx.Graph()
次にノードを追加します。
people = ["太郎", "花子", "次郎", "理子", "健"]
G.add_nodes_from(people)
add_nodes_fromで人物をノードとしてグラフに追加します。
次に各人物の友人関係をエッジとしてグラフに追加します。
relationships = [("太郎", "花子"), ("花子", "次郎"), ("次郎", "太郎"), ("花子", "理子"), ("理子", "健")]
G.add_edges_from(relationships)
add_edges_fromでエッジの追加を行います。
それでは、作成したソーシャルネットワークグラフを可視化してみます。
import plotly.graph_objects as go
pos = nx.circular_layout(G)
edge_x = []
edge_y = []
for edge in G.edges():
x0, y0 = pos[edge[0]]
x1, y1 = pos[edge[1]]
edge_x.extend([x0, x1, None])
edge_y.extend([y0, y1, None])
node_x = [pos[node][0] for node in G.nodes()]
node_y = [pos[node][1] for node in G.nodes()]
edge_trace = go.Scatter(
x=edge_x, y=edge_y,
line=dict(width=2, color='grey'),
hoverinfo='none',
mode='lines')
node_trace = go.Scatter(
x=node_x, y=node_y,
mode='markers+text',
text=[node for node in G.nodes()],
textposition="top center",
hoverinfo='text',
marker=dict(showscale=False, size=10, color='lightgreen'))
fig = go.Figure(data=[edge_trace, node_trace],
layout=go.Layout(
title='ソーシャルネットワークグラフ',
titlefont_size=16,
showlegend=False,
hovermode='closest',
margin=dict(b=20,l=5,r=5,t=40),
annotations=[ dict(
text="Plotly graph",
showarrow=False,
xref="paper", yref="paper",
x=0.005, y=-0.002 ) ],
xaxis=dict(showgrid=False, zeroline=False, showticklabels=False),
yaxis=dict(showgrid=False, zeroline=False, showticklabels=False))
)
fig.show()
![](https://assets.st-note.com/img/1715734146531-920YG4ewGN.png?width=800)