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 | 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:
NaNin numerischen ArraysNoneoderNaNin Objekt-ArraysNaTin datetimelike
Siehe auch:
notna für die boolesche Umkehrung von pandas.isna
Series.isna für die fehlenden Werte in einer Serie
DataFrame.isna für die fehlenden Werte in einem DataFrame
Index.isna für die fehlenden Werte in einem Index
[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 | 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 | 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 | 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 | Mß | 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 | 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 | 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 | 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 |