周春宇
(英华达(上海)科技有限公司,上海 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 测试数据的分析是很好的借鉴。