statistics, inf и nan
Готовые статистические инструменты — и особые числовые состояния, которые полезно уметь распознавать.
Модуль statistics
Простые статистические расчёты уже есть в стандартной библиотеке — не нужно писать их вручную:
import statistics
scores = [85, 90, 78, 92, 88]
print(statistics.mean(scores)) # 86.6 — среднее
print(statistics.median(scores)) # 88 — медиана (среднее значение по порядку)
Мода и стандартное отклонение
import statistics
scores = [85, 90, 78, 92, 88]
print(statistics.mode(scores)) # самое частое значение
print(statistics.pstdev(scores)) # стандартное отклонение генеральной совокупности
Это лишь маленькая часть модуля statistics — задача этого
раздела не превратить курс в курс статистики, а показать: типовые статистические расчёты
уже есть готовыми в Python, и не нужно писать формулу среднего вручную каждый раз.
Особые значения: inf и nan
Кроме обычных чисел, float умеет представлять несколько
особых состояний:
positive_infinity = float("inf")
negative_infinity = float("-inf")
not_a_number = float("nan")
print(positive_infinity) # inf
print(not_a_number) # nan
nan: сравнение nan == nan возвращает False. Это не ошибка Python, а часть стандарта IEEE 754 (тот же стандарт, что мы упоминали в разделе про float) — nan специально определён как «не равный ничему, включая себя».x = float("nan")
print(x == x) # False!
Как проверять эти состояния правильно
import math
x = float("nan")
y = float("inf")
print(math.isnan(x)) # True
print(math.isinf(y)) # True
print(math.isfinite(5.0)) # True — обычное конечное число
Такие значения не выдумка — они реально появляются в данных и вычислениях: деление, дающее переполнение, отсутствующие данные при анализе, результат неопределённой операции. Полезно уметь распознать их и обработать осознанно, а не удивляться, откуда они взялись.