def compute_k_days(_k_days, _to_days=None, compute=None):
    global ALL_RECHARGE_LOG_LST, ROW_NEW_USER_UID_LST
    _k_days_total_rmb = []
    if "greater" == compute and _k_days:
        _k_days_total_rmb = daily_log_dat.get_sum_int_with_key(ALL_RECHARGE_LOG_LST, 'add_rmb', function=lambda log: _k_days < log['log_time'].date() and log['uid'] in ROW_NEW_USER_UID_LST)
    elif _to_days and _k_days and _k_days < _to_days:
        _k_days_total_rmb = daily_log_dat.get_sum_int_with_key(ALL_RECHARGE_LOG_LST, 'add_rmb', function=lambda log: _k_days < log['log_time'].date() <= _to_days and log['uid'] in ROW_NEW_USER_UID_LST)
    elif _k_days:
        _k_days_total_rmb = daily_log_dat.get_sum_int_with_key(ALL_RECHARGE_LOG_LST, 'add_rmb', function=lambda log: log['log_time'].date() == _k_days and log['uid'] in ROW_NEW_USER_UID_LST)

    return _k_days_total_rmb
def get_table(search_date, channel_id=-1, server_id=-1):
    """
        角色首次充值等级
    """
    # start_log_time = datetime.datetime.strptime(game_define.LOCAL_LOG_START_DATE, '%Y-%m-%d').date()
    # 全部日志
    # all_log_lst = daily_log_dat.get_new_log_lst(start_log_time, search_date)
    #
    # if channel_id >= 0:
    #     all_log_lst = daily_log_dat.filter_logs(all_log_lst, function=lambda x: x['platform_id'] == channel_id)
    # if server_id >= 0:
    #     all_log_lst = daily_log_dat.filter_logs(all_log_lst, function=lambda x: x['server_id'] == server_id)
    #
    # # 全部充值日志
    # all_recharge_log_lst = daily_log_dat.filter_logs(all_log_lst, action=game_define.EVENT_ACTION_RECHARGE_PLAYER)
    date_str = "_"+search_date.strftime('%Y%m%d')
    all_recharge_log_lst = mysql_util.get_role_action_lst('EVENT_ACTION_RECHARGE_PLAYER'+str(date_str),search_date,search_date, channel_id, server_id,None, None)
    all_first_recharge_log_lst = daily_log_dat.filter_logs(all_recharge_log_lst, function=lambda log:log['old_rmb'] == 0)


    table_lst = []
    for _table_lv in xrange(1, 121):
        # 全部当前等级充值日志
        recharge_lv_log_lst = daily_log_dat.filter_logs(all_recharge_log_lst, function=lambda log: log['level'] == _table_lv)
        # 全部当前等级充值 用户ID列表
        recharge_lv_user_lst = daily_log_dat.get_set_with_key(recharge_lv_log_lst, 'uid')
        # 全部当前等级首次充值日志
        first_recharge_lv_log_lst = daily_log_dat.filter_logs(all_first_recharge_log_lst, function=lambda log: log['level'] == _table_lv)
        # 全部当前等级首次充值 用户ID列表
        first_recharge_lv_user_lst = daily_log_dat.get_set_with_key(first_recharge_lv_log_lst, 'uid')

        # 首次充值人数
        first_recharge_user_num = len(first_recharge_lv_user_lst)
        if first_recharge_user_num == 0:
            continue
        # 首次充值总金额
        first_recharge_total_money = daily_log_dat.get_sum_int_with_key(first_recharge_lv_log_lst, "add_rmb")
        # 总体充值人数
        recharge_user_num = len(recharge_lv_user_lst)
        # 总体充值金额
        recharge_total_money = daily_log_dat.get_sum_int_with_key(recharge_lv_log_lst, "add_rmb")
        # 首次金额占比
        first_recharge_money_rate = get_first_recharge_money_rate(first_recharge_total_money,recharge_total_money)
        # 首次人数占比
        first_recharge_user_rate = get_first_recharge_user_rate(first_recharge_user_num,recharge_user_num)

        row = [_table_lv, first_recharge_user_num, first_recharge_total_money, recharge_user_num, recharge_total_money, str(first_recharge_money_rate * 100)+"%", str(first_recharge_user_rate * 100)+"%"]
        table_lst.append(row)
    return table_lst
Example #3
0
def _get_day_distance_result(desc, recharge_log, first_recharge_log, from_day, to_day=99999):
    """
        获取行数据
    """
    #获取 第N天就充值的玩家UID列表

    days_recharge_log_lst = daily_log_dat.filter_logs(recharge_log, function=lambda log: from_day <= (log['log_time'].date() - log['install']).days < to_day)
    days_first_recharge_log_lst = daily_log_dat.filter_logs(first_recharge_log, function=lambda log: from_day <= (log['log_time'].date() - log['install']).days < to_day)
    # 获取人数
    total_user_num = daily_log_dat.get_set_num_with_key(days_recharge_log_lst, 'uid')
    first_total_user_num = daily_log_dat.get_set_num_with_key(days_first_recharge_log_lst, 'uid')
    # 获取充值总金额
    total_money = daily_log_dat.get_sum_int_with_key(days_recharge_log_lst, 'add_rmb')
    first_total_money = daily_log_dat.get_sum_int_with_key(days_first_recharge_log_lst, 'add_rmb')

    # 获取比率
    money_rate = _get_money_rate(first_total_money, total_money)
    user_rate = _get_user_rate(first_total_user_num, total_user_num)
    return [desc, first_total_user_num, first_total_money, total_user_num, total_money, str((money_rate * 100))+"%", str((user_rate * 100))+"%"]
def compute_k_days(_k_days, _to_days=None, compute=None):
    global ALL_RECHARGE_LOG_LST, ROW_NEW_USER_UID_LST
    _k_days_total_rmb = []
    if "greater" == compute and _k_days:
        _k_days_total_rmb = daily_log_dat.get_sum_int_with_key(
            ALL_RECHARGE_LOG_LST,
            'add_rmb',
            function=lambda log: _k_days < log['log_time'].date() and log[
                'uid'] in ROW_NEW_USER_UID_LST)
    elif _to_days and _k_days and _k_days < _to_days:
        _k_days_total_rmb = daily_log_dat.get_sum_int_with_key(
            ALL_RECHARGE_LOG_LST,
            'add_rmb',
            function=lambda log: _k_days < log['log_time'].date(
            ) <= _to_days and log['uid'] in ROW_NEW_USER_UID_LST)
    elif _k_days:
        _k_days_total_rmb = daily_log_dat.get_sum_int_with_key(
            ALL_RECHARGE_LOG_LST,
            'add_rmb',
            function=lambda log: log['log_time'].date() == _k_days and log[
                'uid'] in ROW_NEW_USER_UID_LST)

    return _k_days_total_rmb
Example #5
0
def get_table(search_start_date,
              search_end_date,
              register_start_date=None,
              register_end_date=None,
              server_id=-1):
    """
        获取展示表格
        register_start_date 注册开始时间
        register_end_date 注册结束时间
        search_start_date 查询开始时间
        search_end_date 查询结束时间
    """
    all_stone_shop_log_lst = dat_log_util.read_file(
        game_define.EVENT_ACTION_STONE_SHOP_BUY, search_start_date,
        search_end_date, server_id)
    # if channel_id >= 0:
    #     all_stone_shop_log_lst = daily_log_dat.filter_logs(all_stone_shop_log_lst, function=lambda x: x['platform_id'] == channel_id)
    # if server_id >= 0:
    #     all_stone_shop_log_lst = daily_log_dat.filter_logs(all_stone_shop_log_lst, function=lambda x: x['server_id'] == server_id)

    #获取符合条件的日志
    if register_start_date and register_end_date:
        all_stone_shop_log_lst = daily_log_dat.filter_logs(
            all_stone_shop_log_lst,
            function=lambda log: register_start_date <= log[
                'install'] <= register_end_date)
    # print all_stone_shop_log_lst
    # 全部钻石商城物品购买日志
    # print("all_stone_shop_log_lst: "+str(all_stone_shop_log_lst))
    # 获取所有钻石商城物品玩家设备
    # device_lst = daily_log_dat.get_set_with_key(all_stone_shop_log_lst, 'dev_id')

    # 获取所有钻石商城物品购买日志玩家UID
    all_uid_lst = daily_log_dat.get_set_with_key(all_stone_shop_log_lst, 'uid')

    # 消耗钻石总数
    total_cost_stone = daily_log_dat.get_sum_int_with_key(
        all_stone_shop_log_lst, 'cost_stone')

    # 根据ID拆分日志
    item_logs_dict = dict()
    for _log in all_stone_shop_log_lst:
        _item_info = _log['add_item_list']
        _item_tid = _item_info[0]

        if _item_tid in item_logs_dict:
            item_logs_dict[_item_tid].append(_log)
        else:
            lst = [_log]
            item_logs_dict[_item_tid] = lst

    table_lst = []
    for _item_tid, _log in item_logs_dict.items():

        user_num = daily_log_dat.get_set_num_with_key(_log, 'uid')
        # 购买物品
        item_config = game_config.get_item_config(int(_item_tid))

        event_log_act = item_config['name']
        # 钻石数
        cost_stone = daily_log_dat.get_sum_int_with_key(_log, 'cost_stone')
        # 次数
        cost_num = len(_log)
        # 参与率
        take_part_rate = _get_rate(user_num, len(all_uid_lst))
        # 钻石比率
        first_cost_stone_rate = _get_rate(cost_stone, total_cost_stone)
        # 人数比率
        # cur_user_num_rate = _get_rate(user_num, len(all_uid_lst))

        row = [
            event_log_act, cost_stone, user_num, cost_num,
            str(take_part_rate * 100) + "%",
            str(first_cost_stone_rate * 100) + "%"
        ]
        table_lst.append(row)

    return table_lst