1.优化分布分析分组项
2.优化分布分析显示对应埋点数据中文名 3.新增事件标签功能
This commit is contained in:
parent
7f96405a8c
commit
95c03737eb
@ -117,12 +117,13 @@ async def my_event(request: Request,
|
|||||||
# my_data_auth = await crud.data_auth.get(db, ObjectId(data_auth_id))
|
# my_data_auth = await crud.data_auth.get(db, ObjectId(data_auth_id))
|
||||||
# my_data_auth = my_data_auth['data']
|
# my_data_auth = my_data_auth['data']
|
||||||
|
|
||||||
event_show_name = await crud.event_mana.get_all_show_name(db, game)
|
event_show_name, event_show_label_id= await crud.event_mana.get_all_show_name(db, game)
|
||||||
event_list.append({'id': 'event', 'title': '全部事件', 'category': []})
|
event_list.append({'id': 'event', 'title': '全部事件', 'category': []})
|
||||||
for item in my_data_auth:
|
for item in my_data_auth:
|
||||||
event_list[-1]['category'].append({
|
event_list[-1]['category'].append({
|
||||||
'event_name': item,
|
'event_name': item,
|
||||||
'event_desc': event_show_name.get(item, item)
|
'event_desc': event_show_name.get(item, item),
|
||||||
|
'event_label':event_show_label_id.get(item,'')
|
||||||
})
|
})
|
||||||
event_list[-1]['category'].append({'event_name': '*', 'event_desc': '任意事件'})
|
event_list[-1]['category'].append({'event_name': '*', 'event_desc': '任意事件'})
|
||||||
event_list.sort()
|
event_list.sort()
|
||||||
|
@ -45,7 +45,8 @@ async def event_list(
|
|||||||
'show_name': event_meta.get(name, {}).get('show_name', ''),
|
'show_name': event_meta.get(name, {}).get('show_name', ''),
|
||||||
'is_show': event_meta.get(name, {}).get('is_show', True),
|
'is_show': event_meta.get(name, {}).get('is_show', True),
|
||||||
'desc': event_meta.get(name, {}).get('desc', ''),
|
'desc': event_meta.get(name, {}).get('desc', ''),
|
||||||
'event_count': event_count.get(name, {}).get('v')
|
'event_count': event_count.get(name, {}).get('v'),
|
||||||
|
'label_id' : event_meta.get(name, {}).get('label_id', '')
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
return schemas.Msg(code=0, msg='ok', data=res)
|
return schemas.Msg(code=0, msg='ok', data=res)
|
||||||
|
@ -1004,13 +1004,15 @@ async def scatter_model(
|
|||||||
start_date=analysis.start_date
|
start_date=analysis.start_date
|
||||||
where=analysis.events[-1]['quotaname']
|
where=analysis.events[-1]['quotaname']
|
||||||
sql = res['sql']
|
sql = res['sql']
|
||||||
|
#columnName = analysis.events[-1]['label_id']
|
||||||
|
|
||||||
#查询买量渠道owner为kuaiyou3的日注册玩家等级分布
|
#查询买量渠道owner为kuaiyou3的日注册玩家等级分布
|
||||||
# sql_list=sql.split("GROUP BY")
|
# sql_list=sql.split("GROUP BY")
|
||||||
# sql01 = """and xiangsu.event.owner_name='kuaiyou3'GROUP BY"""""
|
# sql01 = """and xiangsu.event.owner_name='kuaiyou3'GROUP BY"""""
|
||||||
# new_sql=sql_list[0]+sql01+sql_list[1]
|
# new_sql=sql_list[0]+sql01+sql_list[1]
|
||||||
|
# if columnName != '':
|
||||||
|
# sql = sql.replace('SELECT', f'SELECT {columnName},', 1)
|
||||||
|
# sql += f',{columnName}'
|
||||||
df = await ckdb.query_dataframe(sql)
|
df = await ckdb.query_dataframe(sql)
|
||||||
if df.empty:
|
if df.empty:
|
||||||
return schemas.Msg(code=-9, msg='无数据', data=None)
|
return schemas.Msg(code=-9, msg='无数据', data=None)
|
||||||
@ -1184,8 +1186,11 @@ async def scatter_model(
|
|||||||
sql=res['sql']
|
sql=res['sql']
|
||||||
columnName = analysis.event_view['groupBy'][-1]['columnName']
|
columnName = analysis.event_view['groupBy'][-1]['columnName']
|
||||||
if analysis.event_view['groupBy'] != []:
|
if analysis.event_view['groupBy'] != []:
|
||||||
sql=sql.replace(f'toDate(addHours({game}.event."#event_time", 8)) AS date', f'max(`{columnName}`) as va', 1)
|
|
||||||
sql=sql.replace(f'toDate(addHours({game}.event."#event_time", 8)),','',1)
|
if columnName != '':
|
||||||
|
sql = sql.replace(f'toDate(addHours({game}.event."#event_time", 8)) AS date', f'{columnName} as va',
|
||||||
|
1)
|
||||||
|
sql = sql.replace(f'toDate(addHours({game}.event."#event_time", 8))', columnName, 1)
|
||||||
df = await ckdb.query_dataframe(sql)
|
df = await ckdb.query_dataframe(sql)
|
||||||
if df.empty:
|
if df.empty:
|
||||||
return schemas.Msg(code=-9, msg='无数据', data=None)
|
return schemas.Msg(code=-9, msg='无数据', data=None)
|
||||||
@ -1205,6 +1210,7 @@ async def scatter_model(
|
|||||||
df['date'] = '合计'
|
df['date'] = '合计'
|
||||||
|
|
||||||
if analysi != 'number_of_days' and interval_type != 'discrete':
|
if analysi != 'number_of_days' and interval_type != 'discrete':
|
||||||
|
#默认区间
|
||||||
max_v = int(df['values'].max())
|
max_v = int(df['values'].max())
|
||||||
min_v = int(df['values'].min())
|
min_v = int(df['values'].min())
|
||||||
interval = (max_v - min_v) // 10 or 1
|
interval = (max_v - min_v) // 10 or 1
|
||||||
@ -1214,7 +1220,11 @@ async def scatter_model(
|
|||||||
'time_particle': res['time_particle'],
|
'time_particle': res['time_particle'],
|
||||||
'biaotou':columnName
|
'biaotou':columnName
|
||||||
}
|
}
|
||||||
|
if 'float' in str(df.dtypes['va']):
|
||||||
|
df['va'] = df['va'].astype(int)
|
||||||
|
if 'list' in str(type(df['va'][0])):
|
||||||
|
f = lambda x: x[0]
|
||||||
|
df['va'] = df['va'].map(f)
|
||||||
if not quota_interval_arr:
|
if not quota_interval_arr:
|
||||||
resp['label'] = [f'[{i},{i + interval})' for i in range(min_v, max_v, interval)]
|
resp['label'] = [f'[{i},{i + interval})' for i in range(min_v, max_v, interval)]
|
||||||
bins = [i for i in range(min_v, max_v + interval, interval)]
|
bins = [i for i in range(min_v, max_v + interval, interval)]
|
||||||
@ -1225,16 +1235,16 @@ async def scatter_model(
|
|||||||
for i, v in enumerate(quota_interval_arr[1:]):
|
for i, v in enumerate(quota_interval_arr[1:]):
|
||||||
resp['label'].append(f'[{quota_interval_arr[i]},{v})')
|
resp['label'].append(f'[{quota_interval_arr[i]},{v})')
|
||||||
bins.append(v)
|
bins.append(v)
|
||||||
if 'float' in str(df.dtypes['va']):
|
# if 'float' in str(df.dtypes['va']):
|
||||||
df['va'] = df['va'].astype(int)
|
# df['va'] = df['va'].astype(int)
|
||||||
if 'list' in str(type(df['va'][0])):
|
# if 'list' in str(type(df['va'][0])):
|
||||||
f = lambda x: x[0]
|
# f = lambda x: x[0]
|
||||||
df['va'] = df['va'].map(f)
|
# df['va'] = df['va'].map(f)
|
||||||
# 这是分组的
|
# 这是分组的
|
||||||
for key, tmp_df in df.groupby('va'):
|
for key, tmp_df in df.groupby('va'):
|
||||||
|
|
||||||
bins_s = pd.cut(tmp_df['values'], bins=bins,
|
bins_s = pd.cut(tmp_df['values'], bins=bins,
|
||||||
right=False).value_counts()
|
right=True,include_lowest=True).value_counts()
|
||||||
bins_s.sort_index(inplace=True)
|
bins_s.sort_index(inplace=True)
|
||||||
total = int(bins_s.sum())
|
total = int(bins_s.sum())
|
||||||
if res['time_particle'] == 'total':
|
if res['time_particle'] == 'total':
|
||||||
@ -1248,6 +1258,17 @@ async def scatter_model(
|
|||||||
for i in range(len(p)):
|
for i in range(len(p)):
|
||||||
if str(p[i]) == 'nan':
|
if str(p[i]) == 'nan':
|
||||||
p[i] = 0
|
p[i] = 0
|
||||||
|
#映射对应的埋点数据
|
||||||
|
re = await crud.select_map.get_list(db, game)
|
||||||
|
re_list=[i['attr_name'] for i in re]
|
||||||
|
if columnName in re_list:
|
||||||
|
for i in re:
|
||||||
|
if columnName == i['attr_name']:
|
||||||
|
for datas in i['map_']:
|
||||||
|
if key == datas['id']:
|
||||||
|
key=datas['title']
|
||||||
|
break
|
||||||
|
break
|
||||||
if 'time' not in columnName:
|
if 'time' not in columnName:
|
||||||
resp['list'][key] = dict()
|
resp['list'][key] = dict()
|
||||||
resp['list'][key] = {'n': bins_s.to_list(), 'total': total,
|
resp['list'][key] = {'n': bins_s.to_list(), 'total': total,
|
||||||
@ -1266,6 +1287,7 @@ async def scatter_model(
|
|||||||
return Download
|
return Download
|
||||||
return schemas.Msg(code=0, msg='ok', data=resp)
|
return schemas.Msg(code=0, msg='ok', data=resp)
|
||||||
else:
|
else:
|
||||||
|
#离散数字
|
||||||
resp = {'list': {}, 'label': [],
|
resp = {'list': {}, 'label': [],
|
||||||
'start_date': res['start_date'],
|
'start_date': res['start_date'],
|
||||||
'end_date': res['end_date'],
|
'end_date': res['end_date'],
|
||||||
@ -1282,6 +1304,17 @@ async def scatter_model(
|
|||||||
if res['time_particle'] == 'total':
|
if res['time_particle'] == 'total':
|
||||||
dt = '合计'
|
dt = '合计'
|
||||||
else:
|
else:
|
||||||
|
#映射对应的埋点数据
|
||||||
|
re = await crud.select_map.get_list(db, game)
|
||||||
|
re_list=[i['attr_name'] for i in re]
|
||||||
|
if columnName in re_list:
|
||||||
|
for i in re:
|
||||||
|
if columnName == i['attr_name']:
|
||||||
|
for datas in i['map_']:
|
||||||
|
if key == datas['id']:
|
||||||
|
key=datas['title']
|
||||||
|
break
|
||||||
|
break
|
||||||
dt = key
|
dt = key
|
||||||
#dt = key.strftime('%Y-%m-%d')
|
#dt = key.strftime('%Y-%m-%d')
|
||||||
#dt='合计'
|
#dt='合计'
|
||||||
|
@ -22,9 +22,11 @@ class CRUDEventMap(CRUDBase):
|
|||||||
async def get_all_show_name(self, db: AsyncIOMotorDatabase, game: str):
|
async def get_all_show_name(self, db: AsyncIOMotorDatabase, game: str):
|
||||||
cursor = self.find(db, {'game': game})
|
cursor = self.find(db, {'game': game})
|
||||||
res = {}
|
res = {}
|
||||||
|
res1= {}
|
||||||
async for item in self.to_list(cursor):
|
async for item in self.to_list(cursor):
|
||||||
res[item['event_name']] = item['show_name']
|
res[item['event_name']] = item['show_name']
|
||||||
return res
|
res1[item['event_name']] = item.get('label_id','')
|
||||||
|
return res,res1
|
||||||
|
|
||||||
async def create_index(self, db: AsyncIOMotorDatabase):
|
async def create_index(self, db: AsyncIOMotorDatabase):
|
||||||
await db[self.coll_name].create_index(
|
await db[self.coll_name].create_index(
|
||||||
|
@ -679,6 +679,10 @@ ORDER BY level
|
|||||||
.where(and_(*where)) \
|
.where(and_(*where)) \
|
||||||
.group_by(event_date_col,e_account_id_col)
|
.group_by(event_date_col,e_account_id_col)
|
||||||
sql = str(qry.compile(compile_kwargs={"literal_binds": True}))
|
sql = str(qry.compile(compile_kwargs={"literal_binds": True}))
|
||||||
|
columnName = event['label_id']
|
||||||
|
if columnName != '':
|
||||||
|
sql = sql.replace('SELECT', f'SELECT {columnName},', 1)
|
||||||
|
sql += f',{columnName}'
|
||||||
print(sql)
|
print(sql)
|
||||||
return {
|
return {
|
||||||
'sql': sql,
|
'sql': sql,
|
||||||
|
@ -6,3 +6,4 @@ class EventMateEdit(BaseModel):
|
|||||||
show_name: str
|
show_name: str
|
||||||
is_show: bool
|
is_show: bool
|
||||||
desc: str
|
desc: str
|
||||||
|
label_id:str
|
||||||
|
Loading…
Reference in New Issue
Block a user