基于Python的PPG信号数据分析

2023-06-21 21:18周晶
现代信息科技 2023年1期
关键词:数据分析

摘  要:医学临床工作中,人体生理参数是重要基础,目前常用ECG和PPG两种生理信息测量方法,PPG以非入侵式、无创、测量方便的特点,方便日常生活使用。文章先介绍PPG和PPG的工作原理及ECG和PPG的图像区别,再到程序设计中,通过导入数据和计算采样率、处理截取的片段、填空NAN、PPG信号滤波、重采样、分析信号、输出度量值、数据可视化等操作后,可以从蕴含多种人体生理信息的复杂PPG信号中,获取人体相关参数,用以判断人体的健康状态。

关键词:PPG;Python;Heartpy;数据分析

中图分类号:TP391 文献标识码:A  文章编号:2096-4706(2023)01-0096-04

PPG Signal Data Analysis Based on Python

ZHOU Jing

(Nanjing Sport Institute, Nanjing  210046, China)

Abstract: In the clinical work of medicine, the physiological parameters of the human body are important foundation. At present, ECG and PPG are two commonly used methods for measuring physiological information. PPG is non-invasive and convenient to measure, which is convenient to use in daily life. This paper firstly introduces the PPG and working principle of PPG and the image difference between ECG and PPG. And in the program design, through operation of importing data and calculating the sampling rate, processing the intercepted fragments, filling in the blank NAN, PPG signal filtering, resampling, analyzing signals, outputting metric values and data visualization, the relevant parameters of human body can be obtained from complex PPG signals that contain a variety of human physiological information to judge the health status of the human body.

Keywords: PPG; Python; Heartpy; data analysis

0  引  言

隨着社会的发展和人民生活水平的不断提高,人们对健康日益关注,越来越多的人希望能够实时了解自己的身体状况。因此,很多可穿戴的生理参数检测设备应运而生。

近年来,使用可穿戴式设备监测人体生理参数的方式已得到了普及,由于成本较低,在这种设备中监测人体信息最常用的方法是使用光电容积脉搏波(Photo Plethysmo Graphy, PPG)信号。PPG利用低强度红外光照射皮肤,测量光透射或反射到光敏传感器,检测经过人体血液和组织吸收后的反射光强度的不同,实时描记被测部位(指端、耳垂、鼻翼等)血液中物质变化的光吸收量,来获取外周为血管的血液容积随心脏搏动而产生的脉动性变化,根据光吸收基本定理朗伯-比尔定律,提取出包含心率等多种人体生理信息的PPG信号。

光电容积脉搏波描记法是一种电光技术,将传感器置于皮肤上方,通过发射绿光照亮皮肤表层,由传感器接收反射光强度变化,并通过对PPG信号的周期性检测与分析得到人体状态,这种无创方法实时检测人体参数的方式具有非常重要的实际意义。众多对光电容积脉搏波的临床应用研究表明了PPG信号中包含了许多人体生理参数,是实现心率、血氧饱和度、血压、血管弹性等实时监测的重要手段。

当前,全球新一轮科技革命和产业变革日新月异,移动互联网、云计算、物联网、大数据、人工智能等新技术在制造业和服务业的应用日益增多。Python作为科研技术人员常用语言,也顺势成为目前最红火的高级编程语言之一,Python常应用在科学计算、网络爬虫、数据分析、人工智能、自动化运维等众多领域,它在医学方面也有较好的表现。Python有很多开源包,如Heartpy是一款Python心率分析的工具包。本研究将用Python程序设计方法对采集到的PPG信号进行数据分析。通过对PPG信号数据分析获取相关生理信息,从而可以合理科学的地评估人体健康水平。

1  数据处理与数据分析

在程序设计方案中,整体思路是先将保存到文档里的PPG信号数据和时间数据导入,分别获取到PPG数据和计算得到采样率,然后通过numpy数组的填充NAN、信号滤波、重采样操作对数据进行基本的预处理,经过预处理后用Heartpy的process函数对数据进行信号数据分析,最后用plot相关函数将整理、分析好的PPG信号数据可视化。数据处理和数据分析共有八个步骤,分别是:导入数据和获取采样率、处理截取片段、填充NAN、PPG信号滤波、重采样、分析信号、输出度量值、数据可视化。

1.1  导入数据和获取采样率

在对PPG信号进行分析中,最重要的是要导入PPG数据和获取数据的采样率。在实验阶段,收集PPG数据,发现通常PPG原始数据会保存在“.csv”“.mat”“.txt”后缀文件中,而“.csv”最常用,故使用csv文件获取PPG数据。采样率,也称采样频率,定义了每秒从连续信号中提取并组成离散信号的采样个数,单位为Hz,例如100 Hz,就是每秒钟采集100个信号样本,采样率对PPG信号灯数据分析十分重要,直接决定了后面计算相关人体信息的准确程度。

在导入数据和采样率这部分的设计中,编写了init_input函数,专门用于获取PPG信号数据和采样率。函数中首先关注导入文件的有效性,利用os.path.split函数按照路径将文件名和路径分割,截取文件名,再用str.index(“.”),把文件后缀截取出来,用以确定输入文件的格式,判断文件后缀是否可用,目前只在有效后缀列表中,加入“.csv”字段,如果导入其他类型文件,会报错,并回到起始点,重新输入。确定绝对路径复合规则后,就可以用heartpy.get函数导入原始数据。如图1所示,反映了文件后缀的两种状况。

其次在是否有列名、输入列名、是否有采样率、输入采样率、计算采样率等逻辑设计中,采用input函数获取信息,if语句判断交互内容。其中在采样率的获取中,可以根据用户的时间数据列,用isinstance判断相应时间类型,判断是ms-based time(时间戳)还是datetime-based time(日期),正则表达式选择datetime-based time格式,使用适用的函数,自动计算出样本的采样率。计算出采样率后,函数返回可用的PPG信号原始数据和采样率。如图2和图3所示,是两种时间数据格式。

设计有容错措施,整个函数的执行外,有while True循环执行,除非是正确执行,return返回数据并退出函数,不然会一直在本函数执行重新输入。

1.2  处理截取片段

由于有时获取的样本采样率高、采样时间长,导致采样数据量较大,将大量的数据处理完,再可视化,屏幕几乎是密密麻麻的小点,无法直接观察PPG的信号规律,所以只选取某段感兴趣的数据进行分析,之后程序会提示选择的是哪个时间段数据。如图4所示,是截取后的片段图像。

1.3  信号数据预处理

1.3.1  填充NAN

本研究使用nump.nan_to_num函数,用数值数据(0)替换NaN值的时间段,避免分析的某些数值部分失败。填充完后,如图5所示。

1.3.2  PPG信号滤波(filter)

收集到的原始信号数据有好有坏,理想情况下的信号规律、稳定,不理想的数据杂乱、不稳定,但有某种规律的趋势,可以通过滤波器抑制噪声,将不理想的数据变得稍微规整些。样本根据时间进行采样,并进行描记信号数据,形成时域数据,这是一个以时间为参照的区域数据。根据傅里叶变换,时域的曲线可以由多个曲线叠加形成,如果把这多个曲线沿z轴展开,可以看到每个曲线的频率,再从z轴看,形成了这个时域曲线的频域,一个以频率参照的区域数据,此时把过低的频率和过高的频率过滤掉,这时再从时域角度看,就把纷杂的不理想数据给消除掉,形成较为规律稳定的信号数据,可以从信号中提取有用信息。也即通过傅里叶变换先把时域变换成频域,对频域范围进行过滤,再从频域变换成时域。

本设计中,使用heartpy.filter_signal函数,filtertype选择“bandpass”(巴特沃斯)带通滤波器,过滤掉频率小于0.8 Hz(≤48 bpm)和大于3.5 Hz(≥210 bpm)的杂乱信号数据。

1.3.3  重采样(resample)

采样率对PPG信号数据的分析至关重要,但采样率过低,计算BPM没问题,但要计算HRV(心率变异性)、SDNN、SDSD时会不太准确,所以如果要做适应性阈值分析时,会重采样到100 Hz以上。

设计中先用if语句进行判断,如果采样率过低,小于101 Hz,会计算适当倍数到105 Hz,再使用scipy.signal的resample函数进行重采样。如果采样率超过101,则完成了设计的“预处理”环节,然后进行信号分析。如图6和图7所示,分别是重采样前后对横坐标进行对比。

1.4  分析信号(process)

PPG信号是包含多种对心血管系统有关的有价值的复杂信息,通过数据分析,可以了解人体健康信息,比如每分钟心跳数(BPM),俗称心率,在ECG中能分析出来,在PPG中也同样能分析出来。

分析数据环节,使用Heartpy包的process函数,只要确定较好的PPG信号数据和较为准确以及合适的采样率,process函数就可以根据检测到的峰值自动化计算时间序列测量值,输出度量包含每分钟心跳数(BPM)、节拍间隔(IBI)、RR间隔的标准差(SDNN)、连续差异的标准偏差(SDSD)、连续差均方根(RMSSD)、20 ms以上的连续差异的比例(pNN20)、50 ms以上的连续差异的比例(pNN50)、RR间隔的中值绝对偏差(MAD)等。

其中process也还可以加入其他的选项,例如本程序中加入的report_time和clean_rr选项,分別是否报告process执行的总处理时间和清洗峰-峰间隔,它将尝试识别并拒绝异常值,拒绝大多数的峰值噪声区(低置信度变红)。

1.5  输出度量值

在process分析操作之后,会返回两个字典,一个是wording_data工作数据字典,还有一个是measures度量值字典,measures的每个数据都是经过process计算分析后的度量值,总共有13个,这里使用for遍历数组的方法,把字典的keys作为变量带入,提取并展示每个度量值。如图8所示,表现了程序最后的输出。

其中,BPM(beat per minute)是每分钟心跳数,IBI(inter beat interval)是节拍间隔,SDNN(standard deviation of RR intervals)是RR间隔的标准差,SDSD(standard deviation of successive differences)是连续差异的标准偏差,RMSSD(root mean square of successive differences)是连续差均方根,pNN20(proportion of successive differences above 20 ms)是20 ms以上的连续差异的比例,pNN50(proportion of successive differences above 50 ms)是50 ms以上的连续差异的比例,MAD(median absolute deviation of RR intervals)是RR间隔的中值绝对偏差,sd1(the standard deviation of instantaneous beat-to-beat interval variability)是瞬时心跳到心跳间隔变异性,sd2(the continuous long-term R/R interval variability)是连续的长期R/R间隔变异性,sd1/sd2是SD1/SD2比值,breathing rate是呼吸率。

另外可以根据计算出来的SD1、SD2、S、SD1/SD2,使用心率变异性的非线性几何分析的方法,画出庞加莱散点图,如图9所示,是彭加莱散点图的样图。

1.6  数据可视化(plot)

Heartpy中有plotter函数,专门对处理完的信号数据进行二维绘图-曲线图,它的内部构造,也是使用的matplotlib包,带入process返回的wording_data工作数据字典和measures度量值字典,即可进行绘图。在原图基础上进行绘画,加入绿点后如图10所示。

2  结  论

本研究利用Python高级语言设计程序对PPG信号进行数据分析,通过导入数据和采样率、是否选取片段、填空NAN、PPG信号滤波、重采样、分析信号、输出度量值、数据可视化等功能设计后,完成了基于Python的PPG信号数据分析,不仅获得了有关人体健康的基本信息如心率、呼吸率等,而且能根据节拍间隔、SDNN、SDSD、RMSSD等数据来分析心率变异性,还可以根据分析出来的SD1、SD2、S、SD1/SD2,画出庞加莱散点图,可以从蕴含多种人体生理信息的复杂PPG信号中,获取人体相关参数,用以判断人体的健康状态。给医务人员最直观的数据呈现,让程序作为工具,辅助医学发展。

参考文献:

[1] Richard_LiuJH. 光学心率测量原理 [EB/OL].(2015-11-04)[2022-05-16].https://blog.csdn.net/richard_liujh/article/details/49615395

[2] CVETKOVIC D,?BEYLI E D,COSIC I.Wavelet Transform Feature Extraction from Human PPG,ECG,and EEG Signal Responses to Elf Pemf Exposures:A Pilot Study [J].Digit Signal Process,2007,18(5):861-874.

[3] 梁康,孙迎.基于智能手机提取PPG测心率方法准确性研究 [J].生物医学工程学进展,2014,35(4):191-195.

[4] 许彦坤,石萍,喻洪流.基于成像式光电容积描记技术的人体生理参数检测研究进展 [J].北京生物医学工程,2017,36(6):648-654.

[5] 钟敏,陈丹妮,陈思思.光电容积描记技术测量心率的应用研究 [J].黑龙江科技信息,2015(18):60-61.

作者簡介:周晶(1983.03—),女,汉族,江苏南京人,副教授,博士,研究方向:数据挖掘。

收稿日期:2022-06-24

基金项目:江苏省高校哲学社会科学研究课题“基于大数据分析的体育院校学生用户行为模式研究”(2021SJA0392);教育部产学合作协同育人项目(202101224027);江苏高校“青蓝工程”项目(苏教师函〔2022〕2号)

猜你喜欢
数据分析
新常态下集团公司内部审计工作研究
浅析大数据时代对企业营销模式的影响
基于读者到馆行为数据分析的高校图书馆服务优化建议