2015-05-08 101 views
5

Python对我来说是比较新的。Python:NameError:全局名称'dot_parser'未定义

我试图运行“Scikit Python中的机器学习”一书的泰坦尼克号机器学习示例。使用决策树的分类工作正常(clf被正确定义),但如果我想要可视化决策树(请参阅下面的代码片段),我得到以下错误消息(从IPython复制)。

--------------------------------------------------------------------------- 
NameError         Traceback (most recent call last) 
<ipython-input-34-15b1b4a5d909> in <module>() 
     3 dot_data = StringIO.StringIO() 
     4 tree.export_graphviz(clf, out_file = dot_data, feature_names = ['PClass', 'AgeFill', 'Gender']) 
----> 5 graph = pydot.graph_from_dot_data(dot_data.getvalue()) 
     6 graph.write_png('titanic.png') 

C:\Users\885299\AppData\Local\Continuum\Anaconda32\lib\site-packages\pydot.pyc in graph_from_dot_data(data) 

    218  """ 
    219 
--> 220  return dot_parser.parse_dot_data(data) 
    221 
    222 
NameError: global name 'dot_parser' is not defined 

有人能帮助我吗?

代码片断,我用(类似于书)是:

import pydot, StringIO 

dot_data = StringIO.StringIO() 
tree.export_graphviz(clf, out_file = dot_data, feature_names = ['Class', 'Age', 'Gender']) 
graph = pydot.graph_from_dot_data(dot_data.getvalue()) 
graph.write_png('titanic.png') 

from IPython.core.display import Image 
Image(filename = 'titanic.png') 
+1

欢迎堆栈交流!我想表达感谢,希望能够把一个很好的问题放在一起。我建议你不要说“有人可以帮我吗?”从未来的职位,因为它可能是SO社区的许多成员的红旗。否则,这看起来像一个坚实的问题。 – amccormack

+0

''dot_parser''是什么包?你有没有导入它(就像你已经导入''pydot''和''StringIO'')? –

回答

0

有什么似乎是在github上一个related issue。建议确保您“已安装pyparser库并对其进行更新”。但是,我很确定他们的意思是pyparsing库。

您可以通过运行pip install pyparsing

安装pyparsing您可以通过运行pip install -U pyparsing

此外,related stackoverflow question该建议卸载pyparsing,然后重新安装pyparsing和pydot更新pyparsing。

+0

非常感谢您的及时答复! –

+0

只是一个小问题:在Windows PC上,我应该在命令行上输入pip install pyparsing吗?如果是这样,在哪个目录? –

+0

python版本3.4之前''pip'不会安装python。这里是一个很棒的[SO Post](http://stackoverflow.com/a/12476379/228489),介绍如何在windows上安装'pip'。 – amccormack

1

如果你使用Python 3,使用pydotplus而不是pydot对我来说工作得很好。

Here is the github repo

+0

虽然这在理论上可以回答的问题,[这将是优选的](// meta.stackoverflow.com/q/8259),包括在这里的答案的主要部分,并提供链路参考。 – NathanOliver

0

我用下面,并得到了它与Python3工作。 Pyparser 2.2.0与pydot兼容。

pip install pyparsing==2.2.0 
pip install pydot 

这个安装了pydot 1.2.3。

如果您有任何预先安装的pydot软件包,请先用pip uninstall pydot将它们卸载并按上述步骤进行全新安装。

0

伟大的解决方案谢谢。我在Ubuntu 14.04上遇到了同样的问题。只是几句话:当我尝试卸载pyparsing和pydot我有一个错误:在

/usr/lib/python2.7/dist-packages

不卸载pydot,通过OS

拥有

我解决了升级与PIP sudo pip install --upgrade pip

,然后按照下面的命令: sudo -H pip uninstall pydot sudo -H pip uninstall pyparsing 并重新安装: sudo -H pip install pyparsing sudo -H pip install pydot