def get_table(search_date, register_start_date=None, register_end_date=None, channel_id=-1, server_id=-1):
    """
        获取各等级充值状况表格
    """
    # 获取搜索区间日志
    # 本地写入的开始日期
    log_start_date = datetime.datetime.strptime(game_define.LOCAL_LOG_START_DATE, '%Y-%m-%d').date()
    new_log_lst = daily_log_dat.get_new_log_lst(log_start_date, search_date)

    if channel_id >= 0:
        new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda x: x['platform_id'] == channel_id)
    if server_id >= 0:
        new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda x: x['server_id'] == server_id)


    #获取符合条件的日志
    if register_start_date and register_end_date:
        recharge_log_lst = daily_log_dat.filter_logs(new_log_lst, action=game_define.EVENT_ACTION_RECHARGE_PLAYER, function=lambda log: register_start_date <= log['install'] <= register_end_date)
    else:
        recharge_log_lst = daily_log_dat.filter_logs(new_log_lst, action=game_define.EVENT_ACTION_RECHARGE_PLAYER)

    # 获取所有充值玩家UID
    all_uid_log_lst = daily_log_dat.get_set_with_key(recharge_log_lst, 'uid')

    # 获取全部玩家当前等级
    uid_level_dict = dict()
    for _uid in all_uid_log_lst:
        uid_level_dict[_uid] = daily_log_dat.get_max_int_with_key(new_log_lst, 'level', function=lambda log:log['uid'] == _uid)

    # print("uid_level_dict " + str(uid_level_dict))

    # 获取全部玩家最后登录间隔天数
    uid_last_login_distance = dict()
    for _uid in all_uid_log_lst:
        # 获取玩家最后登录日志
        _user_login_logs = daily_log_dat.filter_logs(new_log_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN, function=lambda log:log['uid'] == _uid)
        if _user_login_logs:
            last_login_log = _user_login_logs[0]
            for _log in _user_login_logs:
                if _log['log_time'] > last_login_log['log_time']:
                    last_login_log = _log
            # 计算距离搜索日的日期
            last_login_dis_day = (search_date - last_login_log['log_time'].date()).days  # 最后登录间隔日期
        else:
            last_login_dis_day = 300
        # 记录
        uid_last_login_distance[_uid] = last_login_dis_day

    # 获取所有等级停留人数
    table_row_lst = []
    for _table_lv in xrange(1, 121):
        level_uid_lst = _get_level_uid_lst(_table_lv, uid_level_dict)
        lost_uid_lst = daily_log_dat.get_lost_user_set(level_uid_lst, search_date)
        arrive_uid_lst = _get_arrive_level_uid_lst(_table_lv, uid_level_dict)
        level_recharge_lst = daily_log_dat.get_recharge_lst_with_user_level(recharge_log_lst, _table_lv)
        recharge_uid_lst = daily_log_dat.get_user_uid_lst(level_recharge_lst)
        # 停留人数
        user_num = len(level_uid_lst)
        # 流失人数
        lost_num = len(lost_uid_lst)
        # 留存人数
        stand_num = user_num - lost_num
        # 到达等级人数
        arrive_num = len(arrive_uid_lst)
        # 充值金额
        recharge_money = daily_log_dat.get_recharge_total_money(level_recharge_lst)
        # 充值次数
        recharge_num = len(level_recharge_lst)
        # 充值人数
        recharge_user_num = len(recharge_uid_lst)
        # 等级付费率
        level_pay_rate = _get_level_pay_rate(recharge_user_num, arrive_num)
        # 等级流失率 流失人数/到达人数
        level_lost_rate = _get_level_lost_rate(lost_num, arrive_num)

        content = [_table_lv, user_num, lost_num, stand_num, arrive_num, recharge_money, recharge_num, recharge_user_num, level_pay_rate, level_lost_rate]
        table_row_lst.append(content)

    return table_row_lst
def get_table(search_start_date, search_end_date, channel_id=-1, server_id=-1):
    """
        获取展示表格
        register_start_date 注册开始时间
        register_end_date 注册结束时间
        search_start_date 查询开始时间
        search_end_date 查询结束时间
    """

    # 获取搜索区间日志
    new_log_lst = daily_log_dat.get_new_log_lst(search_start_date, search_end_date)

    if channel_id >= 0:
        new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda x: x['platform_id'] == channel_id)
    if server_id >= 0:
        new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda x: x['server_id'] == server_id)

    new_user_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda log: search_start_date <= log['install'] <= search_end_date)
    # 新用户数量
    new_user_num = daily_log_dat.get_set_num_with_key(new_user_log_lst, 'uid')
    # 获取首冲日志列表
    first_recharge_log_lst = daily_log_dat.filter_logs(new_log_lst, action=game_define.EVENT_ACTION_RECHARGE_PLAYER, function=lambda log: log['old_rmb'] == 0)
    first_recharge_uid_lst = daily_log_dat.get_set_with_key(first_recharge_log_lst, 'uid')
    # 新用户首冲
    new_user_first_recharge_log_lst = daily_log_dat.filter_logs(new_user_log_lst, action=game_define.EVENT_ACTION_RECHARGE_PLAYER, function=lambda log: log['old_rmb'] == 0)
    new_user_first_recharge_uid_lst = daily_log_dat.get_set_with_key(new_user_first_recharge_log_lst, 'uid')
    # 获取所有登录日志
    all_login_log_lst = daily_log_dat.filter_logs(new_log_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN)
    all_login_uid_lst = daily_log_dat.get_set_with_key(all_login_log_lst, 'uid')

    # 新用户登录日志
    all_new_user_login_log_lst = daily_log_dat.filter_logs(new_user_log_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN)
    all_new_user_login_uid_lst = daily_log_dat.get_set_with_key(all_new_user_login_log_lst, 'uid')

    # 获取用户的所有VIP字典
    uid_vip_dict = dict()
    uid_month_days_dict = dict()
    new_user_uid_vip_dict = dict()
    new_user_uid_month_days_dict = dict()

    for _uid in all_login_uid_lst:
        _vip_lv = daily_log_dat.get_max_int_with_key(all_login_log_lst, 'vip_level', function=lambda log: log['uid'] == _uid)
        _month_card_days = daily_log_dat.get_max_int_with_key(all_login_log_lst, 'month_card_days', function=lambda log: log['uid'] == _uid)
        uid_vip_dict[_uid] = _vip_lv
        uid_month_days_dict[_uid] = _month_card_days
        if _uid in all_new_user_login_uid_lst:
            new_user_uid_vip_dict[_uid] = _vip_lv
            new_user_uid_month_days_dict[_uid] = _month_card_days

    table_lst = []

    # 首冲人数
    first_recharge_uid_num = len(first_recharge_uid_lst)
    month_card_num = get_month_user_num(uid_month_days_dict)
    vip_lst = []
    for vip in xrange(13):
        vip_num = get_vip_user_num(uid_vip_dict, vip)
        vip_lst.append(vip_num)

    row = ['总体', first_recharge_uid_num, month_card_num]
    row.extend(vip_lst)

    table_lst.append(row)

    # 新增部分数据
    new_user_first_recharge_uid_num = len(new_user_first_recharge_uid_lst)
    new_user_month_card_num = get_month_user_num(new_user_uid_month_days_dict)
    new_vip_lst = []
    for vip in xrange(13):
        vip_num = get_vip_user_num(new_user_uid_vip_dict, vip)
        new_vip_lst.append(vip_num)


    new_row = ['新增',new_user_first_recharge_uid_num, new_user_month_card_num]
    new_row.extend(new_vip_lst)
    table_lst.append(new_row)

    # 区间新增用户数
    new_user_num_row = ['新增角色数']
    new_user_num_row.extend([new_user_num] * 15)

    table_lst.append(new_user_num_row)

    rate_row = ['比率', get_rate(new_user_first_recharge_uid_num, new_user_num), get_rate(new_user_month_card_num, new_user_num) ]
    for _vip_num in new_row[3:]:
        rate_row.append(get_rate(_vip_num, new_user_num))
    table_lst.append(rate_row)

    return table_lst
Example #3
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
def get_table(search_start_date,
              search_end_date,
              register_start_date=None,
              register_end_date=None,
              channel_id=-1,
              server_id=-1):
    """
        获取展示表格
        register_start_date 注册开始时间
        register_end_date 注册结束时间
        search_start_date 查询开始时间
        search_end_date 查询结束时间
    """
    # 获取搜索区间日志
    new_log_lst = daily_log_dat.get_new_log_lst(search_start_date,
                                                search_end_date)

    if channel_id >= 0:
        new_log_lst = daily_log_dat.filter_logs(
            new_log_lst, function=lambda x: x['platform_id'] == channel_id)
    if server_id >= 0:
        new_log_lst = daily_log_dat.filter_logs(
            new_log_lst, function=lambda x: x['server_id'] == server_id)
    #获取符合条件的日志
    if register_start_date and register_end_date:
        new_log_lst = daily_log_dat.filter_logs(
            new_log_lst,
            function=lambda log: register_start_date <= log[
                'install'] <= register_end_date)

    # 获取新增用户部分日志
    all_login_lst = daily_log_dat.filter_logs(
        new_log_lst, action=game_define.EVENT_ACTION_ROLE_LOGIN)
    all_uid_log_lst = daily_log_dat.get_set_with_key(all_login_lst, 'uid')

    # 获取全部玩家最后登录间隔天数
    uid_level_dict = dict()
    for _uid in all_uid_log_lst:
        uid_level_dict[_uid] = daily_log_dat.get_max_int_with_key(
            all_login_lst, 'level', function=lambda x: x['uid'] == _uid)

    # 获取全部玩家最后登录间隔天数
    uid_last_login_distance = dict()
    for _uid in all_uid_log_lst:
        # 获取玩家最后登录日志
        _user_login_logs = daily_log_dat.filter_logs(
            new_log_lst,
            action=game_define.EVENT_ACTION_ROLE_LOGIN,
            function=lambda log: log['uid'] == _uid)
        if _user_login_logs:
            last_login_log = _user_login_logs[0]
            for _log in _user_login_logs:
                if _log['log_time'] > last_login_log['log_time']:
                    last_login_log = _log
            # 计算距离搜索日的日期
            last_login_dis_day = (
                search_end_date -
                last_login_log['log_time'].date()).days  # 最后登录间隔日期
        else:
            last_login_dis_day = 300
        # 记录
        uid_last_login_distance[_uid] = last_login_dis_day

    # 遍历全部等级
    table_row_lst = []
    for _table_lv in xrange(1, 121):
        level_uid_lst = _get_level_uid_lst(_table_lv, uid_level_dict)
        lost_uid_lst = daily_log_dat.get_lost_user_set(new_log_lst,
                                                       search_end_date)
        arrive_uid_lst = _get_arrive_level_uid_lst(_table_lv, uid_level_dict)

        # 停留人数
        user_num = len(level_uid_lst)
        # 流失人数
        lost_num = len(lost_uid_lst)
        # 留存人数
        stand_num = user_num - lost_num
        # 到达等级人数
        arrive_num = len(arrive_uid_lst)
        # 等级流失率
        level_lost_rate = _get_level_lost_rate(lost_num, arrive_num)
        # 等级	停留人数	留存人数	流失人数	到达人数	等级流失率
        content = [
            _table_lv, user_num, stand_num, lost_num, arrive_num,
            level_lost_rate
        ]
        table_row_lst.append(content)

    return table_row_lst
def get_table(
    search_start_date,
    search_end_date,
    register_start_date=None,
    register_end_date=None,
    channel_id=-1,
    server_id=-1,
    player_min_lv=1,
    player_max_lv=120,
):
    """
        获取展示表格
        register_start_date 注册开始时间
        register_end_date 注册结束时间
        search_start_date 查询开始时间
        search_end_date 查询结束时间
    """
    new_log_lst = daily_log_dat.get_new_log_lst(search_start_date, search_end_date)

    if channel_id >= 0:
        new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda x: x["platform_id"] == channel_id)
    if server_id >= 0:
        new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda x: x["server_id"] == server_id)
    # 获取符合条件的日志
    if register_start_date and register_end_date:
        new_log_lst = daily_log_dat.filter_logs(
            new_log_lst, function=lambda log: register_start_date <= log["install"] <= register_end_date
        )

    # 获取日期数
    search_days = (search_end_date - search_start_date).days
    table_result = []
    for i in xrange(search_days + 1):
        cur_date = search_start_date + datetime.timedelta(days=i)

        # 今日全部登录日志
        today_login_lst = daily_log_dat.filter_logs(
            new_log_lst,
            action=game_define.EVENT_ACTION_ROLE_LOGIN,
            function=lambda log: log["log_time"].date() == cur_date,
        )
        ##
        # 昨天全部登陆日志
        yesterday_login_lst = daily_log_dat.filter_logs(
            yesterday_login_lst,
            action=game_define.EVENT_ACTION_ROLE_LOGIN,
            function=lambda log: log["log_time"].date() == cur_date - 1,
        )
        ##

        # 用户uid列表
        today_login_uid_lst = daily_log_dat.get_set_with_key(today_login_lst, "uid")
        today_new_user_uid_lst = daily_log_dat.get_set_with_key(
            today_login_lst, "uid", function=lambda log: log["install"] == cur_date
        )

        # 获取用户当前等级字典
        uid_level_dict = dict()
        for _uid in today_login_uid_lst:
            _lv = daily_log_dat.get_max_int_with_key(today_login_lst, "level", function=lambda log: log["uid"] == _uid)
            uid_level_dict[_uid] = _lv

        # 登录用户数
        today_login_uid_num = len(today_login_uid_lst)
        # 新增用户数
        today_new_uid_num = len(today_new_user_uid_lst)
        # 等级用户数
        level_user_num_lst = []
        for _lv in xrange(player_min_lv, player_max_lv + 1):
            user_num = get_level_user_num(uid_level_dict, _lv)
            level_user_num_lst.append(user_num)

        row = [cur_date.strftime("%Y-%m-%d"), today_login_uid_num, today_new_uid_num]
        row.extend(level_user_num_lst)
        table_result.append(row)

    return table_result
Example #6
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