@xshangtiao (syu kami)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

python csvファイルのデータのフィッティング

pythonで2つのcsvファイルのデータをxとyにしてそれを一次式でフィッティングするやり方を教えてください。
現状としては2つのデータを読み込み散布図を表示するところまでやることができました。なのでフィッティングのやり方を教えてくださいよろしくお願いします。

サンプルデータ

x = sotu_data
y = sotuke_data

近似直線の式の a と b が入ったタプルを得る

p = np.polyfit(x, y, 1)

一次関数の式のオブジェクトを生成する

f = np.poly1d(p)

散布図と近似直線を描く

plt.scatter(x, y)
plt.plot(x, f(x))

このようなコードを書いて実行したのですがエラーが出てしまいました。

TypeError Traceback (most recent call last)
in
1 # 近似直線の式の a と b が入ったタプルを得る
----> 2 p = np.polyfit(sotu_data, sotuke_data, 1)
3
4 # 一次関数の式のオブジェクトを生成する
5 f = np.poly1d(p)

~/.pyenv/versions/3.6.5/lib/python3.6/site-packages/numpy/lib/polynomial.py in polyfit(x, y, deg, rcond, full, w, cov)
551 raise ValueError("expected deg >= 0")
552 if x.ndim != 1:
--> 553 raise TypeError("expected 1D vector for x")
554 if x.size == 0:
555 raise TypeError("expected non-empty vector for x")

TypeError: expected 1D vector for x

よろしくお願いします。

0 likes

1Answer

質問日から大分時間が経ったのでもう解決済みかもしれませんが。

エラーの内容を見る限りxが1次元の配列じゃないようです。xの中身を確認してみてください。

私のところでは以下のプログラムで回帰直線が得られています。ご参考までに。

import numpy as np
import matplotlib.pyplot as plt
x = np.array([1.0, 2.0, 3.0, 4.0, 5.0])
y = np.array([1.0, 1.5, 2.5, 2.0, 4.0])
p = np.polyfit(x, y, 1)
f = np.poly1d(p)
plt.scatter(x, y)
plt.plot(x, f(x))
plt.show()
0Like

Comments

  1. @xshangtiao

    Questioner

    回答遅くなった申し訳ございません。要素が1次元じゃなきゃならないと言うことですねありがとうございます。

Your answer might help someone💌