【Python】pandasで日経平均の株価データをスクレイピングする

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の決定木アルゴリズムを使う

プログラミングの独学はとても難しい


プログラミングは小学校の義務教育にも導入され始めており、これから社会人として生きていく上でプログラミングはもはや出来て当たり前、出来なれば論外というエクセルレベルの必須スキルになりつつあります。そしてそういう話を聞いて参考書なりを購入して独学でプログラミング勉強しようと思っている人も少なくないでしょう。しかしプログラミングを独学で勉強し始めようと思うものの



・「分からない箇所で詰まって挫折してしまった」

・「勉強する時間が足りない」

・「ネットの記事だと情報が断片的でよくわからない」

・「コードのエラーの原因が分からない」



という壁にぶち当たって、プログラミングの勉強を止めてしまう方が少なくありません。独学でプログラミングを勉強してる時間のほとんどはつまづいている時間です。実際僕も最初のころ独学でプログラミングを勉強していた頃はエラーの原因が分からず丸1日を不意にしてしまった・・・そんな苦い経験がありました。それで僕は一度はプログラミングの学習を諦めてしまいましたが、就活で現実を知る中で



「プログラミングを勉強して、いずれフリーランスとして自由な生き方がしたい」

「エンジニアとして若いうちから高収入を得たい」



という強い気持ちから一念発起して「侍エンジニアのwebサービスコース」に申し込み、プロのエンジニアの方に対面でマンツーマンでPythonによるWebサービス作り方とWeb技術の基本を教えてもらい、ようやくプログラミングが理解でき、今ではエンジニアとしてそこそこの暮らしができるようになりました。





侍エンジニアでは、とりあえずプログラミングやインターネットの基本を知っておきたい人から、HTML・cssなどでWebサイトやWebアプリを作ってみたい人やPythonを勉強してデータサイエンティストやAIエンジニアになりたい人まで幅広いニーズに応えた様々なコースが用意されています。



IT業界と言ってもエンジニアの仕事はプログラミング言語次第でサーバーから機械学習・ディープラーニングまで多種多様ですし、侍エンジニアの無料レッスン(カウンセリング)を受けてみて、自分のやりたいITの仕事は何なのか?を見つけるのがエンジニアへの第一歩になります。ちなみに今侍エンジニアの無料レッスンを受けると1000円分のAmazonギフト券がもらえるので、試しに受けてみるだけもお得です。


自分は半端に独学やオンラインスクールで勉強して金と時間を無駄にするくらいなら、リアルのプログラミングスクールに通ってしっかりプログラミングを勉強した方がいいと思います。ちなみに今、侍エンジニアに申し込むと、25歳以下の学生の方であれば、受講料が20%OFFになるので超お得です。


そして、プログラミングは大勢で授業を受けたり漫然とオンライン学習をするよりも自分が分からない箇所をピンポイントでプロの講師に直接質問して、ちゃんと納得するというスタイルの方がお金は確かに少し掛かりますが、独学で学ぶよりも絶対にモノになります。


シェアする

  • このエントリーをはてなブックマークに追加

フォローする

   侍エンジニア塾       
侍エンジニアの無料体験レッスンを予約する -->