情节朋友图与熊猫和matplotlib_venn

问题描述 投票:2回答:2

我想根据我的熊猫数据框绘制维恩图。据我所知,matplotlib_venn接受集合作为输入。如果客户端在广告系列中,我的数据集包含客户端ID和另外两个包含信息的列。

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

但是我收到一个错误:

文件“C:\ Python27 \ Lib \ site-packages \ matplotlib_venn_venn3.py”,第44行,在compute_venn3_areas区域= np.array(np.abs(diagram_areas),float)

TypeError:abs()的坏操作数类型:'set'

UPDATE

基于lanS建议,它现在有效。但由于某些原因,图表不在一起。但在他们的文档中,相同的代码可行。

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

更新2 - 解决方案

最后,最简单的方法似乎只是每个空间的插入大小,而不是数据集。灵感here

python pandas matplotlib-venn
2个回答
1
投票

我相信你需要通过3套。基于code here,如果你传递三个子集,那么它们将被转换为元组,然后传递给compute_venn3_areasnp.abs可以处理它们。只传递2组的情况看起来像一个未处理的错误。


0
投票

这个错误是试图迫使2套进入venn3的结果。您需要从同一个库中导入venn2。

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()
© www.soinside.com 2019 - 2024. All rights reserved.