Сюжетная диаграмма Венна с пандами и матплотлиб_венн

Я хотел бы построить диаграммы Венна на основе моего фрейма данных панд. Я это понимаю 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()

Однако я получаю ошибку:

Файл "C:\Python27\Lib\site-packages\matplotlib_venn_venn3.py", строка 44, в областях compute_venn3_areas = np.array(np.abs(figure_areas), float)

Ошибка типа: неверный тип операнда для abs(): 'set'

ОБНОВИТЬ

Основываясь на совете 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()

ОБНОВЛЕНИЕ 2 - решение

В конце концов, простейший подход - это только вставить размер каждого пробела, а не набор данных. Вдохновение здесь.

2 ответа

Решение

Я считаю, что вам нужно пройти 3 сета. Исходя из приведенного здесь кода, если вы передадите три подмножества, они будут преобразованы в кортеж перед передачей в 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()

Это дает следующий результат:

Другие вопросы по тегам