ソーシャルネットワーク分析 NetworkX

ソーシャルネットワーク分析

ソーシャルネットワークの分析について考えます。

仮想的な友達の関係を持つユーザーのネットワークを考えてみます。

問題:

あるソーシャルネットワークのユーザー間の友達関係を表すデータがあります。
このネットワークで、各ユーザーの“友達の数”を計算し、最も多くの友達を持つユーザーを見つけてください。

以下は、友達関係を表すデータとNetworkXを使用して問題を解決するPythonコードの例です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import networkx as nx
import matplotlib.pyplot as plt

# ソーシャルネットワークの友達関係データ(例)
friendship_data = {
'Alice': ['Bob', 'Charlie', 'David'],
'Bob': ['Alice', 'Eve'],
'Charlie': ['Alice', 'Eve', 'David'],
'David': ['Alice', 'Charlie'],
'Eve': ['Bob', 'Charlie']
}

# グラフの作成
G = nx.Graph(friendship_data)

# 各ノード(ユーザー)の友達の数を計算
friends_count = {node: len(neighbor_list) for node, neighbor_list in G.adjacency()}

# 最も多くの友達を持つユーザーを見つける
most_friends_users = [user for user, count in friends_count.items() if count == max(friends_count.values())]

print("最も多くの友達を持つユーザー:", most_friends_users)
print("友達の数:", max(friends_count.values()))

# グラフの描画
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_size=500, node_color='lightblue', font_size=12, font_color='black')
labels = nx.get_edge_attributes(G, 'weight')
nx.draw_networkx_edge_labels(G, pos, edge_labels=labels)
plt.show()

このコードは、友達関係データをグラフに変換し、友達の数に基づいてユーザーを可視化しています。

最も多くの友達を持つユーザーは“Alice”“Charlie”であり、そのユーザーが中心に表示されます。

グラフは友達関係を視覚的に示しています。

ソースコード解説

コードの詳細を説明します。

1. import networkx as nxおよびimport matplotlib.pyplot as plt

NetworkXとMatplotlibライブラリをインポートしています。
これらのライブラリは、グラフ理論の操作とグラフの描画に使用されます。

2. friendship_data

ソーシャルネットワークの友達関係データを表す辞書です。
各ユーザー(キー)に対して、そのユーザーが友達である他のユーザー(値のリスト)がリストされています。

3. G = nx.Graph(friendship_data)

友達関係データを元に、NetworkXのGraphオブジェクトを作成しています。
このグラフはユーザー(ノード)と友達関係(エッジ)を表します。

4. friends_count

各ノード(ユーザー)の友達の数を計算するための辞書です。
ノードをキーとし、友達の数を値として持ちます。
G.adjacency()を使用して、各ノードの隣接ノード(友達)を取得し、その数を計算しています。

5. most_friends_users

最も多くの友達を持つユーザーを見つけるためのリストです。
friends_countを使用して、最大の友達の数を持つユーザーをリストアップします。

6. print("最も多くの友達を持つユーザー:", most_friends_users)およびprint("友達の数:", max(friends_count.values()))

最も多くの友達を持つユーザーとその友達の数を表示します。

7. グラフの描画部分:

  • pos = nx.spring_layout(G)
    Spring Layoutアルゴリズムを使用して、グラフのノードの配置を計算します。
    これにより、ノードが視覚的に整然と配置されます。
  • nx.draw():ノードとエッジを含むグラフを描画します。
    ノードは青色で表示され、ノードにはラベル(ユーザー名)が付きます。
  • nx.draw_networkx_edge_labels():エッジにラベルを表示し、エッジのラベルには友達の数が表示されます。
  • plt.show():グラフを表示します。

このコードを実行することで、ソーシャルネットワークの友達関係が視覚化され、最も多くの友達を持つユーザーが特定されます。

グラフは友達関係を視覚的に理解するのに役立ちます。

結果解説

実行結果とグラフについて詳しく説明します。

1. 結果:

  • 最も多くの友達を持つユーザー: [‘Alice’, ‘Charlie’]
  • 友達の数: 3

この結果は、ユーザー”Charlie”と”David”がそれぞれ3人の友達を持つことを示しています。
これらのユーザーが最も友達が多いユーザーです。

2. グラフ:

  • グラフは5つのノード(ユーザー)と友達関係を示すエッジ(線)から構成されています。
  • ノードはユーザーを表し、エッジは友達関係を表しています。
  • ノードの位置は、Spring Layoutアルゴリズムによって計算され、視覚的に整然と表示されています。
  • ノードは青色で表示され、ノードのラベルはユーザー名が表示されています。
  • エッジには重み(友達関係の数)が表示されており、エッジラベルに友達の数が示されています。

グラフの視覚化により、各ユーザー間の友達関係が直感的に理解できます。

例えば、”Alice”と”Bob”の友達関係は双方向で、”Alice”と”Charlie”の友達関係も双方向です。

“Charlie”は”David”とも友達です。

このグラフを用いて、友達関係を分析したり、ユーザー間のつながりを可視化したりすることができます。