我正在做我认为对我的数据进行简单回归的事情,但是有些事情是错误的。我使用csv2rec来读取我的数据,然后我打印回归参数m和b我得到nan nan。
如果您想要预览csv文件,请参阅以下内容:
"Oxide","ooh","oh",
"MoO",3.06,0.01,
"IrO",2.79,-0.23,
我想要的是两行的回归。 x = a.oh
和y = 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()
答案 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)
要检查两件事:
值是否转换为
尝试['oh']和['ooh']访问矢量
并且可能在读取文件时使用选项名称来指定列名。