グラフに自己ループがあるかを確認する
Eric が説明したように、NetworkX では同じノードで始まり同じノードで終わるエッジ(自己ループ)も扱えます。これはソーシャルネットワークのグラフとしては直感的ではないかもしれませんが、出発地点と到着地点を持つ移動(トリップ)ネットワークのようなデータをモデル化するのに有用です。
さらなる分析に進む前に、これを確認しておくと便利です。NetworkX にはそのためのメソッド nx.number_of_selfloops(G) が用意されています。
この演習および後続の演習では、assert 文が役に立ちます。assert は、その後に続く条件式が True かどうかを確認し、False の場合は AssertionError を送出します。
まずは IPython Shell で、nx.number_of_selfloops() に T を渡して、同じノードで始まり終わるエッジの数を取得してください。自己ループはいくつか人工的にグラフへ追加されています。この演習でのあなたの仕事は、これらのエッジを返す関数を書くことです。
この演習はコースの一部です
Pythonで学ぶネットワーク分析入門
演習の手順
- 引数
Gを1つ取る関数find_selfloop_nodes()を定義します。forループを使って、G内のすべてのエッジ(メタデータは除く)を走査します。- ノード
uがノードvと等しい場合:uをリストnodes_in_selfloopsに追加します。- リスト
nodes_in_selfloopsを返します。
- グラフの自己ループの数が、自己ループを持つノードの数と等しいことを確認します。これはすでに用意してありますので、"Submit Answer" を押して結果を確認してください!
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Define find_selfloop_nodes()
def ____:
"""
Finds all nodes that have self-loops in the graph G.
"""
nodes_in_selfloops = []
# Iterate over all the edges of G
for u, v in ____:
# Check if node u and node v are the same
if ____:
# Append node u to nodes_in_selfloops
____
return nodes_in_selfloops
# Check whether number of self loops equals the number of nodes in self loops
assert nx.number_of_selfloops(T) == len(find_selfloop_nodes(T))