スキップしてメイン コンテンツに移動

NetworkXで可視化 2

 NetworkXで一枚可視化が出来たので、今度は少し深入りしてみようと思います。

Software for Complex Networks — NetworkX 3.3 documentation

Greedy Coloringというものがありました。12面体ドデカヘドラのグラフです。


「greedy」という言葉の語源は、古英語の「grēdīg」に遡るそうです。この言葉は「欲しい」という意味の「grēd」から派生しており、もともとは「渇望している」「強く欲する」というニュアンスを持っており、現在の意味では「欲深い」「貪欲な」という意味だそうです。
Greedy alogorithmは貪欲法と呼ばれ、局所探索法と並んで近似アルゴリズムの最も基本的な考え方の一つだそうです。
Greedyな手法というと、最適化問題を解くためのアルゴリズムの一種で、各段階で局所的に最適な選択を行いながら全体の最適解に近づこうとする方法だそうです。具体的には、各ステップでその時点での最善の選択を行い、その選択が後のステップでも続いていく特徴があるそうです。

それでは、コードを見てみます。


# ライブラリーのインポート

import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
import matplotlib.colors as mpl


  1. numpyは、数値計算ライブラリ
  2. networkxは、グラフ構造を操作するためのライブラリ
  3. matplotlib.pyplotは、グラフを描画するためのライブラリ
  4. matplotlib.colorsは、カラーマッピングに使用されるライブラリ


# グラフの生成
G = nx.dodecahedral_graph()

  • nx.dodecahedral_graphで、ドデカヘドラ(12面体)グラフを生成します。

# グラフの色付け
graph_coloring = nx.greedy_color(G)
unique_colors = set(graph_coloring.values())

  1. nx.greedy_color(G)で、貪欲法を用いてグラフのノードに色を割り当てます。この方法では、隣接するノードが異なる色を持つようにします。
  2. unique_colorsで、割り当てられた色のユニークな集合を取得します。

# ノードの色の決定
graph_color_to_mpl_color = dict(zip(unique_colors, mpl.TABLEAU_COLORS))
node_colors = [graph_color_to_mpl_color[graph_coloring[n]] for n in G.nodes()]

  1. graph_color_to_mpl_colorで、ユニークな色をMatplotlibのカラーマップにマッピングします。
  2. node_colorsで、各ノードに対して、割り当てられた色をリストとして作成します。

# グラフの描画
pos = nx.spring_layout(G, seed=14)
nx.draw(
    G,
    pos,
    with_labels=True,
    node_size=500,
    node_color=node_colors,
    edge_color="grey",
    font_size=12,
    font_color="#333333",
    width=2,
)

  1. nx.spring_layout(G, seed=14)で、グラフのノードの配置を計算します(ここでは力学的レイアウトを使用)。
  2. nx.draw()で、グラフを描画します。ノードは色付けされ、エッジは灰色で描かれ、ラベルも表示されます。

# グラフの表示
plt.show()

  • plt.show()で、グラフを画面に表示します。




コメント

このブログの人気の投稿

Dockerを始めてみる。”お使いのPCでは実行できません”??

 Webアプリの開発環境を構築するために、Dockerを始めるまでのハマったところです。 ❶ Docker: Accelerated Container Application Development で のWindows用をダウンロードからAMD64を選択します。 ❷ダウンロードしたexeファイルをクリックします。 ❸しかし、使えない。 ❹再起動します。でも使えない。 ❺Dockerのトップページの下の方を見ると、Download Dockerのページがあります。先ほどダウンロードしたのはトップページの一番上からでしたが、Download DockerのGet Startedに入り、Docker Desktop for Windows - x86_64をダウンロードしてみます。 ❻今度はexeファイルをクリックでき、次に進めたので、Add shortcut to desktopを☑したままOKをクリックします。 ❼ダウンロードできたのでCloseをクリックします。 ❽デスクトップ上にはアイコンが作成されているので、アイコンをクリックします。 ❾利用規約を読んでOKをクリックします。個人利用なので問題ありませんが、商用利用では「小規模なビジネス向け」にあたるかで、線引きがあるようですね。小規模なビジネス向けは、従業員が250人未満、かつ、年間収益が1,000万米ドル(または相当する現地通貨)未満の商業活動だそうです。 よくたずねられる質問(FAQ) | Docker ドキュメント (matsuand.github.io) ❿アカウントを作成してDocker始められるようになりました。 まとめ AMD64ではなく、 x86_64 をダウンロードすること。

NetworkXで可視化

長文を読むのは大変ですよね。Pythonで自然言語処理をすることで、可視化する手法があるそうなので、挑戦してみます。 可視化の手段としてNetworkXが使えそうです。 Software for Complex Networks — NetworkX 3.3 documentation GalleryのAlgorithmsのところに「Betweenness Centrality」が紹介されていましたので、ダウンロードしてグラフを作成しました。紹介されていたものにはテキストがありませんでしが、テキストを表示するようにしました。 Network download (inetbio.org) 何をしているコードなのか調べます。 # ライブラリーのインストール from random import sample import networkx as nx import matplotlib.pyplot as plt random モジュールから sample 関数をインポートしています。 この関数は、リ ストなどから指定した数の要素をランダムに選ぶために使います。 networkx ライブラリを nx というエイリアスでインポートしています。 このライブラリは、ネットワークやグラフを作成・操作するための強力なツールです。 matplotlib ライブラリの pyplot モジュールを plt というエイリアスでインポートしています。 pyplot は、データの視覚化を行うための機能を提供します。 # データの読み込み G = nx.read_edgelist( "WormNet.v3.benchmark.txt" ) networkx の関数で、エッジリスト形式のデータを持つテキストファイルを読み込み、そのデータを使ってグラフオブジェクトを作成します。 エッジリストとは、ノード間の接続(エッジ)の情報をリスト形式で記述したもので、通常は2列の形式で、1行が2つのノードを表すことが多いです。このデータも1行に2つのノードが入っています。 # 実行速度を上げるためにランダムにノードを削除 num_to_remove = int ( len (G) / 1.5 ) nodes = sample( list (G.nodes), num_to_re...

VSCodeでDockerを使う

Dockerをインストールしたので、早速使えるようにVSCodeを立ち上げます。 ❶Dockerのインストール。VSCodeを立ち上げ、拡張機能から"Docker"を検索し、インストールを行う。 ❷ デスクトップ上にSample-Projectフォルダを作成する。 ❸VSCode上で、Open &Workspace FolderのOpen Folderをクリックします。 ❹VSCode上に、SAMPLE-PROJECTが表示されます。 ❺SAMPLE-PROJECTの2つ右横の"新しいフォルダ..."をクリックしてフォルダを作成します。webという名前にします。 ❻webフォルダを右クリックして、"新しいファイル..."をクリックします。ファイル名はindex.phpとして、以下のように打ち込みます。 ❼ターミナルでwebと同じ階層にymlファイルを作成します。"New-Item -Path "絶対パスからdocker-compose.yml" -ItemType File"と入力すると、空のymlファイルが作成されます。 ❽空のymlファイルの中身を以下のように打ち込みます。 ❾サーバーの起動を確認します。新しくターミナルを開いて、以下のように入力します。 ❿少し待つと、以下のようにCreatedとStartedと表示されます。 ⓫ブラウザで表示確認をします。アドレス欄に"localhost:8080"と入力すると、phpの設定情報が表示されます。 ⓫サーバーを停止するには、ターミナルで"docker-compose stop"と入力します。すると、❿のlocalhostのページも接続不可になります。 まとめ VSCodeの拡張機能でDockerを使えるのだったら、Dockerのインストールは不要だったのかも? とも思いますが、下準備が終わったので、さっそく使います。