网上教学英文翻译2019年第4期56
计算机应用技术
信息技术与信息化
基于Python 的医学数据爬取及分析处理
苗 玥* 刘晓勇 金佳妮 李可心
MIAO Yue LIU Xiao-yong JIN Jia-ni LI Ke-xin
摘 要 本文主要研究了网络数据的爬取及对爬取的DICOM 文件的读取及分析处理过程,为疾病的预防和风险建
模提供一定的借鉴意义。
关键词 爬虫;数据分析;Python;DICOM
doi:10.3969/j.issn.1672-9528.2019.04.016
* 内蒙古科技大学包头医学院计算机科学与技术系 内蒙古 包头 014000
python请求并解析json数据[基金项目] 包头医学院“花蕾计划”项目(大学生创新训练):“ 基于Python 的医学数据挖掘 ”,项目编号为:2018BYJJ-HL-76
在大数据背景下,医疗卫生事业的数据正在以惊人的速度呈几何倍数增长。而对这些数据的获取及分析,有助于疾病的成因和影响因素的研究,对人类健康水平的提高具有重大意义。然而,很多数据存放在不同的系统中,系统间缺乏联系,形成数据孤岛,很难对这些数据加以分析和处理[1]。因此,采用网络爬虫技术对允许爬取的网站进行数据爬取,可以解决数据孤岛的情况。在获得数据之后,对数据进行清洗和整理,通过数据分析最终可以建立疾病风险评估和预测的模型,从而对疾病的预防有一定的指导意义。
本研究结合构建疾病预防模型的需要,对数据进行获取、解析、整理,为疾病预防研究所需数据进行规范化管理,降低了数据采集的成本,提高了工作效率。同时也可以为患者及未患病的人提供疾病预防措施,从而降低发病率。1 数据爬取及处理方法1.1 爬虫原理
爬虫就是对网站请求并提取数据的自动化程序。其中请求,提取,自动化是爬虫的关键。使用统一资源定位符(Uniform Resource Locator,URL)地址封装必要的请求参数,以模拟浏览器请求访问WEB 服务器的方式,使用超文本传输协议HTTP(Hypertext Transfer Proto-col)获取网站服务器端的许可,返回原始页面并解析数据。搜索引擎的网络爬虫抓取工具属于常见网络爬虫
[2]
。本研究主要通过设置一些代
理服务器反爬虫获取医学网站的数据,然后处理非结构化的医学数据。
1.2 获取网络数据的过程
利用爬虫程序模拟浏览器发送请求,即发送一个Re-quest,在Request 中包含有请求的头部、请求体等,请求头中如果没有配置user-agent 客户端,服务端可能将其视为非法用户,并在登录时使用cookies 存储登录时的cookie 信息。如果服务器能响应正常,它获得包含以下内容的一个响应,其中包含:Html、Json、图片、视频等内容。利用正则表达式RE 模块、Json、第三方解析库BeautifulSoup、Py-Query、XPath 等对获取的Html 内容进行解析。最后解析图像等二进制数据,以二进制可写的方式写入文件中。具体过程:浏览器提交请求--->下载网页代码--->解析成页面--->数据保存。Request 模块缺陷是不能执行JS 和CSS 代码[3]。1.3 对于反爬虫的处理
在短暂的时间内,以一个固定的IP 快速大量的访问同一个网站,管理员认为是一些非法操作,会把这个IP 给封了,爬虫程序自然也就不能起作用。解决方法:比较成熟的方式是:就是通过IP 代理,以不同的IP 进行访问,这样IP 就不会被封掉了。可是IP 代理的获取本身就是一个很麻烦的事情,网上有免
费和付费的,但是质量都层次不齐。所以我们需要设置一些代理服务器,每隔一段时间换一个代理,就算IP 被禁止,依然可以换个IP 继续爬取,具体代码如下。如果是企业里需要的话,可以通过自己购买集云服务来自建代理池。
import urllib2
h t t p p r o x y _h a n d l e r = u r l l i b 2.P r o x y H a n -dler({“http” : “124.88.67.81:80”})
nullproxy_handler = urllib2.ProxyHandler({}) proxySwitch = True if proxySwitch:
opener = urllib2.build_opener(httpproxy_handler)
计算机应用技术信息技术与信息化
else:
opener = urllib2.build_opener(nullproxy_handler) request = urllib2.Request(“www.baidu. com/”)
response = opener.open(request)
ad()
1.4 数据清洗
从网络上爬取的数据经常会出现空行、重复记录、缺失值、数据不完整、数据矛盾、异常值等情况。这些不仅对我们后期数据的分析和挖掘有影响,而且会影响建模甚至给出错误的建模结果,这就使得数据清洗显得尤为重要。数据清洗的主要任务就是消除这些干扰信息,保留有用信息,并为以后进一步数据分析提供有力的帮助。数据清洗主要是删除原始数据中重复数据、异常值,过滤掉与建模无关数据、平滑噪声数据等。在数据清洗过程中,缺失值数据的处理方法分为三类:删除、插补、不处理。
2 影像数据DICOM处理
本文中的数据均来自于网络公共卫生机构,对其中获得的DICOM标准医学图像进行了相关处理,这种格式的文件无法用普通图片软件打开,目前也有一些专用的软件来处理这种格式的文件。然而,随着大数据的发展,医学科研人员需要对DICOM格式的文件进行数据挖掘和医学图像分析。因此,有必要解析和显示DICOM标准图像,并将DICOM格式转换成一般格式的图像文件,保存并手动标记医生感兴趣区域中的信息。一方面有利于医生对关注区域进行信息的读取,另一方面对DICOM文件的信息提取和图像显示有利于医学图像信息的获取和通信[4]。
2.1 DICOM文件图像信息的读取
本文通过python代码获取图像中的标记信息,其中包含病人的年龄、姓名、出生日期、采集时间、各项检查、图像的大小、症状、特征等。把获取的信息保存在对应的变量里,提取图像文本信息的部分代码如下所示。
import pydicom
log4j漏洞解决方案站长工具亚洲欧洲import json
def loadFileInformation(filename):
information = {}
ds = ad_file(filename)
information[‘Allergies’] = ds.Allergies
information[‘BodyPartExamined’] = ds.BodyPartExamined
information[‘PatientAge’] = ds.PatientAge information[‘PatientBirthDate’] = ds.PatientBirthDate
information[‘PatientID’] = ds.PatientID
information[‘PatientName’] = ds.PatientName information[‘PatientSex’] = ds.PatientSex
information[‘StudyID’] = ds.StudyID
information[‘StudyDate’] = ds.StudyDate
information[‘StudyTime’] = ds.StudyTime
print (dir(ds))
print (type(information))
return information
a=loadFileInformation(‘000000.dcm’)
print (a)
2.2 DICOM文件的图像显示
读取DICOM图像,需要以下几个库:matplotlib 、py-dicom、numpy 、CV2。其中pydicom专门处理D
ICOM图像的python专用包,numpy高效处理科学计算的包,matplotlib 是图像库。因此,需要先下载这些库,然后安装之后才能利用库中的特定方法处理和分析图像文件,具体代码如下所示。
import cv2
import numpy
import pydicom
from matplotlib import pyplot as plt
dcm = ad_file(“000000.dcm”)
dcm.image = dcm.pixel_array * dcm.RescaleSlope + dcm.RescaleIntercept
slices = []
slices.append(dcm)
img = slices[ int(len(slices)/2) ].py()
ret,img = cv2.threshold(img, 90,3071, cv2.THRESH_ BINARY)
img = numpy.uint8(img)
im2,contours, _ = v2.findContours(img,cv2.RETR_ LIST,cv2.CHAIN_APPROX_SIMPLE)
mask = s(img.shape,numpy.uint8)
for contour in contours:
cv2.fillPoly(mask, [contour], 255)
img[(mask > 0)] = 255
kernel = StructuringElement(cv2.MORPH_ ELLIPSE,(2,2))
img = phologyEx(img, cv2.MORPH_OPEN, kernel)
img2 = slices[ int(len(slices)/2) ].py()
img2[(img == 0)] = -2000
plt.figure(figsize=(12, 12))
plt.subplot(131)
plt.imshow(slices[int(len(slices) / 2)].image, ‘gray’)
php和servlet2019年第4期57
计算机应用技术信息技术与信息化
system下载plt.title(‘Original’)
plt.subplot(132)
plt.imshow(img, ‘gray’)
plt.title(‘Mask’)
plt.subplot(133)
plt.imshow(img2, ‘gray’)
plt.title(‘Result’)
plt.show()
3结果
图像文件处理界面如图3-1所示,通过python可以打开处理DICOM图像,对文件进行解析,读取其中相关的标注信息,可以实现对文件的读取与保存的工作,保存后的文件可以是一般图片格式,可以通过不同的角度对DICOM标准图像进行查看和手工标注,可以将DICOM文件中图像的参数及标注显示出来。
4总结
通过网络爬虫技术可以获取互联网上的大量数据,是收集和整理数据的有力工具,但后期数据分析研究仍较为匮乏,对于医疗数据,缺乏获取、组织和分析数据的完整流程。本研究对于医学数据的采集和处理具有实用价值和实践意义,尤其对医学影像数据处理方面提供了借鉴意义。
参考文献:
[1]丘文峰.基于Python的医学图像处理框架及其应用[D].华南师范大学,2010.
[2]吴剑兰.基于Python的新浪微博爬虫研究[J].无线互联科技,2015(06):93-94.
[3]钱程,阳小兰,朱福喜.基于Python的网络爬虫技术[J].黑龙江科技信息,2016(36).
[4]全海英, 杨源. DICOM数据集与DCM文件格式[J].计算机应用,2001,21( 8) : 14- 146.
【作者简介】
苗玥(1973.09-),女,汉族,内蒙古巴盟人,硕士研究生,副教授,研究方向:物联网,计算机网络编程。
(收稿日期:2019-04-10)图3-1DICOM文件图像显示
3结论
采用DRV2700芯片设计了一种压电陶瓷驱动器电源。首先根据DRV2700的设计手册与压电陶瓷物镜驱动器的控制要求,设计了该电源的主要元件参数。然后,利用微控制器控制该电源输出阶跃电压、最大电压,采用示波器分别测试阶跃波和纹波电压等待指标,经分析该电源输 出阶跃电压、电流、功率以及纹波电压等主要指标符合设计要求。该电源有着体积小、电路结构简单、成本低等优点,对采用压电陶瓷微位移定位的研究有着重要意义。
参考文献
[1] 聂雄,陈华.数字共焦显微仪序列光学切片自动采集方法研究[J].仪器仪表学报,2010,31(9):2148-2152.
[2] 林广升,陈华.基于LTC6090的格式压电物镜驱动器驱动电源设计[J].广西大学学报,2015,40(3):744-749.[3]叶彦. 高功率精密压电陶瓷驱动电源的研究与设计[D].合肥工业大学,2016.
[4] www.ti/cn/lit/ds/symlink/drv2700.pdf
【作者简介】
黄世玲(1986-),男,硕士,讲师,主要研究电源技术。
(收稿日期:2019-04-09)
(上接55页)
2019年第4期58
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论