来自实际集合的 UpSetPlot

UpSetPlot from actual sets

鉴于我拥有的实际集合,我想使用 UpSetPlot,但我找不到任何示例以这种方式使用它。标准示例是这样的:

from upsetplot import generate_counts, plot
example = generate_counts()
plot(example, orientation='vertical')

其中生成的 example 是一个 Series,如下所示。

cat0   cat1   cat2 
False  False  False      56
              True      283
       True   False    1279
              True     5882
True   False  False      24
              True       90
       True   False     429
              True     1957
Name: value, dtype: int64

有没有办法从类别 cat0cat1cat2 中的实际元素自动生成这种计数结构?

对我来说它看起来像是 pandas 的产品:

import numpy as np
import pandas as pd

from upsetplot import generate_counts, plot
example = generate_counts()
type(example)

pandas.core.series.Series

example.index

MultiIndex([(False, False, False),
            (False, False,  True),
            (False,  True, False),
            (False,  True,  True),
            ( True, False, False),
            ( True, False,  True),
            ( True,  True, False),
            ( True,  True,  True)],
           names=['cat0', 'cat1', 'cat2'])

所以如果你的数据框是这样的:

df = pd.DataFrame(np.random.choice([True,False],(100,3)),
                  columns=['cat0','cat1','cat2'])

你可以这样做:

example = df.groupby(['cat0','cat1','cat2']).size()
plot(example, orientation='vertical')

我认为限制是 cat0、cat1、cat2 中的元素必须是布尔值。

使用@StupidWolf 在另一个答案中的提示,这是我自己的问题的答案。给定 3 组

set1 = {0,1,2,3,4,5}
set2 = {3,4,5,6,10}
set3 = {0,5,6,7,8,9}

这里是为这三个集合绘制扰乱图的代码:

import pandas as pd
from upsetplot import plot
set_names = ['set1', 'set2', 'set3']
all_elems = set1.union(set2).union(set3)
df = pd.DataFrame([[e in set1, e in set2, e in set3] for e in all_elems], columns = set_names)
df_up = df.groupby(set_names).size()
plot(df_up, orientation='horizontal')

第 4 行和第 5 行更改为将上面的代码概括为集合列表,比如 sets = [set1, set2, set3]:

all_elems = list(set().union(*sets))
df = pd.DataFrame([[e in st for st in sets] for e in all_elems], columns = set_names)

集合可用于表示类别成员资格的方式有多种。为了帮助将集翻译成 upsetplot 所需的格式,您会找到帮助者 from_memberships, from_contents and from_indicators.

另见 Data Format Guide