Numpyだけで回帰分析その2。株価グラフにフィット【Python機械学習】
Numpyだけで回帰分析その2。
株価の変動を追っかけるテスト。
説明的なもの無し。
実行環境
Androidスマホ
termux
Python3.8
JupyterNotebook
- 使用するPythonライブラリ
- Numpy
- Pandas
- matplotlib
目的
Numpy.polyfit()
、Numpy.poly1d()
の使い方にとりあえず慣れる。- 株価のデータにどのようなフィットがなされるか観察する。
- グラフ描画に慣れる。
実験スタート
file = "nikkei_monthly.csv"
import numpy as np import pandas as pd
df = pd.read_csv( file, encoding="shiftjis", index_col=0, skipfooter=1, engine='python', usecols=[0,1], )
df.isnull().sum()
終値 0
dtype: int64
x = np.arange(df.shape[0]) + 1 x.size
241
y = np.array(df.iloc[:,0])
時間軸x,株価軸yの配列ができた。
import matplotlib.pyplot as plt plt.plot(x, y) plt.xlabel("Days") plt.ylabel("Price") plt.title("Nikkei Stock Average") plt.grid() plt.savefig("stock_price.png") plt.show()
ここから回帰分析
多項式 1次まで
func = np.polyfit(x, y ,1)
func
array([ 36.3398427 , 9910.40143983])
y_new = np.poly1d(func)(x)
import matplotlib.pyplot as plt plt.plot(x, y) plt.plot(x, y_new, color="red") plt.xlabel("Days") plt.ylabel("Price") plt.title("Nikkei Stock Average") plt.grid() plt.savefig("stock_price_1.png") plt.show()
多項式 2次まで
# --- 2次 func = np.polyfit(x, y ,2) y_new = np.poly1d(func)(x) # --- グラフ描画 --- import matplotlib.pyplot as plt # 株価グラフ plt.plot(x, y) # 回帰グラフ plt.plot(x, y_new, color="red") plt.xlabel("Days") plt.ylabel("Price") plt.title("Nikkei Stock Average") plt.grid() plt.savefig("stock_price_2.png") plt.show()
多項式 n次まで
# --- 1次 func = np.polyfit(x, y ,1) y_new = np.poly1d(func)(x) # --- 2次 func2 = np.polyfit(x, y ,2) y_new2 = np.poly1d(func2)(x) # --- 3次 func3 = np.polyfit(x, y ,3) y_new3 = np.poly1d(func3)(x) # --- 4次 func4 = np.polyfit(x, y ,4) y_new4 = np.poly1d(func4)(x) # --- 10次 func10 = np.polyfit(x, y ,10) y_new10 = np.poly1d(func10)(x) # --- 20次 func20 = np.polyfit(x, y ,20) y_new20 = np.poly1d(func20)(x) # --- グラフ描画 --- import matplotlib.pyplot as plt fig = plt.figure(figsize=(12,8)) # 株価グラフ ax = fig.add_subplot(111) # 回帰グラフ #ax1 = fig.add_subplot(722) #ax2 = fig.add_subplot(723) ax.plot(x,y, color="black", label="PRICE") ax.plot(x, y_new, color="blue", label="1") ax.plot(x, y_new2, color="red" , label="2") ax.plot(x, y_new3, color="green", label="3") ax.plot(x, y_new4, color="pink", label="4") ax.plot(x, y_new10, color="orange", label="10") ax.plot(x, y_new20, color="purple", label="20") ax.set_xlabel("Days") ax.set_ylabel("Price") ax.set_title("Nikkei Stock Average") ax.legend() plt.style.use("ggplot") plt.savefig("stock_price_3.png") plt.show()
/data/data/com.termux/files/home/py3.8/lib/python3.8/site-packages/IPython/core/interactiveshell.py:3319: RankWarning: Polyfit may be poorly conditioned
exec(code_obj, self.user_global_ns, self.user_ns)
多項式の次数を上げていく時にサンプルポイントの間隔が不適切な場合やなんかにこの警告が出るのだと。Numpyのpolyfit()関数。
python - How to fixed "polyfit maybe poorly conditioned" in numpy? - Stack Overflow