示例#1
0
def get_gp_parameter(parameter_name):
    json_path = get_setting_cfg().get('path', 'gp_parameter')
    core_num = get_setting_cfg().getint('GP', 'core_num')
    with open(json_path) as f:
        data = json.load(f)
    data[parameter_name]['predictor_parameter'].update({'n_jobs': core_num})
    data[parameter_name]['predictor_parameter'].update({'const_range': (data[parameter_name]['predictor_parameter'].pop(
        'min_const', -1), data[parameter_name]['predictor_parameter'].pop('max_const', 1))})
    return data[parameter_name]
示例#2
0
def convert_list_to_info():
    event_list = get_event_list()
    new_data = {}
    for event in event_list:
        new_data[event['id']] = event
    json_path = get_setting_cfg().get('path', 'event_info')
    with io.open(json_path, 'w+', encoding='utf8') as f:
        json.dump(new_data, f, ensure_ascii=False, indent=4)
示例#3
0
def get_last_rank(event_id):
    if not is_event_has_rank(event_id): return None
    json_path = get_setting_cfg().get('path', 'event_rank')
    data = get_json(json_path)
    rank_list = {rank: data[event_id][rank][-1] for rank in data[event_id]}
    for rank in rank_list:
        rank_list[rank]['summaryTime'] = str_to_datetime(
            rank_list[rank]['summaryTime'])
    return rank_list
示例#4
0
def save_event_list():
    json_path = get_setting_cfg().get('path', 'event_list')
    r = requests.get('{}/events'.format(api_url))
    if r.status_code != 200:
        raise Exception('get event list fail with code:{}'.format(
            r.status_code))
    event_list = r.json()
    with io.open(json_path, 'w+', encoding='utf8') as f:
        json.dump(event_list, f, ensure_ascii=False, indent=4)
    convert_list_to_info()
示例#5
0
def get_pandas_data(event_id, rank_num):
    json_path = get_setting_cfg().get('path', 'event_rank')
    with open(json_path) as f:
        rank_data = json.load(f)
    score_diff_list = []
    time_list = []
    for i in range(1, len(rank_data[event_id][rank_num])):
        rank = rank_data[event_id][rank_num]
        score_diff_list.append(rank[i]['score'] - rank[i - 1]['score'])
        time_list.append(str_to_datetime(rank[i]['summaryTime']))
    return pd.Series(score_diff_list, index=time_list)
示例#6
0
def get_mylogger(log_name):
    config = get_cfg.get_setting_cfg()
    log_path = config.get('log', 'log_path')
    log_file = config.get('log', log_name)
    is_debug = config.getboolean('log', 'is_debug')
    log_file = os.path.join(log_path, log_file)
    my_logger = logging.getLogger(log_name)
    level = logging.INFO
    if is_debug:
        level = logging.DEBUG
    my_logger.setLevel(level)
    return my_logger, level, log_file
示例#7
0
def save_event_info(event_id):
    validate_event_id(event_id)
    json_path = get_setting_cfg().get('path', 'event_info')
    r = requests.get('{}/events/{}'.format(api_url, event_id))
    if r.status_code != 200:
        raise Exception('get event info fail with code:{}'.format(
            r.status_code))
    info = r.json()
    info_list = {}
    if os.path.exists(json_path):
        info_list = get_json(json_path)
    info_list[event_id] = info
    with io.open(json_path, 'w+', encoding='utf8') as f:
        json.dump(info_list, f, ensure_ascii=False, indent=4)
示例#8
0
def save_event_ranking(event_id):
    validate_event_id(event_id)
    rank_num_list = ','.join(get_monitor_rank())
    json_path = get_setting_cfg().get('path', 'event_rank')
    r = requests.get('{}/events/{}/rankings/logs/eventPoint/{}'.format(
        api_url, event_id, rank_num_list))
    if r.status_code != 200:
        raise Exception('get event rank fail with code:{}'.format(
            r.status_code))
    rank_list = r.json()
    new_rank_list = {}
    if os.path.exists(json_path):
        new_rank_list = get_json(json_path)
    new_rank_list[event_id] = {
        rank['rank']: rank['data']
        for rank in rank_list
    }
    with io.open(json_path, 'w+', encoding='utf8') as f:
        json.dump(new_rank_list, f, ensure_ascii=False, indent=4)
示例#9
0
def get_predict_status(event_id):
    return_str = ''
    rank_list = mltd_api.get_monitor_rank()
    info = mltd_api.get_event_info(event_id)
    begin = info['schedule']['beginDate']
    end = info['schedule']['endDate']
    diff = timedelta(minutes=30)
    last_step = int((end - begin) / diff)
    n_step = get_setting_cfg().getint('ARIMA', 'n_step')
    for rank in rank_list:
        predict_value, predictor_info = predict.predict(
            event_id, rank, last_step)
        if predict_value:
            return_str += '下{}個時間點{}名的預測分數\n(預測器根據{}時間點 分數變動幅度:{}產生):\n{}\n{}\n'.format(
                n_step, rank,
                predictor_info['last_time'].strftime("%Y-%m-%d %H:%M:%S"),
                predictor_info['last_score'],
                ', '.join([str(value) for value in predict_value[:n_step]]),
                '最終結果:{}'.format(predict_value[-1]))
    if return_str == '':
        return_str = '無法取得預測值,預測器尚未生成'
    return return_str
示例#10
0
def calculate_speed(event_id, interval):
    if not is_event_has_rank(event_id): return None
    json_path = get_setting_cfg().get('path', 'event_rank')
    data = get_json(json_path)
    speed_dict = {}
    for rank in data[event_id]:
        if len(data[event_id][rank]) >= 2:
            now_score = data[event_id][rank][-1]['score']
            last_score = data[event_id][rank][-2]['score']
            now_time = str_to_ts(data[event_id][rank][-1]['summaryTime'])
            last_time = str_to_ts(data[event_id][rank][-2]['summaryTime'])
            speed = (now_score - last_score) / (now_time - last_time)
        else:
            speed_dict[rank] = speed = 0
        if interval == 'hour':
            speed_dict[rank] = speed * 3600
        elif interval == 'half_hour':
            speed_dict[rank] = speed * 1800
        elif interval == 'quarter_hour':
            speed_dict[rank] = speed * 900
        elif interval == 'min':
            speed_dict[rank] = speed * 60
    return speed_dict
示例#11
0
def get_predictor(train_x, train_y, predictor_parameter_type=get_setting_cfg().get('GP', 'setting')):
    parameter = get_gp_parameter(predictor_parameter_type)
    mltd_predictor = gp.SymbolicRegressor(
        function_set=cf.get_custom_function_list(), **parameter['predictor_parameter'])
    return mltd_predictor.fit(train_x, train_y)
示例#12
0
def get_monitor_rank():
    return get_setting_cfg().get('monitor', 'monitor_rank').split(',')
示例#13
0
def get_event_list():
    return get_json(get_setting_cfg().get('path', 'event_list'))
示例#14
0
def get_event_info(event_id):
    json_path = get_setting_cfg().get('path', 'event_info')
    info = get_json(json_path)[event_id]
    for key in info['schedule']:
        info['schedule'][key] = str_to_datetime(info['schedule'][key])
    return info
示例#15
0
def get_data(event_id, rank_num):
    json_path = get_setting_cfg().get('path', 'event_rank')
    with open(json_path) as f:
        data = json.load(f)
    return [rank['score'] for rank in data[event_id][rank_num]]
示例#16
0
def str_to_datetime(time_str,
                    time_zone=get_setting_cfg().getint('common', 'timezone')):
    dt = parse(time_str)
    local_dt = dt.astimezone(timezone(timedelta(hours=time_zone)))
    return local_dt
示例#17
0
def np_dt_to_dt(np_dt,
                time_zone=get_setting_cfg().getint('common', 'timezone')):
    return (pd.Timestamp(np_dt).to_pydatetime().astimezone(
        timezone(timedelta(hours=time_zone)))) + timedelta(hours=time_zone)