GraphVizのエラー対処(GraphViz’s executables not found)

こんにちは、にわこまです

今回は、Graphvizのエラー(Graphviz’s executables not found)の対処について書いていきたいと思います。

誤字脱字など、何かございましたら連絡をお願いし致します。

環境
OS : Windows10
ツール : Jupyter Notebook
Python Version : 3.7

 

 

スポンサードサーチ


GraphViz

私は、「東京大学のデータサイエンティスト育成講座」のChapter8-5-5の決定木の決定木モデル構築において、参考プログラムを実行したときにエラーが発生しました。

参考プログラムには、「pydotplusやgraphvizをインストールする必要があります」と注意書きがありました。

その注意の通りにpydotplusとgraphvizをインストールしましたが、以下のエラーが発生しました。

InvocationException: GraphViz's executables not found

 

解決方法

はじめに、「pydotplus」をインストールしていきます。

左下の検索窓に「anaconda prompt」と入力し、anaconda promptを起動させます。

そのコマンドプロンプトで、以下のコマンドを実行して「pydotplus」をインストールしました。

pip install pydotplus

 

次に、「graphviz」をインストールしていきます。

私はGraphVizのダウンロードページからインストーラー(graphviz-2.38.msi)をダウンロードしました。

GraphViz Windows Packagesのページはこちら

 

ダウンロードが完了したら「graphviz-2.38.msi」をダブルクリックしてインストールを開始します。

 

インストールを開始すると「この不明な発行元からのアプリがデバイスに変更を加えることを許可しますか?」ということを聞かれます。「はい」を選択して次に進みます。

 

基本的には、NEXTをクリックしていけば問題ありません。

NEXTをクリックします。

 

保存場所はどこでも問題ありません。私はC直下に保存しました。また「Everyone」にチェックを入れて、NEXTをクリックします。

 

NEXTをクリックします。

 

以下のようにインストールが始まります。

 

インストールが完了したらCloseをクリックします。これで「GraphViz」のインストールは完了です。

 

pydotplusとgraphvizをインストールしただけでは、参考プログラムは動きません。以下のように少しコードを書き加えなければいけません。

graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
graph.progs = {'dot': u"C:\\Graphviz2.38\\bin\\dot.exe"}  // 追加部分
Image(graph.create_png())

「C:\\Graphviz2.38\\bin\\dot.exe」は、保存した場所になります。

注意
・絶対パスで指定する必要がある。
・その際、バックスラッシュを重ねる(重ねないとエラーが発生する)


変更前の絶対パス➡「C:\Graphviz2.38\bin\dot.exe」
変更後の絶対パス➡「C:\\Graphviz2.38\\bin\\dot.exe」

 

以上でGraphvizのエラー対処は終了です。

 

 

まとめ

今回は、Jupyter Notebookで発生するGraphvizのエラーに対する処理について書いてみました。

みなさんのお役に立てたら幸いです。

 

最後に参考プログラムを書き記しておきます。以下のコードをコピペして実行してみてください。

絶対パスと書かれているところは、「保存したフォルダ+\\Graphviz2.38\\bin\\dot.exe」を指定してください。


保存した場所 ➡ 「C:\」
絶対パス ➡ 「C:\\Graphviz2.38\\bin\\dot.exe」

import pandas as pd
import requests, zipfile
import io
from sklearn.tree import  DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn import tree
import pydotplus
from sklearn.externals.six import StringIO
from IPython.display import Image

url = 'http://archive.ics.uci.edu/ml/machine-learning-databases/mushroom/agaricus-lepiota.data'
res = requests.get(url).content

mushroom = pd.read_csv(io.StringIO(res.decode('utf-8')), header=None)
mushroom.columns =['classes','cap_shape','cap_surface','cap_color',
                   'odor','bruises','gill_attachment','gill_spacing',
                   'gill_size','gill_color','stalk_shape','stalk_root',
                   'stalk_surface_above_ring','stalk_surface_below_ring',
                   'stalk_color_above_ring','stalk_color_below_ring',
                   'veil_type','veil_color','ring_number','ring_type',
                   'spore_print_color','population','habitat']
mushroom_dummy = pd.get_dummies(mushroom[['gill_color', 'gill_attachment', 'odor', 'cap_color']])
mushroom_dummy['flg'] = mushroom['classes'].map(lambda x: 1 if x == 'p' else 0)

X = mushroom_dummy.drop('flg', axis=1)
y = mushroom_dummy['flg']
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

model = DecisionTreeClassifier(criterion='entropy', max_depth=5, random_state=0)
model.fit(X_train, y_train)

dot_data = StringIO()
tree.export_graphviz(model, out_file=dot_data)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
graph.progs = {'dot': u"絶対パス"}
Image(graph.create_png())

 

エラーが発生せず、以下のような図が表示されたら正しく動作しています。

 

 

参考書籍

最後までお読みいただきありがとうございます。


スポンサードサーチ