Введение в модуль statistics

Курс по стандартной библиотеке: https://stepik.org/a/259466?utm_source=proproprogs

Смотреть материал на YouTube | RuTube

Последний математический модуль, который мы рассмотрим в рамках стандартной библиотеки Python, – это модуль statistics. Само название говорит, что он содержит набор функций, отвечающих за статистическую обработку данных. Основные из них следующие:

Функция

Описание

mean(data)

среднее арифметическое значений data

fmean(data, weights=None)

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

median(data)

возвращает медианное значение последовательности data

median_low(data), median_high(data)

возвращают наименьшее и наибольшее медианные значения (актуально для последовательностей data с четным числом элементов)

mode(data)

мода последовательности чисел data

multimode(data)

возвращает несколько модальных значений (наиболее часто встречающихся)

geometric_mean(data)

геометрическое среднее значений data

harmonic_mean(data, weights=None)

гармоническое среднее значений data с возможностью указания весов weights

kde(data, h, kernel)

формирование непрерывной ПРВ по дискретным данным data

kde_random(data, h, kernel, seed=None)

формирование случайных данных, по распределению, сформированному с помощью функции kde()

Функции измерения разброса значений

pstdev(data, mu=None)

вычисление стандартного отклонения значений data, как корень квадратный из pvariance(data)

pvariance(data, mu=None)

вычисление дисперсии значений data с усреднением всех величин

stdev(data, xbar=None)

вычисление стандартного отклонения значений data, как корень квадратный из variance(data)

variance(data, xbar=None)

вычисление дисперсии значений data с усреднением N-1 величин, где N – общее число элементов

Функции вычисления корреляции и ковариации

covariance(x, y)

ковариация двух случайных величин x, y

correlation(x, y, method='linear')

корреляция двух случайных величин x, y

linear_regression(x, y, proportional=False)

вычисляет параметры a, b линейной регрессии вида:

y = a * x + b + noise

Конечно, если вам потребовалось в программе на Python делать подобные объемные математические вычисления, а также работать с матрицами и элементами линейной алгебры, то, возможно, следует обратить внимание на специализированный модуль NumPy (не входит в состав стандартной библиотеки, но его имеет смысл отдельно изучить).

Давайте по порядку рассмотрим работу наиболее употребительных из приведенных функций. Вначале импортируем сам модуль statistics. Удобнее всего это сделать командой:

import statistics as st

Здесь st – псевдоним этого модуля, доступный в рамках нашей программы. После этого сформируем список:

x = [4, 3, -1, -1, -1, 0, 3, 6]

к которому применим следующие функции вычисления среднего значения:

st.mean(x)  # 1.625
st.fmean(x)  # 1.625

Последняя позволяет дополнительно вычислять взвешенную сумму с указанными весами. Если веса определить как:

w = [1] * len(x)  # [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]

то получим то же самое усреднение:

st.fmean(x, w)  # 1.625

А вот если разным элементам присвоить разные значения, например, так:

w2 = [1.0, 2.0, 2.0, 1.5, 1.0, 0.5, 3.0, 0.0]

то усредняться они будут с разными весами. Фактические веса пересчитываются по формуле:

где  - суммарное значение всех весов. А, затем, выполняется усреднение последовательности x по формуле:

Реализация этой формулы с помощью функции fmean() выглядит следующим образом:

res = st.fmean(x, w2)  # 1.3181818181818181

Следующая функция median() возвращает медианное значение. Например:

x_md = [4, 3, -1, -1, -1, 2, 3]
st.median(x_md)  # 2

Как было получено это значение 2? В действительности, все очень просто. Если отсортировать последовательность x_md (по возрастанию или убыванию, не важно):

sorted(x_md)  # [-1, -1, -1, 2, 3, 3, 4]

то центральное значение здесь, как раз 2 (перед ней три элемента и после нее тоже три элемента).

Если же используется последовательность с четным числом элементов, например, уже заданная:

# [4, 3, -1, -1, -1, 0, 3, 6]

то функция median() возвратит 1.5:

st.median(x)  # 1.5

Опять же сортируем список:

sorted(x)  # [-1, -1, -1, 0, 3, 3, 4, 6]

Здесь по центру оказываются сразу два элемента 0 и 3 со средним арифметическим 1.5, которое и принимается за медианное значение. Для получения этих граничных значений можно воспользоваться функциями:

st.median_low(x)  # 0
st.median_high(x)  # 3

Следующая функция mode() возвращает наиболее часто встречаемое значение в последовательности (моду):

st.mode(x)  # -1

Вторая аналогичная функция multimode() возвращает список из нескольких модальных значений. Например:

st.multimode(x)  # [-1]
st.multimode('aabbbbccddddeefffgg')  # ['b', 'd']

Во втором случае имеем два значения 'b', 'd' с одинаковой частой встречаемости.

Следующая функция geometric_mean() вычисляет геометрическое среднее последовательности по формуле:

Например:

d = [1.5, 2.5, 2.5, 2.75, 3.25, 4.75]
st.geometric_mean(d)  # 2.7121486566834387

Очевидно, итоговое произведение значений элементов последовательности d должно извлекаться корнем степени n. Одно из простых правил – все числа строго больше нуля.

Вторая похожая функция harmonic_mean() возвращает гармоническое среднее, вычисленное по формуле:

Например:

st.harmonic_mean(d)  # 2.554798671040809

Смысл гармонического среднего можно описать таким примером. Пусть некоторая машина первые 20 км ехала со скоростью 60 км/ч, а вторые 20 км – со скоростью 80 км/ч. Тогда ее средняя скорость движения на всем протяжении пути будет равна:

st.harmonic_mean([60, 80])  # 68.57142857142857

А как решить эту же задачу, но с разными интервалами пути, например, 20 км и 30 км? Это дополнительное условие можно прописать в параметре weights, то есть, задать, как веса для скоростей 60 км/ч и 80 км/ч:

st.harmonic_mean([60, 80], weights=[20, 30])  # 70.58823529411765

На следующем занятии мы продолжим эту тему и рассмотрим функции последних двух секций модуля statistics.

Курс по стандартной библиотеке: https://stepik.org/a/259466?utm_source=proproprogs

Видео по теме