gadem
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
"""Генерирует раздельные Altair-облака для активных/пассивных/всех показов по категориям."""
|
||||
|
||||
import sqlite3
|
||||
import sys
|
||||
from pathlib import Path
|
||||
@@ -30,6 +32,7 @@ COMBINED_WINDOW_FACTOR = 1.0
|
||||
|
||||
|
||||
def load_raw() -> pd.DataFrame:
|
||||
# Читаем полные коммуникации из SQLite для дальнейших агрегаций
|
||||
conn = sqlite3.connect(bmp.DB_PATH)
|
||||
df = pd.read_sql_query("select * from communications", conn, parse_dates=["business_dt"])
|
||||
conn.close()
|
||||
@@ -37,6 +40,7 @@ def load_raw() -> pd.DataFrame:
|
||||
|
||||
|
||||
def build_client(df: pd.DataFrame) -> pd.DataFrame:
|
||||
# Агрегируем активные/пассивные показы и заказы по клиенту и считаем средние в день
|
||||
agg_spec = {
|
||||
**{f"active_imp_{c}": "sum" for c in CATEGORIES},
|
||||
**{f"passive_imp_{c}": "sum" for c in CATEGORIES},
|
||||
@@ -66,6 +70,7 @@ def build_client(df: pd.DataFrame) -> pd.DataFrame:
|
||||
|
||||
|
||||
def compute_limits(df: pd.DataFrame, x_col: str, y_col: str) -> Tuple[float, float]:
|
||||
# Автоматический подбор разумных лимитов осей по 99 перцентилю
|
||||
x_q = df[x_col].quantile(0.99)
|
||||
y_q = df[y_col].quantile(0.99)
|
||||
x_max = float(max(0.1, x_q + 2.0))
|
||||
@@ -81,6 +86,7 @@ def fit_quadratic(
|
||||
y_col: str,
|
||||
x_max: float,
|
||||
) -> Tuple[Optional[sm.regression.linear_model.RegressionResultsWrapper], dict]:
|
||||
# Строим квадратичную регрессию и считаем AUC/R2 по тренду
|
||||
if len(df) < 3:
|
||||
return None, {}
|
||||
x = df[x_col].to_numpy()
|
||||
@@ -119,6 +125,7 @@ def scatter_trend_quad(
|
||||
y_override: float | None = None,
|
||||
x_scale_factor: float | None = None,
|
||||
) -> None:
|
||||
# Пайплайн для одной комбинации x/y: фильтр, тренд, регрессия и сохранение HTML
|
||||
# Авто-лимиты
|
||||
x_max, y_max = compute_limits(df, x_col, y_col)
|
||||
if x_override is not None:
|
||||
|
||||
Reference in New Issue
Block a user