グラフに対するクエリ
グラフの基本的な性質を把握し、NetworkX の描画機能で一部を可視化する練習ができたところで、次はノードやエッジに対してどのようにクエリできるかを見ていきます。ここでは「関心のあるノード」と「関心のあるエッジ」を探します。これには、動画で Eric が紹介した .nodes() と .edges() メソッドを使います。.nodes() は Node view のイテラブルを、.edges() は各タプルにそのエッジに含まれるノードが入った Edge view のイテラブルを返します。これらのメソッドにキーワード引数 data=True を渡すと、ノードやエッジに紐づくメタデータも取得できることを思い出してください。
これらのクエリは、リスト内包表記を使って1行で効率よく書きます。リスト内包表記を復習したい場合は、DataCamp の Python Data Science Toolbox コースの Part 2 を参照してください。リスト内包表記の書式は次のとおりです。
[ 出力式 for イテレータ変数 in イテラブル if 述語式 ]。
ここでは、イテラブル と 述語式 を埋めてください。解答を提出する前に、IPython Shell でグラフを試しながらプロトタイプしてもかまいません。
この演習はコースの一部です
Pythonで学ぶネットワーク分析入門
演習の手順
- リスト内包表記を使って、グラフ
Tから'occupation'ラベルが'scientist'のノードのリストを取得します。- 出力式
nは、イテレータ変数nとdとともにすでに指定されています。あなたのタスクは、イテラブル と 条件式 を埋めることです。 - ノードにアクセスするには
Tの.nodes()メソッドを使い、ノードのメタデータを取得するために必ずdata=Trueを指定します。 - イテレータ変数
dは辞書です。ここで注目するキーは'occupation'、注目する値は'scientist'です。
- 出力式
- リスト内包表記を使って、少なくとも6年間形成されている、つまり 2010年1月1日 より前に形成されたエッジのリストを取得します。
- ここでもタスクは イテラブル と 条件式 を埋めることです。
- エッジにアクセスするには
Tの.edges()メソッドを使います。エッジのメタデータも取得するようにしてください。 - 日付はメタデータの辞書
dにdatetime.dateオブジェクトとして'date'キーの下に格納されています。たとえば 2009年1月1日 を参照するには、辞書の値はdate(2009, 1, 1)となります。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Use a list comprehension to get the nodes of interest: noi
noi = [n for n, d in ____ if d['____'] == '____']
# Use a list comprehension to get the edges of interest: eoi
eoi = [(u, v) for u, v, d in ____ if ____ < ____]