質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.72%

pydotのエラー(画像が表示されない)

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 508

essa

score 50

20190903追記

イメージ説明

左がuserのパスで右はシステムのパスです。

お世話になります。
標記について教えてほしいことがあります。

import numpy as np
import pandas as pd
from sklearn import tree
from sklearn.tree import export_graphviz
from IPython.display import Image
from sklearn.externals.six import StringIO
import pydot

df = pd.read_csv("hogehoge.csv")

features = list(df.columns[:5])
y = df["hogehoge"]
X = df[features]

clf = tree.DecisionTreeClassifier()
clf = clf.fit(X,y)


dot_data = StringIO()
tree.export_graphviz(
    clf,
    out_file=dot_data,
    feature_names = features)

(graph,) = pydot.graph_from_dot_data(dot_data.getvalue())
Image(graph.create_png())

と実行したところ、下記のようなエラーが発生しました。

---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
~\Anaconda\lib\site-packages\pydot.py in create(self, prog, format, encoding)
   1914                 arguments=arguments,
-> 1915                 working_dir=tmp_dir,
   1916             )

~\Anaconda\lib\site-packages\pydot.py in call_graphviz(program, arguments, working_dir, **kwargs)
    135         stdout=subprocess.PIPE,
--> 136         **kwargs
    137     )

~\Anaconda\lib\subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors, text)
    755                                 errread, errwrite,
--> 756                                 restore_signals, start_new_session)
    757         except:

~\Anaconda\lib\subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, unused_restore_signals, unused_start_new_session)
   1154                                          os.fspath(cwd) if cwd is not None else None,
-> 1155                                          startupinfo)
   1156             finally:

FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。

During handling of the above exception, another exception occurred:

FileNotFoundError                         Traceback (most recent call last)
<ipython-input-29-2b79d1a0aeb8> in <module>()
     11 (graph,) = pydot.graph_from_dot_data(dot_data.getvalue())
     12 #Image(graph.create_png())
---> 13 print(graph.create_png())

~\Anaconda\lib\site-packages\pydot.py in new_method(f, prog, encoding)
   1721                 """Refer to docstring of method `create`."""
   1722                 return self.create(
-> 1723                     format=f, prog=prog, encoding=encoding)
   1724             name = 'create_{fmt}'.format(fmt=frmt)
   1725             self.__setattr__(name, new_method)

~\Anaconda\lib\site-packages\pydot.py in create(self, prog, format, encoding)
   1920                 args[1] = '"{prog}" not found in path.'.format(
   1921                     prog=prog)
-> 1922                 raise OSError(*args)
   1923             else:
   1924                 raise

FileNotFoundError: [WinError 2] "dot" not found in path.

dotがパスにないというエラーが発生しております。
しかし、下記を実行してみたところ、実行できています。
イメージ説明

どのように対応すればよいでしょうか?

ご存知の方がいましたら、教えて頂けないでしょうか?

どうぞよろしくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • essa

    2019/09/02 23:23

    OSはWindows10です。

    キャンセル

  • meg_

    2019/09/03 00:39 編集

    Windows8で試したところ、表示できました。(AnacondaでPython3.7で実行しました)

    ※features = list(df.columns[:5])でエラーが出ましたので、features = list(df.columns[1:5])に変更しました。

    キャンセル

  • essa

    2019/09/03 22:02

    graphviz はインストール済みでしょうか?

    キャンセル

回答 2

check解決した方法

0

解決しました。

pydotではなく、pydotplusを入れてみたところ、画像ができました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

このエラーは Graphviz に含まれる dot というアプリケーションが見つからないことを意味します。
numpy.dot は関係ありません。

FileNotFoundError: [WinError 2] "dot" not found in path.

Python で graphviz を使ったライブラリとして、pydot、pygraphviz などがありますが、いずれも graphviz 本体を別途インストールする必要があります。

以下の手順でインストール及び PATH を通す作業を行ってください。

  • 1. 公式サイト より graphviz をインストールする。

  • 2. dot.exe がある場所を PATH 環境変数に登録する。

dot.exe がある場所は環境によって違う可能性がありますが、自分の場合、以下にあります。

C:\Program Files (x86)\Graphviz2.38\bin\dot.exe

この場合、C:\Program Files (x86)\Graphviz2.38\bin を PATH 環境変数に追加します。

  • 3. PC を再起動する。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/09/03 22:43

    五月雨で申し訳有りません

    notebook上で
    !which dot
    とうつと、
    /cygdrive/c/Program Files (x86)/Graphviz2.38/bin/dot
    と表示されます

    キャンセル

  • 2019/09/04 00:54

    すいません。今コメントを確認しました。
    解決したようでよかったです。

    キャンセル

  • 2019/09/04 21:41

    いえいえ。
    毎回回答していただき、ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.72%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる