分位数如何计算?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分位数如何计算?相关的知识,希望对你有一定的参考价值。
可以参考下面方法计算正态分位数及标准正态分位数:
操作工具:电脑,excel2010
1、首先打开excel2010,新建一个excel工作表。
2、输入数据,并按升序排列,记为X(j)。
3、然后在C1输入(j-0.5)/24,根据这个公式。求出正态分位数。然后鼠标指向单元格右下角填充控点,按住鼠标左键往下拖,正态分位数就求出来了。
4、然后在D1输入Zi,表示标准正态分位数,然后选择函数f(x)选项。
5、出现函数选项,在选择类别中选择“统计”。在选择函数中选择“NORMSINV”,点击确定。
6、选中C2,点击确定,就求出了标准正态分位数。
7、点击D2,鼠标指向单元格右下角填充控点,按住鼠标左键往下拖。
8、完成效果如图所示。
1、将数据从大到小排序,计为数组a(1 to n),n代表数据的长度
2、确定四分位数的位置:b=(n+1)/4=4.25,b的整数部分计为c
b的小数部分计为d。
3、计算Q1:Q1=a(c)+[a(c+1)-a(c)]*d=a(4)+[a(5)-a(4)] *0.25
=29+(31-29)*0.25=29.5
Q2与Q3的求法类似,四分位差=Q3-Q1
分位数
对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个,则中位数不唯一,通常取最中间的两个数值的平均数作为中位数,即二分位数。
一个数集中最多有一半的数值小于中位数,也最多有一半的数值大于中位数。如果大于和小于中位数的数值个数均少于一半,那么数集中必有若干值等同于中位数。
参考技术B首先将输入数组进行从小到大排序,然后计算:(n−1)*p=i+j。其中n为数组元素的个数,将计算结果的整数部分用i表示,小数部分用j来表示。则最终的percentile值为:res=(1−j)*array+j*array
以90分位数计算为例。代入公式所以计算(n-1)*p=(12-1)*0.9=9.9,则整数部分i=9,小数部分j=0.9。查找数组得知,array=array=7,array=array=8。res=(1−j)∗array+j∗array=(1−0.9)∗7+0.9∗8=7.9
分位数计算应用
二分位数是对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个,则中位数不唯一,通常取最中间的两个数值的平均数作为中位数,一个数集中最多有一半的数值小于中位数,也最多有一半的数值大于中位数。
计算有限个数的数据的二分位数的方法是:把所有的同类数据按照大小的顺序排列。如果数据的个数是奇数,则中间那个数据就是这群数据的中位数;如果数据的个数是偶数,则中间那2个数据的算术平均值就是这群数据的中位数。
以上内容参考 百度百科-分位数
如何从频率数据中找到分位数?
假设我有一个数据表,客户已经购买了这样的东西:
Customer|Price|Quantity Sold
a | 200 | 3.3
b | 120 | 4.1
c | 040 | 12.0
d | 030 | 16.76
这应该是数据表的粗略表示,其中包含为同一产品销售的客户,价格和数量。
我想弄清楚如何计算此信息的中位数购买价格。
我对方法学有点困惑,因为我得到了大熊猫的分位数很容易,因为data[row].quantile(x)
但由于每行真的代表不止一个观察,我不确定如何获得分位数。
编辑:最重要的是,主要问题是销售量不是离散的。这是一个连续变量。 (我们喜欢说米,kgs等,所以创建更多行不是一种选择。)
对于一组离散值,通过排序和取中心值找到中值。然而,由于你有连续的Quantity
值,看起来你真的在寻找概率分布的中位数,其中Price
以Quantity
给出的相对频率分布。通过订购数据并获取累积的Quantity
,我们可以为您的问题提供图形表示:
您可以从该图中看到中值为40(X中点的y值)。这是应该预料到的,因为以两个最低价格出售的数量非常大。中位数可以从您的数据框计算如下:
df = df.sort_values('Price')
cumul = df['Quantity Sold'].cumsum()
# Get the row index where the cumulative quantity reaches half the total.
total = df['Quantity Sold'].sum()
index = sum(cumul < 0.5 * total)
# Get the price at that index
result = df['Price'].iloc[index]
可以使用不同的总比率来计算相同数据的任何其他分位数。
您可以循环销售数量并将每个项目添加到一个大的list_of_all_sold(还有其他方法可以执行此操作,这是一个示例):
c = ['a', 'b', 'c']
p = [200, 120, 40]
qs = [3,4,12]
list_of_all_sold = []
for i in range(len(qs)):
for x in range(qs[i]):
a.append(p[i])
然后,Python 3.4+有一个统计包,可用于查找中位数:
from statistics import median
median(list_of_all_sold)
编辑以查找连续数量的中位数:
您可以制作一个pandas数据帧,然后按价格对数据框进行排序,然后找到中位数并减去排序数据框中每个价格点的销售数量,逐行,直到找到中间点。像这样的东西:
c = ['a', 'b', 'c', 'd']
p = [200, 120, 40, 30]
qs = [3.3, 4.1, 12.0, 16.76]
# Create a pandas dataframe
import pandas as pd
df = pd.DataFrame({'price' : p, 'qs' : qs}, index = c)
# Find the index of the median number
median_num_idx = sum(qs) / 2
# Go down dataframe sorted by price
for index, row in df.sort_values('price').iterrows():
# Subtract the quantity sold at that price point from the median number index
median_num_idx = median_num_idx - row['qs']
# Check if you have reach the median index point
if median_num_idx <= 0:
print (row['price'])
break
以上是关于分位数如何计算?的主要内容,如果未能解决你的问题,请参考以下文章