Featured image of post Python-爬取空氣品質-PM2.5-AQI

Python-爬取空氣品質-PM2.5-AQI

實作如何爬取政府公開資料並解析json儲存檔案

Python + PM25 + AQI

TLDR : 此篇是透過 Python 爬取 AQI 空氣品質指標的資料,再篩選出我們熟悉的細懸浮微粒 PM2.5 數據儲存成檔案。


課堂作業:透過 Python 爬取空氣品質 PM2.5 數據,練習如何抓取政府資料開放平台公開資料,解析 JSON 檔案並做檔案處理。

資訊擷取來源

政府資料開放平臺

環保署環境資料開放平台

https://data.moenv.gov.tw/

按照網站提供的註冊 API 使用說明,會獲得一組期限一年的 Key

https://data.moenv.gov.tw/paradigm

可以透過參數來篩選資料

(v2版)要解析資料的來源網址結構如下:

該平台也提供了以空氣品質指標為案例的 教學手冊 說明如何設定詳細參數,可供參考。

( API 網址記得更換成自己的且為最新版本 )

註冊好後可以先到 API 測試平台 查看能否成功獲得公開資料。

資料集名稱跟詳細欄位內容:空氣品質指標(AQI)(歷史資料)

實作過程紀錄

實作過程有遇到沒有獲取完整資料的問題

解決方式:把 limit 降低或是用迴圈一次只獲取特定天數的資料,但還是偶爾會報錯

完整檔案放置在 Github: Python-PM2.5

資料結構轉換說明

整個流程:request –> get json object –> key get value

request 獲得資料,用 json() 方法,將 JSON 格式的資料

轉成 Python 可以操作的資料型態,再用字典取數值的方式

從 key (record) 取得我們想要的數據 (value)。

資料結構如下 :

1
2
key = "record"
value = [{"sitename":"各縣市","pm2.5":"10",其他數據},{同樣格式}]

value (aqi) 最外層是 list 資料型態,裡面每一個元素是 dict 資料型態

我們再透過 key (sitename,pm2.5) 取 value (各縣市,10)。

*這邊的 value 是一個裝著大字典的 list。

讀取資料的實作過程可以搭配

1
2
print(type(data))
print(dir(requests))

更清楚了解有什麼方法可以用,資料型態是什麼。

資料輸出

檔案處理

“r” 唯讀模式

“w” 寫入模式(覆寫)

“a” 寫入模式(續寫)

with open("data_pm25.txt", "w", encoding="utf-8") as file:

再用 for 把資料寫入 file 當中

1
2
3
f = open('file.txt', 'w')
f.write("file-write")
f.close()

檔案讀寫,rwa"+" 模式,都練習測試看看

w+ 先讀再寫會:?

a+ 先寫再讀會:?

參考資料

輕鬆學習 Python | 資料分析

輕鬆學習 Python:透過 API 擷取網站資料

Python 初學第十二講—檔案處理

實際案例應用:

民生公共物聯網資料應用—將開放資料結合 GIS 放入地圖,以網頁方式來呈現

https://learnciot.github.io/ch7/ch7.3/

新竹科學園區空氣品質監測網:將空氣品質以趨勢圖呈現

https://hspair.sipa.gov.tw/Hspairpeople/Default.aspx

補充:ChatGPT 指令大全 https://www.explainthis.io/zh-hant/chatgpt

後記:

2023-0826 更新:因工作緣故收到國家科學及技術委員會來函,配合本署組改為環境部,本署環境資料關放平臺、環境資源資料交換平臺及環境資源資料交換重構平臺自112年8月22日起變更網址及應用程式介面( Application ProgrammingInterface, API),各平臺API維持新、舊API URL平行服務三個月,請於112年11月22日期限前內完成 API URL 更新。

2024 可搭配 ChatGPT/Gemini 大型語言模型提問如何將資料做清洗,該如何轉換資料,剩下的時間思考如何應用在日常生活中,例如用折線圖呈現產出一天內空氣品質變化,結合 IFTTT 超過多少會提醒用戶,將資料搜集彙整顯示趨勢圖,以供後續研究。

使用 Hugo 建立
主題 StackJimmy 設計
已產出:1372字,共 10篇文章