from collections import defaultdict import pandas as pd import numpy as np from fastapi import APIRouter, Depends, Request from motor.motor_asyncio import AsyncIOMotorDatabase import crud, schemas from common import * from api import deps from db import get_database from db.ckdb import get_ck_db, CKDrive from db.redisdb import get_redis_pool, RedisDrive from models.behavior_analysis import BehaviorAnalysis from models.user_analysis import UserAnalysis from models.x_analysis import XAnalysis router = APIRouter() @router.post("/ltv_model_sql") async def ltv_model_sql( request: Request, game: str, analysis: XAnalysis = Depends(XAnalysis), current_user: schemas.UserDB = Depends(deps.get_current_user) ) -> schemas.Msg: """ ltv模型sql """ await analysis.init() sql = analysis.ltv_model_sql() return schemas.Msg(code=0, msg='ok', data=sql) @router.post("/ltv_model") async def ltv_model_sql( request: Request, game: str, analysis: XAnalysis = Depends(XAnalysis), ckdb: CKDrive = Depends(get_ck_db), current_user: schemas.UserDB = Depends(deps.get_current_user) ) -> schemas.Msg: """ ltv模型sql """ await analysis.init() sql = analysis.ltv_model_sql() df = await ckdb.query_dataframe(sql) df.fillna(0, inplace=True) df.rename(columns={'date': '注册日期', 'cnt1': '角色数'}, inplace=True) data = { 'titel': df.columns.tolist(), 'rows': df.values.tolist() } return schemas.Msg(code=0, msg='ok', data=data)