線形回帰について ーデータクレンジング編その①
今日はPythonの実装のアウトプット。
まだまだ知らないことがたくさんあるので、そこは、勉強勉強。
今回のメインテーマはデータクレンジング。
主に2点ある。
①欠損値の処理
②外れ値の処理
について、学んだのでそれをおもむろにアウトプット。
今回扱うデータセットは車の価格の予測モデル。
当然目的変数は車の価格になるわけだが、
色々外れ値も多そう。
思いっきり最大値と平均のPriceがかけ離れている、そのほかの数字も
若干怖い。
import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression as LR from sklearn.preprocessing import StandardScaler from sklearn.feature_selection import f_regression import matplotlib.pyplot as plt import seaborn as sns sns.set() data_csv = pd.read_csv("1.04. Real-life example.csv") data_csv.isnull().sum()
ここまでは問題ない。
このisnullで返ってきた結果が、こちら。
やっぱありました。
ここで、
data_csv.describe()
で統計量を確認すると、データ数が4345であることを確認。
この場合全データに対して欠損値が5%以下なのでそのまま削除。
data = data.dropna()
ここからがなるほど、と個人的には思った点。
じょうきのとおり、外れ値があるのでは?とまず統計量を見て勘繰る。
そこから、
実際にグラフにしてみると一目瞭然だった。
sns.distplot(data["Price"]) #実行結果は↓
いやいや!正規分布どころか、指数関数やん!かい二乗分布やん!
そこで、
外れ値を削除するべく、新しいメソッドを学んだ。
これは今後も使えそう。
q = data["Price"].quantile(0.90) data_q = data[data["Price"] < q]
そう、quantileという関数である。
この0.90という数字は全体の90%の所の値を単数として拾ってくる、というもの。
そこから、二行目の通りに条件を作ってあげれば、
かなり外れ値の分布は収まってくれるようになった。
こうやって、他の変数についても同様に削除していく。
この続きは次回。