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): """ 获取展示表格 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): """ 获取展示表格 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): """ 获取展示表格 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_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, 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