def get_table(search_start_date, search_end_date, channel_id=-1, server_id=-1): """ 获取表格 """ # 获取搜索区间日志 new_log_lst = daily_log_dat.get_new_log_lst(search_start_date, search_end_date) if channel_id >= 0: new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda x: x['platform_id'] == channel_id) if server_id >= 0: new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda x: x['server_id'] == server_id) search_days = (search_end_date - search_start_date).days table_lst = [] head_lst = [] head_name_lst = [] for _day in xrange(search_days + 1): row_date = search_start_date + datetime.timedelta(days=_day) # 当天日志 row_logs = daily_log_dat.filter_logs(new_log_lst, function=lambda log:log['log_time'].date() == row_date) # 获取不同事件的获取金币 action_logs_dict = daily_log_dat.split_log_action_logs(row_logs) # print("action_logs_dict: "+str(action_logs_dict)) cost_stone_dict = dict() for _action,_logs in action_logs_dict.items(): sum_add_stone = daily_log_dat.get_sum_int_with_key(_logs, 'cost_stone') cost_stone_dict[_action] = sum_add_stone if sum_add_stone and _action not in head_lst: head_lst.append(_action) head_name_lst.append(game_define.EVENT_LOG_ACTION_DICT[_action]) for _day in xrange(search_days + 1): row_date = search_start_date + datetime.timedelta(days=_day) # 当天日志 row_logs = daily_log_dat.filter_logs(new_log_lst, function=lambda log:log['log_time'].date() == row_date) # 总产出金币数 total_get_stone = daily_log_dat.get_sum_int_with_key(row_logs, 'add_stone') # 总消耗金币数 total_cost_stone = daily_log_dat.get_sum_int_with_key(row_logs, 'cost_stone') # 获取不同事件的获取金币 action_logs_dict = daily_log_dat.split_log_action_logs(row_logs) cost_stone_dict = dict() for _action,_logs in action_logs_dict.items(): sum_add_stone = daily_log_dat.get_sum_int_with_key(_logs, 'cost_stone') cost_stone_dict[_action] = sum_add_stone # 获取消耗 row_lst = [ row_date.strftime('%m/%d/%Y'), total_get_stone, total_cost_stone, ] for _act_id in head_lst: if _act_id in cost_stone_dict: row_lst.append(cost_stone_dict.get(_act_id, 0)) else: row_lst.append(0) table_lst.append(row_lst) return table_lst,head_name_lst
def get_create_table(search_start_date, search_end_date, monster_tid_lst, register_start_date=None, register_end_date=None, channel_id=-1, server_id=-1, player_min_level=1, player_max_level=999): #获取搜索区间日志 new_log_lst = daily_log_dat.get_new_log_lst(search_start_date, search_end_date) if channel_id >= 0: new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda x: x['platform_id'] == channel_id) if server_id >= 0: new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda x: x['server_id'] == server_id) #获取符合条件的日志 if register_start_date and register_end_date: new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda log: register_start_date <= log['install'] <= register_end_date) # print("new_log_lst: "+str(new_log_lst)+"player_min_level: "+str(player_min_level)+"player_max_level: "+str(player_max_level)) # 适配等级 if player_min_level and player_max_level: new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda x: player_min_level <= x['level'] <= player_max_level) # print("new_log_lst: "+str(new_log_lst)) create_monster_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda log: is_monster_tid_in_key(log, 'add_monster_list', monster_tid_lst)) # 用宠物 和 星级拆分日志 monster_tid_star_dict = dict() action_set = set() for _log in create_monster_log_lst: add_monster_list = _log['add_monster_list'] action_set.add(_log['action']) for i in range(0, len(add_monster_list), 3): _tid = add_monster_list[i] _star = add_monster_list[i + 1] _lv = add_monster_list[i + 2] _key = str(_tid) + "," + str(_star) if _key in monster_tid_star_dict: monster_tid_star_dict[_key].append(_log) else: monster_tid_star_dict[_key] = [_log] # 遍历所有的怪 table_lst = [] head_name_lst = [] for _tid in monster_tid_lst: _name = _tid for _star in xrange(1, 6): row_lst = [] _key = str(_tid) + "," + str(_star) _log_lst = monster_tid_star_dict.get(_key, []) if _log_lst: # 遍历当前的怪星级的日志 action_log_dict = daily_log_dat.split_log_action_logs(_log_lst) # 获取各种action的数量 row_lst.append(_name) row_lst.append(_star) for _act in action_set: row_lst.append(len(action_log_dict.get(_act, []))) head_name_lst.append(game_define.EVENT_LOG_ACTION_DICT[_act]) table_lst.append(row_lst) return table_lst, head_name_lst
def get_create_table(search_start_date, search_end_date, item_tid_lst, register_start_date=None, register_end_date=None, channel_id=-1, server_id=-1, player_min_level=1, player_max_level=999): #获取搜索区间日志 new_log_lst = daily_log_dat.get_new_log_lst(search_start_date, search_end_date) if channel_id >= 0: new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda x: x['platform_id'] == channel_id) if server_id >= 0: new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda x: x['server_id'] == server_id) #获取符合条件的日志 if register_start_date and register_end_date: new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda log: register_start_date <= log['install'] <= register_end_date) # 适配等级 if player_min_level and player_max_level: new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda x: player_min_level <= x['level'] <= player_max_level) create_item_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda log: is_item_tid_in_key(log, 'add_item_list', item_tid_lst)) # 用装备TID 拆分日志 item_tid_dict = dict() action_set = set() for _log in create_item_log_lst: add_item_list = _log['add_item_list'] action_set.add(_log['action']) for i in range(0, len(add_item_list), 2): _tid = add_item_list[i] # _num = add_equip_list[i + 1] _key = _tid if _key in item_tid_dict: item_tid_dict[_key].append(_log) else: item_tid_dict[_key] = [_log] # 遍历所有的怪 table_lst = [] head_name_lst = [] for _tid in item_tid_lst: row_lst = [] _name =_tid _key = _tid _log_lst = item_tid_dict.get(_key, []) if _log_lst: # 遍历当前的怪星级的日志 action_log_dict = daily_log_dat.split_log_action_logs(_log_lst) # 获取各种action的数量 row_lst.append(_name) for _act in action_set: row_lst.append(len(action_log_dict.get(_act, []))) head_name_lst.append(game_define.EVENT_LOG_ACTION_DICT[_act]) table_lst.append(row_lst) return head_name_lst, table_lst
def get_table(search_start_date, search_end_date, channel_id=-1, server_id=-1, player_min_level=1, player_max_level=999): # 获取搜索区间日志 search_log_lst = daily_log_dat.get_new_log_lst(search_start_date, search_end_date) if channel_id >= 0: search_log_lst = daily_log_dat.filter_logs(search_log_lst, function=lambda x: x['platform_id'] == channel_id) if server_id >= 0: search_log_lst = daily_log_dat.filter_logs(search_log_lst, function=lambda x: x['server_id'] == server_id) # 适配等级 search_log_lst = daily_log_dat.filter_logs(search_log_lst, function=lambda x: player_min_level <= x['level'] <= player_max_level) # 所有的消耗钻石的日志 all_cost_stone_log_lst = daily_log_dat.filter_logs(search_log_lst, function=lambda log: 'cost_stone' in log) # 根据事件拆分消耗日志 action_cost_stone_dict = daily_log_dat.split_log_action_logs(all_cost_stone_log_lst) table_lst = [] # 遍历所有事件 for _action, _logs in action_cost_stone_dict.items(): row_lst = [] # 事件名称 action_name = game_define.EVENT_LOG_ACTION_DICT[_action] # 充值用户消耗的部分日志 vip1_up_user_log = daily_log_dat.filter_logs(_logs, function=lambda log:log['vip_level'] != 0) # 非充值用户的部分日志 vip0_user_log = daily_log_dat.filter_logs(_logs, function=lambda log:log['vip_level'] == 0) # 充值用户消耗人数 recharge_user_num = daily_log_dat.get_set_num_with_key(vip1_up_user_log, 'uid') # 充值用户消耗次数 recharge_user_log_num = len(vip1_up_user_log) # 非充值用户的人数 vip0_user_num = daily_log_dat.get_set_num_with_key(vip0_user_log, 'uid') # 非充值用户消耗次数 vip0_user_log_num = len(vip0_user_log) # vip0 消耗钻石 vip0_cost_stone_num = daily_log_dat.get_sum_int_with_key(vip0_user_log, 'cost_stone') # 消耗钻石数量 total_cost_stone_num = daily_log_dat.get_sum_int_with_key(_logs, 'cost_stone') #事件名称 充值用户消耗人数 充值用户消耗次数 非充值用户消耗人数 非充值用户消耗次数 消耗钻石数量 VIP0消耗金额 VIP0消耗人数 row_lst = [action_name, recharge_user_num, recharge_user_log_num, vip0_user_num, vip0_user_log_num, total_cost_stone_num, vip0_cost_stone_num, vip0_user_num] # 遍历VIP for i in xrange(1, 13): vip_x_log = daily_log_dat.filter_logs(vip1_up_user_log, function=lambda log:log['vip_level'] == i) vip_x_cost_stone_num = daily_log_dat.get_sum_int_with_key(vip_x_log, 'cost_stone') vip_x_cost_stone_user_num = daily_log_dat.get_set_num_with_key(vip_x_log, 'uid') row_lst.append(vip_x_cost_stone_num) row_lst.append(vip_x_cost_stone_user_num) table_lst.append(row_lst) return table_lst
def get_table(search_start_date, search_end_date, register_start_date=None, register_end_date=None, channel_id=-1, server_id=-1): """ 获取展示表格 register_start_date 注册开始时间 register_end_date 注册结束时间 search_start_date 查询开始时间 search_end_date 查询结束时间 """ # 获取搜索区间日志 new_log_lst = daily_log_dat.get_new_log_lst(search_start_date, search_end_date) if channel_id >= 0: new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda x: x['platform_id'] == channel_id) if server_id >= 0: new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda x: x['server_id'] == server_id) #获取符合条件的日志 if register_start_date and register_end_date: new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda log: register_start_date <= log['install'] <= register_end_date) # 截取日志到 副本事件 stage_action_lst = [ game_define.EVENT_ACTION_TRIAL_BATTLE_WIN, game_define.EVENT_ACTION_TRIAL_BATTLE_FAIL ] stage_action_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda log: log['action'] in stage_action_lst) table_lst = [] search_days = (search_end_date - search_start_date).days+1 for _day in xrange(search_days): row_date = search_start_date + datetime.timedelta(days=_day) # 获取当天的日志 row_logs = daily_log_dat.filter_logs(stage_action_log_lst, function=lambda log:log['log_time'].date() == row_date) # 拆分日志 catch_action_log_dict = daily_log_dat.split_log_action_logs(row_logs) # 获取可以参与人数 all_user_num = daily_log_dat.get_set_num_with_key(new_log_lst, 'uid') # 获取实际参与人数 join_user_num = daily_log_dat.get_set_num_with_key(row_logs, 'uid') # 参与次数 join_num = len(row_logs) # 胜利日志 win_logs = catch_action_log_dict.get(game_define.EVENT_ACTION_GET_CATCH_MONSTER_RESULT,[]) win_user_num = daily_log_dat.get_set_num_with_key(win_logs, 'uid') #失败日志 # fail_logs = [] # 完成次数 complete_count = len(win_logs) # 参与率 join_rate = 0 if all_user_num: join_rate = round(float(join_user_num)/float(all_user_num), 2) # 胜率 win_rate = 0 if join_num: win_rate = round(float(len(win_logs))/float(join_num), 2) row_lst = [ row_date.strftime('%m/%d/%Y'), # 日期 join_user_num, # 参与人数 join_num, # 总参与次数 win_user_num, # 完成人数 complete_count, # 总完成次数 all_user_num, # 到达要求人数 join_rate, # 参与率 win_rate # 成功率 ] table_lst.append(row_lst) return table_lst
def get_table(search_start_date, search_end_date, channel_id=-1, server_id=-1, player_min_level=1, player_max_level=999): # 获取搜索区间日志 search_log_lst = daily_log_dat.get_new_log_lst(search_start_date, search_end_date) if channel_id >= 0: search_log_lst = daily_log_dat.filter_logs( search_log_lst, function=lambda x: x['platform_id'] == channel_id) if server_id >= 0: search_log_lst = daily_log_dat.filter_logs( search_log_lst, function=lambda x: x['server_id'] == server_id) # 适配等级 search_log_lst = daily_log_dat.filter_logs( search_log_lst, function=lambda x: player_min_level <= x['level'] <= player_max_level) # 所有的消耗钻石的日志 all_cost_stone_log_lst = daily_log_dat.filter_logs( search_log_lst, function=lambda log: 'cost_stone' in log) # 根据事件拆分消耗日志 action_cost_stone_dict = daily_log_dat.split_log_action_logs( all_cost_stone_log_lst) table_lst = [] # 遍历所有事件 for _action, _logs in action_cost_stone_dict.items(): row_lst = [] # 事件名称 action_name = game_define.EVENT_LOG_ACTION_DICT[_action] # 充值用户消耗的部分日志 vip1_up_user_log = daily_log_dat.filter_logs( _logs, function=lambda log: log['vip_level'] != 0) # 非充值用户的部分日志 vip0_user_log = daily_log_dat.filter_logs( _logs, function=lambda log: log['vip_level'] == 0) # 充值用户消耗人数 recharge_user_num = daily_log_dat.get_set_num_with_key( vip1_up_user_log, 'uid') # 充值用户消耗次数 recharge_user_log_num = len(vip1_up_user_log) # 非充值用户的人数 vip0_user_num = daily_log_dat.get_set_num_with_key( vip0_user_log, 'uid') # 非充值用户消耗次数 vip0_user_log_num = len(vip0_user_log) # vip0 消耗钻石 vip0_cost_stone_num = daily_log_dat.get_sum_int_with_key( vip0_user_log, 'cost_stone') # 消耗钻石数量 total_cost_stone_num = daily_log_dat.get_sum_int_with_key( _logs, 'cost_stone') #事件名称 充值用户消耗人数 充值用户消耗次数 非充值用户消耗人数 非充值用户消耗次数 消耗钻石数量 VIP0消耗金额 VIP0消耗人数 row_lst = [ action_name, recharge_user_num, recharge_user_log_num, vip0_user_num, vip0_user_log_num, total_cost_stone_num, vip0_cost_stone_num, vip0_user_num ] # 遍历VIP for i in xrange(1, 13): vip_x_log = daily_log_dat.filter_logs( vip1_up_user_log, function=lambda log: log['vip_level'] == i) vip_x_cost_stone_num = daily_log_dat.get_sum_int_with_key( vip_x_log, 'cost_stone') vip_x_cost_stone_user_num = daily_log_dat.get_set_num_with_key( vip_x_log, 'uid') row_lst.append(vip_x_cost_stone_num) row_lst.append(vip_x_cost_stone_user_num) table_lst.append(row_lst) return table_lst
def get_table(search_start_date, search_end_date, channel_id=-1, server_id=-1): """ 获取表格 """ # 获取搜索区间日志 new_log_lst = daily_log_dat.get_new_log_lst(search_start_date, search_end_date) if channel_id >= 0: new_log_lst = daily_log_dat.filter_logs( new_log_lst, function=lambda x: x['platform_id'] == channel_id) if server_id >= 0: new_log_lst = daily_log_dat.filter_logs( new_log_lst, function=lambda x: x['server_id'] == server_id) search_days = (search_end_date - search_start_date).days table_lst = [] head_lst = [] head_name_lst = [] for _day in xrange(search_days + 1): row_date = search_start_date + datetime.timedelta(days=_day) # 当天日志 row_logs = daily_log_dat.filter_logs( new_log_lst, function=lambda log: log['log_time'].date() == row_date) # 获取不同事件的获取金币 action_logs_dict = daily_log_dat.split_log_action_logs(row_logs) # print("action_logs_dict: "+str(action_logs_dict)) add_stone_dict = dict() for _action, _logs in action_logs_dict.items(): sum_add_stone = daily_log_dat.get_sum_int_with_key( _logs, 'add_stone') add_stone_dict[_action] = sum_add_stone if sum_add_stone and _action not in head_lst: head_lst.append(_action) head_name_lst.append( game_define.EVENT_LOG_ACTION_DICT[_action]) for _day in xrange(search_days + 1): row_date = search_start_date + datetime.timedelta(days=_day) # 当天日志 row_logs = daily_log_dat.filter_logs( new_log_lst, function=lambda log: log['log_time'].date() == row_date) # 总产出金币数 total_get_stone = daily_log_dat.get_sum_int_with_key( row_logs, 'add_stone') # 总消耗金币数 total_cost_stone = daily_log_dat.get_sum_int_with_key( row_logs, 'cost_stone') # 获取不同事件的获取金币 action_logs_dict = daily_log_dat.split_log_action_logs(row_logs) add_stone_dict = dict() for _action, _logs in action_logs_dict.items(): sum_add_stone = daily_log_dat.get_sum_int_with_key( _logs, 'add_stone') add_stone_dict[_action] = sum_add_stone # 获取消耗 row_lst = [ row_date.strftime('%m/%d/%Y'), total_get_stone, total_cost_stone, ] for _act_id in head_lst: # print("_act_id: "+str(_act_id)+"add_gold_dict: "+str(add_gold_dict)) if _act_id in add_stone_dict: row_lst.append(add_stone_dict.get(_act_id, 0)) else: row_lst.append(0) # print("_day: "+str(_day)+"row_lst: "+str(row_lst)) table_lst.append(row_lst) return table_lst, head_name_lst
def get_create_table(search_start_date, search_end_date, monster_tid_lst, register_start_date=None, register_end_date=None, channel_id=-1, server_id=-1, player_min_level=1, player_max_level=999): #获取搜索区间日志 new_log_lst = daily_log_dat.get_new_log_lst(search_start_date, search_end_date) if channel_id >= 0: new_log_lst = daily_log_dat.filter_logs( new_log_lst, function=lambda x: x['platform_id'] == channel_id) if server_id >= 0: new_log_lst = daily_log_dat.filter_logs( new_log_lst, function=lambda x: x['server_id'] == server_id) #获取符合条件的日志 if register_start_date and register_end_date: new_log_lst = daily_log_dat.filter_logs( new_log_lst, function=lambda log: register_start_date <= log[ 'install'] <= register_end_date) # print("new_log_lst: "+str(new_log_lst)+"player_min_level: "+str(player_min_level)+"player_max_level: "+str(player_max_level)) # 适配等级 if player_min_level and player_max_level: new_log_lst = daily_log_dat.filter_logs( new_log_lst, function=lambda x: player_min_level <= x['level' ] <= player_max_level) # print("new_log_lst: "+str(new_log_lst)) create_monster_log_lst = daily_log_dat.filter_logs( new_log_lst, function=lambda log: is_monster_tid_in_key(log, 'add_monster_list', monster_tid_lst)) # 用宠物 和 星级拆分日志 monster_tid_star_dict = dict() action_set = set() for _log in create_monster_log_lst: add_monster_list = _log['add_monster_list'] action_set.add(_log['action']) for i in range(0, len(add_monster_list), 3): _tid = add_monster_list[i] _star = add_monster_list[i + 1] _lv = add_monster_list[i + 2] _key = str(_tid) + "," + str(_star) if _key in monster_tid_star_dict: monster_tid_star_dict[_key].append(_log) else: monster_tid_star_dict[_key] = [_log] # 遍历所有的怪 table_lst = [] head_name_lst = [] for _tid in monster_tid_lst: _name = _tid for _star in xrange(1, 6): row_lst = [] _key = str(_tid) + "," + str(_star) _log_lst = monster_tid_star_dict.get(_key, []) if _log_lst: # 遍历当前的怪星级的日志 action_log_dict = daily_log_dat.split_log_action_logs(_log_lst) # 获取各种action的数量 row_lst.append(_name) row_lst.append(_star) for _act in action_set: row_lst.append(len(action_log_dict.get(_act, []))) head_name_lst.append( game_define.EVENT_LOG_ACTION_DICT[_act]) table_lst.append(row_lst) return table_lst, head_name_lst