設為首頁收藏本站

艾歐踢論壇

 找回密碼
 立即註冊

QQ登錄

只需一步,快速開始

搜索
熱搜: 活動 交友 discuz
查看: 299|回復: 0
打印 上一主題 下一主題

抓取台股證交所每日股價資料與使用pandas進行分析

[複製鏈接]
跳轉到指定樓層
樓主
發表於 2023-3-23 23:36:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
抓取台股證交所每日股價資料與使用pandas進行分析
  1. import numpy as np
  2. import requests
  3. import pandas as pd
  4. import datetime

  5. #   http://www.twse.com.tw/exchangeReport/STOCK_DAY?date=20180817&stockNo=2330  取一個月的股價與成交量
  6. def get_stock_history(date, stock_no):
  7.     quotes = []
  8.     url = 'http://www.twse.com.tw/exchangeReport/STOCK_DAY?date=%s&stockNo=%s' % ( date, stock_no)
  9.     r = requests.get(url)
  10.     data = r.json()
  11.     return transform(data['data'])  #進行資料格式轉換

  12. def transform_date(date):
  13.         y, m, d = date.split('/')
  14.         return str(int(y)+1911) + '/' + m  + '/' + d  #民國轉西元
  15.    
  16. def transform_data(data):
  17.     data[0] = datetime.datetime.strptime(transform_date(data[0]), '%Y/%m/%d')
  18.     data[1] = int(data[1].replace(',', ''))  #把千進位的逗點去除
  19.     data[2] = int(data[2].replace(',', ''))
  20.     data[3] = float(data[3].replace(',', ''))
  21.     data[4] = float(data[4].replace(',', ''))
  22.     data[5] = float(data[5].replace(',', ''))
  23.     data[6] = float(data[6].replace(',', ''))
  24.     data[7] = float(0.0 if data[7].replace(',', '') == 'X0.00' else data[7].replace(',', ''))  # +/-/X表示漲/跌/不比價
  25.     data[8] = int(data[8].replace(',', ''))
  26.     return data

  27. def transform(data):
  28.     return [transform_data(d) for d in data]

  29. def create_df(date,stock_no):
  30.     s = pd.DataFrame(get_stock_history(date, stock_no))
  31.     s.columns = ['date', 'shares', 'amount', 'open', 'high', 'low', 'close', 'change', 'turnover']
  32.                 #"日期","成交股數","成交金額","開盤價","最高價","最低價","收盤價","漲跌價差","成交筆數"
  33.     stock = []
  34.     for i in range(len(s)):
  35.         stock.append(stock_no)
  36.     s['stockno'] = pd.Series(stock ,index=s.index)  #新增股票代碼欄,之後所有股票進入資料表才能知道是哪一張股票
  37.     datelist = []
  38.     for i in range(len(s)):
  39.         datelist.append(s['date'][i])
  40.     s.index = datelist  #索引值改成日期
  41.     s2 = s.drop(['date'],axis = 1)  #刪除日期欄位
  42.     mlist = []
  43.     for item in s2.index:
  44.         mlist.append(item.month)
  45.     s2['month'] = mlist  #新增月份欄位
  46.     return s2
  47.         
  48. listDji = ['2330']
  49. for i in range(len(listDji)):
  50.     result = create_df('20180701', listDji[i])
  51.     print(result)
  52.    
  53. print(result.groupby('month').close.count())  #每個月幾個營業日
  54. 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以外幣交易。"]}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 轉播轉播 分享分享 分享淘帖
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

小黑屋|Archiver|手機版|艾歐踢創新工坊    

GMT+8, 2024-5-16 00:34 , Processed in 0.266029 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表