【初心者向け】10行以内のスクリプト(3.datareaderでデータ取得・csvへ書き込み)
pythonで色々なライブラリを使えば、「少ないコードでもちょっとした事が出来て、少なければ5行程でもちょっとしたスクリプトが作れ、便利だな。」と思ったので、pythonやその他、コマンドを羅列しただけのものも出てくるかも知れませんが、10行程のスクリプトを不定期で投稿してみようと思います。
第3回として、datareaderでデータを取得、csvへの書き込みを投稿したいと思います。
社内でcsvやexcelのデータを渡されたり、ネット上で公開されているでもjson等に並び、csvが公開されている事例が多いと思います。
取得するデータは、fredの日経225の2016年1月1日からとしました。
このデータを、pandasのデータフレームに格納、csvに書き込みます。
最後、補足として、plot関数でプロット。
【環境】
Linux: debian10
python: 3.7.3
pandas: 1.0.3
pandas-datareader: 0.8.1
1.データの取得・データフレームへの格納
日経225データ取得のdatareaderの取得は、以下の様な構文です。
pdr.DataReader('NIKKEI225' ,'fred' ,start)
csvへの書き込みは、pandasで書き込みます。
構文は、データフレーム.to_csv('書き込むファイル名.csv')
コードはjupyterで実行しました。
# datareaderでfredからNikkei225のデータを取得して、csvに書き込み
# outfile = ('./nikkei225_20200428.csv')
import pandas as pd
from pandas_datareader import data, wb
import datetime
import matplotlib.pyplot as plt
# データ取得・データフレームに格納
start = datetime.datetime(2016, 1 ,1)
df_nikkei225 = pdr.DataReader('NIKKEI225' ,'fred' ,start)
# csvに書き込み
df_nikkei225.to_csv('./nikkei225_20200428.csv')
上記、スクリプトのデータフレームへの格納で、1行目で取得する開始日を指定、2行目でfredから日経225を1行目で指定した日から取得、データフレームにする記述をしました。
start = datetime.datetime(2016, 1 ,1)
df_nikkei225 = pdr.DataReader('NIKKEI225' ,'fred' ,start)
データフレームの名前は、「df_nikkei225」としましたが、実際は何でも良いです。
csvへの出力はカレントディレクトリに、「nikkei225_20200428.csv」として、出力しました。
2.取得したデータの内容
取得したデータを見てみようと思います。
「df_nikkei225」というのは、先程のコードで使ったデータフレームです。
df_nikkei225
# 格納されたデータフレームの内容
NIKKEI225
DATE
2016-01-01 NaN
2016-01-04 18450.98
2016-01-05 18374.00
2016-01-06 18191.32
2016-01-07 17767.34
... ...
2020-04-22 19137.95
2020-04-23 19429.44
2020-04-24 19262.00
2020-04-27 19783.22
2020-04-28 19771.19
1128 rows × 1 columns
【補足】として、グラフを描画してjpgで出力してみようと思います。
以上のデータをプロットする最も簡単な方法は、2行のコードで出来ます。
最初に「import matplotlib.pyplot as plt」で、matplotlibをインポートしました。
その状態で「データフレーム名.plot()」、データフレームが「df」の場合は、df.plot()でプロット出来ます。
例として、グラフをjpgで出力する場合、plt.savefig("出力するファイル名.jpg")
# グラフ描画・出力
df_nikkei225.plot()
plt.savefig("nikkei225_20200428.jpg")
df_nikkei225.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 1128 entries, 2016-01-01 to 2020-04-28
Data columns (total 1 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 NIKKEI225 1056 non-null float64
dtypes: float64(1)
memory usage: 17.6 KB
df_nikkei225.isnull().sum()
NIKKEI225 72
dtype: int64
df_nikkei225.head()
DATE
2016-01-01 NaN
2016-01-04 18450.98
2016-01-05 18374.00
2016-01-06 18191.32
2016-01-07 17767.34
取引が無い日はデータはありませんが、取得したデータをそのままプロットしましたので、実際のグラフとしては、ひとまず欠損値の処理をする事になると思います。
それについては、別記事で触れたいと思います。
以上、datareaderでデータの取得・csv化でした。
