始める無料で始める

グラフに自己ループがあるかを確認する

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))
コードを編集して実行