Получение центральных метрик набора данных и метрик вариативности

1. Запускаем Командную строку (Windows) и переходим в папку, где установлен Python

cd C:\Users\Ewoqi\AppData\Local\Programs\Python\Python39\Scripts 

2. Необходимо установить следующие пакеты:

pip install numpy
pip install scipy
pip install pandas
pip install matplotlib

3. Теперь необходимо импортировать все пакеты в свои скрипты:

import math
import statistics
import numpy as np
import scipy.stats
import pandas as pd

4. Также создадим некоторые исходные данные:

x = [8.0, 1, 2.5, 4, 28.0]
x_with_nan = [8.0, 1, 2.5, math.nan, 4, 28.0]
print(x)
print(x_with_nan)

Результат:

5. Чтобы получить значения nan:

print(math.isnan(np.nan), np.isnan(math.nan))
print(math.isnan(x_with_nan[3]), np.isnan(x_with_nan[3]))

Результат:

6. Далее создадим объекты np.ndarray и pd.Series, соответствующие x и x_with_nan:

y, y_with_nan = np.array(x), np.array(x_with_nan)
z, z_with_nan = pd.Series(x), pd.Series(x_with_nan)
print(y)
print(y_with_nan)
print(z)
print(z_with_nan)

Результат:

Центральные метрики

1. Среднеарифметическое

7. Вычисление среднего значения на чистом Python, используя sum() и len(), без импорта библиотек:

mean_ = sum(x) / len(x)
print(mean_)

Результат:

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

mean_ = statistics.mean(x)
print(mean_)
mean_ = statistics.fmean(x)
print(mean_)

Результат:

9. Однако если среди ваших данных есть значения nan, то statistics.mean() и statistics.fmean() вернутся nan в качестве результата:

mean_ = statistics.mean(x_with_nan)
print(mean_)
mean_ = statistics.fmean(x_with_nan)
print(mean_)

Результат:

Этот результат связан с поведением sum(). Ведь sum(x_with_nan) также возвращает nan.

10. С помощью библиотеки NumPy тоже можно получить среднее значение

mean_ = np.mean(y)
print(mean_)

Результат:

11. Также можно просто использовать соответствующий метод

print(y.mean())

Результат:

12. И функция, и метод ведут себя аналогично при наличии значений nan среди ваших данных, для того, чтобы игнорировать nan можно использовать метод nanmean()

print(np.mean(y_with_nan))
print(y_with_nan.mean())
print(np.nanmean(y_with_nan))

Результат:

13. Объекты pd.Series также имеют метод .mean() Pandas, который игнорирует значения nan по умолчанию

mean_ = z.mean()
print(mean_)
print(z_with_nan.mean())

2. Средневзвешенное

14. В чистом Python средневзвешенное можно реализовать комбинацией sum() с range() или zip()

x = [8.0, 1, 2.5, 4, 28.0]
w = [0.1, 0.2, 0.3, 0.25, 0.15]
wmean = sum(w[i] * x[i] for i in range(len(x))) / sum(w)
print(wmean)
wmean = sum(x_ * w_ for (x_, w_) in zip(x, w)) / sum(w)
print(wmean)

Результат:

15. Для большого набора данных можно использовать np.average() для массивов NumPy или серии Pandas

x = [8.0, 1, 2.5, 4, 28.0]
y, z, w = np.array(x), pd.Series(x), np.array(w)
wmean = np.average(y, weights=w)
print(wmean)
wmean = np.average(z, weights=w)
print(wmean)

Результат:

16. Также можно использовать поэлементное умножение w*y с np.sum() или .sum()

print((w * y).sum() / w.sum())

Результат:

17.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *