TowardsDataScience 博客中文翻译 2020(二百三十八)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

使用深度学习的新冠肺炎 CT 分析

原文:https://towardsdatascience.com/covid-19-ct-analysis-using-deep-learning-7342a6ba5a31?source=collection_archive---------52-----------------------

我们如何在(几乎)没有数据和注释的情况下开发深度学习新冠肺炎 CT 分析工具

一月中旬,关于中国出现一种导致发烧和咳嗽的新病毒的消息开始传来。

当时,我们正在与一家中国公司合作,整合我们的胸部 CT 分析工具。该公司开发了一个云 PACS(图片存档和通信系统),使放射科医生能够远程查看病例并编辑来自多家医院的放射报告。

我们注意到胸部 CT 扫描中有肺部异常的患者,这些患者被引导到实验室检查。随着医学成像算法的研究,我们认为可以开发一种解决方案来检测这些发现。

当时我们还很天真,无法想象几个月后,全世界都会遭受冠状病毒疫情的侵袭,而我们的新冠肺炎 CT 分析工具将作为新冠肺炎检测和患者监测的工具,为全世界的放射科医生提供服务。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

迪米特里·卡拉斯泰列夫在 Unsplash 上的照片

首先,我们面临两个问题(这在医学成像领域相当普遍):(1)小数据集——我们只有几个疑似新冠肺炎患者的病例;(2)完全没有注释

在接下来的章节中,我将阐述我们如何使用深度学习工具快速构建新冠肺炎解决方案。这里提出的思路和方法可以用于任何具有 CT 影像特征的新病毒或疾病,尤其是在数据几乎不可用的初期阶段。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

新冠肺炎 chect CT 分析的深度学习框架[图片由作者提供]

1.基于切片的解决方案

CT 扫描包括一系列切片(对于不熟悉 CT 的人,请阅读下面的简短说明)。由于我们对新冠肺炎患者的扫描数量非常有限,我们决定使用 2D 切片代替每次扫描的 3D 体积。
这使我们能够将数据集多元化,并克服小数据集的第一个障碍。使用 2D 切片的另一个原因是对 CT 扫描的切片厚度变化(两个连续 CT 切片之间的 z 边缘)具有鲁棒性的能力。

我们收集了 50 名患者的异常胸部 CT 扫描,这些患者被放射科医生诊断为可疑新冠肺炎。

【CT】扫描是一种诊断成像程序,它使用 x 射线来构建身体的横截面图像(“切片”)。根据对所研究对象体积中 x 射线束衰减系数的测量来重建横截面。在数据显示在屏幕上之前,常规的重新标度被制成 CT 数,用 Hounsfield 单位(HU) 表示【1】。CT 切片具有高动态范围(通常为 12 位或 16 位),并以 DICOM 格式提供。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

检查 ct 切片[图片由作者提供]

将 CT dicom 文件读取为 numpy 数组的代码示例:

2。肺部分割

分析的第一步是在图像中找到\分割肺部,并在肺部周围裁剪图像。这使得我们可以专注于感兴趣的区域(ROI)进行进一步分析。

用于医学成像分割任务的一种流行的深度学习架构是 U-net%e5%92%8c%5bTiramisu%5d(https://arxiv.org/abs/1611.09326.pdf) 。原始架构有许多变化,包括我们使用的包含 VGG16 预训练编码器的架构。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

基于 U-net 的肺部分割架构[图片由作者提供]

为了进行训练,我们使用了 6150 个肺部异常病例的 CT 切片及其相应的肺面罩。使用表示肺组织的[-1000,0] HU 的窗口对输入切片进行剪辑(意味着所有大于 0 的值都被设置为 0,所有小于-1000 的值都被设置为-1000)。然后,我们将像素归一化到范围[0,1],并将图像大小调整为 224x224 像素。

剪切和归一化 CT 切片的代码示例:

我们使用随机裁剪、水平翻转和向肺部区域添加正态分布噪声来扩充数据,以提高对感染性肺部(这在新冠肺炎患者中很常见)的分割的鲁棒性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

将噪声添加到肺部区域作为增强(噪声标度=0.1,噪声均值=0.0,噪声标准值= 0.8)[图片由作者提供]

向图像添加正态分布噪声的代码示例:

这里我们使用了一个私有数据集,但是有几个 CT 扫描的公共数据集,都有相应的肺掩膜( LUNA16肺部 CT 分割挑战 2017StructSegMedSeg )。MedSeg 是为新冠肺炎病人准备的。

3.新冠肺炎分类器

由于我们已经决定使用 2D 切片,并且由于我们没有注释来解决分类任务,我们手动将 50 个病例的每个切片注释为正常或异常,这意味着它包含新冠肺炎感染(因为感染在连续切片中可见,这不是一个非常复杂的注释任务!).使用这种方法,我们设法收集了 1865 个 CT 切片的注释数据集:1036 个正常,829 个异常。
为了进一步丰富我们的训练集,我们采用了数据增强技术,包括图像旋转、水平翻转和裁剪。然后,我们使用上文详述的肺部分割来裁剪肺部 ROI,并将每个输入图像的大小调整为 224X224 像素,以基于在 ImageNet 数据库上预训练的 ResNet-50 架构来训练每个切片的新冠肺炎分类器。使用迁移学习通常可以提高分类性能,尤其是在训练数据有限的情况下。
由于 ImageNet 分类任务包括 1000 个类别,而我们只需要对 2 个类别进行分类,因此我们移除了预训练模型的最后几层,并添加了两个密集层,然后添加了一个 sigmoid 激活函数。

加载预训练 ResNet-50 架构并修改最后几层以适应新分类任务的代码示例(使用 Keras):

4.细粒度本地化

如何输出 汉化 地图带 无标注
Grad-CAM 技术深度学习中最常用的解释方法之一(旨在可视化“网络在看”哪里,以对特定目标进行分类)。在医学图像中,这种技术通常用于弱监督定位甚至分割,其中仅通过正常与异常的切片标签来进行监督,以生成定位热图图像。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用 CAM 技术生成的热图图像示例,用于 X 射线图像中的病理定位。来源: Rajpurkar,Pranav 等人(2017)

在 GradCam 生成粗略定位图的同时,我们在两种图像分辨率上采用该技术,并在它们之间进行融合,以生成新冠肺炎感染区域的精细定位图。更具体地说,我们在对应于 ResNet-50 网络的大小为 14X14 和 28X28 的分辨率的激活层上使用 GradCam(在这些分辨率的最后激活层上定义 GradCam 输出)。

这两个贴图被归一化为[0,1]并调整为输入图像形状(224X224)。我们将两个图相乘以生成一个细粒度的定位图,它可以作为热图图像应用于彩色图像:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

融合两种分辨率图像的 GradCam 精细定位:热图显示肺部新冠肺炎感染区域的高活性[图片由作者提供]

5.案例决策和 3D 概述

在我们为每个 2D 切片生成肺部分割和新冠肺炎定位图之后,我们可以将所有切片的这些结果组合起来,以获得该病例的完整 3D 体积概览。为了将不同切片的定位图融合成平滑的视图,我们应用阈值来获得新冠肺炎感染分割,并使用 3D 高斯模糊。

使用 matplotlibskim age . measurepython 库可以在肺部和感染部位生成三维绘图图像:

为了结束病例级分类,我们计算了新冠肺炎分类器检测为阳性的切片数量和属于肺部区域的切片数量。如果它们之间的比率超过预定义的阈值(根据最佳表现设置),则整个病例被分类为疑似新冠肺炎。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用于监测患者疾病进展的 Corona 评分。资料来源: O. Gozes 和 M . Frid-Adar 等人(2020 年)

我们还提出了一个严重性评分,允许医生随着时间的推移跟踪患者的新冠肺炎病——“电晕评分”。通过由新冠肺炎分类器对阳性检测切片的定位图上求和,并乘以切片像素间距(z 轴)来计算分数。电晕得分是以厘米为单位的体积测量。

参考文献

[1]https://radiopaedia.org/articles/computed-tomography?lang=us

[2] O .龙内贝格、p .菲舍尔和 t .布罗克斯。 U-net:用于生物医学图像分割的卷积网络%e5%92%8c%5bTiramisu%5d(https://arxiv.org/abs/1611.09326.pdf) (2015)。医学图像计算和计算机辅助介入国际会议。

[3] M. Frid-Adar 等人使用带有 imagenet 预训练编码器的 u-net 改善胸部 x 光照片中解剖结构的分割 (2018)。运动器官、乳房和胸部图像的图像分析。施普林格,查姆,2018。159–168.‏

[4] K. He 等用于图像识别的深度残差学习 (2016)。IEEE 计算机视觉和模式识别会议录。

[5] RR。Selvaraju 等人 Grad-cam:通过基于梯度的定位从深度网络进行视觉解释 (2017)。IEEE 计算机视觉国际会议论文集。

[6] O. Gozes 等人冠状病毒(新冠肺炎)疫情的快速人工智能开发周期:使用深度学习 ct 图像分析进行自动检测的初步结果&患者监测 (2020)。arXiv 预印本 arXiv:2003.05037。

提出的新冠肺炎检测和定位方法是作为我作为算法开发负责人工作的 RADLogics 的初始工具开发的。

这是我的第一个媒体博客——希望你喜欢!【maayan.frid@gmail.com】随时给我写信

揭示美国巨大鸿沟的开源新冠肺炎仪表板——第二部分

原文:https://towardsdatascience.com/covid-19-dashboard-1910df63f14e?source=collection_archive---------48-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

基于约翰·霍普斯金大学的数据(最后更新于 2020 年 4 月 14 日)用新的开源代码生成了一张美国新冠肺炎互动地图

为什么基于地区、数据驱动的决策有理由开放全球最大的经济体——为什么位于的迪凯特是当前的 COVID 热点,而加州的旧金山却不是

“我们相信上帝,所有其他人都必须带来数据。”—w·爱德华兹·戴明

问当前的问题是:在数周的封锁后,我们何时以及如何开放这个国家,以减缓新冠肺炎的蔓延?缓解措施有效吗?从目前的数据中我们可以了解到什么?为了回答这个问题,可视化数据非常重要,它能让我们更好地了解我们生活的这个疫情时期的事态。约翰·霍普斯金·新冠肺炎仪表板在展示新型冠状病毒的传播方面给人留下了非常深刻的印象,但我注意到了两个大缺陷。

  • 它没有显示病例数随时间的增长
  • 一个地区的确诊病例或死亡人数与其人口规模无关

诚然,像加利福尼亚州的圣弗朗西斯科、伊利诺伊州的芝加哥和 T21 这样的大城市,由于人口众多,自然会有更多的新冠肺炎病例,而不是像阿拉巴马州的农村地区或印第安纳州的农村地区。较低的病例数或报告的死亡数是否是回答我们在个别地区很好地控制这种病毒的完整措施?答案是没有。为了看到数据所说的,人们必须在他们的仪表板中考虑当地人口。因此,我使用 python 编写了一个软件代码来分析和呈现新冠肺炎数据,并使用 GitHub 的代码库平台使其免费可用【我在本系列文章的第一部分中发布了关于该软件的所有内容】。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1 :交互式新冠肺炎仪表盘显示了美国各县新冠肺炎死亡人数的历史和地理增长。气泡的大小代表每百万人口的死亡人数,颜色代表新冠肺炎县的死亡率

图 1 展示了提议的新新冠肺炎仪表板的重要特征。您可以与历史上任何时间点的数据进行交互,并查看病例数在几天或几周内的增长情况。您可以将鼠标悬停在感兴趣的特定区域上,查看那里的 COVID 案例的详细统计数据。气泡的大小和颜色包含了关于病例数或死亡数(用该县的人口数标准化)以及该地区死亡率的重要信息。

那么可视化热点需要考虑哪些重要因素呢?

由于缺乏广泛的检测,确诊病例数低于受病毒影响的总人数。因此,不幸的是,死亡人数是衡量这种传染病传播的更可靠的方法。本文中考虑的数据分析的重要因素有:

  • 人均 死亡人数 全县
  • 人均 确诊 冠状病毒病例
  • 死亡率 :每 100 例确诊病例死亡人数
  • *:3 天确诊病例数增长*
  • 天数 自首例确诊病例

如果某个特定县的死亡率很高,这意味着要么对受病毒影响的真实人口进行了总体漏报,要么表明该县的医疗系统面临潜在的严重压力,要么该县有相当大比例的弱势人口因病毒而患重病。另一方面,一个地方最糟糕的一天还在后头,如果是确诊病例的 增长率 高于全国平均水平。自第一例病例以来的 天数 显示了一个特定的县在其独特的病毒传播轨迹中所处的位置。通常随着一个县的发展,曲线变平的时间越长,距离第一个案例的时间就越长。因此较低的死亡率、较低的增长率和自第一例病例以来比全国平均水平多的天数意味着一个社区比美国的许多其他社区做得更好*。* 为了重开经济,一个基于区域的数据驱动的决策预计会考虑所有这些因素。**

美国的新冠肺炎热点在哪里?

本文图表最后更新于 2020 年 4 月 14 日

基于每百万人口死亡人数的美国各县排名揭示了美国在抗击疫情方面的分歧。两张图片显示了美国各县是如何应对疫情的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2 :基于每百万人口死亡人数的美国新冠肺炎热点地区(截至 2020 年 4 月 14 日)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3 :基于每百万人口确诊病例的新冠肺炎热点(截至 2020 年 4 月 14 日)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

表 1 :美国新冠肺炎热点县,按人均死亡人数排名(截至 2020 年 4 月 14 日)

图 2 ,是一个geo-scatter图,其中每个气泡代表美国的一个县。气泡的大小表示每百万人口中死亡人数,气泡的颜色表示 死亡率 死亡率。最大的泡沫遍布美国东海岸和中西部地区。令人惊讶的是,美国西海岸各县的死亡人数相对于其人口数量要少。当地各县的死亡率差异很大。****

图 3 ,也是geo-scatter,但气泡大小代表 确诊 病例相对于该县人口的数量,颜色代表*比率,即过去 3 天报告的新型冠状病毒病例的快慢。在 确诊 病例的geo-scatter中可以看到美国大分水岭,如图图 2* 所示。美国东部和中西部地区受到疫情的重创,而西海岸相对较好地遏制了疫情。基于确诊病例*南达科他州科罗拉多州俄克拉荷马州密西西比州路易斯安那州佐治亚州佛罗里达州狭长地带。分散在中西部和山区的一些地区,确诊病例的数量每 2 到 3 天翻一番。***

表 1 按百万分之死亡人数降序排列了至少有 500 人和 3 例 COVID 死亡的美国县。不足为奇的是,纽约州的 T42 是受这种病毒打击最严重的县,每百万人口中有将近 1400 人死亡。随着 死亡率 率约为 7 %(美国平均报告死亡率为 4.2%) 纽约,NY 可能仍有大量未报告的冠状病毒感染病例。随着~110k 确诊 病例于 4 月 14 日(本文日期)纽约于其第 45-日标志以来第一例 COVID 病例在那里出现。**

令人惊讶的是,像佐治亚州埃尔勒尔县这样的地方。,格里尔县,OK。路易斯安那州比恩维尔县。堪萨斯州科菲县。亚拉巴马州钱伯斯县。位于印第安纳州迪凯特县。根据每百万人口中的死亡人数,美国排名前 30 的热点城市有。令人惊讶的是,一些人口密度高的大城市地区,如伊利诺伊州的芝加哥或加利福尼亚州的旧金山,在处理这场危机中表现相对较好。这张表显示的是美国印第安纳州的迪凯特县。在这个疫情的中心,每百万人口中有 375 人死亡,自从第一个病例出现以来,在第 23-天。这一统计数字堪比在受灾严重的密歇根州韦恩县(底特律,密歇根州)每百万人中有 460 人死亡以及在其第 36-日以来的首例。****

那么到目前为止,加州和华盛顿的情况如何?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

表 2 :加利福尼亚州的新冠肺炎热点县,按每 100 万人口中的死亡人数排名

因此,为了知道西海岸各州是否真的做得更好,我用类似的标准列出了【人口】中死亡人数加州 ( 表 2 )和华盛顿州 ( 表 3 )的县。挑出这两个州背后的合理性来自于这样一个事实,即新冠肺炎在美国的爆发首先发生在华盛顿州的西雅图和加利福尼亚州的旧金山附近的县。******

在加州,马林、洛杉机、圣克拉拉等县仍然高居加州之首,每百万人中有 27 至 38 人。自从那里出现第一例病例以来,在 85 天内,洛杉矶县每百万人口中约有 35 人 死亡。确诊病例增长率为每三天 1.12。旧金山湾区的各县在遏制疫情方面做得相对较好,在第一例病例出现后的第 75-天,每百万人中有 17 至 38 人。与美国中西部的农村地区相比,这一数据显示旧金山在减轻新冠肺炎方面做得更好。**********

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

表 3 :佤邦的新冠肺炎热点县,按每 100 万人口的死亡人数排列

当华盛顿州金县的一家疗养院报告冠状病毒爆发时,全国首次开始关注新冠肺炎。如今,每百万人中约有 131 人死亡,死亡率约为 6%。这在华盛顿州排名第二。这里的情况可能是,大量老年人集中在一个县,导致高于平均水平的死亡率。****

【更多未来分析将基于读者的兴趣和反馈】……

用于重新生成仪表板和分析新冠肺炎数据的开源代码片段

与仪表板互动对于真实感受每个县在抗击疫情中所处的位置非常重要。下面是代码片段,让您生成相同的分析,并与图 14 中显示的仪表板进行交互。****

首先克隆 git 存储库

使用 Google 的合作实验室很容易用简单的代码片段克隆我的 GitHub 和所有的依赖项。

****# Clone repository*
!git clone https://github.com/sidbannet/COVID-19_analysis.git
%cd ./COVID-19_analysis
!git submodule init
!git submodule update --remote***

在 python 控制台中加载包和工具

克隆存储库后,使用 Jupyter Notebook 的单元:

  • 导入分析类
  • 导入绘图工具
***# Import nessesary modules*
**from** **tools** **import** collection **as** cll
**import** **plotly.tools** **as** **tls**
**from** **plotly.offline** **import** iplot
**import** **plotly.express** **as** **px****

解析数据

代码是使用面向对象的编程风格编写的。因此对象d被定义为包含分析所需的所有方法和属性。

  • 定义一个对象d(你可以在这里命名任何其他名称)作为类cll.DataClass()的实例
  • 使用d.parse()和一个受保护的方法d._parse_timeseries_()解析数据
  • df_us包含解析数据的 panda DataFrame 是否是以后用于仪表板的必要可视化数据
***# Setup data class and parse the database* 
d = cll.DataClass() 
d.parse()
d._parse_timeseries_() 
df_us = d.df_geo_us**

获取动画仪表板

由于与马萨诸塞州杜克斯和楠塔基特县人口规模相关的数据库中的错误,我们做了一个小的更正。

**df_us.Population.values[cll.np.where(df_us.Key == 'Dukes and Nantucket,Massachusetts,US')] = 17352

df_us.Number_Cases_per_1mil.values[cll.np.where(df_us.Key == 'Dukes and Nantucket,Massachusetts,US')] = \
    df_us.Confirmed.values[cll.np.where(df_us.Key == 'Dukes and Nantucket,Massachusetts,US')] \
    / df_us.Population.values[cll.np.where(df_us.Key == 'Dukes and Nantucket,Massachusetts,US')]

**for** inum, value **in** enumerate(df_us.Number_Cases_per_1mil.values):
    df_us.Number_Cases_per_1mil.values[inum] = cll.np.floor(value)# Get the time string for plotly functionality
date_time = [str(date) **for** date **in** df_us.Date]
date_str = [str.split(date, ' ')[0] **for** date **in** date_time]
df_us.Date = date_str**
  • 使用plotly获得动画仪表盘
**fig = px.scatter_geo(df_us,
                     lat="Lat", lon="Long",
                     color="Rate",
                     color_continuous_scale='jet', range_color=[1.0, 2.0],
                     hover_name="Key",
                     hover_data=['Population', 'Confirmed', 'Death'],
                     size="Number_Cases_per_1mil",
                     animation_frame="Date",
                     title='Confirmed Cases per 1 mil population',
                     size_max=int(4000000),
                     width=2000, height=1000,
                     scope = 'usa',
                     projection="albers usa")
fig.show()**

这将显示基于每个县确诊病例的交互式仪表板(图 4 )。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4 :交互式新冠肺炎仪表盘,显示美国各县新冠肺炎病例的历史和地理增长情况。气泡的大小代表每百万人口的确诊病例数,颜色代表新冠肺炎的本地增长率

要获得类似的仪表板(图 1 ),但报告了 COVID 的死亡,请在单元格中使用以下代码片段:

***# Doing some pre-analysis*
df_us['Norm_Death'] = (df_us.Death / (df_us.Population + 0.0001)) * 1e6fig = px.scatter_geo(df_us,
                     lat="Lat", lon="Long",
                     color="Mortality",
                     color_continuous_scale='jet', range_color=[1.0, 10.0],
                     hover_name="Key",
                     hover_data=['Population', 'Confirmed', 'Death'],
                     size="Norm_Death",
                     animation_frame="Date",
                     title='Deaths per million in county',
                     size_max=int(8000000),
                     width=2000, height=1000,
                     scope = 'usa',
                     projection="albers usa")
fig.show()**

开源新冠肺炎仪表板 GitHub 要点

**** [## 通过我的推荐链接加入 Medium 悉达多·班纳吉博士

作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…

medium.com](https://medium.com/@sidbannet/membership)****

新冠肺炎仪表板

原文:https://towardsdatascience.com/covid-19-dashboard-b7f8b7c59431?source=collection_archive---------16-----------------------

我使用 Dash 构建了一个基于 web 的仪表板来可视化疫情

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

被困在付费墙后面?点击这里阅读完整的故事和朋友链接!

我是 Greg Rafferty,湾区的数据科学家。这个项目的代码可在我的 GitHub 和仪表板在https://covid-19-raffg.herokuapp.com/现场。

我用 Python 和 Dash 构建了一个 web dashboard,图表用 Plotly 制作。数据由约翰霍普金斯系统科学与工程中心提供,并在太平洋时间每晚 5:30 自动更新到仪表板上。

焦点选择

仪表板可以在全球范围内设置在疫情上,或者通过顶部的单选按钮集中在美国或欧洲:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

此按钮更改每个显示图表的基础数据,以反映选定的区域。

每天晚上大约 5 点,约翰霍普金斯大学用当天的新病例更新他们的数据源。我的仪表板自动运行一个 ETL 脚本来下载新数据,将其处理成仪表板要求的格式,并上传到 Heroku。这里的标题声明了数据最近更新的时间。

组件

仪表板有五个主要组件:指标、所选区域的感染率、按子区域的病例分析、感染图和轨迹图。

指示器

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

共有四个指标,每个指标都由红色的当前值和绿色的与昨天相比的百分比变化组成。

  • 累计确认是所选地区所有检测并确认病例的累计总数。
  • 当前活动仅测量今天活动的案例。它被计算为ACTIVE = CONFIRMED — DEATHS — RECOVERED
  • 迄今死亡人数衡量所有新冠肺炎相关死亡人数的累计总数
  • 痊愈病例是指患者被认为已经从疾病中康复,不再被感染或传染的病例数。

传染病

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

感染图表按日期显示所选地区的CONFIRMEDACTIVERECOVEREDDEATHS的总数。将鼠标悬停在图表上,将显示特定日期的每个指标的计数。使用鼠标,您可以放大和缩小,或者单击并拖动以选择要放大的框。此外,将鼠标悬停在图表(或控制面板上的任何图表)上,可以看到图表右上角的几个控制按钮。每个图表的选项略有不同,但特别有用的是将图表重置回原始缩放级别的能力。

按分区域分列的案例

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

病例图形按CONFIRMEDACTIVERECOVEREDDEATHS子区域显示折线图,可通过图表下方的单选按钮进行选择。如果选择的地区是WorldwideEurope,显示的子地区是国家。如果选择的区域是United Sates,则子区域是状态。悬停时,将为鼠标悬停的子区域显示所选指标的准确计数。

默认情况下,它显示创建该仪表板时特别感兴趣的子区域。底部的下拉栏允许您选择不同的子区域进行显示,可以是WorldwideEurope焦点所在的国家,也可以是United States焦点所在的州。在下拉栏中输入将允许您搜索子区域。

与此仪表板上的其他两个折线图一样,单击图例中的某个项目会暂时从图表中删除该项目。再次点击会将其添加回去。双击一个项目将删除所有其他项目,并隔离图表上的单个项目。再次双击将添加回所有项目。

感染地图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

感染图在每个子区域上都有一个圆形标记。标记的大小与该子区域内CONFIRMED病例的平方根相关,颜色表示前 7 天内新确诊病例的百分比。从本质上来说,标记的大小是衡量自爆发开始以来该次区域内有多少人感染了该病毒,颜色是衡量该病毒目前的活跃程度,深红色表示该病毒正在积极传播,白色表示它已得到控制。将鼠标悬停在一个标记上,将显示国家名称和这两个度量的确切值。与其他图表一样,地图可以缩放和拖动。图表下方是控制地图显示数据的日期的滑动条。默认情况下,它被设置为最近的可用日期,但通过向左拖动,您可以看到疫情随时间的分布。

轨迹

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

该图表显示了疫情在子区域内的轨迹。x 轴按子区域显示累计确认数,y 轴显示上周确认的案例数。通过这种可视化,一旦某个次区域在某种程度上成功控制了疫情,该线应该会突然下降,如图中的中国(绿色)和南朝鲜(橙色)所示。虽然date不在任何一个轴上,但数据仍然按日期绘制;将鼠标悬停在任一行上将显示该数据点的记录日期。此外,底部的日期滑块也控制这个图表;因此,随着地图的出现,轨迹随时间的变化可以被观察到。

新冠肺炎数据收集:Python 和 API 的故事。

原文:https://towardsdatascience.com/covid-19-data-collection-a-python-api-story-347aafa95e69?source=collection_archive---------33-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图像来源

本文将简要讨论使用 python 从 API 收集数据。这方面的议程如下。

  1. 使用 python 连接 API
  2. 将收集的数据解析为 CSV 格式
  3. 一点点蟒蛇熊猫的味道

API-应用编程接口:

假设你想在你的程序中使用其他网站数据。你有不同的选择。你可以使用 BeautifulSoup 和 Scrapy 来抓取网站,也可以使用一个界面来帮助你和你的程序交流。那个接口就是 API。

更详细地说,如果网站有 API,你可以将你的 connect 应用程序连接到互联网,它会将数据发送到服务器。然后,服务器检索数据,并根据您的应用程序执行某些操作。这主要是通过 API 实现的

那么安全问题呢?

现代 API 具有多层安全特性。当您的应用程序向服务器发送请求时,当目标网站发送响应时,它们永远不会完全暴露在互联网上。这两种通信都是通过小数据包和按需共享的信息进行的。这是如此的可信,以至于很多大公司都是通过 API 来获得收入的。下面是关于 API 为什么有用的几点。

  1. 现代的 API 遵循 HTTP 和 REST 的标准,对开发人员友好。
  2. 这些不仅仅是一段代码,而且是为特定受众的消费而构建的。
  3. API 的构建遵循适当的安全性、治理。它在 SDLC 中开发,并受到全面监控。

这个博客致力于使用 python 连接一个 API,同时我也会让你知道熊猫库的一些技术。这里我将使用新冠肺炎 API。你可以从 rapid-api 网站得到那个 API。这些人在制作不同的 API 方面做得很好。我会推荐访问网站或者你可以做一个自己用的 API。这个网站的好处是,你可以得到不同编程语言的样本代码。

先决条件:

  1. python 3 的本地开发环境
  2. API URL 和密钥

在这里,密钥被用作第一安全措施来识别所请求的数据是真实的。它用于防止不道德地使用原料药。

让我们开始编码吧。

步骤 1-导入这些必要的库

import json 
import pandas as pd
import requests

步骤 2-获取 API URL 和密钥并发送请求

url = “[y](https://corona-virus-world-and-india-data.p.rapidapi.com/api_india)our url"headers = {
 ‘x-rapidapi-host’: “api host”,
 ‘x-rapidapi-key’: “api token”
 }response = requests.request("GET", url, headers=headers)
print(response)

如果响应为 200,则表示请求成功。

通常,API 有关于 API 细节及其用途的文档。一些 API 服务有 API 包装器,需要安装在你的电脑上才能访问 API。

API 可能包含 JSON、XML 或任何定制格式的数据。为了解析数据,你可以在 python 中使用不同的库。请求和响应头通常包括请求头和密钥。这是关于您使用 API 服务的当前信息。

瞧啊。!!你拿到结果了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

版权所有 Somesh

但是我得到的数据就像一个嵌套的 JSON 数据结构。让我们进一步处理它。

步骤 3-解析 JSON 数据

parsed_data = json.loads(response.text)
print(parsed_data)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

版权所有 Somesh

JSON 数据似乎更有条理。但是这些仍然是嵌套形式。让我们来弄平这个 JSON

def flatten_json(json):
   dict1 = {} def flatten(i, name=’’): if type(i) is dict:
         for a in i:
             flatten(i[a], name + a + ‘_’)
      else:
         dict1[name[:-1]] = i flatten(json)
   return dict1df = pd.DataFrame.from_dict(flatten_json(parsed_data), orient=’index’)

flatten_json()将帮助您在单个 json 结构中制作嵌套的 json。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

版权所有 Somesh

这个 JSON 很容易转换成 DataFrame。你得到的 csv 格式的数据是一列数字值。你看到的按字母顺序排列的数据实际上是索引。

让我们在数据集中应用一些熊猫技术

  1. 全州确诊病例

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

版权所有 Somesh

states = [‘Andhra Pradesh’,’Arunachal Pradesh’, ‘Assam’, ‘Bihar’, ‘Chhattisgarh’, ‘Goa’, ‘Gujarat’, ‘Haryana’,
 ‘Himachal Pradesh’, ‘Jharkhand’, ‘Karnataka’, ‘Kerala’, ‘Madhya Pradesh’, ‘Maharashtra’, ‘Manipur’,
 ‘Meghalaya’, ‘Mizoram’, ‘Nagaland’, ‘Odisha’, ‘Punjab’, ‘Rajasthan’, ‘Sikkim’, ‘Tamil Nadu’,
 ‘Telangana’, ‘Tripura’, ‘Uttar Pradesh’, ‘Uttarakhand’, ‘West Bengal’, ‘Andaman and Nicobar Islands’,
 ‘Chandigarh’, ‘Dadra and Nagar Haveli’, ‘Daman and Diu’, ‘Delhi’, ‘Lakshadweep’, ‘Puducherry’,
 ‘Jammu and Kashmir’, ‘Ladakh’]
list1 = []
list2 = []
for i in states:
 list1.append(df.at[‘state_wise_{}_confirmed’.format(i), 0])
 list2.append(i)
df1 = pd.DataFrame(list(zip(list2,list1)), columns=[‘state’,’state_value’])

这将有助于您根据各州获得已确认的案例详情

2 .重置 _ 索引()

df.reset_index()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

版权所有 Somesh

此处索引已更改。数据帧中的前一个索引已被转换为列。

3。df.rename()-重命名列名

df = df.rename(columns={“index”: “Statewise_details”, 0 : “Values”})

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

版权所有 Somesh

4。在[]

print(df.at[4,’Statewise_details’],”:”,df.at[4,’Values’])

at[]可帮助您随时访问单元格值。输出如下所示

total_values_deltaconfirmed : 1370

5。根据状态为治愈、康复、死亡和确诊病例创建单独的数据帧,并将其合并

如果您扩展案例 1 的逻辑(状态确认案例,您将得到以下结果

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

版权所有 Somesh

你可以使用熊猫来执行不同的操作。稍后,您可以使用 matplotlib、seaborn 和许多其他库和工具来可视化数据。

这个博客是一种收集数据的方式,这些数据在服务器中不断产生。很快我将带着另一个网络抓取的故事回来。

我希望你喜欢自然语言处理第一部分 & 第二部分。在 Medium 关注我,或者订阅我的博客了解他们。一如既往,我欢迎反馈和建设性的批评,可以通过 Twitter @RoutraySomesh 联系。

熊猫数据框架的新冠肺炎数据处理

原文:https://towardsdatascience.com/covid-19-data-processing-58aaa3663f6?source=collection_archive---------2-----------------------

下载、加载、合并、清理和聚合新冠肺炎时间序列数据的分步指南

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

安东Unsplash 上拍照

几天前我发表了一篇文章,展示了一步一步构建用于探索冠状病毒传播的交互式数据可视化的教程。一些人在上面留下了私人笔记,专门询问数据处理步骤。

今天,我张贴一步一步的教程来下载,加载,合并,清理和汇总新冠肺炎时间序列数据。数据由约翰·霍普金斯大学系统科学与工程中心(JHU·CSSE)提供,他们在 Github 的公共页面上分享了他们的数据。约翰霍普金斯 CSSE 汇总了主要来源的数据,如世界卫生组织、国家和地区公共卫生机构。这些数据免费提供,并且每天更新。

在我们进入细节之前,我想给你看一下新冠肺炎数据处理的最终结果。均为累计数据。新增病例 均为日明智数据。本数据帧按 日期国家/地区 排序。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

新冠肺炎数据处理的最终输出

此外,我还要感谢以下项目提供的新冠肺炎数据处理思路:

为什么是数据处理?

数据处理背后的主要原因是数据几乎从来不会以一种对我们来说已经准备好的形式出现**。以我个人的经验,花在数据科学项目上的大量时间是在操纵数据上。**

让我们来看看新冠肺炎的时间序列数据,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

以下是我的一些问题:

  • 确诊死亡保存在不同的 CSV 文件中。这使得我很难在相同的数据可视化中绘制它们。
  • 看一下上面的截图。日期实际上显示为列名,这是非常奇怪的数据形状。
  • 确诊死亡痊愈 因数据缺失不完全匹配,部分国家不上报 痊愈 的省/州级 stat。
  • 其他缺失值、错误数据类型和三艘游轮报告的案例。

本新冠肺炎数据处理教程运行以下步骤:

  1. 从 JHU CSSE 公共网站 Github 页面下载原始 CSV 数据集
  2. 加载原始 CSV 数据集并提取常用日期列表
  3. 将原始确认、死亡和恢复的 CSV 数据合并到一个数据框架中。
  4. 由于缺少值、错误的数据类型和来自游轮的案例,执行数据清理。
  5. 数据汇总:增加一个活动案例列 活动 ,由active_case = confirmed — deaths — recovered计算。将数据聚集到Country/Region wise 中,并按照DateCountry/Region对它们进行分组。之后,加上当日新增 病例新增死亡新增痊愈 减去前一日相应的累计数据。

在数据处理的最后,我将用 Altair 展示 2 个简单的数据可视化以供演示。

逐步下载,加载,合并,清理和汇总新冠肺炎数据

让我们导入我们需要的库

**import pandas as pd
import wget**

1.下载原始数据集

进入约翰霍普金斯 CSSE 公共 Github 页面并导航至csse _ covid _ 19 _ data/CSS _ covid _ 19 _ time _ series/****

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

单击全局 CSV 数据集,然后单击“原始”按钮获取数据 url。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后,将这些 URL 保存在一个集合中,并使用wget.download()下载

**# url of the raw csv dataset
urls = [
    '[https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv'](https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv'),
    '[https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv'](https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv'),
    '[https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_recovered_global.csv'](https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_recovered_global.csv')
][wget.download(url) for url in urls]**

一旦下载完成,它应该输出如下,这 3 个文件应该出现在您的工作目录。

**['time_series_covid19_confirmed_global.csv',
 'time_series_covid19_deaths_global.csv',
 'time_series_covid19_recovered_global.csv']**

2.加载数据集并提取日期列表

**confirmed_df = pd
    .read_csv('time_series_covid19_confirmed_global.csv')deaths_df = pd
    .read_csv('time_series_covid19_deaths_global.csv')recovered_df = pd
    .read_csv('time_series_covid19_recovered_global.csv')**

让我们快速看一下数据,例如,confirmed_df.head()显示 93 列。在deaths_dfrecovered_df上应该是一样的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过运行confirmed_df.columnsdeaths_df.columnsrecovered_df.columns,它们都应该输出如下相同的结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请注意,从第 4 列开始,所有列都是日期,以获取日期列表confirmed_df.columns[4:]

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.合并确认,死亡和恢复

在合并之前,我们需要使用melt()将数据帧从当前的宽格式转换为长格式。换句话说,我们把所有的日期列都转换成了值。以下是相关的主要设置:

  • 使用‘Province/State’‘Country/Region’‘Lat’‘Long’作为标识符变量。我们稍后将使用它们进行合并。
  • 用变量列‘Date’和值列 ‘Confirmed’取消透视日期列(如我们之前看到的columns[4:]
**dates = confirmed_df**.columns[4:]**confirmed_df_long = confirmed_df.melt(
    **id_vars=['Province/State', 'Country/Region', 'Lat', 'Long'],** 
    **value_vars=dates,** 
    **var_name='Date',** 
    **value_name='Confirmed'**
)deaths_df_long = deaths_df.melt(
    **id_vars=['Province/State', 'Country/Region', 'Lat', 'Long'],** 
    **value_vars=dates, 
    var_name='Date', 
    value_name='Deaths'**
)recovered_df_long = recovered_df.melt(
    **id_vars=['Province/State', 'Country/Region', 'Lat', 'Long'], 
    value_vars=dates, 
    var_name='Date', 
    value_name='Recovered'**
)**

以上应该返回新的长数据帧。它们都是按 日期国家/地区 排序的,因为原始数据已经按 国家/地区 排序,日期列已经按 ASC 排序。

这里是confirmed_df_long的例子

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

confirmed_df_long的例子

此外,由于不匹配问题,我们必须删除加拿大的恢复数据(🤷加拿大‍♂恢复的数据按国家统计,而不是按省/州统计)。

**recovered_df_long = recovered_df_long[**recovered_df_long['Country/Region']!='Canada'**]**

之后,我们使用merge()依次合并 3 个数据帧

**# Merging **confirmed_df_long** and **deaths_df_long**
full_table = **confirmed_df_long**.merge(
  right=**deaths_df_long**, 
  how='left',
 **on=['Province/State', 'Country/Region', 'Date', 'Lat', 'Long']** )# Merging **full_table** and **recovered_df_long**
full_table = **full_table**.merge(
  right=**recovered_df_long**, 
  how='left',
 **on=['Province/State', 'Country/Region', 'Date', 'Lat', 'Long']** )**

现在,我们应该得到一个包含ConfirmedDeathsRecovered列的完整表格

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

包含已确认、死亡和已恢复的 full_table 示例

4.执行数据清理

我们希望完成 3 项任务

  1. 将日期从字符串转换为日期时间
  2. 替换丢失的值NaN
  3. 3 艘邮轮报告的冠状病毒病例应区别对待

您可能已经注意到,新的 日期 列中的值都是具有 m/dd/yy 格式的字符串。要将 日期 值从字符串转换为日期时间,让我们使用DataFrame.to_datetime()

**full_table['Date'] = **pd.to_datetime(full_table['Date'])****

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

to_datetime()之后的输出

运行full_table.isna().sum()可以检测缺失值NaN

**full_table.isna().sum()Province/State    16198
Country/Region        0
Lat                   0
Long                  0
Date                  0
Confirmed             0
Deaths                0
Recovered          1602
dtype: int64**

我们在 省/州 中发现了很多NaN,这是有道理的,因为许多国家只报告国家级数据。但是 中有 1602 个 nan 被恢复 让我们用0来代替。

**full_table['Recovered'] = **full_table['Recovered'].fillna(0)****

除了缺失值,还有 3 艘邮轮报告的冠状病毒病例:大公主钻石公主MS Zaandam 。由于 省/州国家/地区 随着时间的推移不匹配,需要提取这些数据并区别对待。这就是我所说的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

full_ship的错配问题

这是我们如何提取船只数据。

****ship_rows** = full_table['Province/State'].str.contains('Grand Princess') | full_table['Province/State'].str.contains('Diamond Princess') | full_table['Country/Region'].str.contains('Diamond Princess') | full_table['Country/Region'].str.contains('MS Zaandam')full_ship = **full_table[ship_rows]****

并从full_table中去掉飞船数据:

**full_table = full_table[~(ship_rows)]**

5。数据汇总

到目前为止,所有的 确认死亡恢复 都是来自原始 CSV 数据集的现有数据。我们来添加一个活动案例列 活动 ,由active = confirmed — deaths — recovered计算。

**# Active Case = confirmed - deaths - recovered
full_table[**'Active'**] = **full_table['Confirmed'] - full_table['Deaths'] - full_table['Recovered']****

这里是full_table现在的样子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接下来,让我们将数据聚集到Country/Region wise 中,并按照DateCountry/Region对它们进行分组。

**full_grouped = full_table.**groupby**(['Date', 'Country/Region'])['Confirmed', 'Deaths', 'Recovered', 'Active']**.sum().reset_index()****
  • sum()是获取给定国家/地区的“确诊”、“死亡”、“康复”、“活跃”总数。
  • reset_index()重置指标,使用默认指标,即 日期国家/地区。

这是full_grouped现在的样子

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在让我们通过扣除前一天相应的累计数据来添加当日明智 新增病例新增死亡病例** 和 新增痊愈病例 。**

**# new cases 
temp = full_grouped.groupby(['Country/Region', 'Date', ])['Confirmed', 'Deaths', 'Recovered']
temp = temp.sum().diff().reset_index()mask = temp['Country/Region'] != temp['Country/Region'].shift(1)temp.loc[mask, 'Confirmed'] = np.nan
temp.loc[mask, 'Deaths'] = np.nan
temp.loc[mask, 'Recovered'] = np.nan# renaming columns
temp.columns = ['Country/Region', 'Date', 'New cases', 'New deaths', 'New recovered']# merging new values
full_grouped = pd.merge(full_grouped, temp, on=['Country/Region', 'Date'])# filling na with 0
full_grouped = full_grouped.fillna(0)# fixing data types
cols = ['New cases', 'New deaths', 'New recovered']
full_grouped[cols] = full_grouped[cols].astype('int')# 
full_grouped['New cases'] = full_grouped['New cases'].apply(lambda x: 0 if x<0 else x)**

最后这里是full_grouped。请注意,这个最终输出是国家级数据

  • 为累计数据。
  • 新增病例新增死亡病例新增痊愈病例 均为日明智数据。
  • 本数据帧按 日期国家/地区 排序。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后,这里是full_grouped的数据

最后,您可以将这些最终数据保存到 CSV 文件中:

**full_grouped.**to_csv**('COVID-19-time-series-clean-complete.csv')**

数据探索

为了简单起见,让我们使用 Python 数据可视化库 Altair 来创建一些简单的可视化。Altair 是 Python 的声明式统计可视化库,基于 VegaVega-Lite 。Altair 提供了强大而简洁的可视化语法,使您能够快速构建各种各样的统计可视化。

对于 Altair 安装,我强烈建议创建一个新的虚拟环境,因为 Altair 有很多依赖项。然后,激活你的虚拟环境,运行pip install altair vega_datasets来安装 Altair 以及 vega_datasets 中的示例数据集。

关于虚拟环境的教程,可以看看:

** [## 使用“virtualenv”创建虚拟环境,并将其添加到 Jupyter 笔记本中

你是机器学习工程师,正在使用 Python 和 Jupyter Notebook 吗?在这篇文章中,你会看到为什么…

towardsdatascience.com](/create-virtual-environment-using-virtualenv-and-add-it-to-jupyter-notebook-6e1bf4e03415) [## 使用“conda”创建虚拟环境,并将其添加到 Jupyter 笔记本中

你正在使用 anaconda 和使用 Jupyter Notebook 和 Python 吗?在这篇文章中,你将看到如何创建虚拟的…

medium.com](https://medium.com/analytics-vidhya/create-virtual-environment-using-conda-and-add-it-to-jupyter-notebook-d319a81dfd1)

显示总病例和每日病例

首先,让我们导入库,加载数据并选择一个国家,例如英国:

import pandas as pd
import altair as altfull_grouped = pd.read_csv('COVID-19-time-series-clean-complete.csv', **parse_dates=['Date']**)uk = full_grouped[**full_grouped['Country/Region'] == 'United Kingdom'**]

然后,让我们用公共元素创建一个基础图表

base = alt.Chart(uk).mark_bar().encode(
    **x='monthdate(Date):O',**
).properties(
    width=500
)

之后,我们可以使用|操作符水平连接

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一段时间内的总确诊人数和总死亡人数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一段时间内每日新增病例和每日新增死亡人数

显示冠状病毒的传播

首先,让我们导入库,加载数据并选择一个国家列表

import pandas as pd
import altair as altfull_grouped = pd.read_csv('COVID-19-time-series-clean-complete.csv', **parse_dates=['Date']**)countries = ['US', 'Italy', 'China', 'Spain', 'Germany', 'France', 'Iran', 'United Kingdom', 'Switzerland']selected_countries = full_grouped[full_grouped['Country/Region']**.isin(countries)**]

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

选定 _ 国家

让我们创建一个圆形图表来显示当天明智的 新增病例

alt.Chart(selected_countries).**mark_circle()**.encode(
    **x='monthdate(Date):O',**
    **y='Country/Region',**
    **color='Country/Region',**
    size=alt.Size(**'New cases:Q'**,
        scale=alt.Scale(range=[0, 1000]),
        legend=alt.Legend(title='Daily new cases')
    ) 
).properties(
    width=800,
    height=300
)

这是输出

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每日新病例圆形图

尽情享受吧!

这篇文章主要是向大家展示如何使用 Pandas 逐步处理新冠肺炎数据。在数据探索部分只有两个简单的例子来演示。

如果你有兴趣学习牛郎星,可以看看下面两篇文章。

[## 用 Altair 实现 Python 交互式数据可视化

用不到 20 行代码创建交互式图表。

towardsdatascience.com](/python-interactive-data-visualization-with-altair-b4c4664308f8) [## 探索冠状病毒传播的交互式数据可视化

使用 Altair 创建不到 30 行代码的交互式复合图表

towardsdatascience.com](/interactive-data-visualization-for-exploring-coronavirus-spreads-f33cabc64043)

大概就是这样。感谢阅读**

新冠肺炎如何改变数据科学工作流程

原文:https://towardsdatascience.com/covid-19-data-science-workflow-f8eea10c77fa?source=collection_archive---------50-----------------------

新冠肺炎正在改变很多事情。数据科学家可以做些什么来充分利用这种情况?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

达格正在尽自己的力量对抗新冠肺炎

我是数据科学协作平台 DAGsHub 的创始人之一,这个平台是为不坐在一起的团队设计的。我不打算讨论新冠肺炎和在家工作的一般方面。相反,我将特别关注数据科学家需要在远程有效工作的内容。

当危机开始时,我们的假设是现有用户的使用会因新情况而激增。事情是这样的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个月内向 DAGsHub 推送操作的次数

这到底是怎么回事?我们认为我们的测试版有很好的口碑增长和牵引力,但自从冠状病毒以来的增长使它相形见绌,直到它看起来像是零。

我们的用户需要比他们坐在一起时更频繁的项目管理和协作工具。这证明当我们过渡到远程工作时,我们需要改变我们的工具。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

远程工作最大的困难是协作和沟通。缓冲& AngelList 报道

这种使用率的上升也可能表明,现在不良实践对团队的伤害比平时更大,导致他们更多地依赖于修复这些问题的工具。

现在,你可能会说—“但这只是推送操作,也许用户只是在平台上添加实验来查看指标并在它们之间进行比较。合作是双向的。”你可能是对的。我们预计拉动行为也会显著增加,尽管这种增加会更加微妙,因为你更经常地创造一个新的实验,而不是复制一个已经完成的实验。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个月内对 DAGsHub 的拉动操作数量—我们在 2020 年初开始衡量拉动操作

在最近三个月,我们可以看到拉动操作的数量几乎增加了两倍。

让我们深入探讨一下在我看来阻碍我们健康的数据科学合作(尤其是远程合作)的四大问题。这些问题是:

  1. 我们的实验缺乏可重复性
  2. 对我们工作的跟踪和记录不好
  3. 合作者之间难以共享工作
  4. 孤立的工作流助长了独狼心态,从长远来看会损害组织的生产力

以上各点都是相互联系的。

可重复的实验

关于这个话题已经写了很多,贾斯汀·博伊兰-图米(Justin Boylan-too mey)对可再生数据科学项目(reproducible data science project)马修·斯图尔特(Matthew Stewart),博士研究员对机器学习危机的。调试自己的代码有时可能很困难,但是当别人的代码不方便使用时,或者当一些问题可能是由您使用的环境的差异引起时,调试别人的代码是一场噩梦。我们需要以一种集成的方式管理我们的代码、数据、模型和环境的版本,以便尽可能简单地实现可再现性。这会为你自己和你的团队成员节省大量的时间和悲伤。

跟踪和记录您的工作

这是相关的,可能是实现再现性所必需的,但它的意义远不止于此。记录参数和指标可以相当容易地完成,为大多数广泛使用的数据科学库创建了自动记录功能。正确地做到这一点会让你或你的合作者专注于重要的实验,并很容易找到下一个值得尝试的伟大事物。通常,在你记录的实验数据之上会使用一个实验可视化系统。但是要做到这一点,你首先必须记录你的工作。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不是这种木头。照片由艾蒂安·吉拉代Unsplash 上拍摄

共享工作

当人们坐在一起,你在和同事讨论你的工作时,很容易指着你屏幕上的相关部分说“看这里,这就是有趣的地方”。远程工作使这个简单的任务变得更加困难,团队可能会发现自己使用几个不同的工具,它们之间需要手动同步,或者,上帝保佑,通过电子邮件发送链接到上传到 Google Drive 的项目部分。

解决共享工作的最好方法是解决前两个问题。如果我们确保我们有可重复的实验,并正确记录我们的工作,我们需要做的就是确保所有这些工件都上传到中央系统。如果是这样的话,每个实验的最后一步就是将结果发送到平台上。这样做给你一个中央网络用户界面,在那里每个人都可以谈论相同的事情,创造一种共同的语言,分享变得像告诉一个合作者git pull到他们的系统一样容易。

孤立的工作流

最后一个问题可能是最困难的,即使我们坐在一起,这个问题也会渗透到数据科学工作中——独狼心态。这个问题与其说是技术问题,不如说是心理问题。我们专注于自己的工作,以团队的生产力和解决真正困难问题的能力为代价。在许多情况下,前面提到的问题导致了一个恶性循环,其中工具阻止了协作,这反过来促进了独狼心态,导致没有开发协作工作流。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由塔霍Unsplash 上拍摄

没有工具来支持协作工作流的团队将会更加强烈地感受到孤狼心态的负面影响。

好消息是,如果你解决了前三个问题,你就在解决最后一个问题上取得了重大进展。您可以为每个问题分配多个人,或者分配需要互相检查工作或在问题出现时进行咨询的小组。

也就是说,上面提到的工具是必要的,尽管并不总是足够的。团队合作是困难的,有些问题需要艰难的组织文化变革,比如更加关注过程和沟通。建立支持协作工作流所需的系统使得解决这些难题变得更加容易。

用 DAGsHub 解决远程数据科学问题

您可以使用开源工具来实现可重复性,或者创建您自己的标准(尽管不推荐后者),以及用于实验跟踪的工具。但你不必。DAGsHub 使用 Git 和 DVC 进行版本控制,将可视化 UI 与实验跟踪相结合来管理数据版本。

当你创建可重复实验时,你可以比较指标,搜索超参数和更多。使用 DAGsHub 实验追踪不一定要用 DVC,它们互为补充,完全模块化。我们使用开源工具和开放格式,因此您永远不必担心黑盒解决方案和供应商锁定。

DAGsHub 对每个人完全免费,以促进科学合作和对抗冠状病毒危机。我们希望能够帮助团队轻松过渡到远程工作,并了解如何在远程数据科学环境中成功工作。

关于新冠肺炎项目的最后一句话

我们在 DAGsHub 的首要目标是支持开源数据科学社区。如果您正在从事新冠肺炎数据科学项目,我们很乐意在云基础设施或任何其他方面提供帮助。我们的能力有限,但如果这与您相关,请通过covid@dagshub.com联系我们!

感谢 盖伊·斯莫伊洛夫*阿米尔·谢瓦特 Siim 出纳员 对撰写这篇作品的帮助。*

用 Plotly 实现数据可视化:新冠肺炎数据集

原文:https://towardsdatascience.com/covid-19-data-visualisation-with-plotly-d1c96423942e?source=collection_archive---------36-----------------------

用新冠肺炎数据绘图的初学者方法。居家周末项目。

新冠肺炎传播的时间间隔为 2020 年 7 月 27 日。使用 Plotly 创建。

在数据科学和 Python 的自学之旅中,我被大量每秒都在发展的资源淹没了。这些都是非常重要的信息来源,我们很幸运能够获得如此丰富和免费的知识资源。

然而,有时你只需要后退一步,通过学习、分享和成长来关注基础。这篇文章正是关于这一点。一个非常基本和简单的使用新冠肺炎数据的可视化方法,这是我在家复活节假期项目的一部分!正如我的一位导师曾经对我说的那样:“……如果你想永不停止学习,就试着教你所知道的……”

这里我将只分享两件事,首先是用于绘图的基本编码,其次是参考文档的 T2,这样你就可以去实验了。

在我进入编码部分之前,我只想澄清一下,这篇文章只是作为一个教育项目。因此,我根本没有试图计算疫情的任何死亡率、增长率或存活率。因为我们都在一起,所以非常重要的是,这种敏感信息的计算和共享要非常谨慎,最好使用适当的领域知识来处理。关于新冠肺炎的任何观点或信息,请参考真实的信息来源。

那是关于什么的:

简单地说,“Plotly 是一个交互式的、开源的、基于浏览器的 Python 图形库”。它带有各种看起来很酷的图表类型(条形图、散点图、地理图等)。)而且我个人觉得它非常用户友好,有大量易于理解的文档。强烈建议您在https://plotly.com/python/上构建任何代码时都要仔细阅读。

首先安装相关的库:

!pip install plotly_express==0.4.1
import plotly.express as px
import plotly.graph_objects as go #for calling graph objects from plotly library.

我使用了来自 https://data.humdata.org/的新冠肺炎案例数据,并由约翰·霍普金斯大学系统科学与工程中心(JHU·CCSE)编辑。使用各种技术将数据简化为以下几列。请注意,我假设这是一个基本的 Python 技能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

转换成简单形式的数据

在上面的数据中,x =日期,y =感染,z=死亡,w=康复。现在 y-z-w 也给了我们一些活跃的案例,只是为了在本文的条形图上进行演示。

我们使用 go.figure()函数(通常作为“go”导入)来调用 Plotly 中的绘图对象。在 Plotly 图形对象中,我们可以将其分为两类:轨迹和布局。然后在轨迹和布局中有进一步的属性来定义我们的图表。请务必参考https://plotly.com/python/reference/中的所有属性列表,然后使用它们。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

条形图

为了覆盖条形图,我使用了 Plotly 的 go.figure()函数来调用图表对象,然后添加了更多的条形图轨迹(针对我的数据中的每一列),并将它们层叠在图表上:

***#call Bar charts and assign to fig_t. Add traces to the same figure***
fig_t = go.Figure(go.Bar(x=x, y=y, name='Total Infected', marker_color='indianred', opacity=.8))
fig_t.add_trace(go.Bar(x=x, y=y-z-w, name='Total Active', marker_color='mediumblue', opacity=0.7))
fig_t.add_trace(go.Bar(x=x, y=w, name='Total recovered', marker_color='lightseagreen', opacity=0.8))
fig_t.add_trace(go.Bar(x=x, y=z, name='Total deaths', marker_color='gray', opacity=1))***#here we define layout of the chart***
fig_t.update_layout(barmode='overlay', xaxis={'categoryorder':'total ascending'},xaxis_type='category',
                  title={
        'text': 'Cummulative COVID-19 world trend',
        'y':0.79,
        'x':0.45,
        'xanchor': 'center',
        'yanchor': 'top'},)
fig_t.update_xaxes(title= '----->Timeline' ,showline=True)
fig_t.update_yaxes(title= '----->Number of cases', showline=True)
fig_t.show()

输出:

交互式图表。请注意,如果你改变了上面代码中的轨迹类型,你可以添加线条、散点等。在同一块土地上。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

线条和标记

为了分析案例数量的每日变化,我简单地对上面的累积数据使用了 diff()函数。现在,为了以不同的方式进行演示,这里使用了“线”轨迹:

***#call Line charts and assign to fig_inc. Add traces to the same figure***
fig_inc = go.Figure(go.Line(x=df_diff['Dates'], y=df_diff['Total_infected'],name='Infected', mode='lines+markers',marker=dict(size=10,color='indianred')))
fig_inc.add_trace(go.Line(x=df_diff['Dates'], y=df_diff['Total_recovered'],name='Recovered', mode='lines+markers',marker=dict(size=10,color='lightseagreen')))
fig_inc.add_trace(go.Line(x=df_diff['Dates'], y=df_diff['Total_deaths'], name='Deaths', mode='lines+markers',marker=dict(size=10,color='gray')))
fig_inc.add_trace(go.Line(x=df_diff['Dates'], y=df_diff['Active'], name='Active', mode='lines+markers',marker=dict(size=10,color='Orange')))***#here we define layout of the chart***
fig_inc.update_layout(xaxis_showgrid=True, yaxis_showgrid=True, plot_bgcolor='whitesmoke', 
        title={
        'text': 'Incremental COVID-19 world trend',
        'y':0.75,
        'x':0.5,
        'xanchor': 'center',
        'yanchor': 'top'},xaxis_type='category')
fig_inc.update_xaxes(title= '------>Timeline' ,showline=False)
fig_inc.update_yaxes(title= '------>Number of incremental cases', showline=False)

fig_inc.show()

输出:

带有各种分析选项的交互式折线图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

动画地理散点图

让我成为 Plotly 粉丝的最酷的特性之一是它易于使用的动画。你真的不需要做很多编码来制作一个简单的地图动画,就像上面视频中分享的那样。您可以通过文档了解许多内置特性。

对于这一个,我导入了 Plotly Express(作为“px”),这是 Plotly 自带的一个接口。这适用于他们称之为“整齐”或“狭窄”的数据,适用于 pandas 数据帧、列表、numpy 数组、Pandas 系列等。

同样,图形对象和布局的基本原理是相同的。但是,在这种情况下,布局属性是在配置中详细定义的,并且可以更改。请参考https://plotly.com/python/reference/#layout-sliders和不同的属性,看看它如何改变地图。

上面分享的视频基本上是新冠肺炎传播的延时,使用了来自我上面分享的同一个 JHU CCSE 数据源的窄数据形式。

***#call scatter_mapbox function from px. Note the attributes especially normalisation of data and maximum maker size. The animation is done on Dates.***
fig_map = px.scatter_mapbox(df_map, lat="Lat", lon="Long",     color="Infected", size=df_map['Norm']**0.5*50,
                color_continuous_scale="Rainbow", size_max=50, animation_frame='Date',
                center=dict({'lat': 32, 'lon': 4}), zoom=0.7, hover_data= ['Country'])***#here on wards various layouts have been called in to bring it in the present shape***
fig_map.update_layout(mapbox_style="carto-positron",width=900,
    height=700)
fig_map.update_layout(margin={"r":0,"t":0,"l":0,"b":0})***#update frame speed***
fig_map.layout.updatemenus[0].buttons[0].args[1]["frame"]["duration"] = 200**#update different layouts**
fig_map.layout.sliders[0].currentvalue.xanchor="left"
fig_map.layout.sliders[0].currentvalue.offset=-100
fig_map.layout.sliders[0].currentvalue.prefix=""
fig_map.layout.sliders[0].len=.9
fig_map.layout.sliders[0].currentvalue.font.color="indianred"
fig_map.layout.sliders[0].currentvalue.font.size=20
fig_map.layout.sliders[0].y= 1.1
fig_map.layout.sliders[0].x= 0.15
fig_map.layout.updatemenus[0].y=1.27
fig_map.show()

输出:

正如你在上面看到的,我已经调整了滑块的 x 和 y 位置,以随机选择图表上重叠的日期(即当前值)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

希望您喜欢 Plotly 的简要概述,以及如何使用它创建一些简单但看起来很酷的图表。

新冠肺炎数据可视化:跟踪移动和人口趋势

原文:https://towardsdatascience.com/covid-19-data-visualization-tracking-movement-and-demographic-trends-de8e30aeb140?source=collection_archive---------21-----------------------

构建 D3 Chloropleth 地图,调查人口统计和社会距离如何影响各县病例数的增长。

由 Sammy Stolzenbach,Sook-Hee Evans 和 sejal Dua
T2 制作的❤点击这里来玩吧!

动机

这学期,我在塔夫茨大学上了一门叫数据可视化的课。这是我迄今为止最喜欢的课程之一,因为它教会了我如何创造一个欺骗性的形象,更重要的是,如何创造一个有效的形象。

对于我们在数据可视化方面的最终项目,我们得到了你可能想象得到的最开放的规范。本着不扼杀任何辉煌的创造性火花的精神,我们被告知要用我们希望产生的任何数据集或可视化来击倒自己。这是一个“你投入什么就得到什么”的项目。

我的团队一致认为,我们希望承担一些雄心勃勃的事情,我们也希望做一些可以为他人所用的事情。我们决定围绕新冠肺炎社交距离数据来设计我们的项目,因为,嗯,它感觉非常热门,因为它是当时每个晚餐谈话的主题,几乎是我们脑海中唯一的事情。话虽如此,我们一致同意,必须为这个世界提供一些似乎没有人在做的独特的东西。我们想做一些新奇的事情,挑战我们作为程序员和普通人试图理解这些前所未有的时代。

已经有很多很棒的网站和追踪器了。约翰·霍普金斯大学有一个很棒的新冠肺炎仪表板,它汇集了各种来源的数据,并显示了你可能感兴趣的关于全球疫情的任何统计数据。1point3acres 还有一个追踪器,提供实时更新和许多信息图表来分析病毒的增长率。虽然这些来源(以及许多其他来源)处于第一线,可靠地向人们提供重要信息,并帮助他们了解与这场危机有关的所有事情,但我们的目标略有不同,如下所述。

目标:

  1. 使用二级数据源从独特的背景中获得对疫情的洞察。
  2. 创建一个具有可链接组件的应用程序,以便一个 div 中的动作触发另一个 div 中相应的动作。
  3. 提高我们的 D3.js 技能!
  4. 弄清楚如何远程协同工作。

数据

数据来源 1: Cuebiq 移动洞察

我们决定将重点放在有关流动性在这段时间内如何变化的数据上,在这段时间里,社会距离要么受到高度鼓励,要么被州和地方法律强制规定。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Cuebiq 流动性指数

Cuebiq 是一家拥有免费仪表盘的公司,其移动洞察基于在美国各地收集的手机数据。

Cuebiq 移动指数(CMI)量化了用户每天移动的距离。它是使用一个衍生因子来计算的,该衍生因子指示围绕每天观察到的用户位置绘制的一个方框的对角之间的距离。即使用户在平常的一天里走了不同的距离,使用一个指数也可以将各县相互比较。每个县的 CMI 是一个县内所有用户的总移动量的中位数。

CMI 值可以用 1-5 的等级来解释,其值对应于以下行驶的中值距离(5 = 100 公里,4 = 10 公里,3 = 1 公里,2 = 100 米,1 = 10 米)。一个县的 CMI 为 2.5,这意味着该县的中位用户出行量为 2.5 亿。

不幸的是,这些数据无法通过 API 调用或 CSV 文件下载获得。为了争夺数据,我们实际上不得不下载 PDF 文件,然后使用 Python 和其他妙招收集数据。如果县在 PDF 中由于名称过长和间距不足而被截断,我们必须交叉引用外部数据集来填充缺失的数据。

数据来源 2:纽约时报 美国冠状病毒病例与死亡

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

纽约时报美国冠状病毒数据

我们使用了 NYT 开放 GitHub 存储库,其中包含美国每天的病例和死亡人数。这些数据以 CSV 文件的形式出现,名为 us-counties.csv。我们编写了 Python 脚本来按县汇总数据,并确定每天的累计病例数。由于存储库每天都在更新,我们觉得让我们的应用程序总是拥有最新的数据很重要,所以我们将更多“案例数据”拉入 Bash 脚本的过程流水线化,以便我们可以在一行命令中自动拉入和争论数据。

数据来源 3:美国人口普查局人口数据

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

美国人口普查局数据

最后,我们使用美国人口普查数据,根据各县的中位收入和政治联盟来可视化人口趋势。我们希望探索这些因素如何影响美国所有县的社交距离行为。项目的这一方面需要大量的数据操作,并且由于我们采用的可视化方法,它也是最具编程强度的,因此我们最终只实施了两个人口统计过滤器。然而,我们计划很快实现更多有趣的人口趋势,如教育水平或基本劳动力百分比。

我们试图谨慎地选择如何表示人口统计数据。按每个县的人口比例缩放对象是避免产生欺骗性可视化的一种方式。这一人口数据也是从最近可用的美国人口普查局数据集(2016 年)中获得的。

争论

术语说明: 争论 是将数据从一种“原始”数据形式转换和映射为另一种格式的过程,目的是使其更适合各种用途,更有价值。

从 3 个不同的来源获取数据是我们项目中最复杂的方面之一。这是那些需要白板或者频繁的 10 分钟休息来让大脑充电的任务之一。我们的任务是将来自 3 个来源的数据收集到一个主容器中(JSON 或 CSV 格式)。虽然数据是根据各种不同的方案组织的,但这项任务是通过使用唯一标识美国每个县的每个数据集中的 FIPS 代码实现的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

FIPS 电码故障

为了合并数据集,我们实际上使用 FIPS 列作为执行连接的键,对每个数据集执行了内部连接。这产生了一个数据集,我们可以用它来产生我们可视化的所有不同组件。

也就是说,数据集远非完美。一个数据集的不一致会影响 3 个来源的整体组合。例如,纽约时报存储库没有纽约市的县一级的案例数据,因为数据被划分到五个区,这五个区没有唯一的 FIPS 代码。此外,Cuebiq 没有阿拉斯加和夏威夷健全的县一级流动性数据。为了处理这些不一致,我们面临着一个决定:我们要么从可视化中完全忽略这些位置,要么接受忽略这些县的 3 个数据点中的一个。我们选择把阿拉斯加和夏威夷排除在外(很遗憾),但我们对纽约在所有 3 个来源中存在一些不一致的地方没有意见。

以下部分将包括我们的网站如何工作的教程。我们将深入研究该应用程序的来龙去脉,包括一些实现细节,这些细节可能有助于了解如何最好地使用该应用程序来回答您可能会有的关于新冠肺炎的问题。如果您对这个技术故障不感兴趣,可以直接跳到本文的“我学到了什么”部分。

组件

转到新冠肺炎追踪器应用程序本身,我们可以在下面看到,可视化的关键是用颜色编码的移动指数数据,以及随着时间的推移,查看美国不同地方如何通过社交距离来应对疫情危机的能力。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

新冠肺炎跟踪器应用程序的照片

地图上的颜色有意颠覆了交通灯根深蒂固的配色方案。鉴于我们正在经历这些前所未有的情况,我们都尽自己的努力将这种病毒的影响降至最低是至关重要的,我们认为将低运动与绿色联系起来,将高运动与红色联系起来会很有趣。用户确实需要更多的时间来理解配色方案,但是由于我们可视化的信息可能会非常强大,我们认为宁可混淆,也不要随意暗示我们不打算表达的基于颜色的信息。

在 2020 年 3 月 23 日这一周,西海岸的县相对于美国所有县的移动最小。红色的县的移动指数大于 3,表明那一周人们离家的中间距离在 1 到 10 公里之间,这看起来不算多,但实际上这很说明问题,因为这是一个中间值,许多州已经在这一点上制定了留在家中的命令。

滑块

我们实现的核心是上述移动索引数据的时间推进。通过拖动屏幕左上角的滑块,用户可以查看特定一周的数据,或者控制时间快进的速度。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从 3 月 2 日到 4 月 27 日的逐周滑块过渡

在上面的 GIF 图中,我们看到了一个动画,展示了自新冠肺炎疫情爆发以来,美国不同地方或多或少的变化。绿色和黄色编码最多的一周是 3 月 23 日。有趣的是,最近的数据表明,大多数县的移动指数大于 3。人们可以推测,这是人们选择离开家时戴口罩的结果,人们去散步和跑步,更好的天气,一些州放松了社交距离措施,或者这些理由的一些组合。随着新冠肺炎地位的改变、假期的到来和夏天的临近,看看这些数据会是什么样子将会很有趣。

动画条形图

我们的应用程序最重要和最常用的特性之一是一个查询县的新冠肺炎案例的动画条形图。用户可以查询各县或在地图上单击以调用此功能,并探索移动指数与新病例增加或减少之间的任何潜在关系。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

演示动画条形图功能

在上面的演示中,我们展示了触发该特性的两种方式。将鼠标悬停在地图上的县几何图形上并找到华盛顿的 King County 后,用户只需在感兴趣的县的形状内单击即可锁定该选择并启动动画条形图。

左边的灰色框中会出现一个条形图。这个图表实际上描述了两种类型的数据:在被查询的县中,新冠肺炎病例的累积数量和由新冠肺炎引起的死亡的累积数量。条形图的左上角有一个图例,说明颜色如何表示正在绘制的数据集。将鼠标悬停在条形图上可激活工具提示,该工具提示提供该条形图的所有信息—日期、总病例数、新病例数(相对于前一天)和总死亡数—全部整合在一个位置。

我们的一个实现目标是让条形图特性和 chloropleth 图可视化展示双向链接。也就是说,一个县查询触发了某个事件,并与地图上高亮显示的特定县相对应,而地图上的一个操作也触发了相同的事件。从控制流的角度来看,这是一项复杂的工作。但是,它增强了用户体验,因为它使用户能够灵活地使用应用程序。(如果他们不知道某个县在地图上的位置,这也有助于他们复习美国的地理知识!)

以 King County 为例,有一个用户在不知道具体县在地图上的确切位置的情况下如何查询该县的例子。如你所见,当圣巴巴拉被查询时,它的地理位置在地图上被高亮显示。用户还可以滑动滑块来探索所查询的县中的移动与该县中病例的上升或下降之间的相关性。

圆环图

在做了一些用户测试后,很明显,人们自然倾向于按城市或州而不是按县来探索数据。因为我们使用第三方数据,我们不能控制它是如何组织的,但是我们可以简化用户的查找过程。例如,如果用户想了解新冠肺炎如何影响洛杉矶,他们可能不知道洛杉矶所属的县的名称(顺便说一下,是洛杉矶县)。然而,他们凭直觉知道,人口最多的城市可能位于加利福尼亚州病例相对百分比最高的县。

脱离了这个逻辑,我们决定实现一个环形图,描述查询州的每个县。圆环图每个部分的大小编码了给定州内每个县的相对案例百分比。可以预料,颜色编码与前面讨论的移动索引数据一致。还有链接功能也开始发挥作用。当用户将鼠标悬停在环形图的切片上时,这些县的地理位置会在克罗珀特地图上突出显示。当用户单击切片时,会显示动画条形图,而不是圆环图。要返回到圆环图,用户只需再次单击下方的放大镜。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

圆环图功能的演示

圆环图有 3 个主要使用案例值得注意:

  1. 它可用于识别每个州内最大的县(按人口计算),从而间接使用户能够按城市探索新冠肺炎趋势。在上面的示例中,当查询“马萨诸塞州”时,从圆环图切片的大小可以清楚地看出,萨福克和米德尔塞克斯可能是相对于其所在州而言人口最多的县。这些县可能值得点击来提示条形图。
  2. 圆环图可用于了解每个县在地图上的位置。如果用户没有特定的目标或问题想要通过使用应用程序来回答,他们可以使用州级链接,而不是单独查询县。
  3. 圆环图可用于探索随时间的变化,同时缩小感兴趣的特定状态。在上面的演示中,我们看到了圆环图的切片是如何随着滑块的每次转换而改变颜色的。各州的移动指数值通常不会有很大的变化。有趣的是,一个州内人口最稠密的县(本例中为 Multnomah)往往具有最低的移动指数。我不是人口学家,但也许大城市更严格地执行了呆在家里的命令,或者也许是因为公共交通的关闭而减少了流动。谁能说得准呢?但是这是一个有趣的趋势,如果视觉化图像没有在我眼前照亮它,我永远不会想到它。

人口趋势

您还可以单击“切换到人口趋势”按钮,了解移动指数和案例数据如何与人口趋势相关联。默认的人口统计是中等收入。根据美国人口普查局(United States Census)记录的每个县的收入中值,这些县保留了与每周移动指数相匹配的颜色,但在 x 轴上从最不富裕到最富裕排列。因为有了与案例数据的完整链接功能,就像有了这个地图一样,这个视图允许用户探索收入如何影响人们在哪里避难。这是一个重要的相关性,但是我们认为将它形象化会更加强大!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

人口趋势视图演示

根据上面的 GIF,你可以看到随着病毒的传播,最富裕的县最早变绿(开始社会距离)。这一趋势的唯一例外是收入较低的县,如洛杉矶,那里的病例太多,除了呆在家里别无选择。

通过切换人口统计,用户还可以探索政治联盟如何影响社交距离行为。使用政治过滤器,将县(用气泡表示)放置在从 0 到 1 的 x 轴上,其中 0 表示基于 2016 年选民登记的 0% GOP 投票,1 表示 100% GOP 投票。很容易看出,在过去几周里,一个县越右倾,他们就越有可能继续前进,尽管这些地区在 3 月底和 4 月初出现了病例。即使用户对确定新冠肺炎的人口趋势不感兴趣,该视图也可以简单地用作一种教育工具:当您将鼠标悬停在圆环图的切片上时,代表该县的气泡会突出显示,从而允许用户按州浏览人口信息。

好了,这就结束了我们的应用程序的各个组件的旅程。希望使用我们的数据可视化,您可以轻松地解释大量数据并确定趋势。

我学到了什么

在你开始玩可视化之前,我想分享一些在这个项目中的思考和经验。这些收获中有许多是我想分享的极客技巧,但我也想后退一步,评论一下该项目的一些非技术方面。

渐进的进展

到目前为止,每天做一些小的改进是这个项目中最令人满意的部分。因为我们是从第一步开始的,所以我们真的必须一次考虑一个特性。项目的第一个工作组件是带有县的地图,通过移动索引数据和工具提示功能来检查特定的县。然后我们让滑块开始工作,随后很快就有了动画条形图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

应用程序的早期版本

正如你在上面看到的,即使我们的功能正常工作,它们也不一定从一开始就很流畅。我们使用的配色方案被彻底修改,条形图 x 轴被修复,看起来不那么杂乱。我们还决定将页面左侧的元素放在一个灰色框中,以便更优雅地划分它们。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

概念验证:人口趋势

至于人口趋势,让他们都适合在一个屏幕上实际上是一个巨大的挑战。我们最初使用强制节点碰撞来制作上面的动画,但我们必须找到一个解决方法,以便我们可以在同一页面上包含此功能。Sammy 想出了创建一个节点模拟并保存它们最终的 x 和 y 坐标的主意,这样我们就可以将它们都固定在适当的位置。这是一个巨大的胜利,使我们能够集成所有的组件,并不断推出更多的链接功能。

Git 分支和拉请求

由于项目是在不到一个月的时间内完成的,开发通常是并行进行的。当团队成员处理不同的特性,但是在不同的地方修改同一个文件时,处理 git 分支是很重要的。我们没有很好地遵循远程开发的最佳实践。将来,我们肯定会将新特性推送到 git 分支,然后创建 pull 请求,以确保在合并期间不会覆盖彼此的工作。

沟通就是一切

…尤其是当您在全球疫情中远程工作时。我们在 3 个不同的家庭环境中工作,使用不同的电脑和无线网络,而且我们不在同一个时区。我们能够通过每隔几天召开一次 Zoom 会议来解决这个问题,以便检查、相互更新和讨论后续步骤。虽然我们也有一个处理小型技术后勤的群组短信,但虚拟联系对我们的成功至关重要。这确保了我们不会冒犯对方,并且在我们继续开发新功能之前,所有的想法都已经摆到桌面上了。

团队士气和生产力之间的相关性

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

人们需要的只是一点积极的反馈,让他们觉得自己的努力没有被忽视。用千禧一代的话来说,这种积极的强化可以被称为“互相打气”。

这个外卖其实只是对淑喜和萨米成为优秀搭档的颂歌。每个人都以独特的方式为项目做出贡献,这使得一起工作变得如此有趣。我们都有突破的时刻,我们都为这些时刻互相吹捧。虽然这是一个小小的举动,但是良好的团队士气会带来更好的最终产品!这不是意见。这是一个被证实的事实。

代码重构

代码重构是一个敏捷编程的概念,指的是澄清和简化现有代码的设计,而不改变其行为的过程。由于每个方法或类有太多的责任、重复的代码、糟糕的命名、糟糕的注释和普遍的混乱,未重构的代码往往会受到影响。为了说明一个流行的比喻,重构就像在你做饭的时候或者在你做完饭后不久打扫厨房。盘子、锅、食物和冰箱必须时刻保持干净整洁。没有干净的厨房,连续烹饪要么是不可行的,要么是非常不愉快的。类似地,如果代码没有被重构,开发新特性的难度大约是正常情况下的 10 倍。

正如在上面的短信对话中提到的,这是我们项目的一个方面,对我们能够向前发展至关重要。函数通常应该负责执行一个任务,但是我们的许多函数同时执行 5 个以上的任务。我们必须与代码坐在一起,思考如何最好地模块化它,使它尽可能地可重用。毫无疑问,即使在今天它也不是超级干净的。但是这里的要点是,代码重构是一个持续的过程,不应该被忽视。在这个项目中,我们确实学到了编写干净代码的价值,也许更重要的是,学会了如何处理杂乱的代码并清理它们。

Bash 脚本自动化繁琐的任务

Bash 脚本是包含一系列命令的纯文本文件,我们通常会在命令行中输入这些命令,但是我们更愿意将这些命令聚集在一个文件中,以便同时执行许多任务。当我们发现从纽约时报 GitHub 存储库中提取数据的过程需要大约 12 个命令行命令时,我们看到了编写 Bash 脚本的优势。我们现在只需要输入**。命令行中的/pull_nyt.sh** 获取更多数据。这是一个非常简单的技巧,可以节省我们大量的时间,并最小化文件系统组织中的错误。我们甚至可能会进一步研究自动化流程,以便每天早上 9 点提取更多数据。

我❤开源社区

我在过去的文章中讨论过这个问题,但我将在这里重复这一观点。开源社区让我相信人性的美好。能够玩演示、克隆存储库和在在线论坛上寻求帮助是如此强大,以至于我们作为一个社区可以推进到新的领域,而不必重新发明轮子。对 Stack Overflow 上帮助我们完成这个项目的匿名英雄们大声喊出来。有一天,我希望向前支付。

学术项目只是掠过你潜力的表面

很长一段时间,我有一个有限的信念,你只需要完成学术项目并达到所有要求,然后你就可以在夏天有更多空闲时间的时候继续做你真正想做的事情。然而,我错了。学术项目应该被当作一个跳跃点,让你朝着更大的目标,你所热爱的目标前进。特别是当你有选择题目的自由时,我认为你应该选择一些感觉不像工作的东西。我知道这是一个感觉不像工作的项目,我肯定希望在未来与我的队友继续下去。我很感激任务和截止日期激励我们从某个地方开始。

摘要

如果你一路走到这里,感谢你足够关心阅读这篇冗长的文章。我们希望你获得了一两件东西,并感到鼓舞去建立一些东西。

你可以在这里玩我们的网络应用。
你可以在这里查看我们的源代码

我们希望您对我们的新冠肺炎跟踪应用程序有任何反馈。如果你想提供建议、意见或批评,可以发电子邮件到 sejaldua@gmail.com 给我。

保持安全和健康!我们会一起度过难关的。

使用 Python 实现新冠肺炎数据可视化

原文:https://towardsdatascience.com/covid-19-data-visualization-using-python-3c8bcfaeff5f?source=collection_archive---------25-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

马库斯·斯皮斯克在 Pexel 拍摄的照片

在每个数据科学项目中,数据可视化是深入了解大型数据集的第一步。获取并预处理数据(清理和消除重复数据)后,数据科学生命周期的下一步是探索性数据分析,从数据可视化开始。这里的目的是从数据中提取有用的信息。

我使用 Python 和它为数不多的强大库来完成这项任务。此外,我已经使用谷歌 Colab 笔记本来编写代码,以避免安装任何 IDE 或软件包的麻烦,如果你想跟进的话。

我们开始吧

第一步是打开一个新的 Google Colab ipython 笔记本,导入我们需要的库。

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as snsimport plotly.express as px ### for plotting the data on world map

加载数据

这些可视化是基于截至 2020 年 5 月 25 日的数据。我使用了约翰·霍普斯金大学发布的 2020 年 5 月 25 日的日报数据。代码的下一部分处理加载。csv 数据到我们的项目。

path = 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/05-25-2020.csv'df = pd.read_csv(path)df.info()df.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

只用两行代码,我们就加载了数据,并准备好用作 Pandas 数据框架。接下来的两行显示关于数据(元数据)的信息,即总共 3409 行数据和 11 列。它还为我们提供了前五行的预览。

预处理数据

既然我们的数据已经成功加载,下一步就是在使用数据进行绘图之前对其进行预处理。它将包括:

  • 删除多余的列,如*‘FIPS’,‘admin 2’,‘Last _ Update’*(因为所有数据都是单日的,即 5 月 25 日)。
  • 删除列*‘省 _ 州’和‘组合 _ 关键字’*,因为并非所有国家都有州级数据。
  • 按’国家/地区将数据分组,并将列重命名为’国家/地区
df.drop(['FIPS', 'Admin2','Last_Update','Province_State', 'Combined_Key'], axis=1, inplace=True)df.rename(columns={'Country_Region': "Country"}, inplace=True)df.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据可以通过数据帧的“分组”功能进行分组。它类似于 SQL 中的 GROUPBY 语句。

world = df.groupby("Country")['Confirmed','Active','Recovered','Deaths'].sum().reset_index()world.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后,我们的数据被清理并准备使用。

绘制确诊病例最多的前 20 个国家

### Find top 20 countries with maximum number of confirmed casestop_20 = world.sort_values(by=['Confirmed'], ascending=False).head(20)### Generate a Barplotplt.figure(figsize=(12,10))plot = sns.barplot(top_20['Confirmed'], top_20['Country'])for i,(value,name) in enumerate(zip(top_20['Confirmed'],top_20['Country'])): plot.text(value,i-0.05,f'{value:,.0f}',size=10)plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

绘制确认病例数最多的前 5 个国家的确认病例和活动病例

top_5 = world.sort_values(by=['Confirmed'], ascending=False).head() ### Generate a Barplotplt.figure(figsize=(15,5))confirmed = sns.barplot(top_5['Confirmed'], top_5['Country'], color = 'red', label='Confirmed')recovered = sns.barplot(top_5['Recovered'], top_5['Country'], color = 'green', label='Recovered')### Add Texts for Barplotsfor i,(value,name) in enumerate(zip(top_5['Confirmed'],top_5['Country'])): confirmed.text(value,i-0.05,f'{value:,.0f}',size=9)for i,(value,name) in enumerate(zip(top_5['Recovered'],top_5['Country'])): recovered.text(value,i-0.05,f'{value:,.0f}',size=9)plt.legend(loc=4)plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

在世界地图上绘制地图

choropleth 地图是一种专题地图,其中的区域按照代表每个区域内地理特征汇总的统计变量(如人口密度或人均收入)的比例进行阴影化或图案化。

Choropleth 图提供了一种简单的方法来可视化一个地理区域内的测量值如何变化,或者显示一个区域内的可变性水平

figure = px.choropleth(world,locations=’Country’, locationmode=’country names’, color=’Confirmed’, hover_name=’Country’, color_continuous_scale=’tealgrn’, range_color=[1,1000000],title=’Countries with Confirmed cases’)figure.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

我们可以放大地图,将鼠标悬停在某个特定地区,查看该国已确认的病例数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

完整代码可在我的 GitHub repo:https://GitHub . com/jaskeeratbhatia/新冠肺炎-数据-可视化/blob/master/新冠肺炎-数据-25-may-2020-revised.ipynb

参考资料:

  1. https://github.com/CSSEGISandData/COVID-19 Github 回购数据:
  2. 维基百科:https://en.wikipedia.org/wiki/Choropleth_map

新冠肺炎探测器烧瓶应用程序基于使用深度学习的胸部 x 光和 CT 扫描

原文:https://towardsdatascience.com/covid-19-detector-flask-app-based-on-chest-x-rays-and-ct-scans-using-deep-learning-a0db89e1ed2a?source=collection_archive---------24-----------------------

使用四种深度学习算法(VGG16、ResNet50、InceptionV3 和 Xception)实现基于人工智能的模型和 Flask 应用程序,以检测胸部 X 射线和 ct 扫描中的新冠肺炎

编者按: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1:新型冠状病毒疾病 2019 来源

新冠肺炎,或更通常被称为新型冠状病毒疾病是一种高传染性疾病,于 2019 年底在中国出现。这种疾病是由 新型冠状病毒 引起的,一种属于冠状病毒大家族的病毒。该疾病于 2019 年 12 月首次起源于中国武汉**,并很快成为全球疫情,蔓延至超过 213 个国家。**

新冠肺炎最常见的症状是发烧、干咳和疲倦。人们可能经历的其他症状包括疼痛、疼痛或呼吸困难。这些症状中的大多数都显示出呼吸道感染和肺部异常的迹象,这可以由放射科医生检测出来。

因此,可以使用机器学习算法从胸部 x 光CT 扫描的图像中检测疾病。可以创建自动化应用程序来帮助支持放射科医生。本文是对四种深度学习算法的尝试,分别是: VGG16、ResNet50、InceptionV3Xception

训练和测试模型以及运行 Flask 应用程序的完整代码可在我的 Github 存储库 上获得。

数据集

该项目的数据集是从两个开源 Github 存储库中收集的:

  1. ****胸部 x 光片图像(1000 张图像)从https://github.com/ieee8023/covid-chestxray-dataset获得
  2. ****CT 扫描图像(750 张图像)从https://github . com/UCSD-AI4H/COVID-CT/tree/master/Data-split获取

四个算法:VGG16、ResNet50、InceptionV3 和 Xception 分别在胸部 x 光和 CT 扫描上进行训练,给了我们总共 8 个深度学习模型。 80% 的图像用于训练模型,剩余的 20% 用于测试模型的准确性。

构建模型

我首先向预训练模型添加了 3 个自定义层,以便它们可以在我们的数据集上进行训练。例如,添加自定义层到 ResNet50 模型的代码如下所示。其余模型的代码保持不变。只需将第一行中的 ResNet50 更改为所需模型的名称。

res = ResNet50(weights="imagenet", include_top=False, input_tensor=Input(shape=(224, 224, 3)))
outputs = res.output
outputs = Flatten(name="flatten")(outputs)
outputs = Dropout(0.5)(outputs)
outputs = Dense(2, activation="softmax")(outputs)
model = Model(inputs=res.input, outputs=outputs)
for layer in res.layers:
  layer.trainable = False
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

数据集中的图像大小不同。因此,我需要将它们调整到固定的大小,然后才能将它们提供给深度学习模型进行训练。我将图片尺寸调整为 224 x 224 像素,这被认为是 ResNet50 机型的理想尺寸。因此,我将形状 (224,224,3) 的输入张量添加到预训练的 ResNet50 模型中,3 为通道数。

接下来,我添加了一个展平层来展平我们所有的特征,并添加了一个脱落层来克服过度拟合**。最后,我使用 softmax 函数作为激活函数,添加了密集输出层。由于模型的前半部分已经被预训练,先前层的可训练属性被设置为。最后,我用 adam 优化器编译模型,并使用分类交叉熵作为损失 函数。**

训练模型

我首先定义了一个图像数据生成器来训练模型修改版本的图像,比如不同的角度、翻转、旋转或移位。

train_aug = ImageDataGenerator(rotation_range=20, width_shift_range=0.2, height_shift_range=0.2, horizontal_flip=True)

接下来,执行模型的训练,所有需要的参数指定如下:

history = model.fit(train_aug.flow(X_train, y_train, batch_size=32),validation_data=(X_test,y_test),validation_steps=len(X_test) / 32, steps_per_epoch=len(X_train) / 32, epochs=500)

如你所见,我已经用 32 张图像的批量为 500 个纪元训练了模型。

做预测

通过在测试集的图像上运行训练的模型来生成预测。数据集前 10 幅图像的预测绘制如下:

y_pred = model.predict(X_test, batch_size=batch_size)
prediction=y_pred[0:10]
for index, probability in enumerate(prediction):
  if probability[1] > 0.5:
    plt.title('%.2f' % (probability[1]*100) + '% COVID')
  else:
    plt.title('%.2f' % ((1-probability[1])*100) + '% NonCOVID')
  plt.imshow(X_test[index])
  plt.show()

以下片段显示了胸部 X 射线的前 10 个预测图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2:可视化胸部 X 射线的前 10 个预测

机器学习的评估和结果

以下是一些重要的结果和图表,有助于估计模型的准确性并了解其性能。

测试集图像的输出示例

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3:测试集图像的样本输出

分类报告

VGG16 型胸部 X 线和 CT 扫描分类报告

**外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传****外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 VGG16 模型胸片(左)和 CT 扫描(右)分类报告**

ResNet50 型胸部 X 线和 CT 扫描分类报告

**外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传****外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 ResNet50 型号胸片(左)和 CT 扫描(右)分类报告**

胸部 X 线和 CT 扫描的 InceptionV3 模型分类报告

**外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传****外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6:胸部 x 光(左)和 CT 扫描(右)的 InceptionV3 模型分类报告**

胸部 X 线和 CT 扫描异常模型分类报告

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传****外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 7:X 线胸片(左)和 CT 扫描(右)异常模型分类报告

混淆矩阵

用于胸部 X 线和 CT 扫描的 VGG16 模型的混淆矩阵

**外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传****外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 8:胸片(左)和 CT 扫描(右)的 VGG16 模型混淆矩阵**

ResNet50 胸部 X 线和 CT 扫描模型的混淆矩阵

**外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传****外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 ResNet50 模型胸部 x 光(左)和 CT 扫描(右)的混淆矩阵**

胸部 X 线和 CT 扫描的概念模型混淆矩阵

**外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传****外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 10:胸部 x 光(左)和 CT 扫描(右)的 InceptionV3 模型的混淆矩阵**

胸部 X 线和 CT 扫描异常模型的混淆矩阵

**外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传****外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 11:胸部 x 光(左)和 CT 扫描(右)的异常模型的混淆矩阵**

构建 Flask 应用程序

现在,我使用目前为止我创建的代码,通过在某些 flask 函数中粘贴特定的代码段来构建 Flask 应用程序。例如,使用四个模型来生成胸部 X 射线预测的代码如下所示:

def uploaded_chest():
   resnet_chest = load_model('models/resnet_chest.h5')
   vgg_chest = load_model('models/vgg_chest.h5')
   inception_chest = load_model('models/inceptionv3_chest.h5')
   xception_chest = load_model('models/xception_chest.h5') image = cv2.imread('./flask app/assets/images/upload_chest.jpg') 
   # read file 
   image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) 
   # arrange format as per keras
   image = cv2.resize(image,(224,224))
   image = np.array(image) / 255
   image = np.expand_dims(image, axis=0)

   resnet_pred = resnet_chest.predict(image)
   probability = resnet_pred[0]
   print("Resnet Predictions:")
   if probability[0] > 0.5:
      resnet_chest_pred = str('%.2f' % (probability[0]*100) + '% COVID') 
   else:
      resnet_chest_pred = str('%.2f' % ((1-probability[0])*100) + '% NonCOVID')
   print(resnet_chest_pred) vgg_pred = vgg_chest.predict(image)
   probability = vgg_pred[0]
   print("VGG Predictions:")
   if probability[0] > 0.5:
      vgg_chest_pred = str('%.2f' % (probability[0]*100) + '% COVID') 
   else:
      vgg_chest_pred = str('%.2f' % ((1-probability[0])*100) + '% NonCOVID')
   print(vgg_chest_pred) inception_pred = inception_chest.predict(image)
   probability = inception_pred[0]
   print("Inception Predictions:")
   if probability[0] > 0.5:
      inception_chest_pred = str('%.2f' % (probability[0]*100) + '% COVID') 
   else:
      inception_chest_pred = str('%.2f' % ((1-probability[0])*100) + '% NonCOVID')
   print(inception_chest_pred)xception_pred = xception_chest.predict(image)
   probability = xception_pred[0]
   print("Xception Predictions:")
   if probability[0] > 0.5:
      xception_chest_pred = str('%.2f' % (probability[0]*100) + '% COVID') 
   else:
      xception_chest_pred = str('%.2f' % ((1-probability[0])*100) + '% NonCOVID')
   print(xception_chest_pred)
   return render_template('results_chest.html',resnet_chest_pred=resnet_chest_pred,vgg_chest_pred=vgg_chest_pred,inception_chest_pred=inception_chest_pred,xception_chest_pred=xception_chest_pred)

Flask App 截图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传****外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

源代码

整个项目的源代码以及数据集、模型和 flask 应用程序都可以在我的 Github repo 上找到。

结论

最后,我想说明一个事实,即分析是在有限的数据集上进行的,结果是初步的。该方法尚未进行医学验证,因此结果可能与实际使用案例中观察到的结果不同。

在未来,我计划通过在更多的图像上训练模型来提高它们的性能,并可能包括其他因素,如年龄、国籍、性别等。此外,我鼓励本文的读者自己尝试代码,以提高模型的精度。

如果你觉得这篇文章有用,请随意与他人分享。非常感谢您的阅读。注意安全!

注意——我不是医学背景,这个项目是为了概念的演示而开发的。

请随时在其他平台上与我联系:

github—https://github.com/kaushikjadhav01

LinkedIn—https://www.linkedin.com/in/kaushikjadhav01/

新冠肺炎:意大利的超额死亡率

原文:https://towardsdatascience.com/covid-19-excess-mortality-figures-in-italy-d9640f411691?source=collection_archive---------1-----------------------

新冠肺炎官方死亡人数与伦巴第死亡率的比较

编者按: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 Georg EiermannUnsplash 拍摄

本周全世界有创纪录的 120 万新型冠状病毒,官方报道死亡人数超过 66000 人,意大利仍然是死亡人数最多的国家,截至 2020-04-04 为 15362 人,伦巴第的死亡人数占总死亡人数的 56%。

意大利民防部门的负责人在 3 月 23 日声称,新新型冠状病毒的致命率已经争论了很久:

截至昨天,冠状病毒的官方数字为 63000。我们认为 1:10 的比率(1 个阳性:10 个未检测的阳性)[ 1 ]是可信的

很难估计有多少人被感染,因为他们中有很多人没有表现出任何症状,而且通常对表现出新冠肺炎症状的患者进行拭子检测。这种方法(方便取样)引入了取样误差的可能性,并且产生的样本的代表性仍然值得怀疑[ 2 ]。

此外,死亡人数可能被低估。事实上,极有可能的是,过多的死亡主要是在家中或住宅设施中死亡的老年人或体弱者,他们没有被送往医院,因此没有进行新冠肺炎检测。

意大利统计研究所(ISTAT)根据最新的人口普查,公布了意大利各地选定城镇的死亡率数据,特别是 2020 年 3 月 1 日至 2020 年 3 月 21 日之间的总死亡人数。该数据包含所有城镇的子集,即 1084 个城镇/城市,可以比较 2020 年 3 月前三周与 2019 年同期相比死亡人数的增加或减少,结果如下图所示。该数据每周更新,文章基于以前发布的数据。

所有可用城镇和城市数据的互动地图可以在这里找到5】(地图加载有点重)

截至 3 月 28 日的更新地图可在此处找到[ 8 ]

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

放大意大利北部-艾米利亚伦巴第

令人震惊的是,与峰值超过 1000%的 2019 年相比,2020 年该镇的大多数颜色都倾向于非常高的死亡增长率。特别是,我们可以注意到紫色在伦巴第和艾米利亚地区的强烈集中,那里目前有最大的疫情,特别是在贝加莫,皮亚琴察,布雷西亚等省。如果从较大城市的数据来看,贝加莫涨幅最大 294%,其次是皮亚琴察 201%,布雷西亚 109%,帕尔马 103%,帕维亚 41%,曼图亚 22%,米兰 17%。

在发现“第一名患者”的罗提省,Codogno 今年已有 87 人死亡,而 2019 年同期只有 15 人死亡。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

放大罗提和皮亚琴察之间的伦巴第

统计数据和见解摘要

如上所述,1,084 个城镇是 ISTAT 提供的一个子集。子集包含伦巴第的 434 个城镇,覆盖总人口的 56.48%(1000 万居民)。下表显示了按 12 个伦巴第省分组的死亡数据,按 2020 年死亡人数排序。贝加莫省的增幅最大,2020 年为 454%。2019 年,米兰省增幅最小,为 42%。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果我们绘制伦巴第地区城镇子集记录的总死亡人数,我们可以看到,与 2019 年相比,2020 年 3 月 1 日至 21 日之间的死亡人数增加了 144%(2019 年 3520 人死亡,2020 年 8587 人死亡)。因此,又有 5067 人死亡。

但是官方公布的 2020 年 3 月 1 日至 21 日伦巴第新冠肺炎死亡人数是 3072 人。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这意味着,在 56.48%的人口中,数字显示有 5067 人超额死亡(即每 100 万人口中有 891.8 人死亡),高于 3072 人(每 100 万人口中有 305.4 人死亡),这是整个伦巴第的官方新冠肺炎死亡人数。

如果我们考虑同比最差情况波动高达 20%,那么超额死亡人数为每 100 万人 767.87 人,我们可以推断,2020 年 3 月 1 日至 21 日伦巴第地区可能有 7725 人超额死亡,其中 40%是由于新冠肺炎,60% (4653 人)是原因不明的死亡。于是出现了一个问题:统计误差有多大?

这表明,新冠肺炎导致的死亡人数可能是官方死亡人数的两倍半(即 767.87/305.4=2.514)。因此,伦巴第地区的 7725 例死亡可能代表了一个接近上限的数字,因为我们不知道这些城镇的子集是否是一个代表性样本,但是,潜在的,我们应该不会太远。

鉴于 3 月 1 日至 24 日期间新冠肺炎死亡总人数为 2060 人,3 月底,贝加莫市市长 Giorgio Gori [6]估计该省感染总人数为 288000 人。使用乘数 2.514 的估计值介于[258972;345256]感染,死亡率分别为 2%和 1.5%。这是贝加莫省总人口的 31%。

如果我们应用于伦巴第的 8656 例死亡的全部,估计在[1.08m;截至 2004 年 4 月 20 日,新冠肺炎感染人数为 145 万。

将相同的比率应用于意大利各地的 15362 例死亡人数(尽管南部地区可能有不同的乘数),我们得到[193 万;2.57M],所以在英国帝国大学研究人员计算的 95%可信区间内[ 7 ],接近其下限。

下图总结了意大利可能出现的情况。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

全国新冠肺炎感染者的可能人数

参考文献

[1]:https://rep . repubblica . it/pwa/generale/2020/03/23/news/coronavirus _ borrelli _ I _ numeri _ sono _ altri _ l _ epidemia _ va _ piu _ veloce _ della _ no stra _ burocrazia _-252124440/?ref = RHPPTP-BH-I 252124970-C12-P8-s 1.12-T1))

[2]: Alleva,Giorgio 等人(2020 年 3 月)https://web . uniroma 1 . it/memo tef/sites/default/files/proposta . pdf?FB clid = iwar 2 tbasiaze 7m smvsj 8 hamambcwvf 86 _ pui 99 rjgminofm 2 awp zzk _ eaxn 0

[3]:https://www . Corriere . it/politica/20 _ marzo _ 26/the-real-death-toll-for-新冠肺炎-至少是官方数字的 4 倍-b5 af 0 EDC-6 eeb-11ea-925 b-a 0 C3 cdbe 1130 . shtml

[4]: ISTAT。(2020 年 4 月 3 日)。https://www.istat.it/it/archivio/240401

[5]:2020 年与 2019 年超额死亡率,Cholopetth 地图。西罗·蒙塔加诺。(2020 年 4 月 3 日)http://content.dsadserver.com/Ciro/muni.html

[6]:乔治·戈里的推特(2020 年 3 月 26 日):

乔治·戈里声明

[7]https://www . imperial . AC . uk/MRC-global-infectious-disease-analysis/新冠肺炎/report-13-Europe-NPI-impact/

[8]2020 年 3 月 1 日至 28 日与 2019 年相比的超额死亡率,Cholopetth 地图。西罗·蒙塔加诺。(2020 年 4 月 14 日)http://content.dsadserver.com/Ciro/italy_map_28Mar2020.html

其他读物

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

伦巴第死亡人数

世卫组织·新冠肺炎仪表板。(2020 年 4 月 4 日)。https://experience . ArcGIS . com/experience/685 d0a ce 521648 F8 a5 beeee E1 b 9125 CD

向部长致敬。(2020 年 4 月 3 日)。新冠肺炎—意大利的 Situazionehttp://www . salute . gov . it/portale/nuovocoronavirus/dettagliocontinutinuocoronavirus . JSP?lingua = italiano&id = 5351&area = nuovoCoronavirus&menu = vuoto

https://github . com/PCM-DPC/新冠肺炎/blob/master/schede-riepilogative/regioni/DPC-covid 19-ita-scheda-regioni-2020 04 03 . pdf

https://www . epicentro . ISS . it/coronavirus/SARS-cov-2-decessi-Italia

**** [## 意大利的冠状病毒。拉马帕-德尔孔塔吉奥

意大利 29 日发生的第一起冠状病毒 2 型感染者死亡事件。到期…

www.ilfoglio.it](https://www.ilfoglio.it/salute/2020/02/24/news/il-coronavirus-in-italia-la-mappa-del-contagio-303522/) [## 冠状病毒,真正的死亡人数:贝加莫省一个月内有 4500 名受害者

这是 L’Eco di Bergamo 和 InTwig 使用当地……提供的数据进行分析的结果

www.ecodibergamo.it](https://www.ecodibergamo.it/stories/bergamo-citta/coronavirus-the-real-death-tool-4500-victims-in-one-month-in-the-province-of_1347414_11/) [## 伦巴第的冠状病毒,迪雷塔的 tutti gli aggiornamenti

关于达拉斯地区冠状病毒感染病例的确认问题。

www.lombardianotizie.online](https://www.lombardianotizie.online/coronavirus-casi-lombardia/)

https://www . ecodibergamo . it/stories/Bergamo-citta/coronavirus-the-real-death-tool-4500-victims-in-one-month-of-the-province-of _ 1347414 _ 11/****

新冠肺炎:使用 TensorFlow 和 OpenCV 的人脸面具检测

原文:https://towardsdatascience.com/covid-19-face-mask-detection-using-tensorflow-and-opencv-702dd833515b?source=collection_archive---------3-----------------------

构建一个 CNN 模型,用你的网络摄像头或手机摄像头检测一个人是否戴着口罩。

在这些艰难的时代,做一些与之相关的事情岂不是令人满足?我决定用 TensorFlow 搭配 Keras 库和 OpenCV 建立一个非常简单基本的卷积神经网络(CNN)模型,来检测你是否戴了口罩来保护自己。有意思!不是吗?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

澳门图片社拍摄于 Unsplash

为了建立这个模型,我将使用由般若班达瑞提供的面具数据集。它由大约1376个图像和 690 个包含带面罩人的图像和 686 个包含不带面罩人的图像组成。

我将使用这些图像构建一个 CNN模型,使用 TensorFlow 通过使用您的 PC网络摄像头来检测您是否戴着面罩。此外,你也可以用你的手机的摄像头来做同样的事情!**

步骤 1:数据可视化

在第一步中,让我们可视化两个类别的数据集中的图像总数。我们可以看到在’ yes ‘类中有 690 图像,在’ no 类中有 686 图像。

**The number of images with facemask labelled 'yes': 690 
The number of images with facemask labelled 'no': 686**

第二步:数据扩充

在下一步中,我们 增加 我们的数据集,以包括更多数量的图像用于我们的训练。在这个数据扩充的步骤中,我们旋转翻转我们数据集中的每张图像。我们看到,在数据扩充后,我们总共有 2751 张图像,其中 1380 张 图像属于“ 类,而“ 1371 张 图像属于“ 类。

**Number of examples: 2751 
Percentage of positive examples: 50.163576881134134%, number of pos examples: 1380 
Percentage of negative examples: 49.836423118865866%, number of neg examples: 1371**

第三步:拆分数据

在这一步中,我们 将我们的数据分割成 训练集测试集 ,训练集将包含 CNN 模型将被训练的图像,测试集包含我们的模型将被测试的图像。****

在这里,我们取split _ size = 0.8*,这意味着总图像的的 80%将进入训练集*,剩余的 图像的 20% 将进入测试集。**

**The number of images with facemask in the training set labelled 'yes': 1104
The number of images with facemask in the test set labelled 'yes': 276
The number of images without facemask in the training set labelled 'no': 1096
The number of images without facemask in the test set labelled 'no': 275**

在分割之后,我们看到如上所述,期望百分比的图像已经被分配给训练集和测试集。

第四步:建立模型

下一步,我们构建我们的 顺序 CNN 模型 ,具有各种层,如 Conv2D、MaxPooling2D、Flatten、DropoutDense 。在最后一个密集层中,我们使用’ softmax '函数来输出一个向量,该向量给出两个类中每一个的概率

人脸面具检测的序贯模型

这里,我们使用’Adam’ optimizer 和’binary _ cross entropy’作为我们的损失函数,因为只有两个类。此外,您甚至可以使用 MobileNetV2 来获得更高的精确度。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

口罩 CNN 模型(来源——自己)

第五步:预先训练 CNN 模型

在构建了我们的模型之后,让我们创建’ train_generator 和’validation _ generator’以在下一步中使它们适合我们的模型。我们看到 训练集 中总共有 2200 张 图像,中有 551 张 图像。

**Found 2200 images belonging to 2 classes. 
Found 551 images belonging to 2 classes.**

步骤 6:训练 CNN 模型

这一步是我们将训练集和测试集中的图像与我们使用 keras 库构建的序列模型相匹配的主要步骤。我已经为 30 历元 训练了模型(迭代)。但是,我们可以训练更多的周期数以获得更高的精度,以免出现过拟合

**history = model.fit_generator(train_generator,
                              epochs=30,
                              validation_data=validation_generator,
                              callbacks=[checkpoint])>>Epoch 30/30
220/220 [==============================] - 231s 1s/step - loss: 0.0368 - acc: 0.9886 - val_loss: 0.1072 - val_acc: 0.9619**

我们看到,在第 30 个历元之后,我们的模型对于训练集的准确度为98.86%,对于测试集的准确度为 96.19% 。这意味着它训练有素,没有任何过度配合。

第七步:标注信息

建立模型后,我们为我们的结果标注两个概率。*【0】 【不带 _ 面具】 【1】* 【带 _ 面具】 。我还使用 RGB 值设置了边界矩形的颜色。 【红色】 【不带 _ 面具】 【绿色】 【带 _ 面具】

**labels_dict={0:'without_mask',1:'with_mask'} 
color_dict={0:(0,0,255),1:(0,255,0)}**

步骤 8:导入面部检测程序

在此之后,我们打算用它来检测我们是否戴着口罩使用我们的电脑的网络摄像头。为此,首先,我们需要实现人脸检测。在这里,我使用基于 Haar 特征的级联分类器来检测面部特征。

**face_clsfr=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')**

这个级联分类器是由 OpenCV 设计的,通过训练成千上万的图像来检测正面人脸。的。xml 文件也需要下载并用于检测面部。我已经将文件上传到了我的 GitHub 存储库中。

第九步:检测戴面具和不带面具的人脸

在最后一步中,我们使用 OpenCV 库运行一个无限循环来使用我们的网络摄像头,其中我们使用级联分类器来检测人脸。代码webcam = cv2.VideoCapture(0)表示网络摄像头的使用。

该模型将预测两类([without_mask, with_mask])中每一类的可能性。基于哪个概率更高,标签将被选择并显示在我们的脸部周围。

此外,您可以下载适用于手机和 PC 的droid cam应用程序,以使用您手机的摄像头并在 *webcam= cv2.VideoCapture(1).*中将数值从 0 更改为 1

演示

让我们看看我在自己身上试用的演示吧!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

演示视频

从上面的演示视频中,我们看到模型能够正确地检测到我是否戴着面具,并在标签上显示出来。

我正在分享我的 GitHub 库的链接,在那里你可以找到详细的。ipynb 程序代码,供你试用。

** [## MK-gurucharan/面罩检测

在此,我附上我的代码,建立一个 CNN 模型,以检测一个人是否戴着口罩或不使用…

github.com](https://github.com/mk-gurucharan/Face-Mask-Detection/)

在这篇文章中,我们成功地建立了一个 CNN 模型来检测一个人是否戴着面罩。这可以用于许多应用中。考虑到新冠肺炎危机,戴口罩在不久的将来可能是必要的,这种检测人是否戴口罩的方法可能会派上用场。

我真的希望这些艰难的日子能尽快结束。让我们都保持健康和安全。到那时,快乐的机器学习!**

新冠肺炎常见问题机器人:一切你需要知道的 QnA 相似性

原文:https://towardsdatascience.com/covid-19-faq-bot-everything-you-need-to-know-about-qna-similarity-35a730f63fa1?source=collection_archive---------45-----------------------

新冠肺炎相关问题的自动问答系统

作者注: 迈向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里

最近几个月,新冠肺炎已经成为全球热门话题。今天,正如新冠肺炎强烈显示的那样,预防胜于治疗。他们中的大多数人在目前的情况下都能很好地理解这句话。是的,人们正试图阻止自己和他人传播病毒。的确,社交距离和戴 N-95 口罩被人们广泛效仿。

人们对每个话题都有自己的假设和看法。许多人都有一些常见问题,这些问题被称为常见问题。在今天的情况下,新冠肺炎病例迅速增加。每个人都想知道新冠肺炎病毒的真相。此外,他们中的大多数都有如下常见问题:

  • 病毒是如何传播的?
  • 有什么症状?
  • 有疫苗吗?
  • 病毒在表面存活多久?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每个人都有自己的假设或疑问。

在这篇文章中,将讨论如何建立自动新冠肺炎常见问题机器人检索常见问题的答案。

  1. 数据收集—新冠肺炎常见问题数据
  2. 数据准备
  3. 数据预处理
  4. 问题表示技术
  5. 使用用户查询评估

1.数据收集—新冠肺炎常见问题

数据收集是从各种可用来源收集相关信息。当我在网上搜索新冠肺炎常见问题时,我找到了以下参考资料。

  1. https://www.mohfw.gov.in
  2. https://www.cdc.gov
  3. https://www.un.org

我选择了https://www.un.org网站新冠肺炎常见问题数据来建立我们的问答相似性系统。它有 39 个不同的新冠肺炎常见问题。了解可用数据的格式总是非常重要的。它是一个 PDF 非结构化文档。让我们以编程方式下载该文件,如下面的代码片段所示。

2.数据准备

下一个任务是准备所需格式的数据来解决问题。因为,我们需要从非结构化文档中提取每个问题和相应的答案,并将其存储在结构化文件中。从文本文件中提取信息的最好和最简单的方法是进行解析。解析有助于检索基于以下假设的特定信息。

假设:

  1. 它必须遵循原始文本中的一些模式。
  2. 应该从 PDF 中提取相同的结构。
  3. 文本中不应包含任何干扰。

在管道中,它涉及以下任务。

  • 它使用 R 模块将 PDF 文件转换为文本文件。这个模块在文本文件中保持相同的 PDF 结构。我发现与 python 中的其他模块相比,这个模块工作得非常好。结构的内容将帮助我们很好地解析 QA。外部执行的 PDF 到文本的转换过程。(这个过程没有包含在代码片段中)
  • 模式匹配对于从原始文本中检索结构化信息非常有效。我们将使用 python 模块解析问题和答案。(如下面的代码片段所示)
  • 存储新冠肺炎常见问题问答结构化(。csv)文件。

准备好的新冠肺炎常见问题数据如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

结构化新冠肺炎常见问题数据。(前 10 行)

3。数据预处理

我们不会照原样使用数据。预处理是 NLP 中微调数据的另一个非常关键的步骤。

  1. 删除不需要的字符
  2. 删除问题编号
  3. 删除停用词
  4. 词汇化——减少单词的变形,最小化单词歧义。

我们将这些技术应用于 FAQ 问题和用户查询问题。

为什么我选择词汇化而不是词干化?

词干化和词尾化都是为了减少屈折形式。词汇化将文本最小化为适当的词汇但是,词干化减少到单词的前缀或后缀。词汇化将所有意思相同但表达不同的单词转换成它们的基本形式。

新冠肺炎文本预处理程序类。

4.问题表示技术

在本节中,我们将讨论表示常见问题的多种方式。

  1. TF-IDF
  2. 单词嵌入
  3. 伯特嵌入

TF-IDF

我们将用于语义相似性的第一种方法是利用单词包(BOW)。TF-IDF 将文本转换成有意义的数字。该技术是 NLP 应用中广泛使用的特征提取。TF(词频)衡量单词在文档中出现的次数。IDF(逆文档频率)测量在所有文档中具有高频率的词的低值。

新冠肺炎常见问题 TF-IDF 问题表示如下图所示,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

TF-IDF 新冠肺炎分数表示常见问题。

用于生成 TF-IDF 表示的代码片段如下所示:

单词嵌入

GloVe 是一种无监督学习算法,用于获取单词的矢量表示。它在全局单词-单词共现矩阵上进行训练。我从 Glove 下载了一个预先训练好的单词向量用于我们的分析。用于生成文字嵌入表示的代码片段如下:

让我们来看看嵌入对于语义信息是如何相互接近的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有相似嵌入的“防止”的单词嵌入可视化。(二手手套-twitter-25)

伯特嵌入

BERT 是一个基于 transformer 的模型,试图利用单词的上下文来获得嵌入。伯特打破了几项 NLP 任务的记录。下面的搜索查询是理解 BERT 的一个很好的方法。“2019 年巴西旅行者去美国需要签证”。我们观察到单词“to”与句子中其他单词的关系对于语义解码是重要的。返回美国公民到巴西旅游的信息是不相关的,因为我们谈论的是巴西公民到美国旅游。伯特能处理好这件事。

5.使用用户查询评估

我们向多个代表提出了新冠肺炎常见问题。让我们评估用户新查询的每个表示。我们如何发现 FAQ 问题与新用户查询的相似之处?。寻找相似性得分的最佳技术之一是余弦相似性。我们现在将使用余弦相似度来比较每个表示。如何计算余弦相似性,如下面的代码片段所示,

我们将根据以下问题评估 FAQ 问题的相似性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用户查询问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

手套嵌入结果。

我们通过嵌入和 BERT 嵌入表示获得了最好的结果。TF-IDF 的缺点是不能从语义上表示这个问题。完整的代码可以在 GitHub 中找到。你可以通过 LinkedIn 联系到我。

感谢阅读。!!!

资源:

https://github . com/narendraprasath/新冠肺炎-常见问题-问答-机器人

新冠肺炎微调伯特文学搜索引擎

原文:https://towardsdatascience.com/covid-19-finetuned-bert-literature-search-engine-93ff9755a502?source=collection_archive---------35-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在过去的几周内,研究工作和研究论文的数量在持续增加,以对抗这种冠状新冠肺炎邪恶病毒。组织如此庞大的数据现在至关重要,这就是这项工作( kaggle 代码github 代码优化运行在谷歌实验室、数据)试图实现的,作为Kaggle 竞赛的一部分,该竞赛试图找到智能解决方案来组织大量不断增加的研究知识。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

微调 BERT,然后嵌入研究论文来构建搜索引擎

我们的方法是

  1. 使用变压器包微调 BERT 架构
  2. 然后嵌入研究论文查询,并使用余弦相似度在它们之间进行比较,有效地构建了一个搜索引擎,这里我们将使用句子转换包

这篇教程是我们上一篇教程 ( 代码数据)的延续,在这篇教程中,我们使用了一个已经训练好的 BERT 模型,并用它来构建我们的搜索引擎,不同的是,今天我们将微调我们的 BERT 模型以适应研究论文本身,所以让我们开始吧!!

A.为什么是伯特

BERT 已经证明了它是语言建模的架构,在使用 Transformers 之前,文献使用 seq2seq 编码器-解码基于递归的模型(在我们的博客系列中阅读更多)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然而,使用 LSTM 限制了该架构处理长句的能力,所以这就是为什么在他们的论文中引入了变形金刚【注意力是你所需要的全部】,它们依赖于注意力模型,特别是自我注意力,这是一种神经网络,旨在理解如何关注输入句子中的特定单词,变形金刚也内置于编码器/解码器结构中(在贾马尔的精彩博客http://jalammar.github.io/illustrated-transformer/中了解更多信息)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来自http://jalammar.github.io/illustrated-transformer/

结果是,我们不需要整个 Transformer 采用一个可微调的语言模型来完成 NLP 任务,我们可以只使用解码器,就像 OpenAI 提出的那样,然而,由于它使用解码器,模型只训练一个正向模型,而不考虑前面和后面(因此是双向的),这就是为什么引入了 BERT,我们只使用 Transformer 编码器。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来自http://jalammar.github.io/illustrated-bert/

B.微调伯特

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了获得巨大的语言理解,BERT 在巨大的数据集上被训练,然而,我们能够进一步训练 BERT 到我们自己的数据集,(这是 covid19 研究论文)这一步被称为微调,因为你微调 BERT 以适应我们自己的数据

1-首先我们将把研究论文(处理过的数据集在这里找到)以一个大文件的形式传递,其中每一段都在它自己的一行上

2-然后我们将使用变压器包来微调 BERT

所以让我们进入细节

1-处理数据,我们采用了一些处理技术来构建一个 csv 文件,其中每一行都是一篇论文中的一个段落,我们的搜索引擎会尝试获取与查询最相似的段落,您可以从这里下载数据(了解更多关于如何将数据从 google drive 连接到 google colab 这里)

import pandas as pd
from tqdm import tqdm#read csv
df_sentences = pd.read_csv("/content/drive/My Drive/BertSentenceSimilarity/Data/covid_sentences.csv")
df_sentences = df_sentences.set_index("Unnamed: 0")#load column to list
df_sentences = df_sentences["paper_id"].to_dict()
df_sentences_list = list(df_sentences.keys())
df_sentences_list = [str(d) for d in tqdm(df_sentences_list)]#process data to file
file_content = "\n".join(df_sentences_list)
with open("input_text.txt","w") as f:
    f.write(file_content)

2-现在我们将使用变形金刚套装来微调 BERT

!pip install transformers
!git clone https://github.com/huggingface/transformers.git

然后运行微调

!python "/content/transformers/examples/run_language_modeling.py" \
--output_dir="/content/drive/My Drive/BertSentenceSimilarity/BERTfine" \
--model_type=bert \
--model_name_or_path=google/bert_uncased_L-2_H-128_A-2 \
--do_train \
--block_size=512 \
--train_data_file="/content/input_text.txt" \
--mlm

C.构建搜索引擎

既然我们已经构建了自己的微调过的 BERT,让我们将嵌入应用到我们的数据中(使用句子转换器包)

!pip install -U sentence-transformers

然后加载您微调过的 BERT 模型

#https://github.com/UKPLab/sentence-transformers/blob/master/examples/application_semantic_search.pyfrom sentence_transformers import SentenceTransformer
from sentence_transformers import models, losses
import scipy.spatial
import pickle as pklword_embedding_model = models.BERT("/content/drive/My Drive/BertSentenceSimilarity/BERTfine")# Apply mean pooling to get one fixed sized sentence vector
pooling_model = models.Pooling(word_embedding_model.get_word_embedding_dimension(),
pooling_mode_mean_tokens=True,pooling_mode_cls_token=False,pooling_mode_max_tokens=False)model = SentenceTransformer(modules=[word_embedding_model, pooling_model])

然后应用嵌入,并将结果保存到 pkl 临时文件中

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用微调的 BERT 来嵌入我们的数据集

corpus = df_sentences_list
corpus_embeddings = model.encode(corpus,show_progress_bar=True)with open("/content/drive/My Drive/BertSentenceSimilarity/Pickles/corpus_finetuned_embeddings.pkl" , "wb") as f:
    pkl.dump(corpus_embeddings,f)

现在我们即将完成,我们只需要嵌入查询本身,然后使用余弦相似度来获得研究论文中最相似的段落,有效地构建一个搜索引擎

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

# Query sentences:queries = ['What has been published about medical care?',
'Knowledge of the frequency, manifestations, and course of extrapulmonary manifestations of COVID-19, including, but not limited to, possible cardiomyopathy and cardiac arrest',
'Use of AI in real-time health care delivery to evaluate interventions, risk factors, and outcomes in a way that could not be done manually',
'Resources to support skilled nursing facilities and long term care facilities.',
'Mobilization of surge medical staff to address shortages in overwhelmed communities .',
'Age-adjusted mortality data for Acute Respiratory Distress Syndrome (ARDS) with/without other organ failure – particularly for viral etiologies .']query_embeddings = model.encode(queries,show_progress_bar=True)

然后我们应用余弦相似度

# Find the closest 5 sentences of the corpus for each query sentence based on cosine similarityclosest_n = 5 
print("\nTop 5 most similar sentences in corpus:")*# Find the closest 5 sentences of the corpus for each query sentence based on cosine similarity*
closest_n = 5
print("**\n**Top 5 most similar sentences in corpus:")
**for** query, query_embedding **in** zip(queries, query_embeddings):
    distances = scipy.spatial.distance.cdist([query_embedding], corpus_embeddings, "cosine")[0]

    results = zip(range(len(distances)), distances)
    results = sorted(results, key=**lambda** x: x[1])

    **for** idx, distance **in** results[0:closest_n]:
        print("Score:   ", "(Score: **%.4f**)" % (1-distance) , "**\n**" )
        print("Paragraph:   ", corpus[idx].strip(), "**\n**" )
        row_dict = df.loc[df.index== corpus[idx]].to_dict()
        print("paper_id:  " , row_dict["paper_id"][corpus[idx]] , "**\n**")
        print("Title:  " , row_dict["title"][corpus[idx]] , "**\n**")
        print("Abstract:  " , row_dict["abstract"][corpus[idx]] , "**\n**")
        print("Abstract_Summary:  " , row_dict["abstract_summary"][corpus[idx]] , "**\n**")

D.结果是

(与我们上一个教程的预训练 BERT 相比)

示例 1:

==========================Query==========================
=== What has been published about medical care? =========
===================================================================================OLD (pretrained)=======================
Score:    (Score: 0.8296)
Paragraph:    how may state authorities require persons to undergo medical treatment
Title:    Chapter 10 Legal Aspects of Biosecurity----------------------------------Score:    (Score: 0.8220) 
Paragraph:    to identify how one health has been used recently in the medical literature
Title:    One Health and Zoonoses: The Evolution of One<br>Health and Incorporation of Zoonoses==========================NEW (finetuned)=========================
---------------Score:    (Score: 0.8779)Paragraph:    what is already known about this topic what are the new findings   paper_id:   f084dcc7e442ab282deb97670e1843e347cf1fd5 Title:    Ebola Holding Units at government hospitals in<br>Sierra Leone: evidence for a flexible and effective<br>model for safe isolation, early treatment<br>initiation, hospital safety and health system functioning---------------Score:    (Score: 0.8735)
Paragraph:    to identify how one health has been used recently in the medical literatureTitle:    One Health and Zoonoses: The Evolution of One<br>Health and Incorporation of Zoonoses

示例 2:

==========================Query==============================
=== Knowledge of the frequency, manifestations, and course of extrapulmonary manifestations of COVID-19, including, but not limited to, possible cardiomyopathy and cardiac arrest =====
===================================================================================OLD (pretrained)=======================
--------------Score:    (Score: 0.8139) 
Paragraph:    clinical signs in hcm are explained by leftsided chf complications of arterial thromboembolism ate lv outflow tract obstruction or arrhythmias capable of
Title:    Chapter 150 Cardiomyopathy --------------Score:    (Score: 0.7966) 
Paragraph:    the term arrhythmogenic cardiomyopathy is a useful expression that refers to recurrent or persistent ventricular or atrial arrhythmias in the setting of a normal echocardiogram the most commonly observed rhythm disturbances are pvcs and ventricular tachycardia vt however atrial rhythm disturbances may be recognized including atrial fibrillation paroxysmal or sustained atrial tachycardia and atrial flutter
Title:    Chapter 150 Cardiomyopathy==========================NEW (finetuned)=========================
--------------Score:    (Score: 0.8942)
Paragraph:    echocardiography and cardiac catheterization are common cardiac imaging modalities both modalities have drawbacks the limitations of echocardiography include operator dependence limited acoustic shadows a small field of view and poor evaluation of pulmonary veins the limitations of cardiac .......Title:    Trends in the utilization of computed<br>tomography and cardiac catheterization among children<br>with congenital heart disease--------------Score:    (Score: 0.8937)
Paragraph:    classic physical examination features of dcm include soft heart sounds from reduced contractility or pleural effusion gallop rhythm with or without a systolic murmur hypokinetic arterial pulses dull left apical impulse and clinical signs of profound chf exceptional cases are seen prior to onset of chfTitle:    Chapter 150 Cardiomyopathy

正如我们所看到的,新的微调伯特已经获得了经验丰富的知识,特别是优化和定制的新冠肺炎研究论文

完整的结果请参考我们的代码笔记本 (kaggle)或代码 (github 优化为在 google colab 上运行)

电子评论

我们真的被深深打动了,

  • 变形金刚包的易用性使得微调 BERT 变得非常容易,只需提供一个输入文本文件,每行包含一个句子(在我们的例子中是研究论文中的段落)
  • 句子转换器库,这使得应用 BERT 嵌入和提取相似性变得极其容易。
  • 结果的质量给我们留下了深刻的印象,因为与我们上一次教程中的一般预训练的 BERT 相比,微调的 BERT 被证明更适合我们自己的数据集
  • 我们相信,通过使用段落本身,而不仅仅是论文的摘要,我们不仅能够返回最相似的论文,而且能够返回论文中最相似的部分。
  • 我们希望通过这一点,我们正在帮助构建一个不断增加的文献研究工作的世界,以对抗这种冠状新冠肺炎病毒。

电子参考文献

  • 我们使用由拥抱脸提供的叫做变形金刚的库,这个库使得微调伯特变得非常容易
  • 我们使用由 UKPLab 提供的名为句子转换器的库,这个库使得使用 BERT 和其他架构如 ALBERT、XLNet 进行句子嵌入变得非常容易,它们还提供了一个简单的接口来查询和聚集数据。
  • 我们已经使用来自 maksimeren 的代码进行数据处理,我们真心感谢他。
  • 我们使用了绘画伯特的概念,在这里讨论杰伊·阿拉姆马在说明我们的建筑如何工作时,我们还参考了他所做的多个插图和解释,他的博客信息量极大,易于理解。
  • 我们使用 Conneau 等人在 2017 年讨论的预训练模型,在 InferSent-Paper(从自然语言推理数据中监督学习通用句子表示)中显示,对自然语言推理(NLI)数据的训练可以产生通用句子嵌入。
  • 注意就是你所需要的变压器纸
  • 伯特伯特代码
  • 我们使用了一些来自 Freepic 的矢量(图像)元素

本教程的代码可以在这里找到,或者从 github 这里找到(如果你需要在 google colab 上运行它),代码被构建为在 google colab 上无缝运行,使用其免费使用的 GPU,我们也使用 kaggle API 将数据直接下载到 google colab,所以既不需要在本地运行代码,也不需要在本地下载数据集。

我们还提供了所有处理过的数据集和嵌入的段落(219MB ),这些都需要一些时间来嵌入(所以你可以简单地使用它而不需要再次运行嵌入),链接这里,这些都托管在 google drive 上,我们已经构建了代码github 代码来无缝连接到 google drive,(了解更多关于连接 google drive 的信息这里

编者注: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里

我们真的相信,通过本教程,您已经对 BERT 有了更多的了解,以及如何根据您自己的数据集对其进行微调,我们也希望通过本教程,我们能够帮助研究社区对抗冠状病毒(新冠肺炎)。

希望你们都平安无事。

新冠肺炎地理信息系统资源概要

原文:https://towardsdatascience.com/covid-19-gis-resource-summary-debcba2a000b?source=collection_archive---------45-----------------------

利用数据科学帮助拉平曲线

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

新冠肺炎数据来源插图作者金彩云

OVID-19 是研究人员的热门话题。了解此次疫情及其与人口、基础设施和其他定位信息的关系,是做好准备、做出正确决策、让公民及其社区获得足够信息以应对危机的关键。为了支持这一点,世界上的一些公司和组织允许研究人员访问他们的软件和资源。

在我们开始之前,我想感谢徐健写的关于对新冠肺炎数据源进行审查的 文章 。如果您正在查找全球和美国数据集,则建议您这样做。

在本文中,我们将介绍更多的资源(截止到 2020 年 4 月 16 日),其中包括 GIS 项目的软件和数据源!

我们开始吧!

ESRI:新冠肺炎数据中心

如果您想要使用与新冠肺炎疫情相关的 GIS 数据集,您可以查看新冠肺炎数据中心,其中包含多个可在 GIS 分析项目中直接使用的 GIS 要素在线服务。

链接到新冠肺炎资源页面:此处

OGC 新冠肺炎资源

国际自愿共识标准组织开放地理空间联盟 ( OGC )已经收集了可信任的新冠肺炎数据集资源、相关 GIS 数据、底图以及新冠肺炎应用实例。在我看来,这是查看这里的资源的一个非常好的起点。

链接到 OGC 新冠肺炎资源页面:这里

安全软件:FME

来自 Safe 软件的 FME (特征操作引擎)是一款完美的用于 GIS 数据的 ETL(提取转换加载)软件,具有易于使用的用户界面。根据我的经验,这个软件在几个项目中帮助我做了很多数据准备和地图数据的转换,因为它支持我所知道的所有 GIS 数据格式。例如,它是唯一允许在 CityGMLEsri 地理数据库格式之间转换的工具。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用于将 CityGML 转换为 ESRI 地理数据库的 FME 工作空间示例

Safe 软件已经在他们的网站上宣布免费提供 FME 许可证,至少到 2020 年 9 月 30 日,为那些参与新冠肺炎相关项目的人,学习如何更好地支持他们的社区。

链接获取新冠肺炎期间免费 FME 牌照:此处

新冠肺炎 JSON

如果您是一名想要创建基于新冠肺炎数据的应用程序的 web 开发人员。建议您使用新冠肺炎 JSON API,它以 JSON 时间序列格式提供更新的新冠肺炎数据。这个数据集是可靠的,因为它根据约翰霍普金斯 CSSE 大学的每天更新。

链接到新冠肺炎 JSON: 这里

RKI 和 DWD(德国数据集)

由于我是德国的一名研究人员,我想分享来自罗伯特·科赫研究所(RKI)的最可靠和准确的德国新冠肺炎数据源。它是德国联邦政府机构和研究机构,负责疾病控制和预防。

数据集每天更新,并通过此链接公开提供:[此处](http://German federal government agency and research institute responsible for disease control and prevention.)其仪表板应用程序可通过此链接获得:此处

新冠肺炎开放研究数据集(CORD-19)

如果您正在研究或在学术领域对研究出版物感兴趣,请查看 CORD-19 ,这是一个开放资源,包含超过 51,000 篇关于新冠肺炎和冠状病毒家族的学术文章,供全球研究社区使用。

链接到 CORD-19: 此处

作者消息

我是一名德国地理信息学领域的研究人员,希望与大家分享我所了解的可靠的新冠肺炎资源,我也会继续更新这篇文章。如果您有任何问题或意见,请告诉我。

引用

[1]开放地理空间联盟,来自 OGC 的新冠肺炎资源 (2020),https://www.ogc.org/resources-for-COVID-19-from-ogc

宾夕法尼亚州立大学格拉斯门毕业生薪酬分析

原文:https://towardsdatascience.com/covid-19-glassdoor-penn-state-graduate-salary-analysis-7003a118c5bb?source=collection_archive---------53-----------------------

使用的数据科学工具和成果

介绍

新冠肺炎显然影响了就业市场。许多应届毕业生和即将毕业的大四学生被迫完成 2019-2020 学年,实际上在寻找工作和实习机会方面受到了严重影响,包括我和我的女朋友。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

穆罕默德·沙赫侯赛尼在 Unsplash 上的照片

她和我都是宾州州立大学的高年级学生。由于新冠肺炎在就业市场造成的影响,美国许多公司已经并继续遭受大规模裁员,正因为如此,学生和新毕业生的许多机会现在都消失了。

然而,有一天,当社交距离和呆在家里,我有一个想法突然出现在我的脑海里。

如果我为我女朋友的专业做一个关于当前就业市场的项目会怎么样?

这太完美了。这不仅对我的作品集来说是一个有价值的项目,而且也是一个有意义的分析,可以帮助她和其他学生了解哪些州目前在某些工作上比其他州拥有更多的机会。

目标

我的目标是总结哪些技能是雇主最需要的,哪些州对这些技能的招聘最多。这将使我有机会向我的“利益相关者”(我的女朋友)报告这些信息,帮助她在其他人申请同样的机会时获得优势。

通过写这篇文章,我在练习我讲故事的能力,并会感谢任何有助于我提高的反馈。

开始项目

我首先要问我在这个项目中的“利益相关者”她想要的职位是什么。以下是她转述给我的一些职位名称:

  • 创意总监
  • 营销总监
  • 营销经理
  • 品牌经理
  • 营销协调员

有了一个好的开始,现在我需要得到那些要求这些工作的公司的招聘信息。

由于这是一个数据科学项目,我想自己手动收集数据。我决定跟随我的朋友 Ken Jee 的教程,他在自己的项目中讲解了如何用 Python 搜集 Glassdoor 数据,帮助我获得了大约 2000 个招聘广告。作为参考,我在这里链接了他的 YouTube 系列

沟通

在我探索如何成为一名数据科学家/分析师的过程中,我了解到沟通是一项基本技能。

我个人认为这也适用于人际关系。

进入这个项目时,我不知道在她的领域里需要什么样的技能,但是**没关系。将来会有这样的情况,我将从事一个我可能没有多少背景的项目。由我来学习,找出这些信息来完成任务,找到答案。**

我决定做一个组合,问我的女朋友她从她的课程中学到了什么样的通用技能,并在谷歌上搜索这些相应职位的通用技能/先决条件。这些技能包括:

  • 微软 Word
  • 微软优越试算表
  • Adobe 创意云

然后,我在 2000 份招聘信息的数据集中设计了一些特征,看看哪些工作需要什么技能,在哪个州。

由于这篇文章主要是关于我的发现和反馈信息,我不会深入讨论该项目的数据收集、清理和探索性分析阶段,但是这些步骤的文档都可以在我的 GitHub 上获得。

我的一些发现:

在我的利益相关者给我的七个职位列表中,这是全美薪酬最高的前三个职位。

  • 创意总监:111886 美元。
  • 营销总监:99547 美元。
  • 营销经理:76266 美元。

那些有微软 Excel 工作经验的人的总工资要高出 13%。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

根据 Glassdoor 的调查,前五大最佳招聘城市约占所有招聘职位的 17%。

  1. 纽约州纽约市:127 个招聘信息。
  2. 加利福尼亚州旧金山:60 份招聘启事。
  3. 伊利诺伊州芝加哥:58 个招聘广告。
  4. 华盛顿州西雅图:56 个招聘广告。
  5. 佐治亚州亚特兰大:45 个招聘广告。

所有职位平均工资中薪酬最高的 5 个州排名:

  1. 阿肯色州:89250 美元。
  2. 堪萨斯州:75750 美元。
  3. 南达科他州:7.45 万美元。
  4. 蒙大拿州:73250 美元。
  5. 爱荷华州:73071 美元。

我女朋友最感兴趣的是获得一个创意总监的职位。有了这些信息,我做了更多的分析,特别是针对这个职位。我创建了一个 Tableau 可视化,但不幸的是,互动功能无法在媒体上显示。

相反,下面是显示创意总监薪酬最高的州的地图截图。对于那些有兴趣看到地图完整交互功能的人,我将把它链接到这里。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创意总监收入最高的 5 个州。

  1. 蒙大拿州:18.4 万美元。
  2. 德克萨斯州:14.04 万美元。
  3. 爱荷华州:138250 美元。
  4. 华盛顿:138250 美元。
  5. 新泽西州:137250 美元。

根据我的分析,我最喜欢的随机事实是:

夏威夷是营销协调员薪酬最高的第五个州,平均薪酬为 80,500 美元。

包装东西

我的项目到此结束,我非常感谢我的叔叔詹姆斯帮我润色了这篇文章。我尽量让它简短,但尽可能提供更多信息。如果你对这个分析的全部内容感兴趣,我会把它链接到这里。请随时关注我,并在 LinkedIn 上与我联系,在我继续记录我的工作,朝着获得数据科学职位的目标努力的过程中,观察我的成长。我将在今年秋天回到宾夕法尼亚州立大学大四的时候开始申请全职职位。

新冠肺炎:数据科学家如何为医学界做出贡献?

原文:https://towardsdatascience.com/covid-19-how-data-scientists-can-contribute-to-the-medical-community-ad03b19d34f0?source=collection_archive---------31-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:https://www . pexels . com/photo/concept-of-新冠肺炎-in-red-background-4031867/

让我们来讨论一下新冠肺炎!!

H 作为数据科学社区,我们如何为新冠肺炎疫情的研究做出贡献?为了解决这些问题,我们定期发布了几个数据集。新冠肺炎开放研究数据集挑战(CORD-19) 发布于 Kaggle 是最重要的数据集之一,由大约 47K 篇关于这些冠状病毒的学术文章组成。世界各地的许多人工智能研究人员正在不断地研究它,以从这些巨大的资源中提取有用的见解,并以简单的方式向医疗界提供所需的信息。让我们看看问题陈述:-

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:https://www . ka ggle . com/Allen-institute-for-ai/CORD-19-research-challenge

在进一步深入之前,让我们讨论一下 CORD-19 挑战中为研究人员提出的任务。作为这项挑战的一部分,总共有 10 项任务,如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:https://www . ka ggle . com/Allen-institute-for-ai/CORD-19-research-challenge

数据集呢?嗯,我们提供了一个 CSV 文件,其中包含大约 29k 篇研究论文的元数据信息,如标题、摘要、论文正文等。除此之外,我们还获得了几个 JSON 文件,其中包含大约 13k 篇研究论文的细节。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:https://www . ka ggle . com/Allen-institute-for-ai/CORD-19-research-challenge

目前,Kaggle 上有超过 600 个公开可用的内核,这些内核是由不同的研究人员发布的。这篇文章旨在讨论解决这种无监督的 ML 问题的一些最佳技术。

**注:**术语 【查询】【疑问】 互换使用。此外,术语 【研究论文】【研究文章】 可以互换使用,指的是同一件事。

**方法一:**新冠肺炎文献聚类

[## 新冠肺炎文献聚类

使用 Kaggle 笔记本探索和运行机器学习代码|使用来自多个数据源的数据

www.kaggle.com](https://www.kaggle.com/maksimeren/covid-19-literature-clustering)

当我们进入无监督任务领域时,聚类是我们脑海中出现的明显方法。给定一个查询文章,聚类可以用来创建一个识别相似文章的工具。这个笔记本使用 K-Means 对相似的研究文章进行聚类。除此之外,作者还尝试了各种降维技术,如主成分分析和 t-SNE 来绘制交互图,以更好地了解不同的聚类。

  1. **数据准备:**解析每个 JSON 文件,并从元数据 CSV 文件中追加其元信息(“作者”、“标题”、“期刊”)。最终准备好的数据看起来是这样的-

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**2。数据预处理:**进行小写转换、去除标点符号等常用文本预处理,并利用文章正文创建特征向量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3。 **特征生成:**生成来自单词的 n 元语法(n=2 ),并使用哈希矢量器来创建特征向量 x。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**4。使用 t-SNE 进行降维:**这种高维特征向量被降维为两个特征,以观察数据中是否存在某种模式,t-SNE 能够将相似的实例保存在一起。虽然在下图中观察到几个集群,但是没有标签来区分这些集群。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**5。用 K-均值聚类:**聚类的初始值即 K 被选择为 10,并且 K-均值被应用于原始数据(大小为 4096 的特征向量)。现在,可以使用 K-Means 对象的预测功能来获得每个数据点的分类标签。带有聚类标签的图如下所示。从图中可以看出,来自同一个簇的文章彼此靠近。但是仍然存在重叠,可以通过 K 的超参数调整、更好的特征表示等来克服。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**6。进一步的改进:**首先,使用 tf-idf 来产生更好的特征表示,而不是使用哈希矢量器,然后对其应用 K-Means。然后使用 t-SNE 将维数降低到 2 用于绘图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这一次聚类更加清晰可见,这意味着 tf-idf 的特征表现有所改善。作者进一步试验了 PCA 图并将 K 值增加到 20。此外,一个互动的 t-SNE 图显示,这是本笔记本的主要贡献之一。

**总结:**这款笔记本实验了聚类&降维技术。给定一个查询,可以使用 K-Means 预测函数为其分配一个包含相似文章的聚类标签。主要的挑战将是确定 K 的正确值,并得出良好的特征表示。如果一些先进的技术,如医学领域的 BERT finetuned 可以用于特征表示,我想结果可以是即兴的。除此之外,其他聚类算法,如 DBSCAN,也可以进行实验,它不需要我们初始化聚类数。

方法 2:主题建模:查找相关文章

[## 主题建模:查找相关文章

使用 Kaggle 笔记本探索和运行机器学习代码|使用来自多个数据源的数据

www.kaggle.com](https://www.kaggle.com/danielwolffram/topic-modeling-finding-related-articles)

本笔记本使用 LDA(潜在狄利克雷分配)发现了许多主题。这允许将每篇文章视为这些主题的混合。通过将一篇特定的文章映射到主题空间(每个角落都有一个主题的单纯形),我们可以找到相关的文章。

主题=单词分布,文章=主题混合

  1. **资料准备:**文章正文在整个笔记本中使用。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2。数据预处理: scispaCy ,这是一个 Python 包,包含用于处理生物医学、科学或临床文本的 spaCy 模型。

3。 **特征生成:**使用 CountVectorizer 将每篇文章表示为一个单词包表示法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4。潜在狄利克雷分配: LDA 用于在矢量化数据表示上生成各种主题,其中主题的数量初始化为 50。几个话题的前 25 个单词显示如下-

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,每篇文章都表示为主题分布。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**5。获取最近的论文(在主题空间中)😗*为了获取与查询文章相似的文章,返回 k 个最近的文章的索引(如通过主题空间中的 Jensen-Shannon 散度)。作为相似性度量,使用 1-Jensen-Shannon 距离。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6。浏览任务:现在,一个任务可以映射到主题空间,可以找到相关的文章。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**总结:**在本笔记中,作者使用了主题建模方法将每篇文章表示为主题空间。主要挑战之一是确定主题的数量。另一个可以尝试的方法是在正文中添加标题或摘要信息。除此之外,其他语义相似度技术也可以用来推荐相似的文章。

方法 3: 线索:工具和知识图表

[## graphs🛠️ 🛠️工具与知识中心

使用 Kaggle 笔记本探索和运行机器学习代码|使用来自多个数据源的数据

www.kaggle.com](https://www.kaggle.com/shahules/cord-tools-and-knowledge-graphs)

本笔记本探索了各种方法,如主题建模、句子嵌入(使用)、DBSCAN 算法、关键词提取方法以及为相应任务创建知识图。

  1. **数据准备:**本笔记本仅使用元数据 CSV 文件中的可用信息。首先,LDA 被应用于文章的标题以产生 4 个主题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**2。可视化主题:**pyl Davis 库用于可视化每个单词在给定主题中的分布。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3。寻找相似的论文:这里使用了两种不同的方法来寻找相似的论文。

i) 然后,给定一个查询,它计算每篇文章之间的余弦相似度,并返回 k 篇最相似的文章。

ii) DBSCAN: 通过 spacy doc2vec 方法传递文章的标题,每篇文章由一个句子嵌入来表示。然后,DBSCAN 在这些文章的向量上运行,以生成各种聚类。然后,给定一个查询,它计算聚类标签并返回该聚类中存在的文章。

**4。基于关键字提取的方法:**下面描述的方法用于为给定的查询寻找相关的关键字

  • 首先附加所有来源的文章(JSON,CSV,biorxiv)
  • 从各种任务中选择一个子任务
  • 使用嵌入方法查找相关文章
  • 从这些文章中形成一个摘要列表
  • 然后做关键词抽取,从这些研究论文中得到重要的关键词。

关键词提取

关键词提取是从文本中提取最相关的单词和短语的自动化过程。关键词提取(也称为关键词检测或关键词分析)是一种文本分析技术,包括自动提取文本中最重要的单词和短语。它有助于总结一篇文章的内容,并识别正在讨论的主要话题。

这里使用了两种不同的关键字提取方法:I)使用 Rake ii)使用 PytextRank 库

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Rake 库使用

**5。知识图:**然后从给定查询中找到的摘要列表构建知识图。创建一个数据框架,它包含这些摘要中的主题、关系和对象,以绘制知识图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一步一步的例子-

问题:关于传播、潜伏期和环境稳定性,我们知道些什么?

  1. 获取类似文章。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.准备摘要和标题

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.找出主语、宾语和关系,并画出 KG。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**总结:**这个笔记本展示了主题模型和知识图表的可视化效果。作者还使用了最先进的句子嵌入技术,如 USE,并计算了相似度。这方面的进一步工作包括如何遍历这个 KG 并从中获取有用的信息。

方法 CORD 的问答模型

[## 👑一个回答所有问题的模型

使用 Kaggle 笔记本探索和运行机器学习代码|使用来自多个数据源的数据

www.kaggle.com](https://www.kaggle.com/jonathanbesomi/question-answering-model-for-cord-19-beginner)

这款笔记本开发了一个通用的问答系统,可以回答(几乎)任何一种与冠状病毒相关的问题。作者还使用 HTML 和 CSS 以更好的方式显示结果。

**问答(QA)模型:**在机器学习中,一个问答模型由三个源组成:questioncontextanswer。模型输入为questioncontext,模型输出为answer。在大多数情况下,但不是所有情况下,answer包含在context中。

**使用搜索引擎产生上下文:**由于有超过 40k 的论文,需要通过选择所有与answer最相似的论文来减小上下文的大小。在代码中,一个非常简单的算法 Okapi BM25 被用于这个目的。

**总体思路:**查询- >搜索引擎- >上下文列表- >针对每个上下文和同一查询- > QA 模型- > span(部分上下文代表答案)

  1. **数据准备:**本笔记本仅使用元数据 CSV 文件中的可用信息。

**2。COVID 搜索引擎:**BM 25 okapi 搜索引擎是在结合了整个研究文章的摘要和标题的数据上创建的。给定一个查询,它计算每篇文章的 bm25 分数,然后返回 k 分数最高的文章。这些文章将作为 QA 模型的上下文。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3。问答模型: 正在使用 Huggingface transformer 库来实现 QA 模型。这里使用的是在班数据集上预先训练的用于问题回答的 BERT 模型。从下面的代码片段可以理解整个方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**4。CORD-19 Kaggle 问题:**首先,所有的 CORD-19 任务和各自的问题都存储在一个 dictionary 对象中。然后,迭代这个字典,一个任务的所有问题被一个接一个地传递,并且为那个特定的任务附加答案。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**5。显示问题、上下文和答案:**使用 HTML & CSS 以格式良好的方式显示最终结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**总结:**本笔记本采用问答模式处理各自的任务。它还利用 BM25 搜索引擎来减少上下文大小。这里的另一种方法是使用一些先进的基于相似性的方法来查找相似的上下文,而不是依赖于 BM25 搜索引擎。另一件可以做的事情是在医学领域数据集而不是开放领域数据集上预先训练 QA 模型,然后将其用于问答任务。

方法 5:语义语料库搜索的 Anserini+BERT-SQuAD

https://www.kaggle.com/dirktheeng/anserini-bert-squad-for-语义语料库搜索

之前的 QA 模型借用了这个笔记本的思想,因此方法非常相似。这个笔记本还使用了开放领域问答和语义搜索引擎的概念来快速地将科学信息减少到最感兴趣的几条记录中。但是,本笔记本提供了一种方法来产生一个“最佳”答案,而不像以前的方法那样根据上下文获得多个答案。除此之外,这里作者还使用预训练的“BART”模型基于顶部结果生成了一个摘要用于“抽象摘要”。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用 BERT-SQuAD 进行语义搜索

Anserini 是一个建立在 Apache Lucene 之上的搜索引擎,它可以搜索文献并返回排名记录。作者没有在维基百科上使用 Anserini,而是使用了已经公开的 CORD-19 Lucene 数据库。

**总体思路:**查询- >搜索引擎- >排名细分- >针对每个细分和相同的查询- > QA 模型- >跨度集- >使用模型相似度矩阵进行跨度排名- >最高得分跨度- > BART 摘要- >抽象总结

注意:随着一个给定的查询,需要传递一组关键字来帮助驱动 Anserini 搜索引擎找到最感兴趣的结果。这是有益的,因为搜索的 Anserini 部分不是真正的上下文,不能破译的意思,所以关键字将有助于推动搜索。

定义比赛的所有问题

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**总结:**这款笔记本还使用了搜索引擎和 QA 模式来处理各自的任务。作者还设计了一个模型来总结结果,以简单的方式给出答案。同样,这里的另一种方法可以是使用一些先进的基于相似性的方法来找到相似的上下文,而不是依赖于搜索引擎。此外,可以做的另一件事是在医学领域数据集上预先训练 QA 模型,如果可用的话,然后将其用于问答任务

方法 6: 带有句子嵌入的 CORD-19 分析

[## 具有句子嵌入的 CORD-19 分析

使用 Kaggle 笔记本探索和运行机器学习代码|使用来自多个数据源的数据

www.kaggle.com](https://www.kaggle.com/davidmezzetti/cord-19-analysis-with-sentence-embeddings)

该项目在 CORD-19 数据集上构建了一个索引,以帮助分析和数据发现。对于每个任务问题,都会构建一个亮点部分,其中包含结果摘要以及每篇匹配文章和每篇匹配文章的文本。

  1. **构建一个 SQLite 文章数据库:**原始的 CORD-19 数据存储在一个 metadata.csv 文件和 JSON 文件中,并带有全文。这个项目使用 SQLite 来聚集和存储合并的内容。

**2。标签:**此时唯一的标签是新冠肺炎,如果文章文本包含任何建议的正则表达式,文章将使用此标签。只有这样的文章在这个项目中被考虑。

**3。构建嵌入索引:**使用 FastText + BM25 创建一个嵌入索引。嵌入索引获取每个新冠肺炎标记的、未标记的(不是问题/片段)部分,标记文本,并构建句子嵌入。句子嵌入是句子中每个标记的快速文本向量的 BM25 加权组合。嵌入索引采用这些嵌入的完整语料库,并构建一个 Faiss 索引来实现相似性搜索。

作者绘制了几个图,如柱状图代表按来源分类的文章、按出版物分类的文章、按研究设计分类的文章等,以便更清晰地分析数据。下面显示了一个这样的图,它代表了所提到的国家的文章:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

按提到的国家分列的文章

**4。测试模型:**最初,模型为语料库中的每个句子构建嵌入。对于输入查询,它将每个句子与输入查询进行比较。Faiss 使得相似性搜索更快。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**5。构建任务报告:**任务报告是挑战任务中每个问题的集合。对于每个问题,运行一个查询并返回排名靠前的文章。对于每篇文章,文本匹配显示为带项目符号的点,这些是文章中最匹配的句子。结果句子的完整列表也通过 textrank 算法进行分析和运行。结果中的重点或热门句子也会显示在报告中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**总结:**本笔记本尝试使用 FastText + BM25 嵌入组合的相似性搜索来解决给定的任务。此外,文章中具有最大相似性得分的句子显示在高亮部分,该部分充当给定查询的摘要。尽管这种方法看起来更简单,但是各种算法的结合已经产生了相当显著的结果。

方法 7:新冠肺炎:BERT + MeSH 使能知识图

[## 新冠肺炎:BERT + MeSH 支持的知识图

使用 Kaggle 笔记本探索和运行机器学习代码|使用来自多个数据源的数据

www.kaggle.com](https://www.kaggle.com/sandyvarma/covid-19-bert-mesh-enabled-knowledge-graph)

该模型使用了知识图与网格本体和 BERT 嵌入的结合。支持图形的搜索帮助用户基于非常具体的医学术语进行搜索。它还可以扩展到推断不同的文档如何相互关联(基于作者、正文、标题等)。)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

方法论

**1 a .从 JSON 文档中提取实体:**从每个 JSON 文档的标题、作者详细信息、摘要、正文和参考文献中提取实体。然后,这些实体被用于创建知识图的三元组。三元组包含 5 种关系。实体通过以下关系映射到其各自的纸张 id:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1 b .使用网格本体的增强的实体提取:对于三元组中的每个实体,从网格本体中提取其前 5 个对应的相似实体。然后,这些实体也包括在三元组中,具有它们相应的关系。这样做是为了增加知识图的范围和能力,使得它不仅覆盖文档中存在的术语,还覆盖不存在但可能有帮助的相关实体。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2。BERT 训练和文件提取:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3 和 4。使用 BERT 和知识图提取结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5。提取文档中相关实体的段落提取

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

任务查询结果:结合使用 BERT 和知识图,涵盖了语义搜索以及一些特定关键字搜索的方面。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**总结:**这款笔记本最大的贡献在于,作者提出了一个非常全面的解决方案,使用了多种 ML 技术。作者使用了 SOTA 伯特嵌入,并将其与知识图相结合,进一步提高了其效率。这个笔记本也是最有条理的,所有的方法都以非常系统的顺序呈现。

**结论:**本博客展示了人工智能研究人员在 CORD-19 数据集上完成的一些伟大工作。我试图收集所有不同的方法,通过这些方法可以解决这种无监督的学习任务,并让自己对这一领域有更好的理解。世界各地的数据科学家正试图以他们力所能及的方式做出贡献,我们希望这些工作能为医疗团队带来成果,我们可能很快就能摆脱疫情。

编者按: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值