Shikata Ga Nai

Private? There is no such things.

15. 探索的データ分析(EDA)入門 〜データを深く理解する方法〜

Hello there, ('ω')ノ

📌 1. EDAとは?なぜ重要なのか?

探索的データ分析(EDA) とは、データの傾向を理解し、問題を発見するための手法です。
EDAを行うことで、データのパターン・相関・異常値・欠損値 などを把握し、適切な前処理や特徴量エンジニアリングの方針を決めることができます。

📌 EDAの主な目的 - データの基本情報を確認 - 欠損値や異常値の特定 - 特徴量同士の相関関係を分析 - ターゲット変数との関係性を可視化 - 機械学習モデルの改善点を発見

EDAをしっかり行うことで、機械学習モデルの精度向上につながる!


📌 2. データの読み込み

まずは、EDAを行うデータを準備します。
KaggleのTitanicデータセットを例に、Pythonでデータを読み込みましょう!

import pandas as pd

# データの読み込み
df = pd.read_csv("/kaggle/input/titanic/train.csv")

sns.countplot(x="Embarked", data=df)
plt.title("乗船地(Embarked)の分布")
plt.show()

pd.read_csv() でデータを読み込む!
df.head() でデータのサンプルを確認!


📌 3. データの基本情報を確認

✅ データの概要を確認

# データのサイズ(行数×列数)
print("データの形状:", df.shape)

# 各列のデータ型と欠損値の確認
print(df.info())

# 基本統計量
print(df.describe())

📌 チェックすべきポイント - データの行数・列数は適切か? - 欠損値(NaN)はどのくらいあるか? - 数値データの平均・最大・最小は適切か? - カテゴリ変数の種類はいくつあるか?


📌 4. 欠損値の確認

EDAでは、まず「どのカラムに欠損があるか?」 を確認します。

import japanize_matplotlib  # ← 追加(matplotlibで日本語対応)

# 欠損値の数を確認
print(df.isnull().sum())

# 欠損値の可視化
import seaborn as sns
import matplotlib.pyplot as plt

plt.figure(figsize=(8,5))
sns.heatmap(df.isnull(), cmap="viridis", cbar=False)
plt.title("欠損値の可視化")
plt.show()

📌 チェックすべきポイント - Age, Cabin, Embarked に欠損値がある
- Cabin は欠損が多いため、削除 or 補完が必要

欠損値の影響を考慮し、適切に処理する!


📌 5. データの分布を可視化

EDAでは、数値データの分布を確認することが重要です。
ヒストグラム(Histogram) を使って、データの偏りを調べましょう!

✅ ヒストグラムでデータの分布を確認

# 年齢(Age)の分布
plt.figure(figsize=(8,5))
sns.histplot(df["Age"].dropna(), bins=30, kde=True)
plt.title("年齢の分布")
plt.xlabel("Age")
plt.ylabel("Count")
plt.show()

📌 チェックすべきポイント - 年齢の分布は正規分布に近いか? - 異常に高い or 低い値はないか? - 欠損値を補完する際、平均値・中央値のどちらが適切か?

データの特徴を理解し、前処理の方針を決める!


📌 6. カテゴリ変数の分布を確認

カテゴリ変数(例: 性別, 乗船地)の割合を可視化します。

✅ 棒グラフでカテゴリの分布を確認

import pandas as pd

# データ準備
df = pd.DataFrame({"Sex": ["male", "female", "female", "male", "male"]})

# 性別の分布
sns.countplot(x="Sex", data=df)
plt.title("性別の分布")
plt.show()

✅ 乗船地(Embarked)の分布を確認

sns.countplot(x="Embarked", data=df)
plt.title("乗船地(Embarked)の分布")
plt.show()

📌 チェックすべきポイント - データに偏りがないか? - 少数派のカテゴリがある場合、どう扱うか?

カテゴリ変数のエンコーディング戦略を考える!


📌 7. ターゲット変数との関係を分析

ターゲット(例: Survived)と各特徴量の関係を可視化しましょう!

✅ 性別ごとの生存率

sns.barplot(x="Sex", y="Survived", data=df)
plt.title("性別ごとの生存率")
plt.show()

📌 考察 - 女性の方が生存率が高い - 男性の生存率は低い

✅ 乗船クラス(Pclass)ごとの生存率

sns.barplot(x="Pclass", y="Survived", data=df)
plt.title("乗船クラスごとの生存率")
plt.show()

📌 考察 - 1等客(Pclass=1)は生存率が高い - 3等客(Pclass=3)は生存率が低い

ターゲットに影響を与える特徴を特定し、特徴量エンジニアリングに活かす!


📌 8. 特徴量同士の相関を分析

相関係数(Correlation Coefficient) を使って、各特徴量の関係を調べます。

✅ 相関行列の可視化

plt.figure(figsize=(10,6))
sns.heatmap(df.corr(numeric_only=True), annot=True, cmap="coolwarm", fmt=".2f")
plt.title("特徴量の相関関係")
plt.show()

📌 チェックすべきポイント - 強い相関がある特徴を発見! - 相関が低い特徴は削除 or 変換を検討 - 相関の高い特徴を組み合わせて新しい特徴を作る


🎯 まとめ

EDAを行うことで、データの特徴を理解し、適切な前処理や特徴量設計ができる!
数値データの分布やカテゴリ変数の割合を可視化し、問題点を発見!
ターゲットとの関係性や特徴量の相関を分析し、機械学習モデルに活かす!

Best regards, (^^ゞ