如何获取Plotly箱线图的统计数据并解决Q1、Q3数值不一致问题
问题1:'exclusive'和'inclusive'分位计算方法的区别
二者均为四分位数的常用计算规则,核心差异为计算上下四分位(Q1、Q3)时是否将中位数纳入统计范围:
- exclusive(排他法):计算时先找出数据集的中位数,将中位数本身从数据中排除,拆分出独立的上半区、下半区两个子数据集,分别取两个子数据集的中位数作为Q1和Q3,该方法是统计教材中Tukey箱线图的标准实现规则。
举个例子:有序数据集[1,2,3,4,5,6,7,8,9],中位数为5,拆分后下半区为[1,2,3,4]、上半区为[6,7,8,9],计算得Q1=2.5、Q3=7.5。 - inclusive(包含法):计算时不拆分排除中位数,直接对全量数据集计算25%、75%分位,该方法是pandas等数据分析工具的默认分位计算规则。
以上述数据集为例,直接计算全量数据的25%、75%分位,得到Q1=3、Q3=7,和df.describe()的默认输出一致。
问题2:
df.groupby(['Market'])['Revenue'].describe()是否支持'exclusive'参数 pandas内置的describe()方法没有提供直接切换四分位计算规则的参数,默认输出匹配'inclusive'规则的结果。如果需要得到和Plotly'exclusive'参数一致的统计值,可以通过自定义聚合函数调用quantile()方法实现,示例代码如下:
# 自定义聚合计算exclusive规则的统计值 stats = df.groupby('Market')['Revenue'].agg( count='count', mean='mean', std='std', min='min', q1_exclusive=lambda x: x.quantile(0.25, method='tukey'), median='median', q3_exclusive=lambda x: x.quantile(0.75, method='tukey'), max='max' ) stats
上述代码中指定method='tukey'的分位计算逻辑和Plotly的'exclusive'规则完全匹配,输出的Q1、Q3和箱线图展示的数值一致。
内容的提问来源于stack exchange,提问作者ASH
相关产品推荐
相关产品推荐

