一意性制約

Pythonで学ぶデータクリーニング

Adel Nehme

VP of AI Curriculum, DataCamp

重複値とは?

すべての列が同じ値

first_name last_name address height weight
Justin Saddlemyer Boulevard du Jardin Botanique 3, Bruxelles 193 cm 87 kg
Justin Saddlemyer Boulevard du Jardin Botanique 3, Bruxelles 193 cm 87 kg
Pythonで学ぶデータクリーニング

重複値とは?

ほとんどの列が同じ値

first_name last_name address height weight
Justin Saddlemyer Boulevard du Jardin Botanique 3, Bruxelles 193 cm 87 kg
Justin Saddlemyer Boulevard du Jardin Botanique 3, Bruxelles 194 cm 87 kg
Pythonで学ぶデータクリーニング

なぜ発生するのか?

重複_1

Pythonで学ぶデータクリーニング

なぜ発生するのか?

重複_2

Pythonで学ぶデータクリーニング

なぜ発生するのか?

重複_3

Pythonで学ぶデータクリーニング

重複値の見つけ方は?

# Print the header
height_weight.head()
  first_name last_name                       address  height  weight
0       Lane     Reese              534-1559 Nam St.     181      64
1       Ivor    Pierce             102-3364 Non Road     168      66
2      Roary    Gibson   P.O. Box 344, 7785 Nisi Ave     191      99
3    Shannon    Little  691-2550 Consectetuer Street     185      65
4      Abdul       Fry                4565 Risus St.     169      65
Pythonで学ぶデータクリーニング

重複値の見つけ方は?

# すべての列で重複を取得
duplicates = height_weight.duplicated()
print(duplicates)
1       False
...     ....
22      True
23      False
...     ...
Pythonで学ぶデータクリーニング

重複値の見つけ方は?

# 重複行を取得
duplicates = height_weight.duplicated()
height_weight[duplicates]
    first_name last_name                               address  height  weight
100       Mary     Colon                           4674 Ut Rd.     179      75
101       Ivor    Pierce                     102-3364 Non Road     168      88
102       Cole    Palmer                       8366 At, Street     178      91
103    Desirae   Shannon  P.O. Box 643, 5251 Consectetuer, Rd.     196      83
Pythonで学ぶデータクリーニング

重複行の見つけ方は?

.duplicated() メソッド

subset: 重複判定に使う列名のリスト。

keep: 重複のうちどれを残すか。先頭'first')、末尾'last')、すべてFalse)。

# 重複判定に使う列
column_names = ['first_name','last_name','address']
duplicates = height_weight.duplicated(subset = column_names, keep = False)
Pythonで学ぶデータクリーニング

重複行の見つけ方は?

# 重複値を出力
height_weight[duplicates]
    first_name last_name                               address  height  weight
1         Ivor    Pierce                     102-3364 Non Road     168      66
22        Cole    Palmer                       8366 At, Street     178      91
28     Desirae   Shannon  P.O. Box 643, 5251 Consectetuer, Rd.     195      83
37        Mary     Colon                           4674 Ut Rd.     179      75
100       Mary     Colon                           4674 Ut Rd.     179      75
101       Ivor    Pierce                     102-3364 Non Road     168      88
102       Cole    Palmer                       8366 At, Street     178      91
103    Desirae   Shannon  P.O. Box 643, 5251 Consectetuer, Rd.     196      83
Pythonで学ぶデータクリーニング

重複行の見つけ方は?

# 重複値を出力
height_weight[duplicates].sort_values(by = 'first_name')
    first_name last_name                               address  height  weight
22        Cole    Palmer                       8366 At, Street     178      91
102       Cole    Palmer                       8366 At, Street     178      91
28     Desirae   Shannon  P.O. Box 643, 5251 Consectetuer, Rd.     195      83
103    Desirae   Shannon  P.O. Box 643, 5251 Consectetuer, Rd.     196      83
1         Ivor    Pierce                     102-3364 Non Road     168      66
101       Ivor    Pierce                     102-3364 Non Road     168      88
37        Mary     Colon                           4674 Ut Rd.     179      75
100       Mary     Colon                           4674 Ut Rd.     179      75
Pythonで学ぶデータクリーニング

重複行の見つけ方は?

# 重複値を出力
height_weight[duplicates].sort_values(by = 'first_name')

1_3_full_duplicates.png

Pythonで学ぶデータクリーニング

重複行の見つけ方は?

# 重複値を出力
height_weight[duplicates].sort_values(by = 'first_name')

1_3_partial_duplicates.png

Pythonで学ぶデータクリーニング

重複値の処理方法は?

# 重複値を出力
height_weight[duplicates].sort_values(by = 'first_name')

1_3_full_duplicates.png

Pythonで学ぶデータクリーニング

重複値の処理方法は?

.drop_duplicates() メソッド

subset: 重複判定に使う列名のリスト。

keep: 残す重複。先頭'first')、末尾'last')、すべてFalse)。

inplace: 新規オブジェクトを作らずに DataFrame 内で直接削除(True)。

# 重複を削除
height_weight.drop_duplicates(inplace = True)
Pythonで学ぶデータクリーニング

重複値の処理方法は?

# 重複値を出力
column_names = ['first_name','last_name','address']
duplicates = height_weight.duplicated(subset = column_names, keep = False)
height_weight[duplicates].sort_values(by = 'first_name')
    first_name last_name                               address  height  weight
28     Desirae   Shannon  P.O. Box 643, 5251 Consectetuer, Rd.     195      83
103    Desirae   Shannon  P.O. Box 643, 5251 Consectetuer, Rd.     196      83
1         Ivor    Pierce                     102-3364 Non Road     168      66
101       Ivor    Pierce                     102-3364 Non Road     168      88
Pythonで学ぶデータクリーニング

重複値の処理方法は?

# 重複値を出力
column_names = ['first_name','last_name','address']
duplicates = height_weight.duplicated(subset = column_names, keep = False)
height_weight[duplicates].sort_values(by = 'first_name')

1_3_duplicate_aggregation.png

Pythonで学ぶデータクリーニング

重複値の処理方法は?

.groupby().agg() メソッド

# 指定列でグループ化し要約統計を作成
column_names = ['first_name','last_name','address']
summaries = {'height': 'max', 'weight': 'mean'}
height_weight = height_weight.groupby(by = column_names).agg(summaries).reset_index()

# 集約が完了したか確認 duplicates = height_weight.duplicated(subset = column_names, keep = False) height_weight[duplicates].sort_values(by = 'first_name')
first_name    last_name    address    height    weight

Pythonで学ぶデータクリーニング

Passons à la pratique !

Pythonで学ぶデータクリーニング

Preparing Video For Download...