def compute_k_days(_k_days, _to_days=None, compute=None): global ALL_RECHARGE_LOG_LST, ROW_NEW_USER_UID_LST _k_days_total_rmb = [] if "greater" == compute and _k_days: _k_days_total_rmb = daily_log_dat.get_sum_int_with_key(ALL_RECHARGE_LOG_LST, 'add_rmb', function=lambda log: _k_days < log['log_time'].date() and log['uid'] in ROW_NEW_USER_UID_LST) elif _to_days and _k_days and _k_days < _to_days: _k_days_total_rmb = daily_log_dat.get_sum_int_with_key(ALL_RECHARGE_LOG_LST, 'add_rmb', function=lambda log: _k_days < log['log_time'].date() <= _to_days and log['uid'] in ROW_NEW_USER_UID_LST) elif _k_days: _k_days_total_rmb = daily_log_dat.get_sum_int_with_key(ALL_RECHARGE_LOG_LST, 'add_rmb', function=lambda log: log['log_time'].date() == _k_days and log['uid'] in ROW_NEW_USER_UID_LST) return _k_days_total_rmb
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) date_str = "_"+search_date.strftime('%Y%m%d') all_recharge_log_lst = mysql_util.get_role_action_lst('EVENT_ACTION_RECHARGE_PLAYER'+str(date_str),search_date,search_date, channel_id, server_id,None, None) 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) if first_recharge_user_num == 0: continue # 首次充值总金额 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, str(first_recharge_money_rate * 100)+"%", str(first_recharge_user_rate * 100)+"%"] table_lst.append(row) return table_lst
def _get_day_distance_result(desc, recharge_log, first_recharge_log, from_day, to_day=99999): """ 获取行数据 """ #获取 第N天就充值的玩家UID列表 days_recharge_log_lst = daily_log_dat.filter_logs(recharge_log, function=lambda log: from_day <= (log['log_time'].date() - log['install']).days < to_day) days_first_recharge_log_lst = daily_log_dat.filter_logs(first_recharge_log, function=lambda log: from_day <= (log['log_time'].date() - log['install']).days < to_day) # 获取人数 total_user_num = daily_log_dat.get_set_num_with_key(days_recharge_log_lst, 'uid') first_total_user_num = daily_log_dat.get_set_num_with_key(days_first_recharge_log_lst, 'uid') # 获取充值总金额 total_money = daily_log_dat.get_sum_int_with_key(days_recharge_log_lst, 'add_rmb') first_total_money = daily_log_dat.get_sum_int_with_key(days_first_recharge_log_lst, 'add_rmb') # 获取比率 money_rate = _get_money_rate(first_total_money, total_money) user_rate = _get_user_rate(first_total_user_num, total_user_num) return [desc, first_total_user_num, first_total_money, total_user_num, total_money, str((money_rate * 100))+"%", str((user_rate * 100))+"%"]
def compute_k_days(_k_days, _to_days=None, compute=None): global ALL_RECHARGE_LOG_LST, ROW_NEW_USER_UID_LST _k_days_total_rmb = [] if "greater" == compute and _k_days: _k_days_total_rmb = daily_log_dat.get_sum_int_with_key( ALL_RECHARGE_LOG_LST, 'add_rmb', function=lambda log: _k_days < log['log_time'].date() and log[ 'uid'] in ROW_NEW_USER_UID_LST) elif _to_days and _k_days and _k_days < _to_days: _k_days_total_rmb = daily_log_dat.get_sum_int_with_key( ALL_RECHARGE_LOG_LST, 'add_rmb', function=lambda log: _k_days < log['log_time'].date( ) <= _to_days and log['uid'] in ROW_NEW_USER_UID_LST) elif _k_days: _k_days_total_rmb = daily_log_dat.get_sum_int_with_key( ALL_RECHARGE_LOG_LST, 'add_rmb', function=lambda log: log['log_time'].date() == _k_days and log[ 'uid'] in ROW_NEW_USER_UID_LST) return _k_days_total_rmb
def get_table(search_start_date, search_end_date, register_start_date=None, register_end_date=None, server_id=-1): """ 获取展示表格 register_start_date 注册开始时间 register_end_date 注册结束时间 search_start_date 查询开始时间 search_end_date 查询结束时间 """ all_stone_shop_log_lst = dat_log_util.read_file( game_define.EVENT_ACTION_STONE_SHOP_BUY, search_start_date, search_end_date, server_id) # if channel_id >= 0: # all_stone_shop_log_lst = daily_log_dat.filter_logs(all_stone_shop_log_lst, function=lambda x: x['platform_id'] == channel_id) # if server_id >= 0: # all_stone_shop_log_lst = daily_log_dat.filter_logs(all_stone_shop_log_lst, function=lambda x: x['server_id'] == server_id) #获取符合条件的日志 if register_start_date and register_end_date: all_stone_shop_log_lst = daily_log_dat.filter_logs( all_stone_shop_log_lst, function=lambda log: register_start_date <= log[ 'install'] <= register_end_date) # print all_stone_shop_log_lst # 全部钻石商城物品购买日志 # 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_config['name'] # 钻石数 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(all_uid_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, str(take_part_rate * 100) + "%", str(first_cost_stone_rate * 100) + "%" ] table_lst.append(row) return table_lst