ltv加工

This commit is contained in:
wuaho 2021-10-25 18:30:46 +08:00
parent f93a120700
commit 6c210e092f
2 changed files with 11 additions and 9 deletions

View File

@ -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 = []

View File

@ -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
}