Python入門トップページ


目次

  1. データを眺める
  2. モデル1:単回帰分析
  3. モデル2:2次式を加える
  4. モデル3:三次関数を加える
  5. モデル4:sinカーブを加える
  6. モデル5:cosカーブを加える

線形回帰モデル

データを眺める

CSVファイルを開く

データを眺めてみよう.まず,NumPy, PandasMatplotlib ライブラリをインポートします.

ライブラリのインポート
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 配列に変換します.

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()
  lr-data.png

上の散布図をみると,ここで説明したような線形回帰分析では当てはまりは悪そうです.以降では,明らかに当てはまらなそうな線形回帰分析(モデル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()

目次に戻る