データのクリーニングとアクセス

Pythonでカテゴリカルデータを扱う

Kasey Jones

Research Data Scientist

カテゴリデータの課題になりがちな点

1) 値の不一致: "Ham", "ham", " Ham"

2) スペル誤り: "Ham", "Hma"

3) 誤った dtype: df['Our Column'].dtype

dtype('O')
Pythonでカテゴリカルデータを扱う

問題の特定

次のいずれかを使用

  • Series.cat.categories
  • Series.value_counts()
dogs["get_along_cats"].value_counts()
No     2503
yes     275
no      156
Noo       2
 NO       1
Pythonでカテゴリカルデータを扱う

修正: 空白

空白の削除: .strip()

dogs["get_along_cats"] = dogs["get_along_cats"].str.strip()

頻度を確認

dogs["get_along_cats"].value_counts()
No     2503
yes     275
no      156
Noo       2
NO        1   # < ---- 余分な空白なし
Pythonでカテゴリカルデータを扱う

修正: 大文字小文字

大文字小文字: .title(), .upper(), .lower()

dogs["get_along_cats"] = dogs["get_along_cats"].str.title()

頻度を確認

dogs["get_along_cats"].value_counts()
No     2660 
Yes     275
Noo       2
Pythonでカテゴリカルデータを扱う

修正: スペルミス

.replace() でタイポを修正

replace_map = {"Noo": "No"}
dogs["get_along_cats"].replace(replace_map, inplace=True)

頻度を確認

dogs["get_along_cats"].value_counts()
No     2662
Yes     275
Pythonでカテゴリカルデータを扱う

データ型の確認

dtype の確認

dogs["get_along_cats"].dtype
dtype('O')

カテゴリに戻す

dogs["get_along_cats"] = dogs["get_along_cats"].astype("category")
Pythonでカテゴリカルデータを扱う

str アクセサの利用

文字列の検索

dogs["breed"].str.contains("Shepherd", regex=False)
0        False
1        False
2        False
...
2935     False
2936     True
Pythonでカテゴリカルデータを扱う

loc でデータにアクセス

カテゴリで Series を抽出

dogs.loc[dogs["get_along_cats"] == "Yes", "size"]

Series の件数集計

dogs.loc[dogs["get_along_cats"] == "Yes", "size"].value_counts(sort=False)
small      69
medium    169
large      37
Pythonでカテゴリカルデータを扱う

クリーニングとアクセスの練習

Pythonでカテゴリカルデータを扱う

Preparing Video For Download...