Kaggleのデータセットで遊んでみた 1 データの可視化
Kaggleとは、機械学習とデータサイエンスのプラットフォームのことです。このサイトでは、様々なデータを使って自分で分析を行うことができたり、データ解析のコンペティションに参加して精度を競い合ったりすることができます。
今回はKaggleの中で最初に出会うであろうTaitanicのデータセットを使ってデータ解析作業の大枠を紹介しているカーネルを紹介したいと思います。下のサイトを参考にしています。すごく良いカーネルなのでぜひ読んでみてください!
A Comprehensive ML Workflow with Python | Kaggle
作業環境
Kaggleのノートブック環境を利用しても、自分のJupyter Notebook環境を使っても構いません。構成の詳細は下のようになっています。
from sklearn.cross_validation import train_test_split from sklearn.metrics import classification_report from sklearn.metrics import confusion_matrix from sklearn.metrics import accuracy_score import matplotlib.pylab as pylab import matplotlib.pyplot as plt from pandas import get_dummies import matplotlib as mpl import seaborn as sns import pandas as pd import numpy as np import matplotlib import warnings import sklearn import scipy import numpy import json import sys import csv import os print('matplotlib: {}'.format(matplotlib.__version__)) print('sklearn: {}'.format(sklearn.__version__)) print('scipy: {}'.format(scipy.__version__)) print('seaborn: {}'.format(sns.__version__)) print('pandas: {}'.format(pd.__version__)) print('numpy: {}'.format(np.__version__)) print('Python: {}'.format(sys.version)) # 以下出力 """ /opt/conda/lib/python3.6/site-packages/sklearn/cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20. "This module will be removed in 0.20.", DeprecationWarning) matplotlib: 2.2.3 sklearn: 0.19.1 scipy: 1.1.0 seaborn: 0.9.0 pandas: 0.23.4 numpy: 1.15.2 Python: 3.6.6 |Anaconda, Inc.| (default, Oct 9 2018, 12:34:16) [GCC 7.3.0] """
基本設定
この後、様々な処理をしていくにあたって、プロットについて基本的な設定をしておきます。
sns.set(style='white', context='notebook', palette='deep') pylab.rcParams['figure.figsize'] = 12,8 warnings.filterwarnings('ignore') mpl.style.use('ggplot') sns.set_style('white') %matplotlib inline
ここら辺のスタイルは各自の好みで変えてよいと思います。
データを見てみる
散布図
train = pd.read_csv('../input/train.csv') test = pd.read_csv('../input/test.csv') train_columns #以下出力 """ Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'], dtype='object') """
このデータには「PassengerId」など12個のカラムがあります。今回予測するのは'Survived'つまりタイタニック事故で特定の人が生き残るか死ぬかを予測することになります。そのため、データの分析は基本的には'Survived'とほかの変数の間の関係を見ていくことになります。
試しに、Pclass(客の経済的な豊かさ、1が最も裕福)、年齢、乗船料とSurviveの関係を見てみます。
g = sns.FacetGrid(train, hue="Survived", col="Pclass", margin_titles=True, palette={1:"seagreen", 0:"gray"}) g=g.map(plt.scatter, "Fare", "Age",edgecolor="w").add_legend();
下のようなグラフが表示されます。
生存者と死者の間に明確な違いは見受けられません。
コードの説明
1行目のsns.FaceGrid
ではtrainからデータをとってきてプロットをすることを示し、col
に指定されたPclassごとにグラフを用意することを宣言しています。なので今回はPclassが1,2,3の3つのグラフが描画されます。hue
はSurviveの値で区別してプロットすることを意味しています。Surviveには生存(1)と死亡(0)の2種類がありますが、それぞれを何色でプロットするかはpalette
で指定されています。
実際のグラフ描画はg.map
で行われています。
コード | 動作 |
---|---|
plt.scatter |
散布図スタイルでプロットする |
"Fare" |
横軸はFare(乗船料) |
"Age" |
縦軸はAge(年齢) |
edgecolor |
ドットの淵は白(white) |
add.legend() |
凡例を入れる |
Boxプロット(箱ひげ図)
各変数がどのような値の範囲をとるのか図示します。
train.plot(kind='box', subplots=True, layout=(2,4), sharex=False, sharey=False) plt.subplots_adjust(wspace=0.5, hspace=0.6)
箱ひげ図の見方についてはWidipediaを見てください。
コードの説明
コード | 動作 |
---|---|
train.plot |
Pandasライブラリの機能でプロットする |
kind='box' |
プロットの種類は箱ひげ図 |
subplots=True |
グラフをサブプロットに分ける |
layout=(2, 4) |
2行4列にサブプロットを配置する |
sharex=False, sharey=False |
x, y軸の値の範囲を共有しない |
plt.subplots_adjust(wspace=0.5, hspace=0.6) |
グラフ同士の幅、高さの間隔調整 |