資料科學 API 公共健康 教學

使用 CDC API 取得全球各國歷年 Covid-19 與流感數據並輸出 CSV 格式

使用 CDC API 取得全球各國歷年 Covid-19 與流感數據並輸出 CSV 格式

一、教學目標

  1. 知識目標:認識 CDC(美國疾病管制與預防中心)提供的公開數據 API 及其應用。
  2. 技能目標:學會使用 Python 與 requests 套件,從 CDC API 提取 Covid-19 與流感數據,並將其存為 CSV 格式。
  3. 態度目標:培養學生對公共健康數據分析的興趣,並理解其在疫情監測與研究的價值。

二、前置準備

適用對象

  • 對象:高中生、大學生或對公共健康、資料科學與 Python 有興趣的初學者。
  • 先備知識:基礎 Python 知識(檔案操作、資料處理)。

所需軟硬體

  1. 硬體:具備網路連線的電腦。
  2. 軟體
    • Python 3.x(建議搭配 Anaconda)。
    • Python 套件:requestspandas
    • 文字編輯器(如 VS Code 或 Jupyter Notebook)。
  3. 其他:穩定的網路環境(API 需要線上存取)。

教師準備

  • 預先安裝 requestspandas,並測試程式碼。
  • 準備 CDC API 的背景簡介(PDF 或投影片)。
  • 提供範例數據解釋(如 Covid-19 與流感的欄位意義)。

三、教學流程

時間分配:總計 90 分鐘

  • 導入(10 分鐘)
  • 環境設定與 API 介紹(15 分鐘)
  • Covid-19 數據實作(30 分鐘)
  • 流感數據實作(25 分鐘)
  • 總結與討論(10 分鐘)

1. 導入(10 分鐘)

活動:情境引導

  • 教師提問
    「如果要追蹤 Covid-19 或流感的全球趨勢,你會怎麼獲取數據?」
  • 簡介 CDC API
    • CDC 是什麼?(美國疾病管制與預防中心,提供公開健康數據)。
    • API 用途:透過程式獲取 Covid-19、流感等數據。
  • 目標導引
    「今天我們將學習如何用 Python 從 CDC API 提取 Covid-19 與流感數據,並存成 CSV 檔案,幫助你分析疫情趨勢!」

2. 環境設定與 API 介紹(15 分鐘)

講解(10 分鐘)

  • 安裝套件
    • 展示指令:
      pip install requests pandas
      
    • 檢查安裝:import requests, pandas(無錯誤即成功)。
  • CDC API 簡介
    • 端點範例:Covid-19 (9mfq-cb36.json)、流感 (vh55-3he6.json)。
    • 數據格式:JSON,需轉換為表格形式。

實作活動(5 分鐘)

  • 學生任務
    1. 安裝 requestspandas
    2. 測試簡單請求:
import requests
url = "https://data.cdc.gov/resource/9mfq-cb36.json"
response = requests.get(url)
print(f"API 狀態碼:{response.status_code}")
  • 成果檢查:確認返回狀態碼 200(表示成功)。

3. Covid-19 數據實作(30 分鐘)

講解(10 分鐘)

  • 程式碼說明
    • requests.get():發送 API 請求。
    • pd.DataFrame():將 JSON 轉為表格。
    • 欄位篩選與日期格式化。
  • 展示範例:提取 Covid-19 數據並顯示前幾行。

實作活動(20 分鐘)

  • 學生任務
    1. 執行以下程式碼,獲取 Covid-19 數據:
import requests
import pandas as pd

# CDC Covid-19 API
url = "https://data.cdc.gov/resource/9mfq-cb36.json"

# 發送請求
response = requests.get(url)

if response.status_code == 200:
    data = response.json()
    df = pd.DataFrame(data)
    df = df[["submission_date", "state", "tot_cases", "tot_death"]]
    df["submission_date"] = pd.to_datetime(df["submission_date"])
    
    csv_filename = "covid19_cdc_data.csv"
    df.to_csv(csv_filename, index=False)
    print(f"已成功儲存 Covid-19 歷年數據至 {csv_filename}")
else:
    print(f"❌ API 請求失敗,狀態碼:{response.status_code}")
  1. 打開 covid19_cdc_data.csv,檢查日期、州別與病例數。
  • 成果檢查:確認 CSV 包含日期、州別、總確診與死亡數。

4. 流感數據實作(25 分鐘)

講解(10 分鐘)

  • 程式碼說明
    • 流感 API 的欄位(如 weekili_activity_level)。
    • 與 Covid-19 程式碼的異同。
  • 展示範例:提取流感數據並解釋活動等級。

實作活動(15 分鐘)

  • 學生任務
    1. 執行以下程式碼,獲取流感數據:
import requests
import pandas as pd

# CDC Flu API
flu_url = "https://data.cdc.gov/resource/vh55-3he6.json"

# 發送請求
response = requests.get(flu_url)

if response.status_code == 200:
    flu_data = response.json()
    flu_df = pd.DataFrame(flu_data)
    flu_df = flu_df[["week", "region", "ili_activity_level", "activity_level_label"]]
    
    flu_csv_filename = "flu_cdc_data.csv"
    flu_df.to_csv(flu_csv_filename, index=False)
    print(f"已成功儲存流感數據至 {flu_csv_filename}")
else:
    print(f"❌ API 請求失敗,狀態碼:{response.status_code}")
  1. 檢查 flu_cdc_data.csv,找出流感活動等級最高的地區。
  • 成果檢查:確認 CSV 包含週數、地區與活動等級。

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

  • 教師總結
    • CDC API 可提供 Covid-19 與流感等多種數據。
    • CSV 格式便於後續分析(如 Excel 或 Python)。
  • 學生討論
    • 「你發現哪些州的 Covid-19 死亡數最高?」
    • 「這些數據能用來做什麼?(如疫情預測、健康政策)」

四、評量方式

  1. 實作成果(70%)
    • 成功生成 covid19_cdc_data.csv
    • 成功生成 flu_cdc_data.csv
  2. 參與討論(30%)
    • 在總結時分享觀察或提出問題。

五、延伸應用

  1. 進階挑戰
    • 修改程式碼,篩選特定年份(如 2023)的數據。
    • 使用 matplotlib 繪製 Covid-19 或流感趨勢圖。
  2. 實務專案
    • 比較美國各州的流感與 Covid-19 活動等級。
    • 分析某地區的疫情數據,撰寫簡易報告。

六、教學資源