【问题标题】:How should the interquartile range be calculated in Python?在 Python 中应该如何计算四分位距?
【发布时间】:2015-02-12 20:34:51
【问题描述】:

我有一个数字列表[1, 2, 3, 4, 5, 6, 7],我想要一个函数来返回这个数字列表的四分位数范围。四分位距是上四分位数和下四分位数之间的差。我尝试使用 NumPy 函数和 Wolfram Alpha 计算四分位距。我发现所有的答案,从我的手册答案,到 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 中的尝试如下:

所以,我发现 NumPy 和 Wolfram Alpha 返回的值对于我认为是第一个四分位数、第三个四分位数和四分位数范围的值并不一致。为什么是这样?我应该在 Python 中做什么才能正确计算四分位距?

据我所知,[1, 2, 3, 4, 5, 6, 7] 的四分位数范围应该如下:

median(5, 6, 7) - median(1, 2, 3) = 4.

【问题讨论】:

    标签: python statistics median percentile wolframalpha


    【解决方案1】:

    numpy 1.9 版提供了一个方便的“插值”参数来帮助您达到 4。

    a = numpy.array([1, 2, 3, 4, 5, 6, 7])
    numpy.percentile(a, 75, interpolation='higher') - numpy.percentile(a, 25, interpolation='lower')
    

    【讨论】:

    • 非常感谢您的代码帮助。我会看看你的方法。如果我也能接受你的回答,我会 -- or1426 提供更多细节来帮助澄清正在发生的事情。
    【解决方案2】:

    您有 7 个数字,您正试图将它们分成四分位数。因为 7 不能被 4 整除,所以如 here 所述,有几种不同的方法可以做到这一点。

    您的方式是该链接给出的第一个,wolfram alpha 似乎正在使用第三个。 Numpy 做的事情与 wolfram 基本相同,但是它基于百分位数(如 here 所示)而不是四分位数进行插值,因此它得到了不同的答案。您可以使用插值选项选择 numpy 如何处理此问题(我尝试链接到文档,但显然每个帖子只允许两个链接)。

    您必须为您的应用程序选择您喜欢的定义。

    【讨论】:

      【解决方案3】:

      不完美,但这些函数应该是近似的:

      def quartile_1(l):
          return sorted(l)[int(len(l) * .25)]
      
      def median(l):
          return sorted(l)[len(l)/2]
      
      def quartile_3(l):
          return sorted(l)[int(len(l) * .75)]
      

      【讨论】:

        猜你喜欢
        • 2019-04-19
        • 1970-01-01
        • 2020-12-15
        • 2015-04-12
        • 2020-11-26
        • 1970-01-01
        • 1970-01-01
        • 2021-08-16
        • 2020-07-08
        相关资源
        最近更新 更多