Skip to content

MaverickZheng/weather-data-visualize

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

55 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Weather data visualize 氣象資料視覺化

Static Badge Static Badge Static Badge

本專案是藉由氣象署所提供的公開資料,透過資料視覺化,展示氣象的長期趨勢,以及使用地圖掌握即時天氣概況。

  • 專案架構
  1. 前端介面:Streamlit(由Python構成)
  2. 後端架構:FastAPISQLAlchemy
  3. 資料庫:SQLite
  • 使用的技術
  1. 爬蟲:加入反爬蟲機制,例如User-Agent/延遲時間/Session,提高爬取成功率。
  2. 平行處理:提高爬蟲速度、縮短資料整理時間。
  3. 防止SQL注入攻擊:避免資料庫遭到惡意攻擊,而使資料庫被清空。

大綱

使用限制

《!!重要!!》本專案是部署在免費版的Render上,每當超過15分鐘無任何人使用時,會進入休眠狀態,喚醒時需等待2~3分鐘,接著即可正常使用。

⏫回大綱

開始使用

掃描以下QRcode,或是點擊我開啟網頁

QRcode

⏫回大綱

功能簡介

  • 📈 歷史變化圖:資料期間為 1990/01/01 ~ 2024/04/19 ,測站明細請參考網址站種 僅涵蓋署屬有人站,包含現存測站、已撤銷測站,不包含雷達站。觀測項目則有溫度、降雨量、相對濕度、風速等要素。
  • ⚡ 即時天氣:目前仍在開發中,資料僅供參考。 提供氣溫和降雨量分布圖,測站則為署屬有人站,不包含雷達站。

⏫回大綱

操作示範

  • 歷史變化圖

History demo

  • 即時天氣圖

Realtime demo

⏫回大綱

專案目錄

.
+-- assets      # 包含 gif、png 等素材圖檔
+-- backend
|   +-- main.py # FastAPI的主程式
|   +-- dataprocessing.py   # 資料庫操作和資料處理管線
|   +-- models.py	# 資料表模型
|   
|
+-- frontend
|   +-- main    # 主頁面
|   +-- pages 
|       +-- history.py  # 歷史資料頁面  
|       +-- realtime.py # 即時資料頁面
|
+-- data
|   +-- weather.db # 氣象資料庫
|
+-- requirements.txt	# 相依套件
+-- example_config.ini  # 設定檔範例
+-- README.md	# 說明文件

⏫回大綱

執行環境要求

  • 硬體最低要求:CPU至少要有4個執行緒
  • 套件要求詳見requirements.txt

⏫回大綱

安裝與執行

申請氣象資料開放平台授權碼 (若已申請,可忽略此步驟)

  1. 請至中央氣象署填寫資料加入會員
  2. 登入會員後,進入頁面,點擊「取得授權碼」。 cwa opendata authorization
  3. example_config.ini 中的 your_cwa_authorization ,取代為您的授權碼
  4. 再把「 example_config.ini 」的檔名,修改為 「 config.ini

本地端執行

  1. 移至 config讀取授權碼 的註解處,將以下程式碼 移除註解
    config = configparser.ConfigParser()
    config.read('config.ini')
    self.cwa_authorization = config['cwa']['authorization']
  1. 接著為以下程式 加入註解
    self.cwa_authorization = os.environ.get("CWA_AUTHORIZATION")
  1. 最後在命令列中下達指令:python main.py ,即可在本機上操作!

Render部署

  1. 進入 RenderDashboard頁面,點選右上角 「New」 中的 「Web Service」,接著在 「Public Git repository」 中貼上本專案的網址,然後點選 Continue
  2. 「Name」 填入自訂名稱(同時是網站名稱),還有在 「Start Command」 填入python main.py
  3. 接著在 「Environment Variables」 填入環境變數名稱: CWA_AUTHORIZATION ,以及你的 氣象資料開放平台授權碼 (重要)
  4. 最後點選 「Create Web Service」 ,即可完成部署了!

⏫回大綱

資料來源

  1. 中央氣象署
  2. 氣象資料開放平台
  3. 氣候資料服務系統

⏫回大綱

參考資料

  1. SQLAlchemy文檔
  2. SQLAlchemy中的text對象防注入
  3. SQLAlchemy執行原生sql防止sql注入
  4. FastAPI
  5. Fast API 入門筆記
  6. FastAPI 如何 Fast ? 框架入門、實例、重構與測試
  7. 菜鳥教學 - Python map() 函數
  8. 菜鳥教學 - Python按鍵(key)或value(value)對字典進行排序
  9. [Python] 使用 functools.partial() 固定函式參數並返回新的 partial 物件
  10. STEAM 教育學習網 - concurrent.futures 平行任務處理
  11. STEAM 教育學習網 - 爬取後同時下載多張圖片
  12. Learn Code With Mike - [Python爬蟲教學]善用多執行緒(Multithreading)提升Python網頁爬蟲的執行效率
  13. Streamlit • A faster way to build and share data apps
  14. TEJ API 遇上STREAMLIT App
  15. Streamlit🔥+ FastAPI⚡️- The ingredients you need for your next Data Science Recipe
  16. Vega-Lite – A Grammar of Interactive Graphics

⏫回大綱

Releases

No releases published

Packages

No packages published

Languages