抓取台股證交所每日股價資料與使用pandas進行分析
抓取台股證交所每日股價資料與使用pandas進行分析import numpy as npimport requests
import pandas as pd
import datetime
# http://www.twse.com.tw/exchangeReport/STOCK_DAY?date=20180817&stockNo=2330取一個月的股價與成交量
def get_stock_history(date, stock_no):
quotes = []
url = 'http://www.twse.com.tw/exchangeReport/STOCK_DAY?date=%s&stockNo=%s' % ( date, stock_no)
r = requests.get(url)
data = r.json()
return transform(data['data'])#進行資料格式轉換
def transform_date(date):
y, m, d = date.split('/')
return str(int(y)+1911) + '/' + m+ '/' + d#民國轉西元
def transform_data(data):
data = datetime.datetime.strptime(transform_date(data), '%Y/%m/%d')
data = int(data.replace(',', ''))#把千進位的逗點去除
data = int(data.replace(',', ''))
data = float(data.replace(',', ''))
data = float(data.replace(',', ''))
data = float(data.replace(',', ''))
data = float(data.replace(',', ''))
data = float(0.0 if data.replace(',', '') == 'X0.00' else data.replace(',', ''))# +/-/X表示漲/跌/不比價
data = int(data.replace(',', ''))
return data
def transform(data):
return
def create_df(date,stock_no):
s = pd.DataFrame(get_stock_history(date, stock_no))
s.columns = ['date', 'shares', 'amount', 'open', 'high', 'low', 'close', 'change', 'turnover']
#"日期","成交股數","成交金額","開盤價","最高價","最低價","收盤價","漲跌價差","成交筆數"
stock = []
for i in range(len(s)):
stock.append(stock_no)
s['stockno'] = pd.Series(stock ,index=s.index)#新增股票代碼欄,之後所有股票進入資料表才能知道是哪一張股票
datelist = []
for i in range(len(s)):
datelist.append(s['date'])
s.index = datelist#索引值改成日期
s2 = s.drop(['date'],axis = 1)#刪除日期欄位
mlist = []
for item in s2.index:
mlist.append(item.month)
s2['month'] = mlist#新增月份欄位
return s2
listDji = ['2330']
for i in range(len(listDji)):
result = create_df('20180701', listDji)
print(result)
print(result.groupby('month').close.count())#每個月幾個營業日
print(result.groupby('month').shares.sum())# 每個月累計成交股數 shares amount open...turnoverstocknomonth
2018-07-02 33496442 7257081470218.5... 8508 2330 7
2018-07-03 28663220 6173115899215.5... 7758 2330 7
2018-07-04 15359295 3324927032217.0... 5434 2330 7
2018-07-05 18225416 3904832940214.0... 5581 2330 7
2018-07-06 31344962 6779063394217.5... 8620 2330 7
2018-07-09 41165793 9100880393219.5... 14795 2330 7
2018-07-10 20196957 4498264914223.0... 6922 2330 7
2018-07-11 19854690 4355547100220.0... 7437 2330 7
2018-07-12 23806051 5246628771218.0... 7885 2330 7
2018-07-13 30419311 6799894334222.5... 11723 2330 7
2018-07-16 16107254 3612296896224.5... 6321 2330 7
2018-07-17 22554436 5003028272222.5... 8636 2330 7
2018-07-18 4580265810221407834223.0... 12139 2330 7
2018-07-19 43976216 9930715930225.5... 12076 2330 7
2018-07-2010365202324367904428235.0... 39544 2330 7
2018-07-23 5226987712621500480239.0... 19777 2330 7
2018-07-24 27468267 6599675515240.0... 10574 2330 7
2018-07-25 21530312 5173924310239.0... 8491 2330 7
2018-07-26 30856388 7435261120241.0... 10235 2330 7
2018-07-27 27129646 6605479210242.0... 12493 2330 7
2018-07-30 22803730 5585710909244.5... 9953 2330 7
2018-07-31 28202542 6912550610243.5... 9460 2330 7
month
7 22
Name: close, dtype: int64
month
7 704885486
Name: shares, dtype: int64
使用網址「http://www.twse.com.tw/exchangeReport/STOCK_DAY?date=20180817&stockNo=2330」,由證交所所提供的網址,可以經由stockNo指定股票編號,date指定股票日期,以json格式回傳一個月的股價與交易量,以下為回傳結果。{"stat":"OK","date":"20180817","title":"107年08月 2330 台積電 各日成交資訊","fields":["日期","成交股數","成交金額","開盤價","最高價","最低價","收盤價","漲跌價差","成交筆數"],"data":[["107/08/01","29,777,161","7,375,488,342","247.00","248.00","246.50","248.00","+2.00","11,667"],["107/08/02","22,775,110","5,611,725,541","249.00","249.50","243.50","244.50","-3.50","10,343"],["107/08/03","25,165,097","6,205,758,662","246.00","248.00","245.00","247.00","+2.50","9,585"],["107/08/06","22,364,568","5,487,396,854","245.00","247.00","244.00","245.50","-1.50","9,732"],"notes":["符號說明:+/-/X表示漲/跌/不比價","當日統計資訊含一般、零股、盤後定價、鉅額交易,不含拍賣、標購。","ETF證券代號第六碼為K、M、S、C者,表示該ETF以外幣交易。"]}
頁:
[1]