• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Python 語(yǔ)言的“天擎”數(shù)據(jù)應(yīng)用可視化與歷史數(shù)據(jù)調(diào)用

      2024-01-08 11:50:44王昆鵬陳長(zhǎng)勝
      氣象災(zāi)害防御 2023年4期
      關(guān)鍵詞:參數(shù)信息松原市歷史數(shù)據(jù)

      王昆鵬 呂 雪 陳長(zhǎng)勝 林 濤

      (1.松原市氣象局,吉林松原 138000;2.前郭縣氣象局,吉林松原 138000;3.吉林省氣象臺(tái),吉林長(zhǎng)春 130062;4.長(zhǎng)白山氣象與氣候變化吉林省重點(diǎn)實(shí)驗(yàn)室,吉林長(zhǎng)春 130062;5.長(zhǎng)白山池北區(qū)氣象局,吉林安圖 133613)

      1 引言

      2020 年以來(lái),中國(guó)氣象局明確要求構(gòu)建以氣象大數(shù)據(jù)云平臺(tái)為“云”、氣象業(yè)務(wù)系統(tǒng)為“端”的“云+端” 氣象業(yè)務(wù)技術(shù)體制。 氣象大數(shù)據(jù)云平臺(tái)(CMADaas,以下簡(jiǎn)稱天擎平臺(tái))是全國(guó)氣象綜合信息共享系統(tǒng)(CIMISS)的功能升級(jí)和服務(wù)擴(kuò)充版本,不僅全面繼承了CIMISS 的數(shù)據(jù)種類和接口服務(wù)標(biāo)準(zhǔn),還在數(shù)據(jù)質(zhì)量、資料存儲(chǔ)時(shí)間序列、數(shù)據(jù)處理時(shí)效等方面有顯著的提升[1]。天擎平臺(tái)廣泛匯聚國(guó)內(nèi)外氣象數(shù)據(jù)、行業(yè)數(shù)據(jù)、經(jīng)濟(jì)社會(huì)數(shù)據(jù)、社會(huì)觀測(cè)數(shù)據(jù)等,數(shù)據(jù)更加完整、權(quán)威。

      服務(wù)接口(Service Interface)是一個(gè)自動(dòng)化系統(tǒng)與另一個(gè)自動(dòng)化系統(tǒng)或人之間的共享邊界[2-4],天擎平臺(tái)數(shù)據(jù)服務(wù)沿用并優(yōu)化了CIMISS 氣象服務(wù)數(shù)據(jù)統(tǒng)一服務(wù)接口, 為本地應(yīng)用開(kāi)發(fā)提供了多樣化的可能。 豐富的服務(wù)接口使得天擎平臺(tái)變得更加靈活、 安全, 體現(xiàn)出以下幾個(gè)方面的突出特點(diǎn):增加了安全認(rèn)證模塊,提高了數(shù)據(jù)服務(wù)的安全性;采用負(fù)載均衡集群和分布式緩存技術(shù),服務(wù)性能顯著提升; 提供了更豐富的數(shù)據(jù)序列化輸出格式與多種可選數(shù)據(jù)返回格式; 實(shí)時(shí)業(yè)務(wù)具有優(yōu)先執(zhí)行的權(quán)限,強(qiáng)化系統(tǒng)接口服務(wù)資源占用管控;接口種類全面豐富, 目前平臺(tái)包含氣象業(yè)務(wù)數(shù)據(jù)共計(jì)14 類505 種, 發(fā)布398 種接口資料, 提供了309 個(gè)接口,其中基礎(chǔ)資料接口308 個(gè)。

      本文基于Python3(3.7 版本)編程語(yǔ)言環(huán)境,探討天擎平臺(tái)在松原市的氣象信息監(jiān)測(cè)、 服務(wù)中的應(yīng)用,供其他業(yè)務(wù)和研究人員參考。

      2 天擎平臺(tái)數(shù)據(jù)服務(wù)接口調(diào)用

      天擎平臺(tái)數(shù)據(jù)服務(wù)提供了豐富的服務(wù)接口,進(jìn)而為本地應(yīng)用開(kāi)發(fā)提供了多樣化的可能。 按照不同的編碼形式與不用的服務(wù)接口, 可以為不同需求的用戶提供更加具有針對(duì)性的氣象特色服務(wù)。

      目前天擎默認(rèn)提供的簽名認(rèn)證為調(diào)用基于一系列SDK 開(kāi)發(fā)包,在編寫(xiě)調(diào)用代碼時(shí)需首先引用(import)cma.music.DataQueryClient 類、生成client客戶端對(duì)象,并根據(jù)需要初始化各種客戶端參數(shù),然后再使用該對(duì)象的特定方法、 指明方法需要調(diào)用的接口名稱,最后執(zhí)行方法獲取返回結(jié)果數(shù)據(jù)。其過(guò)程較為復(fù)雜繁瑣, 對(duì)于缺乏編程能力的基層業(yè)務(wù)人員來(lái)說(shuō),在使用過(guò)程中存在一定的困難。

      使用Python3 部分函數(shù)的接口調(diào)用方案,可以較為輕松地解決天擎平臺(tái)接口調(diào)用問(wèn)題。 其調(diào)用過(guò)程主要分為2 步: 第一步需要完成天擎平臺(tái)服務(wù)器所需要的加密數(shù)字簽名(getSign)和組裝加密檢索URL(createApiUrl);第二步則需要完成用戶認(rèn)證和調(diào)用數(shù)據(jù)的具體參數(shù)信息。

      2.1 調(diào)用過(guò)程第一步

      Python3 不需要安裝其他第三方模塊, 引用(import)uuid、hashlib 和time 三個(gè)內(nèi)置的標(biāo)準(zhǔn)模塊便可以完成天擎平臺(tái)服務(wù)器所需要的加密數(shù)字簽名(getSign)和組裝加密檢索URL(createApiUrl),部分關(guān)鍵代碼如下:

      timestamp = str(int(round(time.time() * 1000)))#生成查詢時(shí)刻的時(shí)間戳

      nonce = str(uuid.uuid1()) # 生成本次查詢對(duì)應(yīng)的本機(jī)隨機(jī)數(shù)

      sign = hashlib.md5(paramString.encode(encoding='UTF-8')).hexdigest().upper() # 調(diào)用數(shù)字簽名函數(shù),生成查詢對(duì)應(yīng)的AK/SK 加密認(rèn)證數(shù)字

      TqUrl += ('×tamp =' + timestamp +'&nonce=' + nonce + '&sign=' + sign) # 將接口基本查詢信息(TqUrl)拼接上時(shí)間戳、隨機(jī)數(shù)、加密認(rèn)證簽名后形成完整的查詢鏈接

      return TqUrl

      2.2 調(diào)用過(guò)程第二步

      通過(guò)吉林省天擎平臺(tái)(http://10.92.90.120:8088/cmadaas)資源共享中的接口頁(yè)面(圖1),可以獲取接口ID、接口名稱、接口分類、調(diào)用方式及方法以及接口參數(shù)等代碼(表1),在“接口測(cè)試工具”頁(yè)面可以進(jìn)行調(diào)試。 需要特別注意的是:天擎平臺(tái)服務(wù)器內(nèi)部數(shù)據(jù)是按照世界時(shí)的時(shí)間格式進(jìn)行編碼的, 所以在設(shè)定時(shí)間段時(shí)需要考慮北京時(shí)與世界時(shí)的程序轉(zhuǎn)換問(wèn)題, 可以通過(guò)Datetime 函數(shù)進(jìn)行轉(zhuǎn)換。

      圖1 吉林省天擎平臺(tái)資源共享中的接口頁(yè)面信息

      表1 吉林省天擎平臺(tái)服務(wù)器相關(guān)參數(shù)信息與注釋

      填寫(xiě)好用戶認(rèn)證和調(diào)用數(shù)據(jù)的具體參數(shù)信息,定義好相關(guān)函數(shù)后,與第一步相結(jié)合,進(jìn)而可以得到調(diào)用數(shù)據(jù)的完整地址。 然后可以通過(guò)Python3 內(nèi)部函數(shù)DataFrame 模塊將調(diào)用的數(shù)據(jù)保存至本地[5-8]。

      3 天擎平臺(tái)數(shù)據(jù)在松原市的應(yīng)用

      數(shù)據(jù)保存到本地以后,根據(jù)不同的需求,可以進(jìn)行不同展示。下面以“松原市降水分布圖”和“松原市歷史氣象數(shù)據(jù)統(tǒng)計(jì)和對(duì)比分析”2 個(gè)應(yīng)用程序?yàn)槔?,介紹在Python 開(kāi)發(fā)中天擎數(shù)據(jù)的數(shù)據(jù)可視化及數(shù)據(jù)展示的方式方法。

      3.1 天擎平臺(tái)數(shù)據(jù)的可視化功能

      在前文工作基礎(chǔ)上, 當(dāng)前已經(jīng)可以將天擎平臺(tái)的某一時(shí)段數(shù)據(jù)保存到本地, 在對(duì)數(shù)據(jù)進(jìn)行處理計(jì)算時(shí), 主要使用Python 的Numpy 庫(kù),Numpy庫(kù)可以完成數(shù)據(jù)的算數(shù)運(yùn)算、 邏輯運(yùn)算以及統(tǒng)計(jì)運(yùn)算。 在進(jìn)行數(shù)據(jù)可視化時(shí),主要使用Python 的Matplotlib 庫(kù)與Cartopy 包,Matplotlib 庫(kù)是Python的一個(gè)2D 圖形庫(kù),能夠生成各種格式的圖形(如折線圖、 散點(diǎn)圖、 直方圖等);Cartopy 是一個(gè)Python 包,用于地理空間數(shù)據(jù)處理,以便生成地圖和其他地理空間數(shù)據(jù)[9-12]。

      下面以“松原市降水分布圖” 應(yīng)用軟件繪制“松原市2022 年6 月27 日22—23 時(shí)降水分布圖”來(lái)展示Python 語(yǔ)言的天擎平臺(tái)數(shù)據(jù)可視化功能。 實(shí)現(xiàn)該部分功能所對(duì)應(yīng)天擎平臺(tái)的參數(shù)信息見(jiàn)表2。

      表2 繪制降水分布圖所需的天擎平臺(tái)參數(shù)信息

      調(diào)取2022 年6 月27 日22 時(shí)—28 日20 時(shí)松原市各觀測(cè)站(包括區(qū)域站)24 h 降水?dāng)?shù)據(jù),松原市內(nèi)165 個(gè)觀測(cè)站, 調(diào)用得到233 844 個(gè)數(shù)據(jù)行。 通過(guò)Numpy、Pandas 庫(kù),應(yīng)用dict、max、len 等函數(shù), 可以將這164 個(gè)觀測(cè)站的233 844 個(gè)數(shù)據(jù)行按照一個(gè)站點(diǎn)一個(gè)數(shù)據(jù)行的處理格式, 歸納成164 個(gè)數(shù)據(jù)行。 最后,通過(guò)max()、mean()等函數(shù)計(jì)算出全市最大、 平均降水量, 利用range、len、argpartition 等函數(shù)完成對(duì)松原市下轄的三縣一區(qū)一市的降水情況處理與計(jì)算。部分關(guān)鍵代碼如下:

      Cf=dict(Counter(station_ID)) # 統(tǒng)計(jì)重復(fù)次數(shù)

      Xh=(max(Cf.values())) # 統(tǒng)計(jì)循環(huán)次數(shù)

      station_ID_No=[key for key,value in Cf.items()if value > 1] #統(tǒng)計(jì)站號(hào)

      lists=[[] for j in range(len(station_ID_No))] #結(jié)果保存到新列表

      進(jìn)而得出松原市全市及各縣(市、區(qū))2022 年6 月27 日20 時(shí)—28 日20 時(shí)的降水情況。最終通過(guò)Matplotlib、Cartopy 等庫(kù)包, 完成松原市降水分布圖的繪制(圖2)。

      圖2 松原市2022 年6 月27 日20 時(shí)—28 日20 時(shí)降水分布

      3.2 天擎平臺(tái)數(shù)據(jù)的歷史數(shù)據(jù)調(diào)用功能

      通過(guò)前文的介紹, 當(dāng)前已經(jīng)可以將天擎平臺(tái)的某一時(shí)段數(shù)據(jù)保存到本地, 并通過(guò)Numpy 庫(kù)可以完成數(shù)據(jù)的算數(shù)運(yùn)算、邏輯運(yùn)算以及統(tǒng)計(jì)運(yùn)算。下面通過(guò)“松原市歷史氣象數(shù)據(jù)統(tǒng)計(jì)和對(duì)比分析”應(yīng)用軟件對(duì)松原市2022 年5 月1—31 日累積降水、氣溫、極端大風(fēng)、日照等氣象常規(guī)要素進(jìn)行歷史比對(duì),展示Python 語(yǔ)言的天擎平臺(tái)數(shù)據(jù)功能。實(shí)現(xiàn)該部分功能所對(duì)應(yīng)天擎平臺(tái)的參數(shù)信息見(jiàn)表3。

      表3 天擎平臺(tái)數(shù)據(jù)的歷史數(shù)據(jù)調(diào)用所需的參數(shù)信息

      通過(guò)天擎平臺(tái)可以獲取到歷史同期的相關(guān)數(shù)據(jù), 其數(shù)據(jù)的基礎(chǔ)處理方式與前面的處理逐分鐘數(shù)據(jù)的方式基本一致, 只是在獲取服務(wù)器信息配置上略有不同,需要將“timeRange”時(shí)間范圍選項(xiàng)修改為:“起始年:‘minYear’”“結(jié)束年:‘maxYear’”“起始月份:‘minMD’”“結(jié)束月份:‘maxMD’”。 因?yàn)橹袊?guó)氣象局下發(fā)的統(tǒng)計(jì)歷史數(shù)據(jù)使用的標(biāo)準(zhǔn)為1991—2020 年的歷史數(shù)據(jù),為了控制賬號(hào)的使用頻率,在統(tǒng)計(jì)歷史數(shù)據(jù)時(shí),可以一次性獲取1991年以來(lái)的全部數(shù)據(jù),再通過(guò)isin 函數(shù),去除掉不需要進(jìn)行統(tǒng)計(jì)的年份數(shù)據(jù),便可完成1991—2020 年30 a 的數(shù)據(jù)統(tǒng)計(jì)。通過(guò)靈活運(yùn)用if 循環(huán)語(yǔ)句,完成本年度與歷史數(shù)據(jù)的比對(duì)工作。 關(guān)鍵代碼如下:

      for i in range(2021,int(maxYear)+1): df_1991-2020=df_1991-2020 [-df_1991-2020 ['Year'].isin([format(i)])]# 對(duì)不需要進(jìn)行計(jì)算統(tǒng)計(jì)的年份數(shù)據(jù)進(jìn)行剔除

      df_nj=df_1991-2020 [df_1991-2020 ['Station_Name'].isin([' 寧江'])].reset_index(drop=True)# 對(duì)各縣區(qū)的數(shù)據(jù)進(jìn)行單獨(dú)提取, 用以計(jì)算各縣區(qū)的信息

      應(yīng)用上述代碼, 對(duì)松原市2022 年5 月的降水、平均氣溫、極端氣溫、日照、大風(fēng)等要素進(jìn)行統(tǒng)計(jì)分析,結(jié)果如表4 所示。

      表4 2022 年5 月松原市氣象數(shù)據(jù)統(tǒng)計(jì)及與歷史同期對(duì)比分析結(jié)果

      4 程序封裝

      為了便于程序在其他計(jì)算機(jī)中脫離Python環(huán)境獨(dú)立運(yùn)行, 可以使用PyInstaller 軟件包完成對(duì)Python 腳本的封裝工作。 它可以通過(guò)讀取已經(jīng)編寫(xiě)好的Python 腳本,分析代碼執(zhí)行需要的模塊和庫(kù), 然后將其依賴庫(kù)一同打包轉(zhuǎn)成可以直接脫離于Python 環(huán)境獨(dú)立運(yùn)行的程序。

      利用dos 命令進(jìn)入需要打包的程序文件夾下,通過(guò)代碼“pyinstaller -F(-D) -i ***.ico ***.py”語(yǔ)句完成python 腳本的封裝。 其中“-F”為將Python 腳本及所依賴的各種環(huán)境生成一個(gè)exe 格式文件,“-D”為創(chuàng)建一個(gè)目錄,exe 格式文件僅為Python 腳本執(zhí)行文件, 運(yùn)行依賴環(huán)境以應(yīng)用程序擴(kuò)展的文件格式存放在目錄內(nèi);“-i” 為設(shè)置程序圖標(biāo),需為ico 格式圖片。

      簡(jiǎn)單來(lái)說(shuō)就是可以通過(guò)PyInstaller 軟件包,將Python 腳本進(jìn)行封裝,進(jìn)而獲得一個(gè)可以在其他計(jì)算機(jī)中獨(dú)立的、完整的、可執(zhí)行的軟件。

      5 結(jié)語(yǔ)

      Python 語(yǔ)言簡(jiǎn)潔、開(kāi)源,具有強(qiáng)大數(shù)據(jù)處理及可視化功能。 本文基于氣象大數(shù)據(jù)云平臺(tái)天擎業(yè)務(wù)運(yùn)行以來(lái)的讀取、調(diào)用、使用經(jīng)驗(yàn),使用Python3部分函數(shù)的接口調(diào)用方案, 解決天擎平臺(tái)接口調(diào)用問(wèn)題,方便業(yè)務(wù)人員進(jìn)行業(yè)務(wù)應(yīng)用。

      (1)利用Python 語(yǔ)言可以完成氣象大數(shù)據(jù)云平臺(tái)天擎數(shù)據(jù)的獲取、處理、統(tǒng)計(jì)分析,提高運(yùn)行速度,加快工作效率。

      (2)以“松原市降水分布圖”和“松原市歷史氣象數(shù)據(jù)統(tǒng)計(jì)和對(duì)比分析”2 個(gè)執(zhí)行程序的開(kāi)發(fā)、編譯及應(yīng)用為例,基于Python 語(yǔ)言,運(yùn)用JSON 返回?cái)?shù)據(jù)的方式提高云平臺(tái)要素信息的提取與處理效率,完成天擎數(shù)據(jù)的可視化與歷史數(shù)據(jù)調(diào)用等。

      (3)基于Python 語(yǔ)言在氣象業(yè)務(wù)工作中的應(yīng)用,仍處于不斷改進(jìn)階段,部分功能尚有待完善。

      猜你喜歡
      參數(shù)信息松原市歷史數(shù)據(jù)
      基于充電策略估算動(dòng)力電池容量的方法
      汽車電器(2025年1期)2025-02-03 00:00:00
      基于BIM技術(shù)的建筑構(gòu)件參數(shù)信息交互研究
      基于SolidWorks和Excel二次開(kāi)發(fā)零部件參數(shù)化設(shè)計(jì)研究
      基于設(shè)備PF性能曲線和設(shè)備歷史數(shù)據(jù)實(shí)現(xiàn)CBM的一個(gè)應(yīng)用模型探討
      智能制造(2021年4期)2021-11-04 08:54:36
      基于故障歷史數(shù)據(jù)和BP神經(jīng)網(wǎng)絡(luò)的接地選線方案研究
      BIM參數(shù)信息在管網(wǎng)運(yùn)維平臺(tái)上的應(yīng)用研究
      模擬輸注系統(tǒng)的設(shè)計(jì)與應(yīng)用
      基于Hadoop技術(shù)實(shí)現(xiàn)銀行歷史數(shù)據(jù)線上化研究
      松原市備春耕堅(jiān)持高起點(diǎn)高標(biāo)準(zhǔn)
      向大作家學(xué)寫(xiě)作秘訣
      ——讀《曹文軒教你寫(xiě)作》有感
      彰化县| 师宗县| 赤水市| 金川县| 巴彦淖尔市| 富川| 苍梧县| 彭山县| 阳东县| 环江| 抚宁县| 霍州市| 壤塘县| 含山县| 沂南县| 简阳市| 鄄城县| 高要市| 五大连池市| 南京市| 瓦房店市| 云林县| 广丰县| 博野县| 平顺县| 湟中县| 山阳县| 海淀区| 嵊泗县| 喀什市| 乌兰浩特市| 古田县| 定兴县| 高密市| 准格尔旗| 东莞市| 青河县| 南昌市| 马边| 响水县| 平顺县|