ナード戦隊データマン

データサイエンスを用いて悪と戦うぞ

モデリング前の探索的データ分析(EDA)の典型例

探索的データ解析は、データそのものを理解するための、分析初期のフェーズです。複雑なデータの中から良いモデルを最初から用意することは難しいため、データを理解してからモデルを修正する必要があります。ここでは、bostonデータを用いて、探索的データ分析の典型的なやり方を書きます。

事前準備

%matplotlib inline
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston
boston = load_boston()

データそのものを見る

「データそのものを見る」とは、データフレームを直接表示することを意味します。これにより、各特徴のデータ型を推測することができます。

import pandas as pd

df = pd.DataFrame(boston.data, columns=boston.feature_names)
df.head(10)

f:id:mathgeekjp:20170909194011p:plain

記述統計量

記述統計量には、平均や四分位数、標準偏差、最大・最小値などがあります。直接数値を求める方法と、boxplotを用いる方法が基本的です。boxplotの場合、カテゴリー変数を用いて比較します。

df.describe()

f:id:mathgeekjp:20170909194331p:plain

df.boxplot(column = "TAX", by="RAD")

f:id:mathgeekjp:20170909194434p:plain

ヒストグラム

データの分布を理解するためには、ヒストグラムを用います。

fig, axes = plt.subplots(len(df.columns), 1, figsize=(12, 48))
for col, axis in zip(df.columns, axes):
    df.hist(column = col, bins=20, ax=axis)

f:id:mathgeekjp:20170909194838p:plain

targetと特徴量の関連

targetとは、予測したい値のことです。特徴量とどういった関係があるかを調べると、特徴量の重要性が比較できるかもしれません。多くの場合、散布図を用います。カテゴリー化された値を用いれば、散布図に色をつけて見分けられます。

fig, axes = plt.subplots(len(df.columns), 1, figsize=(12, 48))
for col, axis in zip(df.columns, axes):
    axis.scatter(df[col], boston.target, c=df["INDUS"])
    axis.set_xlabel(col)
    axis.set_ylabel("target")

f:id:mathgeekjp:20170909195135p:plain

特徴量と特徴量の関係

ある特徴量が別の特徴量と何らかの関係を持っているかもしれません。しかし、特徴量の数が多い場合、全ての散布図を出力するのは難しいので、相関を求めたほうがわかりやすいでしょう。相関は数値として見ることができますが、ヒートマップを用いると直感的に把握できます。

plt.pcolor(df.corr(), cmap="Reds")
plt.xticks(range(0, len(df.columns)), df.columns, rotation=30)
plt.yticks(range(0, len(df.columns)), df.columns, rotation=30)

f:id:mathgeekjp:20170909195532p:plain

次元削減による視覚化

PCAを用いれば、多次元データを少数の次元に変換することができます。多次元データを二次元でプロットしたい場合に使われる場合があります。

from sklearn.decomposition import PCA
pca = PCA(n_components=2)
data_pca = pca.fit_transform(df)

plt.scatter(data_pca[:,0], data_pca[:, 1], c=df["INDUS"])

f:id:mathgeekjp:20170909195745p:plain

おわりに

データの理解には、視覚化を用いる場合が多く、視覚化にはあらゆる方法があります。例えば、時系列データの場合は、折れ線グラフを用います。しかし、ヒストグラムや散布図、ボックスプロットのような基本的な視覚化は、データを理解するためによく使う方法といえます。他にも、特徴量エンジニアリングなどと組合せて視覚化することもありますが、基礎は同じです。

参考

  1. 1. Exploratory Data Analysis

  2. www.datacamp.com

  3. EDA with Python | Kaggle