データを眺めてみよう.まず,NumPy, Pandas と Matplotlib ライブラリをインポートします.
ライブラリのインポート
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 高解像度ディスプレイ用
from IPython.display import set_matplotlib_formats
# from matplotlib_inline.backend_inline import set_matplotlib_formats # バージョンによってはこちらを有効に
set_matplotlib_formats('retina')
ここで利用するデータは GitHub のリポジトリで公開しているので,プログラムの中で読み込むことができます.あるいは,GitHub のリポジトリ からダウンロードして Python プログラムと同じフォルダに設置しても良いでしょう.次の通り,CSV ファイルを GitHub のリポジトリ から直接読み込み,Pandas のデータフレームに格納します.あるいは,ローカルに保存した CSV ファイルを開いても良いでしょう.このとき,ファイルの保存場所に注意してCSVファイルへのパスを記述する必要があります.
CSVファイルを読み込む
url = "https://github.com/rinsaka/sample-data-sets/blob/master/lr.csv?raw=true"
df = pd.read_csv(url)
# df = pd.read_csv('lr.csv')
データフレームを表示してみます.「x」列と「y」列の42件のデータです.
データフレームの表示
print(df)
x y 0 0.1 4.0 1 0.2 4.8 2 0.5 3.0 3 0.9 3.2 4 1.0 2.9 5 1.2 2.3 6 1.5 2.8 7 1.9 3.0 8 2.2 4.0 9 2.3 5.5 10 2.4 4.8 11 2.8 5.0 12 2.9 6.5 13 3.0 4.4 14 3.2 7.2 15 3.9 9.0 16 4.0 8.0 17 4.3 9.8 18 4.4 7.3 19 4.5 9.0 20 4.6 8.0 21 5.1 7.3 22 5.4 7.0 23 5.5 5.9 24 5.8 7.5 25 5.9 6.5 26 6.0 5.8 27 6.1 2.0 28 6.2 5.8 29 6.3 2.2 30 6.4 2.8 31 6.5 1.5 32 6.6 1.4 33 6.8 1.2 34 7.2 1.0 35 7.5 1.2 36 7.8 1.8 37 8.0 1.9 38 8.2 2.0 39 8.5 2.2 40 8.6 2.8 41 8.9 3.0
データフレームを NumPy 配列に変換します.
NumPy配列に変換
x_data = df.loc[:, 'x'].values
y_data = df.loc[:, 'y'].values
print(x_data)
print(y_data)
[0.1 0.2 0.5 0.9 1. 1.2 1.5 1.9 2.2 2.3 2.4 2.8 2.9 3. 3.2 3.9 4. 4.3 4.4 4.5 4.6 5.1 5.4 5.5 5.8 5.9 6. 6.1 6.2 6.3 6.4 6.5 6.6 6.8 7.2 7.5 7.8 8. 8.2 8.5 8.6 8.9] [4. 4.8 3. 3.2 2.9 2.3 2.8 3. 4. 5.5 4.8 5. 6.5 4.4 7.2 9. 8. 9.8 7.3 9. 8. 7.3 7. 5.9 7.5 6.5 5.8 2. 5.8 2.2 2.8 1.5 1.4 1.2 1. 1.2 1.8 1.9 2. 2.2 2.8 3. ]
念の為,x_data
などのデータ型を確認しておきます.
データ型の確認
print(type(x_data))
print(type(y_data))
<class 'numpy.ndarray'> <class 'numpy.ndarray'>
散布図を作成してみよう.
散布図の作成
fig, ax = plt.subplots(1, 1, figsize=(6, 4))
ax.scatter(x_data, y_data)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_xlim(0,10)
ax.set_ylim(0,10)
# plt.savefig('lr-data.png', dpi=300, facecolor='white')
plt.show()
上の散布図をみると,ここで説明したような線形回帰分析では当てはまりは悪そうです.以降では,明らかに当てはまらなそうな線形回帰分析(モデル1)からはじめ,これに 2次式や3次式,sinカーブやcosカーブも加えた線形回帰モデルによる推定を行ってみます.
なお,CSVファイルを読み込んで散布図を作成するまでに最低限必要なコードは次のようになります.
CSVファイルを読み込んで散布図を作成する
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 高解像度ディスプレイ用
from IPython.display import set_matplotlib_formats
# from matplotlib_inline.backend_inline import set_matplotlib_formats # バージョンによってはこちらを有効に
set_matplotlib_formats('retina')
# CSVファイルを読み込む
url = "https://github.com/rinsaka/sample-data-sets/blob/master/lr.csv?raw=true"
df = pd.read_csv(url)
# NumPy 配列に変換します.
x_data = df.loc[:, 'x'].values
y_data = df.loc[:, 'y'].values
# 散布図を作成する
fig, ax = plt.subplots(1, 1, figsize=(6, 4))
ax.scatter(x_data, y_data)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_xlim(0,10)
ax.set_ylim(0,10)
# plt.savefig('lr-data.png', dpi=300, facecolor='white')
plt.show()