Введение в статистику на Python
Maggie Matsui
Content Developer, DataCamp

Среднее расстояние от каждой точки данных до среднего значения

Среднее расстояние от каждой точки данных до среднего значения

1. Вычтите среднее из каждой точки данных
dists = msleep['sleep_total'] -
np.mean(msleep['sleep_total'])
print(dists)
0 1.666265
1 6.566265
2 3.966265
3 4.466265
4 -6.433735
...
2. Возведите каждое расстояние в квадрат
sq_dists = dists ** 2
print(sq_dists)
0 2.776439
1 43.115837
2 15.731259
3 19.947524
4 41.392945
...
3. Сложите квадраты расстояний
sum_sq_dists = np.sum(sq_dists)
print(sum_sq_dists)
1624.065542
4. Разделите на количество точек минус 1
variance = sum_sq_dists / (83 - 1)
print(variance)
19.805677
Используйте np.var()
np.var(msleep['sleep_total'], ddof=1)
19.805677
Без ddof=1 вычисляется дисперсия генеральной совокупности, а не выборочная дисперсия:
np.var(msleep['sleep_total'])
19.567055
np.sqrt(np.var(msleep['sleep_total'], ddof=1))
4.450357
np.std(msleep['sleep_total'], ddof=1)
4.450357
dists = msleep['sleep_total'] - np.mean(msleep['sleep_total'])np.mean(np.abs(dists))
3.566701
Стандартное отклонение и среднее абсолютное отклонение
np.quantile(msleep['sleep_total'], 0.5)
10.1
$$
0,5-й квантиль = медиана
Квартили:
np.quantile(msleep['sleep_total'], [0, 0.25, 0.5, 0.75, 1])
array([ 1.9 , 7.85, 10.1 , 13.75, 19.9 ])
import matplotlib.pyplot as plt
plt.boxplot(msleep['sleep_total'])
plt.show()

np.quantile(msleep['sleep_total'], [0, 0.2, 0.4, 0.6, 0.8, 1])
array([ 1.9 , 6.24, 9.48, 11.14, 14.4 , 19.9 ])
np.linspace(start, stop, num)
np.quantile(msleep['sleep_total'], np.linspace(0, 1, 5))
array([ 1.9 , 7.85, 10.1 , 13.75, 19.9 ])
Высота прямоугольника на ящике с усами
np.quantile(msleep['sleep_total'], 0.75) - np.quantile(msleep['sleep_total'], 0.25)
5.9
from scipy.stats import iqr
iqr(msleep['sleep_total'])
5.9
Выброс: точка данных, существенно отличающаяся от остальных
Как определить, что отличие существенное? Точка является выбросом, если:
from scipy.stats import iqr iqr = iqr(msleep['bodywt'])lower_threshold = np.quantile(msleep['bodywt'], 0.25) - 1.5 * iqr upper_threshold = np.quantile(msleep['bodywt'], 0.75) + 1.5 * iqr
msleep[(msleep['bodywt'] < lower_threshold) | (msleep['bodywt'] > upper_threshold)]
name vore sleep_total bodywt
4 Cow herbi 4.0 600.000
20 Asian elephant herbi 3.9 2547.000
22 Horse herbi 2.9 521.000
...
msleep['bodywt'].describe()
count 83.000000
mean 166.136349
std 786.839732
min 0.005000
25% 0.174000
50% 1.670000
75% 41.750000
max 6654.000000
Name: bodywt, dtype: float64
Введение в статистику на Python