python - 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 指定置信区间值来绘制(而不是计算)?
解决方案
推荐阅读
- python - 检查数组的数组元素是否存在于python中的另一个数组中
- pthreads - 无法在 Firefox 中运行简单的 Emscripten 线程示例
- windows - 本地 Kyma 重启问题
- javascript - 使用道具更改禁用属性时的无限循环。(VueJs)
- python - 我想在值错误的地方打印 Insufficient data 并继续 for 循环?如何做呢?
- c# - C# 构造函数如何为只读属性赋值?
- amazon-athena - pyathena 或 pyathenajdbc 无法使用 `schema_name` 连接其他目录没有得到尊重
- c# - 自定义格式异常 c# - 异常未处理,为什么?
- c# - 非主键属性的唯一约束
- swift - 带有可编码数组的 swift 5 抽象网络响应