抓取台股證交所每日股價資料與使用pandas進行分析- import numpy as np
- import 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[0] = datetime.datetime.strptime(transform_date(data[0]), '%Y/%m/%d')
- data[1] = int(data[1].replace(',', '')) #把千進位的逗點去除
- data[2] = int(data[2].replace(',', ''))
- data[3] = float(data[3].replace(',', ''))
- data[4] = float(data[4].replace(',', ''))
- data[5] = float(data[5].replace(',', ''))
- data[6] = float(data[6].replace(',', ''))
- data[7] = float(0.0 if data[7].replace(',', '') == 'X0.00' else data[7].replace(',', '')) # +/-/X表示漲/跌/不比價
- data[8] = int(data[8].replace(',', ''))
- return data
- def transform(data):
- return [transform_data(d) for d in data]
- 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'][i])
- 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[i])
- print(result)
-
- print(result.groupby('month').close.count()) #每個月幾個營業日
- print(result.groupby('month').shares.sum()) # 每個月累計成交股數
複製代碼 shares amount open ... turnover stockno month
2018-07-02 33496442 7257081470 218.5 ... 8508 2330 7
2018-07-03 28663220 6173115899 215.5 ... 7758 2330 7
2018-07-04 15359295 3324927032 217.0 ... 5434 2330 7
2018-07-05 18225416 3904832940 214.0 ... 5581 2330 7
2018-07-06 31344962 6779063394 217.5 ... 8620 2330 7
2018-07-09 41165793 9100880393 219.5 ... 14795 2330 7
2018-07-10 20196957 4498264914 223.0 ... 6922 2330 7
2018-07-11 19854690 4355547100 220.0 ... 7437 2330 7
2018-07-12 23806051 5246628771 218.0 ... 7885 2330 7
2018-07-13 30419311 6799894334 222.5 ... 11723 2330 7
2018-07-16 16107254 3612296896 224.5 ... 6321 2330 7
2018-07-17 22554436 5003028272 222.5 ... 8636 2330 7
2018-07-18 45802658 10221407834 223.0 ... 12139 2330 7
2018-07-19 43976216 9930715930 225.5 ... 12076 2330 7
2018-07-20 103652023 24367904428 235.0 ... 39544 2330 7
2018-07-23 52269877 12621500480 239.0 ... 19777 2330 7
2018-07-24 27468267 6599675515 240.0 ... 10574 2330 7
2018-07-25 21530312 5173924310 239.0 ... 8491 2330 7
2018-07-26 30856388 7435261120 241.0 ... 10235 2330 7
2018-07-27 27129646 6605479210 242.0 ... 12493 2330 7
2018-07-30 22803730 5585710909 244.5 ... 9953 2330 7
2018-07-31 28202542 6912550610 243.5 ... 9460 2330 7
[22 rows x 10 columns]
month
7 22
Name: close, dtype: int64
month
7 704885486
Name: shares, dtype: int64
使用網址「http://www.twse.com.tw/exchangeR ... 17&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以外幣交易。"]}
|