データ分析⑦
# PART2 重回帰モデルを作ってみよう
# おまじない
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline
from sklearn.linear_model import LinearRegression as LR
# 線形回帰による予測を行うクラスとして、sklearn.linear_model.LinearRegression が用意
# 線形回帰モデル (Linear Regression)
# データの読み込み
# train.csvとtest.csvとsample.csvの3つのファイルを読み込みましょう
# それぞれを読み込んだものは変数はtrain, test, sampleに代入しましょう
# sampleを読み込む時は、header=Noneというオプションを忘れないようにしましょう
train = pd.read_csv("train.csv")
test = pd.read_csv("test.csv")
sample = pd.read_csv("sample.csv",header=None)
#trainのweekの各値がそれぞれいくつあるか数えてみましょう
train["week"].value_counts()
水 43
木 43
金 41
火 41
月 39
Name: week, dtype: int64
# trainのweekを試しにダミー変数化してみよう
# pd.get_dummies関数を使います
# カッコの中にダミー変数化したい変数を書きます
pd.get_dummies(train["week"])
# 曜日を数値に変換
月 木 水 火 金
0 1 0 0 0 0
1 0 0 0 1 0
2 0 0 1 0 0
3 0 1 0 0 0
4 0 0 0 0 1
... ... ... ... ... ...
202 0 0 1 0 0
203 0 1 0 0 0
204 0 0 0 0 1
205 1 0 0 0 0
206 0 0 0 1 0
207 rows × 5 columns
# trainからweekとtemperatureを抜きだし、ダミー変数化したものを変数trainXに代入しよう
# trainX = pd.get_dummies(train[["week","temperature"]])
# trainXの中身を確認してみましょう
trainX
temperature week_月 week_木 week_水 week_火 week_金
0 19.8 1 0 0 0 0
1 17.0 0 0 0 1 0
2 15.5 0 0 1 0 0
3 15.2 0 1 0 0 0
4 16.1 0 0 0 0 1
... ... ... ... ... ... ...
202 24.8 0 0 1 0 0
203 25.4 0 1 0 0 0
204 27.1 0 0 0 0 1
205 26.6 1 0 0 0 0
206 28.1 0 0 0 1 0
207 rows × 6 columns
# trainからyを取り出し、変数yに代入しましょう
y = train["y"]
# 回帰モデルの箱を用意しましょう
# 変数名はmodelとしましょう
model = LR()
# 重回帰モデルを作りましょう
model.fit(trainX,y)
LinearRegression()
# 作ったモデルの傾きや切片を確かめてみましょう
model.coef_
# -2.53878074 = temperature
# 8.26339936 = 月 →売上が上がる傾向
# -9.47240196 = 木 →売上が下がる傾向
#-2.02873774 = 水
#1.85251984 = 火
#1.38522051 = 金
array([-2.53878074, 8.26339936, -9.47240196, -2.02873774, 1.85251984,
1.38522051])
model.intercept_
135.69119841401601
# 実習
# 1.testからweekとtemperatureを抜きだし、ダミー変数化したものを変数testXに代入しよう
testX = pd.get_dummies(test[["week","temperature"]])
# 2.testXの中身を確認しよう
testX
temperature week_月 week_木 week_水 week_火 week_金
0 20.2 0 0 1 0 0
1 23.9 0 1 0 0 0
2 28.7 0 0 0 0 1
3 21.5 1 0 0 0 0
4 22.1 0 0 0 1 0
5 23.3 0 0 1 0 0
6 22.5 0 1 0 0 0
7 26.1 0 0 0 0 1
8 26.8 0 0 0 1 0
9 15.6 0 0 1 0 0
10 18.6 0 1 0 0 0
11 23.0 0 0 0 0 1
12 23.9 1 0 0 0 0
13 20.2 0 0 0 1 0
14 15.5 0 0 1 0 0
15 14.7 0 1 0 0 0
16 18.7 0 0 0 0 1
17 22.7 1 0 0 0 0
18 19.1 0 0 0 1 0
19 19.6 0 0 1 0 0
20 19.6 0 1 0 0 0
21 18.8 0 0 0 0 1
22 18.9 0 0 0 1 0
23 16.0 0 0 1 0 0
24 19.2 0 1 0 0 0
25 20.1 0 0 0 0 1
26 21.2 1 0 0 0 0
27 14.7 0 0 0 1 0
28 14.4 0 0 1 0 0
29 19.5 0 1 0 0 0
30 15.8 0 0 0 0 1
31 14.3 1 0 0 0 0
32 16.1 0 0 0 1 0
33 14.9 0 0 1 0 0
34 10.5 0 1 0 0 0
35 14.9 0 0 0 0 1
36 11.4 0 0 0 1 0
37 9.2 0 0 1 0 0
38 15.1 0 1 0 0 0
39 15.3 0 0 0 0 1
# 3.modelとtestXを使って予測をして、予測結果を変数名predに代入しよう
pred = model.predict(testX)
pred
array([ 82.37908978, 65.54193684, 64.21341177, 89.37081192,
81.43666396, 74.5088695 , 69.09622987, 70.81424168,
69.5043945 , 94.05748117, 78.99747474, 78.68446197,
83.27773815, 86.26034736, 94.31135925, 88.89871962,
89.60121914, 86.32427504, 89.05300617, 83.90235823,
76.45869401, 89.34734106, 89.56076232, 93.04196888,
77.4742063 , 86.0469261 , 90.13244614, 100.22364142,
97.10401806, 76.71257208, 96.96368327, 107.65003323,
96.66934838, 95.83462769, 99.56159871, 99.24858594,
108.60161785, 110.30567789, 87.88320732, 98.23307364])
# 4.sample[1]にpredを代入して、"submit3.csv"というファイル名でファイル出力しよう
sample[1] = pred
sample.to_csv("submit3.csv",index=None,header=None)
# 5.submit3.csvをDeepAnalyticsに投稿して、submit1.csvやsubmit2.csvのスコアと比較してみよう
この記事が気に入ったらサポートをしてみませんか?