Аналитический проект на PostgreSQL поверх датасета e-commerce продаж (Kaggle): ~138k заказов, ~400k позиций заказов, 25k клиентов, 1175 товаров. Основной упор — SQL: нормализованная схема из 4 связанных таблиц, запросы с JOIN (в том числе 3-табличные), оконными функциями, CTE и подзапросами. Дополнительно — экстракт для дашборда в Tableau.
customers ──┐
│ 1:N
▼
orders ──┐
▲ │ 1:N
│ ▼
(customer_id) order_items ──► products
- customers (25 000) — демография и регион клиента
- products (1 175) — категория, бренд, себестоимость
- orders (138 116) — заголовок заказа: канал продаж, оплата, доставка, маркетинг, агрегированные суммы по заказу
- order_items (397 569) — позиции заказа (товар, количество, скидка, прибыль по строке)
Два варианта — с Docker или без, выбирай что удобнее.
Вариант A — с Docker (быстрее):
docker compose up -d
pip install -r requirements.txt
python load_data.py
psql postgresql://ecommerce:ecommerce@localhost:5432/ecommerce -f sql/02_analysis_queries.sqlВариант B — без Docker (локальный Postgres):
# Mac: поставь Postgres.app (postgresapp.com) — просто .dmg, без терминала
# или через Homebrew: brew install postgresql@16 && brew services start postgresql@16
createdb ecommerce
psql ecommerce -f sql/01_schema.sql
pip install -r requirements.txt
DATABASE_URL=postgresql://localhost/ecommerce python load_data.py
psql ecommerce -f sql/02_analysis_queries.sqlИсходные CSV не включены в репозиторий (см. .gitignore, суммарно ~85 МБ) — положите их в
data/ перед запуском load_data.py. Источник — Kaggle (e-commerce sales & customer analytics).
sql/
01_schema.sql — DDL: 4 таблицы, FK, индексы
02_analysis_queries.sql — 10 аналитических запросов (JOIN, GROUP BY, подзапросы)
load_data.py — загрузка CSV в Postgres
eda_pandas.ipynb — доп. EDA и визуализация на pandas/matplotlib
tableau/
orders_enriched.csv — плоский экстракт для Tableau (заказы + клиенты)
DASHBOARD_SPEC.md — спецификация дашборда
- Electronics — самая доходная категория: $41.1M выручки и $14.1M прибыли; следом — Jewelry ($25.6M) и Home Appliances ($24.8M)
- Топ по выручке — регион South: $55.6M на 43 990 заказов, почти вдвое больше, чем North ($22.6M на 16 624 заказа)
- Organic Search — лидирующий маркетинговый канал: $35.7M выручки при марже ~45%, которая держится примерно на одном уровне (44.9–45.4%) по всем каналам
- Скорость доставки напрямую влияет на оценку клиента: Early → 4.02, On Time → 3.73, Delayed → 3.22 — почти линейное падение
- Доля возвратов держится в узком диапазоне 6.5–7.2% почти по всем категориям — заметных выбросов нет, кроме чуть повышенного Automotive (7.23%)
- Средний чек (~$1 280) почти не различается между сегментами клиентов (Consumer/Premium/ VIP/Business) — сегменты дают разницу в объёме продаж, а не в размере чека
PostgreSQL · Python (pandas, psycopg2, matplotlib) · Docker · Tableau