1

データの単純な回帰と思われることを行っていますが、何かが間違っています。csv2rec を使用してデータを読み取りますが、回帰パラメーター m と b を出力すると、nan nan が得られます。

csv ファイルをプレビューする場合は、その一部を次に示します。

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

私が欲しいのは、2行の回帰です。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()
4

2 に答える 2

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])
于 2012-08-02T14:16:41.150 に答える
0

2 つの確認事項:

  1. 値は適切に変換されますか

  2. ベクトルにアクセスするには、a['oh'] と a['ooh'] を試してください

また、オプション名を使用して、ファイルを読み込むときに列名を指定することもできます。

于 2012-08-02T14:04:34.373 に答える