nprogram’s blog

気ままに、プログラミングのトピックについて書いていきます

株価データをプロットして、CSVファイルを出力する方法

はじめに

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日までに株価の推移

f:id:nprogram:20180921041051p:plain

ワーニングの対処

jsmでユーザーワーニングが発生しますが、実行には問題ありません。ワーニングに対処する場合は、以下のように修正してください。

  • 修正前 [util.py]
soup = BeautifulSoup(html)
  • 修正後 [util.py]
soup = BeautifulSoup(html, 'html.parser')

github.com

GUI版も提供されていました

参考記事のほうで、GUI版も提供されていました。 pyqt5というパッケージをインストールする必要があります。 pip install pyqt5

参考記事

以下の記事を参考にしました。

qiita.com