あれもPython,これもPython

Pythonで世界を包みたい

データサイエンスをPythonで試す(2_重回帰分析)

この本のRのコードを基に、
Pythonに書きなおして勉強をしています。

手を動かしながら学ぶ ビジネスに活かすデータマイニング

手を動かしながら学ぶ ビジネスに活かすデータマイニング

今回は第四章:重回帰分析を行います。

準備

import pandas as pd
import numpy as np
import Orange

今回は重回帰のモデル構築に、
sklearnではなくOrangeというモジュールを使用します。

これは、Orangeの方がモデルのデータを表示しやすいためです。
(予測をするのであれば、sklearnの方が楽ですが・・・)

データの準備

本書によると、扱うデータは

  • ビールの販売データ(被説明変数)
  • 販売促進の施策(説明変数)

のようです。

beer = pd.read_csv
beer = pd.read_csv("ch4_3_2.txt",sep=" ")
beer.head()
#   Revenue CM  Temp    Firework
#0  47.143467   141 31  2
#1  36.923626   144 23  1

Orangeはデータの扱いがpandasとは異なっています。

具体的には、domainというデータの情報と、
instancesというデータ部分に分かれています。

また、説明変数と被説明変数をdomainで設定する必要があります。

これらを準備することにします。

x1 = Orange.feature.Continuous("CM")
x2 = Orange.feature.Continuous("TEMP")
x3 = Orange.feature.Continuous("FIREWORK")
y = Orange.feature.Continuous("Revenue")

# リスト内包表記を使ってもよい
# headers= [Orange.feature.Continuous(h)  for h in beer.columns]

Orange.feature.ContinuousはOrangeで小数を扱うデータ型です。
このように、データを定義した後、domainを用意します。

domain = Orange.data.Domain([x1,x2,x3],y)

説明変数と被説明変数はこのようにdomainを定義するときに区別して渡すことができます。

これにinstancesを付け加えるのですが、
domainの並び順になってしまうので、pandasのデータを少しいじっておきます。

# 一度行を足す
beer["y"] = beer["Revenue"]

# 最初のRevenueは渡さない
beer2 = Orange.data.Table(domain,np.array(beer.ix[:,1:5]))

Orange.data.Table(domain,instances)でOrangeが扱えるデータになります。
一度、numpyのarrayにしてから渡します。

これでデータの準備が整いました。

モデリングと確認

learner = Orange.regression.linear.LinearRegressionLearner()
classifier = learner(beer2)

重回帰分析用モデルのインスタンスをつくり、
データを渡してあげます。
これで完了です。

中身を見てみます。

print classifier
#  Variable  Coeff Est  Std Error    t-value          p           
# Intercept     17.234     12.405      1.389      0.176      
#        CM     -0.043      0.078     -0.551      0.586      
#      TEMP      0.987      0.179      5.501      0.000   ***
#  FIREWORK      3.182      0.960      3.314      0.003    **
#Signif. codes:  0 *** 0.001 ** 0.01 * 0.05 . 0.1 empty 1

本書と同じような結果になりました!
こんな感じでRと同じ偏回帰係数の確認が可能です。

推定残差もclassifier.residualsで確認可能です。

今回はここまで。

次はクラスタリング

前回の記事はこちら。 http://esu-ko.hatenablog.com/entry/2016/03/07/%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9%E3%82%92Python%E3%81%A7%E8%A9%A6%E3%81%99%281%3A%E6%A4%9C%E5%AE%9A%29esu-ko.hatenablog.com