2016-06-24 6 views
1

Ich habe zwei Datenrahmen. Eins enthält 33765 Unternehmen. Eine andere enthält 358839 Unternehmen. Ich möchte die Übereinstimmung zwischen den beiden mit Fuzzy-Match finden. Da die Anzahl der Datensätze zu hoch ist, versuche ich, die Datensätze beider Datenrahmen nach dem ersten Buchstaben des Firmennamens zu gliedern. Zum Beispiel: Für alle Unternehmen, die mit dem Buchstaben "A" beginnen, hat der erste Datenrahmen 2600 Datensätze und der zweite 25000 Datensätze. Ich implementiere vollständige Zusammenführung zwischen ihnen und dann Fuzzy-Match anwenden, um alle Unternehmen mit Fuzz Wert mehr als 95 zu bekommen. Dies funktioniert immer noch nicht, weil die Anzahl der Datensätze immer noch zu hoch, um vollständige Zusammenführung zwischen ihnen durchzuführen und dann implementieren Fuzzy. Kernel stirbt jedes Mal, wenn ich diese Operationen mache. Derselbe Ansatz funktionierte gut, wenn die Anzahl der Datensätze in beiden Frames 4-stellig war. Außerdem, schlagen Sie vor, es gibt eine Möglichkeit, dies für alle Buchstaben 'A' bis 'Z' zu automatisieren, anstatt den Code für jeden Buchstaben manuell zu starten (ohne Kernel-Würfel zu machen).Fuzzy-Match zwischen einer großen Anzahl von Datensätzen

Hier ist mein Code:

c='A' 
df1 = df1[df1.companyName.str[0] == c ].copy() 
df2 = df2[df2.companyName.str[0] == c].copy() 
df1['Join'] =1 
df2['Join'] =1 
df3 = pd.merge(df1,df2, left_on='Join',right_on='Join') 
df3['Fuzz'] = df3.apply(lambda x: fuzz.ratio(x['companyName_x'], x['companyName_y']) , axis=1) 
df3.sort_values(['companyName_x','Fuzz'],ascending=False, inplace=True) 
df4 = df3.groupby('companyName_x',as_index=False).first() 
df5=df4[df4.Fuzz>=95] 
+0

Warum stirbt Ihr Kernel? Wie viel RAM hast du, hast du keinen RAM mehr? Können Sie die Ausgabe von 'df1.info (verbose = True, memory_usage = True)' und 'df1.info (verbose = True, memory_usage = True)' in Ihre Frage aufnehmen? – Kartik

+0

Ich weiß nicht warum, aber das zeigt keine Ausgabe an. – ComplexData

Antwort

0

Sie begann mit den richtigen Weg hinunter Aufzeichnungen auf einem gemeinsamen zugeschrieben (dem ersten Buchstaben) auf der Basis Chunking. In der Literatur zur Literaturverknüpfung wird dieses Konzept blocking genannt, und es ist entscheidend, die Anzahl der Vergleiche auf etwas Leichteres zu reduzieren.

Der Weg nach vorne ist, noch bessere Blockierungsregeln zu finden: vielleicht die ersten fünf Zeichen oder ein ganzes Wort gemeinsam.

Die dedupe library kann Ihnen helfen, gute Blockierregeln zu finden. (Ich bin ein Core-Entwickler für diese Bibliothek)