[PYTHON] Bei der Erfassung von Aktienkursdaten mit Pandas-datareader fehlen Daten

Einführung

Der Pandas-Datenleser ist nützlich, um Aktienkursdaten abzurufen, aber leider fehlen möglicherweise Daten. Wenn Sie beispielsweise mit Stooq "1357NF Nikkei Double Inverse" erhalten,

import pandas_datareader.stooq as web
from datetime import datetime

start_date = datetime(2016,6,10)
end_date = datetime(2016,6,17)

dr = web.StooqDailyReader('1357.JP', start=start_date, end=end_date)
df = dr.read()
df.to_csv('1357.csv')

Sie erhalten eine CSV-Datei wie die folgende.

Date,Open,High,Low,Close,Volume
2016-06-17,3330,3380,3290,3370,8019724
2016-06-16,3270,3465,3250,3450,10403857
2016-06-14,3220,3315,3185,3270,9910736
2016-06-13,3105,3205,3100,3200,8193928
2016-06-10,2981,3040,2977,3000,4247241

Daten für den 15.06.2016 fehlen. Vielleicht konnte ich es an diesem Tag aufgrund von Systemproblemen oder so nicht tun? Dachte ich und als ich die Zeitreihendaten von Yahoo! Finance überprüfte.

Y1357.png

Bei Yahoo! Finance. Existierten die Daten für diesen Tag.

Wenn ich den nikkei225 Index bekomme,

import pandas_datareader.stooq as web
from datetime import datetime

start_date = datetime(2016,6,10)
end_date = datetime(2016,6,17)

dr = web.StooqDailyReader('^NKX', start=start_date, end=end_date)
df = dr.read()
df.to_csv('NIKKEI225.csv')

Es gab keine Auslassung.

Date,Open,High,Low,Close,Volume
2016-06-17,15631.79,15774.87,15582.94,15599.66,1671723008
2016-06-16,15871.22,15913.08,15395.98,15434.14,1542472064
2016-06-15,15799.07,15997.3,15752.01,15919.58,1367727744
2016-06-14,16001.19,16082.5,15762.09,15859.0,1316932864
2016-06-13,16319.11,16335.38,16019.18,16019.18,1261788416
2016-06-10,16637.51,16643.36,16496.11,16601.36,1549976064

Der Mangel scheint auf die Marke zurückzuführen zu sein.

Gegenmaßnahmen gegen Datenverlust

Je nach Marke kann es fehlen oder nicht. Wenn nichts unternommen wird, besteht die Gefahr schwerwiegender Fehler beim Vergleich der Aktienkurse. Daher müssen fehlende Zeilen entfernt oder eine Interpolation durchgeführt werden. Sie können fehlende Zeilen entfernen oder ausfüllen, indem Sie die beiden Tabellen mit Pandas zusammenführen.

import pandas as pd

nikkei225 = pd.read_csv('NIKKEI225.csv').set_index('Date').sort_index()
n1357 = pd.read_csv('1357.csv').set_index('Date').sort_index()

merged = pd.DataFrame.merge(nikkei225, n1357, on='Date', how='inner')
merged2 = pd.DataFrame.merge(nikkei225, n1357, on='Date', how='outer')

Zusammengeführt ergibt das Ergebnis, wobei die fehlenden Zeilen entfernt wurden.

merged.png

In fusioned2 werden fehlende Zeilen mit NaN gefüllt.

merged2.png

Um die fehlenden Linien zu interpolieren, füllen Sie sie mit NaN und interpolieren Sie dann auf die erforderlichen Werte.

Wie Sie die Lücke ausgleichen können, erfahren Sie im folgenden Artikel. https://qiita.com/kazama0119/items/c838114f8687518ba58e Ich habe versucht, den Aktienkurs durch Datenanalyse vorherzusagen

Recommended Posts

Bei der Erfassung von Aktienkursdaten mit Pandas-datareader fehlen Daten
Laden Sie japanische Aktienkursdaten mit Python herunter
Holen Sie sich Aktienkursdaten mit Quandl API [Python]
Flow Memo beim Abrufen von JSON-Daten mit urllib
Automatische Erfassung von Aktienkursdaten mit Docker-Compose
"Abrufen von Zeitreihendaten von k-db.com mit Python" Memo zur Erstellung der Programmumgebung
Aktienkursprognose mit Tensorflow
Holen Sie sich Lager mit Python
Tipps zur Erfassung von Aktienkursdaten
[Aktienkursanalyse] Pandas lernen mit fiktiven Daten (002: Protokollausgabe)
[Aktienkursanalyse] Lernen Sie Pandas mit Nikkei-Durchschnitt (004: Ändern Sie die gelesenen Daten in Nikkei-Durchschnitt)
[Aktienkursanalyse] Pandas lernen mit fiktiven Daten (001: Vorbereitung der Umgebung auf das Lesen von Dateien)
[Aktienkursanalyse] Pandas mit fiktiven Daten lernen (003: Von der Typanordnung zum Candlestick-Chart)
Aktienprognose mit TensorFlow (LSTM) ~ Aktienprognose Teil 1 ~
Web Scraping mit Python (Aktienkurs)
Aktienkursprognose mit Deep Learning [Datenerfassung]
Materialien zum Lesen, wenn Sie mit Python beginnen
[Python Data Frame] Wenn der Wert leer ist, füllen Sie ihn mit dem Wert einer anderen Spalte.