Инструмент для дополнительной обработки выгруженных данных Mediascope (TV / TV_REG).
Инструмент позволяет удалять лишние строки и создавать пользовательские колонки с данными, на основе пользовательского словаря с поисковыми паттернами и правилами.
- Потоковая обработка больших CSV (через Polars)
- Гибкая система правил через CSV-словарь
- Локальный SQLite как движок обработки
- LIKE и полнотекстового (FTS5) поиска
- Пользовательские колонки (категории, бренды и т.д.)
- Поддержка
.gz
Импорт (raw data) .csv/.gz - Polars
↓
SQLite (индексы + FTS5)
↓
Применение правил (DELETE → REPLACE → ADD)
↓
Экспорт (данные с доп. колонками) - Polars
mko-data-cleaner init
# или с перезаписью
mko-data-cleaner init --forceПосле инициализации будет создана папка настроек:
mko_data_cleaner/
└── settings/
├── app_config.yaml
└── log_config.yaml
Основные параметры модуля задаются в app_config.yaml.
Настройки словаря для поиска и при в отдельном файле *.csv,
ниже показан пример словаря.
Рекомендуемый способ (Python):
from mko_data_cleaner.app import process_data
process_data(r"data\mvideo")Альтернатива через core:
from mko_data_cleaner.core.app_service import app_service
app_service.run_report(r"data\mvideo")Через CLI:
mko-data-cleaner run path/to/your_report_folderПример сырых CSV-файлов Mediascope (строго UPPERCASE):
YEAR;MONTH;ADVERTISERS;BRANDS;SUBBRANDS;ARTICLE LIST3;ARTICLE LIST4;ADID;MEDIA;COST RUB;QUANTITY
2024;01;EXAMPLE CORP;APPLE INC;IPHONE 16;SMARTPHONES;ELECTRONICS;123456789;TV;1500000;25
2024;01;EXAMPLE CORP;APPLE INC;MACBOOK PRO;NOTEBOOKS;ELECTRONICS;123456790;TV;3200000;12
2024;02;FAKE RETAIL LTD;SAMSUNG;GALAXY S25;SMARTPHONES;ELECTRONICS;987654321;OUTDOOR;450000;8Названия колонок не важны, важен порядок - индексы колонок задаются в файле конфигурации:
| action | match | search_column_idx | term | MACRO CATEGORY | MARKETPLACE | BRAND CLEANED |
|---|---|---|---|---|---|---|
| r | f | 3 | APPLE INC | ELECTRONICS | APPLE | |
| r | p | 5 | SMART | SMARTPHONES | ||
| a | f | 2 | YANDEX | YANDEX MARKET | ||
| d | f | 3 | DELETE ME | |||
| r | fts | 3|5 | OZON|MARKET | MARKETPLACE | MARKETPLACE | OZON |
Значения action:
r— REPLACE (добавление/замена значения в колонке)a— ADD (добавление значения к колонке, через разделитель)d— DELETE (удаление строки)
Значения match:
f— полное совпадениеp— частичное (%term%)s— начинается с (term%)e— заканчивается на (%term)fts— полнотекстовый поиск
search_column_idx — 0-based индекс колонки (для FTS — через разделитель |).
Правила применяются строго в порядке:
- DELETE (
d) — полностью удаляет совпавшие строки. - REPLACE (
r) — заменяет значение в указанной колонке. - ADD (
a) — добавляет новое значение к уже существующему через разделитель.
- Новое значение добавляется, а не заменяет текущее.
- Все теги автоматически становятся уникальными.
- Теги сортируются по алфавиту.
- Разделитель задаётся в
app_config.yaml(dict_file_settings.add_separator, по умолчанию", ").
Принцип работы ADD на основе пользовательской добавляемой колонки:
| Предыдущее значение | Добавляемое значение | Результат после ADD |
|---|---|---|
| ELECTRONICS | SMARTPHONES | ELECTRONICS, SMARTPHONES |
| BRAND1, BRAND3 | BRAND2 | BRAND1, BRAND2, BRAND3 |
| YANDEX MARKET | YANDEX MARKET | YANDEX MARKET (дубликат удалён) |
- Загружает данные из поддиректории (
raw_data), указанной в конфиге. - Создаёт временную SQLite-базу с индексами и FTS5 (при необходимости).
- Применяет правила в порядке: DELETE → REPLACE → ADD.
- Сохраняет нераспознанные строки в
null_data_*.csv.gz. - Экспортирует данные с добавленными колонками в поддиректорию, указанную в конфиге (
clean_data).
null_data_*.csv.gz
Используются для:
- дообучения словаря
- поиска пропущенных кейсов
- Делать словарь итеративно (через
null_data) - Использовать FTS только при необходимости
- Использовать индексы (
index_column) - колонка сidрекламы.