问题与csv2rec和polyfit

时间:2012-08-02 13:54:12

标签: python matplotlib

我正在做我认为对我的数据进行简单回归的事情,但是有些事情是错误的。我使用csv2rec来读取我的数据,然后我打印回归参数m和b我得到nan nan。

如果您想要预览csv文件,请参阅以下内容:

"Oxide","ooh","oh",
"MoO",3.06,0.01,
"IrO",2.79,-0.23,

我想要的是两行的回归。 x = a.ohy = a.ooh

这是我正在使用的脚本

import matplotlib
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
from pylab import polyfit

a = mlab.csv2rec('rutilecsv.csv')

fig = plt.figure()
ax = fig.add_subplot(111)

ax.set_xlabel('E_OH / eV', fontsize=12)
ax.set_ylabel('E_OOH / eV', fontsize=12)

(m, b) = polyfit(a.oh, a.ooh, 1)

print m, b

ax.plot(a.oh, a.ooh, 'go')

plt.axis([-2, 3, 1, 6])
plt.show()

2 个答案:

答案 0 :(得分:1)

好的,只是为了把它放到床上,这正是你在缺少数据时会得到的症状:

"Oxide","ooh","oh",
"MoO",3.06,0.01,
"IrO",2.79,-0.23,
"ZZ",2.79,,

结果

In [7]: a.ooh
Out[7]: array([ 3.06,  2.79,  2.79])

In [8]: a.oh
Out[8]: array([ 0.01, -0.23,   nan])

In [9]: polyfit(a.oh, a.ooh, 1)
Out[9]: array([ nan,  nan])

如果您只想忽略丢失的数据,那么您只需将polyfit仅传递给存在两者的点:

In [15]: good_data = ~(numpy.isnan(a.oh) | numpy.isnan(a.ooh))

In [16]: good_data
Out[16]: array([ True,  True, False], dtype=bool)

In [17]: a.oh[good_data]
Out[17]: array([ 0.01, -0.23])

In [18]: a.ooh[good_data]
Out[18]: array([ 3.06,  2.79])

In [19]: polyfit(a.oh[good_data], a.ooh[good_data], 1)
Out[19]: array([ 1.125  ,  3.04875])

答案 1 :(得分:0)

要检查两件事:

  1. 值是否转换为

  2. 尝试['oh']和['ooh']访问矢量

  3. 并且可能在读取文件时使用选项名称来指定列名。