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