首页 > 解决方案 > Seaborn 置信区间占总数的一部分

问题描述

我有一个带有分类列和浮点值列的数据框,并希望将分类组的浮点总和可视化为总数的一部分(例如 20% 对 80%)。此外,我想可视化不确定性,即围绕点估计绘制置信区间。

这是一个程式化的例子:

import pandas as pd

df = pd.DataFrame(data={
    'flag':[True, False, True, True, True, False, True, False, True, True, True, True],
    'revenue': [1,2,3,4,5,6,7,8,9,10,11,12]
    })

print(df.groupby('flag').revenue.sum()/df.revenue.sum())

flag
False    0.205128
True     0.794872
Name: revenue, dtype: float64

我试图在 seaborn barplot 函数中指定估计器并得到这个 Seaborn barplot 输出

import seaborn as sns

sns.barplot(data=df, x='flag', y='revenue', estimator=lambda x: np.sum(x)/df.revenue.sum())

问题是 seaborn 允许条形的置信区间超过 100%,即超过总数(虽然它应该被限制在 100%)。

这是正确引导置信区间的快速而肮脏的代码示例:

def bootstrap_ratio(df):
  df_bs = df.sample(n=len(df), replace=True)
  return df_bs.groupby('flag').revenue.sum()/df_bs.revenue.sum()

N = 1000 # bootstrap samples
pd.concat([bootstrap_ratio(df) for i in range(N)], axis=1).quantile([0.05, 0.95], axis=1)

         False     True 
0.05  0.052912  0.575636
0.95  0.427810  0.973333

在这种情况下,flag==True 的 90% 置信区间为 [58%, 97%],上边缘不超过 100%。

我将如何让 seaborn 做到这一点?或者至少我如何为 seaborn 指定置信区间值来绘制(而不是计算)?

标签: pythonpandasseaborn

解决方案


推荐阅读