資料科學 API 自動化 金融分析 教學

使用 Yahoo Finance API 實現農產品交易數據的自動化擷取與儲存

使用 Yahoo Finance API 實現農產品交易數據的自動化擷取與儲存

一、教學目標

  1. 知識目標:理解 Yahoo Finance API、FastAPI 服務及自動化工具(如 Make.com)的運作原理。
  2. 技能目標:學會使用 yfinance 抓取農產品交易數據,建立 FastAPI 服務,並透過 Make.com 將數據自動存入 Notion。
  3. 態度目標:培養學生對金融數據分析與自動化流程的興趣,並認識其在市場研究中的價值。

二、前置準備

適用對象

  • 對象:大學生、資料科學初學者或對金融數據與自動化有興趣者。
  • 先備知識:基礎 Python(函數、字典)、API 概念。

所需軟硬體

  1. 硬體:具備網路連線的電腦。
  2. 軟體
    • Python 3.x(建議搭配 Anaconda)。
    • Python 套件:yfinancefastapiuvicornpandasrequests
    • 文字編輯器(如 VS Code)。
    • Make.com 帳號、Notion 帳號。
  3. 其他
    • 穩定的網路環境。
    • Notion 資料庫(預先建立,包含相關欄位)。

教師準備

  • 預先安裝所有套件並測試程式碼。
  • 準備 Notion 資料庫範例(包含欄位:開盤價、最高價、最低價、收盤價、成交量)。
  • 提供 Make.com 操作截圖或影片。

三、教學流程

時間分配:總計 120 分鐘

  • 導入(15 分鐘)
  • 方法 1:使用 yfinance 抓取數據(30 分鐘)
  • 方法 2:建立 FastAPI 服務(30 分鐘)
  • 方法 3:使用 Make.com 自動化(35 分鐘)
  • 總結與討論(10 分鐘)

1. 導入(15 分鐘)

活動:情境引導

  • 教師提問
    「如果你想追蹤農產品(如黃豆、玉米)的價格變化,如何快速獲取並記錄數據?」
  • 簡介內容
    • Yahoo Finance API:提供免費金融數據。
    • FastAPI:快速建立 API 服務。
    • Make.com:自動化工具,連接 API 與 Notion。
  • 目標導引
    「今天我們將學習如何用 Python 抓取農產品交易數據,建立 API,並透過自動化工具存入 Notion,實現全流程自動化!」

2. 方法 1:使用 yfinance 抓取交易數據(30 分鐘)

講解(10 分鐘)

  • 環境設定
    • 安裝套件:
      pip install yfinance pandas
      
  • 程式說明
    • yfinance.Ticker():獲取商品數據。
    • history():提取 OHLC 與交易量。
    • 數據結構:字典格式。
  • 展示範例:運行程式並顯示黃豆數據。

實作活動(20 分鐘)

  • 學生任務
    1. 執行以下程式碼,抓取黃豆、玉米、小麥數據:
import yfinance as yf
import pandas as pd

commodities = {
    "黃豆": "ZS=F",
    "玉米": "ZC=F",
    "小麥": "ZW=F"
}

def fetch_commodity_data():
    result = {}
    for name, symbol in commodities.items():
        data = yf.Ticker(symbol).history(period="1d")
        if not data.empty:
            latest = data.iloc[-1]
            result[name] = {
                "開盤": latest["Open"],
                "最高": latest["High"],
                "最低": latest["Low"],
                "收盤": latest["Close"],
                "成交量": latest["Volume"]
            }
    return result

data = fetch_commodity_data()
print(data)
  1. 修改 period="1d""5d",觀察多日數據變化。
  • 成果檢查:確認輸出包含 OHLC 與成交量。

3. 方法 2:使用 FastAPI 建立 API 服務(30 分鐘)

講解(10 分鐘)

  • 環境設定
    • 安裝套件:
      pip install fastapi uvicorn
      
  • 程式說明
    • @app.get():定義 API 端點。
    • uvicorn.run():啟動服務。
  • 展示範例:啟動服務並用瀏覽器訪問 http://localhost:8000/commodities

實作活動(20 分鐘)

  • 學生任務
    1. 執行以下程式碼,建立 API:
from fastapi import FastAPI
import uvicorn
from your_module import fetch_commodity_data  # 假設前述函數在另一檔案

app = FastAPI()

@app.get("/commodities")
def get_commodities():
    return fetch_commodity_data()

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)
  1. 在瀏覽器或工具(如 Postman)訪問 http://localhost:8000/commodities,檢查回傳數據。
  • 成果檢查:確認 API 回傳 JSON 格式的交易數據。

4. 方法 3:使用 Make.com 介接並存入 Notion(35 分鐘)

講解(15 分鐘)

  • Make.com 設定
    • HTTP 模組:發送 GET 請求。
    • Notion 模組:連接資料庫並映射欄位。
    • 排程設定:每日更新。
  • 展示範例:展示 Make.com 流程並檢查 Notion 更新。

實作活動(20 分鐘)

  • 學生任務
    1. 在 Make.com 创建流程:
      • 添加 HTTP GET 模組
        • URL:http://localhost:8000/commodities(或公開伺服器 URL)。
      • 添加 Notion 模組
        • 選擇已有資料庫,映射字段(如 開盤價Open)。
      • 設定排程:每日 UTC 23:00。
    2. 執行流程並檢查 Notion 是否新增數據。
  • 成果檢查:確認 Notion 資料庫顯示最新交易數據。

5. 總結與討論(10 分鐘)

  • 教師總結
    • yfinance:快速獲取金融數據。
    • FastAPI:提供外部存取介面。
    • Make.com:實現自動化與資料整合。
  • 學生討論
    • 「哪種農產品的價格波動最大?」
    • 「這個流程可以用在哪些實際場景?(如投資決策、市場報告)」

四、評量方式

  1. 實作成果(70%)
    • 成功抓取並顯示交易數據(方法 1)。
    • 成功啟動 FastAPI 並訪問數據(方法 2)。
    • 成功設定 Make.com 並更新 Notion(方法 3)。
  2. 參與討論(30%)
    • 在總結時分享觀察或應用想法。

五、延伸應用

  1. 進階挑戰
    • 修改 yfinance 程式,抓取多月數據並計算平均價格。
    • 在 FastAPI 中新增端點(如 /commodities/weekly)。
    • 在 Notion 中加入圖表視覺化。
  2. 實務專案
    • 追蹤其他商品(如黃金、原油)的價格趨勢。
    • 設計每周市場報告自動生成系統。

六、教學資源