numpy.polyfit()を用いた多項式最小二乗法

03-polynomial-lsq.py

import csv
from pprint import pprint
import numpy as np                    numpyモジュールを別名 np でimport
from matplotlib import pyplot as plt

infile = 'data.csv'

#
CSVのデータをheaderと、x, yデータ別々のリストに読み込む
i = 0          pythonでは for文で for(i = 0 ; i < n ; i++) のような構文を使えないので、
                     自前でカウンタ変数を用意する
x = []
y = []
with open(infile, "r") as f:
    reader = csv.reader(f)

    for row in reader:
    if i == 0:
        header = row
    else:
        x.append(float(row[0]))     ファイルから読み込んだ値はstring型なので、
                                    float()で浮動小数点型に変換する

        y.append(float(row[1]))
        i += 1                      カウンタアップ

print("header:", header)

print("x:", x)
print("y:", y)


print("polynomial fit start:")
ai = np.polyfit(x, y, 2)        numpy.polyfit()の実行。第3引数は多項式の次数
print(" lsq result: ai=", ai)
print(" y = {} + {} * x + {} * x^2".format(ai[0], ai[1], ai[2]))

plt.scatter(x , y)        matplotlibで元データ x, y の散布図を作成
plt.show()                グラフを表示。