This commit is contained in:
2025-12-16 01:51:05 +03:00
parent a1bc89c481
commit c963b1e5ac
123 changed files with 5644 additions and 3802 deletions

View File

@@ -1,3 +1,5 @@
"""Категорийный анализ: собирает агрегаты по категориям и строит корреляции/квадратичную регрессию по заказам."""
import sqlite3
from pathlib import Path
import sys
@@ -47,6 +49,7 @@ COMBINED = {
def load_raw(db_path: Path) -> pd.DataFrame:
# Загружаем полную таблицу коммуникаций из SQLite
conn = sqlite3.connect(db_path)
df = pd.read_sql_query("select * from communications", conn, parse_dates=["business_dt"])
conn.close()
@@ -54,6 +57,7 @@ def load_raw(db_path: Path) -> pd.DataFrame:
def build_client_by_category(df: pd.DataFrame) -> pd.DataFrame:
# Агрегируем метрики по клиенту для каждой категории и считаем средние показы в день
agg_spec = {f"{col}_{cat}": "sum" for col in BASE_COLUMNS for cat in CATEGORIES}
client = (
df.groupby("id")
@@ -82,6 +86,7 @@ def add_combined_category(client: pd.DataFrame, name: str, cats: list[str]) -> p
def plot_category_correlation(client: pd.DataFrame, cat: str, out_dir: Path) -> None:
# Быстрая тепловая карта корреляций для одной категории
cols = [f"{base}_{cat}" for base in BASE_COLUMNS]
corr = client[cols].corr()
@@ -190,6 +195,7 @@ def plot_quad_for_category(
q_high_overrides: dict | None = None,
iqr_overrides: dict | None = None,
) -> None:
# Строим облако, тренд и квадратичную регрессию для конкретной категории с опциональными настройками
y_col = f"orders_amt_{cat}"
x_col = f"avg_imp_per_day_{cat}"
out_dir = base_out_dir / y_col