コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
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
コード例 #4
0
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
コード例 #5
0
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
コード例 #6
0
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
コード例 #7
0
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
コード例 #8
0
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