メンバーシップ制約

Pythonによるデータクリーニング

Adel Nehme

Content Developer @DataCamp

第2章 - テキストとカテゴリデータの問題

Pythonによるデータクリーニング

カテゴリとメンバーシップの制約

事前定義された有限のカテゴリセット

データの種類 サンプル値 数値表現
婚姻状況 unmarried, married 0,1
世帯所得カテゴリ 0-20K, 20-40K, ... 0,1, ..
ローンステータス default,payed,no_loan 0,1,2

婚姻状況はunmarriedまたはmarriedのみです

Pythonによるデータクリーニング

なぜこのような問題が発生するのでしょうか?

カテゴリの問題

Pythonによるデータクリーニング

これらの問題をどう扱いますか?

カテゴリ

Pythonによるデータクリーニング

例

# Read study data and print it
study_data = pd.read_csv('study.csv')
study_data
      name   birthday blood_type
1     Beth 2019-10-20         B-
2 Ignatius 2020-07-08         A-
3     Paul 2019-08-12         O+
4    Helen 2019-03-17         O-
5 Jennifer 2019-12-17         Z+
6  Kennedy 2020-04-27         A+
7    Keith 2019-04-19        AB+
# Correct possible blood types
categories
  blood_type
1         O-
2         O+
3         A-
4         A+
5         B+
6         B-
7        AB+
8        AB-
Pythonによるデータクリーニング

例

# Read study data and print it
study_data = pd.read_csv('study.csv')
study_data
      name   birthday blood_type
1     Beth 2019-10-20         B-
2 Ignatius 2020-07-08         A-
3     Paul 2019-08-12         O+
4    Helen 2019-03-17         O-
5 Jennifer 2019-12-17         Z+  <--
6  Kennedy 2020-04-27         A+
7    Keith 2019-04-19        AB+
# Correct possible blood types
categories
  blood_type
1         O-
2         O+
3         A-
4         A+
5         B+
6         B-
7        AB+
8        AB-
Pythonによるデータクリーニング

結合に関する注記

Pythonによるデータクリーニング

血液型に対する左アンチ結合

Pythonによるデータクリーニング

血液型の内部結合

Pythonによるデータクリーニング

一貫性のないカテゴリを見つける

inconsistent_categories = set(study_data['blood_type']).difference(categories['blood_type'])
print(inconsistent_categories)
{'Z+'}
# Get and print rows with inconsistent categories
inconsistent_rows = study_data['blood_type'].isin(inconsistent_categories)

study_data[inconsistent_rows]
      name   birthday blood_type
5 Jennifer 2019-12-17         Z+
Pythonによるデータクリーニング

一貫性のないカテゴリーの削除

inconsistent_categories = set(study_data['blood_type']).difference(categories['blood_type'])
inconsistent_rows = study_data['blood_type'].isin(inconsistent_categories)
inconsistent_data = study_data[inconsistent_rows]

# Drop inconsistent categories and get consistent data only consistent_data = study_data[~inconsistent_rows]
      name   birthday blood_type
1     Beth 2019-10-20         B-
2 Ignatius 2020-07-08         A-
3     Paul 2019-08-12         O+
4    Helen 2019-03-17         O-
...    ...      ...          ...
Pythonによるデータクリーニング

お疲れさまでした!

Pythonによるデータクリーニング

Preparing Video For Download...