0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pandas-datareaderで株価データを取得するとデータの欠落がある

Posted at

はじめに

Pandas-datareaderは、株価データを取得するのに重宝するのですが、残念なことにデータの欠落がある場合があります。例えば、Stooqで、「1357NF日経ダブルインバース」を取得すると、

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

以下のようなcsvファイルが得られます。

1357.csv
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

2016-06-15のデータが欠落しています。ひょっとしたら、この日はシステムトラブルか何かで出来なかったのでは?と思い、Yahoo!Finance.の時系列データを確認すると、

Y1357.png

Yahoo!Finance.では、その日のデータは存在していました。

nikkei225インデックスを取得してみると、

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

欠落はありませんでした。

NIKKEI225.csv
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

欠落は銘柄によるようです。

データ欠落の対策

銘柄によって欠落があったりなかったり。このままでは、株価を比較したりする局面で重大な誤りを生じる恐れがあるので、欠落行を除くなり補間するなりが必要です。
pandasを使用して、2つの表をマージすることにより、欠落行を除くなり補うなりすることができます。

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

mergedは、欠落行が取り除かれた結果を得ます。

merged.png

merged2では、欠落行がNaNで埋められます。

merged2.png

欠落行を補間するには、一旦NaNで埋めてから、必要な値に補間したらよいでしょう。

欠落を補う方法は、以下の記事で解説されています。
https://qiita.com/kazama0119/items/c838114f8687518ba58e
データ分析で株価予測をしてみた

0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?