Contents
Pythonで株価データを取得する
今回はPythonで日経平均株価を取得していきたいと思います。環境はWin10・Ancondaを使用しています。anaconda?jupyter?という人は以下の記事を参照してください。この2つはpythonでのデータ分析において必須なので、使いこなしておくと作業が非常に捗ります。
関連記事:【Python】Anacondaのインストールと初期設定から便利な使い方までを徹底解説!
関連記事:【Python】Jupyter notebookの基本的な使い方を分かりやすく説明する
Pandasとは?
pandasはJupyter Notebook上で作業するにあたって、データフレームの操作などに欠かせない便利パッケージの1つです。
関連記事:【Python】Pandasを使ったデータ分析①~特定の行・列のデータを抽出する
関連記事:【Python】Pandasを使ったデータ分析②~1次元配列のpd.Seriesを使いこなす
pandasはデータの操作の他に派生ライブラリのpandas-datareaderを使用することでWeb上の様々なソースに簡単にアクセスし、pandasのDataFrameの形でデータを取得することもできます。
例としてpandas-datareaderを使用するとセントルイス準備銀行やワールドバンク・Googleアナリティクスからデータを取得することができます。(2018年2月現在)
他にも色んなところのデータベースにアクセスできるので、Pythonを用いて金融系のデータ分析をしたいという方にPandas及びpandas-datareaderは必須のライブラリです。
Pandas-datareaderのインストール
pandasは、コマンドプロンプト(アナコンダプロンプト)でPIPコマンドを入力するとインストールできます。
# pandas-datareaderのインストール $pip install pandas-datareader
pandasのバージョンが古いとpandas-datareaderがインストール出来ないことがあるらしいので、エラーが出た場合はpandasを最新版にアップデートしてみてください。
公式ドキュメント:pandas-datareader公式ドキュメント
pandas-datareaderで日経平均株価を取得する
日経平均株価のデータを取得するにあたってにオーソドックスな方法は以下の2つです。
- Fredから取得する
- Yahoo financeから取得する
日経平均株価はヤフーファイナンスから取得することもできますが、ヤフーファイナンスはスクレイピング対策で仕様がしょっちゅう変わるので、個人的にはあまりおすすめしません。まあ取得できる場合はヤフーファイナンスでいいでしょう。
ここでは一応FRED® (Federal Reserve Economic Data) =フレッド”から、日経平均株価を取得していきます。
FREDとは米国に12ある連邦準備銀行のうちのひとつ=セントルイス連邦準備銀行が運営している経済統計データ集で、米国経済に関する21,937の時系列データを自由にダウンロードすることができ、このサイトで主要な経済統計の大部分を入手することが可能です。
それには日経平均だけではなく、ダウ平均やAppleやFacebookといったアメリカの大手企業の株価データも含まれています。
このFREDでは常にアップデートされた時系列データを入手することができますし、年々データ数が増えているだけでなく、ダウンロードの形式も自由に選択できるようになり、ますます使い勝手が良くなっているのでお勧めです。
ただリアルタイムデータはないので、高頻度データの分析などを行いたい場合は自分でスクレイピングのプログラムを組む必要があります。
<作業環境>
- Python3.6
- Windows10
- JupyterNotebook
# ライブラリの読み込み
import pandas_datareader.data as web
import pandas as pd
import datetime
# 日経平均株価を取得する
nikkei = web.DataReader("NIKKEI225", "fred", "1950/5/16")
# データをCSV出力する
nikkei.to_csv('nikkei.csv')
#データを確認する
nikkei
すると↓のような感じでデータを取得できます.Jupyter Notebookは取得したデータフレームに色や線を付けてくれたり無機質ではないので個人的には好みですね。
コードの説明をすると、
#データを取得する関数 DataReader(name, source, start, end) <引数> name : データセット名またはティッカーシンボル source : 取得元のデータソース名 start : 取得してくる期間の始まり end : 取得してくる期間の終わり
データソースは日経平均以外にもいろいろありますが、基本的にFREDにほとんど揃っているので、StartとEndはdatetimeで”〇〇〇〇‐〇〇‐〇〇”という感じで指定していきます。endの方は今回のように特に指定しない場合は最新の日付になります。
nameに関してはFREDのサイトで直接検索して使える引数を見つけるといいと思います。→FRED公式サイト
他にもFREDには人口やGDPのデータなどが揃っているので、株価だけではなくいろいろな分析ができます。
ヤフーファイナンスから日経平均を取得する場合
# 期間を指定する start = '2018-4-1' end = '2019-4-1' # データをスクレイピングで取得する nikkei = web.DataReader('^N225', 'yahoo', start, end) #csvに出力する nikkei.to_csv("nikkei.csv") # データを確認する nikkei
一応Yahooファイナンスから取得する場合だと、始値・高値・低値・終値・出来高全部揃っているので、出来ればこちらから取得したいところ。
ただしこれはアメリカのヤフーファイナンスなので、任天堂とかソニーとか向こうに上場していない日本の個別株の株価データはありません。ちなみに引数を^N225からAPPLに変えるとApple、AMZNに変えるとAmazonの株価データが取得できます。
日経平均の値動きをグラフでプロットする
pythonでデータをグラフ化する方法はいくつかありますが、一番手っ取り早いのはmatplotlibです。Pandasは関数からMatplotlibの機能を使ってグラフをプロットする機能があります。
# nikkei平均株価の価格データをグラフとして描画する %matplotlib inline nikkei.plot()
Pandasの関数だと本当に普通のグラフしかプロットできませんが、plt.plot()で書けばグラフにタイトルを付けたり、ラベルを付けたりもっとオシャレにできます。その方法については以下の記事に書いています。
(おまけ) ダウ工業平均株価の取得方法
ちなみに日経平均株価とよく比較されるアメリカのダウ工業平均株価は以下のように指定することで取得できます。ダウを取得する場合はPandasの引数をNIKKEIからDJIAに変更します。このFREDのname引数はURLの末尾の文字(ここだとDJIA)を参照しています。↓
# ダウ工業平均株価をPandasで取得する start = datetime.datetime(2009, 1, 12) end= datetime.datetime(2019, 1, 13) dau = web.DataReader('DJIA', 'fred', start=start, end=end)
終わり
これでデータ分析のネタになるデータは取得できました。次はこのデータを分析していきます。「個人投資家のためのFinTechプログラミング (日経BPムック)」という本はPythonによる金融データの取得&分析手法が(簡易的ですが)乗っているので、データ分析初学者の方にはオススメです。
関連記事:【Python】pandasでビットコイン価格のローソク足と移動平均線を計算してプロットする
関連記事:【Python】pandasのresample()で株価データを月/日/時ごとに再集計
関連記事:【Python】CoinGeckoのAPIからビットコイン・アルトコインの価格データを取得する
関連記事:【Python】機械学習で株価を予測する~Scikit-Learnの決定木アルゴリズムを使う
コメント
[…] 【Python】pandasで日経平均の株価データをスクレイピングするPythonで株価データを取得する今回はPythonで日経平均株価を取得していきたいと思います。環境はWin10・Ancondaを使用しています […]
[…] 参照記事:【Python】pandasで日経平均の株価データをスクレイピングする […]