どうもニコイチです。前回欠損値について説明しましたが、今回は欠損値の処理に着目して説明しています。データ分析を始めると、最初につまづきやすいポイントがいくつかあります。その中でも「欠損値の扱い」は重要でありながら、難しく感じる部分です。この記事では、初心者の方がスムーズに理解し、実践できるよう、欠損値の確認と処理方法について分かりやすく解説します。
全編はこちらから
1. 欠損値とは?
前回の記事の復習となりますが、欠損値とは、本来得られるべきデータが欠落している状態のことを指します。
具体例
- アンケートの未回答項目(例: 性別が未記入)
- センサーや計測器の不具合で得られなかったデータ
表形式のデータでの欠損値の例
出身 | 年齢 | 性別 |
---|---|---|
神奈川 | 31 | 女 |
東京 | NaN | 男 |
大阪 | 46 | 女 |
北海道 | 18 | NaN |
上記の例では、空欄やNaN
(Not a Number)が欠損値です。
2. 欠損値を確認する方法
Pythonでは、pandas
ライブラリを使うことで簡単に欠損値を確認できます。 以下に、具体的な手順を示します。
手順 1: CSVデータの読み込み
まずはデータを読み込んでみましょう。
import pandas as pd
# CSVファイルの読み込み
data = pd.read_csv("宿泊価格について_demo.csv")
# データの先頭5行を表示
print(data.head())
手順 2: 欠損値の有無を確認
isnull
関数を使用すると、各値が欠損値かどうかを確認できます。
# 各値が欠損値かどうかを確認
print(data.isnull())
出力例:
カラム名 | 値1 | 値2 | 値3 |
---|---|---|---|
price | False | True | False |
bedrooms | True | False | False |
このように、欠損値にはTrue
が表示されます。
手順 3: カラムごとの欠損値の数を確認
# カラムごとの欠損値の数を確認
print(data.isnull().sum())
出力例:
price 5
bedrooms 2
bathrooms 3
これで、どのカラムに欠損値があるか分かります。
3. 欠損値の処理方法
欠損値の処理方法には主に次の2つがあります。それぞれの利点と注意点を理解して選択しましょう。
3.1 欠損値の削除
データ量が十分に多く、欠損値が少数の場合、欠損値を含む行や列を削除することができます。
# 特定のカラムに欠損値があるデータを削除
data = data.dropna(subset=["beds", "bedrooms", "bathrooms"])
メリット
- シンプルで簡単
- データの一貫性を保ちやすい
デメリット
- 欠損が多い場合、データ量が減りすぎる可能性がある
3.2 欠損値の補完
データが少ない場合や、重要な特徴量が欠損している場合は、欠損値を他の値で補完する方法が一般的です。
平均値で補完する例
# 平均値で補完
mean_val = data["review_scores_rating"].mean()
data["review_scores_rating"] = data["review_scores_rating"].fillna(mean_val)
その他の補完方法
- 中央値: 極端な値の影響を受けにくい
median_val = data["price"].median() data["price"] = data["price"].fillna(median_val)
- 最頻値: カテゴリデータに適している
mode_val = data["bed_type"].mode()[0] data["bed_type"] = data["bed_type"].fillna(mode_val)
- 予測モデル: 機械学習モデルを使用して補完
from sklearn.impute import SimpleImputer imputer = SimpleImputer(strategy='mean') data[["price"]] = imputer.fit_transform(data[["price"]])
4. 実践例: 宿泊データの欠損値を処理
「宿泊価格について_demo.csv」を使用して、実際に欠損値を処理してみましょう。
データ確認
# データの欠損状況確認
print(data.isnull().sum())
出力例:
beds 10
bedrooms 5
bathrooms 2
欠損値の削除
# 欠損値を削除
data = data.dropna(subset=["beds", "bedrooms", "bathrooms"])
欠損値の補完
# 平均値で補完
mean_review = data["review_scores_rating"].mean()
data["review_scores_rating"] = data["review_scores_rating"].fillna(mean_review)
5. まとめ
この記事では、Pythonを使った欠損値の確認と処理方法について詳しく解説しました。欠損値はデータ分析において避けて通れない課題ですが、適切な方法で対処すれば、分析の質を大きく向上させることができます。
ポイントの振り返り
isnull()
で欠損値を確認dropna()
で欠損値を削除fillna()
で欠損値を補完
次のステップとして、欠損値を処理したデータを使って、データの可視化や機械学習モデルの構築に挑戦してみましょう!
コメント