Holen Sie sich über CSV-Daten von Nikkei durchschnittlichen Aktienkurs und speichern Sie es.
#Code beim Lesen von csv
import pandas as pd
from io import StringIO
import urllib
def read_csv(url):
res = urllib.request.urlopen(url)
res=res.read().decode('shift_jis')
df = pd.read_csv(StringIO( res) )
return df
#Erfassung von Zeitreihendaten des durchschnittlichen Aktienkurses von Nikkei
import pandas as pd
from io import StringIO
import urllib
#Mit der obigen Funktion erhalten Sie Zeitreihendaten des durchschnittlichen Aktienkurses von Nikkei
url = "https://indexes.nikkei.co.jp/nkave/historical/nikkei_stock_average_daily_jp.csv"
def read_csv(url):
res = urllib.request.urlopen(url)
res = res.read().decode('shift_jis')
df = pd.read_csv(StringIO(res))
#Ich entferne die letzte Zeile, die ich nicht brauche
df = df.drop(df.shape[0]-1)
return df
#Speichern Sie in einem Datenrahmen namens df und geben Sie ihn aus
df = read_csv(url)
#Ausgabe
df
Machen Sie Vorhersagen, indem Sie sich auf den Schlusskurs von Zeitreihendaten konzentrieren.
#Erfassung von Zeitreihendaten Teil 1,Der Erfassungscode der Zeitreihendaten des durchschnittlichen Nikkei-Aktienkurses wird veröffentlicht.
#Nachdem Sie den Index zu einem Datum gemacht haben, machen Sie ihn zu einer Zeitreihe
df["Daten Datum"] = pd.to_datetime(df["Daten Datum"], format='%Y/%m/%d')
df = df.set_index('Daten Datum')
#Aus der Spalte'Offener Preis', 'Hoher Preis', 'Niedriger Preis'Entfernen und nach Datum sortieren
df = df.drop(['Offener Preis', 'Hoher Preis', 'Niedriger Preis'], axis=1)
df = df.sort_index(ascending=True)
df
import pandas as pd
#df und df_Verbinden Sie die beiden Tweets mit dem Index als Schlüssel und löschen Sie Nan
df_tweets = pd.read_csv('./6050_stock_price_prediction_data/df_tweets.csv', index_col='date')
table = df_tweets.join(df, how='right').dropna()
# table.Ausgabe als csv
table.to_csv("./6050_stock_price_prediction_data/table.csv")
table
Wie in [Python: Aktienkursprognose (1)] erläutert (https://qiita.com/savaniased/items/fa781f3eac2c0fa8f225) Dieses Mal werden wir technische Analysen verwenden, um den Aktienkurs vorherzusagen.
Charakterisiert durch Änderungen des durchschnittlichen Nikkei-Aktienkurses in den letzten drei Tagen und Änderungen des PN-Werts Prognostizieren Sie die Höhen und Tiefen des Aktienkurses am nächsten Tag.
Nach Aufteilung in Trainingsdaten und Testdaten und Standardisierung der Trainingsdaten werden die Testdaten anhand des Durchschnitts und der Verteilung der Trainingsdaten standardisiert.
#Grundvorlage
from sklearn.model_selection import train_test_split
X = table.values[:, 0]
y = table.values[:, 1]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0, shuffle=False)
X_train_std = (X_train - X_train.mean()) / X_train.std()
X_test_std = (X_test - X_train.mean()) / X_train.std()
#Erstellung von Trainingsdaten
from sklearn.model_selection import train_test_split
X = table.values[:, 0]
y = table.values[:, 1]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0, shuffle=False)
X_train_std = (X_train - X_train.mean()) / X_train.std()
X_test_std = (X_test - X_train.mean()) / X_train.std()
# df_Erstellen Sie eine Tabelle mit dem Namen train, setzen Sie den Index auf Datum, den Spaltennamen auf pn und den Wert nahe auf df_train.Ausgabe im Datenordner mit dem Namen csv
df_train = pd.DataFrame(
{'pn': X_train_std,
'Schlusskurs': y_train},
columns=['pn', 'Schlusskurs'],
index=table.index[:len(X_train_std)])
df_train.to_csv('./6050_stock_price_prediction_data/df_train.csv')
#Ähnlich für Testdaten, df_Erstellen Sie eine Tabelle mit dem Namen test und df_test.Ausgabe im Datenordner mit dem Namen csv
df_test = pd.DataFrame(
{'pn': X_test_std,
'Schlusskurs': y_test},
columns=['pn', 'Schlusskurs'],
index=table.index[len(X_train_std):])
df_test.to_csv('./6050_stock_price_prediction_data/df_test.csv')
#Zuallererst df_train.Lesen Sie csv und zeigen Sie Änderungen des PN-Werts und des Aktienkurses an.
# pn.rates_diff, exchange_rates_Sehen Sie sich das Diff an, um einen Überblick über das obige Programm zu erhalten.
rates_fd = open('./6050_stock_price_prediction_data/df_train.csv', 'r')
rates_fd.readline() #Jede Zeile wird bis zum Ende der Datei gelesen.
next(rates_fd) #Die erste Zeile wird übersprungen.
exchange_dates = []
pn_rates = []
pn_rates_diff = []
exchange_rates = []
exchange_rates_diff = []
prev_pn = df_train['pn'][0]
prev_exch = df_train['Schlusskurs'][0]
for line in rates_fd:
splited = line.split(",")
time = splited[0] # table.Datum der ersten Spalte von csv
pn_val = float(splited[1]) # table.2. Spalte PN-Wert von csv
exch_val = float(splited[2]) # table.Schlusskurs der dritten Spalte Aktienkurs von CSV
exchange_dates.append(time) #Datum
pn_rates.append(pn_val)
pn_rates_diff.append(pn_val - prev_pn) #Änderung des PN-Wertes
exchange_rates.append(exch_val)
exchange_rates_diff.append(exch_val - prev_exch) #Änderungen der Aktienkurse
prev_pn = pn_val
prev_exch = exch_val
rates_fd.close()
print(pn_rates_diff)
print(exchange_rates_diff)
#Lassen Sie uns alle 3 Tage die Änderung des PN-Werts und des Aktienkurses anzeigen.
import numpy as np
INPUT_LEN = 3
data_len = len(pn_rates_diff)
tr_input_mat = []
tr_angle_mat = []
for i in range(INPUT_LEN, data_len):
tmp_arr = []
for j in range(INPUT_LEN):
tmp_arr.append(exchange_rates_diff[i-INPUT_LEN+j])
tmp_arr.append(pn_rates_diff[i-INPUT_LEN+j])
tr_input_mat.append(tmp_arr) #Änderungen der Aktienkurse und negativ / positiv für die letzten 3 Tage am Tag i
if exchange_rates_diff[i] >= 0: #Höhen und Tiefen des Aktienkurses am Tag i, 1 wenn positiv, 0 wenn negativ
tr_angle_mat.append(1)
else:
tr_angle_mat.append(0)
train_feature_arr = np.array(tr_input_mat)
train_label_arr = np.array(tr_angle_mat)
# train_feature_arr, train_label_Sehen Sie sich arr an, um einen Überblick über den obigen Code zu erhalten.
print(train_feature_arr)
print(train_label_arr)
# test_feature_arr, test_label_Erstellen Sie arr auf die gleiche Weise.
rates_fd = open('./6050_stock_price_prediction_data/df_test.csv', 'r')
rates_fd.readline() #Jede Zeile wird bis zum Ende der Datei gelesen.
next(rates_fd) #Die erste Zeile wird übersprungen.
exchange_dates = []
pn_rates = []
pn_rates_diff = []
exchange_rates = []
exchange_rates_diff = []
prev_pn = df_test['pn'][0]
prev_exch = df_test['Schlusskurs'][0]
for line in rates_fd:
splited = line.split(",")
time = splited[0] # table.Datum der ersten Spalte von csv
pn_val = float(splited[1]) # table.2. Spalte PN-Wert von csv
exch_val = float(splited[2]) # table.Schlusskurs der dritten Spalte Aktienkurs von CSV
exchange_dates.append(time) #Datum
pn_rates.append(pn_val)
pn_rates_diff.append(pn_val - prev_pn) #Änderung des PN-Wertes
exchange_rates.append(exch_val)
exchange_rates_diff.append(exch_val - prev_exch) #Änderungen der Aktienkurse
prev_pn = pn_val
prev_exch = exch_val
rates_fd.close()
INPUT_LEN = 3
data_len = len(pn_rates_diff)
test_input_mat = []
test_angle_mat = []
for i in range(INPUT_LEN, data_len):
test_arr = []
for j in range(INPUT_LEN):
test_arr.append(exchange_rates_diff[i - INPUT_LEN + j])
test_arr.append(pn_rates_diff[i - INPUT_LEN + j])
test_input_mat.append(test_arr) #Änderungen der Aktienkurse und negativ / positiv für die letzten 3 Tage am Tag i
if exchange_rates_diff[i] >= 0: #Höhen und Tiefen des Aktienkurses am Tag i, 1 wenn positiv, 0 wenn negativ
test_angle_mat.append(1)
else:
test_angle_mat.append(0)
test_feature_arr = np.array(test_input_mat)
test_label_arr = np.array(test_angle_mat)
# train_feature_arr, train_label_arr,test_feature_arr, test_label_Vorhersagemodell mit arr als Merkmal(Logistische Regression, SVM, zufällige Gesamtstruktur)Erstellen und messen Sie die Vorhersagegenauigkeit
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
for model in [LogisticRegression(), RandomForestClassifier(n_estimators=200, max_depth=8, random_state=0), SVC()]:
model.fit(train_feature_arr, train_label_arr)
print("--Method:", model.__class__.__name__, "--")
print("Cross validatin scores:{}".format(model.score(test_feature_arr, test_label_arr)))
Recommended Posts