Praxisbeispiel - Datenverarbeitung - Deduplizieren

1. Daten

1.1 Beispieldaten laden

[1]:
import pandas as pd
[2]:
customers = pd.read_csv(
    "https://raw.githubusercontent.com/kjam/data-cleaning-101/master/data/customer_data_duped.csv",
    encoding="utf-8",
)

1.2 Daten verstehen

1.2.1. Daten anzeigen

[3]:
customers
[3]:
name job company street_address city state email user_name
0 Patricia Schaefer Programmer, systems Estrada-Best 398 Paul Drive Christianview Delaware lambdavid@gmail.com ndavidson
1 Olivie Dubois Ingénieur recherche et développement en agroal... Moreno rue Lucas Benard Saint Anastasie-les-Bains AR berthelotjacqueline@mahe.fr manonallain
2 Mary Davies-Kirk Public affairs consultant Baker Ltd Flat 3\nPugh mews Stanleyfurt ZA middletonconor@hotmail.com colemanmichael
3 Miroslawa Eckbauer Dispensing optician Ladeck GmbH Mijo-Lübs-Straße 12 Neubrandenburg Berlin sophia01@yahoo.de romanjunitz
4 Richard Bauer Accountant, chartered certified Hoffman-Rocha 6541 Rodriguez Wall Carlosmouth Texas tross@jensen-ware.org adam78
... ... ... ... ... ... ... ... ...
2075 Maurice Stey Systems developer Linke Margraf GmbH & Co. OHG Laila-Scheibe-Allee 2/0 Luckenwalde Hamburg gutknechtevelyn@niemeier.com dkreusel
2076 Linda Alexander Commrcil horiculuri Webb, Ballald and Vasquel 5594 Persn Ciff Mooneybury Maryland ahleythoa@ail.co kennethrchn
2077 Diane Bailly Pharmacien Voisin 527, rue Dijoux Duval-les-Bains CH aruiz@reynaud.fr dorothee41
2078 Jorge Riba Cerdán Hotel manager Amador-Diego Rambla de Adriana Barceló 854 Puerta 3 Huesca Asturias manuelamosquera@yahoo.com eugenia17
2079 Ryan Thompson Brewing technologist Smith-Sullivan 136 Rodriguez Point Bradfordborough North Dakota lcruz@gmail.com cnewton

2080 rows × 8 columns

1.2.2. Datentypen anzeigen

Hierfür verwenden wir pandas.DataFrame.dtypes:

[4]:
customers.dtypes
[4]:
name              str
job               str
company           str
street_address    str
city              str
state             str
email             str
user_name         str
dtype: object

1.2.3. Fehlende Werte ermitteln

pandas.isnull zeigt für ein array-ähnliches Objekt an, ob Werte fehlen:

  • NaN in numerischen Arrays

  • None oder NaN in Objekt-Arrays

  • NaT in datetimelike

[5]:
for col in customers.columns:
    print(col, customers[col].isnull().sum())
name 0
job 0
company 0
street_address 0
city 0
state 0
email 0
user_name 0

2. Duplizierte Datensätze ermitteln und löschen

2.1. mit Pandas

2.1.1 Duplizierte Datenpunkte ermitteln

[6]:
customers.duplicated()
[6]:
0       False
1       False
2       False
3       False
4       False
        ...
2075    False
2076    False
2077    False
2078    False
2079    False
Length: 2080, dtype: bool

customers.duplicated() gibt uns noch nicht den gewünschten Hinweis, ob es doppelte Datensätze gibt. Im Folgenden lassen wir uns alle Datensätze ausgeben, für die True zurückgegeben wird:

[7]:
customers[customers.duplicated()]
[7]:
name job company street_address city state email user_name

Offenbar gibt es keine identischen Datensätze.

2.1.2. Deduplizieren

Da pandas keine Duplikate erkennen konnte, wird das Löschen doppelter Datensätzemit drop_duplicates demnach nichts ändern und die Anzahl des Datensatzes bei 2080 belassen.

[8]:
print(customers.shape)
customers.drop_duplicates(inplace=True)
print(customers.shape)
(2080, 8)
(2080, 8)

2.1.3. user_name-spezifische Ermittlung und Deduplizierung

Wir gehen einen Detailschritt weiter und lassen uns diejenigen Datensätze anzeigen, bei denen nur der user_name identisch ist:

[9]:
customers[customers.duplicated(["user_name"])]
[9]:
name job company street_address city state email user_name
337 Aysel Binner Reccig officer Kuhl Kalleww Swifwunw & Co. KGaA Batix-Kanz-Staß 5/4 Fulda Berli frncoise@wgnerco christinefinke
377 Jolanta Rogge Accommodation managr Scholl e.V. Lrchplz 4/6 Mettmnn Thüringen inrharff@yah.d walentinabeier
506 Mrs. Frances Peters Fuiue desie Rsgers, Lawrence and Richards Studio \nCarpntr kys Wes Simn BO halenewilliams@wilson-sandes.og amy17
545 Gerhart Krebs MBA. Surgeon Roskoth Kühnertweg 863 Stade Bayern olav44@bolander.de bettyhahn
592 Folkert Gnatz Meteorologist Bolnbach Heinfried-Austermühle-Ring 05 Eilenburg Thüringen jaentschbirgitt@boerner.org francesco44
633 Manon Jacquot Ingénieur en aéronautique Jacob 8, chemin Éléonore Evrard Marechal-les-Bains AR ilemaitre@voila.fr astrid58
658 Austin Waller Insurance risk surveyor Sexton Group 11097 Hansen Field Davidmouth Texas christina74@doyle-baker.biz olynn
723 Wanda Moran Solicitor, Scotland Estes PLC 08011 Hernandez Streets Apt. 149 Natalieshire Oregon howardreginald@gmail.com dana91
762 Charles Russell Scientist, research (physical sciences) Preston-Wilson 6709 Ashley Circle Apt. 309 Danielberg South Dakota nancyescobar@brown.net ruben71
772 Waltrud Wohlgemut Designer, fashion/clothing Nerger AG Elmar-Ullmann-Allee 6 Schlüchtern Rheinland-Pfalz auch-schlauchindietlind@gmx.de zitakuhl
783 Caroline Mata Engineer, elecrical Grimes Grrur 80157 Whte Alley Sute 79 Soh Mark Iw jared52@aoo.com thomasthompson
889 Ricardo Ripoll Lucena Teevisi camera peratr Luzq Estraqa anq Galinqq Caejón Rosario Viapana 16 Palencia Lgo ev0@oo.com colomerenrique
928 Sophie Letellier du Carpentier Cnucteu e ét Valle7 SARL 3, boulvard Jan Augr Saint Daviddan BS rdorm@dbmi.com anne28
979 Irene Roda Dávila Eitor, maazine featres Daza Inc Roda Carla Miró 5 Viy La Rioa sldrpére@ps.cm ipeñalver
995 Abigail Hernandez Mechanical engineer Smith Ltd 766 Adrian Ranch Ellismouth Colorado jordan60@gmail.com mendozajody
1015 Mr. Paul Newton Government soa researh offer LemnardmWatsmn Studi 86\nKaty ill West Jue VE em@mil.cm bbennett
1043 Anna Adams Programmer alcatons Jones Gjoup 22 Kateen ova Noth Joa KZ asleig65@aisay.co lloydann
1052 Aurélie Vidal Magistrat Martins 88, rue Stéphanie Letellier Rouxnec SE boutineric@blin.fr iwagner
1062 Regina Schacht-Kusch Herbalist Hartung GmbH & Co. KGaA Wenke-Hörle-Ring 36 Eggenfelden Sachsen-Anhalt oluebs@troest.de xklotz
1120 Jeffrey Benjamin Publ house manager Chcn Inc 27 Rodgrs Rdgs Apt. 269 Suth Jeffererg Iinois stepanie90@rogers.co lori67
1170 Julio Agustín Amaya Tax aviser Piñolk Belmonke and Codina Calleón de Gregorio Bustamante 28 Piso 7 La Pala Salamanca usolana@jáuregui-pedraza.om gloriaolmo
1339 Ing. Andrew Schleich B.A. Ln Holt Putz GnR Hugasse 8/8 Hainichn Neersachsen jun@putz.com jesselmaja
1360 Frédérique Lejeune-Daniel Tecce cse Sctmitt chemin Denise Ferrand Saint ChalotteVille IE jchretien@costacom joseph60
1384 Kenneth Moore Magazine journalist Cross, Bfll anf Diaz 753 Lindsey Pine Thompsonshe Colorao ashey28@rice.co todd72
1423 Thomas Coulon Collecteur de fonds Levy 91, rue Laetitia Collet Dias-sur-Normand SC deschampsgabriel@guyot.fr michelepetit
1433 Jerry Barnes Tour mner Col-Wllllams 30 Mpy Ovepass Jeiferview Utah insnashl@gas-hais.cm christopher62
1452 Karen Weeks Psychotherapist, child Rodriguez, Brady and Jackson 233 Kevin Street Larryside Indiana gregg39@hernandez-gomez.com knapprobert
1489 Herr Johann Eigenwillig Immigration officer Süßebier Hänel GmbH Langernplatz 0 Stadtsteinach Thüringen haasemarieluise@noack.com istoll
1544 Pasquale Schwital Trade mark attorney Finke Detlef-Binner-Platz 0/1 Burg Niedersachsen hanne-lore98@gmx.de thomas14
1557 Stephanie Young Herpetologist Bryant and Sons 5163 Rebecca Creek Suite 421 North Theresaberg Alaska stephenwilliams@summers.com ahawkins
1567 Carolina Reguera Sanz Fam manae Cami77, C7aparr7 a7d N7gu7ra Vil e Imel Oorio 25 Madd Vicaya mordóñ@cámara.info eva16
1616 Sonia Amores Senir tax prfessina/tax inspectr J5an-Núñez Avnida d Grgorio Manón 344 Prta 8 Ponevedr Lugo icent4@montenero-brroso.info sanmartínguillermo
1647 Juan Carlos Iker Boix Ros Pre phtgrapher Pont, P44om4r4s 4nd Arjon4 Pasadzo de Josep Bentez  Pso Las Palmas Mia srgio24@gail.co luis-miguel23
1652 Jörg Henschel Chaity office Schicke AG HennyLorchRng 484 Hohensein-Ensh BadenWürtteberg huerhes@hmal.de anne-katrin51
1703 Marc Tate Ship broker Wagner, Mitchell and Grimes 721 Christopher View Suite 840 Watsonmouth Connecticut chenjessica@hotmail.com patricia34
1707 Joseph Hines Pyhiatri nre Cr4ig, G4rci4 4nd Rich4rds 85663 Savage Gles Mcgeeon Als bcaldern@htmail.cm emilytorres
1722 Julie Baldwin Set deigner W5ll55mson-G5rz5 58513 Paricia Res Suie 45 So Me Alaska diuez@uess. cmoss
1759 Sarah Hoffman Exhibitin designe Hensont Wiley and Ryan 9490 Curts Spur Sute 82 Jseptwn Arizona ncole@yahoo.com csmith
1796 Valentine Devaux-Roger Direceur d'ôial Leiris 57, enue de Gros BenadBou AL rogrlro@munoz.om xherve
1809 Slavica Seidel Psychotherapist, child Wulff Hande KG Preißgasse 0/4 Soest Rheinland-Pfalz tloos@krause.net abien
1820 Wenke Schweitzer Enginr, automoti Wesa4k KG Eies. 7 Ba Lnwra Thürige rsthveriue@mies.rg kwernecke
1829 Dr. Thomas Hein Copy Geisel Ladeckgasse 11 Rockenhausen Nordrhein-Westfalen grein-grotharnim@kallert.de siegmar08
1837 Andrew Hart Engineer, civil (contracting) Barnett LLC 258 Day Hollow Suite 410 Kimberlyhaven Colorado brandy00@yahoo.com amy30
1914 Shelby Fowler Air traffic controller Fields-Sanchez 533 Fitzpatrick Bypass Francesberg Michigan terrystephen@anderson.org gcain
1938 Susan Aubry Directeur d'agence bancaire Payet Georges S.A.S. 67, rue Inès Valentin Nicolas FI milletedith@sfr.fr tthierry
1948 Richard Karge-Kobelt Junalist maaine Abberb Keubeb AG Mitschkeee 8 SachsnAnhalt nrejwgner@gmx.e muehlehenni
1960 Anna de Lobato Medcl techcl ocer Maciag PLC Calleón de Dolore Parea 21 At 7 Palncia Cantaria vázqzlornzo@al.om daniel70
1968 Zoltan Wähner B.A. Professor Emerits Th8e8 Stotr. 1 Saulgau Shlsg-Holst arlenpruschke@salz.or kklemm
1995 Kenneth Dunn Programmer, systems Leonard Inc 5361 Patterson Mission Suite 504 Villaburgh Rhode Island kristen54@gmail.com jkent
2010 Gertraude Schomber Insurance risk surveyor Bruder Christa-Ullrich-Allee 0/1 Schwäbisch Hall Hessen gumprichalice@schmidt.de fruppert
2075 Maurice Stey Systems developer Linke Margraf GmbH & Co. OHG Laila-Scheibe-Allee 2/0 Luckenwalde Hamburg gutknechtevelyn@niemeier.com dkreusel

Ein darauf den user_name gefilterter Datensatz kann so aussehen:

[10]:
customers[customers["user_name"] == "christinefinke"]

[10]:
name job company street_address city state email user_name
236 Aysel Binner Recycling officer Kuhl Kallert Stiftung & Co. KGaA Beatrix-Kranz-Straße 5/4 Fulda Berlin francoise22@wagner.com christinefinke
337 Aysel Binner Reccig officer Kuhl Kalleww Swifwunw & Co. KGaA Batix-Kanz-Staß 5/4 Fulda Berli frncoise@wgnerco christinefinke

Nun können wir diejenigen Datenpunkte löschen, deren user_name identisch ist:

[11]:
print(customers.shape)
customers.drop_duplicates(["user_name"], inplace=True)
print(customers.shape)
(2080, 8)
(2029, 8)

Dies hat 2080-2029=51 Original-Datenpunkte gelöscht.

2.2. Deduplizieren mit fuzzywuzzy

Als Alternative und zum Vergleich fürs Identifizieren von Duplikation und das entsprechende Deduplizieren schauen wir uns die Bibliothek fuzzywuzzy an:

https://www.python4data.science/de/latest/clean-prep/string-matching.html

2.3. Deduplizieren mit Dedupe

Alternativ können wir die duplizierte Daten mit der Dedupe-Bibliothek (https://docs.dedupe.io/en/latest/) erkennen, die ein flaches neuronales Netzwerk verwendet, um aus einem kleinen Training zu lernen.

Das entsprechende Notebook finden wir hier:

https://www.python4data.science/de/latest/clean-prep/deduplicate.html#3.-Dedupe