Python

【コード解説】Pythonで株価データを取得する!【3つの方法を解説】

2020年12月5日

こんにちは。TATです。

 

今日のテーマは株価です!

僕が運営するもう一つのサイト「投資でニート生活」では、投資に必要な様々な情報を集めています。

→ 「投資でニート生活」をみる

 

株価データはもちろんですが、そのほかにも決算短信や業績予想などのXBRLデータから、株式分割や自社株買いなどのPDFファイルまで収集し、それらのデータを解析して自動ニュースとして記事を自動作成しています。

投資対象候補とする監視銘柄の選定も自動化していて、買いシグナルが出た銘柄をまとめたPDFレポートが自動作成され、僕にSlack経由で送付しています。

これらすべての行程はPythonで完全自動化されています。

Pythonはデータ分析やスクレイピングを得意とするプログラミング言語です。

【いますぐ始められます】データ分析をするならPythonが最適です。【学習方法もご紹介します!】
【人気上昇中】今人気のプログラミング言語「Python」は何ができるのか?できることまとめます【転職でも有利です】

 

Pythonプログラムによる自動化のおかげで、僕が日々やることは送られてくるPDFファイルを眺めて、良さそうな銘柄に目星をつけて、翌日の株価の動きを確認してからエントリーするだけです。

最終的なジャッジはあくまでも僕がするのですが、その手前の大部分はPythonによって自動化されています。

 

そしてこの「投資でニート生活」を運営するにあたって、「株の情報収集や分析のやり方を教えてください」といった内容の問い合わせの件数が増えてきました。

ありがたい限りですね。

ということで、プログラミング関連はこちらの「気ままなブログ」で解説していくことにしました。

 

今回がその記念すべき第1回目です。

テーマは「Pythonで株価データを取得する」です。

Pythonで株価データを取得する方法についてコード付きで解説していこうと思います。

やり方も複数あるのでここでは代表的な3つの方法をご紹介します。

難易度の低い方法から順番に紹介していきますね。

 

取得した株価データからテクニカル分析を計算したり、ローソク足チャートを描く方法も解説しています。

【コード解説】Pythonで株式投資に必要なテクニカル分析を計算する
【コード解説】Pythonで株価チャートを描く【mpl_finance編】

目次

 

【コード解説】Pythonで株価データを取得する!【3つの方法を解説】

方法①:ダウンロードしたCSVファイルを扱う

1つ目は、ダウンロードしたCSVファイルを扱う方法です。

これが一番シンプルで最も簡単に実行できます。

ただし少しデータ整形は必要になります。

そこも含めて解説します。

 

世の中には無料で株価データをCSV形式でダウンロードできるサイトがあります。

いい世の中です。

ここでは無料で株価データがダウンロードできるサイトとして、Investing.comを例にご紹介します。

 

無料登録が必要です。

株価データを取得するには無料の会員登録が必要になります。

必要なのはこれだけです。

お金もかからないので余裕ですね。

 

日足、週足、月足データがダウンロード可能

会員登録を済ませてログインしたら、日足、週足、月足のデータがダウンロードできるようになります。

検索ボックスから任意の銘柄を探してダウンロードページにいきます。

こんな感じです。こちらはトヨタ(7203)です。

https://jp.investing.com/equities/toyota-motor-corporation-historical-data

 

時間枠と任意の期間を設定して「データをダウンロードする」を押すと、CSV形式で株価データをダウンロードすることができます。

これをPythonで読み込めば、株価データを扱うことができるようになります。

一番手っ取り早いやり方です。

 

PythonでCSVファイルを読み込む

それではダウンロードしたCSVファイルをPythonで読み込んでみます

コードはとってもシンプルでこんな感じです。

 

pandasはデータ分析用のライブラリです。

通常はpdと略して定義して使います。

pandasにはread_csv(ファイル名)という名前の通りの関数があるので、これを使ってCSVファイルを読み込みます。

これでCSVファイルを読み込むことができます。簡単ですね。

head()で冒頭の5行だけを表示しています。

 

日付と数値データを変換する

ただし、読み込んだデータをみてみると問題点があります。

なんとこちらすべて文字列なんですね(笑)

ゆえに、データ分析に使うためにはこの型を数値とか日付に変換してあげる必要があります

やるべきことは以下の通りです。

  • 「日付け」データはdatetimeフォーマットに変換する
  • その他のカラムをfloatに変換する

 

ちなみに株価データはintでもいいのかなとも思いますが、指数データ(日経平均とかマザーズとか)を扱う際にはfloatで扱うことになるので、ここは統一してfloatにしておいたほうが後々使いまわしていく時に楽になりますw

こういったことも想定しながらプログラミングは設計するべきですね。

 

では、データを整形するコードの一例をご紹介します。

この他にもやり方はたくさんあるので、自由にパクりつつ適宜改善していっていただければと思います!

 

サクッと解説しておくと、まず、datetimeというライブラリーを利用して日付けデータをdatetimeに変換します。

lambda関数を使うことでコードがスッキリします。

 

次にその他のカラムをfloatに変換します。

ここには、共通で利用できるnumber_converterという関数を定義します。

やることは単純で、文字列から不要な文字を除去してfloatに変換するだけです。

これを日付け以外の各カラムに適用すればデータ変換は完了です。

シンプルですね。

 

データがきれいに変換されていることが確認できます。

 

日付けでソートする

最後にこのデータを日付けでソートします。

これは、時系列データを扱う際に便利なためで、古いものから順に表示されるようにします。

これをやっておくと後に行うデータ分析が楽になります。

コードとしては1行で完了します。

日付けでソートして、データを置き換えます。

 

これでデータのソートが完了です。

 

以上でデータ整形はすべて終了です。

データ分析の準備万端です。

 

いちいちダウンロードするのがだるいw

ここで紹介したCSVファイルを扱う方法は、最も簡単な方法ではありますが、一つ一つファイルをダウンロードする必要があります

一回限りの作業なら問題ありませんが、毎日やるとなるとなかなか辛いものがあります。

さらにたくさんの銘柄の株価データを集めたい場合にも、それぞれの株価データをダウンロードする必要があるので手間がかかります。

単純にだるいですよね。

よって、この方法は一回限りのプロジェクトやプログラミング作業量を極限に削りたい場合のやり方になります。

毎日の作業やたくさんの銘柄を扱いたい場合には、この後紹介する方法②か方法③を活用した方が良いです。

 

方法②:ライブラリーを利用する

2つ目の方法はライブラリーを活用する方法です。

Pythonには、株価を扱えるライブラリーが存在しており、そちらを利用することで株価データを簡単に取得することができます。

Pythonまじで神です。

データ整形が必要ないことを考えたらこっちの方が楽かもですw

 

pandas_datareader

ライブラリーはpandas_datareaderを使います。

これは、経済データや金融商品(株とか指数とか)の価格データを取得することができるライブラリーです。

こんなに素晴らしいライブラリーがPythonにはあるんですね。

 

早速使ってみます。

pandas_datareaderの中にあるdataを使います。

 

ダウ平均を取得する

こちらのコードでは、yahooからダウ平均のデータを取得しています。

なんの設定もせずに実行すると過去10年分のデータが取れます。

このデータの場合は、すでに古いものから順番に並んでいますので、整形の必要はありません。

このまま使えます。

 

もちろん日付の指定もできます。

 

これで2020年11月1日から14日までの2週間分のデータを取得することができます。

 

個別株(例:アップル)を取得する

個別株の株価データも取得できます。

例としてアップルの株価を取得してみます。

アップルのティッカーシンボルはAAPLなので、これを指定すればOKです。

 

こんな感じで取得できています。

最新データを表示するために、headではなくてtailを使っています。

これはラスト5行を表示します。

日付の指定は先ほどの同様です。

 

日本株も取得できます!!!

そして朗報です。

なんと日本株の株価データも取得できちゃいます。

ただし、データの取得先がyahooでは取得することができません。

日本株のデータを取得する場合にはデータの取得先をstooqとします。

ちなみにstooqはポーランドのサイトっぽいです。詳しいことはよくわかりませんw

 

例としてトヨタの株価データを取得してみます。

 

トヨタの証券コードは7203です。

これに.JPをつけると日本株を指定することができます。

ちゃんと取得できていることが確認できます。

ちなみにstooqの場合は日付の指定うまく動かず、存在するデータが根こそぎ取られる感じでしたw

一部は日付の指定はうまくいかずとも、ライブラリーを活用すると指数から個別株まで、あらゆるデータを取得することができます。

 

デメリットは当日データがないこと

ただし、デメリットが一つだけあります。

それが当日のデータが存在しないことです。

上記のデータは2020年12月4日に取得したものです。

証拠のために日付を表示しておきます。

市場がすでに閉まっているにも関わらず、取得できるデータは前日の2020年12月3日までのものになります。

よって、バックテストや分析のために利用するにはいいかもしれませんが、当日のデータを必要とする場合にはなかなか厳しくなります。

この場合は、次に紹介するスクレイピングという最終手段を使うことになります。

 

方法③:【悪用厳禁】スクレイピングして株価を取得する

3つ目が、スクレイピングして株価を取得する方法です。

これが最も新鮮なデータを取得できる方法になります。

ただ一番だるいですw

 

スクレイピングを禁止しているサイトに注意!

そして、スクレイピングを禁止しているサイトもあるので、使うには注意が必要です。

Yahooファイナンスは一発アウトですw

こちらのページに明確にスクレイピングは禁止と書かれています。

Yahoo!ファイナンス掲載情報の自動取得(スクレイピング)は禁止しています

 

株探は明記はされていないけど、調子乗ったらダメ

また僕が大好きな株探もスクレイピングはグレーです。

株探の規約では、「スクレイピングは禁止」との明確な表記はありませんが、サーバーへの負担をかけるような行為はアウトと書かれています。

→ 株探利用規約

 

スクレイピングは調子に乗るとサーバー側に負担をかけてしまうので、非常に怪しいところです。

スクレイピングしないほうが無難ですね。

 

ちなみにこちらの記事を公開した時は株探をスクレイピングするコードを公開していましたが、ちょっと想像以上にアクセスが集中したので、株探のサーバーへ配慮して公開を伏せました。

ご指摘いただいたTwitterのフォロワーさんに深く感謝いたします。

僕、株探大好きなので嫌われたくない・・・m(_ _)m

 

ミンカブも同様

ミンカブも同様です。

ミンカブと株探は運営会社が同じなので、規約もほぼ一緒です。

株探がダメならミンカブもダメです。

やらないほうが無難です。

基本的にはファイナンス系のサイトはスクレイピングしないほうがよいです(涙)。

 

株探は株式分割・併合が組み込まれている

(どうでもいいですが、)ちなみに僕が株探が好きな理由を上げておくと、サイト構造がシンプルなことに加えて、株式分割や併合を組み込んだ株価データがあることです。

例として、最近株式分割が行われた神戸物産を見てみます。

Yahooファイナンスの場合はここが組み込まれていないので、こんな感じになります。

https://info.finance.yahoo.co.jp/history/?code=3038.T&sy=2020&sm=9&sd=5&ey=2020&em=12&ed=4&tm=d&p=2

 

株式分割前は5,000円台だった株価が、2020年10月29日に株式分割が行われて2,000円台になっています。

この表をそのままスクレイピングしたらデータの整形がめんどくなるわけです。

そもそもYahooファイナンスはスクレイピング禁止なので関係ありませんがw

 

株探の場合はここが組み込まれているので見やすいです。

https://kabutan.jp/stock/kabuka?code=3038

 

これを見ると、株式分割が行われる2020年10月29日以前の株価も2,000円台であることがわかります。

これならデータの扱いとしても楽ですよね。

これをガバッとコピペしてエクセルとかに貼り付けるならアリですね。

 

「株式投資メモ」:スクレイピングできるサイトはここです。

じゃあどのサイトならスクレイピングしていいんだよ!と思われるかもしれません。

安心してください。

株式投資メモ」というサイトはスクレイピングを禁止していません。

 

URL構造の理解

次に「株式投資メモ」のURL構造を見ていきます。

例としてトヨタの株価データを見ると、URLはこんな感じです。

https://kabuoji3.com/stock/7203/

 

トヨタの証券コードは7203なので、ここを任意の証券コードを切り替えればデータは取れそうですね。

ページの切り替えなども行いたい場合はさらにURL構造の解析が必要になりますが、ここでは割愛します。

 

コードの一例を公開

とりあえず、簡単にコードを書いてみたのでご紹介します。(美しさは求めてないですwww)

ご参考になると嬉しいです。

 

コメントをたくさんつけたので、順番に追っていくと理解しやすいかと思います。

適当に書いたので、関数もなしにベタ書きですがw

 

headersを入れないとエラーになります

ここでrequestsで使用しているheadersについて解説しておきます。

株式投資メモ」の場合は、これがないとこんな感じでエラーになります。

 

403エラーなのでアクセス拒否ですねw

この場合は、リクエストを送る際にheader情報としてUser-Agent情報を付与してあげると解決できます

header情報は、サーバーがリクエストを受けた時に利用されており、「どんな奴がリクエストを送ってきたのかな〜」とチェックするために使います。(その他の使い方もあります)

そして条件に合致しない場合にはリクエストを拒否するみたいな処理ができるんですね。

 

今回はそれにぶちあたったので、ここを突破します。

そのためにはUser-Agent情報を付与します。

これは自分が利用しているブラウザ情報です。

Chromeをお使いなら、右クリックして「検証」をクリックし、Networkタブから確認することができます。

僕の場合だとこんな感じですね。

ここの「Mozilla~~~」の部分をガバッとコピーしてコードの「"ご自身で設定してください"」と置き換えてください。

これでブラウザ情報を送ることができ、きちんとデータを取得することができるようになります。

 

【弱点なし】最強は方法②と方法③の合わせ技

スクレイピングには極力配慮しましょう!

ただ、「株式投資メモ」がスクレイピングを禁止していないと言っても、それでもサイトに負担をかけるのは忍びないので、ここは配慮しておいたほうが親切です。

優しさを前面に押し出していくべきですw

 

配慮したやり方として、ここでは過去データはライブラリーを利用して取得して、最新のデータだけを「株式投資メモ」からスクレイピングで取得するというやり方ご紹介します。

方法②と方法③の合わせ技になります。

スクレイピングする際には、対象サイトに極限まで配慮しながらやっていきます。

 

「株式投資メモ」のデータは株式分割が考慮されていない

もう一つ理由を挙げておくと、「株式投資メモ」の株価データは株式分割などの株価調整がなされていないのに対して、方法②で紹介したやり方ではここが調整されています。

よって、最新データを「株式投資メモ」からいただき、過去データはライブラリーから取得することでデータ整形が楽になります。

 

(やる人いないと思いますが、)「株式投資メモ」からデータを根こそぎとる場合には、株式分割などの調整を自分で行う必要があります

これは過去の株式分割・併合のデータを集めて適用させる必要があります。

相当大変なので、ここで紹介するライブラリーとスクレイピングの合わせ技がベストだと思います。

 

コード紹介

それではコードの一例をご紹介します。

ザザーっと書いたので汚いかもですが、参考にしていただけたらと思います。

スクレイピングが禁止されていないと言っても、利用する際にはモラルの範疇で行うようにしてください。

とんでもない回数のリクエストを送ると、サーバーへ大きな負担をかけることになります。

複数銘柄取得する際には数秒の間隔をあけるとか、配慮しながらやってください。

それではコードをどうぞ。

 

一気にコードを出してしまったので、なるべく多くコメントをつけました。

コメントを確認しながら順番に見ていただけるとわかりやすいのではないかなと思います。

 

これで任意の証券コードを指定すれば、株価データを取得することができます。

スクレイピングしたデータについては型変換などのデータ整形がきちんとされて、ライブラリーから取得したデータときちんと結合されていることがわかります。

 

このやり方なら、株式分割などを気にする事なく取得することができ、ライブラリーの弱点である最新のデータも合わせて取得することができるようになります。

こちらのコードはご自由にお使いいただきつつ、適宜改善していっちゃってください。

ただしスクレイピングのやりすぎにはご注意を。

複数銘柄を連続で取得する場合には、間隔を空けるなどの配慮をお願いします。

 

日付の指定はデータ取得後に!

ちなみにですが、日付を指定したい場合はデータ取得後にできます

取得時には引数に日付を指定してもうまく機能しないので、とりあえず全部とって、後から整形する感じになります。

例としてはこんな感じです。

先ほどのトヨタ自動車で2020年のデータを抽出します。

こんな感じでフィルタリングすれば、任意のデータを抽出することができます。

 

(おまけ)方法④:APIを利用する

最後におまけとして4つ目の方法を紹介しておきます。

それがAPIです。

日本の証券会社では、この記事を書いている2020年12月4日時点ではauカブコム証券株式会社が提供しています。

これを使うとAPI経由で株価データを取得できるので、簡単に株価データを取得できるようになります。

感覚的には方法②のライブラリーに近いようなイメージです。

さらにAPIを経由して株の売買注文などもできるので、完全な自動売買ができるようになります。

僕はauカブコム証券株式会社のアカウントを持っていないので利用することができませんが、選択肢としてはアリだと思うので紹介しておきます。

 

スクレイピングやデータ分析にはPythonが最適です!

ここまで、「Pythonで株価データを取得する」というテーマで色々な取得方法を解説してきましたが、ここで紹介したコードは全てPythonを使っています。

Pythonはデータ分析やスクレイピングなどを得意とするプログラミング言語で、比較的学びやすい点からも人気が集まっています。

さらにAI関連のライブラリーが豊富なので、昨今のAIブームで需要が爆発していることも人気の理由の一つです。

【いますぐ始められます】データ分析をするならPythonが最適です。【学習方法もご紹介します!】
【人気上昇中】今人気のプログラミング言語「Python」は何ができるのか?できることまとめます【転職でも有利です】

 

僕自身も独学で習得できちゃったくらい学びやすい言語なので、スキルを身に付けたい方などにもオススメです。

僕の場合は独学でPythonを習得して転職にも成功しているので、今から勉強してもわりと実現可能だと思っています。

個人的にはUdemyがおすすめです。

【目的別】Pythonが学べるUdemyのおすすめコースを紹介します【随時更新】

Udemyで講座を探す

 

もちろん時間はかかりますが・・・

【副業は神です】2度の転職において副業が内定の決め手になったお話。
プログラミングの独学にUdemyをおすすめする理由!【僕はUdemyでPythonを独学しました!】

 

まとめ

いかがでしたでしょうか。

今回は、「Pythonで株価データを取得する」というテーマで、株価データを取得する3つの方法についてコード付きで解説しました。

Pythonはシンプルなコードで複雑な処理ができるので、武器にできるとかなり重宝します。

転職でも有利になりますし、わりと短期間で習得できるのでオススメです。

こちらで紹介したコードも自由にパクりつつ、参考にしてもらえたら嬉しいです。

 

取得した株価データを使ってテクニカル分析を計算したり、ローソク足チャートを描く方法も解説しているので、合わせてご覧ください。

【コード解説】Pythonで株式投資に必要なテクニカル分析を計算する
【コード解説】Pythonで株価チャートを描く【mpl_finance編】

 

今回はかなり長い記事になってしまいましたが、ここまで読んでくださってありがとうございました。

【目的別】Pythonが学べるUdemyのおすすめコースを紹介します【随時更新】
【いますぐ始められます】データ分析をするならPythonが最適です。【学習方法もご紹介します!】
【人気上昇中】今人気のプログラミング言語「Python」は何ができるのか?できることまとめます【転職でも有利です】
プログラミングの独学にUdemyをおすすめする理由!【僕はUdemyでPythonを独学しました!】
【副業は神です】2度の転職において副業が内定の決め手になったお話。

Pythonは世界中で人気急上昇中の言語です


需要が上昇しています


データ分析にはPythonが最適です。

特にAIやデータ分析を得意としているので、データサイエンス分野では需要が爆発しています。

【いますぐ始められます】データ分析をするならPythonが最適です。【学習方法もご紹介します!】

【人気上昇中】今人気のプログラミング言語「Python」は何ができるのか?できることまとめます【転職でも有利です】



初心者にも学びやすい


さらにPythonは初心者にも学びやすいのが特徴です。

僕自身も社会人になってからPythonを独学しました。

【目的別】Pythonが学べるUdemyのおすすめコースを紹介します【随時更新】

プログラミングの独学にUdemyをおすすめする理由!【僕はUdemyでPythonを独学しました!】


転職の武器になる!


Pythonのおかげで転職も成功して年収も大きく上がりました。

【副業は神です】2度の転職において副業が内定の決め手になったお話。


おすすめのプログラミング学習方法


Udemy


圧倒的な安さ(セール時)で上質な動画学習素材が手に入る!



Udemyで講座を探す

 

TECH::CAMP


いつでも講師に質問できるチャットシステムが最強です!



TECH::CAMPで無料体験講座を受けてみる

 

CodeCamp


講師とのマンツーマンレッスンで挫折しない!



CodeCampで無料体験講座を受けてみる

 

-Python
-, , ,

© 2021 気ままなブログ