def get_table(search_from_date, search_to_date, channel_id=-1, server_id=-1): """ 充值周期 """ # 获取指定日期 所有日志 all_log_lst = daily_log_dat.get_new_log_lst(search_from_date, search_to_date) if channel_id >= 0: all_log_lst = daily_log_dat.filter_logs(all_log_lst, function=lambda x: x['platform_id'] == channel_id) if server_id >= 0: all_log_lst = daily_log_dat.filter_logs(all_log_lst, function=lambda x: x['server_id'] == server_id) # 获取区间内所有新安装用户 new_install_uid_lst = daily_log_dat.get_set_with_key(all_log_lst,'uid', function= lambda log:search_from_date <= log['install'] <= search_to_date) # 获取到今天为止的日志 all_log_lst = daily_log_dat.get_new_log_lst(search_from_date, datetime.date.today()) # 用指定日期新用户 获取所有充值日志 all_recharge_log = daily_log_dat.filter_logs(all_log_lst, action=game_define.EVENT_ACTION_RECHARGE_PLAYER, function=lambda log: log['uid'] in new_install_uid_lst) # 获取全部首冲日志 all_first_recharge_log = daily_log_dat.filter_logs(all_recharge_log, function=lambda log: log['old_rmb'] == 0) table_result = [] table_result.append(_get_day_distance_result('1日',all_recharge_log, all_first_recharge_log, 0, 1)) table_result.append(_get_day_distance_result('2日',all_recharge_log, all_first_recharge_log, 1, 2)) table_result.append(_get_day_distance_result('3日',all_recharge_log, all_first_recharge_log, 2, 3)) table_result.append(_get_day_distance_result('4日',all_recharge_log, all_first_recharge_log, 3, 4)) table_result.append(_get_day_distance_result('5日',all_recharge_log, all_first_recharge_log, 4, 5)) table_result.append(_get_day_distance_result('6日',all_recharge_log, all_first_recharge_log, 5, 6)) table_result.append(_get_day_distance_result('7日',all_recharge_log, all_first_recharge_log, 6, 7)) table_result.append(_get_day_distance_result('7-15日',all_recharge_log, all_first_recharge_log, 7, 15)) table_result.append(_get_day_distance_result('15-30日',all_recharge_log, all_first_recharge_log, 15, 30)) table_result.append(_get_day_distance_result('30日以上',all_recharge_log, all_first_recharge_log, 30)) return table_result
def get_table(search_start_date, search_end_date, channel_id=-1, server_id=-1): """ 获取表格 """ # 获取搜索区间日志 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_total_day = (search_end_date - search_start_date).days table_lst = [] for i in xrange(search_total_day + 1): _search_date = search_start_date + datetime.timedelta(days=1 * i) #获取当天日志 _row_log_lst = daily_log_dat.filter_logs( search_log_lst, function=lambda log: log['log_time'].date() == _search_date) # 获取新用户日志 new_user_lst = daily_log_dat.get_set_with_key( _row_log_lst, 'uid', action=game_define.EVENT_ACTION_ROLE_LOGIN, function=lambda log: log['install'] == _search_date) new_user_num = len(new_user_lst) ltv_day_lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 30, 60] ltv_val_lst = [] for ltv_days in ltv_day_lst: start_date = _search_date end_date = _search_date + datetime.timedelta(days=ltv_days) ltv_logs = daily_log_dat.get_new_log_lst(start_date, end_date) ltv_recharge_log_lst = daily_log_dat.filter_logs( ltv_logs, action=game_define.EVENT_ACTION_RECHARGE_PLAYER, function=lambda log: log['uid'] in new_user_lst) total_recharge_money = daily_log_dat.get_sum_int_with_key( ltv_recharge_log_lst, 'add_rmb') ltv_val = _get_ltv_value(new_user_num, total_recharge_money) ltv_val_lst.append(ltv_val) row_lst = [_search_date, new_user_num] row_lst.extend(ltv_val_lst) table_lst.append(row_lst) return table_lst
def get_table(search_start_date, search_end_date, channel_id=-1, server_id=-1): # 搜索日期到今天的所有日志 retained_day = search_start_date - datetime.timedelta(days=3) all_log_lst = daily_log_dat.get_new_log_lst(retained_day, search_end_date) if channel_id >= 0: all_log_lst = daily_log_dat.filter_logs(all_log_lst, function=lambda x: x["platform_id"] == channel_id) if server_id >= 0: all_log_lst = daily_log_dat.filter_logs(all_log_lst, function=lambda x: x["server_id"] == server_id) # 获取全部登录日志 all_login_log_lst = daily_log_dat.filter_logs(all_log_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN) # 获取玩家游戏天数字典 user_play_day_dict = daily_log_dat.split_log_users_play_days(all_login_log_lst) # 展示日期数 show_days = (search_end_date - search_start_date).days table_result = [] for i in xrange(show_days + 1): row_date = search_start_date + datetime.timedelta(days=i) # 获取所有流失用户 lost_user_lst = daily_log_dat.get_lost_user_set(all_login_log_lst, row_date) row = _get_row(row_date, user_play_day_dict, lost_user_lst) table_result.append(row) return table_result
def get_table(from_date, to_date, channel_id=-1, server_id=-1): """ 获取在线表数据 """ dis_minute = 5 # 5分钟间隔 from_datetime = datetime.datetime.strptime(str(from_date), '%Y-%m-%d') to_datetime = datetime.datetime.strptime(str(to_date), '%Y-%m-%d') new_log_lst = daily_log_dat.get_new_log_lst(from_datetime.date(), to_datetime.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) total_line = int((to_datetime - from_datetime).total_seconds() / (dis_minute * 60)) row_lst = [] for line in xrange(total_line): row = [] get_start_datetime = from_datetime + datetime.timedelta(minutes=dis_minute * line) get_end_datetime = get_start_datetime + datetime.timedelta(minutes=dis_minute) cur_user_num = daily_log_dat.get_set_num_with_key(new_log_lst, 'uid', function=lambda log: get_start_datetime <= log['log_time'] <= get_end_datetime) row.append(get_end_datetime.strftime("%Y-%m-%d %H:%M:%S")) row.append(cur_user_num) row_lst.append(row) return row_lst
def get_table(search_date, channel_id=-1, server_id=-1): new_log_lst = daily_log_dat.get_new_log_lst(search_date, search_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) #获取全部新手引导日志 all_guide_log_lst = daily_log_dat.filter_logs(new_log_lst, action=game_define.EVENT_ACTION_FINISH_GUIDE) # 总共5个引导步骤 (1-6) total_user = daily_log_dat.get_set_num_with_key(all_guide_log_lst, 'uid') complete_user_dict = dict() guide_name = [u'宠物升级',u'宠物突破',u'宠物进化',u'宠物技能',u'宠物洗练',u'宠物装备',u'新队伍位置'] for i in xrange(1, 8): # 当前引导的所有日志 guide_index_log_lst = daily_log_dat.filter_logs(all_guide_log_lst, function=lambda x: x['guide_id'] == i) complete_user_num = daily_log_dat.get_set_num_with_key(guide_index_log_lst, 'uid') complete_user_dict[i] = complete_user_num table_result = [] for i in xrange(1, 8): next_num = complete_user_dict.get(i+1,0) row = [ i, guide_name[i-1], complete_user_dict[i], # 完成人数 ] table_result.append(row) return table_result
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_table(search_start_date, search_end_date, channel_id=-1, server_id=-1): # 搜索日期到今天的所有日志 retained_day = search_start_date - datetime.timedelta(days=3) all_log_lst = daily_log_dat.get_new_log_lst(retained_day, search_end_date) if channel_id >= 0: all_log_lst = daily_log_dat.filter_logs( all_log_lst, function=lambda x: x['platform_id'] == channel_id) if server_id >= 0: all_log_lst = daily_log_dat.filter_logs( all_log_lst, function=lambda x: x['server_id'] == server_id) # 获取全部登录日志 all_login_log_lst = daily_log_dat.filter_logs( all_log_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN) # 获取玩家游戏天数字典 user_play_day_dict = daily_log_dat.split_log_users_play_days( all_login_log_lst) # 展示日期数 show_days = (search_end_date - search_start_date).days table_result = [] for i in xrange(show_days + 1): row_date = search_start_date + datetime.timedelta(days=i) # 获取所有流失用户 lost_user_lst = daily_log_dat.get_lost_user_set( all_login_log_lst, row_date) row = _get_row(row_date, user_play_day_dict, lost_user_lst) table_result.append(row) return table_result
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_FISHING_ONCE, game_define.EVENT_ACTION_FISHING_LOOP, ] 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) # print("-------------------" + str(row_date) + "-------------------") # 获取当天的日志 row_logs = daily_log_dat.filter_logs(new_log_lst, function=lambda log: log['log_time'].date() == row_date) # 过滤出钓鱼日志 stage_action_log_lst = daily_log_dat.filter_logs(row_logs, function=lambda log: log['action'] in stage_action_lst) # print("钓鱼日志 " + str(stage_action_log_lst)) # 日期 row_date_str = row_date.strftime('%m/%d/%Y') # 参与人数 join_user_num = daily_log_dat.get_set_num_with_key(stage_action_log_lst, 'uid') # 总钓鱼次数 total_finish_num = daily_log_dat.get_sum_int_with_key(stage_action_log_lst, 'cost_fishing_count') # 行日期之前的 日志 until_row_day_logs = daily_log_dat.filter_logs(new_log_lst, function=lambda log: log['log_time'].date() <= row_date) # 到达要求人数 can_join_user_num = daily_log_dat.get_set_num_with_key(until_row_day_logs, 'uid', function=lambda log:log['level'] >= 15) # 参与率 join_rate = 0 if can_join_user_num: join_rate = round(float(join_user_num)/float(can_join_user_num), 2) * 100 row_lst = [ row_date_str, # 日期 join_user_num, # 参与人数 total_finish_num, # 总钓鱼次数 can_join_user_num, # 到达要求人数 str(join_rate) + "%" # 参与率 ] table_lst.append(row_lst) return table_lst
def get_table(search_date, channel_id=-1, server_id=-1): """ 获取首次游戏时间长度 """ new_log_lst = daily_log_dat.get_new_log_lst(search_date, search_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) # 获取指定日期新用户 new_use_uid_lst = daily_log_dat.get_set_with_key(new_log_lst, 'uid', function=lambda log:log['install'] == search_date) # 获取新玩家的所有日志 new_user_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda log:log['uid'] in new_use_uid_lst) user_online_time_dict = _get_online_time_dict(new_user_log_lst, new_use_uid_lst) # print("user_online_time_dict: "+str(user_online_time_dict)) table_dat = [] table_dat.append(_get_row_dat("0-15s", user_online_time_dict, 0, 15)) table_dat.append(_get_row_dat("15-30s", user_online_time_dict, 15, 30)) table_dat.append(_get_row_dat("30s-1m", user_online_time_dict, 30, 60)) table_dat.append(_get_row_dat("1m-2m", user_online_time_dict, 60, 120)) table_dat.append(_get_row_dat("2m-3m", user_online_time_dict, 120, 180)) table_dat.append(_get_row_dat("3m-5m", user_online_time_dict, 180, 300)) table_dat.append(_get_row_dat("5m-10m", user_online_time_dict, 300, 600)) table_dat.append(_get_row_dat("10m-15m", user_online_time_dict, 600, 900)) table_dat.append(_get_row_dat("15m-30m", user_online_time_dict, 900, 1800)) table_dat.append(_get_row_dat("30m-60m", user_online_time_dict, 1800, 3600)) table_dat.append(_get_row_dat("60m-120m", user_online_time_dict, 3600, 7200)) table_dat.append(_get_row_dat("大于120m", user_online_time_dict, 7200)) # print("table_dat: "+str(table_dat)) return table_dat
def get_table(search_date, channel_id=-1, server_id=-1): new_log_lst = daily_log_dat.get_new_log_lst(search_date, search_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) #获取全部新手引导日志 all_newbie_log_lst = daily_log_dat.filter_logs(new_log_lst, action=game_define.EVENT_ACTION_FINISH_NEWBIE) # 总共5个引导步骤 (1-6) total_user = daily_log_dat.get_set_num_with_key(all_newbie_log_lst, 'uid') complete_user_dict = dict() newbie_name = [u'第一场战斗', u'抽取宝贝球', u'加入队伍', u'自动战斗', u'每日任务'] for i in xrange(1, 6): # 当前引导的所有日志 guide_index_log_lst = daily_log_dat.filter_logs(all_newbie_log_lst, function=lambda x: x['newbie_id'] == i) complete_user_num = daily_log_dat.get_set_num_with_key(guide_index_log_lst, 'uid') complete_user_dict[i] = complete_user_num table_result = [] for i in xrange(1, 6): next_num = complete_user_dict.get(i+1,0) row = [ i, newbie_name[i-1], complete_user_dict[i], # 完成人数 ] table_result.append(row) return table_result
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_table(search_start_date, search_end_date, channel_id=-1, server_id=-1): # 搜索日期到今天的所有日志 all_log_lst = daily_log_dat.get_new_log_lst(search_start_date, search_end_date) if channel_id >= 0: all_log_lst = daily_log_dat.filter_logs(all_log_lst, function=lambda x: x['platform_id'] == channel_id) if server_id >= 0: all_log_lst = daily_log_dat.filter_logs(all_log_lst, function=lambda x: x['server_id'] == server_id) # 获取充值列表 recharge_log_lst = daily_log_dat.filter_logs(all_log_lst, action=game_define.EVENT_ACTION_RECHARGE_PLAYER) # 获取日期数 search_days = (search_end_date - search_start_date).days table_result = [] for i in xrange(search_days+1): row = [] cur_date = search_start_date + datetime.timedelta(days=i) this_day_recharge_log = daily_log_dat.filter_logs(recharge_log_lst, function=lambda log:log['log_time'].date() == cur_date) # 插入数据 row.append(cur_date.strftime('%m/%d/%Y')) for shop_id in xrange(1, 9): user_num = daily_log_dat.get_set_num_with_key(this_day_recharge_log, 'uid',function=lambda log:log['shop_index'] == shop_id) # 插入数据 row.append(user_num) table_result.append(row) return table_result
def get_table(search_start_date, search_end_date, 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) # 适配等级 new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda x: player_min_level <= x['level'] <= player_max_level) # 获取用户表 # uid_lst = daily_log_dat.get_set_with_key(new_log_lst, 'uid') search_days = (search_end_date - search_start_date).days table_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) #拆分玩家金币日志 user_gold_dict = daily_log_dat.split_log_users_last_gold(row_logs) # 获取玩家总金币数 total_gold = sum([val for val in user_gold_dict.values()]) total_user = len(user_gold_dict) active_user = daily_log_dat.get_set_num_with_key(row_logs, 'uid', function=lambda log:log['install'] != row_date) row_lst = [row_date.strftime('%m/%d/%Y'), total_gold, total_user, active_user] table_lst.append(row_lst) return table_lst
def get_cost_stone_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 查询结束时间 """ # 获取搜索区间日志 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) #获取符合条件的日志 if register_start_date and register_end_date: search_log_lst = daily_log_dat.filter_logs(search_log_lst, function=lambda log: register_start_date <= log['install'] <= register_end_date) table_lst = [] # 全部消耗钻石日志 all_login_log_lst = daily_log_dat.filter_logs(search_log_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN) all_cost_stone_log_lst = daily_log_dat.filter_logs(search_log_lst, function=lambda log: 'cost_stone' in log) # 获取所有消耗钻石玩家UID uid_num = daily_log_dat.get_set_num_with_key(all_cost_stone_log_lst, 'uid') # 获取所有消耗钻石玩家设备lst device_num = daily_log_dat.get_set_num_with_key(all_login_log_lst, 'dev_id') # 消耗钻石总数 total_cost_stone = daily_log_dat.get_sum_int_with_key(all_cost_stone_log_lst, 'cost_stone') # 根据ID拆分日志 action_logs_dict = dict() for _log in all_cost_stone_log_lst: _action = _log['action'] if _action in action_logs_dict: action_logs_dict[_action].append(_log) else: lst = [_log] action_logs_dict[_action]=lst for _action, _logs in action_logs_dict.items(): user_num = daily_log_dat.get_set_num_with_key(_logs, 'uid') action_total_cost_stone = daily_log_dat.get_sum_int_with_key(_logs, 'cost_stone') action_name = game_define.EVENT_LOG_ACTION_DICT[_action] action_cost_num = len(_logs) # 参与率 # print("参与率 " + str(user_num) + " " + str(device_num)) take_part_rate = str(_get_rate(user_num, device_num)) + "%" # 人数比率 # print("人数比率 " + str(user_num) + " " + str(uid_num)) cur_user_num_rate = str(_get_rate(user_num, uid_num)) + "%" # 钻石比率 first_cost_stone_rate = str(_get_rate(action_total_cost_stone, total_cost_stone)) + "%" row = [action_name, action_total_cost_stone, user_num, action_cost_num, take_part_rate, first_cost_stone_rate, cur_user_num_rate] table_lst.append(row) 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_FINGER_GUESS_EXCHANGE, ] 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) # print("-------------------" + str(row_date) + "-------------------") # 获取当天的日志 row_logs = daily_log_dat.filter_logs(new_log_lst, function=lambda log:log['log_time'].date() == row_date) # 过滤出日志 stage_action_log_lst = daily_log_dat.filter_logs(row_logs, function=lambda log: log['action'] in stage_action_lst) # print("猜拳日志 " + str(stage_action_log_lst)) # 日期 row_date_str = row_date.strftime('%m/%d/%Y') # 参与人数 join_user_num = daily_log_dat.get_set_num_with_key(stage_action_log_lst, 'uid') # 总次数 total_active_num = len(stage_action_log_lst) # 行日期之前的 日志 until_row_day_logs = daily_log_dat.filter_logs(new_log_lst, function=lambda log: log['log_time'].date() <= row_date) # 到达要求人数 can_join_user_num = daily_log_dat.get_set_num_with_key(until_row_day_logs, 'uid', function=lambda log:log['level'] >= 13) # 参与率 join_rate = 0 if can_join_user_num: join_rate = round(float(join_user_num)/float(can_join_user_num), 2) * 100 row_lst = [ row_date_str, # 日期 join_user_num, # 参与人数 total_active_num, # 总钓鱼次数 can_join_user_num, # 到达要求人数 str(join_rate) + "%" # 参与率 ] 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) # 获取所有钻石消耗的日志 cost_stone_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda log: 'cost_stone' in log) level_log_dict = get_user_level_dict(cost_stone_log_lst) table_result = [] for _lv in xrange(1, 121): # print("--------------------"+str(_lv) + "--------------------") row = [] lv_logs = level_log_dict[_lv] uid_lst = daily_log_dat.get_set_with_key(lv_logs, 'uid') sum_cost_stone = daily_log_dat.get_sum_int_with_key(lv_logs, 'cost_stone') cur_lv_num = len(uid_lst) #到达人数 arrive_user_num = daily_log_dat.get_set_num_with_key(new_log_lst, 'uid', function=lambda log: log['level'] >= _lv) # 等级 row.append(str(_lv)) # 消耗人数 row.append(str(cur_lv_num)) # 消耗数量 row.append(str(sum_cost_stone)) # 到达人数 row.append(arrive_user_num) # 等级消耗ARPPU if cur_lv_num == 0: row.append(str(0)) else: row.append(str(round(float(sum_cost_stone) / float(cur_lv_num), 2))) # 等级消耗率 if arrive_user_num == 0: row.append(str(0) + "%") else: row.append(str(round(float(cur_lv_num) / float(arrive_user_num), 2) * 100) + "%") # row = [_lv, action_total_cost_stone, user_num, action_cost_num, take_part_rate, first_cost_stone_rate, cur_user_num_rate] # print("row: "+str(row)) table_result.append(row) return table_result
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_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): # 搜索日期到今天的所有日志 retained_day = search_start_date - datetime.timedelta(days=4) all_log_lst = daily_log_dat.get_new_log_lst(retained_day, search_end_date) if channel_id >= 0: all_log_lst = daily_log_dat.filter_logs( all_log_lst, function=lambda x: x['platform_id'] == channel_id) if server_id >= 0: all_log_lst = daily_log_dat.filter_logs( all_log_lst, function=lambda x: x['server_id'] == server_id) #获取所有登录事件 all_login_lst = daily_log_dat.filter_logs( all_log_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN) # 获取日期数 search_days = (search_end_date - search_start_date).days table_result = [] for i in xrange(search_days + 1): cur_date = search_start_date + datetime.timedelta(days=i) # 今日全部日志 today_login_lst = daily_log_dat.get_new_log_lst_with_log( all_login_lst, cur_date, cur_date) # 获取登录日志列表 today_login_uid_lst = daily_log_dat.get_set_with_key( today_login_lst, 'uid') today_new_user_login_lst = daily_log_dat.filter_logs( today_login_lst, function=lambda log: log['install'] == cur_date) today_new_user_uid_num = daily_log_dat.get_set_num_with_key( today_new_user_login_lst, 'uid') # 登录用户数 today_login_uid_num = len(today_login_uid_lst) # 活跃用户数 today_active_uid_num = today_new_user_uid_num # 流失用户(3天内没登录) today_lost_uid_num = len( daily_log_dat.get_lost_user_set(all_login_lst, cur_date)) # 回流用户(3天内没登录 但今天登录) login_back_num = len( daily_log_dat.get_lost_back_user_set(all_login_lst, cur_date)) row = [ cur_date.strftime("%m/%d/%Y"), today_login_uid_num, today_active_uid_num, today_lost_uid_num, login_back_num ] table_result.append(row) return table_result
def get_table(search_start_date, search_end_date, channel_id=-1, server_id=-1): """ 获取表格 """ # 获取搜索区间日志 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_total_day = (search_end_date - search_start_date).days table_lst = [] for i in xrange(search_total_day + 1): _search_date = search_start_date + datetime.timedelta(days=1 * i) #获取当天日志 _row_log_lst = daily_log_dat.filter_logs(search_log_lst, function=lambda log:log['log_time'].date() == _search_date) # 获取新用户日志 new_user_lst = daily_log_dat.get_set_with_key(_row_log_lst, 'uid', action=game_define.EVENT_ACTION_ROLE_LOGIN, function=lambda log:log['install'] == _search_date) new_user_num = len(new_user_lst) ltv_day_lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 30, 60] ltv_val_lst = [] for ltv_days in ltv_day_lst: start_date =_search_date end_date = _search_date + datetime.timedelta(days=ltv_days) ltv_logs = daily_log_dat.get_new_log_lst(start_date, end_date) ltv_recharge_log_lst = daily_log_dat.filter_logs(ltv_logs, action=game_define.EVENT_ACTION_RECHARGE_PLAYER, function=lambda log:log['uid'] in new_user_lst) total_recharge_money = daily_log_dat.get_sum_int_with_key(ltv_recharge_log_lst, 'add_rmb') ltv_val = _get_ltv_value(new_user_num, total_recharge_money) ltv_val_lst.append(ltv_val) row_lst = [_search_date, new_user_num] row_lst.extend(ltv_val_lst) table_lst.append(row_lst) return table_lst
def get_cost_stone_table(search_start_date, search_end_date, channel_id=-1, server_id=-1): """ 获取表格 """ table_lst = [] 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 log: log['action'] != game_define.EVENT_ACTION_FINISH_NEWBIE) search_log_lst = daily_log_dat.filter_logs(search_log_lst, function=lambda log: log['action'] != game_define.EVENT_ACTION_FINISH_GUIDE) # 获取首次消耗钻石的日志列表 first_cost_stone_log_lst = daily_log_dat.filter_logs(search_log_lst, function=lambda log: 'total_cost_stone' in log and log['total_cost_stone'] == log['cost_stone']) # 获取首次消耗钻石的所有用户 first_cost_stone_user_num = daily_log_dat.get_set_num_with_key(first_cost_stone_log_lst, 'uid') # 总钻石数 first_cost_stone_total_num = daily_log_dat.get_sum_int_with_key(first_cost_stone_log_lst, 'total_cost_stone') # 根据ID拆分日志 action_logs_dict = dict() for _log in first_cost_stone_log_lst: # print("_log:"+str(_log)) _action = _log['action'] if _action in action_logs_dict: action_logs_dict[_action].append(_log) else: lst = [_log] action_logs_dict[_action] = lst for _action, _logs in action_logs_dict.items(): user_num = daily_log_dat.get_set_num_with_key(_logs, 'uid') action_total_cost_stone = daily_log_dat.get_sum_int_with_key(_logs, 'cost_stone') action_name = game_define.EVENT_LOG_ACTION_DICT[_action] # 人数比率 cur_user_num_rate = str(_get_rate(user_num, first_cost_stone_user_num)) + "%" # print("action_total_cost_stone: "+str(action_total_cost_stone)+"first_cost_stone_total_num: "+str(first_cost_stone_total_num)) # 钻石比率 first_cost_stone_rate = str(_get_rate(action_total_cost_stone, first_cost_stone_total_num)) + "%" row = [action_name, action_total_cost_stone, user_num, cur_user_num_rate, first_cost_stone_rate] table_lst.append(row) 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): # 获取搜索区间日志 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) # 适配等级 new_log_lst = daily_log_dat.filter_logs( new_log_lst, function=lambda x: player_min_level <= x['level'] <= player_max_level) # 获取用户表 # uid_lst = daily_log_dat.get_set_with_key(new_log_lst, 'uid') search_days = (search_end_date - search_start_date).days table_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) #拆分玩家金币日志 user_key_dict = daily_log_dat.split_log_users_last_stone(row_logs) # 获取玩家总金币数 total_stone = sum([val for val in user_key_dict.values()]) total_user = len(user_key_dict) active_user = daily_log_dat.get_set_num_with_key( row_logs, 'uid', function=lambda log: log['install'] != row_date) row_lst = [ row_date.strftime('%m/%d/%Y'), total_stone, total_user, active_user ] table_lst.append(row_lst) return table_lst
def get_table(search_start_date, search_end_date, channel_id=-1, server_id=-1): # 搜索日期到今天的所有日志 retained_day = search_start_date - datetime.timedelta(days=4) all_log_lst = daily_log_dat.get_new_log_lst(retained_day, search_end_date) if channel_id >= 0: all_log_lst = daily_log_dat.filter_logs(all_log_lst, function=lambda x: x["platform_id"] == channel_id) if server_id >= 0: all_log_lst = daily_log_dat.filter_logs(all_log_lst, function=lambda x: x["server_id"] == server_id) # 获取所有登录事件 all_login_lst = daily_log_dat.filter_logs(all_log_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN) # 获取日期数 search_days = (search_end_date - search_start_date).days table_result = [] for i in xrange(search_days + 1): cur_date = search_start_date + datetime.timedelta(days=i) # 今日全部日志 today_login_lst = daily_log_dat.get_new_log_lst_with_log(all_login_lst, cur_date, cur_date) # 获取登录日志列表 today_login_uid_lst = daily_log_dat.get_set_with_key(today_login_lst, "uid") today_new_user_login_lst = daily_log_dat.filter_logs( today_login_lst, function=lambda log: log["install"] == cur_date ) today_new_user_uid_num = daily_log_dat.get_set_num_with_key(today_new_user_login_lst, "uid") # 登录用户数 today_login_uid_num = len(today_login_uid_lst) # 活跃用户数 today_active_uid_num = today_new_user_uid_num # 流失用户(3天内没登录) today_lost_uid_num = len(daily_log_dat.get_lost_user_set(all_login_lst, cur_date)) # 回流用户(3天内没登录 但今天登录) login_back_num = len(daily_log_dat.get_lost_back_user_set(all_login_lst, cur_date)) row = [ cur_date.strftime("%m/%d/%Y"), today_login_uid_num, today_active_uid_num, today_lost_uid_num, login_back_num, ] table_result.append(row) return table_result
def get_table(search_date, channel_id=-1, server_id=-1): """ 角色首次充值等级 """ start_log_time = datetime.datetime.strptime(game_define.LOCAL_LOG_START_DATE, '%Y-%m-%d').date() # 全部日志 all_log_lst = daily_log_dat.get_new_log_lst(start_log_time, search_date) if channel_id >= 0: all_log_lst = daily_log_dat.filter_logs(all_log_lst, function=lambda x: x['platform_id'] == channel_id) if server_id >= 0: all_log_lst = daily_log_dat.filter_logs(all_log_lst, function=lambda x: x['server_id'] == server_id) # 全部充值日志 all_recharge_log_lst = daily_log_dat.filter_logs(all_log_lst, action=game_define.EVENT_ACTION_RECHARGE_PLAYER) all_first_recharge_log_lst = daily_log_dat.filter_logs(all_recharge_log_lst, function=lambda log:log['old_rmb'] == 0) table_lst = [] for _table_lv in xrange(1, 121): # 全部当前等级充值日志 recharge_lv_log_lst = daily_log_dat.filter_logs(all_recharge_log_lst, function=lambda log: log['level'] == _table_lv) # 全部当前等级充值 用户ID列表 recharge_lv_user_lst = daily_log_dat.get_set_with_key(recharge_lv_log_lst, 'uid') # 全部当前等级首次充值日志 first_recharge_lv_log_lst = daily_log_dat.filter_logs(all_first_recharge_log_lst, function=lambda log: log['level'] == _table_lv) # 全部当前等级首次充值 用户ID列表 first_recharge_lv_user_lst = daily_log_dat.get_set_with_key(first_recharge_lv_log_lst, 'uid') # 首次充值人数 first_recharge_user_num = len(first_recharge_lv_user_lst) # 首次充值总金额 first_recharge_total_money = daily_log_dat.get_sum_int_with_key(first_recharge_lv_log_lst, "add_rmb") # 总体充值人数 recharge_user_num = len(recharge_lv_user_lst) # 总体充值金额 recharge_total_money = daily_log_dat.get_sum_int_with_key(recharge_lv_log_lst, "add_rmb") # 首次金额占比 first_recharge_money_rate = get_first_recharge_money_rate(first_recharge_total_money,recharge_total_money) # 首次人数占比 first_recharge_user_rate = get_first_recharge_user_rate(first_recharge_user_num,recharge_user_num) row = [_table_lv, first_recharge_user_num, first_recharge_total_money, recharge_user_num, recharge_total_money, first_recharge_money_rate, first_recharge_user_rate] table_lst.append(row) 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, 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) individual_action_lst = [ game_define.EVENT_ACTION_RESET_INDIVIDUAL_MONSTER, game_define.EVENT_ACTION_STONE_RESET_INDIVIDUAL_MONSTER ] reset_individual_logs = daily_log_dat.filter_logs(new_log_lst, function=lambda log: log['action'] in individual_action_lst) table_lst = [] monster_tid_dict = daily_log_dat.split_log_with_key_value(reset_individual_logs, 'monster_tid') for key in monster_tid_dict.keys(): _tid = key _name = key if _tid in monster_tid_dict: _logs = monster_tid_dict[_tid] # 获取用户次数字典 user_dict = daily_log_dat.split_log_with_key_value(_logs, 'uid') reset_50_user_num = get_reset_individual_user_num(user_dict, 1, 50) reset_50_100_user_num = get_reset_individual_user_num(user_dict, 51, 100) reset_100_200_user_num = get_reset_individual_user_num(user_dict, 101, 200) reset_200_400_user_num = get_reset_individual_user_num(user_dict, 201, 400) reset_400_800_user_num = get_reset_individual_user_num(user_dict, 401, 800) reset_up_800_user_num = get_reset_individual_user_num(user_dict, 801, 10000) row_lst = [_name, reset_50_user_num, reset_50_100_user_num, reset_100_200_user_num, reset_200_400_user_num, reset_400_800_user_num, reset_up_800_user_num] table_lst.append(row_lst) return table_lst
def get_table(start_time, end_time, channel_id=-1, server_id=-1): """ start_time 起始时间 end_time 结束时间 """ new_log_lst = daily_log_dat.get_new_log_lst(start_time, end_time) 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) # 获取登录事件 action_login_lst = daily_log_dat.filter_logs(new_log_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN) # 获取所有设备列表 device_lst = daily_log_dat.get_set_with_key(new_log_lst, 'dev_id') ip_lst = daily_log_dat.get_set_with_key(new_log_lst, 'login_ip') # 获取单设备账号数比率 device_account_result = _get_device_account_result(device_lst, action_login_lst) device_account_num_dict = _get_device_account_num(device_account_result) device_account_rate_dict = _get_device_account_rate(device_account_num_dict) # 获取单IP对应设备数 ip_device_result = _get_ip_device_result(ip_lst, action_login_lst) ip_device_num_dict = _get_ip_device_num(ip_device_result) ip_device_rate_dict = _get_ip_device_rate(ip_device_num_dict) max_row = max(len(device_account_num_dict), len(ip_device_num_dict)) row_lst = [] for x in xrange(1, max_row + 1): row = [] # 单设备对应账号数 row.append(device_account_num_dict.get(x, 0)) # 占比 row.append(device_account_rate_dict.get(x, 0)) # 单ip对应设备数 row.append(ip_device_num_dict.get(x, 0)) # 占比 row.append(ip_device_rate_dict.get(x, 0)) row_lst.append(row) return row_lst
def get_table(search_date, channel_id=-1, server_id=-1): """ 获取用户首日等级留存 """ all_log_lst = daily_log_dat.get_new_log_lst(search_date, search_date + datetime.timedelta(days=1)) if channel_id >= 0: all_log_lst = daily_log_dat.filter_logs(all_log_lst, function=lambda x: x['platform_id'] == channel_id) if server_id >= 0: all_log_lst = daily_log_dat.filter_logs(all_log_lst, function=lambda x: x['server_id'] == server_id) # print("留存计算日 " + str((search_date + datetime.timedelta(days=1)))) # print("留存日所有登录日志 2" + str(daily_log_dat.filter_logs(all_log_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN, function=lambda log:log['install'] == search_date and log['log_time'].date() == (search_date + datetime.timedelta(days=1))))) # 获取今天新创建用户登录日志 today_new_user_login_log_lst = daily_log_dat.filter_logs(all_log_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN, function=lambda log:log['install'] == search_date and log['log_time'].date() == search_date) # 获取新创建用户列表 today_new_user_lst = daily_log_dat.get_set_with_key(today_new_user_login_log_lst, 'uid') # print("登录用户列表 " + str(today_new_user_lst)) # 获取次日登录的用户列表 retained_login_log_lst = daily_log_dat.filter_logs(all_log_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN, function=lambda log:log['install'] == search_date and log['log_time'].date() == (search_date + datetime.timedelta(days=1))) retain_user_lst = daily_log_dat.get_set_with_key(retained_login_log_lst, 'uid') # print("留存用户列表 " + str(retain_user_lst)) # # 留存用户 # retain_use_uid_lst = daily_log_dat.get_set_with_key(all_login_log_lst, 'uid', function=lambda log:log['install'] == search_date) # # 获取新玩家当前最终等级 uid_level_dict = daily_log_dat.split_log_users_level(all_log_lst) # print("用户等级分布 " + str(uid_level_dict)) # # 获取今天登录的玩家列表 并且 昨天安装 # retained_1_login_uid_set = daily_log_dat.get_set_with_key(all_log_lst, 'uid', function= lambda log:log['uid'] in retain_use_uid_lst) table_result = [] for i in xrange(1,31): row = _get_row(i, uid_level_dict, today_new_user_lst, retain_user_lst) table_result.append(row) return table_result
def get_table(search_date, channel_id=-1, server_id=-1): new_log_lst = daily_log_dat.get_new_log_lst(search_date, search_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) #获取全部新手引导日志 all_guide_log_lst = daily_log_dat.filter_logs( new_log_lst, action=game_define.EVENT_ACTION_FINISH_GUIDE) # 总共5个引导步骤 (1-6) total_user = daily_log_dat.get_set_num_with_key(all_guide_log_lst, 'uid') complete_user_dict = dict() guide_name = [ u'宠物升级', u'宠物突破', u'宠物进化', u'宠物技能', u'宠物洗练', u'宠物装备', u'新队伍位置' ] for i in xrange(1, 8): # 当前引导的所有日志 guide_index_log_lst = daily_log_dat.filter_logs( all_guide_log_lst, function=lambda x: x['guide_id'] == i) complete_user_num = daily_log_dat.get_set_num_with_key( guide_index_log_lst, 'uid') complete_user_dict[i] = complete_user_num table_result = [] for i in xrange(1, 8): next_num = complete_user_dict.get(i + 1, 0) row = [ i, guide_name[i - 1], complete_user_dict[i], # 完成人数 ] table_result.append(row) return table_result
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_TREASURE_BATTLE_WIN, game_define.EVENT_ACTION_TREASURE_BATTLE_FAIL ] stage_action_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda log: log['action'] in stage_action_lst) #根据action 拆分日志 stage_action_log_dict = daily_log_dat.split_log_with_key_value(stage_action_log_lst, 'stage_index') # 遍历所有的关卡日志 type_name_lst = [u'普通副本',u'精英副本',u'英雄副本',u'经验副本',u'金币副本',u'抓宠副本',u'世界BOSS副本',u'修行',u'夺宝'] table_lst = [] for _stage_index, _logs in stage_action_log_dict.items(): #拆分日志 - 胜利部分 _win_logs = daily_log_dat.filter_logs(_logs, action=game_define.EVENT_ACTION_STAGE_BATTLE_WIN) #拆分日志 - 失败部分 _fail_logs = daily_log_dat.filter_logs(_logs, action=game_define.EVENT_ACTION_STAGE_BATTLE_FAIL) #拆分日志 - 扫荡部分 # _mop_logs = daily_log_dat.filter_logs(_logs, action=game_define.EVENT_ACTION_STAGE_MOP) # 副本难度 # 副本名称 stage_name = '11' # 副本类型 stage_type_name = type_name_lst[1] # 挑战次数 challenge_num = len(_logs) # 通过次数 win_num = len(_win_logs) # 扫荡次数 # mop_num = len(_mop_logs) # 成功率 win_rate = 0 if challenge_num: win_rate = round(float(win_num)/float(challenge_num),2) # 首次挑战次数 first_challenge_num = 0 #首次挑战成功次数 first_challenge_win = 0 # 普通类型 副本名称 挑战数 通过数 扫荡次数 成功率 首次挑战次数 首次挑战成功次数 row_lst = [stage_type_name, stage_name, challenge_num, win_num, win_rate, first_challenge_num, first_challenge_win] table_lst.append(row_lst) if len(table_lst) > 0: print (str(table_lst[0]) +"treasure lens is ::"+ str(len(table_lst))) return table_lst
def get_cost_stone_table(search_start_date, search_end_date, channel_id=-1, server_id=-1): """ 获取表格 """ table_lst = [] 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 log: log['action' ] != game_define.EVENT_ACTION_FINISH_NEWBIE) search_log_lst = daily_log_dat.filter_logs( search_log_lst, function=lambda log: log['action' ] != game_define.EVENT_ACTION_FINISH_GUIDE) # 获取首次消耗钻石的日志列表 first_cost_stone_log_lst = daily_log_dat.filter_logs( search_log_lst, function=lambda log: 'total_cost_stone' in log and log[ 'total_cost_stone'] == log['cost_stone']) # 获取首次消耗钻石的所有用户 first_cost_stone_user_num = daily_log_dat.get_set_num_with_key( first_cost_stone_log_lst, 'uid') # 总钻石数 first_cost_stone_total_num = daily_log_dat.get_sum_int_with_key( first_cost_stone_log_lst, 'total_cost_stone') # 根据ID拆分日志 action_logs_dict = dict() for _log in first_cost_stone_log_lst: # print("_log:"+str(_log)) _action = _log['action'] if _action in action_logs_dict: action_logs_dict[_action].append(_log) else: lst = [_log] action_logs_dict[_action] = lst for _action, _logs in action_logs_dict.items(): user_num = daily_log_dat.get_set_num_with_key(_logs, 'uid') action_total_cost_stone = daily_log_dat.get_sum_int_with_key( _logs, 'cost_stone') action_name = game_define.EVENT_LOG_ACTION_DICT[_action] # 人数比率 cur_user_num_rate = str(_get_rate(user_num, first_cost_stone_user_num)) + "%" # print("action_total_cost_stone: "+str(action_total_cost_stone)+"first_cost_stone_total_num: "+str(first_cost_stone_total_num)) # 钻石比率 first_cost_stone_rate = str( _get_rate(action_total_cost_stone, first_cost_stone_total_num)) + "%" row = [ action_name, action_total_cost_stone, user_num, cur_user_num_rate, first_cost_stone_rate ] table_lst.append(row) return table_lst
def get_table(search_date, register_start_date=None, register_end_date=None, channel_id=-1, server_id=-1): """ 获取各等级充值状况表格 """ # 获取搜索区间日志 # 本地写入的开始日期 log_start_date = datetime.datetime.strptime(game_define.LOCAL_LOG_START_DATE, '%Y-%m-%d').date() new_log_lst = daily_log_dat.get_new_log_lst(log_start_date, search_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: recharge_log_lst = daily_log_dat.filter_logs(new_log_lst, action=game_define.EVENT_ACTION_RECHARGE_PLAYER, function=lambda log: register_start_date <= log['install'] <= register_end_date) else: recharge_log_lst = daily_log_dat.filter_logs(new_log_lst, action=game_define.EVENT_ACTION_RECHARGE_PLAYER) # 获取所有充值玩家UID all_uid_log_lst = daily_log_dat.get_set_with_key(recharge_log_lst, 'uid') # 获取全部玩家当前等级 uid_level_dict = dict() for _uid in all_uid_log_lst: uid_level_dict[_uid] = daily_log_dat.get_max_int_with_key(new_log_lst, 'level', function=lambda log:log['uid'] == _uid) # print("uid_level_dict " + str(uid_level_dict)) # 获取全部玩家最后登录间隔天数 uid_last_login_distance = dict() for _uid in all_uid_log_lst: # 获取玩家最后登录日志 _user_login_logs = daily_log_dat.filter_logs(new_log_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN, function=lambda log:log['uid'] == _uid) if _user_login_logs: last_login_log = _user_login_logs[0] for _log in _user_login_logs: if _log['log_time'] > last_login_log['log_time']: last_login_log = _log # 计算距离搜索日的日期 last_login_dis_day = (search_date - last_login_log['log_time'].date()).days # 最后登录间隔日期 else: last_login_dis_day = 300 # 记录 uid_last_login_distance[_uid] = last_login_dis_day # 获取所有等级停留人数 table_row_lst = [] for _table_lv in xrange(1, 121): level_uid_lst = _get_level_uid_lst(_table_lv, uid_level_dict) lost_uid_lst = daily_log_dat.get_lost_user_set(level_uid_lst, search_date) arrive_uid_lst = _get_arrive_level_uid_lst(_table_lv, uid_level_dict) level_recharge_lst = daily_log_dat.get_recharge_lst_with_user_level(recharge_log_lst, _table_lv) recharge_uid_lst = daily_log_dat.get_user_uid_lst(level_recharge_lst) # 停留人数 user_num = len(level_uid_lst) # 流失人数 lost_num = len(lost_uid_lst) # 留存人数 stand_num = user_num - lost_num # 到达等级人数 arrive_num = len(arrive_uid_lst) # 充值金额 recharge_money = daily_log_dat.get_recharge_total_money(level_recharge_lst) # 充值次数 recharge_num = len(level_recharge_lst) # 充值人数 recharge_user_num = len(recharge_uid_lst) # 等级付费率 level_pay_rate = _get_level_pay_rate(recharge_user_num, arrive_num) # 等级流失率 流失人数/到达人数 level_lost_rate = _get_level_lost_rate(lost_num, arrive_num) content = [_table_lv, user_num, lost_num, stand_num, arrive_num, recharge_money, recharge_num, recharge_user_num, level_pay_rate, level_lost_rate] table_row_lst.append(content) return table_row_lst
def get_table(search_start_date, search_end_date, channel_id=-1, server_id=-1): """ 获取统计总表 search_start_date 查询开始时间 search_end_date 查询结束时间 """ start_log_time = datetime.datetime.strptime(game_define.LOCAL_LOG_START_DATE, '%Y-%m-%d').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) # pay_code_log_lst = daily_log_dat.filter_logs(new_log_lst, action=game_define.EVENT_ACTION_RECHARGE_PLAYER) # pay_code_res = dict() # for log in pay_code_log_lst: # plat = game_define.PLAT_FORM_NAME_DICT[log['platform_id']] # if plat in pay_code_res: # pay_code_res[plat].append(log['order_id']) # else: # pay_code_res[plat] = [log['order_id']] # print("订单 " + str(pay_code_res)) # 总天数 table_lst = [] total_days = (search_end_date - search_start_date).days + 1 for i in xrange(total_days): row_lst = [] # 每行的日期 row_date = search_start_date + datetime.timedelta(days=i) row_yesterday_date = row_date - datetime.timedelta(days=1) # print("-------------------------------"+str(row_date)+"---------------------------------------------") # 获取到昨天的全部日志 until_yesterday_all_log_lst = daily_log_dat.get_new_log_lst(start_log_time, row_yesterday_date) # # 获取上一天开始的所有设备数 until_yesterday_all_device = daily_log_dat.get_set_with_key(until_yesterday_all_log_lst, 'dev_id') # # 到昨天为止登录用户数 # # yesterday_all_user_num = daily_log_dat.get_set_num_with_key(yesterday_all_log_lst, 'uid') # # # 到昨天为止的登录账户 # # yesterday_all_account_num = daily_log_dat.get_set_num_with_key(yesterday_all_log_lst, 'account_id') # # # 到昨天为止充值人数 # # yesterday_all_recharge_user_num = daily_log_dat.get_set_num_with_key(yesterday_all_log_lst, 'uid', game_define.EVENT_ACTION_RECHARGE_PLAYER) # # # 获取到今天的所有日志 # until_today_all_log_lst = daily_log_dat.get_new_log_lst(start_log_time, row_date) # # 到今天为止所有设备数 # until_today_all_device_num = daily_log_dat.get_set_num_with_key(until_today_all_log_lst, 'dev_id') # # # 到今天为止的登录用户数 # # today_all_user_num = daily_log_dat.get_set_num_with_key(today_all_log_lst, 'uid') # # # 到今天为止的登录账户 # # today_all_account_num = daily_log_dat.get_set_num_with_key(today_all_log_lst, 'account_id') # # # 到今天为止充值人数 # # # today_all_recharge_user_num = daily_log_dat.get_set_num_with_key(today_all_log_lst, 'uid', game_define.EVENT_ACTION_RECHARGE_PLAYER) # 今天的日志 today_log_lst = daily_log_dat.get_new_log_lst_with_log(new_log_lst, row_date, row_date) # 今天登录设备数 today_device_num = daily_log_dat.get_set_num_with_key(today_log_lst, 'dev_id') # 今天的登录用户数 today_user_num = daily_log_dat.get_set_num_with_key(today_log_lst, 'uid') # 今天新增用户数 today_new_user_num = daily_log_dat.get_set_num_with_key(today_log_lst, 'uid', function=lambda log:log['install'] == row_date) #新设备数 today_new_device_num = daily_log_dat.get_set_num_with_key(today_log_lst, 'dev_id', action=game_define.EVENT_ACTION_ROLE_LOGIN, function=lambda log:log['dev_id'] not in until_yesterday_all_device) # 新账户数 today_new_account_num = daily_log_dat.get_set_num_with_key(today_log_lst, 'account_id', action=game_define.EVENT_ACTION_ROLE_LOGIN, function=lambda log:log['install'] == row_date) # 今天的登录账户 today_account_num = daily_log_dat.get_set_num_with_key(today_log_lst, 'account_id') # 今天充值人数 today_recharge_user_num = daily_log_dat.get_set_num_with_key(today_log_lst, 'uid', game_define.EVENT_ACTION_RECHARGE_PLAYER) # 今天新增充值人数 today_new_recharge_user_num = daily_log_dat.get_set_num_with_key(today_log_lst, 'uid', game_define.EVENT_ACTION_RECHARGE_PLAYER, lambda log:log['cur_rmb']== log['add_rmb']) # 充值金额 today_recharge_rmb = daily_log_dat.get_sum_int_with_key(today_log_lst, 'add_rmb', game_define.EVENT_ACTION_RECHARGE_PLAYER) # 新增充值金额 today_new_recharge_rmb = daily_log_dat.get_sum_int_with_key(today_log_lst, 'add_rmb', game_define.EVENT_ACTION_RECHARGE_PLAYER, lambda log:log['cur_rmb']== log['add_rmb']) # 今天登录事件次数 today_login_action_num = daily_log_dat.get_list_num_with_key(today_log_lst, 'uid', game_define.EVENT_ACTION_ROLE_LOGIN) # 活跃设备数 today_active_device_num = today_device_num - today_new_device_num # 活跃用户数 today_active_user_num = today_user_num - today_new_user_num # 登录用户数 today_login_user_num = today_user_num # 登录设备数 today_login_device_num = today_device_num # 活跃账户数 today_active_account_num = today_account_num - today_new_account_num # print("-------------------------------"+str(row_date)+"---------------------------------------------") # print("充值玩家 " + str(daily_log_dat.get_set_with_key(today_log_lst, 'uid', game_define.EVENT_ACTION_RECHARGE_PLAYER))) # print("新增充值玩家 " + str(daily_log_dat.get_set_with_key(today_log_lst, 'uid', game_define.EVENT_ACTION_RECHARGE_PLAYER, lambda log:log['cur_rmb']== log['add_rmb']))) # print("充值金额列表 " + str(daily_log_dat.get_list_with_key(today_log_lst, 'add_rmb', game_define.EVENT_ACTION_RECHARGE_PLAYER))) # print("新增充值金额列表 " + str(daily_log_dat.get_list_with_key(today_log_lst, 'add_rmb', game_define.EVENT_ACTION_RECHARGE_PLAYER, lambda log:log['cur_rmb']== log['add_rmb']))) # 付费率=充值人数/登录设备 pay_rate = Division(today_recharge_user_num, today_login_device_num) # 付费arppu 充值金额/充值人数 pay_arppu = Division(today_recharge_rmb, today_recharge_user_num) # 登录arpu 充值金额/登陆设备 login_arpu = Division(today_recharge_rmb, today_login_device_num) # 半小时精度在线人数列表 online_user_num_lst = daily_log_dat.get_online_user_len_lst(row_date, today_log_lst) # 平均在线人数 acu acu = _get_acu(online_user_num_lst) # 最高在线人数 pcu = _get_pcu(online_user_num_lst) # 平均在线时长 avg_online_time = _get_avg_online_time(online_user_num_lst, today_login_user_num) # 人均登入次数 avg_login_count = _get_avg_login_count(today_login_action_num, today_login_user_num) # 获取玩家安装游戏日期 install_date = row_date - datetime.timedelta(days=1) retained_1_num = daily_log_dat.get_set_num_with_key(today_log_lst, 'uid', game_define.EVENT_ACTION_ROLE_LOGIN, lambda log:log['install'] == install_date) install_date = row_date - datetime.timedelta(days=3) retained_3_num = daily_log_dat.get_set_num_with_key(today_log_lst, 'uid', game_define.EVENT_ACTION_ROLE_LOGIN, lambda log:log['install'] == install_date) install_date = row_date - datetime.timedelta(days=7) retained_7_num = daily_log_dat.get_set_num_with_key(today_log_lst, 'uid', game_define.EVENT_ACTION_ROLE_LOGIN, lambda log:log['install'] == install_date) install_date = row_date - datetime.timedelta(days=15) retained_15_num = daily_log_dat.get_set_num_with_key(today_log_lst, 'uid', game_define.EVENT_ACTION_ROLE_LOGIN, lambda log:log['install'] == install_date) install_date = row_date - datetime.timedelta(days=30) retained_30_num = daily_log_dat.get_set_num_with_key(today_log_lst, 'uid', game_define.EVENT_ACTION_ROLE_LOGIN, lambda log:log['install'] == install_date) row_lst.append(row_date.strftime('%Y-%m-%d')) row_lst.append(today_active_device_num) row_lst.append(today_active_user_num) row_lst.append(today_new_device_num) row_lst.append(today_new_user_num) row_lst.append(today_login_device_num) row_lst.append(today_login_user_num) row_lst.append(today_active_account_num) row_lst.append(today_new_account_num) row_lst.append(today_recharge_user_num) row_lst.append(today_new_recharge_user_num) row_lst.append(today_recharge_rmb) row_lst.append(today_new_recharge_rmb) row_lst.append(pay_rate) row_lst.append(pay_arppu) row_lst.append(login_arpu) row_lst.append(acu) row_lst.append(pcu) row_lst.append(avg_online_time) row_lst.append(avg_login_count) row_lst.append(retained_1_num) row_lst.append(retained_3_num) row_lst.append(retained_7_num) row_lst.append(retained_15_num) row_lst.append(retained_30_num) table_lst.append(row_lst) # print("table_lst " + str(table_lst)) return table_lst
def get_cost_stone_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 查询结束时间 """ # 获取搜索区间日志 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) #获取符合条件的日志 if register_start_date and register_end_date: search_log_lst = daily_log_dat.filter_logs( search_log_lst, function=lambda log: register_start_date <= log[ 'install'] <= register_end_date) table_lst = [] # 全部消耗钻石日志 all_login_log_lst = daily_log_dat.filter_logs( search_log_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN) all_cost_stone_log_lst = daily_log_dat.filter_logs( search_log_lst, function=lambda log: 'cost_stone' in log) # 获取所有消耗钻石玩家UID uid_num = daily_log_dat.get_set_num_with_key(all_cost_stone_log_lst, 'uid') # 获取所有消耗钻石玩家设备lst device_num = daily_log_dat.get_set_num_with_key(all_login_log_lst, 'dev_id') # 消耗钻石总数 total_cost_stone = daily_log_dat.get_sum_int_with_key( all_cost_stone_log_lst, 'cost_stone') # 根据ID拆分日志 action_logs_dict = dict() for _log in all_cost_stone_log_lst: _action = _log['action'] if _action in action_logs_dict: action_logs_dict[_action].append(_log) else: lst = [_log] action_logs_dict[_action] = lst for _action, _logs in action_logs_dict.items(): user_num = daily_log_dat.get_set_num_with_key(_logs, 'uid') action_total_cost_stone = daily_log_dat.get_sum_int_with_key( _logs, 'cost_stone') action_name = game_define.EVENT_LOG_ACTION_DICT[_action] action_cost_num = len(_logs) # 参与率 # print("参与率 " + str(user_num) + " " + str(device_num)) take_part_rate = str(_get_rate(user_num, device_num)) + "%" # 人数比率 # print("人数比率 " + str(user_num) + " " + str(uid_num)) cur_user_num_rate = str(_get_rate(user_num, uid_num)) + "%" # 钻石比率 first_cost_stone_rate = str( _get_rate(action_total_cost_stone, total_cost_stone)) + "%" row = [ action_name, action_total_cost_stone, user_num, action_cost_num, take_part_rate, first_cost_stone_rate, cur_user_num_rate ] table_lst.append(row) 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) # 获取新增用户部分日志 all_login_lst = daily_log_dat.filter_logs( new_log_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN) all_uid_log_lst = daily_log_dat.get_set_with_key(all_login_lst, 'uid') # 获取全部玩家最后登录间隔天数 uid_level_dict = dict() for _uid in all_uid_log_lst: uid_level_dict[_uid] = daily_log_dat.get_max_int_with_key( all_login_lst, 'level', function=lambda x: x['uid'] == _uid) # 获取全部玩家最后登录间隔天数 uid_last_login_distance = dict() for _uid in all_uid_log_lst: # 获取玩家最后登录日志 _user_login_logs = daily_log_dat.filter_logs( new_log_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN, function=lambda log: log['uid'] == _uid) if _user_login_logs: last_login_log = _user_login_logs[0] for _log in _user_login_logs: if _log['log_time'] > last_login_log['log_time']: last_login_log = _log # 计算距离搜索日的日期 last_login_dis_day = ( search_end_date - last_login_log['log_time'].date()).days # 最后登录间隔日期 else: last_login_dis_day = 300 # 记录 uid_last_login_distance[_uid] = last_login_dis_day # 遍历全部等级 table_row_lst = [] for _table_lv in xrange(1, 121): level_uid_lst = _get_level_uid_lst(_table_lv, uid_level_dict) lost_uid_lst = daily_log_dat.get_lost_user_set(new_log_lst, search_end_date) arrive_uid_lst = _get_arrive_level_uid_lst(_table_lv, uid_level_dict) # 停留人数 user_num = len(level_uid_lst) # 流失人数 lost_num = len(lost_uid_lst) # 留存人数 stand_num = user_num - lost_num # 到达等级人数 arrive_num = len(arrive_uid_lst) # 等级流失率 level_lost_rate = _get_level_lost_rate(lost_num, arrive_num) # 等级 停留人数 留存人数 流失人数 到达人数 等级流失率 content = [ _table_lv, user_num, stand_num, lost_num, arrive_num, level_lost_rate ] table_row_lst.append(content) return table_row_lst
def get_table(search_from_date, search_to_date, channel_id=-1, server_id=-1): """ 充值周期 """ # 获取指定日期 所有日志 all_log_lst = daily_log_dat.get_new_log_lst(search_from_date, search_to_date) if channel_id >= 0: all_log_lst = daily_log_dat.filter_logs( all_log_lst, function=lambda x: x['platform_id'] == channel_id) if server_id >= 0: all_log_lst = daily_log_dat.filter_logs( all_log_lst, function=lambda x: x['server_id'] == server_id) # 获取区间内所有新安装用户 new_install_uid_lst = daily_log_dat.get_set_with_key( all_log_lst, 'uid', function=lambda log: search_from_date <= log['install' ] <= search_to_date) # 获取到今天为止的日志 all_log_lst = daily_log_dat.get_new_log_lst(search_from_date, datetime.date.today()) # 用指定日期新用户 获取所有充值日志 all_recharge_log = daily_log_dat.filter_logs( all_log_lst, action=game_define.EVENT_ACTION_RECHARGE_PLAYER, function=lambda log: log['uid'] in new_install_uid_lst) # 获取全部首冲日志 all_first_recharge_log = daily_log_dat.filter_logs( all_recharge_log, function=lambda log: log['old_rmb'] == 0) table_result = [] table_result.append( _get_day_distance_result('1日', all_recharge_log, all_first_recharge_log, 0, 1)) table_result.append( _get_day_distance_result('2日', all_recharge_log, all_first_recharge_log, 1, 2)) table_result.append( _get_day_distance_result('3日', all_recharge_log, all_first_recharge_log, 2, 3)) table_result.append( _get_day_distance_result('4日', all_recharge_log, all_first_recharge_log, 3, 4)) table_result.append( _get_day_distance_result('5日', all_recharge_log, all_first_recharge_log, 4, 5)) table_result.append( _get_day_distance_result('6日', all_recharge_log, all_first_recharge_log, 5, 6)) table_result.append( _get_day_distance_result('7日', all_recharge_log, all_first_recharge_log, 6, 7)) table_result.append( _get_day_distance_result('7-15日', all_recharge_log, all_first_recharge_log, 7, 15)) table_result.append( _get_day_distance_result('15-30日', all_recharge_log, all_first_recharge_log, 15, 30)) table_result.append( _get_day_distance_result('30日以上', all_recharge_log, all_first_recharge_log, 30)) return table_result
def get_table( search_start_date, search_end_date, register_start_date=None, register_end_date=None, channel_id=-1, server_id=-1, player_min_lv=1, player_max_lv=120, ): """ 获取展示表格 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 ) # 获取日期数 search_days = (search_end_date - search_start_date).days table_result = [] for i in xrange(search_days + 1): cur_date = search_start_date + datetime.timedelta(days=i) # 今日全部登录日志 today_login_lst = daily_log_dat.filter_logs( new_log_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN, function=lambda log: log["log_time"].date() == cur_date, ) ## # 昨天全部登陆日志 yesterday_login_lst = daily_log_dat.filter_logs( yesterday_login_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN, function=lambda log: log["log_time"].date() == cur_date - 1, ) ## # 用户uid列表 today_login_uid_lst = daily_log_dat.get_set_with_key(today_login_lst, "uid") today_new_user_uid_lst = daily_log_dat.get_set_with_key( today_login_lst, "uid", function=lambda log: log["install"] == cur_date ) # 获取用户当前等级字典 uid_level_dict = dict() for _uid in today_login_uid_lst: _lv = daily_log_dat.get_max_int_with_key(today_login_lst, "level", function=lambda log: log["uid"] == _uid) uid_level_dict[_uid] = _lv # 登录用户数 today_login_uid_num = len(today_login_uid_lst) # 新增用户数 today_new_uid_num = len(today_new_user_uid_lst) # 等级用户数 level_user_num_lst = [] for _lv in xrange(player_min_lv, player_max_lv + 1): user_num = get_level_user_num(uid_level_dict, _lv) level_user_num_lst.append(user_num) row = [cur_date.strftime("%Y-%m-%d"), today_login_uid_num, today_new_uid_num] row.extend(level_user_num_lst) table_result.append(row) return table_result
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_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) # 获取所有钻石消耗的日志 cost_stone_log_lst = daily_log_dat.filter_logs( new_log_lst, function=lambda log: 'cost_stone' in log) level_log_dict = get_user_level_dict(cost_stone_log_lst) table_result = [] for _lv in xrange(1, 121): # print("--------------------"+str(_lv) + "--------------------") row = [] lv_logs = level_log_dict[_lv] uid_lst = daily_log_dat.get_set_with_key(lv_logs, 'uid') sum_cost_stone = daily_log_dat.get_sum_int_with_key( lv_logs, 'cost_stone') cur_lv_num = len(uid_lst) #到达人数 arrive_user_num = daily_log_dat.get_set_num_with_key( new_log_lst, 'uid', function=lambda log: log['level'] >= _lv) # 等级 row.append(str(_lv)) # 消耗人数 row.append(str(cur_lv_num)) # 消耗数量 row.append(str(sum_cost_stone)) # 到达人数 row.append(arrive_user_num) # 等级消耗ARPPU if cur_lv_num == 0: row.append(str(0)) else: row.append(str(round(float(sum_cost_stone) / float(cur_lv_num), 2))) # 等级消耗率 if arrive_user_num == 0: row.append(str(0) + "%") else: row.append( str( round(float(cur_lv_num) / float(arrive_user_num), 2) * 100) + "%") # row = [_lv, action_total_cost_stone, user_num, action_cost_num, take_part_rate, first_cost_stone_rate, cur_user_num_rate] # print("row: "+str(row)) table_result.append(row) return table_result
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) # print("new_log_lst111: "+str(new_log_lst)) # 全部钻石商城物品购买日志 all_stone_shop_log_lst = daily_log_dat.filter_logs(new_log_lst, action=game_define.EVENT_ACTION_STONE_SHOP_BUY) # print("all_stone_shop_log_lst: "+str(all_stone_shop_log_lst)) # 获取所有钻石商城物品玩家设备 device_lst = daily_log_dat.get_set_with_key(all_stone_shop_log_lst, 'dev_id') # 获取所有钻石商城物品购买日志玩家UID all_uid_lst = daily_log_dat.get_set_with_key(all_stone_shop_log_lst, 'uid') # 消耗钻石总数 total_cost_stone = daily_log_dat.get_sum_int_with_key(all_stone_shop_log_lst, 'cost_stone') # 根据ID拆分日志 item_logs_dict = dict() for _log in all_stone_shop_log_lst: _item_info = _log['add_item_list'] _item_tid = _item_info[0] if _item_tid in item_logs_dict: item_logs_dict[_item_tid].append(_log) else: lst = [_log] item_logs_dict[_item_tid] = lst table_lst = [] for _item_tid, _log in item_logs_dict.items(): user_num = daily_log_dat.get_set_num_with_key(_log, 'uid') # 购买物品 # item_config = game_config.get_item_config(int(_item_tid)) event_log_act = _item_tid # 钻石数 cost_stone = daily_log_dat.get_sum_int_with_key(_log, 'cost_stone') # 次数 cost_num = len(_log) # 参与率 take_part_rate = _get_rate(user_num, len(device_lst)) # 钻石比率 first_cost_stone_rate = _get_rate(cost_stone, total_cost_stone) # 人数比率 cur_user_num_rate = _get_rate(user_num, len(all_uid_lst)) row = [event_log_act, cost_stone, user_num, cost_num, take_part_rate, first_cost_stone_rate, cur_user_num_rate] table_lst.append(row) 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): """ 获取展示表格 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) new_user_log_lst = daily_log_dat.filter_logs( new_log_lst, function=lambda log: search_start_date <= log['install' ] <= search_end_date) # 新用户数量 new_user_num = daily_log_dat.get_set_num_with_key(new_user_log_lst, 'uid') # 获取首冲日志列表 first_recharge_log_lst = daily_log_dat.filter_logs( new_log_lst, action=game_define.EVENT_ACTION_RECHARGE_PLAYER, function=lambda log: log['old_rmb'] == 0) first_recharge_uid_lst = daily_log_dat.get_set_with_key( first_recharge_log_lst, 'uid') # 新用户首冲 new_user_first_recharge_log_lst = daily_log_dat.filter_logs( new_user_log_lst, action=game_define.EVENT_ACTION_RECHARGE_PLAYER, function=lambda log: log['old_rmb'] == 0) new_user_first_recharge_uid_lst = daily_log_dat.get_set_with_key( new_user_first_recharge_log_lst, 'uid') # 获取所有登录日志 all_login_log_lst = daily_log_dat.filter_logs( new_log_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN) all_login_uid_lst = daily_log_dat.get_set_with_key(all_login_log_lst, 'uid') # 新用户登录日志 all_new_user_login_log_lst = daily_log_dat.filter_logs( new_user_log_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN) all_new_user_login_uid_lst = daily_log_dat.get_set_with_key( all_new_user_login_log_lst, 'uid') # 获取用户的所有VIP字典 uid_vip_dict = dict() uid_month_days_dict = dict() new_user_uid_vip_dict = dict() new_user_uid_month_days_dict = dict() for _uid in all_login_uid_lst: _vip_lv = daily_log_dat.get_max_int_with_key( all_login_log_lst, 'vip_level', function=lambda log: log['uid'] == _uid) _month_card_days = daily_log_dat.get_max_int_with_key( all_login_log_lst, 'month_card_days', function=lambda log: log['uid'] == _uid) uid_vip_dict[_uid] = _vip_lv uid_month_days_dict[_uid] = _month_card_days if _uid in all_new_user_login_uid_lst: new_user_uid_vip_dict[_uid] = _vip_lv new_user_uid_month_days_dict[_uid] = _month_card_days table_lst = [] # 首冲人数 first_recharge_uid_num = len(first_recharge_uid_lst) month_card_num = get_month_user_num(uid_month_days_dict) vip_lst = [] for vip in xrange(13): vip_num = get_vip_user_num(uid_vip_dict, vip) vip_lst.append(vip_num) row = ['总体', first_recharge_uid_num, month_card_num] row.extend(vip_lst) table_lst.append(row) # 新增部分数据 new_user_first_recharge_uid_num = len(new_user_first_recharge_uid_lst) new_user_month_card_num = get_month_user_num(new_user_uid_month_days_dict) new_vip_lst = [] for vip in xrange(13): vip_num = get_vip_user_num(new_user_uid_vip_dict, vip) new_vip_lst.append(vip_num) new_row = ['新增', new_user_first_recharge_uid_num, new_user_month_card_num] new_row.extend(new_vip_lst) table_lst.append(new_row) # 区间新增用户数 new_user_num_row = ['新增角色数'] new_user_num_row.extend([new_user_num] * 15) table_lst.append(new_user_num_row) rate_row = [ '比率', get_rate(new_user_first_recharge_uid_num, new_user_num), get_rate(new_user_month_card_num, new_user_num) ] for _vip_num in new_row[3:]: rate_row.append(get_rate(_vip_num, new_user_num)) table_lst.append(rate_row) 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, 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) individual_action_lst = [ game_define.EVENT_ACTION_RESET_INDIVIDUAL_MONSTER, game_define.EVENT_ACTION_STONE_RESET_INDIVIDUAL_MONSTER ] reset_individual_logs = daily_log_dat.filter_logs( new_log_lst, function=lambda log: log['action'] in individual_action_lst) table_lst = [] monster_tid_dict = daily_log_dat.split_log_with_key_value( reset_individual_logs, 'monster_tid') for key in monster_tid_dict.keys(): _tid = key _name = key if _tid in monster_tid_dict: _logs = monster_tid_dict[_tid] # 获取用户次数字典 user_dict = daily_log_dat.split_log_with_key_value(_logs, 'uid') reset_50_user_num = get_reset_individual_user_num(user_dict, 1, 50) reset_50_100_user_num = get_reset_individual_user_num( user_dict, 51, 100) reset_100_200_user_num = get_reset_individual_user_num( user_dict, 101, 200) reset_200_400_user_num = get_reset_individual_user_num( user_dict, 201, 400) reset_400_800_user_num = get_reset_individual_user_num( user_dict, 401, 800) reset_up_800_user_num = get_reset_individual_user_num( user_dict, 801, 10000) row_lst = [ _name, reset_50_user_num, reset_50_100_user_num, reset_100_200_user_num, reset_200_400_user_num, reset_400_800_user_num, reset_up_800_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, 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_TREASURE_BATTLE_WIN, game_define.EVENT_ACTION_TREASURE_BATTLE_FAIL ] stage_action_log_lst = daily_log_dat.filter_logs( new_log_lst, function=lambda log: log['action'] in stage_action_lst) #根据action 拆分日志 stage_action_log_dict = daily_log_dat.split_log_with_key_value( stage_action_log_lst, 'stage_index') # 遍历所有的关卡日志 type_name_lst = [ u'普通副本', u'精英副本', u'英雄副本', u'经验副本', u'金币副本', u'抓宠副本', u'世界BOSS副本', u'修行', u'夺宝' ] table_lst = [] for _stage_index, _logs in stage_action_log_dict.items(): #拆分日志 - 胜利部分 _win_logs = daily_log_dat.filter_logs( _logs, action=game_define.EVENT_ACTION_STAGE_BATTLE_WIN) #拆分日志 - 失败部分 _fail_logs = daily_log_dat.filter_logs( _logs, action=game_define.EVENT_ACTION_STAGE_BATTLE_FAIL) #拆分日志 - 扫荡部分 # _mop_logs = daily_log_dat.filter_logs(_logs, action=game_define.EVENT_ACTION_STAGE_MOP) # 副本难度 # 副本名称 stage_name = '11' # 副本类型 stage_type_name = type_name_lst[1] # 挑战次数 challenge_num = len(_logs) # 通过次数 win_num = len(_win_logs) # 扫荡次数 # mop_num = len(_mop_logs) # 成功率 win_rate = 0 if challenge_num: win_rate = round(float(win_num) / float(challenge_num), 2) # 首次挑战次数 first_challenge_num = 0 #首次挑战成功次数 first_challenge_win = 0 # 普通类型 副本名称 挑战数 通过数 扫荡次数 成功率 首次挑战次数 首次挑战成功次数 row_lst = [ stage_type_name, stage_name, challenge_num, win_num, win_rate, first_challenge_num, first_challenge_win ] table_lst.append(row_lst) if len(table_lst) > 0: print(str(table_lst[0]) + "treasure lens is ::" + str(len(table_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, player_min_lv=1, player_max_lv=120): """ 获取展示表格 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) # 获取日期数 search_days = (search_end_date - search_start_date).days table_result = [] for i in xrange(search_days + 1): cur_date = search_start_date + datetime.timedelta(days=i) # 今日全部登录日志 today_login_lst = daily_log_dat.filter_logs( new_log_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN, function=lambda log: log['log_time'].date() == cur_date) ## # 昨天全部登陆日志 yesterday_login_lst = daily_log_dat.filter_logs( yesterday_login_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN, function=lambda log: log['log_time'].date() == cur_date - 1) ## # 用户uid列表 today_login_uid_lst = daily_log_dat.get_set_with_key( today_login_lst, 'uid') today_new_user_uid_lst = daily_log_dat.get_set_with_key( today_login_lst, 'uid', function=lambda log: log['install'] == cur_date) #获取用户当前等级字典 uid_level_dict = dict() for _uid in today_login_uid_lst: _lv = daily_log_dat.get_max_int_with_key( today_login_lst, 'level', function=lambda log: log['uid'] == _uid) uid_level_dict[_uid] = _lv # 登录用户数 today_login_uid_num = len(today_login_uid_lst) # 新增用户数 today_new_uid_num = len(today_new_user_uid_lst) # 等级用户数 level_user_num_lst = [] for _lv in xrange(player_min_lv, player_max_lv + 1): user_num = get_level_user_num(uid_level_dict, _lv) level_user_num_lst.append(user_num) row = [ cur_date.strftime('%Y-%m-%d'), today_login_uid_num, today_new_uid_num ] row.extend(level_user_num_lst) table_result.append(row) return table_result
def get_table(search_start_date, search_end_date, 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) new_user_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda log: search_start_date <= log['install'] <= search_end_date) # 新用户数量 new_user_num = daily_log_dat.get_set_num_with_key(new_user_log_lst, 'uid') # 获取首冲日志列表 first_recharge_log_lst = daily_log_dat.filter_logs(new_log_lst, action=game_define.EVENT_ACTION_RECHARGE_PLAYER, function=lambda log: log['old_rmb'] == 0) first_recharge_uid_lst = daily_log_dat.get_set_with_key(first_recharge_log_lst, 'uid') # 新用户首冲 new_user_first_recharge_log_lst = daily_log_dat.filter_logs(new_user_log_lst, action=game_define.EVENT_ACTION_RECHARGE_PLAYER, function=lambda log: log['old_rmb'] == 0) new_user_first_recharge_uid_lst = daily_log_dat.get_set_with_key(new_user_first_recharge_log_lst, 'uid') # 获取所有登录日志 all_login_log_lst = daily_log_dat.filter_logs(new_log_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN) all_login_uid_lst = daily_log_dat.get_set_with_key(all_login_log_lst, 'uid') # 新用户登录日志 all_new_user_login_log_lst = daily_log_dat.filter_logs(new_user_log_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN) all_new_user_login_uid_lst = daily_log_dat.get_set_with_key(all_new_user_login_log_lst, 'uid') # 获取用户的所有VIP字典 uid_vip_dict = dict() uid_month_days_dict = dict() new_user_uid_vip_dict = dict() new_user_uid_month_days_dict = dict() for _uid in all_login_uid_lst: _vip_lv = daily_log_dat.get_max_int_with_key(all_login_log_lst, 'vip_level', function=lambda log: log['uid'] == _uid) _month_card_days = daily_log_dat.get_max_int_with_key(all_login_log_lst, 'month_card_days', function=lambda log: log['uid'] == _uid) uid_vip_dict[_uid] = _vip_lv uid_month_days_dict[_uid] = _month_card_days if _uid in all_new_user_login_uid_lst: new_user_uid_vip_dict[_uid] = _vip_lv new_user_uid_month_days_dict[_uid] = _month_card_days table_lst = [] # 首冲人数 first_recharge_uid_num = len(first_recharge_uid_lst) month_card_num = get_month_user_num(uid_month_days_dict) vip_lst = [] for vip in xrange(13): vip_num = get_vip_user_num(uid_vip_dict, vip) vip_lst.append(vip_num) row = ['总体', first_recharge_uid_num, month_card_num] row.extend(vip_lst) table_lst.append(row) # 新增部分数据 new_user_first_recharge_uid_num = len(new_user_first_recharge_uid_lst) new_user_month_card_num = get_month_user_num(new_user_uid_month_days_dict) new_vip_lst = [] for vip in xrange(13): vip_num = get_vip_user_num(new_user_uid_vip_dict, vip) new_vip_lst.append(vip_num) new_row = ['新增',new_user_first_recharge_uid_num, new_user_month_card_num] new_row.extend(new_vip_lst) table_lst.append(new_row) # 区间新增用户数 new_user_num_row = ['新增角色数'] new_user_num_row.extend([new_user_num] * 15) table_lst.append(new_user_num_row) rate_row = ['比率', get_rate(new_user_first_recharge_uid_num, new_user_num), get_rate(new_user_month_card_num, new_user_num) ] for _vip_num in new_row[3:]: rate_row.append(get_rate(_vip_num, new_user_num)) table_lst.append(rate_row) 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_table(register_star_date, register_end_date, channel_id=-1, server_id=-1): """ 新增K日收益统计 """ # 搜索日期到今天的所有日志 all_log_lst = daily_log_dat.get_new_log_lst(register_star_date, datetime.date.today()) if channel_id >= 0: all_log_lst = daily_log_dat.filter_logs(all_log_lst, function=lambda x: x['platform_id'] == channel_id) if server_id >= 0: all_log_lst = daily_log_dat.filter_logs(all_log_lst, function=lambda x: x['server_id'] == server_id) # 全部充值日志 all_recharge_log_lst = daily_log_dat.filter_logs(all_log_lst, action=game_define.EVENT_ACTION_RECHARGE_PLAYER) row_days = (register_end_date - register_star_date).days table_lst = [] for _day in xrange(row_days): row_date = register_star_date + datetime.timedelta(days=_day) # 获取新用户 row_new_user_uid_lst = daily_log_dat.get_set_with_key(all_log_lst, 'uid',action=game_define.EVENT_ACTION_ROLE_LOGIN, function=lambda log:log['install'] == row_date) # 获取新增设备 new_device_num = daily_log_dat.get_set_num_with_key(all_log_lst, 'dev_id',action=game_define.EVENT_ACTION_ROLE_LOGIN, function=lambda log:log['install'] == row_date) # 获取充值总额 recharge_date = row_date + datetime.timedelta(days=1) total_rmb_1 = daily_log_dat.get_sum_int_with_key(all_recharge_log_lst, 'add_rmb', function=lambda log:log['log_time'].date() == recharge_date and log['uid'] in row_new_user_uid_lst) recharge_date = row_date + datetime.timedelta(days=2) total_rmb_2 = daily_log_dat.get_sum_int_with_key(all_recharge_log_lst, 'add_rmb', function=lambda log:log['log_time'].date() == recharge_date and log['uid'] in row_new_user_uid_lst) recharge_date = row_date + datetime.timedelta(days=3) total_rmb_3 = daily_log_dat.get_sum_int_with_key(all_recharge_log_lst, 'add_rmb', function=lambda log:log['log_time'].date() == recharge_date and log['uid'] in row_new_user_uid_lst) recharge_date = row_date + datetime.timedelta(days=4) total_rmb_4 = daily_log_dat.get_sum_int_with_key(all_recharge_log_lst, 'add_rmb', function=lambda log:log['log_time'].date() == recharge_date and log['uid'] in row_new_user_uid_lst) recharge_date = row_date + datetime.timedelta(days=5) total_rmb_5 = daily_log_dat.get_sum_int_with_key(all_recharge_log_lst, 'add_rmb', function=lambda log:log['log_time'].date() == recharge_date and log['uid'] in row_new_user_uid_lst) recharge_date = row_date + datetime.timedelta(days=6) total_rmb_6 = daily_log_dat.get_sum_int_with_key(all_recharge_log_lst, 'add_rmb', function=lambda log:log['log_time'].date() == recharge_date and log['uid'] in row_new_user_uid_lst) recharge_date_7 = row_date + datetime.timedelta(days=7) total_rmb_7 = daily_log_dat.get_sum_int_with_key(all_recharge_log_lst, 'add_rmb', function=lambda log:log['log_time'].date() == recharge_date_7 and log['uid'] in row_new_user_uid_lst) recharge_date_15 = row_date + datetime.timedelta(days=15) total_rmb_7_15 = daily_log_dat.get_sum_int_with_key(all_recharge_log_lst, 'add_rmb', function=lambda log:recharge_date_7 < log['log_time'].date() <= recharge_date_15 and log['uid'] in row_new_user_uid_lst) recharge_date_30 = row_date + datetime.timedelta(days=30) total_rmb_15_30 = daily_log_dat.get_sum_int_with_key(all_recharge_log_lst, 'add_rmb', function=lambda log:recharge_date_15 < log['log_time'].date() <= recharge_date_30 and log['uid'] in row_new_user_uid_lst) total_rmb_30_up = daily_log_dat.get_sum_int_with_key(all_recharge_log_lst, 'add_rmb', function=lambda log:recharge_date_30 < log['log_time'].date() and log['uid'] in row_new_user_uid_lst) row = [] row.append(row_date.strftime('%Y-%m-%d')) row.append(new_device_num) row.append(total_rmb_1) row.append(total_rmb_2) row.append(total_rmb_3) row.append(total_rmb_4) row.append(total_rmb_5) row.append(total_rmb_6) row.append(total_rmb_7) row.append(total_rmb_7_15) row.append(total_rmb_15_30) row.append(total_rmb_30_up) table_lst.append(row) return table_lst