Туки пять резюме резюме в Python
Мне не удалось найти эту функцию в любом из стандартных пакетов, поэтому я написал одно из них. Однако, прежде чем бросать его в Cheeseshop, кто-нибудь знает о уже опубликованной версии? В качестве альтернативы, пожалуйста, предложите любые улучшения. Благодарю.
def fivenum(v):
"""Returns Tukey 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),
Ответы
Ответ 1
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
NAN
обрабатываются правильно.
Ответ 2
Я бы избавился от этих двух вещей:
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')
Несколько проблем с этим:
- Не вводите проверку в Python. Документ, который выполняет функция.
- Как вы узнаете, что вызывающие абоненты увидят это? Они могут не работать на консоли, и даже если они есть, они могут не захотеть, чтобы ваше сообщение об ошибке мешало их выводу.
- Не вводите проверку в Python.
Если вы хотите поднять какое-либо исключение для недействительных данных (проверка не), либо разрешить распространение существующего исключения, либо обернуть его в свое собственное исключение тип.
Ответ 3
Если кому-то понадобится версия, которая работает с NaN
в данных, вот моя модификация. Я не хотел менять исходный ответ на плакат, чтобы избежать путаницы.
import numpy as np
from scipy.stats import scoreatpercentile
from scipy.stats import nanmedian
def fivenum(v):
"""Returns Tukey 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),
Ответ 4
Я новичок в Python, но результат вычисляется неверно: он должен быть max (min (v), q1-whisker) для нижней границы и min (max (v), q3 + whisker) для верхней границы, Это как в R (функция summary()
), и то, что отображается на ящиках в matplotlib.pyplot
и в R.
Ответ 5
Попробуйте следующее:
import numpy as np
import numpy.random
from statstools import run
from scipy.stats import scoreatpercentile
data=np.random.randn(5)
return (min(data), md-whisker, md, md+whisker, max(data))
Ответ 6
Минимально, но он выполняет свою работу.:)
import numpy as np
[round(np.percentile(results[:,4], i), 1) for i in [1, 2, 5, 10, 25, 50]]