国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于OpenAPI的Python空氣質(zhì)量監(jiān)測數(shù)據(jù)程序設(shè)計

2016-08-27 07:21琳,任
中低緯山地氣象 2016年3期
關(guān)鍵詞:經(jīng)緯度監(jiān)測數(shù)據(jù)列表

陳 琳,任 芳

(1.四川省氣象臺,四川 成都 610072;2.陜西省氣象服務(wù)中心,陜西 西安 710014)

?

基于OpenAPI的Python空氣質(zhì)量監(jiān)測數(shù)據(jù)程序設(shè)計

陳琳1,任芳2

(1.四川省氣象臺,四川成都610072;2.陜西省氣象服務(wù)中心,陜西西安710014)

環(huán)境氣象預(yù)報是政府和環(huán)保部門應(yīng)對空氣重污染時的重要決策支撐。只有實時快捷地獲取當前空氣質(zhì)量監(jiān)測數(shù)據(jù),氣象部門才能正常開展環(huán)境氣象預(yù)報業(yè)務(wù)。為了快速、準確地獲取西南區(qū)域空氣質(zhì)量監(jiān)測產(chǎn)品,并生成Micaps格式產(chǎn)品,開發(fā)了基于一個OpenAPI的Python多線程程序。程序可直接調(diào)用API底層連接的數(shù)據(jù)庫,獲取數(shù)據(jù)效率高,具有較高的實時性和準確性,已投入四川省氣象臺天氣預(yù)報業(yè)務(wù)運行。

OpenAPI接口;Python語言;多線程;空氣質(zhì)量監(jiān)測數(shù)據(jù);Micaps

1 引言

隨著人們對環(huán)境質(zhì)量的重視,空氣污染已成為當下民眾關(guān)注的熱點。而環(huán)境氣象預(yù)報作為氣象服務(wù)的新興業(yè)務(wù),也受到氣象部門越來越大的重視。為了加快環(huán)境氣象業(yè)務(wù)系統(tǒng)建設(shè),需進行環(huán)境氣象多源數(shù)據(jù)分析和重污染天氣影響評估。對于研究環(huán)境氣象預(yù)報方法來說,環(huán)境監(jiān)測數(shù)據(jù)資料的獲取與保存至關(guān)重要。

當前,環(huán)境監(jiān)測數(shù)據(jù)是由各省環(huán)境監(jiān)測總站將其按時以數(shù)據(jù)交換方式提供給各級氣象臺,由于各方面原因,環(huán)境監(jiān)測總站提供的數(shù)據(jù)無具體值且數(shù)據(jù)實時性遠不能達到環(huán)境氣象預(yù)報要求,此外,網(wǎng)上雖有當天的空氣監(jiān)測實況,但網(wǎng)上的各類數(shù)據(jù)無法加載到氣象部門的專業(yè)業(yè)務(wù)系統(tǒng)(如Micaps系統(tǒng))中,使環(huán)境預(yù)報業(yè)務(wù)難以正常開展。本文主要闡述利用Python提供的OpenAPI處理標準庫,將環(huán)境監(jiān)測數(shù)據(jù)產(chǎn)品生成Micaps格式的實現(xiàn)方法。

2 技術(shù)方法

2.1OpenAPI

API的全稱是應(yīng)用編程接口(Application Programming Interface),這并不是一個新概念,在計算機操作系統(tǒng)出現(xiàn)的早期就已經(jīng)存在了。在互聯(lián)網(wǎng)時代,把網(wǎng)站的服務(wù)封裝成一系列計算機易識別的數(shù)據(jù)接口開放出去,供第三方開發(fā)者使用,這種行為叫做開放網(wǎng)站的API,與之對應(yīng)的,所開放的API就被稱作OpenAPI。

2.2Python腳本語言

Python是一種簡單易學、功能強大的開源編程語言,幾乎能夠在目前所有的操作系統(tǒng)上運行,它有高效率的多層數(shù)據(jù)結(jié)構(gòu),能簡單而有效地實現(xiàn)面向?qū)ο缶幊蘙1]。Python簡潔的語法和對動態(tài)輸入的支持,再加上其解釋性語言的本質(zhì),使得它在大多數(shù)平臺上的很多領(lǐng)域都是一個理想的腳本語言,特別適用于快速的應(yīng)用程序開發(fā)[2]。尤其是Python提供了針對網(wǎng)絡(luò)協(xié)議的標準庫,對網(wǎng)絡(luò)協(xié)議的各個層次進行了抽象封裝,程序員可以集中精力處理程序邏輯。其次,Python非常擅長處理字節(jié)流的各種模式,具有很快的開發(fā)速度[3][4]。

2.3Python多線程

Python使用函數(shù)和類兩種方式包裝線程對象,其調(diào)用線程thread模塊的thread.start_new_thread()函數(shù)來創(chuàng)建一個新的線程,具體語法為:thread.start_new_thread ( function, args[, kwargs] ) ,其中function參數(shù)為調(diào)用的線程函數(shù);args為傳遞給線程函數(shù)的參數(shù),kwargs是可選參數(shù)[5]。調(diào)用關(guān)鍵代碼如下:

try:

thread.start_new_thread(gethtml(url), ("Thread-1", 2, ) )

thread.start_new_thread(gethtml(url), ("Thread-2", 4, ) )

except: Exception,e:

return Exception,":",e

其中,gethtml(url)函數(shù)用于獲取全國城市空氣質(zhì)量指數(shù)(AQI)排行榜。

3 程序設(shè)計

由于國家環(huán)境監(jiān)測總站未發(fā)布OpenAPI,程序采用第三方商業(yè)網(wǎng)站提供的OpenAPI。該網(wǎng)站數(shù)據(jù)全部來源于國家環(huán)保網(wǎng)站公開數(shù)據(jù),網(wǎng)站再根據(jù)國家環(huán)保網(wǎng)站的實時數(shù)據(jù)進行二次核實。程序設(shè)計內(nèi)容主要包括從OpenAPI獲得數(shù)據(jù)、匹配站點生成Micaps格式產(chǎn)品、生成可執(zhí)行文件等3個模塊。從OpenAPI獲得數(shù)據(jù)是基礎(chǔ),只有下載了OpenAPI提供的數(shù)據(jù),才能匹配預(yù)先設(shè)置的西南區(qū)域站點信息,得到各種空氣質(zhì)量監(jiān)測數(shù)據(jù)。程序設(shè)計流程如圖1所示:

圖1 程序設(shè)計流程Fig.1 Program design process

3.1從OpenAPI獲取數(shù)據(jù)

統(tǒng)一資源定位符(URL)是對可以從互聯(lián)網(wǎng)上得到的資源位置和訪問方法的一種簡潔的表示,是互聯(lián)網(wǎng)上標準資源的地址。互聯(lián)網(wǎng)上每個文件都有一個唯一的URL,它包含的信息指出文件的位置以及瀏覽器應(yīng)該怎么處理它[6]。在Python語言眾多網(wǎng)絡(luò)函數(shù)庫中,功能最強大的是Urllib庫,該庫提供一系列用于操作URL的功能,使用戶可以像讀取本地文件一樣讀取www和ftp上的數(shù)據(jù)。通過使用Urllib庫的request模塊可以非常方便地抓取URL內(nèi)容,如發(fā)送一個GET請求到指定的頁面,即可返回JSON數(shù)據(jù)[7]。

從OpenAPI獲得數(shù)據(jù)的程序設(shè)計流程如圖2所示,具體流程如下:先導(dǎo)入從OpenAPI獲得數(shù)據(jù)所需的函數(shù)庫urllib和json,再定義一個函數(shù)gethtml(url),獲取全國城市的空氣質(zhì)量指數(shù)(AQI)排行榜,該函數(shù)返回的是JSON格式的數(shù)組,里面包含目前支持的全國190個城市AQI排行榜信息,其中每項信息包含area (城市名稱)、aqi(空氣質(zhì)量指數(shù))、co(一氧化碳1 h平均)、no2(二氧化氮1 h平均)等16種空氣質(zhì)量監(jiān)測數(shù)據(jù)。

圖2 從OpenAPI獲取數(shù)據(jù)流程Fig.2 Processes of Getting data from OpenAPI

由于OpenAPI獲取到本地的數(shù)據(jù)是JSON格式的,還需把JSON格式數(shù)據(jù)轉(zhuǎn)換成字典格式。字典是Python中唯一內(nèi)建的映射類型,可存儲任意類型對象,它的每個鍵值對用冒號分割,每個對之間用逗號分割,整個字典包括在花括號{}中,鍵必須是唯一的,但值則不必。JSON格式數(shù)組轉(zhuǎn)換成字典后的數(shù)據(jù)格式如下:

[{"aqi":16,"area":"成都","co":0.456,…}{ "aqi":18,"area":"三亞","co":0.97, …}{"aqi":26,"area":"泉州",”co":0.717,… }]。

此部分關(guān)鍵代碼如下所示:

def gethtml(url):

try:

htmls = urllib.urlopen(url)

airproduct = json.loads( htmls.read())

excep: Exception,e:

return Exception,":",e

return (airproduct)

其中,url=http://www.####.###/api/querys/aqi_ranking.json&開發(fā)者密鑰,airproduct = json.loads(htmls.read())的作用是把JSON格式轉(zhuǎn)換成字典格式。

3.2生成Micaps格式產(chǎn)品

3.2.1數(shù)據(jù)預(yù)處理為了將數(shù)據(jù)加載在氣象專業(yè)軟件Micaps系統(tǒng)上,需把數(shù)據(jù)轉(zhuǎn)換成Micaps 120類格式。具體步驟如下:首先生成西南區(qū)域有空氣質(zhì)量指數(shù)(AQI)的52個城市的經(jīng)緯度信息文件geo.txt,文件內(nèi)容如表1所示。

表1 西南區(qū)域52個城市經(jīng)緯度信息

站點名在字典airproduct中以“area”鍵表示,airproduct [i]['area']表示第i個站點“area”鍵的值。把經(jīng)緯度信息以字符串形式讀入內(nèi)存中,與之前的字典airproduct中“area”鍵的值進行匹配,如匹配到相同值,用列表list[]記錄站點在字典中的索引值i。此部分關(guān)鍵代碼如下所示:

for i in range(0, len(listgeo)):

for j in range(0, len(airproduct)):

if airproduct[j]['area']==listgeo[i].split(' ')[3].decode("gbk"):

list.append(j)

break

其中l(wèi)en(listgeo)代表經(jīng)緯度信息列表listgeo的長度;len(airproduct)代表字典airproduct的長度。

接下來再利用索引列表list[]查找52個城市空氣質(zhì)量檢測數(shù)據(jù)的值,把查找到的值放在函數(shù)getele()的列表listele[]中。列表listele[]是記錄空氣質(zhì)量監(jiān)測要素的列表,其中ys表示空氣質(zhì)量監(jiān)測要素名,如“aqi”,“co”。例如調(diào)用函數(shù)getele(‘a(chǎn)qi’)表示在利用列表list[]的索引值查找字典airproduct鍵“aqi”的值,查找到的值用列表listele儲存,getele(‘co’)以此類推。關(guān)鍵代碼如下所示:

def getele(ys):

listele = []

for a in range(0, len(list)):

listele.append(str(airproduct[a][ys]))

return listele

3.2.2生成產(chǎn)品國家環(huán)境監(jiān)測總站空氣質(zhì)量監(jiān)測數(shù)據(jù)每小時更新1次,本程序每小時生成1個Micaps 120類數(shù)據(jù)文件,文件名格式如16022413.000。引入Python中的datetime庫,截取時間的字符串作為文件名,保存文件的路徑path="d:” + datetime.now().strftime('%Y%m%d%H')[2:10] + ".000"。最后把文件頭、站點經(jīng)緯度和監(jiān)測數(shù)據(jù)等信息列表寫入文件,即生成Micaps 120格式產(chǎn)品,生成文件內(nèi)容見圖3。

圖3 Micaps 120格式的空氣質(zhì)量監(jiān)測數(shù)據(jù)產(chǎn)品Fig.3 Micaps 120 of air pollution products

在生成的Micaps 120類文件中,空氣質(zhì)量監(jiān)測數(shù)據(jù)主要包含aqi(空氣質(zhì)量指數(shù))、CO 1 h平均、NO21 h平均、O31 h平均、O38 h滑動平均、SO21 h平均等要素。圖4為2016年2月24日13時空氣質(zhì)量監(jiān)測產(chǎn)品在Micaps 3.2系統(tǒng)的顯示界面。

圖4 Micaps 3.2系統(tǒng)顯示界面Fig.4 Micaps 3.2 system display interface

此部分關(guān)鍵代碼如下:

for x in range(len(listgeo)):

file(path,"w").writelines(listgeo[x].split(' ')[0]+" "+listgeo[x].split(' ')[1]+" "+listgeo[x].split(' ')[2]+" "+getele(‘a(chǎn)qi’)[x]+…+getele(‘so2’)+" ")

其中l(wèi)en(listgeo)代表經(jīng)緯度信息列表listgeo的長度,listgeo[x].split(' ')[0]用于獲取geo.txt的站點編號,listgeo[x].split(' ')[1]和listgeo[x].split(' ')[2]用于分別獲取geo.txt中站點的緯度和經(jīng)度。

3.3生成可執(zhí)行文件

為了使Python腳本程序能在未安裝Python環(huán)境的Windows系統(tǒng)下運行,必須利用py2exe等工具把Python腳本(以.py為后綴)轉(zhuǎn)換成Windows可執(zhí)行程序(*.exe)。事先把Python腳本命名為airquality.py,然后在網(wǎng)上下載py2exe安裝程序,安裝完成后,建立一個用于發(fā)布程序的腳本文件[8],命名為setup.py,其內(nèi)容如下:

from distutils.core import setup

import py2exe

setup(console=["airquality.py"])

在Python的運行命令提示窗口,鍵入如下命令:python setup.py py2exe,該命令執(zhí)行后,將產(chǎn)生一個名為dist的子目錄,其中包含了可執(zhí)行程序airquality.exe。把airquality.exe放在Windows環(huán)境下,每小時執(zhí)行1次,即可自動獲取每小時更新1次的空氣質(zhì)量監(jiān)測數(shù)據(jù)。

4 結(jié)語

利用Python豐富的標準庫以及快速開發(fā)的特長,設(shè)計了一個基于OpenAPI的Python空氣質(zhì)量監(jiān)測數(shù)據(jù)產(chǎn)品程序,實現(xiàn)每小時定時自動生成Micaps格式的西南區(qū)域空氣質(zhì)量監(jiān)測產(chǎn)品。目前該程序已部署到四川省氣象臺日常天氣預(yù)報業(yè)務(wù)中,其生成的空氣質(zhì)量監(jiān)測產(chǎn)品為環(huán)境氣象預(yù)報的研究工作提供了實況對比和技術(shù)支撐,滿足了預(yù)報員對空氣質(zhì)量監(jiān)測實況資料采集的需求。

[1] 劉志凱,張?zhí)t,劉磊.基于Web的Python3編程環(huán)境[J]. 計算機系統(tǒng)應(yīng)用,2015,24(7):236-239.

[2] 王大偉.基于Python的Web API自動化測試方法研究[J]. 電子科學技術(shù),2015,2(5):573-581.

[3] Magnus Lie Hetland,司維,曾軍葳,等. Python基礎(chǔ)教程[M]. 北京:人民郵電出版社,2014:243-245.

[4] 高森. Python網(wǎng)絡(luò)編程基礎(chǔ)[M]. 北京:電子工業(yè)出版社,2007:326-327.

[5] 李俊麗.基于Linux的Python多線程爬蟲程序設(shè)[J] .計算機與數(shù)字工程,2015(5):861-863.

[6] Elizabeth Castro.HTML XHTML CSS基礎(chǔ)教程[M].北京:人民郵電出版社,2007:35-37.

[7] TJ.O’Connor,崔孝晨,武曉音.Python絕技:運用Python成為頂級黑客[M].北京:電子工業(yè)出版社,2016:213-220.

[8] 劉凌霞,郝寧波,吳海濤.21天學通Python[M].北京:電子工業(yè)出版社,2016:191-194.

Python Multithreaded Air Pollution Products Program Based on OpenAPI

CHEN Lin1,REN Fang2

(1.Sichuan Provincial Meteorology Observatory, Sichuan Chengdu 610072, China;2.Shanxi Provincial Meteorological Service Center, Xian 710014, China)

The environmental meteorological forecast is an important decision support for the government and the environmental protection departments to deal with the heavy air pollution. Only with real-time and fast access to current air pollution products, can the meteorological department carry out the normal environment and meteorological forecasting business. In order to quickly and accurately obtain southwest regional air pollution products and generate the Micaps products, an OpenAPI Python multithreaded program was developed. The program is of high performance, it can directly call API connections at the bottom of the database, the fetching data is more efficient, and the program is with timeliness and accuracy. This program has been applied successfully in daily operations of the Sichuan Meteorological Observatory.

Python;multithreading;air pollution products;OpenAPI;Micaps

1003-6598(2016)03-0078-04

2016-03-09

陳琳(1983—),女,工程師,主要從事氣象信息技術(shù)工作,E-mail:suelincl@126.com。

TP311

B

猜你喜歡
經(jīng)緯度監(jiān)測數(shù)據(jù)列表
學習運用列表法
擴列吧
GSM-R接口監(jiān)測數(shù)據(jù)精確地理化方法及應(yīng)用
基于經(jīng)緯度范圍的多點任務(wù)打包算法
自制中學實驗操作型經(jīng)緯測量儀
澳洲位移大,需調(diào)經(jīng)緯度
列表畫樹狀圖各有所長
GPS異常監(jiān)測數(shù)據(jù)的關(guān)聯(lián)負選擇分步識別算法
基于小波函數(shù)對GNSS監(jiān)測數(shù)據(jù)降噪的應(yīng)用研究
2011年《小說月刊》轉(zhuǎn)載列表