xbackend/api/api_v1/endpoints/xquery.py
2021-07-30 14:49:21 +08:00

58 lines
1.6 KiB
Python

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()
data = analysis.ltv_model_sql()
return schemas.Msg(code=0, msg='ok', data=[data])
@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()
res = analysis.ltv_model_sql()
sql = res['sql']
df = await ckdb.query_dataframe(sql)
df.fillna(0, inplace=True)
df.rename(columns={'date': '注册日期', 'cnt1': '角色数'}, inplace=True)
data = {
'title': df.columns.tolist(),
'rows': df.values.tolist()
}
return schemas.Msg(code=0, msg='ok', data=data)