MENU

【簡単便利】Graphvizの概要とPythonで使うためのインストール手順

graphviz は、データ分析で使われる「ネットワーク分析」や「決定木分析」、「階層化クラスタリング」などの結果を可視化するためのツールです。

本記事では、graphviz の入手先と、Pythonから利用するためのインストール手順、日本語の対応方法についてスクリーンショット付きで分かり易く解説しています。

目次

graphviz とは

graphviz(Graph Visualization Software)とは、グラフと呼ばれるノード(楕円)とエッジ(楕円同士を繋ぐ線)で構成された図を描画してくれるオープンソースのツールです。

グラフと言っても折れ線や棒グラフのような一般的なグラフとは異なり、テキストベースの専用言語でノードやエッジを定義することで決定木やネットワーク図を描画します。

graphviz の動作

graphviz は、dot 言語と呼ばれる記述に従ってノードとエッジを描画します。また、dot言語で記述されたファイルの拡張子は .dot とすることが一般的です。

コマンド:dot -Tjpg -o output.jpg sample.dot

digraph {
nodeA -> nodeB
nodeA -> nodeB
nodeB -> nodeC
nodeC -> nodeA [color=blue]
}

出力結果:output.jpg

graphviz はノードやエッジの形状に関する数多くの指定ができるようになっています。詳細については公式サイトのドキュメントをご確認下さい。

インストール手順

graphvis はインストーラーを使ってインストールすることも可能ですが、ポータブル環境向けに必要なファイルを指定フォルダに展開することも可能です。

  • graphviz のダウンロード
    インストーラまたはZIPファイルをダウンロードします
  • graphviz のインストール
    インストーラを実行するか、ZIPファイルを解凍し、PAHTを通します。
  • Python ライブラリのインストール
    pip コマンドを使ってライブラリをインストールします。

graphvisのダウンロード

下記の公式サイトを少しスクロールするとインストーラーのリンクが見つかるので、ダウンロードします。パソコンにインストールしたい場合は EXE installer を、ポータブル環境に入れたい場合は ZIP Archive をダウンロードしてください。

https://graphviz.org/download

graphviz のインストール

インストーラー(EXE installer)は、 ZIPファイル(ZIP Archive)の中身を「C:¥Program Files\Graphviz」に解凍し、環境変数にPATHを登録するところまで行ってくれます。

環境変数への登録を行わないようインストーラーに指示し、インストールフォルダを指定すれば、ZIPファイルを自力で解凍するのと同じ結果になります。

ZIPファイルを解凍(ZIP Archive )

ダウンロードしたZIPファイルをポータブル環境のフォルダに解凍し、bin にPATHを通すだけで作業は完了です。

インストーラー使用(EXE installer)

画面の指示に従ってインストールするだけですが、最初の画面で「Add Graphviz to the system PATH for all users 」または「Add Graphviz to the system PATH for current user」のどちらかを選択しておいてください。

<インストール画面>

Python ライブラリのインストール

Python から graphviz を使えるようにするために、下記の pip を実行してください。Pythonはpydotplusを使って 描画したい内容(例えば決定木など)に応じて dot言語を生成し、graphviz を使って実際にグラフを描画します。

pip install graphviz
pip install pydotplus

動作確認

コマンドプロンプトを起動し、次のコマンドを実行してください。

echo graph { a -- b } | dot -Tjpg -o output.jpg

インストールが成功しており、かつ環境変数にPATHが登録されている場合、カレントディレクトリに output.jpg というファイルが生成され、次の画像が格納されています。

日本語の表示方法(文字化け対策)

graphviz で日本語を含むグラフを描かせると文字化けします。しかし、日本語フォントを指定してあげれば問題なく表示できます。

日本語フォントの方法には2通りあって、1つはコマンドライン引数で指定する方法、もう1つはdotファイルに記述する方法です。

コマンドライン引数によるフォント指定

フォントはノード、エッジ、グラフのそれぞれに指定可能で、頭文字を使った引数が用意されています。

  • ノードのフォント指定:-Nfontname=フォント名
  • エッジのフォント指定:-Efontname=フォント名
  • グラフのフォント指定:-Gfontname=フォント名
dot -Tjpg -Nfontname="Meiryo" -Efontname="Meiryo" -Gfontname="Meiryo" -o output.jpg O:\DataAnalysis\src\sample.dot

dotファイルによるフォント指定

dotファイルにおいても、ノード、エッジ、グラフのそれぞれに指定可能です。記述する位置は決まっており、dot言語の '{' の次に指定記述しないと文字化けが治りませんのでご注意ください。

  • ノードのフォント指定:graph [fontname = "フォント名 "]
  • エッジのフォント指定:node [fontname = "フォント名 "]
  • グラフのフォント指定:edge [fontname = "フォント名 "]
digraph{
  graph [fontname = "MS Gothic"]
  node [fontname = "MS Gothic"]
  edge [fontname = "MS Gothic"]
  
  操作A -> 操作B
  操作B -> 操作C
  操作C -> 操作D
  操作A -> 操作B
  操作B -> 操作C
}

dotファイルをゼロから自分で作成する場合は、この方法で解決できますが、例えば sklearn の export_graphviz 関数などのように、関数の戻り値として dot ファイルが返される場合はどうすればいいでしょうか。

答えは、replace でフォント名を置き換えることです。

まず、最初に export_graphviz() 関数の戻り値の中身がどうなっているか確認します。

'digraph Tree {\nnode [shape=box, style="filled, rounded", color="black", fontname="helvetica"] ;\nedge [fontname="helvetica"] ;\n0 [label=<XXXXX &le; 6.25<br/>gini = 0.044<br/>samples = 5760<br/>value = [9, 5630, 106, 8, 7]<br/>class = XXXXX>~~~~~省略~~~~~

fontname="helvetica" というフォント名が指定されていることが確認できましたので、 replace コマンドで "Meiryo" に置き換える1行を追加すれば、文字化けが回避できます。

    dot_data = export_graphviz(~省略~)
    
    # pydotplusを使用してDOTデータからグラフを生成
    dot_data = dot_data.replace('fontname="helvetica"','fontname="Meiryo"')

まとめ

Graphvisは、グラフと呼ばれるノードとエッジで構成された図を描画してくれるオープンソースのツールであり、Phthon でネットワーク図や決定木を作成する場合に欠かせません。

インストールも簡単でポータブル環境にも対応できますので、また使ったことのない方は、是非これを機会に使ってみて下さい。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次