Kaggle 銅メダルへの道(3日目)

こんにちは、筋肉めがねです。

 

前回の記事では英語の勉強方法について、シャドーウィングという方法を使っていたと書きました。では、ドイツ語の勉強でシャドーウィングを使っていきたいんだけれども、どのマテリアルを使えば良いのか迷いますよね。僕のオススメはDeutsche Welleです。LEARN GERMAN直下のDeutsch Aktuellにスクリプト付きの動画が沢山あります。それを使ってドイツ語を勉強していきましょう。

 

f:id:KinnikuMegane:20190106022950p:plain

 

それでは、本日もKaggleで銅メダルを取ることを目指して一つ一つ進めていきましょう。前回はKaggleからダウンロードしたデータをGoogle Driveに格納し、Google ColaboratoryからGoogle Driveへ格納したファイルを操作できるように環境を構築しました。

前回の記事で書いた通り、KaggleのCompetitionを進める上での流れは、大まかに以下の通りである、と書きました。

 

  1. 動作環境の構築
  2. KaggleからCompetitionデータを取得
  3. データ概要の把握、重複の確認
  4. 外れ値の削除 
  5. 前処理:欠損値処理
  6. 前処理:変数変換
  7. 目的変数の分布の確認、処理
  8. 特徴量の選択
  9. 機械学習
  10. モデルをKaggleへ提出

 

本日は、3. データの概要の把握と4. 外れ値の削除まで進めます。

 

参考にしているのは、こちらのブログでございます。

A study on Regression applied to the Ames dataset | Kaggle

Kaggle チャレンジ 4日目 住宅価格問題を解いていく

 

データ概要の把握

先ず、データを操作する前に、前回構築したGoogle Colaboratory上の環境に必要なライブラリをインストールします。

#import some necessary librairies
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
%matplotlib inline
import matplotlib.pyplot as plt  # Matlab-style plotting
import seaborn as sns
color = sns.color_palette()
sns.set_style('darkgrid')
import warnings
def ignore_warn(*args, **kwargs):
    pass
warnings.warn = ignore_warn #ignore annoying warning (from sklearn and seaborn)


from scipy import stats
from scipy.stats import norm, skew #for some statistics


pd.set_option('display.float_format', lambda x: '{:.3f}'.format(x)) #Limiting floats output to 3 decimal points

続いて訓練データの内容を見ていきます。

print("train : " + str(train.shape))

f:id:KinnikuMegane:20190106205230p:plain

結果、1460行の物件があり、そしてIDを含めて81のカラム(情報の数)がある事がわかります。

 

そして、リストアップされている物件の中で重複があるかどうか、確認します。

# Check for duplicates
idsUnique = len(set(train.Id))
idsTotal = train.shape[0]
idsDupli = idsTotal - idsUnique
print("There are " + str(idsDupli) + " duplicate IDs for " + str(idsTotal) + " total entries")

 

f:id:KinnikuMegane:20190106205527p:plain

重複はありませんでした。重複がない事が確認できたので、IDカラムは必要ありません。IDカラムを削除しましょう。

# Drop Id column
train.drop("Id", axis = 1, inplace = True)

外れ値の削除

続いて外れ値を削除します。KaggleのHouse Pricing competitionへデータを提供した方の書いたオリジナルの文献によると、GrLivArea(床面積)が4000 square feet (371.6平米)以上の5つのデータのうち、3つは外れ値であり、2つは他のデータ群からはかけ離れた数値であるため、モデルを作るための訓練データとしては適切でない、とあります。よって、それらを訓練データから取りましょう。

http://jse.amstat.org/v19n3/decock.pdf

 

先ず、外れ値を削除する前に、1460の物件について、床面積と売価でプロットしたグラフを描画します。

# Looking for outliers, as indicated in https://ww2.amstat.org/publications/jse/v19n3/decock.pdf
plt.scatter(train.GrLivArea, train.SalePrice, c = "blue", marker = "s")
plt.title("Looking for outliers")
plt.xlabel("GrLivArea")
plt.ylabel("SalePrice")
plt.show()

f:id:KinnikuMegane:20190106210658p:plain

続いて、床面積が4000 square meter(371.6平米)以上の5つのデータを取り除きます。

train = train[train.GrLivArea < 4000]

そして、改めて全ての物件について、床面積と売価でプロットしたグラフを描画します。

f:id:KinnikuMegane:20190106211105p:plain

外れ値が除かれている事を確認できました。

 

次回の記事では、欠損値の処理から進めます。 

それでは、本日は以上でございます。

にほんブログ村 IT技術ブログへ
にほんブログ村



Pythonランキング