В этой статье описывается датасет, который был сгенерирован для отработки мастерства кунг-фу в аналитике игровых данных, специально для проходящих обучение по игровой аналитике на нашем сайте. Датасет собран:
1. В виде базы данных sqlite3 из одного файла match3_analytics.bd, который упакован в архив match3_analytics.zip. На нем вы можете отрабатывать SQL запросы без установок баз данных и прочих сложных штук, скачиваете dbeaver и в путь. Как подключить базу данных к dbeaver и ее обзор смотри в моем коротком уроке.
2. В виде набора csv файлов match3_dataset.zip. На этом наборе вы сможете легко практиковаться в pandas в jupyter notebooks или PowerBI.
📖 Обзор датасета
Этот датасет моделирует поведение игроков в условно-бесплатной мобильной игре жанра match-3 в течение 30 дней (ноябрь 2025 г.). Он содержит 50 000 синтетических игроков с реалистичными распределениями удержания, монетизации, игрового прогресса и вовлечённости в награды. Датасет специально разработан для образовательных целей в области гейм-аналитики, data science и бизнес-аналитики.
📁 Описание таблиц
👤 players.csv или players в базе данных (БД) — Профили игроков и LTV
Основная таблица-измерение. Одна строка на уникального игрока.
| Колонка | Тип | Описание |
|---|---|---|
player_id |
string (UUID) |
Уникальный идентификатор игрока. Первичный ключ |
install_ts |
datetime (UTC) |
Время установки приложения / первого запуска |
platform |
string |
Платформа устройства: ios или android |
is_payer |
boolean |
1, если игрок совершил ≥1 покупку, 0 иначе |
first_purchase_ts |
datetime (UTC, nullable) |
Время первой покупки. NULL для F2P-игроков |
total_revenue_usd |
float |
Совокупный доход с игрока (в долларах США) |
⏱️ sessions.csv или sessions в базе данных (БД) — Игровые сессии
Агрегированные метрики сессий. У одного игрока может быть несколько сессий в день.
| Колонка | Тип | Описание |
|---|---|---|
session_id |
string (UUID) |
Уникальный идентификатор сессии. Первичный ключ |
player_id |
string |
FK → players.player_id |
start_ts / end_ts |
datetime (UTC) |
Время начала и окончания сессии |
duration_sec |
int |
Длительность сессии в секундах |
levels_started |
int |
Количество начатых уровней |
levels_completed |
int |
Количество успешно пройденных уровней |
lives_used |
int |
Потраченные жизни (1 за попытку) |
lives_purchased |
boolean |
1, если в сессии были куплены дополнительные жизни |
boosters_used |
int |
Всего использовано бустеров (0–3) |
session_type |
string |
normal или post_fail |
event_active |
boolean |
1, если сессия прошла во время ограниченного события |
🎮 level_attempts.csv или level_attempts в базе данных (БД) — Детализация попыток уровней
Одна строка на каждую индивидуальную попытку прохождения уровня. Вложена в сессии.
| Колонка | Тип | Описание |
|---|---|---|
attempt_id |
string (UUID) |
Уникальный идентификатор попытки. Первичный ключ |
player_id |
string |
FK → players.player_id |
session_id |
string |
FK → sessions.session_id |
level_num |
int |
Номер текущего уровня (начинается с 1) |
start_ts / end_ts |
datetime (UTC) |
Время начала и окончания попытки |
is_win |
boolean |
1, если уровень пройден, 0 если провален |
stars_earned |
int |
1–3 звезды при победе, 0 при поражении |
boosters_used_before |
int |
Бустеры, активированные до начала уровня |
boosters_used_during |
int |
Бустеры, использованные в процессе уровня |
extra_moves_purchased |
int |
Купленные дополнительные ходы после провала (0 если не было) |
lives_cost_at_start |
int |
Жизни, потраченные на старт попытки (всегда 1) |
🛒 purchases.csv или purchases в базе данных (БД) — Транзакции внутриигровых покупок
Все транзакции за реальные деньги. Включает контекстные поп-апы, покупки в магазине и пакеты.
| Колонка | Тип | Описание |
|---|---|---|
transaction_id |
string (UUID) |
Уникальный идентификатор транзакции. Первичный ключ |
player_id |
string |
FK → players.player_id |
ts |
datetime (UTC) |
Время покупки |
amount_usd |
float |
Сумма транзакции (включает наценку 15% для iOS, где применимо) |
product_id |
string |
Артикул: lives_5, moves_10, starter_pack, season_pass и др. |
item_type |
string |
Категория: lives, boosters, moves, lives+boosters, season_pass |
quantity |
int |
Количество полученных предметов |
offer_type |
string |
Контекст предложения: regular, popup_after_fail, starter_pack, daily_deal, season_pass |
🎁 daily_rewards.csv или daily_rewards в базе данных (БД) — Получение ежедневных наград
Отслеживает вовлечённость в календарь ежедневных наград. Стрик сбрасывается при пропуске.
| Колонка | Тип | Описание |
|---|---|---|
player_id |
string |
FK → players.player_id |
day_num |
int |
День относительно установки (1–30) |
claimed_ts |
datetime (UTC) |
Время получения награды (первая сессия дня) |
reward_type |
string |
Тип награды: lives, coins или booster |
reward_amount |
int |
Количество выданных предметов |
💡 Примечание:
claimed_tsимеет значениеNULL, если день был пропущен. После любого пропуска стрик наград сбрасывается на День 1.
💰 in_game_currency.csv или in_game_currency в базе данных (БД) — Логи экономики и балансов
Неизменяемый журнал изменений внутриигровой валюты (soft/hard currency).
| Колонка | Тип | Описание |
|---|---|---|
event_id |
string (UUID) |
Уникальный идентификатор записи. Первичный ключ |
player_id |
string |
FK → players.player_id |
ts |
datetime (UTC) |
Время транзакции |
currency_type |
string |
Тип валюты: coins, gems и др. |
delta |
int |
Изменение баланса: + начислено, - списано |
reason |
string |
Причина: level_win, daily_reward, purchase и др. |
balance_after |
int |
Снимок баланса игрока после транзакции |
🔗 Схема связей между таблицами
players (1) ──┬── (N) sessions ── (N) level_attempts
├── (N) purchases
├── (N) daily_rewards
└── (N) in_game_currency
Все соединения выполняются по полю player_id. Поле session_id связывает таблицы sessions ↔ level_attempts.
⚠️ Важные примечания и ограничения
| Аспект | Детали |
|---|---|
| Происхождение данных | Сгенерированы синтетически с использованием статистических распределений (Пуассона, Логнормальное, интерполированные кривые удержания). Не являются данными реальных пользователей. |
| Часовой пояс | Все таймстампы в UTC. При необходимости конвертируйте в локальное время для анализа. |
| Пропущенные значения | first_purchase_ts = NULL для is_payer=0. claimed_ts = NULL для пропущенных дней наград. |
| Хранение булевых значений | В CSV: True/False. В SQLite: 1/0. Приводите типы при необходимости: CAST(is_payer AS BOOLEAN). |
| Первичные ключи | UUID уникальны в пределах таблицы. |
| Ценообразование iOS | Поле amount_usd включает симулированную наценку платформы 15% для соответствия требованиям App Store. |