学生パーティションで、日ごとの平均次数中心性を抽出する
ここでは、全ノードの平均次数中心性が、時間とともにプロットされるエッジ数と相関しているかを確認します。必ずしも強い相関があるとは限らないので、その様子を見ていきます。
この演習はコースの一部です
Python 中級ネットワーク解析
演習の手順
- エッジのサブセットを含む新しいグラフ
G_subを作成します。 - ノードメタデータを含めて、
Gからノードを追加します。 - 条件を満たすエッジを
.add_edges_from()メソッドで追加します。 nx.bipartite.projected_graph()を使い、G_subから学生側の射影G_student_subを取得します。nx.degree_centrality()(二部グラフ用ではない方)で、学生側射影の次数中心性を計算します。- 平均次数中心性をリスト
mean_dcsに追加します。追加前に必ずdc.values()をリストに変換してください。 - "Submit Answer" を押してプロットを確認しましょう!
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
from datetime import datetime, timedelta
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
# Initialize a new list: mean_dcs
mean_dcs = []
curr_day = dayone
td = timedelta(days=2)
while curr_day < lastday:
if curr_day.day == 1:
print(curr_day)
# Instantiate a new graph containing a subset of edges: G_sub
G_sub = ____
# Add nodes from G
G_sub.____(____)
# Add in edges that fulfill the criteria
G_sub.____([(u, v, d) for u, v, d in G.edges(data=True) if d['date'] >= curr_day and d['date'] < curr_day + td])
# Get the students projection
G_student_sub = ____
# Compute the degree centrality of the students projection
dc = ____
# Append mean degree centrality to the list mean_dcs
mean_dcs.____(np.mean(____(dc.values())))
# Increment the time
curr_day += td
plt.plot(mean_dcs)
plt.xlabel('Time elapsed')
plt.ylabel('Degree centrality.')
plt.show()