0Pricing
Learn AI with Python · レッスン

EDA ワークフローとデータプロファイリング

df.info()、df.describe()、欠損値監査、データ型チェック、カーディナリティ分析を行います。

「EDA ワークフローとデータプロファイリング」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。

探索的データ分析とは

探索的データ分析(EDA)は、モデリングの前に、どのようなデータセットに対しても最初に行う作業です。目的は、構造を理解し、問題を見つけ、データに対する直感を養うことです。

体系的なEDAの最初の確認チェックリストでは、次の問いに答えます。データの規模はどのくらいか。各列のデータ型は何か。欠損値はどこにあるか。重複はあるか。値はどのように分布しているか。

  • データ品質の問題を早期に発見できます
  • クリーニングが必要な特徴量を判断できます
  • 後で検証する仮説を立てられます

データの読み込み

まずDataFrameを読み込み、head()とshapeで簡単に内容を確認します。

shapeは(rows, columns)というタプルを返すため、扱っているデータの規模をすぐに把握できます。

import pandas as pd

df = pd.read_csv("customers.csv")
print(df.shape)        # (10000, 8)
print(df.head())       # first 5 rows

df.info() — 型と非 null 件数

df.info()は、最初に実行するコマンドとして最も役立つものです。各列の名前、dtype、非 null 件数を出力します。

数値列がobjectとして表示される場合は、何か問題があります(余分なテキスト、カンマ、通貨記号などが含まれている可能性があります)。列によって非 null 件数が異なる場合は、欠損データがあります。

df.info()
# <class pandas.DataFrame>
# RangeIndex: 10000 entries
# age      9800 non-null  float64
# city     10000 non-null object
# income   9500 non-null  float64

df.describe() — 数値の要約

df.describe()は、すべての数値列について、件数、平均、標準偏差、最小値、四分位数(25/50/75%)、最大値を返します。

危険な兆候がないか確認しましょう。たとえば、年齢列のminが-1になっている、maxが75パーセンタイルを大きく上回っている(外れ値)、平均が中央値から大きく離れている(歪み)といったケースです。

print(df.describe())
# Use include="all" to also summarize categorical columns
print(df.describe(include="all"))

df.isnull().sum() — 欠損値のカウント

isnull()とsum()を連結すると、列ごとの欠損値を数えられます。さらに.sum()を追加すると、全体の合計を求められます。

深刻度を判断するには、割合に変換します。欠損率が60%の列は削除を検討する価値がありますが、2%の欠損であれば簡単に補完できます。

print(df.isnull().sum())

missing_pct = df.isnull().sum() / len(df) * 100
print(missing_pct.sort_values(ascending=False))

df.duplicated().sum() — 重複行の検索

df.duplicated()は、以前の行と完全に同じ行を示すブール値のSeriesを返します。これを合計すると、重複がいくつあるかを数えられます。

subsetを使うと、重複を特定のキー列に限定できます。idが一意であるべき場合に便利です。

print(df.duplicated().sum())            # exact duplicate rows
print(df.duplicated(subset=["id"]).sum()) # duplicate ids

df = df.drop_duplicates()

value_counts() — カテゴリの頻度

value_counts()は、列内の各一意な値が何回現れるかを集計します。カテゴリデータを調べる際の定番のツールです。

生の件数ではなく割合を確認するにはnormalize=Trueを使い、欠損値も集計に含めるにはdropna=Falseを使います。

print(df["city"].value_counts())
print(df["city"].value_counts(normalize=True))
print(df["city"].value_counts(dropna=False))

カーディナリティの確認

カーディナリティとは、列に含まれる異なる値の数で、nunique()で求められます。

  • 低カーディナリティ(カテゴリが少数) → one-hot encodingに適しています。
  • 高カーディナリティ(ユーザーIDなど、数千個の一意な文字列) → 通常、そのままでは有用な特徴量になりません。
for col in df.select_dtypes("object").columns:
    print(col, "->", df[col].nunique(), "unique")

定数列とIDのような列の発見

プロファイリングでは、次の2つの極端なケースに注意する価値があります。

  • 定数列(nunique() == 1)には情報がないため、削除します。
  • IDのような列(nunique() == len(df))は行ごとに一意であり、ほとんどのモデルにとって有用な情報を何も持たないため、削除を検討します。
n = len(df)
for col in df.columns:
    u = df[col].nunique()
    if u == 1:
        print(col, "is constant")
    elif u == n:
        print(col, "is ID-like")

dtypesとメモリ使用量

df.dtypesを確認して列が正しく格納されていることを確かめ、df.memory_usage(deep=True)でメモリを多く消費している列を見つけます。

数値型をダウンキャストし、カーディナリティの低い文字列をcategoryに変換すると、大規模なデータセットではメモリ使用量を大幅に削減できます。

print(df.dtypes)
print(df.memory_usage(deep=True))

df["city"] = df["city"].astype("category")

再利用可能なプロファイリング用スニペット

チェックリスト全体を1つのヘルパーにまとめると、新しいデータセットに対して毎回同じ初回確認を行えます。

DataFrameを読み込んだらすぐに実行することで、データの形状、型、欠損、重複、カーディナリティをただちに確認できます。

def profile(df):
    print("Shape:", df.shape)
    print(df.info())
    print("Missing:\n", df.isnull().sum())
    print("Dupes:", df.duplicated().sum())
    for c in df.select_dtypes("object"):
        print(c, df[c].nunique(), "unique")

profile(df)

クイックチェック:欠損値

各列の欠損値の割合を求めたいとします。

まとめ:EDAの最初の確認チェックリスト

これで、どのデータセットにも使える、繰り返し実行可能な最初の確認手順が整いました。

  • 規模とプレビューにはshapeとhead()
  • dtypeと非 null 件数にはinfo()
  • 数値の要約と外れ値の手がかりにはdescribe()
  • 欠損にはisnull().sum()
  • 重複行にはduplicated().sum()
  • カテゴリの頻度とカーディナリティにはvalue_counts()とnunique()

次は、単変量分析で個々の列を詳しく調べます。

よくある質問

「EDA ワークフローとデータプロファイリング」レッスンは無料ですか?

はい。「EDA ワークフローとデータプロファイリング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。

「EDA ワークフローとデータプロファイリング」で何を学びますか?

df.info()、df.describe()、欠損値監査、データ型チェック、カーディナリティ分析を行います。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn AI with Pythonを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「EDA ワークフローとデータプロファイリング」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn AI with Pythonレッスンでコードを書いて実行できますか?

はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. EDA ワークフローとデータプロファイリング
  2. 単変量解析
  3. 二変量解析と多変量解析
  4. 特徴量分布と目的変数の分析
← Learn AI with Pythonに戻る