こんにちは。TATです。
今日のテーマは株価です!
僕が運営するもう一つのサイト「投資でニート生活」では、投資に必要な様々な情報を集めています。
ここでは株価データはもちろんですが、そのほかにも決算短信や業績予想などのXBRLデータから、株式分割や自社株買いなどのPDFファイルまで収集し、それらのデータを解析して自動ニュースとして記事を自動作成しています。
これらすべての行程はPythonで完全自動化されています。
「投資でニート生活」を運営するにあたって、「株の情報収集や分析のやり方を教えてください」といった内容の問い合わせの件数が増えてきました。
ありがたい限りです。
ということで、こちらの「気ままなブログ」で解説していきます。
今回がその記念すべき第1回目で、テーマは「Pythonで株価データを取得する」です。
ここでは、Pythonで株価データを取得する方法についてコード付きで解説していこうと思います。
やり方も複数あるのでここでは代表的な3つの方法をご紹介します。
難易度の低い方法から順番に紹介していきますね。
目次
【コード解説】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で読み込んでみます。
コードはとってもシンプルでこんな感じです。
1 2 3 | import pandas as pd df = pd.read_csv("7203 過去データ.csv") |
pandasはデータ分析用のライブラリです。
通常はpdと略して定義して使います。
pandasにはread_csv(ファイル名)という名前の通りの関数があるので、これを使ってCSVファイルを読み込みます。
これでCSVファイルを読み込むことができます。簡単ですね。
head()で冒頭の5行だけを表示しています。
日付と数値データを変換する
ただし、読み込んだデータをみてみると問題点があります。
なんとこちらすべて文字列なんですね(笑)
ゆえに、データ分析に使うためにはこの型を数値とか日付に変換してあげる必要があります。
やるべきことは以下の通りです。
- 「日付け」データはdatetimeフォーマットに変換する
- その他のカラムをfloatに変換する
ちなみに株価データはintでもいいのかなとも思いますが、指数データ(日経平均とかマザーズとか)を扱う際にはfloatで扱うことになるので、ここは統一してfloatにしておいたほうが後々使いまわしていく時に楽になりますw
こういったことも想定しながらプログラミングは設計するべきですね。
では、データを整形するコードの一例をご紹介します。
この他にもやり方はたくさんあるので、自由にパクりつつ適宜改善していっていただければと思います!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import datetime # 日付けをdatetimeに変換 df["日付け"] = df["日付け"].apply(lambda x: datetime.datetime.strptime(x, "%Y年%m月%d日")) def number_converter(x): # 不要文字を除去 for s in [",", "M", "%"]: x = x.replace(s, "") return float(x) # 数値データを floatに変換 for col in ["終値", "始値", "高値", "安値", "出来高", "前日比%"]: df[col] = df[col].apply(number_converter) |
サクッと解説しておくと、まず、datetimeというライブラリーを利用して日付けデータをdatetimeに変換します。
lambda関数を使うことでコードがスッキリします。
次にその他のカラムをfloatに変換します。
ここには、共通で利用できるnumber_converterという関数を定義します。
やることは単純で、文字列から不要な文字を除去してfloatに変換するだけです。
これを日付け以外の各カラムに適用すればデータ変換は完了です。
シンプルですね。
データがきれいに変換されていることが確認できます。
日付けでソートする
最後にこのデータを日付けでソートします。
これは、時系列データを扱う際に便利なためで、古いものから順に表示されるようにします。
これをやっておくと後に行うデータ分析が楽になります。
コードとしては1行で完了します。
日付けでソートして、データを置き換えます。
1 | df.sort_values(by="日付け", inplace=True) |
これでデータのソートが完了です。
以上でデータ整形はすべて終了です。
データ分析の準備万端です。
いちいちダウンロードするのがだるいw
ここで紹介したCSVファイルを扱う方法は、最も簡単な方法ではありますが、一つ一つファイルをダウンロードする必要があります。
一回限りの作業なら問題ありませんが、毎日やるとなるとなかなか辛いものがあります。
さらにたくさんの銘柄の株価データを集めたい場合にも、それぞれの株価データをダウンロードする必要があるので手間がかかります。
単純にだるいですよね。
よって、この方法は一回限りのプロジェクトやプログラミング作業量を極限に削りたい場合のやり方になります。
毎日の作業やたくさんの銘柄を扱いたい場合には、この後紹介する方法②か方法③を活用した方が良いです。
方法②:ライブラリーを利用する
2つ目の方法はライブラリーを活用する方法です。
Pythonには、株価を扱えるライブラリーが存在しており、そちらを利用することで株価データを簡単に取得することができます。
Pythonまじで神です。
データ整形が必要ないことを考えたらこっちの方が楽かもですw
pandas_datareader
ライブラリーはpandas_datareaderを使います。
これは、経済データや金融商品(株とか指数とか)の価格データを取得することができるライブラリーです。
こんなに素晴らしいライブラリーがPythonにはあるんですね。
早速使ってみます。
pandas_datareaderの中にあるdataを使います。
1 2 3 | from pandas_datareader import data df = data.DataReader("^DJI","yahoo") |
ダウ平均を取得する
こちらのコードでは、yahooからダウ平均のデータを取得しています。
なんの設定もせずに実行すると過去10年分のデータが取れます。
このデータの場合は、すでに古いものから順番に並んでいますので、整形の必要はありません。
このまま使えます。
もちろん日付の指定もできます。
1 2 3 | from pandas_datareader import data df = data.DataReader("^DJI","yahoo", start="2020-11-01", end="2020-11-14") |
これで2020年11月1日から14日までの2週間分のデータを取得することができます。
個別株(例:アップル)を取得する
個別株の株価データも取得できます。
例としてアップルの株価を取得してみます。
アップルのティッカーシンボルはAAPLなので、これを指定すればOKです。
1 2 3 | from pandas_datareader import data df = data.DataReader("AAPL","yahoo") |
こんな感じで取得できています。
最新データを表示するために、headではなくてtailを使っています。
これはラスト5行を表示します。
日付の指定は先ほどの同様です。
日本株も取得できます!!!
そして朗報です。
なんと日本株の株価データも取得できちゃいます。
ただし、データの取得先がyahooでは取得することができません。
日本株のデータを取得する場合にはデータの取得先をstooqとします。
ちなみにstooqはポーランドのサイトっぽいです。詳しいことはよくわかりませんw
例としてトヨタの株価データを取得してみます。
1 | df = data.DataReader('7203.JP', 'stooq') |
トヨタの証券コードは7203です。
これに.JPをつけると日本株を指定することができます。
ちゃんと取得できていることが確認できます。
ちなみにstooqの場合は日付の指定うまく動かず、存在するデータが根こそぎ取られる感じでしたw
一部は日付の指定はうまくいかずとも、ライブラリーを活用すると指数から個別株まで、あらゆるデータを取得することができます。
うまくできる方法があれば誰か教えてください。
デメリットは当日データがないこと
ただし、デメリットが一つだけあります。
それが当日のデータが存在しないことです。
上記のデータは2020年12月4日に取得したものです。
証拠のために日付を表示しておきます。
市場がすでに閉まっているにも関わらず、取得できるデータは前日の2020年12月3日までのものになります。
よって、バックテストや分析のために利用するにはいいかもしれませんが、当日のデータを必要とする場合にはなかなか厳しくなります。
この場合は、次に紹介するスクレイピングという手段を使うことになります。
参考
【2021年3月28日追記】
yahoo_finance_api2というライブラリーを使えば、当日データを含めて株価データを取得できます。
日本株のデータにもバッチリ対応しているのでおすすめです。
-
【Pythonコード解説】yahoo_finance_api2で日本株の株価データを取得する
続きを見る
yahooから日本株データも取得可能!【2021/07/20追記】
pandas_datareaderを使うと日本株のデータをyahooから取得することも可能です。
この場合、当日データも取得できます。
使い方はこれまでと同じです。
日本株を指定する際には、{証券コード}.Tの形で指定します。stooqから取得する際にと指定方法が変わるのでご注意ください。
トヨタなら7203.Tといった具合です。
期間の指定も可能です。startとendをいう引数を利用すればOKです。
指定せずとも、証券コード、情報ソース元、開始日、終了日の順番に指定すればOKです。
使い勝手抜群ですね。基本的に、特にこだわりがない場合はyahooを指定するのが便利そうです。
ただし、ざっと見たところ日足データしか取得できないようです。(指定方法わかる方いたら教えてください)
また、利用制限とかもあるかもしれないので、使いすぎには要注意です。
ちなみに日足データがあれば週足や月足に変換することが可能です。
こちらの記事で解説しております。
-
【コード解説】Pythonで株価データを日足から週足・月足に変換する!
続きを見る
複数の証券コードを指定することも可能!【2021/07/20追記】
さらに複数の証券コードを指定することも可能です。
この場合はリスト形式で指定します。
例として、トヨタと日産のデータをまとめて取得してみます。
こんな感じでそれぞれのデータがきちんと取得できていることがわかります。
方法③:【悪用厳禁】スクレイピングして株価を取得する
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)
ご参考になると嬉しいです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | import requests from bs4 import BeautifulSoup import pandas as pd import datetime ticker = 7203 # URLを定義 base_url = "https://kabuoji3.com/stock/{}/" url = base_url.format(ticker) # headersの設定 headers = {"User-Agent": "ご自身で設定してください"} # HTML取得 r = requests.get(url, headers=headers) soup = BeautifulSoup(r.content, "html.parser") # 株価データ抽出 rows = [] for tr in soup.findAll("tr"): # thあればコラム、なければ株価データ if tr.find("th"): columns = [x.getText().strip() for x in tr.findAll("th")] else: rows.append([x.getText().strip() for x in tr.findAll("td")]) # DataFrameに変換 df_latest = pd.DataFrame(rows, columns=columns) # 日付をdatetimeに変換 df_latest["日付"] = df_latest["日付"].apply(lambda x: datetime.datetime.strptime(x, "%Y-%m-%d")) # 日付以外のデータをfloatに変換 for col in ["始値", "高値", "安値", "終値", "出来高", "終値調整"]: df_latest[col] = df_latest[col].astype(float) # "終値調整"を削除 df_latest.drop("終値調整", axis=1) |
コメントをたくさんつけたので、順番に追っていくと理解しやすいかと思います。
適当に書いたので、関数もなしにベタ書きですがw
headersを入れないとエラーになります
ここでrequestsで使用しているheadersについて解説しておきます。
「株式投資メモ」の場合は、これがないとこんな感じでエラーになります。
403エラーなのでアクセス拒否ですねw
この場合は、リクエストを送る際にheader情報としてUser-Agent情報を付与してあげると解決できます。
header情報は、サーバーがリクエストを受けた時に利用されており、「どんな奴がリクエストを送ってきたのかな〜」とチェックするために使います。(その他の使い方もあります)
そして条件に合致しない場合にはリクエストを拒否するみたいな処理ができるんですね。
今回はそれにぶちあたったので、ここを突破します。
そのためにはUser-Agent情報を付与します。
これは自分が利用しているブラウザ情報です。
Chromeをお使いなら、右クリックして「検証」をクリックし、Networkタブから確認することができます。
僕の場合だとこんな感じですね。
ここの「Mozilla~~~」の部分をガバッとコピーしてコードの「"ご自身で設定してください"」と置き換えてください。
これでブラウザ情報を送ることができ、きちんとデータを取得することができるようになります。
最強は方法②あるいは方法②と方法③の合わせ技
一番楽なのは、方法②でご紹介したpandas_datareaderでyahooからデータを取得することです。
期間の指定もできて大変便利です。
ただし、これには利用制限があるかもしれないので、調子に乗ってデータを取りまくってるとアクセスが禁止される可能性も無きにしも非ずです。
よって、バックアッププランとして、方法②と方法③を組み合わせる方法をご紹介します。
スクレイピングには極力配慮しましょう!
ただ、「株式投資メモ」がスクレイピングを禁止していないと言っても、それでもサイトに負担をかけるのは忍びないので、ここは配慮しておいたほうが親切です。
スクレイピングを行う際にはサーバーに配慮をきかせて優しさを前面に押し出していくべきですw
配慮したやり方として、ここでは過去データはライブラリーを利用して取得して、最新のデータだけを「株式投資メモ」からスクレイピングで取得するというやり方ご紹介します。
方法②と方法③の合わせ技になります。
スクレイピングする際には、対象サイトに極限まで配慮しながらやっていきます。
「株式投資メモ」のデータは株式分割が考慮されていない
もう一つ理由を挙げておくと、「株式投資メモ」の株価データは株式分割などの株価調整がなされていないのに対して、方法②で紹介したやり方ではここが調整されています。
よって、最新データを「株式投資メモ」からいただき、過去データはライブラリーから取得することでデータ整形が楽になります。
(やる人いないと思いますが、)「株式投資メモ」からデータを根こそぎとる場合には、株式分割などの調整を自分で行う必要があります。
これは過去の株式分割・併合のデータを集めて適用させる必要があります。
相当大変なので、ここで紹介するライブラリーとスクレイピングの合わせ技がベストだと思います。
コード紹介
それではコードの一例をご紹介します。
ザザーっと書いたので汚いかもですが、参考にしていただけたらと思います。
スクレイピングが禁止されていないと言っても、利用する際にはモラルの範疇で行うようにしてください。
とんでもない回数のリクエストを送ると、サーバーへ大きな負担をかけることになります。
複数銘柄取得する際には数秒の間隔をあけるとか、配慮しながらやってくださいますようお願いします!
それではコードをどうぞ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | import requests from bs4 import BeautifulSoup import pandas as pd import datetime from pandas_datareader import data def get_price_from_kabuoji3(ticker): """ https://kabuoji3.com/から株価データを取得する """ # URLを定義 base_url = "https://kabuoji3.com/stock/{}/" url = base_url.format(ticker) # headersの設定 headers = {"User-Agent": "ご自身で設定してください"} # HTML取得 r = requests.get(url, headers=headers) soup = BeautifulSoup(r.content, "html.parser") # 株価データ抽出 rows = [] for tr in soup.findAll("tr"): # thあればコラム、なければ株価データ if tr.find("th"): columns = [x.getText().strip() for x in tr.findAll("th")] else: rows.append([x.getText().strip() for x in tr.findAll("td")]) # DataFrameに変換 df_latest = pd.DataFrame(rows, columns=columns) # 日付をdatetimeに変換 df_latest["日付"] = df_latest["日付"].apply(lambda x: datetime.datetime.strptime(x, "%Y-%m-%d")) # 日付以外のデータをfloatに変換 for col in ["始値", "高値", "安値", "終値", "出来高", "終値調整"]: df_latest[col] = df_latest[col].astype(float) # "終値調整"を削除して返す return df_latest.drop("終値調整", axis=1) def main(ticker): # https://kabuoji3.com/ からデータを取得する df_latest = get_price_from_kabuoji3(7203) # pandas_datareaderから株価データを取得する df_past = data.DataReader('{}.JP'.format(ticker), 'stooq') # indexがDateになっているのでリセットする df_past.reset_index(inplace=True) # カラム名を合わせる df_past.columns = df_latest.columns # df_pastより新しいデータを抽出して結合する df = pd.concat([df_latest[df_latest["日付"]>df_past["日付"].max()], df_past]) # 日付でソートする df.sort_values(by="日付", inplace=True) # indexをリセット df.reset_index(inplace=True, drop=True) return df |
一気にコードを出してしまったので、なるべく多くコメントをつけました。
コメントを確認しながら順番に見ていただけるとわかりやすいのではないかなと思います。
これで任意の証券コードを指定すれば、株価データを取得することができます。
スクレイピングしたデータについては型変換などのデータ整形がきちんとされて、ライブラリーから取得したデータときちんと結合されていることがわかります。
このやり方なら、株式分割などを気にする事なく取得することができ、ライブラリーの弱点である最新のデータも合わせて取得することができるようになります。
こちらのコードはご自由にお使いいただきつつ、適宜改善していっちゃってください。
ただしスクレイピングのやりすぎにはご注意を。
繰り返しになりますが、複数銘柄を連続で取得する場合には、間隔を空けるなどの配慮をお願いします。
日付の指定はデータ取得後に!
ちなみにですが、日付を指定したい場合はデータ取得後にできます。
取得時には引数に日付を指定してもうまく機能しないので、とりあえず全部とって、後から整形する感じになります。
例としてはこんな感じです。
先ほどのトヨタ自動車で2020年のデータを抽出します。
こんな感じでフィルタリングすれば、任意のデータを抽出することができます。
遅延はあります・・・yahoo_finance_api2で解決できます
ただ、この合わせ技については弱点なしと書きましたが、実際にはデータの反映には遅延があります。
方法②よりかは遅延は小さくなりますが、それでも遅延は発生します。
この問題を解決するライブラリーとしてyahoo_finance_api2というものがあるので、ぜひこちら↓の記事をご参照ください。
参考
【2021年3月28日追記】
yahoo_finance_api2というライブラリーを使えば、当日データを含めて株価データを取得できます。
日本株のデータにもバッチリ対応しているのでおすすめです。
-
【Pythonコード解説】yahoo_finance_api2で日本株の株価データを取得する
続きを見る
(おまけ)方法④:APIを利用する
最後におまけとして4つ目の方法を紹介しておきます。
それがAPIです。
日本の証券会社では、この記事を書いている2020年12月4日時点ではauカブコム証券株式会社が提供しています。
これを使うとAPI経由で株価データを取得できるので、簡単に株価データを取得できるようになります。
感覚的には方法②のライブラリーに近いようなイメージです。
さらにAPIを経由して株の売買注文などもできるので、完全な自動売買ができるようになります。
僕はauカブコム証券株式会社のアカウントを持っていないので利用することができませんが、選択肢としてはアリだと思うので紹介しておきます。
データの分析・可視化にはPythonが最適!
本記事で紹介したコードは、全てPythonを使って書いています。
Pythonはデータの分析や可視化を得意とするプログラミング言語で、さらにAI関連のライブラリーも豊富で昨今のAIブームで需要が急拡大しています。
→ 【いますぐ始められます】データ分析をするならPythonが最適です。
また、Pythonは比較的学びやすい言語でもあります。
実際、僕は社会人になってからPythonを独学で習得して転職にも成功し、Python独学をきっかけに人生が大きく変わりました。
→ 【実体験】ゼロからのPython独学を決意してから転職を掴み取るまでのお話。
Pythonの学習方法についてはいろいろな方法があります。
僕はUdemyを選びましたが、書籍やプログラミングスクールも選択肢になります。
→ 【決定版】Python独学ロードマップ【完全初心者からでもOKです】
→ 【まとめ】Pythonが学べるおすすめプログラミングスクール
→ プログラミングの独学にUdemyをおすすめする理由!【僕はUdemyでPythonを独学しました!】
まとめ
いかがでしたでしょうか。
今回は、「Pythonで株価データを取得する」というテーマで、株価データを取得する3つの方法についてコード付きで解説しました。
Pythonはシンプルなコードで複雑な処理ができるので、武器にできるとかなり重宝します。
転職でも有利になりますし、わりと短期間で習得できるのでオススメです。
こちらで紹介したコードも自由にパクりつつ、参考にしてもらえたら嬉しいです。
今回はかなり長い記事になってしまいましたが、ここまで読んでくださってありがとうございました。
また、Pythonで株価データを扱う記事については記事が散在しているのでこちらにまとめました!
テクニカル分析の計算方法や可視化についてはこちらからどうぞ。
-
【まとめ】Pythonで株価データを扱う
続きを見る
参考
【2021年3月28日追記】
本記事で紹介した方法だと、最新のデータの反映に時間がかかります。
yahoo_finance_api2というライブラリーを使えば、当日データを含めて株価データを取得できます。
日本株のデータにもバッチリ対応しているのでおすすめです。
-
【Pythonコード解説】yahoo_finance_api2で日本株の株価データを取得する
続きを見る