2020年初时的那场疫情,不但对武汉的医疗系统进行着考验,还使得无数程序员察觉到,数据并非是冰冷的数字,而是能够救命的情报,我作出决定,要用Python将微博上那些愤怒、焦虑以及感动的声音,转变为可以看得见的战疫地图。
爬虫不是偷数据是和时间赛跑
2020年2月15日晚间十点时分,我针对微博热搜榜写下了首行爬虫代码。那时武汉新增确诊病例尚在五位数范围徘徊,每条微博评论背后皆是一个真实家庭的煎熬状况。我所设定的爬取关键词涵盖“发热门诊”“物资求助”“确诊患者”,每隔十分钟进行一回抓取操作,单日产生的数据量突破了80万条。
在技术选型之际,摒弃了selenium这般重型武器,转而采用requests以及移动端接口,单台服务器每日能够抓取300万条评论。最为难熬之时是2月18日,微博的反爬策略陡然升级,众多账号被封禁。我与两名学生通宵对代理池进行维护,直至凌晨四点终于在验证码识别接口处寻得突破口。
情感曲线藏着城市的脉搏
在运用SnowNLP处理完毕首批50万条评论之后,我凝视着情感得分走势图发呆持续了半分钟。1月23日开展封城行动的当天,微博情感均值降至0.21这一达到历史极限的冰点位置,然而在2月3日火神山实现交付的那日,数值回升至0.67。最令我内心受到触动的并非是这些呈现出高低波动变化的情况,而是深夜时段所展现出来的数据特征。
日日夜夜到了凌晨两三点的时候,武汉网友给出的评论情感得分会一下子降低0.3以上,点开详细具体内容,一大屏幕都是“睡不着”“妈妈还在发烧”“不清楚明天会是如何状况”,有个ID称作“江城盼春”的用户接连17天在凌晨发布博文,一直到2月19日那条“核酸转阴了”,情感得分直接提升到0.95,机器能够读懂数值,却读不出打下这行字时抖动颤抖的手。
GIS地图让数字长出骨骼
用传统折线图仅能呈现趋势,然而唯有将病例数据安置到GIS地图上,你才能够明晰看清病毒究竟是怎样顺着铁路线进行蔓延扩散的。我运用调用高德开放平台的API,将全国300多个地级市的累计确诊病例依照密度去进行渲染,色块从浅黄一直到深红,武汉周边城市圈在2月上旬已然黑得发紫。
最具价值的是社区级热力图,我借助爬取武汉本地论坛的求助帖地址信息,标记出洪山区、江汉区等十几个街道的感染密度,2月25日,一个志愿者团队私信我,称他们依据这份地图调整了防护服分配策略,将更多物资送至地图上颜色最深的城中村。
舆情分析看到理性的微光
不少人觉得疫情刚开始的时候,网上到处都是恐慌的情绪情况,然而,LDA主题模型得出的结果,让人意想不到,在2月初的260万条微博样本以内。占比最大的并非是抱怨方面,而是“物资捐赠渠道”以及“家庭防护措施”,这两个主题的权重超过了四成。武汉的网友最为关心的并非是问责,而是哪里能够买到N95。
负面情绪的确是存在着的,不过是集中于特定的那个时点。在李文亮医生离世的那一天,舆情指数从平日里的42急剧飙升到了89,在相关话题之下出现了11万条评论。然而我们通过情感分析进行过滤之后发现,攻击性的言论仅仅只占到7.3%,更多的却是“记得他说的每一句话”“今天不刷梗,只点蜡烛”。这些数据使得我重新去理解所谓的网络舆论,情绪化的只是少数,沉默的大多数在认真地记着。
知识图谱锁定谣言七寸
那个比病毒传播得还要更快的疫情谣言,在1月底的时候,光是“盐水漱口防新冠”这样的虚假信息,就在35分钟内被转发破万次。我呢,运用Neo4j构建了谣言传播知识图谱,将发布者、转发者以及关键节点账号都给全部可视化啦。而图谱展示出,那条谣言的原始信源是一个养生类营销号,借助132个水军账号,在17个微信群里完成了首次扩散。
后来,这套模型帮某网信部门做了验证,他们提供了50条待核查信息,此后,我们凭借知识图谱匹配历史谣言特征,结果准确率达到了81%,其中,最典型的要数“飞机喷洒消毒药水”谣言,在2019年某地禽流感期间,它与旧谣言实体节点的重合度高达93%,然而,机器并不会忘记,可是人却会。
预测预警不能靠拍脑袋
2月中旬的时候,我们试着运用ARIMA模型去对一周之后的确诊病例数进行预测,输入从1月20日开始到2月10日的数据来训练,模型显示在2月17日武汉新增确诊大概在1600例,而实际公布的值是1660例。这样的情况没有任何值得骄傲自满的地方,因为早在非典时期就已经有人开展过类似的工作了。
是预警模型具备真正的价值,我们对发热门诊搜索指数、口罩购买需求、相关话题讨论量这三个具有相应权重的维度进行加权处理,于2月下旬成功预测出3个地市存在疫情小反弹的情况,其中有一个县级市当时零新增已然持续保持了5天的时间,然而我们的预警指数连续三天超出阈值范围,到了第四天当地报告出现了1例境外输入关联病例。
疫情数据自爆发至收敛,恰好是我写完一整套博客所需的时间跨度,现在回过头去眺望那些在凌晨修改过的代码,以及跑向崩溃边缘的服务器,还有绘制过程出现失误的可视化图表,它们同六万多名离去者的生命轨迹相互叠加在一起,永远地定格在了 2020 年的那个春天,如果当时有其他人运用这套系统提前一周发出预警,最终结果是否会产生不同之处呢?要是换成你来编写这些代码,你会首先优先去爬取哪些数据呢?在评论区谈谈你心中的思路,以便让更多从事技术方面工作的人能够看到下一次危机来临之际,我们是不是能够做得更加出色。



