周春宇
(英華達(dá)(上海)科技有限公司,上海 201114)
如今工程師、分析師在數(shù)據(jù)分析上面臨眾多挑戰(zhàn),他們希望用最小的編程代價(jià)進(jìn)行數(shù)據(jù)分析,Python 是滿足他們需要的一個(gè)利器。Python 是一種流行的通用編程語言,使用Python 可以寫出簡潔、易讀、缺陷少的代碼[1]。使用Python 對XML 格式的測試數(shù)據(jù)進(jìn)行分析前,須先對XML 的數(shù)據(jù)結(jié)構(gòu)進(jìn)行分析,即分析XML中有哪些數(shù)據(jù)是需要獲取的。因?yàn)閃iFi 工作在兩個(gè)頻率段2.4 GHz 和5 GHz,每個(gè)頻段有許多的信道,需要對獲取的數(shù)據(jù)按照信道來進(jìn)行分類,對同信道的數(shù)據(jù)進(jìn)行分析才有意義。此外,使用Qt Designer 制作一個(gè)GUI 程序界面,批量導(dǎo)入和解析測試數(shù)據(jù),然后使用模塊matplotlib 對數(shù)據(jù)進(jìn)行圖型分析。
通過分析WiFi 的XML 數(shù)據(jù)格式(見圖1),發(fā)現(xiàn)每個(gè)TestStep 節(jié)點(diǎn)包含頻率Freq,TestStep 下面的節(jié)點(diǎn)Meas 包含測項(xiàng)名稱POWER_AVG_DBM 和測試值Val,我們需要將測試值按照測試項(xiàng)目名稱和頻率獲取放入列表中。
使用xml.dom.minidom 模塊來讀取XML,獲取需要的節(jié)點(diǎn)數(shù)據(jù),相關(guān)代碼如下。
圖1 WiFi 的XML 數(shù)據(jù)格式
到此已經(jīng)獲取POWER_AVG_DBM測試值的列表,其他的測試值依此方式獲取,將解析XML 數(shù)據(jù)的代碼存儲成模塊Traversal_xml_path,以便后續(xù)調(diào)用。
下面對POWER_AVG_DBM 測試值按照信道進(jìn)行分類,需要對每個(gè)頻點(diǎn)的測試項(xiàng)目撰寫一個(gè)獲取數(shù)據(jù)的函數(shù),以獲取信道CH1 的POWER_AVG_DBM 為例,代碼如下。
函數(shù)最后返回一個(gè)名稱為tx_2412_0_power_list 的列表,信道CH1 測項(xiàng)POWER_AVG_DBM 的測試數(shù)據(jù)就存儲在這個(gè)列表中,其他的測試值依此方式分類,將實(shí)現(xiàn)測試數(shù)據(jù)分類的代碼存儲成模塊Test_Value,以便后續(xù)調(diào)用。
本文使用Qt Designer來創(chuàng)建GUI界面。Qt Designer 可以用來創(chuàng)建主窗口、自定義窗口部件等用戶界面。這里創(chuàng)建一個(gè)Widget 窗口,然后在窗口上創(chuàng)建控 件Label、LineEdit、PushButton、ComboBox。Label是標(biāo)簽,用來顯示文字,搭配其他控件使用,顯示控件的名稱;LineEdit 是單行文本編輯框,用于顯示已選擇測試數(shù)據(jù)文件夾的路徑;PushButton 是按鈕,點(diǎn)擊后實(shí)現(xiàn)被調(diào)用函數(shù)的功能;ComboBox 是下拉列表框,列表中編輯多個(gè)選項(xiàng),使用時(shí)根據(jù)需求選擇列表中的某個(gè)選項(xiàng)[3]。最后創(chuàng)建成功的GUI 界面如圖2 所示。
圖2 創(chuàng)建成功的GUI 界面
窗口創(chuàng)建好后保存會生成一個(gè).ui 的文件,使用pyuic5 可以把它轉(zhuǎn)化為python 的純代碼形式。新建一個(gè)bat 批處理文件,文件內(nèi)編輯如下指令,運(yùn)行后就會生成一個(gè).py 的文件。
接下來對新生成的.py 文件,編寫控件需要實(shí)現(xiàn)的功能函數(shù)。
點(diǎn)擊這個(gè)按鈕后,會出現(xiàn)選擇存放數(shù)據(jù)的文件夾窗口,同時(shí)會把已選擇的文件夾的路徑顯示在文本編輯框內(nèi)。
解析所選文件夾內(nèi)的測試數(shù)據(jù)。
將解析的XML 測試數(shù)據(jù)生成圖形,可以使用matplotlib 模塊來實(shí)現(xiàn),這里以直方圖為例來進(jìn)行分析。使用matplotlib 模塊前需先導(dǎo)入模塊,代碼是import matplotlib.pyplot as plt[2]。下面代碼中“chal”“chan”“test”分別為下拉列表框“Channel”“Chain”“TestItem”選擇的值。
利用信號槽機(jī)制,將各個(gè)控件與事件函數(shù)連接起來。下面代碼是與按鈕相連接的函數(shù)名,按鈕被觸發(fā)時(shí)函數(shù)就被執(zhí)行。
到此,整個(gè)GUI 界面及相應(yīng)的功能都已經(jīng)被實(shí)現(xiàn)。
直接運(yùn)行這個(gè)GUI 程序,選取數(shù)據(jù)路徑并進(jìn)行數(shù)據(jù)解析,選取“Channel”“Chain”“TestItem”的值,點(diǎn)擊按鈕Calculate WiFi Chart,就會生成直方圖,如圖3 所示,到這里基本上實(shí)現(xiàn)了通過python 解析XML 測試數(shù)據(jù)進(jìn)行圖形分析的要求。這里只是以直方圖為例進(jìn)行說明,當(dāng)然也可以使用matplotlib 模塊進(jìn)行其他的圖形分析,如折線圖、散點(diǎn)圖等。
圖3 直方圖
由于Python 結(jié)構(gòu)簡單,代碼定義清晰,易維護(hù),且Python 擁有豐富的庫,特別是matplotlib、pandas 等進(jìn)行圖形分析和數(shù)據(jù)分析的庫,因此利用Python 對測試數(shù)據(jù)進(jìn)行分析起到方便高效的作用。本文闡述了如何通過Python 對智能音響WiFi 的XML 測試數(shù)據(jù),進(jìn)行解析、分類、圖形分析等,所提及的方法對其他電子產(chǎn)品WiFi 測試數(shù)據(jù)的分析是很好的借鑒。