def main(): # 予想したい日の日付けを設定 target_date = None _day = dt.now() # まずはコマンドライン引数による指定がない場合を想定 if _day.hour >= 10: # この時刻を過ぎると、翌日の予想を実施する _day += td(days=1) target_date = dt(year=_day.year, month=_day.month, day=_day.day) argvs = sys.argv # コマンドライン引数を格納したリストの取得 argc = len(argvs) # 引数の個数 if argc >= 2: # 引数で計算対象の日を渡す arg = argvs[1] arg += " 0:0:0" # 時分秒を加える t = timeKM.getTime(arg) if t != None: target_date = t print(target_date) # 予測を実行する時刻を決定する(引数がなければスクリプト実行時の時刻が使われる) process_hour = dt.now().hour if argc >= 3: # 引数で予想実行時刻を渡す(その時刻に雲海が出るかを確認するものではない) arg = argvs[2] if arg.isdigit(): process_hour = int(arg) # アメダスの観測所オブジェクトを作成 amedas_nodes = amd.get_amedas_nodes() #print(amedas_nodes) # 観測データを読み出す #node_A = amedas_nodes["阿蘇山"] node_A = amedas_nodes["熊本"] # 2015-09の噴火で阿蘇山頂のデータが得られないので、熊本に差し替え lines_A = get_amedas_data(node_A, target_date) node_B = amedas_nodes["阿蘇乙姫"] lines_B = get_amedas_data(node_B, target_date) # 観測データを処理して、特徴量の生成に適したオブジェクトに変更 weather_data_A = feature.get_weather_dict(lines_A) weather_data_B = feature.get_weather_dict(lines_B) raw_data = [weather_data_A, weather_data_B] #print(weather_data_Aso) #print(weather_data_Otohime) # 機械学習オブジェクトを生成 clf = ml() if 23 > process_hour >= 16: with open('entry_16.pickle', 'rb') as f: clf = pickle.load(f) # オブジェクト復元 else: with open('entry_23.pickle', 'rb') as f: clf = pickle.load(f) # オブジェクト復元 # 特徴ベクトルを生成 _feature = None if 23 > process_hour >= 16: _feature = feature.create_feature16(target_date, raw_data) else: _feature = feature.create_feature23(target_date, raw_data) print(_feature) # 予測を実施 print("--predict--") print("target date: " + str(target_date)) print("process hur: " + str(process_hour)) done = False results = [] if _feature != None: if not None in _feature: # Noneがあると計算出来ない test = clf.predict(_feature) results.append((target_date, test[0], _feature)) print(test) done = True if done == False: results.append((target_date, "NA", _feature)) print("--can't predict. There is None data in feature-vector.--") # 予測結果を保存 with open("result.csv", "w") as fw: for result in results: _date, predict_result, _feature = result str_feature = [str(x) for x in _feature] fw.write(str(dt.now())) fw.write(",") fw.write(str(_date)) fw.write(",") fw.write(str(predict_result)) fw.write(",") fw.write("$") fw.write(",") fw.write(",".join(str_feature)) fw.write("\n") return results
def main(): # 予想したい日の日付けを設定 target_date = None _day = dt.now() # まずはコマンドライン引数による指定がない場合を想定 if _day.hour >= 10: # この時刻を過ぎると、翌日の予想を実施する _day += td(days=1) target_date = dt(year=_day.year, month=_day.month, day=_day.day) argvs = sys.argv # コマンドライン引数を格納したリストの取得 argc = len(argvs) # 引数の個数 if argc >= 2: # 引数で計算対象の日を渡す arg = argvs[1] arg += " 0:0:0" # 時分秒を加える t = timeKM.getTime(arg) if t != None: target_date = t print(target_date) # 予測を実行する時刻を決定する(引数がなければスクリプト実行時の時刻が使われる) process_hour = dt.now().hour if argc >= 3: # 引数で予想実行時刻を渡す(その時刻に雲海が出るかを確認するものではない) arg = argvs[2] if arg.isdigit(): process_hour = int(arg) # 予報する対象の時刻 target_time = 23 if 23 > process_hour >= 16: target_time = 16 # アメダスの観測所オブジェクトを作成 amedas_nodes = amd.get_amedas_nodes() #print(amedas_nodes) # 特徴ベクトルを生成するオブジェクトの用意 features_dict = {} for block_no in ["47819", "1240", "0962", "47818"]: node = amedas_nodes[block_no] lines = get_amedas_data(node, target_date) weather_data = feature.get_weather_dict(lines) _keys = sorted(weather_data.keys()) # 確認のために表示 for a_key in _keys: print(block_no, weather_data[a_key]) if int(node.block_no) > 47000: features_dict[block_no] = [weather_data, feature.index_A] else: features_dict[block_no] = [weather_data, feature.index_B] fg_obj = feature.feature_generator(target_time, features_dict) # 機械学習オブジェクトを生成 clf = mc.load(os.path.abspath("./learned_machine/time" + str(target_time))) print(type(clf)) # 特徴ベクトルを生成 _feature = fg_obj.get_feature(target_date) _feature = np.array([_feature]) # TensorFlowはnumpy.arrayの2重の入れ子でないと動かない print(_feature) # 予測を実施 print("--predict--") print("target date: " + str(target_date)) print("process hur: " + str(process_hour)) results = [] #if _feature != None: #if not None in _feature: # Noneがあると計算出来ない test = clf.predict(_feature) results.append((target_date, test[0], _feature)) print(test) # 予測結果を保存 with open("result.csv", "w") as fw: for result in results: _date, predict_result, _feature = result str_feature = [str(x) for x in _feature] fw.write(str(dt.now())) fw.write(",") fw.write(str(_date)) fw.write(",") fw.write(str(predict_result)) fw.write(",") fw.write("$") fw.write(",") fw.write(",".join(str_feature)) fw.write("\n") return results