Тьюки пятизначное резюме в Python - PullRequest
11 голосов
/ 07 октября 2010

Мне не удалось найти эту функцию ни в одном из стандартных пакетов, поэтому я написал один ниже. Однако, прежде чем бросать его в 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),

Ответы [ 7 ]

29 голосов
/ 30 ноября 2012

pandas Series и DataFrame имеют метод describe, аналогичный R 's 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 обрабатываются правильно.

9 голосов
/ 07 октября 2010

Я бы избавился от этих двух вещей:

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.Документируйте, что берет функция.
  2. Откуда вы знаете, что звонящие увидят это?Они могут не работать на консоли, и даже если они работают, они могут не захотеть, чтобы ваше сообщение об ошибке мешало их выводу.
  3. Не проверять тип в Python.

Если вы хотите вызвать какое-то исключение для недействительных данных ( не проверка типа), либо разрешите распространению существующего исключения, либо оберните его в свой собственный тип исключения.

6 голосов
/ 15 июня 2011

На случай, если кому-нибудь понадобится версия, которая работает с 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),
0 голосов
/ 31 мая 2019
import numpy as np
# np_array = np.array(np.random.random(100))
np.percentile(np_array, [0, 25, 50, 75, 100])

Выбор процентилей может быть настроен с аргументом interpolation, который по умолчанию равен linear

0 голосов
/ 20 августа 2015

Минимальный, но он выполняет свою работу. :)

import numpy as np
[round(np.percentile(results[:,4], i), 1) for i in [1, 2, 5, 10, 25, 50]]
0 голосов
/ 01 мая 2014

Попробуйте это:

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))
0 голосов
/ 29 ноября 2012

Я новичок в Python, но возвращение рассчитывается неправильно: оно должно быть max (min (v), q1-whisker) для нижней границы и min (max (v), q3 + whisker) для верхней границы , Это то, как это делается в R (функция summary()), и это то, что отображается на бокс-листах в matplotlib.pyplot и в R.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...