Python中的Tukey五位数摘要

2024-03-29 10:30:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我在任何一个标准包中都找不到这个函数,所以我在下面写了一个。然而,在把它扔向芝士店之前,有人知道已经出版的版本吗?或者,请提出任何改进建议。谢谢。

def fivenum(v):
    """Returns Tukey's five number summary (minimum, lower-hinge, median, upper-hinge, maximum) for the input vector, a list or array of numbers based on 1.5 times the interquartile distance"""
    import numpy as np
    from scipy.stats import scoreatpercentile
    try:
        np.sum(v)
    except TypeError:
        print('Error: you must provide a list or array of only numbers')
    q1 = scoreatpercentile(v,25)
    q3 = scoreatpercentile(v,75)
    iqd = q3-q1
    md = np.median(v)
    whisker = 1.5*iqd
    return np.min(v), md-whisker, md, md+whisker, np.max(v),

Tags: oroftheimportnparraymdlist
3条回答

^{}SeriesDataFrame有一个describe方法,类似于Rsummary

In [3]: import numpy as np

In [4]: import pandas as pd

In [5]: s = pd.Series(np.random.rand(100))

In [6]: s.describe()
Out[6]: 
count    100.000000
mean       0.540376
std        0.296250
min        0.002514
25%        0.268722
50%        0.593436
75%        0.831067
max        0.991971

NAN的正确处理。

如果有人需要与数据中的NaN一起工作的版本,这里是我的修改。为了避免混淆,我不想改变原来的海报答案。

import numpy as np
from scipy.stats import scoreatpercentile
from scipy.stats import nanmedian

def fivenum(v):
    """Returns Tukey's five number summary (minimum, lower-hinge, median, upper-hinge, maximum) for the input vector, a list or array of numbers based on 1.5 times the interquartile distance"""
    try:
        np.sum(v)
    except TypeError:
        print('Error: you must provide a list or array of only numbers')
    q1 = scoreatpercentile(v[~np.isnan(v)],25)
    q3 = scoreatpercentile(v[~np.isnan(v)],75)
    iqd = q3-q1
    md = nanmedian(v)
    whisker = 1.5*iqd
    return np.nanmin(v), md-whisker, md, md+whisker, np.nanmax(v),

我要摆脱这两件事:

import numpy as np
from scipy.stats import scoreatpercentile

您应该在模块级别导入。这意味着用户在导入模块时,而不是在调用函数时,会意识到缺少的依赖项。

try:
    sum(v)
except TypeError:
    print('Error: you must provide a list or array of only numbers')

有几个问题:

  1. 不要在Python中键入check。记录函数的作用。
  2. 你怎么知道打电话的人会看到这个?它们可能不在控制台上运行,即使它们在控制台上运行,它们也可能不希望错误消息干扰它们的输出。
  3. 不要在Python中键入check。

如果确实要对无效的数据(不是类型检查)引发某种异常,请传播现有异常,或将其包装为自己的异常类型。

相关问题 更多 >