はじめに
jsmを使えば、日本の銘柄の株価を簡単に取得できます。
パッケージ・バージョン
jsm : 0.19
コード
import datetime as dt from pandas import DataFrame import jsm import pandas_datareader.data as web import matplotlib.pyplot as plt def jpstock(code, start_date, end_date): year, month, day = start_date.split("-") start = dt.date(int(year), int(month), int(day)) year, month, day = end_date.split("-") end = dt.date(int(year), int(month), int(day)) print('CSVを出力中...') q = jsm.Quotes() target = q.get_historical_prices(code, jsm.DAILY, start_date=start, end_date=end) date = [data.date for data in target] open = [data.open for data in target] high = [data.high for data in target] low = [data.low for data in target] close = [data.close for data in target] volume = [data.volume for data in target] adj_close = [data._adj_close for data in target] Date = date[::-1] Open = open[::-1] High = high[::-1] Low = low[::-1] Close = close[::-1] Adj = adj_close[::-1] Vol = volume[::-1] cdf = DataFrame(index=Date) cdf.index.name = "Date" cdf["Open"] = Open cdf["High"] = High cdf["Low"] = Low cdf["Close"] = Close cdf["Adj Close"] = Adj cdf["Volume"] = Vol cdf.to_csv(code + '.csv') print(code + '.csvを出力しました.') print('株価データをプロット中...') df = DataFrame(index=Date) df['Adj Close'] = Adj return df code='8411' start_date = '2018-01-01 ' end_date = '2018-09-01 ' try: jstock = jpstock(code, start_date, end_date) jstock['Adj Close'].plot() plt.show() except: print('データの取得中にエラーが発生しました.')
銘柄コード(8411)の2018年1月1日から9月1日までに株価の推移
ワーニングの対処
jsmでユーザーワーニングが発生しますが、実行には問題ありません。ワーニングに対処する場合は、以下のように修正してください。
- 修正前 [util.py]
soup = BeautifulSoup(html)
- 修正後 [util.py]
soup = BeautifulSoup(html, 'html.parser')
GUI版も提供されていました
参考記事のほうで、GUI版も提供されていました。
pyqt5というパッケージをインストールする必要があります。
pip install pyqt5
参考記事
以下の記事を参考にしました。