当我从ipython shell或ipython笔记本运行文件时,通常会显示绘图,但是当我从bash终端运行文件时它们不显示 - 从bash终端运行时其他一切正常.
示例python脚本(trial.py):
import matplotlib.pyplot as plt
print 'please, show my graph'
plt.plot([1,2,3], [1,2,3])
plt.show()
Run Code Online (Sandbox Code Playgroud)
这就是我得到的(情节没有显示):
[~/Desktop]$ python trial.py
please, show my graph
[~/Desktop]$
Run Code Online (Sandbox Code Playgroud)
如果我做
import matplotlib
matplotlib.use('TkAgg')
Run Code Online (Sandbox Code Playgroud)
在导入pyplot之前,当我从终端运行它时,会立即打开和关闭一个窗口.
我尝试过不同的方法导入模块但没有成功:
import matplotlib.pyplot as plt
import matplotlib.pylab as plt
from matplotlib import pyplot as plt
from matplotlib import pylab as plt
Run Code Online (Sandbox Code Playgroud)
我的文件中有plt.show()函数.
你知道我怎么解决它吗?
有关版本和安装的一些信息:
我在Mac OSX 10.11.3上.
In [61]: print matplotlib.__file__
/usr/local/lib/python2.7/site-packages/matplotlib/__init__.pyc
In [62]: print matplotlib.__version__
1.4.2
In [64]: print sys.version
2.7.9 (default, Apr 7 2015, 07:58:25)
[GCC 4.2.1 …Run Code Online (Sandbox Code Playgroud) 二进制单热(也称为一个K)编码在于为分类变量的每个不同值创建一个二进制列.例如,如果有一个颜色列(分类变量)采用值"红色","蓝色","黄色"和"未知",则二进制单热编码用二进制列替换颜色列'color =红色','颜色=蓝色'和'颜色=黄色'.我从pandas数据框架中的数据开始,我想使用这些数据来训练带有scikit-learn的模型.我知道有两种方法可以进行二进制单热编码,但这些方法对我来说都不令人满意.
Pandas和get_dummies在数据框的分类列中.只要原始数据框包含所有内容,此方法看起来就很好数据可用.也就是说,在训练,验证和测试集中分割数据之前,您需要执行单热编码.但是,如果数据已经分成不同的集合,则此方法不能很好地工作.为什么?因为其中一个数据集(例如,测试集)可以包含给定变量的较少值.例如,可能会发生这样的情况:虽然训练集包含变量颜色的红色,蓝色,黄色和未知值,但测试集仅包含红色和蓝色.因此,测试集的最终列数将少于训练集.(我不知道新列是如何排序的,如果甚至具有相同的列,则每个列的顺序可能不同).
Sklearn和DictVectorizer这解决了上一个问题,因为我们可以确保将相同的转换应用于测试集.但是,转换的结果是一个numpy数组而不是pandas数据框.如果我们想要将输出恢复为pandas数据帧,我们需要(或者至少这是我的方式):1)pandas.DataFrame(data = DictVectorizer转换的结果,index =原始pandas数据的索引frame,columns = DictVectorizer().get_features_names)和2)沿索引连接结果数据框,原始数据框包含数字列.这有效,但有点麻烦.
如果我们在训练和测试集中分割数据,是否有更好的方法在pandas数据帧中进行二进制单热编码?
假设您有以下 SQL 表:
A B C
2 1 4
3 4 5
3 1 1
1 4 0
5 0 1
Run Code Online (Sandbox Code Playgroud)
并且您想要添加/显示一个列,其中包含 A 列对于 B 列的每个不同值的平均值(或任何其他聚合函数)。您想要保留所有列。所以结果会是这样的:
A B C avg(A)|B
2 1 4 2.5
3 4 5 2.0
3 1 1 2.5
1 4 0 2.0
5 0 1 5.0
Run Code Online (Sandbox Code Playgroud)
据我所知,在 pandas 中执行此操作的最佳方法是:
>>> df['avg(A)|B'] = df.groupby('B')['A'].transform('mean')
>>> df
A B C avg(A)|B
0 2 1 4 2.5
1 3 4 5 2.0
2 3 1 1 2.5
3 1 …Run Code Online (Sandbox Code Playgroud)