2016-06-09 4 views
1

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() 

enter image description here

UPDATE 2 - Lösung

Am Ende scheint der einfachste Ansatz nur Insertgröße von jedem Raum, nicht-Datensatz zu sein. Inspiration here.

+0

Es gibt wahrscheinlich keine Überschneidung zwischen Ihren Sets. Können Sie 'len (set1 & set2)', 'len (set1 & set3)' und 'len (set2 & set3)'? – IanS

+0

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

+0

Danke für die Annahme meiner Antwort :) – IanS

Antwort

1

Ich glaube, Sie müssen 3 Sätze bestehen. Basierend auf der code here, wenn Sie drei Teilmengen übergeben, werden sie in ein Tupel umgewandelt, bevor sie an compute_venn3_areas übergeben werden, wo np.abs damit umgehen kann. Der Fall, wenn Sie nur 2 Sätze passieren, sieht wie ein unbehandelter Fehler aus.

+0

Sie hatten Recht, es war das. Aber trotzdem ist die Ausgabe nicht so, wie es sein sollte. – HonzaB

0

Dieser Fehler ist ein Ergebnis des Versuchs, 2 Sätze in venn3 zu erzwingen. Sie müssen Venn2 aus derselben Bibliothek importieren.

from matplotlib_venn import venn2 

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']) 

venn2([set1, set2], ('Set1', 'Set2')) 
plt.show()