用 pandas 和 matplotlib_venn 绘制维恩图
Plot venn diagram with pandas and matplotlib_venn
我想根据我的 pandas 数据框绘制维恩图。我知道 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()
但是我得到一个错误:
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'
我相信你需要通过 3 套。基于 code here,如果你传递三个子集,那么它们在传递给 compute_venn3_areas
之前被转换成一个元组,np.abs
可以处理它们。仅传递 2 组的情况看起来像是未处理的错误。
此错误是由于试图强制将 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()
为少量集合创建维恩图的简单方法。希望这有帮助。
import matplotlib.pyplot as plt
from matplotlib_venn import venn2
from matplotlib_venn import venn3
set1 = set()
set2 = set()
set3 = set()
set4 = set()
set_array = []
set_names = ['Set1', 'Set2', 'Set3', 'Set4']
set1.add('a')
set1.add('b')
set2.add('b')
set2.add('c')
set3.add('c')
set3.add('d')
set4.add('d')
set4.add('e')
set_array.append(set1)
set_array.append(set2)
set_array.append(set3)
set_array.append(set4)
# venn2([set1, set2], ('Set1', 'Set2')) # venn2 works for two sets
venn3(set_array[0:3], set_names[0:3]) # venn3 works for three sets
plt.show()
这会生成以下输出:
我想根据我的 pandas 数据框绘制维恩图。我知道 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()
但是我得到一个错误:
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'
我相信你需要通过 3 套。基于 code here,如果你传递三个子集,那么它们在传递给 compute_venn3_areas
之前被转换成一个元组,np.abs
可以处理它们。仅传递 2 组的情况看起来像是未处理的错误。
此错误是由于试图强制将 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()
为少量集合创建维恩图的简单方法。希望这有帮助。
import matplotlib.pyplot as plt
from matplotlib_venn import venn2
from matplotlib_venn import venn3
set1 = set()
set2 = set()
set3 = set()
set4 = set()
set_array = []
set_names = ['Set1', 'Set2', 'Set3', 'Set4']
set1.add('a')
set1.add('b')
set2.add('b')
set2.add('c')
set3.add('c')
set3.add('d')
set4.add('d')
set4.add('e')
set_array.append(set1)
set_array.append(set2)
set_array.append(set3)
set_array.append(set4)
# venn2([set1, set2], ('Set1', 'Set2')) # venn2 works for two sets
venn3(set_array[0:3], set_names[0:3]) # venn3 works for three sets
plt.show()
这会生成以下输出: