目次:
ビデオ: Think Japan IBM Code Day [DA-1] 10万件もらくらく!Python Pandasを利用したデータ変換・データ分析 2024
ほとんどのデータ科学者は、ある時点でグラフデータを処理する必要があります。 Pythonはその機能を提供します。 1つのWebページがハイパーリンクを介して別のWebページにどのように接続されているかなど、他のデータポイントに接続されているデータポイントを想像してみてください。これらのデータポイントの各々は、 ノード である。ノードは、 リンク を使用して相互に接続します。
すべてのノードが他のすべてのノードにリンクするわけではないので、ノード接続が重要になります。ノードとそのリンクを分析することで、街路や高速道路を使用して仕事から家に至る最善の方法を定義するなど、データサイエンスのあらゆる面白いタスクを実行できます。
隣接行列の理解
隣接行列 は、グラフのノード間の接続を表します。 1つのノードと別のノードとの間に接続がある場合、マトリックスは0より大きい値を示します。マトリックス内の接続の正確な表現は、グラフが方向付けられているかどうか(接続の方向が重要)または無向であるかどうかによって異なります。
多くのオンライン事例の問題は、著者が説明のために単純にしておくことです。しかし、実世界のグラフは膨大なものであり、単に視覚化するだけで簡単に分析することはできません。小さな街でも街の交差点を考える際に必要となるノードの数について考えてみてください。他の多くのグラフははるかに大きく、単にそれらを見ると、興味深いパターンは決して現れません。データ科学者は隣接行列を使って複雑なグラフを提示する際に問題を呼んでいます。 hairball
<! - 2 - >隣接行列の解析の鍵は、それらを特定の方法でソートすることです。たとえば、実際の接続以外のプロパティに従ってデータをソートすることができます。道路接続のグラフには、道路が最後にデータで舗装された日付が含まれている場合があります。これにより、最善の修復を行っている通りに基づいて誰かを誘導するパターンを探すことができます。要するに、グラフデータを有用にすることは、そのデータの編成を特定の方法で操作することになります。
<! - 9 - >NetworkXの基本の使用
すべてのコードを一から書き直す必要がある場合は、グラフの操作が難しくなる可能性があります。幸いにも、PythonのNetworkXパッケージは、複雑なネットワーク(グラフ)の構造、動力学、および機能の作成、操作、および研究を容易にします。このパッケージを使って、有向グラフやマルチグラフを操作することもできます。
NetworkXの主な強調点は、ヘアボールの問題をすべて回避することです。単純な呼び出しを使用すると、グラフや隣接行列を視点から扱う複雑さが大幅に軽減されます。次の例は、NetworkXが提供するグラフの1つから基本的な隣接行列を作成する方法を示しています。
import networkxをnx G = nxとして作成します。 cycle_graph(10)A = nx。 adjacency_matrix(G)print(A。todense())
この例は、必要なパッケージをインポートすることから始まります。次に、cycle_graph()テンプレートを使用してグラフを作成します。グラフには10個のノードがあります。 adjacency_matrix()を呼び出すと、グラフから隣接行列が作成されます。最後のステップは、以下に示すように、出力を行列として出力することです:<0 0 0 0 0 0 0 0 0 1> [1 0 1 0 0 0 0 0 0 0] [0 1 0 1 0 0 0 0 0 0] [0 0 1 0 1 0 0 0 0 0] [0 0 0 1 0 1 0 0 0 0] [0 0 0 1 0 0 0 0 0] [0 0 0 0 0 1 0 1 0 0] [0 0 0 0 0 0 1 0 1 0] [0 0 0 0 0 0 0 1 0 1] [1 0 0 0 0 0 0 1 0]]
あなたはテスト目的のために独自のグラフを作成します。 NetworkXサイトには、使用できる標準のグラフタイプがいくつか記載されています。これらのタイプはすべて、IPythonで利用できます。
グラフを生成した後のグラフの見方は興味深いです。次のコードは、グラフを表示します。
元のグラフをプロットする。
import matplotlib。 pyplotをplt nxとします。 draw_networkx(G)plt。 show()プロットは、ノード1と5の間にエッジを追加できることを示しています。add_edge()関数を使用してこのタスクを実行するために必要なコードは次のとおりです。
グラフの追加をプロットする。 G。 add_edge(1,5)nx。 draw_networkx(G)plt。 show()