【问题标题】:How to plot transition among multiple groups in python如何在python中绘制多个组之间的过渡
【发布时间】:2021-08-08 07:21:02
【问题描述】:

我想在 python 中绘制多个组之间的转换。假设我在给定的日期时间 x 有三组 A、B 和 C。现在在日期时间 y > x 我想可视化 A 的哪些元素转换到 B 组,转换到 C 的百分比。对于 B 和 C 也是如此。我现在可以假设有固定数量的元素。我也可以将其扩展到多个日期,例如 x

可以使用此代码生成我的用例的示例数据框

elements = [f'e{i}' for i in range(10)]
x = pd.DataFrame({'element': elements, 'group': np.random.choice(['A', 'B', 'C'], size=10), 'date': pd.to_datetime('2021-04-01')})
y = pd.DataFrame({'element': elements, 'group': np.random.choice(['A', 'B', 'C'], size=10), 'date': pd.to_datetime('2021-04-10')})
df = x.append(y)

现在从上面的数据框中,我想可视化这两个日期从 A、B 和 C 组的过渡是如何发生的。

我的主要问题是我不知道在 python 中使用什么情节来可视化这一点,任何线索都会非常有帮助。

【问题讨论】:

    标签: python matplotlib plotly seaborn data-visualization


    【解决方案1】:

    这是一种获得所需的方法,即从一个日期转移到另一个日期:

    # pivot the data so dates become columns
    s = df.pivot(index='element', columns='date', values='group')
    

    s 设为:

    date    2021-04-01 2021-04-10
    element                      
    e0               A          A
    e1               A          C
    e2               B          B
    e3               B          B
    e4               C          C
    e5               A          C
    e6               B          B
    e7               C          A
    e8               C          A
    e9               C          A
    

    接下来,

    # compare the two consecutive dates
    pairwise = pd.get_dummies(s.iloc[:, 1]).T @ pd.get_dummies(s.iloc[:,0])
    

    这会给你pairwise

       A  B  C
    A  1  0  3
    B  0  3  0
    C  2  0  1
    

    这意味着,例如第一列表示第一个日期有 3 个A,一个保持A,第二个日期有2 个更改为C。最后,您可以使用

    轻松计算百分比
    pairwise / pairwise.sum()
    

    输出,您可以使用 sns.heatmap 之类的东西来可视化:

              A    B     C
    A  0.333333  0.0  0.75
    B  0.000000  1.0  0.00
    C  0.666667  0.0  0.25
    

    注意关于扩展问题,对于每一对 (day1, day2), (day2, day3),...,您将拥有一系列这些矩阵。由您决定如何将它们可视化。

    【讨论】:

    • @NikhilMishra 如果您在我编辑之前看到了答案:pairwise 的定义有更新。
    • 是的,观察到了。仍然想知道是否有更好的方法来显示过渡。我更关心可视化部分,如何最好地展示它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多