Ric*_*aga 11 python statistics numpy scipy
我无法在任何标准软件包中找到此函数,因此我编写了下面的一个.然而,在将它扔向Cheeseshop之前,有没有人知道已经发布的版本?或者,请提出任何改进建议.谢谢.
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),
Run Code Online (Sandbox Code Playgroud)
bmu*_*bmu 30
pandas Series并且DataFrame有一个describe方法,它类似于R的summary:
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
Run Code Online (Sandbox Code Playgroud)
NAN是正确处理的.
我会摆脱这两件事:
import numpy as np
from scipy.stats import scoreatpercentile
Run Code Online (Sandbox Code Playgroud)
您应该在模块级别导入.这意味着用户在导入模块时会立即意识到缺少依赖项,而不是在调用函数时.
try:
sum(v)
except TypeError:
print('Error: you must provide a list or array of only numbers')
Run Code Online (Sandbox Code Playgroud)
这有几个问题:
如果您确实想要为无效数据引发某种异常(而不是类型检查),请将现有异常传播,或将其包装在您自己的异常类型中.
如果有人需要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),
Run Code Online (Sandbox Code Playgroud)