今回からAccessを用いて、株価データを蓄積し、これらデータから株価指標を計算するクエリを作成する方法をシリーズとして紹介していきます。第1回目は、Pythonを用いたデータスクレイピングについて紹介します。
第1回目ではAccessの話は一切出てきませんので、その点はご了承ください。
さて、最近ではデータ分析のためにスクレイピング技術が急速に発達しており、Pythonを用いた方法があらゆる場面で見受けられます。
ここで、Pythonとは1990年代に公開され、誰でも理解しやすいように構築されたプログラミング言語です。実は、Pythonは高い拡張性があり、様々なアプリケーション開発や、科学技術計算等に利用されており、特に、最近では機械学習用途でも人気を博しています。
著者もPythonを使って必要なデータをスクレイピングしていますので、本記事では、その方法を紹介します。
Pythonの開発環境やその使い方は様々なサイトで紹介されていますので、本サイトではこれら内容の紹介は割愛します。もし、どうしても分からないという方がおられましたら、本HPのお問い合わせフォームからご質問ください。なお、著者もPythonをしっかりと理解しているわけではありませんが、見よう見まねでトライアンドエラーを繰り返しながら必要なデータを取得しています。
Pythonの開発環境について
先にも述べましたとおり、Pythonの開発環境については他のサイトを参考に構築していただければと思いますが、以下のサイトからインストーラーをダウンロードし、インストールをすることでPythonを使うことができるようになります。
次に、株価データのスクレイピングをする上では、Pythonで用いるライブラリとして「pandas」、「yahoo_finance_api2」を追加しておく必要があります。
コマンドプロンプトを開いて、「pip install pandas」、「pip install yahoo_finance_api2」を実行することで、それぞれのライブラリをインストールすることができます。
Pythonコードとファイル保存
Pythonで株価データを取得する準備ができましたので、以下のコードをテキストエディタに入力します。
import pandas as pd import sys from yahoo_finance_api2 import share from yahoo_finance_api2.exceptions import YahooFinanceError import datetime import csv #株価コード、企業名を入力のこと code = ["7203","9432"] #出力用 df_list = [] df_list.append(["コード, 年月日, 現在株価"]) #株価の取得 for code in code: my_share = share.Share(code + ".T") symbol_data = None #株価条件の取得 try: #3ヵ月、日足 symbol_data = my_share.get_historical( share.PERIOD_TYPE_DAY, 3, share.FREQUENCY_TYPE_DAY, 1) except YahooFinanceError as e: print(e.message) sys.exit(1) #データフレームに値を格納 df = pd.DataFrame(symbol_data) df["datetime"] = pd.to_datetime(df.timestamp, unit="ms") #日本時間への変換 df["datetime_JST"] = df["datetime"] + datetime.timedelta(hours=9) #日付を指定したい場合 #df = df[(df["datetime_JST"]>=start_date) & (df["datetime_JST"]<=end_date)] #インデックス列の追加 df.insert(0, "index", [x for x in range(len(df))]) df = df.set_index("datetime_JST") #timestampは不要のため削除 df = df.drop(columns = "timestamp") #株価抽出 df_sort = df.sort_values(["datetime_JST"], ascending = False) df_list.append([code, df_sort.index[0].strftime("%Y/%m/%d") ,df_sort.iloc[0,4]]) with open("C:\\TEST\\" + datetime.datetime.now().strftime("%y%m%d") + "_StockValue.csv", "w", newline="", encoding="utf-16") as f: #csvファイルを書き込みモードで開く writer = csv.writer(f, dialect="excel-tab") #書き込み設定 writer.writerows(df_list)
Pythonではインデントがネストに相当しますのでご注意ください。
また、作成したファイルをPythonで動かすためには、「py」という拡張子にする必要があります。
そこで、上記コードをテキストエディターで記載した後、ファイルを「C:¥TEST¥StockValue.py」として保存することとします(ファイルの保存先は自由です。)。この際、文字コードは「UTF-8」としてください。
本記事では、コードの具体的な内容の説明を割愛しますが、ポイントとしては、コード中に「code = [“7203″,”9432”]」という記載をしている点です。これらは、トヨタ自動車株式会社と日本電信電話株式会社の銘柄コードを示しており、「.T」は東証を示すものです。別の会社のデータを得たい場合は、「7203」や「9432」の値を対象の銘柄コードに修正してください。
これで、Pythonで動かすコードを作成することができました。続いて動作確認をしましょう。
Pythonプログラムの実行
まずは、Pythonを実行するためにコマンドプロンプトを開きます。Windowsキーを押下した後、「cmd」とキーボード入力するとコマンドプロンプトが表示されますので、実行します。
コマンドプロンプトが開いた後、図1に示すように「python -V」と入力するとインストールされているPythonのバージョンが表示されますが、これで、Pythonを実行することができる環境であることを確認できます。
続いて、Pythonにより先ほど作成したプログラムを実行します。コマンドプロンプトで「python C:\TEST\StockValue.py」と入力してEnterキーを押下してください。
これで、プログラムが実行されしばらくすると「C:\TEST」フォルダに「YYMMDD_StockValue.csv」ファイルが出来上がります(YYMMDDは実行日が反映されます。)。
作成されたファイルをテキストエディタで開くと図2のような結果が得られ、当日の株価終値のデータを得ることができるようになりました。
このようにして、Pythonを活用することで簡単に株価のデータを取得することができましたが、検索したい銘柄のコードを複数登録しておけば、すぐに必要データを取得することができます。
まとめ
今回は、Accessで株価データを管理するための下準備として、Pythonによるスクレイピングについて紹介しました。昨今ではPythonを用いることで簡単に欲しいデータを大量に取得することができますので、今回紹介した内容をきっかけに学習を進めていただけると様々な場面で活用することができ、業務効率を改善することにも繋げられると思います。
スポンサーリンク
次回は、AccessからPythonを実行する方法を紹介していきます。
コメント