DataFrame'leri bağlama

Python ile Veri Temizleme

Adel Nehme

VP of AI Curriculum, DataCamp

Kayıt bağlama

Python ile Veri Temizleme

Kayıt bağlama

Python ile Veri Temizleme

Veri çerçevelerimiz

census_A

             given_name  surname date_of_birth         suburb state  address_1
rec_id                                                                
rec-1070-org   michaela  neumann      19151111  winston hills   nsw  stanley street 
rec-1016-org   courtney  painter      19161214      richlands   vic  pinkerton circuit 
...

census_B

               given_name  surname date_of_birth             suburb state  address_1
rec_id                                                                      
rec-561-dup-0       elton      NaN      19651013         windermere   vic  light setreet 
rec-2642-dup-0   mitchell    maxon      19390212         north ryde   nsw  edkins street 
...
Python ile Veri Temizleme

Önceden yaptıklarımız

# Tüm çiftleri üretmek için recordlinkage'i içe aktarın
import recordlinkage
indexer = recordlinkage.Index()
indexer.block('state')
full_pairs = indexer.index(census_A, census_B)

# Karşılaştırma adımı compare_cl = recordlinkage.Compare() compare_cl.exact('date_of_birth', 'date_of_birth', label='date_of_birth') compare_cl.exact('state', 'state', label='state') compare_cl.string('surname', 'surname', threshold=0.85, label='surname') compare_cl.string('address_1', 'address_1', threshold=0.85, label='address_1')
potential_matches = compare_cl.compute(full_pairs, census_A, census_B)
Python ile Veri Temizleme

Şu an ne yapıyoruz

Python ile Veri Temizleme

Olası eşleşmelerimiz

potential_matches

Python ile Veri Temizleme

Olası eşleşmelerimiz

potential_matches

Python ile Veri Temizleme

Olası eşleşmelerimiz

potential_matches

Python ile Veri Temizleme

Olası eşleşmelerimiz

potential_matches

Python ile Veri Temizleme

Olası eşleşmeler (yüksek olasılık)

matches = potential_matches[potential_matches.sum(axis = 1) >= 3]
print(matches)

Python ile Veri Temizleme

Olası eşleşmeler (yüksek olasılık)

matches = potential_matches[potential_matches.sum(axis = 1) >= 3]
print(matches)

Python ile Veri Temizleme

İndeksleri alın

matches.index
MultiIndex(levels=[['rec-1007-org', 'rec-1016-org', 'rec-1054-org', 'rec-1066-org', 
'rec-1070-org', 'rec-1075-org', 'rec-1080-org', 'rec-110-org', ...
# Yalnızca census_B'den indeksleri alın
duplicate_rows = matches.index.get_level_values(1)
print(census_B_index)
Index(['rec-2404-dup-0', 'rec-4178-dup-0', 'rec-1054-dup-0', 'rec-4663-dup-0',
       'rec-485-dup-0', 'rec-2950-dup-0', 'rec-1234-dup-0', ... , 'rec-299-dup-0'])
Python ile Veri Temizleme

DataFrame'leri bağlama

# census_B'deki yinelenenleri bulma
census_B_duplicates = census_B[census_B.index.isin(duplicate_rows)]

# census_B'deki yeni satırları bulma census_B_new = census_B[~census_B.index.isin(duplicate_rows)]
# DataFrame'leri bağlayın!
full_census = pd.concat([census_A, census_B_new])
Python ile Veri Temizleme
# recordlinkage'i içe aktarın, çiftler üretin ve sütunlarda karşılaştırın
...
# Olası eşleşmeleri üretin
potential_matches = compare_cl.compute(full_pairs, census_A, census_B)

# 3+ sütunda eşleşenleri ayırın matches = potential_matches[potential_matches.sum(axis = 1) >= 3]
# Yalnızca census_B'deki eşleşen indeksleri alın duplicate_rows = matches.index.get_level_values(1)
# census_B'deki yeni satırları bulma census_B_new = census_B[~census_B.index.isin(duplicate_rows)]
# DataFrame'leri bağlayın! full_census = pd.concat([census_A, census_B_new])
Python ile Veri Temizleme

Hadi pratik yapalım!

Python ile Veri Temizleme

Preparing Video For Download...