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]
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)
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
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()
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)
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
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)
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)
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
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
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)
def get_monitor_rank(): return get_setting_cfg().get('monitor', 'monitor_rank').split(',')
def get_event_list(): return get_json(get_setting_cfg().get('path', 'event_list'))
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
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]]
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
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)