iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0
AI & Data

從網路爬蟲到資料洞察的應用系列 第 4

解析 JSON → 提取日期、收盤價、成交量

  • 分享至 

  • xImage
  •  

昨天我們已經用 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 物件,裡面有很多欄位:

  • date → 日期
  • capacity → 成交量
  • turnover → 成交金額
  • open / high / low / close → 開盤、最高、最低、收盤價
  • change → 漲跌
  • transaction → 成交筆數

提取需要的欄位

因為 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更精簡。
那今天就先這樣。
/images/emoticon/emoticon29.gif


上一篇
利用 twstock 套件快速取得股市資料
下一篇
轉換成 pandas DataFrame
系列文
從網路爬蟲到資料洞察的應用5
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言