Daten deduplizieren

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",
)

2. Deduplizieren mit pandas

2.1 Überblick

[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

2.2 Datentypen anzeigen

Hierfür verwenden wir pandas.DataFrame.dtypes:

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

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

Siehe auch:

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

2.4 Duplizierte Datensätze 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.5 Duplizierte Daten löschen

Das Löschen doppelter Datensätze mit drop_duplicates sollte demnach nichts ändern und die Anzahl der Datensätze bei 2080 belassen:

[8]:
customers.drop_duplicates()
[8]:
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

Nun wollen wir uns diejenigen Datensätze anzeigen lassen, bei denen 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

Nun können wir uns die zugehörigen Datensätze anzeigen lassen, z.B. mit:

[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

Schließlich können wir diejenigen Datensätze löschen, deren user_name identisch ist:

[11]:
customers.drop_duplicates(["user_name"])
[11]:
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
... ... ... ... ... ... ... ... ...
2074 Rhonda James Recruitment consultant Turner, Bradley and Scott 28382 Stokes Expressway Port Gabrielaport New Hampshire zroberts@hotmail.com heathscott
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

2029 rows × 8 columns

Dies löschte 51 Datensätze.

3. Dedupe

Alternativ können wir die duplizierte Daten mit der Dedupe-Bibliothek erkennen, die ein flaches neuronales Netzwerk verwendet, um aus einem kleinen Training zu lernen.

Siehe auch:

csvdedupe bietet ein Kommandozeilenwerkzeug für Dedupe.

Zudem haben dieselben Entwickler*innen parserator erstellt, mit dem ihr Textfunktionen extrahieren und eure eigenen Textextraktion trainieren könnt.

3.1 Dedupe konfigurieren

Nun definieren wir die Felder, auf die bei der Deduplizierung geachtet werden soll und erstellen ein neues deduper-Objekt:

[12]:
from pathlib import Path

import dedupe


customers = pd.read_csv(
    "https://raw.githubusercontent.com/kjam/data-cleaning-101/master/data/customer_data_duped.csv",
    encoding="utf-8",
)
[13]:
variables = [
    dedupe.variables.String("name"),
    dedupe.variables.String("job"),
    dedupe.variables.String("company"),
    dedupe.variables.String("street_address"),
    dedupe.variables.String("city"),
    dedupe.variables.String("state"),
    dedupe.variables.String("email"),
    dedupe.variables.String("user_name"),
]

deduper = dedupe.Dedupe(variables)

Wenn der Wert eines Feldes fehlt, sollte dieser fehlende Wert als None-Objekt dargestellt werden. Durch 'has_missing': True wird jedoch ein neues, zusätzliches Feld erstellt, das angibt, ob die Daten vorhanden waren oder nicht, und die fehlenden Daten werden mit Null versehen.

Siehe auch

[14]:
deduper
[14]:
<dedupe.api.Dedupe at 0x12672cc20>
[15]:
customers.shape
[15]:
(2080, 8)

4. Trainingsdaten erstellen

[16]:
deduper.prepare_training(customers.T.to_dict())

prepare_training initialisiert das aktive Lernen mit unseren Daten und, optional, mit vorhandenen Trainingsdaten.

T spiegelt den DataFrame über seine Diagonale, indem Zeilen als Spalten geschrieben werden und umgekehrt. Hierfür wird pandas.DataFrame.transpose verwendet.

5. Aktives Lernen

Mit dedupe.console_label könnt ihr eure Dedupe-Instanz trainieren. Wenn Dedupe ein Datensatzpaar findet, werdet ihr gebeten, es als Duplikat zu kennzeichnen. Ihr könnt hierfür die Tasten y, n und u, um Duplikate zu kennzeichnen. Drückt f, wenn ihr fertig seid.

[17]:
dedupe.console_label(deduper)
name : Patricia Clavero Alemany
job : Scientific laboratory technician
company : Galindo, Barros and Echevarría
street_address : Vial de Nicolás Morata 18
city : Castellón
state : Baleares
email : yblanes@gmail.com
user_name : xpalau

name : Patricia Clavero Alemany
job : Scientiic laorator technician
company : Gglindo, Bgrros gnd Eghevgrríg
street_address : Vial de Nicolás Moraa 18
city : Castllón
state : Baeares
email : yblane@gmail.om
user_name : xalau

0/10 positive, 0/10 negative
Do these records refer to the same thing?
(y)es / (n)o / (u)nsure / (f)inished
 y
name : Emily Ferguson
job : Network engineer
company : Weiss-Chase
street_address : 8572 Sara Greens
city : Rileyfurt
state : New Mexico
email : stephanieblackwell@hotmail.com
user_name : marcmiller

name : Emily Ferguson
job : Netwr egieer
company : WeisswCwwse
street_address : 872 Sara Grees
city : Rileyurt
state : New Mexico
email : stephanelackwell@hotmalcom
user_name : macmille

1/10 positive, 0/10 negative
Do these records refer to the same thing?
(y)es / (n)o / (u)nsure / (f)inished / (p)revious
 y
name : Marissa Hale
job : Finncil conroller
company : GqayqWatts
street_address : 4600 Huse Neck Apt. 06
city : North Robrt
state : Idah
email : gilbetgego@otmilcom
user_name : ulieirin

name : Marissa Hale
job : Financial controller
company : Gray-Watts
street_address : 24600 House Neck Apt. 096
city : North Robert
state : Idaho
email : gilbertgregory@hotmail.com
user_name : julieirwin

2/10 positive, 0/10 negative
Do these records refer to the same thing?
(y)es / (n)o / (u)nsure / (f)inished / (p)revious
 y
name : Elena Ferrer
job : Air cbi crew
company : Cjjjrej Group
street_address : Raba Susana Beengue 58 Piso 8
city : Cárs
state : Cádiz
email : oscarlosfortny@hotmail.com
user_name : eli8

name : Elena Ferrer
job : Air cabin crew
company : Casares Group
street_address : Rambla Susana Berenguer 58 Piso 8
city : Cáceres
state : Cádiz
email : jose-carlosfortuny@hotmail.com
user_name : felix28

3/10 positive, 0/10 negative
Do these records refer to the same thing?
(y)es / (n)o / (u)nsure / (f)inished / (p)revious
 y
name : Don Wilson
job : Librarian acadmic
company : Ferlaldez, Thomal ald Rodriguez
street_address : 84984 Tiffy Pt
city : Wes Jamesmuh
state : Vrgna
email : heenerez@maicm
user_name : tindvis

name : Don Wilson
job : Librarian, academic
company : Fernandez, Thomas and Rodriguez
street_address : 84984 Tiffany Path
city : West Jamesmouth
state : Virginia
email : helenperez@gmail.com
user_name : tinadavis

4/10 positive, 0/10 negative
Do these records refer to the same thing?
(y)es / (n)o / (u)nsure / (f)inished / (p)revious
 y
name : Prof. Tülay Aumann B.Eng.
job : Engineer, maintenance
company : Schmidtke Holzapfel KG
street_address : Ebertplatz 6
city : Merseburg
state : Niedersachsen
email : patrickade@yahoo.de
user_name : delia00

name : Herr Piotr Budig B.Sc.
job : Control and instrumentation engineer
company : Käster
street_address : Kraushaarstraße 5/8
city : Burg
state : Niedersachsen
email : rosaliaschulz@yahoo.de
user_name : zkruschwitz

5/10 positive, 0/10 negative
Do these records refer to the same thing?
(y)es / (n)o / (u)nsure / (f)inished / (p)revious
 n
name : Hunter Jimenez
job : Sub
company : Patton, Little and Dorsey
street_address : 382 Mark Locks
city : Andrewbury
state : Minnesota
email : campbellkimberly@tapia.com
user_name : christophergonzales

name : Shawn Dillon
job : Scientist, research (physical sciences)
company : Smith, Carney and Gamble
street_address : 1971 Jessica Locks
city : East Anthonyborough
state : Kansas
email : zgray@gmail.com
user_name : gsmith

5/10 positive, 1/10 negative
Do these records refer to the same thing?
(y)es / (n)o / (u)nsure / (f)inished / (p)revious
 n
name : Pasquale Schwital
job : Trae mar arney
company : Fink5
street_address : Dl-Bnnr-Plz 0/1
city : Bur
state : Neersachsen
email : hann-lr@gm.d
user_name : thomas14

name : Pasquale Schwital
job : Trade mark attorney
company : Finke
street_address : Detlef-Binner-Platz 0/1
city : Burg
state : Niedersachsen
email : hanne-lore98@gmx.de
user_name : thomas14

5/10 positive, 2/10 negative
Do these records refer to the same thing?
(y)es / (n)o / (u)nsure / (f)inished / (p)revious
 f
Finished labeling

Die letzten beiden verglichenen Trainingsdatensätze machen deutlich, dass wir dieses Duplikat mit unserem obigen drop_duplicates-Beispiel nicht gelöscht haben – clittle und little wurden als unterschiedlich erkannt.

Mit Dedupe.train werden die von euch markierten Datensatzpaare zu den Trainingsdaten hinzugefügt und das Matching-Modell aktualisiert.

Mit index_predicates=True berücksichtigt die Deduplizierung auch Prädikate, die auf der Indizierung der Daten beruhen.

Wenn ihr fertig seid, speichert eure Trainingsdaten mit Dedupe.write_settings.

[18]:
settings_file = "csv_example_learned_settings"

if Path(settings_file).exists():
    print("reading from", settings_file)
    with Path.open(settings_file, "rb") as f:
        deduper = dedupe.StaticDedupe(f)
else:
    deduper.train(index_predicates=True)
    with Path.open(settings_file, "wb") as sf:
        deduper.write_settings(sf)
reading from csv_example_learned_settings

Mit dedupe.Dedupe.partition werden Datensätze identifiziert, die sich alle auf dieselbe Entität beziehen, und als Tupel zurückgegeben, die eine Folge von Datensatz-IDs und Konfidenzwerten sind. Weitere Einzelheiten zum Konfidenzwert findet ihr unter dedupe.Dedupe.cluster.

[19]:
dupes = deduper.partition(customers.T.to_dict())

Wir können uns auch nur einzelne Einträge ausgeben lassen:

[20]:
dupes[0]
[20]:
((np.int64(0), np.int64(963)), (np.float32(0.9495104), np.float32(0.9495104)))

Diese können wir uns dann mit pandas.DataFrame.iloc anzeigen lassen:

[21]:
customers.iloc[[0, 963]]
[21]:
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
963 Patricia Schaefer Prorammer, ytem Es:rada-Bes: 39 Pul Drve Chistianview Delwre mbdvid@gmim ndvdson