admin 發表於 2023-3-23 23:36:25

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

抓取台股證交所每日股價資料與使用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 = 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]
查看完整版本: 抓取台股證交所每日股價資料與使用pandas進行分析