Python: Aktienkursprognose Teil 2

Erfassung von Zeitreihendaten des durchschnittlichen Aktienkurses von Nikkei

Erfassung von Zeitreihendaten Teil 1

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

image.png

Erfassung von Zeitreihendaten Teil 2

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

image.png

Erfassung von Zeitreihendaten Teil 3

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

image.png

Aktienkursprognose

Aktienkursprognose Teil 1

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')

Aktienkursprognose Teil 2

#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)

image.png

Aktienkursprognose Teil 3

#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)

image.png

Aktienkursprognose (Zusammenfassung)

# 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)))

image.png

Recommended Posts

Python: Aktienkursprognose Teil 2
Python: Aktienkursprognose Teil 1
[Python] Meine Aktienkursprognose [HFT]
Aktienprognose mit TensorFlow (LSTM) ~ Aktienprognose Teil 1 ~
Aktienkursprognose 2 Kapitel 2
Aktienkursprognose 1 Kapitel 1
Python & Machine Learning Study Memo ⑦: Aktienkursprognose
Aktienkursprognose mit Tensorflow
Holen Sie sich Lager mit Python
QGIS + Python Teil 2
Aktienkursprognose mit maschinellem Lernen (Scikit-Learn)
QGIS + Python Teil 1
Aktienkursprognose mit Deep Learning (TensorFlow)
Laden Sie japanische Aktienkursdaten mit Python herunter
[Python] Erstellen eines Aktien-Drawdown-Diagramms
Python: Scraping Teil 1
Aktienkursprognose mit maschinellem Lernen (Return Edition)
Lösung Wenn Sie Python 3.6 oder höher verwenden, benötigen Sie die enum34-Bibliothek ebenfalls nicht. Deinstallieren Sie sie daher und verwenden Sie das Standard-Enum-Modul. Enum34 deinstallieren Führen Sie nach der Deinstallation von enum34 erneut `pip install optuna` aus und Sie haben Optuna erfolgreich installiert! Python, pip, Python3, enum, OptunaPython3 Beginn Teil 1
Python: Scraping Teil 2
Holen Sie sich Aktienkursdaten mit Quandl API [Python]
Aktienkursprognose durch maschinelles Lernen Numerai Signals
Web Scraping mit Python (Aktienkurs)
Aktienkursprognose mit Deep Learning [Datenerfassung]
Python Basic Memorandum Teil 2
Preisschwankungsprognose für virtuelle Währungen
Kaggle ~ Home Preisprognose ② ~
Python-Grundnotiz - Teil 1
Kaggle ~ Home Preisprognose ~
[Zeitreihen mit Handlung] Dynamische Visualisierung mit Handlung [Python, Aktienkurs]
Bildverarbeitung mit Python (Teil 2)
Python mit freeCodeCamp Teil1 studieren
Angrenzende Bilder mit Python Teil 1
Python-Anwendung: Pandas Teil 1: Basic
Python-Anwendung: Pandas Teil 2: Serie
Schaben mit Selen + Python Teil 1
Python: Schiffsüberlebensvorhersage Teil 2
Programmierhistorie 1 Monat NY Dow-Bestand mit Python extrahieren!
[Einführung in Systre] Aktienkursprognose; schwach am Montag m (__) m
Python-Grammatik-Grundnotiz (1)
Python: Schiffsüberlebensvorhersage Teil 1
Bildverarbeitung mit Python (Teil 1)
Nampre mit Python lösen (Teil 2)
Zeitreihenanalyse Teil 3 Prognose
Bildverarbeitung mit Python (3)
UI-Automatisierung Teil 2 in Python
Kratzwettervorhersage mit Python
Python: Überwachtes Lernen: Hyperparameter Teil 2
Aktienkursprognose mit LSTM_1
Schaben mit Selen + Python Teil 2
Tipps zur Erfassung von Aktienkursdaten
Python x GIS-Grundlagen (1)
Aktienkursprognose durch maschinelles Lernen Beginnen wir mit Numerai
Aktienkurs Prognose durch maschinelles Lernen ist so wahr, Numerai Signale
Verschieben von CSV-Dateien mit Python Teil 1
Python x GIS-Grundlagen (3)
Spielen Sie handschriftliche Zahlen mit Python Part 1
Perl-Objekt und Python-Klasse Teil 2.
Python-Anwendung: Datenverarbeitung # 3: Datenformat