天天看點

開源|建構空氣品質資料庫

資料是資料科學中必不可少的一環。如果沒有資料,那麼資料科學中所有的算法都将是一紙空談,毫無利用價值。

機器學習和深度學習的訓練也依賴于資料的輸入。最近兩年機器學習和深度學習在氣象領域的應用也逐漸火熱起來,而且不少機構都在舉辦機器學習和深度學習在氣象應用的比賽。

近些年來人們也越加關注大氣污染的情況,尤其是空氣品質,關乎到人們生活的各個方面。考慮到目前國内沒有多少關于空氣品質資料共享的平台。除了環保部總站提供的實時資料之外,也有一些網站提供了國控站的實時資料以及曆史資料,但是這些資料站提供的資料僅是空氣品質的資料,而且除了總站平台之外,其餘的實時資料分享平台(比如pm25.in)提供的資料有時會因為某些原因導緻資料中斷。是以出于項目需要,調查了不少提供空氣品質資料的網站,然後找到 aqicn.org 網站可以擷取空氣品質資料,此外還提供了一些氣象資料(比如溫度,氣壓,濕度和風速)。但是由于此網站不提供曆史資料接口,是以隻能通過其提供的實時資料API擷取資料。

多源資料庫的建構具有不可忽視的意義。尤其是對于利用機器學習和深度學習來預測空氣品質的項目來說,僅僅需要空氣品質資料是遠遠不夠的,因為空氣品質的變化依賴于很多因素:比如氣象條件,大氣的環流背景會對污染物的傳輸具有非常重要的影響,而且污染源的排放對于污染物的變化也具有非常重要的影響。

微軟亞洲研究院曾利用大資料對空氣品質進行了預測:

要預測一個地方的空氣品質,并不是指單純地隻看這個地方本地的資料,而且要考慮到周邊地區的空氣及其他因素,比如空氣品質站點資料、交通流資料、氣象資料、廠礦資料、人口流動資料、路網結構等。

與傳統模拟空氣品質不同,大資料預測空氣品質依靠的是基于多源資料融合的機器學習方法,也就是說,空氣品質的預測不僅僅看空氣品質資料,還要看與之相關的氣象資料、交通流量資料、廠礦資料、城市路網結構等不同領域的資料,不同領域的資料互相疊加,互相補強,進而預測空氣品質狀況。

其中利用的不僅僅是空氣品質資料,而且還有氣象資料以及其它的一些資料。所用到的廠礦資料和人口資料類似數值模式中所使用的人為排放源。

本文不對這些細節進行過多探讨,關于這些内容的讨論将放到後面。上述的讨論隻是想說明建構多資料源資料庫的重要性。

本來此項目是想作為第一個正式項目來維護的,但是由于一些原因,比如國控站太多,又由于python的GIL鎖限制導緻下載下傳資料的時候會需要不少資源(測試了12個核,可以在30分鐘左右擷取到所有國控站資料,這不僅取決于伺服器可配置設定資源,而且還受到網絡響應的影響),導緻無法繼續單獨維護此項目運作。

目前程式已經持續運作一個月左右,由于我能使用的資源有限,目前僅持續擷取了大概600個站點一個月左右的資料。

簡單的對此項目進行一下介紹:

waqip項目是為了從aqicn.org網站下載下傳中國各國控站的空氣品質資料以及氣象資料,并且存儲到資料庫。

其中包括了四個主要腳本:

  • aqi.py : 可以根據pm2.5, pm10, co, no2, so2, o3的值計算IAQI和AQI,也可以根據各個要素的分指數計算各要素的值。
  • waqip.py : 下載下傳空氣品質資料(包括各要素的分指數以及AQI)以及氣象資料(包括溫度,氣壓,濕度和風速等資料)。
  • get_cities_china.py : 擷取中國所有國控站的連結。
  • get_waqip_all.py : 下載下傳資料并存儲到資料庫。采用多程序下載下傳,腳本中測試時使用了12個核。

(注意:為了能夠成功下載下傳資料,必須要從aqicn.org網站申請token。)

waqip.sh 腳本可用于設定 crontab 定時任務,而 cities_china_url.csv 檔案中包含了中國所有國控站的資訊。

程式已經上傳到Github,連結見文末。無論你是對這個項目本身感興趣,還是想學習python,都可以關注一下。

https://github.com/bugsuse/waqip