Ich möchte Venn-Diagramme auf der Grundlage meiner Pandas Datenrahmen plotten. Ich verstehe, dass matplotlib_venn
Sätze als Eingabe akzeptiert. Meine Datenmenge enthält die Kunden-ID und zwei weitere Spalten mit Informationen, ob der Kunde in der Kampagne war oder nicht.Plot Venn Diagramm mit Pandas und Matplotlib_venn
df_dataset = pd.read_csv('...path...',delimiter=',',decimal=',')
campaign_a = df_dataset[(df_dataset['CAM_A'] == 1)]
campaign_b = df_dataset[(df_dataset['CAM_B'] == 1)]
plt.figure(figsize=(4,4))
set1 = set(campaign_a['CLI_ID'])
set2 = set(campaign_b['CLI_ID'])
venn3([set1, set2], ('Set1', 'Set2'))
plt.show()
Allerdings bekomme ich einen Fehler:
File "C:\Python27\Lib\site-packages\matplotlib_venn_venn3.py", line 44, in compute_venn3_areas areas = np.array(np.abs(diagram_areas), float)
TypeError: bad operand type for abs(): 'set'
UPDATE
Basierend auf Lans Beratung, es funktioniert jetzt. Aber aus irgendwelchen Gründen sind die Diagramme nicht zusammen. Aber in ihrer Dokumentation funktioniert der gleiche Code.
plt.figure(figsize=(4,4))
set1 = set(campaign_a['CLI_ID'])
set2 = set(campaign_b['CLI_ID'])
set3 = set(union['CLI_ID'])
venn3([set1, set2, set3], ('A', 'B', 'union'))
plt.show()
UPDATE 2 - Lösung
Am Ende scheint der einfachste Ansatz nur Insertgröße von jedem Raum, nicht-Datensatz zu sein. Inspiration here.
Es gibt wahrscheinlich keine Überschneidung zwischen Ihren Sets. Können Sie 'len (set1 & set2)', 'len (set1 & set3)' und 'len (set2 & set3)'? – IanS
Am Ende fand ich einen anderen Ansatz. Anstatt den Datensatz einzufügen, gebe ich nur die Zahlen ein, nach diesem Beispiel: http://matthiaseisen.com/pp/patterns/p0144/ – HonzaB
Danke für die Annahme meiner Antwort :) – IanS