データ可視化入門 (Matplotlib & Seaborn)
データ分析において、数値の羅列だけでは気づきにくいパターンや傾向を直感的に理解するために、データの可視化は不可欠なスキルです。ここでは、Pythonで最も代表的な可視化ライブラリであるMatplotlibと、そのラッパーであり、より美しいグラフを簡単に描画できるSeabornの使い方を学びます。
(前提:train.csvがColabにアップロードされ、train_dfという変数に読み込まれていること。)
1. ライブラリの準備
まず、可視化に必要なライブラリをインポートします。Colabにはプリインストールされているので、インストールは不要です。
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# train.csvを読み込む(再掲)
train_df = pd.read_csv('train.csv')
# Seabornのグラフスタイルを設定する(見栄えが良くなるおまじない)
sns.set(style='whitegrid')
2. 1変数の可視化
まず、1つの変数(1つの列)がどのような分布になっているかを見てみましょう。
ヒストグラム (Histogram): 数値データの分布
年齢(Age)の分布をヒストグラムで表示します。どの年齢層の乗客が多かったのかがわかります。
# 20代の乗客が最も多いことがわかる
sns.histplot(data=train_df, x='Age', kde=True) # kde=Trueで分布の曲線も表示
plt.title('Age Distribution of Passengers') # グラフのタイトル
plt.xlabel('Age') # X軸のラベル
plt.ylabel('Count') # Y軸のラベル
plt.show() # グラフを表示
カウントプロット (Count Plot): カテゴリデータの度数
性別(Sex)や客室クラス(Pclass)など、カテゴリごとの人数を棒グラフで表示します。
# 男女の乗客数を可視化
sns.countplot(data=train_df, x='Sex')
plt.title('Number of Passengers by Sex')
plt.show()
# 客室クラスごとの乗客数を可視化
sns.countplot(data=train_df, x='Pclass')
plt.title('Number of Passengers by Pclass')
plt.show()
3. 2変数の関係性を可視化
次に、2つの変数を組み合わせて、その関係性からインサイトを探ります。
カウントプロット (hueを使った層別)
Seabornのhue引数を使うと、カテゴリデータをさらに別のカテゴリで色分けできます。これは非常に強力です。
# 性別ごとに、生存者と死亡者を色分けして表示
# -> 女性の方が生存率が高い傾向が見える
sns.countplot(data=train_df, x='Sex', hue='Survived')
plt.title('Survival Count by Sex')
plt.show()
# 客室クラスごとに、生存者と死亡者を色分けして表示
# -> 1等客室の生存率が高く、3等客室の生存率が低いことが明確にわかる
sns.countplot(data=train_df, x='Pclass', hue='Survived')
plt.title('Survival Count by Pclass')
plt.show()
ボックスプロット (Box Plot): カテゴリごとの数値分布
客室クラス(Pclass)ごとに、年齢(Age)の分布がどう違うかを見てみましょう。
# 1等客室の乗客は年齢層が高い傾向にあることがわかる
sns.boxplot(data=train_df, x='Pclass', y='Age')
plt.title('Age Distribution by Pclass')
plt.show()
散布図 (Scatter Plot): 2つの数値データの関係
年齢(Age)と運賃(Fare)の関係をプロットします。
# 年齢と運賃に明確な相関はなさそうだが、運賃が高い層に outliers (外れ値) があることがわかる
sns.scatterplot(data=train_df, x='Age', y='Fare', hue='Survived')
plt.title('Age vs Fare')
plt.show()
演習問題
問1: Embarked(乗船港)ごとの乗客数をカウントプロットで可視化してください。
問2: Embarked(乗船港)ごとに、生存者と死亡者を色分けしたカウントプロットを作成してください。(hueを使います) どの港からの乗客の生存率が高そうですか?
解答例
# 問1
sns.countplot(data=train_df, x='Embarked')
plt.title('Number of Passengers by Embarked')
plt.show()
# 問2
# C (Cherbourg) から乗船した客の生存率が他に比べて高そうに見える
sns.countplot(data=train_df, x='Embarked', hue='Survived')
plt.title('Survival Count by Embarked')
plt.show()
このように、データを可視化することで、数値だけでは見えなかった特徴や関係性を直感的に捉えることができます。これは、後の「特徴量エンジニアリング」や「モデルの評価」のステップで非常に役立ちます。
次のセクションでは、いよいよ機械学習ライブラリScikit-learnを使い、モデルを構築していきます。