diff --git a/api/api_v1/endpoints/xquery.py b/api/api_v1/endpoints/xquery.py index bbc3f9d..e1dcf05 100644 --- a/api/api_v1/endpoints/xquery.py +++ b/api/api_v1/endpoints/xquery.py @@ -51,7 +51,7 @@ async def ltv_model_sql( res = analysis.ltv_model_sql() sql = res['sql'] quota = res['quota'] - ltv_len = res['ltv_len'] + ltv_n = res['ltv_n'] df = await ckdb.query_dataframe(sql) if df.empty: return schemas.Msg(code=-1, msg='查无数据') @@ -60,9 +60,9 @@ async def ltv_model_sql( df.loc[len(df)] = 0 df.loc[len(df) - 1, 'date'] = d days = (pd.Timestamp.now().date() - d).days - if days + 2 >= ltv_len: - continue - df.loc[len(df) - 1, f'LTV{days + 2}':] = '-' + # if days + 2 >= ltv_len: + # continue + df.iloc[len(df) - 1, days+3:] = '-' df.sort_values('date', inplace=True) df.rename(columns={'date': '注册日期'}, inplace=True) @@ -71,10 +71,10 @@ async def ltv_model_sql( cat = '设备数' df.rename(columns={'cnt1': cat}, inplace=True) - df1 = df[['注册日期', cat, *[f'LTV{i}' for i in range(1, ltv_len + 1)]]] - df2 = df[['注册日期', cat, *[f'sumpay_{i}' for i in range(1, ltv_len + 1)]]] + df1 = df[['注册日期', cat, *[f'LTV{i}' for i in ltv_n]]] + df2 = df[['注册日期', cat, *[f'sumpay_{i}' for i in ltv_n]]] df2.replace('-', 0, inplace=True) - avg_ltv = (df2[[f'sumpay_{i}' for i in range(1, ltv_len + 1)]].sum() / df2[cat].sum()).round(2) + avg_ltv = (df2[[f'sumpay_{i}' for i in ltv_n]].sum() / df2[cat].sum()).round(2) df1.loc[len(df1)] = ['均值', df2[cat].sum(), *avg_ltv] df1.insert(2, '累计LTV', 0) last_ltv = [] diff --git a/models/x_analysis.py b/models/x_analysis.py index 56c445d..63a1c0b 100644 --- a/models/x_analysis.py +++ b/models/x_analysis.py @@ -131,7 +131,9 @@ class XAnalysis: select_ltv = [] sumpay = [] sum_money = [] - for i in range(1, days + 2): + # for i in range(1, days + 2): + ltv_n = [*[k for k in range(1, 31)], 45, 60, 90, 120, 180, 240, 300, 360] + for i in ltv_n: # select_ltv.append(func.round(sa.Column(f'sumpay_{i}') / sa.Column('cnt1'), 2).label(f'LTV{i}')) select_ltv.append( f"if(dateDiff('day', reg.date, now())<{i - 1}, '-',toString(round(sumpay_{i} / cnt1, 2))) AS LTV{i}") @@ -194,5 +196,5 @@ class XAnalysis: 'start_date': self.event_view['startTime'][:10], 'end_date': self.event_view['endTime'][:10], 'date_range': self.date_range, - 'ltv_len': days + 1 + 'ltv_n': ltv_n }