Obtenez au-delà des données csv sur le cours moyen de l'action Nikkei et enregistrez-les.
#Code lors de la lecture de 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
#Acquisition de données chronologiques sur le cours moyen de l'action Nikkei
import pandas as pd
from io import StringIO
import urllib
#Obtenez des séries chronologiques du cours moyen de l'action Nikkei en utilisant la fonction ci-dessus
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))
#Je supprime la dernière ligne dont je n'ai pas besoin
df = df.drop(df.shape[0]-1)
return df
#Enregistrer dans un dataframe appelé df et sortie
df = read_csv(url)
#production
df
Faites des prédictions en vous concentrant sur le cours de clôture des données de séries chronologiques.
#Acquisition de données de séries chronologiques Partie 1,Le code d'acquisition des données chronologiques du cours moyen de l'action Nikkei est affiché.
#Après avoir fait de l'index une date, faites-en une série chronologique
df["Date de données"] = pd.to_datetime(df["Date de données"], format='%Y/%m/%d')
df = df.set_index('Date de données')
#De la colonne'Prix ouvert', 'Prix élevé', 'Bas prix'Supprimer et trier par date
df = df.drop(['Prix ouvert', 'Prix élevé', 'Bas prix'], axis=1)
df = df.sort_index(ascending=True)
df
import pandas as pd
#df et df_Rejoignez les deux tables de tweets avec l'index comme clé et supprimez 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.Sortie en csv
table.to_csv("./6050_stock_price_prediction_data/table.csv")
table
Comme expliqué dans Python: prévision du cours de l'action (1) Cette fois, nous utiliserons l'analyse technique pour prédire le cours de l'action.
Caractérisé par les variations du cours moyen de l'action Nikkei au cours des trois derniers jours et par les variations de la valeur PN Nous prévoirons les hauts et les bas du cours des actions le lendemain.
Après avoir divisé les données d'entraînement en deux parties, les données d'entraînement et les données de test, les données d'entraînement sont standardisées, puis les données de test sont standardisées à l'aide de la moyenne et de la distribution des données d'entraînement.
#Modèle de base
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()
#Création de données d'entraînement
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_Créez une table appelée train, définissez l'index sur la date, le nom de la colonne sur la valeur pn, fermez la valeur sur df_train.Sortie dans le dossier de données avec le nom csv
df_train = pd.DataFrame(
{'pn': X_train_std,
'le dernier prix': y_train},
columns=['pn', 'le dernier prix'],
index=table.index[:len(X_train_std)])
df_train.to_csv('./6050_stock_price_prediction_data/df_train.csv')
#De même pour les données de test, df_Créez une table appelée test et df_test.Sortie dans le dossier de données avec le nom csv
df_test = pd.DataFrame(
{'pn': X_test_std,
'le dernier prix': y_test},
columns=['pn', 'le dernier prix'],
index=table.index[len(X_train_std):])
df_test.to_csv('./6050_stock_price_prediction_data/df_test.csv')
#Tout d'abord df_train.Lisez le csv et affichez les changements de valeur PN et de cours de l'action.
# pn.rates_diff, exchange_rates_Consultez le diff pour avoir un aperçu du programme ci-dessus.
rates_fd = open('./6050_stock_price_prediction_data/df_train.csv', 'r')
rates_fd.readline() #Chaque ligne est lue jusqu'à la fin du fichier.
next(rates_fd) #La première ligne est ignorée.
exchange_dates = []
pn_rates = []
pn_rates_diff = []
exchange_rates = []
exchange_rates_diff = []
prev_pn = df_train['pn'][0]
prev_exch = df_train['le dernier prix'][0]
for line in rates_fd:
splited = line.split(",")
time = splited[0] # table.Date de la première colonne du csv
pn_val = float(splited[1]) # table.2e colonne Valeur PN de csv
exch_val = float(splited[2]) # table.Cours de clôture du cours de l'action de la troisième colonne de CSV
exchange_dates.append(time) #Date
pn_rates.append(pn_val)
pn_rates_diff.append(pn_val - prev_pn) #Changement de la valeur PN
exchange_rates.append(exch_val)
exchange_rates_diff.append(exch_val - prev_exch) #Modifications des cours des actions
prev_pn = pn_val
prev_exch = exch_val
rates_fd.close()
print(pn_rates_diff)
print(exchange_rates_diff)
#Affiche la variation de la valeur PN et du cours de l'action tous les 3 jours.
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) #Évolution des cours des actions et négatifs / positifs pour les 3 derniers jours du jour i
if exchange_rates_diff[i] >= 0: #Montées et baisses du cours de l'action le jour i, 1 si positif, 0 si négatif
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_Voir arr pour avoir un aperçu du code ci-dessus.
print(train_feature_arr)
print(train_label_arr)
# test_feature_arr, test_label_Créez arr de la même manière.
rates_fd = open('./6050_stock_price_prediction_data/df_test.csv', 'r')
rates_fd.readline() #Chaque ligne est lue jusqu'à la fin du fichier.
next(rates_fd) #La première ligne est ignorée.
exchange_dates = []
pn_rates = []
pn_rates_diff = []
exchange_rates = []
exchange_rates_diff = []
prev_pn = df_test['pn'][0]
prev_exch = df_test['le dernier prix'][0]
for line in rates_fd:
splited = line.split(",")
time = splited[0] # table.Date de la première colonne du csv
pn_val = float(splited[1]) # table.2e colonne Valeur PN de csv
exch_val = float(splited[2]) # table.Cours de clôture du cours de l'action de la troisième colonne de CSV
exchange_dates.append(time) #Date
pn_rates.append(pn_val)
pn_rates_diff.append(pn_val - prev_pn) #Changement de la valeur PN
exchange_rates.append(exch_val)
exchange_rates_diff.append(exch_val - prev_exch) #Modifications des cours des actions
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) #Évolution des cours des actions et négatifs / positifs pour les 3 derniers jours du jour i
if exchange_rates_diff[i] >= 0: #Montées et baisses du cours de l'action le jour i, 1 si positif, 0 si négatif
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_Modèle de prédiction avec arr comme fonction(Régression logistique, SVM, forêt aléatoire)Construire et mesurer la précision des prévisions
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