查看原文
其他

从流调数据中寻找感染真相

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:李钊颖

文字编辑:张馨月

技术总编:张计宝

导读

由新型冠状病毒引发的、爆发于湖北武汉的肺炎疫情,给社会、经济、民生带来了许多困扰给社会、经济、民生带来了许多困扰,每日的疫情通报数据牵动着亿万中华儿女的心。流调,即流行病学调查,其意义在于找到传染源以及传播途径,通过对接触者进行分类管理来防止疾病进一步散播,以及掌握疫情波及范围和影响因素。在这场新冠肺炎的阻击战中,流行病学调查至关重要,流调人员相当于对切断传染病传播起重要作用的‘特种部队’。


小编搜集了河南省各市公布出来的流调数据,截至22624时,河南省包括17个省辖市在内累计报告新型冠状病毒肺炎确诊病例1272例,其中有确诊病例详细流调数据的有944例,对数据进行简单处理后,利用Stata软件做了文本分析。

首先将数据读入Stata,部分数据截图如下:

clear all cd D:\冠状病毒import excel using 疫情数据.xlsx, first case(lower) clear //将第一行作为变量名读入数据


从搜集到的病例情况来看,这944个确诊病例中,年龄分布很广,既有八十多岁的老人,也有出生刚刚几天的婴儿。从感染的途径看,1月21日至2月26日这一个多月大概可分成前后两段,前一段内(主要在2月之前),确诊的病人基本都和武汉有直接接触。大约在2月之后,在政府公布的确诊病例中,和武汉没有直接接触的病人开始出现并明显增加,我们称其为二代传播病例,专家称为本土病例,即那些与输入性病例密切接触而感染的患者。二代病例继续传播可产生三代及以上的病例。当某个城市出现二代、三代病例或源头不清的病例时,说明本地流行的风险正在增加。因此,减少疫区病例的输出,严控非疫区的输入性病例,目前新型冠状病毒防控的主要目标是尽量避免二代甚至三代病例的出现。


调用python实现分词


对数据简单处理之后,我们开始分词。首先在stata中调用python,利用Stata与python交互的中文分词系统——jieba分词接口,将“疫情数据.txt”中的流调数据进行分词。
clear allpythonimport jiebayiqing=[]with open(r"D:\冠状病毒\疫情数据.txt",encoding="gb18030") as f: for i in f.readlines(): str=i yiqing.append(str)with open("分词结果.txt","w",encoding="utf8") as f2: for unit in yiqing: seg_list = jieba.cut(unit) #分词采用精确模式 for word in seg_list: f2.write(word+"\n")end
在stata中直接输入python就打开了python端口,输入end即可结束调用。这里我们采用jieba分词,jieba是中国人研发的一个精品插件,它可以对一段中文进行分词。精确模式试图将句子最精确地切开,会列出不重复的所有词,适合进行文本分析。因此我们采用精确模式进行分词。关于分词程序的详细讲解,大家可以看这篇推文《高亮输出之唐诗作者》
接着打开分词结果文档,删除分词中的单字、缺失值。还需去除停用词,停用词过滤,是文本分析中一个预处理方法。它的功能是过滤分词结果中的噪声,在原始文本集中去掉不需要的词汇,字符(例如:的、是、啊等)。停用词表可以网上下载,也可以根据分析需要添加。小编是在下载的通用停用词表中添加分析不需要的词汇,例如日期、数字、英文字母等。去除干扰之后,对分词结果做一个词频统计,删除重复的词以及频次小于10的词。具体程序如下所示:
clearinfix strL v 1-12000 using 分词结果.txt,clearrename v keyworddrop if ustrlen(keyword) == 1 // 删除单字drop if keyword =="" //删除缺失值compresskeep keyword
preserveimport delimited using 停用词表.txt, clear /// encoding("utf-8") varname(nonames)outsheet using 停用词表.txt, replace nonamesnoquotelevelsof v1, local(keyword)restoreforeach word in `keyword' { drop if keyword == "`word'" //删除停用词}
levelsof keyword, local(keyword)bysort keyword: gen frequency = _Nduplicates drop //删除重复词drop if frequency < 10 //删除出现频率小于10的词list in 1/5
从词频统计结果中可以看到频次前五的词:


处理好分词之后,我们绘制出词云图:

bysort keyword: gen freq = _Nduplicates dropgsort -frequencywordcloud keyword frequency using 词云.html, replace /// size(15 80) range(3840 2160)shellout词云.html

从频次表以及词云图中都可以看出,“确诊”出现的频率最高,“武汉”第四,说明了确诊患者与武汉关系密切,但输入性病例数据与本土病例数据混杂在一起,这样做出分析的结果说明不了什么。于是小编根据确诊病例是否有武汉旅居史将数据划分为“一代”病例(367例,有武汉旅居史)和“二代”病例(481例,无武汉旅居史),分开进行分析。


一代病例分析


从数据中可以看出,一代确诊病例基本都和武汉有直接接触,要不在武汉工作、生活、学习,要不就是出差、旅行或者探亲等。
和前边总分析类似,我们将确诊病例信息进行分词、整理,统计词频以及画出词云图:


可以看出在一代病例中,除了“确诊”和“医院”这两个几乎在每个信息中都出现的词外,“武汉”出现的频率最高,这也说明了一代确诊病例和武汉有密切的关系。“返回”、“乘坐”、“自驾车”等也都说明了一代病例属于输入性病例。这是疫情初期属于防控的重点,只有严防输入性病例,二代病例数量才会少。


二代病例分析


大约在2月之后,在政府公布的确诊病例中,没有和武汉直接接触的病人开始出现并明显增加,我们称其为二代传播病例,专家称为本土病例。据不完全统计,河南省公布的确诊病例中,二代传播的病例占到一大半,这说明在2月之后,更多病例是在河南本地感染,例如接触型感染,聚会感染、家庭聚集型感染等。全国一起隔离也是为了最大限度减少由输入性病例引起的二代病例数量。小编通过手动分类,剔除一代病例和旅游感染病例以及信息太短的数据,最后剩余481个数据。将其读入Stata,分词处理之后统计词频以及画出词云图:


从词云图中可以看出“接触”和“密切接触”频率很高。二代本土病例几乎没有武汉旅居史,但确诊者因为家中有武汉返乡人员,或者和确诊者密切接触甚至简单接触从而感染病毒。为了更清楚的知道病例的为何感染,小编手动(+眼动)分类统计了二代确诊病例的感染原因,根据提供的信息感染途径分为以下8种: 

家庭:感染病例家中有已确诊的病例,或是某病例的家属、亲属等。接触:病例接触了武汉返乡人员,或是接触了后来被确诊的病例。不明:数据中只说了病例活动踪迹、无武汉旅居史、没有接触武汉返乡人员,但是感染了。聚会:病例与武汉返乡人员或病毒携带者一起聚餐或者聚会时感染新冠肺炎。探亲:病例探访亲友时感染新冠肺炎。医院:病例在医院工作或者是照顾住院的已感染家人时感染新冠肺炎。工作人员:防控工作人员感染病毒。打牌:在麻将馆打牌时感染。


clear all import excel using 二代.xlsx, first case(lower) cleartab 分类



在整理数据时,小编发现很多家庭聚集性病例,例如安阳一个在武汉工作的女孩,因为爷爷去世,回到老家,参加了丧宴,随后,家里的父母及三个长辈共5人被她感染。家庭成员之间的感染控制的确具有挑战性,比如小编作为一个从武汉上学回来的娃,虽然隔离期在家里吃饭单独用碗筷,交谈戴口罩,但还是避免不了和家人有接触,万幸自己身体健康没有成为“不肖子孙”。

 

除了家庭聚集型感染之外,接触传播病例就是最多的。有的只是和确诊病例(之后被确诊)有短暂的接触便被传染上了,因为病毒有潜伏期,潜伏期间无症状或症状较轻,接触时对方还未确诊,就这样被传染上了,从这里也可以看出病毒的狡猾。

 

        还有不明原因感染上新冠肺炎的,病例并没有接触武汉及湖北返乡人员,就是正常的出行生活便被感染了。例如有个病例一直未出门,有一天出门去买双黄连,回去不久便身体不适住院了,接着便被确诊了。类似这种咱也不知道是怎么感染上的,小编就划分到了不明一类里。

 

探亲类的感染病例,多发生在朋友、亲属之间,有在医院探视时感染的,也有家中探访感染的。因为聚会、聚餐被感染的病例,在政府没有强调疫情艰巨之前聚了就不说什么了,当时大家都不太清楚病毒多狡猾,强调之后再冒险聚餐,一个疑似传染一群,这就只能怪自己了,就不能听钟老的话等春暖花开病毒消失我们再聚吗?还有这个打牌的,牌桌如战场,在政府三令五申严防控的情况下,你还敢去打牌?净给国家添乱了!

 

医院感染有医护人员被感染,也有在医院工作、就诊时感染,工作人员是在防控疫情工作时感染病毒。在这里要向医护、工作人员致敬,面对疫情,坚守在防控一线,为了人民的生命健康,用热血之躯为我们铸就着安全防线!

 

        最近一周全国好消息不断传来,27日全国确诊327例,湖北新增确诊318例,武汉313例,除湖北外各省市仅增9例,湖北非武汉仅5例,除武汉外疫情算是已经控制住了,期待新增归零的那一天。没有一个冬天不可逾越,没有一个春天不会来临。疫情散尽,国泰民安,是每一个中华儿女的共同心愿。虽然好消息不断但大家不能放松警惕,行百里者半九十,不能懈怠,继续严防控,坚持到底才对得起全国一起隔离的这一个多月!






对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐

熟悉又陌生的reshape

NBA球员薪资分析——基于随机森林算法(二)

NBA球员薪资分析——基于随机森林算法(一)

高亮输出之唐诗作者

湖北省各市疫情数据爬取

古代诗人总去的这些地方你一定要知道!

DataFrame数组常用方法(二)

ftools命令——畅游大数据时代的加速器

卫健委的“糊涂账”

Pandas中数据的排序与切片

DataFrame数组常用方法

巧用局部宏扩展函数dir

过了14天潜伏期真的没事了?

Pandas基本数据类型介绍

NumPy数组基本介绍

“个性化”sortobs命令,教你实现排序自由

携手战疫,我们在行动

恭贺新春,平安顺遂|各省疫情关注度地图

关于我们



微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存