株価をスクレイピングして、グラフ表示する。 いろいろググって、やっと収まった。
プログラムを2つに分けて
(1)データ取得編
Yahoo financeから「安川電機:6506」の2016/4/1-2017/5/1 の株価をGet
(2)グラフ化編
CSVに落としたデータを成形してグラフ化
(1)データ取得編
stockDataGet.py
最初のSSL 2行は、Yahoo Webでの SSLでつまずいたので入れた。
(2)グラフ化編
つぎに、入手した株価データをグラフ化する
プログラムを2つに分けて
(1)データ取得編
Yahoo financeから「安川電機:6506」の2016/4/1-2017/5/1 の株価をGet
(2)グラフ化編
CSVに落としたデータを成形してグラフ化
(1)データ取得編
stockDataGet.py
最初のSSL 2行は、Yahoo Webでの SSLでつまずいたので入れた。
# -*- coding: utf-8 -*-import sslssl._create_default_https_context = ssl._create_unverified_context
from bs4 import BeautifulSoupimport urllib2import timeimport numpy as npimport pandas as pd
page_num = 90 #適当に多めのページ数stock_temp = []
# Code# 6506.T : yasukawa
for i in range(page_num): url = "https://info.finance.yahoo.co.jp/history/?code=6506.T&sy=2016&sm=4&sd=1&ey=2017&em=5&ed=1&tm=d&p=" + str(i+1)
html = urllib2.urlopen(url) soup = BeautifulSoup(html,"lxml")
table = soup.find_all("table",{"class":"boardFin yjSt marB6"})[0] stock_extract = [value.get_text() for value in table.find_all("td")] stock_temp.extend(stock_extract)
time.sleep(0.4)
stock_temp = np.array(stock_temp)
stock = stock_temp.reshape(int(len(stock_temp)/7), 7) #取得データは7項目stock = pd.DataFrame(stock[:,1:8],index=stock[:,0])#stock = pd.DataFrame(stock[:,1:8],columns=["date","start","high","low","end","volumns","adjusted"], index=stock[:,0])
# 取得した株価データのカンマ , を外す作業。ほんとに必要?
for i in range(6): stock.ix[:,i] = stock.ix[:,i].astype(str) stock.ix[:,i] = stock.ix[:,i].str.replace(",","").astype(float)
# Save to csv file.stock.to_csv('stock_yasukawa.csv',encoding='UTF-8')
(2)グラフ化編
つぎに、入手した株価データをグラフ化する
stockAnalyse.py
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.finance as mpf
from matplotlib.dates import date2num
fig = plt.figure()ax = plt.subplot()
# indexとして使う日付を、matplotlib.finance.candlestick_ohlc関数で使えるようにtype変換する
# 日本語がなければ、pandas.read_csv の parse_dates で変換できたそうだ。
# Japanese date (string) -> Timestamp datefmt='%Y年%m月%d日'my_parser=lambda date: pd.datetime.strptime(date,fmt)df=pd.read_csv('stock_yasukawa.csv',index_col=0,parse_dates=0,date_parser=my_parser)df=df.sort_index(ascending=True)
# mpf.candlestick_ohlc use "datetime"xdate = [x.date() for x in df.index] # Timestamp -> datetimeohlc = np.vstack((date2num(xdate),df.values.T)).Tmpf.candlestick_ohlc(ax,ohlc,width=0.7,colorup='g',colordown='r')
ax.grid()ax.set_xlim(df.index[0].date(),df.index[-1].date()) # range of X-axisfig.autofmt_xdate()
コメント