
Кратко
Часто мне нужно быстро протестировать какую-нибудь статистическую библиотеку для Python — а подходящий набор данных вдруг не находится. Здесь и помогает простая генерация собственных данных. Поделюсь, как я это обычно делаю.
Зачем вообще создавать данные самому?
В наши дни подходящих датасетов для Python очень много — ищи в открытых государственных архивах или на сервисах вроде Kaggle.
Но бывает, хочется быстро примерить какой-то метод в statsmodels или посмотреть работу статистических тестов в Pingouin, а под рукой ничего подходящего нет. В таких случаях я просто создаю небольшой тестовый массив через NumPy — генератор случайных чисел очень выручает.
Функции попроще: в большинстве случаев обычных случайных чисел более чем достаточно
Самое простое — импортировать NumPy и инициализировать генератор случайных чисел. Обычно работаю в окружении Mamba:
Свои статистические эксперименты я запускаю в интерактивной консоли IPython или Jupyter Notebook. Для начала — импорт NumPy:
Потом создаю объект-генератор случайных чисел:
Можно сразу получить массив из 20 случайных чисел с плавающей точкой:
С этим массивом легко посчитать все основные статистические метрики из коробки. Обычно первым делом смотрю среднее:

Можно и по-другому посчитать среднее:

Медиану тоже найти просто — это просто число, стоящее ровно посередине упорядоченного массива:
Ну и, конечно, стандартное отклонение — оно показывает, насколько далеко значения разбросаны относительно среднего.
Его тоже легко вычислить:

Перцентили — интересная штука: они показывают, какой процент значений лежит ниже заданного числа. Медиана — это как раз 50-й перцентиль: половина значений меньше неё. Как узнать перцентиль для своего массива:
В функцию передаёте свой массив и желаемый процент (от 0 до 100).
Точно так же можно вывести и, например, 75-й перцентиль:

Перцентили 0 и 100 — это просто минимум и максимум выборки. Их можно получить отдельными функциями NumPy:

Максимум выведу так:

Регрессия, корреляция: как сымитировать «настоящие» данные с нормальным распределением
Обычных случайных чисел хватает для простейших задач, но чтобы эмитировать корреляцию или регрессию, нужны уже «почти настоящие» данные. Здесь выручает генерация массива с нормальным распределением — тем самым классическим «колоколом». В NumPy для этого есть метод standard_normal. Например, создаём 50 значений:
Чтобы убедиться, что получился правильный «колокол», удобно сразу построить гистограмму с Seaborn:
В Jupyter Notebook сперва разрешаю отображение графиков прямо в блокноте:
Теперь рисую гистограмму:

Теперь делаю второй массив — просто умножаю первый на 20:
Импортирую pandas и собираю DataFrame из этих двух массивов
Далее строю диаграмму рассеяния «a» против «b»:
Чётко видно: значения выстроились почти по прямой — отличный повод нарисовать регрессионную линию через regplot в Seaborn. В принципе, достаточно сменить одну букву в названии «relplot».


Для более продвинутых исследований захожу в statsmodels — там не только куча тестов, но и вполне удобная линейная регрессия, которую можно задать привычной формулой, как в R:
В результате получаем подробную таблицу с ключевыми коэффициентами для построения уравнения (y = kx + b) и важнейший показатель — коэффициент детерминации R-квадрат. Он всегда неотрицательный, потому что возводится в квадрат.

Если R-квадрат равен 1 — это идеальная корреляция (что ожидаемо, ведь мы сами придумали данные). Совпадение можно проверить и через SciPy: stats.pearsonr (названа так в честь Карла Пирсона).
Результат доказывает: оба наших массива идеально линейно зависят друг от друга.
Как подправить случайные числа «под себя»
Очень просто сделать так, чтобы случайные массивы имели нужное среднее и разброс: достаточно прибавить к ним или умножить на константу. Например, прибавили число — сдвинули среднее, умножили — изменили стандартное отклонение.
Получайте самые полезные лайфхаки по генерации данных — подпишитесь на рассылку!
Допустим, нужно получить 15 случайных значений со средним 20 и стандартным отклонением 3.5:
Используем стандартные mean и std — и получаем результат близкий к нужным значениям (на больших выборках будет ещё точнее, спасибо центральной предельной теореме).
Сгенерировать свои данные для тестов в Python проще простого. Больше не нужно перерывать бесконечные каталоги открытых датасетов или выискивать подходящий пример в учебниках — NumPy всё сделает за вас!
Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!
Премиум подписка — это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!
Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь
Также подписывайтесь на нас в:
- Telegram: https://t.me/gergenshin
- Youtube: https://www.youtube.com/@gergenshin
- Яндекс Дзен: https://dzen.ru/gergen
- Официальный сайт: https://www-genshin.ru






