Пример #1
0
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
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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
Пример #6
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
Пример #7
0
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
Пример #8
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_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
Пример #9
0
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
Пример #10
0
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
Пример #11
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
Пример #12
0
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
Пример #13
0
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
Пример #15
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_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
Пример #18
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
Пример #19
0
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
Пример #20
0
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
Пример #22
0
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
Пример #23
0
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
Пример #25
0
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
Пример #26
0
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
Пример #27
0
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
Пример #28
0
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
Пример #30
0
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
Пример #31
0
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
Пример #32
0
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
Пример #33
0
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
Пример #34
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)

    # 获取新增用户部分日志
    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
Пример #35
0
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
Пример #36
0
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
Пример #37
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
Пример #38
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)

    # 获取所有钻石消耗的日志
    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
Пример #39
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)
    # 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
Пример #40
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
Пример #41
0
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
Пример #42
0
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
Пример #45
0
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
Пример #46
0
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
Пример #47
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
Пример #48
0
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