Учебники

SciPy — Статистика

Все статистические функции находятся в подпакете scipy.stats, и довольно полный список этих функций можно получить с помощью функции info (stats) . Список доступных случайных величин также можно получить из строки документации для подпакета stats. Этот модуль содержит большое количество вероятностных распределений, а также растущую библиотеку статистических функций.

Каждый одномерный дистрибутив имеет свой собственный подкласс, как описано в следующей таблице:

Старший Класс и описание
1

rv_continuous

Универсальный непрерывный класс случайных величин, предназначенный для подклассов

2

rv_discrete

Общий класс дискретных случайных величин, предназначенный для подклассов

3

rv_histogram

Создает распределение, заданное гистограммой

rv_continuous

Универсальный непрерывный класс случайных величин, предназначенный для подклассов

rv_discrete

Общий класс дискретных случайных величин, предназначенный для подклассов

rv_histogram

Создает распределение, заданное гистограммой

Нормальная непрерывная случайная величина

Распределение вероятностей, при котором случайная величина X может принимать любое значение, является непрерывной случайной величиной. Ключевое слово location (loc) указывает среднее. Ключевое слово scale (scale) определяет стандартное отклонение.

Как экземпляр класса rv_continuous , объект norm наследует от него коллекцию универсальных методов и дополняет их деталями, специфичными для данного конкретного распределения.

Чтобы вычислить CDF в нескольких точках, мы можем передать список или массив NumPy. Давайте рассмотрим следующий пример.

from scipy.stats import norm
import numpy as np
print norm.cdf(np.array([1,-1., 0, 1, 3, 4, -2, 6]))

Вышеуказанная программа сгенерирует следующий вывод.

array([ 0.84134475, 0.15865525, 0.5 , 0.84134475, 0.9986501 ,
0.99996833, 0.02275013, 1. ])

Чтобы найти медиану распределения, мы можем использовать функцию процентной точки (PPF), которая является обратной к CDF. Давайте разберемся, используя следующий пример.

from scipy.stats import norm
print norm.ppf(0.5)

Вышеуказанная программа сгенерирует следующий вывод.

0.0

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

from scipy.stats import norm
print norm.rvs(size = 5)

Вышеуказанная программа сгенерирует следующий вывод.

array([ 0.20929928, -1.91049255, 0.41264672, -0.7135557 , -0.03833048])

Вышеуказанный вывод не воспроизводим. Для генерации одинаковых случайных чисел используйте функцию seed.

Равномерное распределение

Равномерное распределение может быть сгенерировано с использованием равномерной функции. Давайте рассмотрим следующий пример.

from scipy.stats import uniform
print uniform.cdf([0, 1, 2, 3, 4, 5], loc = 1, scale = 4)

Вышеуказанная программа сгенерирует следующий вывод.

array([ 0. , 0. , 0.25, 0.5 , 0.75, 1. ])

Построить дискретное распределение

Давайте сгенерируем случайную выборку и сравним наблюдаемые частоты с вероятностями.

Биномиальное распределение

Как экземпляр класса rv_discrete , объект binom наследует от него коллекцию универсальных методов и дополняет их деталями, специфичными для данного конкретного дистрибутива. Давайте рассмотрим следующий пример.

from scipy.stats import uniform
print uniform.cdf([0, 1, 2, 3, 4, 5], loc = 1, scale = 4)

Вышеуказанная программа сгенерирует следующий вывод.

array([ 0. , 0. , 0.25, 0.5 , 0.75, 1. ])

Описательная статистика

Базовая статистика, такая как Min, Max, Mean и Variance, принимает массив NumPy в качестве входных данных и возвращает соответствующие результаты. Несколько основных статистических функций, доступных в пакете scipy.stats , описаны в следующей таблице.

Старший Описание функции
1

описывают ()

Вычисляет несколько описательной статистики переданного массива

2

GMean ()

Вычисляет среднее геометрическое вдоль указанной оси

3

hmean ()

Вычисляет среднее гармоническое вдоль указанной оси

4

эксцесс ()

Вычисляет эксцесс

5

Режим()

Возвращает модальное значение

6

перекос ()

Проверяет асимметрию данных

7

f_oneway ()

Выполняет односторонний ANOVA

8

IQR ()

Вычисляет межквартильный диапазон данных вдоль указанной оси

9

zscore ()

Вычисляет z-оценку каждого значения в выборке относительно среднего значения по выборке и стандартного отклонения.

10

СЭМ ()

Вычисляет стандартную ошибку среднего (или стандартную ошибку измерения) значений во входном массиве

описывают ()

Вычисляет несколько описательной статистики переданного массива

GMean ()

Вычисляет среднее геометрическое вдоль указанной оси

hmean ()

Вычисляет среднее гармоническое вдоль указанной оси

эксцесс ()

Вычисляет эксцесс

Режим()

Возвращает модальное значение

перекос ()

Проверяет асимметрию данных

f_oneway ()

Выполняет односторонний ANOVA

IQR ()

Вычисляет межквартильный диапазон данных вдоль указанной оси

zscore ()

Вычисляет z-оценку каждого значения в выборке относительно среднего значения по выборке и стандартного отклонения.

СЭМ ()

Вычисляет стандартную ошибку среднего (или стандартную ошибку измерения) значений во входном массиве

Некоторые из этих функций имеют аналогичную версию в scipy.stats.mstats , которая работает для замаскированных массивов. Позвольте нам понять это на примере, приведенном ниже.

from scipy import stats
import numpy as np
x = np.array([1,2,3,4,5,6,7,8,9])
print x.max(),x.min(),x.mean(),x.var()

Вышеуказанная программа сгенерирует следующий вывод.

(9, 1, 5.0, 6.666666666666667)

Т-тест

Давайте поймем, как T-тест полезен в SciPy.

ttest_1samp

Вычисляет T-тест для среднего значения ОДНОЙ группы баллов. Это двусторонний тест для нулевой гипотезы о том, что ожидаемое значение (среднее) выборки независимых наблюдений «а» равно заданному среднему значению для популяции, среднему значению . Давайте рассмотрим следующий пример.

from scipy import stats
rvs = stats.norm.rvs(loc = 5, scale = 10, size = (50,2))
print stats.ttest_1samp(rvs,5.0)

Вышеуказанная программа сгенерирует следующий вывод.

Ttest_1sampResult(statistic = array([-1.40184894, 2.70158009]),
pvalue = array([ 0.16726344, 0.00945234]))

Сравнивая два образца

В следующих примерах есть две выборки, которые могут быть либо из одного, либо из другого распределения, и мы хотим проверить, имеют ли эти выборки одинаковые статистические свойства.

ttest_indвычисляет T-тест для средних двух независимых выборок баллов. Это двусторонний тест для нулевой гипотезы о том, что две независимые выборки имеют идентичные средние (ожидаемые) значения. Этот тест предполагает, что популяции имеют идентичные отклонения по умолчанию.

Мы можем использовать этот тест, если мы наблюдаем две независимые выборки из одной или разных популяций. Давайте рассмотрим следующий пример.

from scipy import stats
rvs1 = stats.norm.rvs(loc = 5,scale = 10,size = 500)
rvs2 = stats.norm.rvs(loc = 5,scale = 10,size = 500)
print stats.ttest_ind(rvs1,rvs2)

Вышеуказанная программа сгенерирует следующий вывод.

Ttest_indResult(statistic = -0.67406312233650278, pvalue = 0.50042727502272966)

Вы можете проверить то же самое с новым массивом такой же длины, но с различным средним значением. Используйте другое значение в loc и тестируйте то же самое.