【AI】機械学習 by Python:回帰分析編③~データセットのインポート~

AI・機械学習

 前回

の続き。

 今回は「データセットのインポートとそのサイズ確認」から説明する。
 下記に、解説対象のプログラムの実装例とその出力例を示しておく。

 

実装例

# モジュールのインポート
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import sklearn
from sklearn.linear_model import LinearRegression

# データセットのインポート
file=pd.read_csv('apartment.csv',encoding='cp932')
#データセットのサイズ確認
print('データセットのサイズ:',file.shape)

# 説明変数
X=file.iloc[:,1:]
# 目的変数
Y=file.iloc[:,0]

# 説明変数Xと目的変数を、学習データ(8割)とテストデータ(2割)に分割(random_stateは0)
X_train, X_test, Y_train, Y_test = sklearn.model_selection.train_test_split(X, Y, test_size=0.2, random_state=0)
# 分割の確認
print('分割の確認:',X_train.shape, X_test.shape, Y_train.shape, Y_test.shape)

# 回帰分析実行
# インスタンスの作成
model = LinearRegression()
# モデルの作成
model.fit(X_train, Y_train)

# 回帰直線の確認
# 切片
print('切片の値 = ', model.intercept_)
# 係数
print('係数の値 = ', model.coef_)

# 学習データからの予測値
pred_train = model.predict(X_train)
# テストデータからの予測値
pred_test = model.predict(X_test)

# 結果確認
print('学習データの平均二乗誤差: ', np.mean((Y_train - pred_train) ** 2))
print('テストデータの平均二乗誤差: ', np.mean((Y_test - pred_test) ** 2))
print('決定係数:',model.score(X_test,Y_test))

# モデルを使った計算
Xs=35 # 部屋の広さ[m^2]
Xt=10 # 駅から建物までの所要時間[min]
Xo=5 # 築年数[year]
price=model.intercept_+model.coef_[0]*Xs+model.coef_[1]*Xt+model.coef_[2]*Xo
print('部屋の広さ',Xs,'m^2、徒歩',Xt,'分、築',Xo,'年の建物の部屋の家賃は約',round(price,1),'万円である。')

出力例

データセットのサイズ: (100, 4)
分割の確認: (80, 3) (20, 3) (80,) (20,)
切片の値 =  7.506892589329363
係数の値 =  [ 0.15930654 -0.10031788 -0.14080724]
学習データの平均二乗誤差:  0.0006406930013219009
テストデータの平均二乗誤差:  0.0009590840329186921
決定係数: 0.999959366829125
部屋の広さ 35 m^2、徒歩 10 分、築 5 年の建物の部屋の家賃は約 11.4 万円である。

 実際にプログラムを実行したい場合は、下記ボタンよりcsvファイル「apartment.csv」をダウンロードしてプログラムの保存先に保存すること。

環境は下記を想定。
OS:Windows10(64bit版)
Pythonインストール環境:Anaconda3
Pythonバージョン:3.7
エディタ:Jupyter Notebook


2. データセットのインポートとそのサイズ確認

 「モジュールのインポート」の後に書かれているのは、分析するデータセットをインポートするコードと、そのサイズを確認するためのコードだ。

# データセットのインポート
file=pd.read_csv('apartment.csv',encoding='cp932')
#データセットのサイズ確認
print('データセットのサイズ:',file.shape)

 

pd.read_csv(‘csvファイル名’, 引数)

はcsvファイルを読み込むための関数で、pandasが提供する関数の1つだ。

 pandasに限らず、Numpyなどのライブラリ中の関数を使う場合、先頭にライブラリの呼び出し名を付けてから関数名を記述する。

 関数read_csv()は複数種の引数をとることができ、今回記述されている「encoding」は文字コードを指定することができる。

 「file=」の部分は、変数「file」に「=」以下を格納することを意味する。
 Pythonでの変数は数値だけでなく、行列や文字、上記のようなデータも格納することができる。
 こうしておけば、毎回関数を書き下す必要はなく、「file」と記述するだけでデータを呼び出すことができる。

 

 その次に記述されている

print(数値,’文字列’)

は、()内の数値(変数や関数も可)、もしくは文字列をプログラム実行時に出力、表示させる関数である。
 数値はそのまま入力し、文字列は「”」で括る。
 また、数値と文字列を同時に表示させる場合は、両者の間に「,」を入れる。

出力例(x=3とした場合)
print(‘変数xの値は’,x,’である。’) → 変数xの値は 3 である。

 今回、print関数の()内に入っている「shape」はデータの構造を出力する関数であり、

データ名.shape

と入力すると、調べたいデータの行数と列数がベクトル表記で出力される。
 (厳密にはベクトル表記ではなくて「タプル」という正式な名前があるが、ここでは説明を割愛する。)

 1つ注意として、csvファイルを読み込む際、デフォルトでは先頭行はヘッダー(各列の見出し)扱いとなってカウントされないことがある。

 よって例を挙げると

出力例(ヘッダー部分を除く)
・10個の値が1列に並んでいるデータの場合 → (10,1)
・10個の値が1行に並んでいるデータの場合 → (1,10)
・10行20列の値で構成されているデータの場合 → (10,20)

となる。

 1行目は必ず、各データの意味を示す見出しをつけることが必要だ。
 (あるいはread_csvの引数に「header=None」を追加すれば、先頭行もデータ扱いになる。)

 

 以上を踏まえて、例のコードを詳しく見ていくと次のようになる。

file=pd.read_csv('apartment.csv',encoding='cp932')

⇒「apartment.csv」というcsvファイルを、文字コード「cp932」でプログラム内に読み込み、それを変数「file」に格納するためのコード。
 今回の例では、「apartment.csv」は下記のように、100部屋のアパートの部屋の情報を集積したデータセットであると仮定している。

家賃[万円]面積[m\(^2\)]駅からの所要時間[min]築年数[year]
5.728912
4.8241125
2.8131737








7.21955

 

print('データセットのサイズ:',file.shape)

⇒変数「file」に格納した「apartment.csv」のデータセットの構造を調べ、それを文字列とともに出力するためのコード。
 今回のデータセットは、数値データが100行4列あると仮定しているため、出力は下記のようになる。

データサイズ: (100, 4)

次回予告

 出来れば「説明変数と目的変数」まで行きたかったが、長くなるので次回に持ち越すことにする。

 次回も上のワンテーマで終わるか…?

 

 END

 

 ※追記
 説明変数と目的変数について執筆。


コメント

タイトルとURLをコピーしました