技術屋にゃん兵衛のてくてくらぼ by データウィズ [DataWith]

気の向くままソフトについて書いてます。バリバリエンジニアではないのであくまでも初心者目線で。

Yahoo!ファイナンスで過去の株価を抜き出してみた

Yahoo!ファイナンスで過去の株価を抜き出してみた

 

機械学習の学習用データとして、またグラフの記事を書く際のデータとして、企業の株価を取りたいけど抜き出せる方法はないかな、と少し考えてきました。

 

で、Yahoo!ファイナンスページのHTMLをソースを保存してみると、中に日別/週別の「始値」「高値」「安値」「終値」「出来高」があることがわかりました。

 

これは、下のような画面上のグラフを書くために埋め込まれたもののようです。

で、グラフの下の期間を選択して保存すると、その期間のデータがソース内に埋め込まれています。

Yahoo!ファイナンスの株価グラフ

 

ブラウザの「ソースを表示」を選択して、ソースを表示し、それをテキストエディターなどにコピーします。

 

ソースをずっと下のほうに見ていくと

{"latestHistoryBaseDatetime":"2023-12-26T00:00:00+09:00",
"histories":[{"baseDatetime":"2021-11-29T00:00:00+09:00",
"openPrice":3282,"highPrice":3426,"lowPrice":3250,
"closePrice":3419,"volume":20888100},{"baseDatetime":"
2021-1206T00:00:00+09:00","openPrice":3460,"highPrice":3525,
"lowPrice":3391,"closePrice":3460,"volume":17387400},

というセクションがあります。

 

「2年」で抜き出した場合、90個データがあるので、おそらく週次のデータなのでしょう。「6カ月」でエクスポートすると、日時で取れました。「1年」は週次です。

 

さて、テキストエディターで、このブロックだけを残して、前後をすべて削除します。始まりと終わりはこんな感じ。

{"baseDatetime":"2023-05-30T00:00:00+09:00","openPrice":4942,"highPrice":4955,
"lowPrice":4893,"closePrice":4953,"volume":3231400},

{"baseDatetime":"2023-12-26T00:00:00+09:00","openPrice":5798,"highPrice":5808,
"lowPrice":5758,"closePrice":5783,"volume":1444000}

 

Excelで開いてみると、下のように1行にずらっと並ぶし、各項目にタイトルがついたままです。

そのままExcelで開いてみると

 

データの並びとしては

{"baseDatetime": “日付”, "openPrice":始値, "highPrice":高値,"lowPrice":安値,"closePrice":終値,"volume":出来高}, {"baseDatetime": “日付”, "openPrice":始値, "highPrice":高値,"lowPrice":安値,"closePrice":終値,"volume":出来高}, {}, {}, {}

のような感じです。

プログラムを作れば、データ部の抜出から、CSVの成形まで、一気にできそうです。

これはAIのためのデータの前処理だと考えればいいでしょう。

 

目標のデータ形式は、

baseDatetime, openPrice, highPrice, lowPrice, closePrice, volume
日付, 始値, 高値, 安値, 終値, 出来高
日付, 始値, 高値, 安値, 終値, 出来高
日付, 始値, 高値, 安値, 終値, 出来高

です。

 

すぐにコードを書いて試すには、Google Colaboratoryが便利なので、それを使って処理してみます。

 

  1. 新しいノートブックを作成し、左端のフォルダアイコンをクリックしてファイル管理のペインを出し、そこに先ほどのファイルをアップロードします。

    テキストファイルをGoogle Colaboratoryにアップロード
  2. 次のようなPythonコードを入れて、CSVに成形します。どの文字を捜査しているかをわかりやすくるために、何行かに分けて書いています。

    file_path = '/content/Stock_Price.txt'

    with open(file_path, 'r') as file:
        content = file.read()


    modified_text = content.replace('},', '},\n')
    modified_text = modified_text.replace('{"baseDatetime":"', "")
    modified_text = modified_text.replace('T00:00:00+09:00"', "")
    modified_text = modified_text.replace('"openPrice":', "")
    modified_text = modified_text.replace('"highPrice":', "")
    modified_text = modified_text.replace('"lowPrice":', "")
    modified_text = modified_text.replace('"closePrice":', "")
    modified_text = modified_text.replace('"volume":', "")
    modified_text = modified_text.replace('},', "")
    modified_text = modified_text.replace('}', "")
    modified_text = "baseDatetime, openPrice, highPrice, lowPrice, closePrice, volume\n" + modified_text

    print(modified_text)

     

  3. 次のような出力が返ってきます。

    Pythonの実行結果
  4. この出力をコピーして、テキストエディタに張り付け、csvとして保存します。

    Excelで開くと次のように処理しやすい形になってます。

    整形後のファイルをExcelで開く
  5. 「高値」(C列)をプロットすると次のようになり、Yahoo!ファイナンスに表示されていたグラフと一致していることがわかります(株価は本当は箱ひげ図なんでしょうが…)。

最後に、このCSVをもとのテキストファイルと同じ場所に保存するために、コードの最後に次を追加しておきます。

file_path = '/content/Stock_Price.csv'


with open(file_path, 'w') as file:
    file.write(modified_text)

これで、ファイルもできました。

処理しやすいファイルにすることで、他の会社の株価や、商品価格などとの相関を見たりすることができるようになりました。