昨天我們已經用 twstock 成功抓到台積電 (2330) 的股票交易資料。這些資料背後其實就是一種 JSON 結構:由鍵與值組成,並按照固定格式存放在清單裡。
今天我們的目標是從 JSON 結構中,挑出我們最常用的三個欄位 → 日期 (date)、收盤價 (close)、成交量 (capacity),並將它們提取成 Python 可以使用的 list。
先用 twstock 抓資料,一樣以台積電 (2330) 為例:
import twstock
# 抓取台積電 (2330) 最近 30 筆資料
stock = twstock.Stock('2330')
# 看最後一筆資料長什麼樣子
print(stock.data[-1])
範例輸出 (內容會隨時間不同):
Data(date=datetime.date(2025, 9, 12), capacity=27761917, turnover=16263555971,
open=1170.0, high=1185.0, low=1160.0, close=1175.0, change=0.0, transaction=21064)
可以發現每一筆資料都像是一個 JSON 物件,裡面有很多欄位:
因為 twstock.Stock 幫我們把 JSON 轉成 NamedTuple 物件,所以我們可以很方便地一次取出整個欄位的清單。
# 日期清單
dates = stock.date
# 收盤價清單
closes = stock.close
# 成交量清單
volumes = stock.capacity
print("日期:", dates[:5])
print("收盤價:", closes[:5])
print("成交量:", volumes[:5])
範例輸出:
日期: [datetime.date(2025, 8, 6), datetime.date(2025, 8, 7), datetime.date(2025, 8, 8), datetime.date(2025, 8, 11), datetime.date(2025, 8, 12)]
收盤價: [1125.0, 1180.0, 1175.0, 1180.0, 1185.0]
成交量: [26534566, 30123450, 27890123, 28901234, 25678901]
這樣我們就完成了「欄位分離」的第一步,現在每個欄位都是一個獨立的 list。
如果我們想把資料合併在一起,方便後續處理,也可以用 zip() 將三個欄位合併成 tuple:
# 把三個欄位打包在一起
stock_data = list(zip(dates, closes, volumes))
# 只看前 5 筆
for row in stock_data[:5]:
print(row)
範例輸出:
(datetime.date(2025, 8, 6), 1125.0, 26534566)
(datetime.date(2025, 8, 7), 1180.0, 30123450)
(datetime.date(2025, 8, 8), 1175.0, 27890123)
(datetime.date(2025, 8, 11), 1180.0, 28901234)
(datetime.date(2025, 8, 12), 1185.0, 25678901)
這樣每一筆資料就只包含我們需要的三個欄位,看起來就像壓縮過的 JSON更精簡。
那今天就先這樣。