Аналитический дашборд для маркетплейса
Описание проекта
Проект реализует полный цикл автоматизированного сбора данных по API, их загрузку в БД PostgreSQL и визуализацию ключевых метрик через Yandex DataLens.
Цель - обеспечить стабильный поток данных для аналитики клиентской активности, продаж и ассортиментной матрицы.
Структура проекта
da-final-project/
├── .venv/ # виртуальное окружение (скрыто)
├── DataLens/
│ └── DataLens_Backup.json # Бэкап для DataLens
├── img/ # скриншоты дашборда
│ ├── dark_theme/ # тёмная тема
│ └── light_theme/ # светлая тема
├── python/
│ ├── config.ini # конфиг подключения к БД (скрыт)
│ ├── fetch_data.py # сбор информации из API и формирование датасета
│ ├── get_daily_data.py # ежедневный сбор данных и их загрузка в PostgreSQL
│ ├── get_historical_data.py # единоразвый сбор данных с 2022-01-01 и их загрузка в PostgreSQL
│ ├── pgdb.py # класс-синглтон для кодключения к БД
│ └── requirements.txt # файл для установки всех необходимых библиотек
├── logs/
│ └── YYYY-MM-DD.log # логи работы
├── sh/
│ └── get_data.sh # sh-скрипт для выполнения программы на python через .venv
├── sql/
│ ├── create_table.sql # SQL-запросы для PostgreSQL для создания необходимой таблицы и ограничений для неё
│ └── datalens.sql # Дополнительные SQL-запросы (с параметрами) для формирования датасетов в Yandex DataLens
├── .gitignore
└── readme.md # документация
Автоматизация
-
Загрузка исторических данных выполнена единоразово через
get_historical_data.py. -
На сервер настроены следующие ежедневные задачи через cron:
-
В 6:50 удаляюся логи старше 21 дня из папки
logs, чтобы избеать переполнения хранилища:50 6 * * * find /home/projects/final_project/logs/ -type f -mtime +21 -delete
-
В 7:00 запускается sh-скрипт, который запускает python-файл для сбора вчерашних данных и загрузки их в PostgreSQL:
0 7 * * * /home/projects/final_project/get_data.sh
Все задачи выполняются по московскому времени. Логика построена так, чтобы данные были загружены до начала рабочего дня
-
Доступ к БД
- Тип: PostgreSQL
- IP: 62.113.105.120
- Порт: 5432
- База: postgres
- Пользователь: user_ro
- Пароль: user
- Права: SELECT (только чтение)
Ссылки
Дашборд в Yandex.DataLens (тёмная тема) | Дашборд в Yandex.DataLens(светлая тема) | Исследование продаж 2023 года
Примечения
-
Корректность данных и их заполнения производится на уровне PostgreSQL:
ALTER TABLE project.project_data ADD CONSTRAINT valid_discount CHECK (discount_per_item <= price_per_item), ADD CONSTRAINT valid_total_price CHECK (total_price = (price_per_item - discount_per_item) * quantity);
-
Сервер слабенький, всего 1 процессор и 2ГБ ОЗУ, поэтому некоторые чарты могут грузиться долго.
-
В целях экономии ресурсов, в самом DataLens выставлены настройки обновления кэша 1 раз в сутки + выставлена загрузка максимум 3-х чартов за раз.
-
Дополнительно, для ускорения выполнения запросов, были построены индексы для:
- client_id
- product_id
- purchase_datetime
- (client_id, product_id)
CREATE INDEX idx_project_data_client_id ON project.project_data(client_id); CREATE INDEX idx_project_data_product_id ON project.project_data(product_id); CREATE INDEX idx_project_data_purchase_datetime ON project.project_data(purchase_datetime); CREATE INDEX idx_project_data_client_product ON project.project_data(client_id, product_id);
-
У некоторых чартов есть символ
?, который даёт некоторые пояснения. Кроме того, некоторые элементы чартов при наведении курсора мышки выдают всплывающие подсказки. -
На каждой вкладке дашборда есть описание и цель вкладки, после прочтения можно свернуть.
-
Сверху каждой вкладки закреплены селекторы, которые позволяют выбрать период и/или масштаб исследования.
Исследование на основе данных 2023 года было решено провести прямо в DataLens, чтобы показать самодостаточность созданного дашборда для полноценного анализа ситуации и принятия решений.