本文へスキップ
BecomeCoder

Pythonデータ分析コース · 第6章 ミニ実践 ― 分析の一連の流れ · レッスン22

前処理 ― 欠損と型を整える

ブラウザで完結

導入

生のデータには、欠損や型のずれが混ざっています。集計の前に整える「前処理」が、正確な分析のカギです。

説明

欠損を含むデータを、確認 → 補完 の順で整えます。

import pandas as pd
import numpy as np
import io

csv_text = """name,age,score
Tanaka,28,80
Suzuki,,95
Sato,22,
Ito,41,88"""

df = pd.read_csv(io.StringIO(csv_text))
print("--- 欠損の数 ---")
print(df.isna().sum())

# age は平均で、score も平均で埋める
df["age"] = df["age"].fillna(df["age"].mean())
df["score"] = df["score"].fillna(df["score"].mean())

print("--- 補完後 ---")
print(df)

read_csv は空欄を自動で NaN(欠損)として読み込みます。fillna で列ごとに平均を埋め、分析に使える状態にしました。

日付の文字列は、pd.to_datetime日付型に変換すると「月ごと」などの集計がしやすくなります。

import pandas as pd
import io

csv_text = "date,sales\n2024-01-05,320\n2024-02-11,150\n2024-02-20,180"
df = pd.read_csv(io.StringIO(csv_text))
df["date"] = pd.to_datetime(df["date"])
df["month"] = df["date"].dt.month     # 月だけ取り出す
print(df)

df["date"].dt.month のように、日付型からは月・曜日などの成分を簡単に取り出せます。

やってみよう

補完を fillna(0) に変えると、平均で埋めた場合と score の平均がどう変わるか比べてみましょう。

演習

上の name の表で、欠損補完後に score 列の平均を表示してください。

ヒント1を見る

fillna で埋めたあと df["score"].mean()

実際に動かしてみよう

下のエディタにPythonを書いて「実行」を押すと、numpy・pandas・matplotlib が使える本物のPython(Pyodide)で出力とグラフが表示されます。初回だけ読み込みに少し時間がかかります。本文の例をそのまま試したり、書き換えたりしてみましょう(グラフ内の文字は日本語だと表示が崩れるため英字で書きます)。

Python — ライブラリ付きで実行(Pyodide)

numpy / pandas / matplotlib が使える本物のPython(Pyodide)を読み込みます。初回のみ読み込みに少し時間がかかります(以降はブラウザにキャッシュされます)。
スクロールして表示された時点でも自動で読み込まれます。