def predict(code, start, end): test_data = cnn_data_generater.generate_predict_data(code, start, end) model = cnn.load_model(model_path, code) predicted = model.predict(test_data, verbose=1) predicted = list(map(lambda n: n[0], predicted)) data = data_processor.load_data(data_path + str(code) + ".csv", start, end) data = data_processor.divide(data, DATA_PERIOD, 0) base_price = list( map(lambda n: n[DATA_PERIOD - 1], list(map(lambda n: n['CLOSE'].tolist(), data)))) date = list( map( lambda n: (datetime.strptime(n[DATA_PERIOD - 1], "%Y-%m-%d") + timedelta(days=DATA_DURATION)).strftime("%Y-%m-%d"), list(map(lambda n: n['DATE'].tolist(), data)))) df = pd.DataFrame({ 'date': date, 'predict': predicted, 'base_price': base_price }) df.to_csv("result.csv", index=False) fig = (df.plot()).get_figure() fig.savefig('../figure.png', dpi=600)
def test(code, start, end): test_data = cnn_data_generater.generate_input_data(code, start, end) model = cnn.load_model(model_path, code) predicted = model.predict(test_data, verbose=1) predicted = list(map(lambda n: n[0], predicted)) data = data_processor.load_data(data_path + str(code) + ".csv", start, end) data = data_processor.divide(data, DATA_PERIOD + DATA_DURATION, 1) base_price = list( map(lambda n: n[DATA_PERIOD - 1], list(map(lambda n: n['CLOSE'].tolist(), data)))) acual_price = list( map(lambda n: n[DATA_PERIOD + DATA_DURATION - 1], list(map(lambda n: n['CLOSE'].tolist(), data)))) date = list( map(lambda n: n[DATA_PERIOD + DATA_DURATION - 1], list(map(lambda n: n['DATE'].tolist(), data)))) df = pd.DataFrame({ 'date': date, 'predict': predicted, 'base_price': base_price, 'acual_price': acual_price }) df.to_csv("result.csv", index=False)
def generate_output_data(code, start, end): data = data_processor.load_data(data_path + str(code) + ".csv", start, end) data = data_processor.divide(data, DATA_PERIOD + DATA_DURATION, 1) output_data = np.array( list( map( lambda n: n[DATA_PERIOD + DATA_DURATION - 1] / n[DATA_PERIOD - 1], list(map(lambda n: n['CLOSE'].tolist(), data))))).reshape(len(data), 1) return output_data
def generate_input_data(code, start, end): data = data_processor.load_data(data_path + str(code) + ".csv", start, end) data = data_processor.divide(data, DATA_PERIOD + DATA_DURATION, 1) value_data = list( map(lambda n: n.loc[:, ['CLOSE', 'OPEN', 'HIGH', 'LOW']].values, data)) value_data = list(map(lambda n: n[:DATA_PERIOD], value_data)) value_data = data_processor.normarize2D(np.array(value_data)) volume_data = list(map(lambda n: n['VOLUME'].tolist(), data)) volume_data = list(map(lambda n: data_processor.normarize(n), volume_data)) for i in range(len(value_data)): for j in range(len(value_data[i])): value_data[i][j].append(volume_data[i][j]) value_data = np.array(value_data).reshape(len(value_data), DATA_PERIOD, 5) return value_data
import pandas as pd import numpy as np from keras.models import model_from_json import lstm import data_processor code = 7203 start = "2014/01/01" end = "2016/12/31" data_path = "data/" result_path = "result/" DATA_PERIOD = 20 data = data_processor.load_data(data_path + str(code) + ".csv", start, end) data = data_processor.divide(data_processor.rate(data['CLOSE'].tolist()), DATA_PERIOD + 1) test_data = np.array(list(map(lambda n: n[:DATA_PERIOD], data))).reshape(len(data), DATA_PERIOD, 1) print(test_data) model = lstm.load_model(result_path, code) predicted = model.predict(test_data, verbose=1) print(predicted)