我有一个数字列表[1, 2, 3, 4, 5, 6, 7]并且我想有一个函数来返回这个数字列表的四分位数范围。四分位范围是上四分位和下四分位之间的差异。我试着用numpy函数和wolfram alpha计算四分位间距。我发现所有的答案,从我的手册,到新的,到沃尔夫拉姆阿尔法,都是不同的。我不知道这是为什么。
我在python中的尝试如下:

>>> a = numpy.array([1, 2, 3, 4, 5, 6, 7])
>>> numpy.percentile(a, 25)
2.5
>>> numpy.percentile(a, 75)
5.5
>>> numpy.percentile(a, 75) - numpy.percentile(a, 25) # IQR
3.0

我在Wolfram Alpha的尝试如下:
"first quartile 1, 2, 3, 4, 5, 6, 7": 2.25
"third quartile 1, 2, 3, 4, 5, 6, 7": 5.75
(注释:5.75-2.25=3.5)
"interquartile range 1, 2, 3, 4, 5, 6, 7": ~3.5
因此,我发现由NUMPY和WOLFRAMα返回的值对于我认为是第一个四分位数、第三个四分位数和四分位数范围是不一致的。这是为什么?我应该在python中做什么来正确计算四分位范围?
据我所知,[1, 2, 3, 4, 5, 6, 7]的四分位范围应如下:
median(5, 6, 7) - median(1, 2, 3) = 4.

最佳答案

你有7个数字,你试图把它们分成四分位数。因为7不能被4整除,所以有两种不同的方法可以做到这一点。
你的方式是第一个给定的链接,沃尔夫拉夫阿尔法似乎是使用第三。Numpy基本上和沃尔夫拉姆做同样的事情,但是它是基于百分位数的插值(如图中的AA>)而不是四分位数,所以它得到了不同的答案。您可以选择如何使用插值选项处理这个数字(我试图链接到文档,但显然我只允许每个帖子有两个链接)。
你必须为你的应用程序选择你喜欢的定义。

07-28 13:29