|
|
Введение в модуль statistics
Курс по стандартной библиотеке: https://stepik.org/a/259466?utm_source=proproprogs
Последний
математический модуль, который мы рассмотрим в рамках стандартной библиотеки 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. Удобнее
всего это сделать командой:
Здесь 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]
то получим то же
самое усреднение:
А вот если
разным элементам присвоить разные значения, например, так:
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 (перед ней три элемента и после нее тоже три
элемента).
Если же
используется последовательность с четным числом элементов, например, уже
заданная:
x # [4, 3, -1, -1, -1, 0, 3, 6]
то функция median()
возвратит 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() возвращает
наиболее часто встречаемое значение в последовательности (моду):
Вторая
аналогичная функция 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
|