PyInv

プログラミングのメモ、海外投資のメモ

Exploratory Data Analysis - 探索的データ解析

Exploratory Data Analysisとは

データの理解をすること。ざっくりと、
データの型、分布の形状や性質、欠損値や異常値の確認
前処理を含む

  • inforによるデータ型、欠損値の確認
  • 上記で発見した不具合、不都合の処理
  • boxplotを使った異常値の確認
  • describeによる基本統計量の確認
  • pairplotで散布図に
  • 相関係数をheatmapで視覚化
  • 必要であればOne-Hot処理

実践編

データ準備

UCIからアワビのとりよせ
Ring(年輪)を予想するモデルを作る

import requests
import io
import pandas as pd

url = 'http://archive.ics.uci.edu/ml/machine-learning-databases/abalone/abalone.data'
data = requests.get(url ,verify = False)
df = pd.read_csv(io.StringIO(data.content.decode('utf-8')), header=None)

#こちらからNameデータを
#http://archive.ics.uci.edu/ml/machine-learning-databases/abalone/abalone.names
column_names =['Sex', 'Length', 'Diameter', 'Height',
               'Whole weight', 'Shucked weight',
               'Viscera weight','Shell weight',
              'Rings']

df.columns=column_names


データの観察

眺める
df.head()
df.tail()
df.info()

f:id:singapp:20200926004149p:plain
列はきれいに集められている模様。アワビのオス・メスってどうやってみわけるんだろう。


f:id:singapp:20200926004357p:plain
欠損値なし。データも数値として認識されている。


データの前処理

データの成型
  • 型を変更したり
    • to_numeric()
    • to_string(),

_ to_datetime()

  • データsplitしたり
  • テーブルを結合したり
    • pd.merge()
    • .join()

いろいろやってみる

欠損値処理

  • dropna()
  • fillna()


Box plotで分布の広がりと異常値を観察

import matplotlib as mpl
import matplotlib.pyplot as plt

#Ringsは目的変数なのでdrop
df.drop('Rings',axis=1).boxplot(figsize=(20,6))
plt.show()


f:id:singapp:20200926010712p:plain

Whole weightの広がりが大きい。異常値であると判断すれば処理。


実力不足により自分では処理できないので、Zepprixさまの記事を参考にさせていただきました。自分でも記事書きたいです。

qiita.com

基本統計量の確認

df.describe()


f:id:singapp:20200926011846p:plain

とてもお手軽。HeightとShuckedのminが気になるところ。


組み合わせ散布図 Pair Plot

import seaborn as sns
sns.pairplot(df)

f:id:singapp:20200926012300p:plain

これまたとてもお手軽。Ringsにたいして関係が深そうなものを更なる探索対象にする。
全体的にまとまりにかける。Heightは除いてもよさそう。

相関行列のHeat Map

cor = df.corr()
plt.figure(figsize=(10,6))
sns.heatmap(cor, square=True, cmap='plasma', vmax=1,vmin=-1, annot=True)
plt.show()


f:id:singapp:20200926013022p:plain
やはり全体的にRingに対する相関が低め。

その後

所与のデータでうまくいきそうなら、次にはモデルの選択とチューニングへ
ダメそうなら特徴量エンジニアリングで目的変数と説明変数の関係性が何か見いだせないか分析

特徴量エンジニアリング

Unsupervised-Larningによって特徴量を操作

  • 次元の削減
    • 次元が大きすぎると、Machine-Learningの必要時間が増える
  • 多重共線性の回避
    • 統計的なあれ