Я пытаюсь визуализировать некоторые деревья решений, используя графическую визуализацию, как описано здесь. Насколько я понял ситуацию с одной стороны, нужно иметь графвиз, а также библиотеку/библиотеки python, чтобы иметь возможность взаимодействовать с этим из кода python.
Поэтому, чтобы сначала использовать Grapviz, я попытался установить graphviz через MacPorts с помощью следующей команды: sudo port install graphviz
после обновления моих MacPorts с помощью команды: sudo port selfupdate
как было описано здесь. Во-вторых, я установил graphviz_py и pydot через собственный менеджер пакетов Enthought Canopy и graphviz через: pip install graphviz
из терминала Python Canopy. Эти различные пакеты обсуждаются в случае с pydot здесь и в случае с graphviz здесь.
После выполнения вышеуказанных шагов я просто не смог ни отобразить фигуру в блокноте Jupyter, ни сохранить ее в виде файла PDF в некоторых папках.
Может ли кто-нибудь указать на то, что мне не хватает или я делаю неправильно! Погуглив какое-то время, я не смог найти решение в моем случае.
Я использую Macintosh с macOS High Sierra. Я использую MacPorts, чтобы получить базовые настройки по умолчанию, а не с распределенными пакетами и Enthought Canopy в качестве Python по умолчанию.
Весь код и возвращенные сообщения об ошибках находятся прямо ниже.
from sklearn import tree
import graphviz
#visualisation of decision trees
dot_data = tree.export_graphviz(DeciTreeModel, out_file=None)
graph = graphviz.Source(dot_data)
graph.render("Titanic",view=True)
ExecutableNotFoundTraceback (most recent call last)
<ipython-input-39-30a50c1271e0> in <module>()
5 dot_data = tree.export_graphviz(DeciTreeModel, out_file=None)
6 graph = graphviz.Source(dot_data)
----> 7 graph.render("Titanic",view=True)
/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/lib/python2.7/site-packages/graphviz/files.pyc in render(self, filename, directory, view, cleanup, format, renderer, formatter)
186 format = self._format
187
--> 188 rendered = backend.render(self._engine, format, filepath, renderer, formatter)
189
190 if cleanup:
/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/lib/python2.7/site-packages/graphviz/backend.pyc in render(engine, format, filepath, renderer, formatter, quiet)
181 """
182 cmd, rendered = command(engine, format, filepath, renderer, formatter)
--> 183 run(cmd, capture_output=True, check=True, quiet=quiet)
184 return rendered
185
/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/lib/python2.7/site-packages/graphviz/backend.pyc in run(cmd, input, capture_output, check, quiet, **kwargs)
148 except OSError as e:
149 if e.errno == errno.ENOENT:
--> 150 raise ExecutableNotFound(cmd)
151 else: # pragma: no cover
152 raise
ExecutableNotFound: failed to execute ['dot', '-Tpdf', '-O', 'Titanic'], make sure the Graphviz executables are on your systems' PATH
РЕДАКТИРОВАТЬ:
Используя фрагменты терминала, предложенные @Craig, я получил следующие результаты:
Gergely-Mathes-MacBook-Pro:~ gergelymathe$ port contents graphviz | grep /bin/
/opt/local/bin/acyclic
/opt/local/bin/bcomps
/opt/local/bin/ccomps
/opt/local/bin/circo
/opt/local/bin/cluster
/opt/local/bin/diffimg
/opt/local/bin/dijkstra
/opt/local/bin/dot
/opt/local/bin/dot2gxl
/opt/local/bin/dot_builtins
/opt/local/bin/dotty
/opt/local/bin/edgepaint
/opt/local/bin/fdp
/opt/local/bin/gc
/opt/local/bin/gml2gv
/opt/local/bin/graphml2gv
/opt/local/bin/gv2gml
/opt/local/bin/gv2gxl
/opt/local/bin/gvcolor
/opt/local/bin/gvgen
/opt/local/bin/gvmap
/opt/local/bin/gvmap.sh
/opt/local/bin/gvpack
/opt/local/bin/gvpr
/opt/local/bin/gxl2dot
/opt/local/bin/gxl2gv
/opt/local/bin/lefty
/opt/local/bin/lneato
/opt/local/bin/mm2gv
/opt/local/bin/neato
/opt/local/bin/nop
/opt/local/bin/osage
/opt/local/bin/patchwork
/opt/local/bin/prune
/opt/local/bin/sccmap
/opt/local/bin/sfdp
/opt/local/bin/tred
/opt/local/bin/twopi
/opt/local/bin/unflatten
/opt/local/bin/vimdot
и
Gergely-Mathes-MacBook-Pro:~ gergelymathe$ which dot
/opt/local/bin/dot
Будут ли эти результаты означать правильное поведение? Исходная проблема не решается. Он все еще сохраняется.
РЕДАКТИРОВАТЬ 1:
Я запустил echo $PATH
в терминале, как это было предложено @tripleee, и получил вывод
Gergely-Mathes-MacBook-Pro:~ gergelymathe$ echo $PATH
/opt/local/bin:/opt/local/sbin:/Users/gergelymathe/Desktop/Szakdolgozat/Munka/Program:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Library/TeX/texbin:/opt/X11/bin
So /opt/local/bin
is in my $PATH
.
РЕДАКТИРОВАТЬ 2:
Я выполнил свой $PYTHONPATH
в соответствии с этот пост с /opt/local/bin:/opt/local/sbin
в качестве исполняемых файлов graphviz на моем системном пути pythonic. Вы могли бы догадаться! Исходная ошибка по-прежнему сохраняется, несмотря на то, что пути содержат /opt/local/bin:/opt/local/sbin
. Выходные данные пути в случае моего терминала Canopy:
>>> import sys, pprint
>>> pprint.pprint(sys.path)
['',
'/opt/local/bin',
'/opt/local/sbin',
'/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/lib/python27.zip',
'/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/lib/python2.7',
'/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/lib/python2.7/plat-darwin',
'/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/lib/python2.7/plat-mac',
'/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/lib/python2.7/plat-mac/lib-scriptpackages',
'/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/lib/python2.7/lib-tk',
'/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/lib/python2.7/lib-old',
'/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/lib/python2.7/lib-dynload',
'/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/lib/python2.7/site-packages']
и в случае моего ноутбука Jupyter:
import sys
sys.path
['',
'/opt/local/bin',
'/opt/local/sbin',
'/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/lib/python27.zip',
'/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/lib/python2.7',
'/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/lib/python2.7/plat-darwin',
'/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/lib/python2.7/plat-mac',
'/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/lib/python2.7/plat-mac/lib-scriptpackages',
'/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/lib/python2.7/lib-tk',
'/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/lib/python2.7/lib-old',
'/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/lib/python2.7/lib-dynload',
'/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/lib/python2.7/site-packages',
'/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/lib/python2.7/site-packages/IPython/extensions',
'/Users/gergelymathe/.ipython']
Насколько я понял текущую ситуацию согласно этот пост, исходная ошибка не должна сохраняться!
РЕДАКТИРОВАТЬ 3:
Как отметил @tripleee в комментарии ниже, я проверил os PATH
из своего работающего ноутбука Jupyter. Что я получил:
import os
print(os.environ['PATH'])
/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/bin:/Users/gergelymathe/Library/Enthought/Canopy/edm/envs/User/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Library/TeX/texbin:/opt/X11/bin
, которое отличается от значения PATH
, полученного из терминала и указанного в разделе EDIT 1 моего поста. Может ли кто-нибудь указать, почему эти два разных и как их можно синхронизировать?
Любая дальнейшая помощь высоко ценится!
make sure the Graphviz executables are on your systems' PATH
т. е.: где находится исполняемый файлdot
? Это каталог в вашей системеPATH
? - person Jonathan March   schedule 06.12.2018/opt/local/bin
, куда MacPorts, насколько мне известно, обычно помещает исполняемый файл. Это может быть проблемой, потому что/opt/local/bin
является частью моей переменной$PATH
. - person Gergely Mathe   schedule 07.12.2018/opt/local/bin
вPATH
, который подвергается воздействию этой программы Python? Можете ли вы запустить ту же команду в командной строке? - person tripleee   schedule 10.12.2018PATH
. Не могли бы вы уточнить, что вы имеете в виду под «Можете ли вы запустить ту же команду в командной строке?» Большое спасибо! - person Gergely Mathe   schedule 11.12.2018dot -Tpdf -O Titanic
выполняется без ошибок? Возможно, вам придется воспроизвести некоторые механизмы, созданные вашим скриптом Python; но, по крайней мере, он не должен производить что-то глупое, например, неверную опцию или срок действия лицензии omg, заплатите больше денег. - person tripleee   schedule 11.12.2018dot -Tpdf -O Titanic
из командной строки, и это сработало. Я получил правильный вывод в формате pdf. Таким образом, ошибка, вероятно, связана с моим дистрибутивом Python, которым является Enthought Canopy. - person Gergely Mathe   schedule 11.12.2018PATH
, чем вы видите в подсказке. - person tripleee   schedule 11.12.2018PATH
своего ноутбука Jupyter черезsys.path
и получил другой вывод по сравнению сecho $PATH
с моего терминала. Поэтому я устал редактировать свой jupyterPATH
, как написано modules-in-jupyter">здесь, но добавление/opt/local/bin
в мой jupyterPATH
черезsys.path.append("/opt/local/bin")
не помогло. Я все еще получаю то же самое сообщение об ошибке. - person Gergely Mathe   schedule 12.12.2018PATH
. - person tripleee   schedule 12.12.2018sys.path
соответствуетPYTHONPATH
, а неPATH
— вы напечатали не то. Тот, кого нужно исследовать, этоimport os; print(os.environ['PATH
])` - person tripleee   schedule 08.01.2019PATH
из ноутбука jupyter отличается отPATH
из терминала (см. РЕДАКТИРОВАТЬ 1). Я не знаю, как эти два могут отличаться, например, как python видит другую системуPATH
. Не могли бы вы дать какое-то объяснение этой ситуации и как ее можно решить? Огромная благодарность за вашу очень ценную помощь! - person Gergely Mathe   schedule 09.01.2019