我正在使用此WNBA数据集Apple's KVO chapter in the "Using Swift with Cocoa and Objective-C" book。我正在分析Height
变量,下面的表格显示了记录的每个高度值的频率,累积百分比和累积频率:
从表格中我可以很容易地得出结论,第一个四分位数(第25个百分位数)不能大于175.
然而,当我使用Series.describe()
时,我告诉第25个百分点是176.5。为什么会这样?
wnba.Height.describe()
count 143.000000
mean 184.566434
std 8.685068
min 165.000000
25% 176.500000
50% 185.000000
75% 191.000000
max 206.000000
Name: Height, dtype: float64
答案 0 :(得分:4)
有多种方法可以估算分位数 175.0 vs 176.5涉及两种不同的方法:
估计如下:
#1
h = (N − 1)*p + 1 #p being 0.25 in your case
Est_Quantile = x⌊h⌋ + (h − ⌊h⌋)*(x⌊h⌋ + 1 − x⌊h⌋)
#2
h = (N + 1)*p
x⌊h⌋ + (h − ⌊h⌋)*(x⌊h⌋ + 1 − x⌊h⌋)
答案 1 :(得分:1)
这是一个统计问题。百分位数有很多定义。以下是为什么在计算第25百分位指数时加1的原因之一:
一个直观的答案是数字1到n的平均值是 不是n / 2而是(n + 1)/ 2。所以这给你一个简单的使用提示 p * n会产生稍微过小的值。
资源:
答案 2 :(得分:0)
这是因为默认情况下describe()
进行线性插值。
所以,没有pandas
没有显示错误的百分位数
(它只是没有显示你想看到的百分位数。)
要获得您的期望,您可以在.quantile()
系列上使用Height
,指定'lower'
的插值:
df = pd.read_csv('../input/WNBA Stats.csv')
df.Height.quantile(0.25,interpolation='lower') #interpolation lower to get what you expect
有关更多选项,请参阅Hortonworks employee。
请注意documentation:
百分位数有很多定义
您可以看到此@jpp said,其中讨论了numpy
和pandas
百分位数计算之间的差异。