TowardsDataScience 博客中文翻译 2020(九百四十三)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

使用 Dash 引导心脏病预测模型

原文:https://towardsdatascience.com/using-dash-to-pilot-a-predictive-model-for-heart-disease-a1dab01035ac?source=collection_archive---------45-----------------------

如何设计你的用户界面并在 Dash 中运行

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

图片由 WrightStudio 从 Adobe Stock 获得许可。

背景

之前的一篇文章中,预测心脏病的模型是使用 PyCaret 开发的。现在,假设我们希望在临床环境中试验这个模型。我们首先需要的是模型的 UI,这样它就可以被部署了。我们还将假设该工具用于筛选以推荐后续行动,而非诊断。

在此示例中,为了便于说明,我们将重点关注以下内容:

  1. 确定最低关键要求以及如何满足这些要求。
  2. 勾画出一个包含关键需求的用户界面。
  3. 使用 Dash 创建工作版本。

该应用程序是使用 PyCharm 开发的,所有资料都可以在我的 GitHub 上找到。

**免责声明:**在现实环境中,当部署一种新的预测模型来预防、诊断或治疗健康状况时,需要考虑许多因素,包括已证明的影响、伦理和算法偏差以及法律要求(即 SaMD ,患者隐私)。虽然这些考虑非常重要,但它们超出了本文的范围。

要求

与临床同事合作,假设确定了以下要求:

  1. 用于输入预测模型中用作特征的患者特征的位置。
  2. 患者的输出风险评分,也将他们分配到风险组。
  3. 协助卫生保健从业者理解/传达哪些风险因素导致了患者的风险。为此,我们将使用 SHAP 值
  4. 根据患者所属的风险群体,推荐下一步行动。
  5. 有关用于生成预测风险分值的模型是如何开发的及其性能的信息。我们也可以包括一些关于队列和重要风险因素的一般信息。

用户界面

基于上述要求,由以下部分组成的简单结构是一个合理的起点:

  1. 数据输入(要求 1)
  2. 预测模型输出/解释/建议的下一步行动(要求 2、3 和 4)
  3. 模型开发信息(要求 5)

我们 Dash 应用的大致布局如图图 1 所示。

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

**图一。**使用 Dash 粗略勾画出我们想要创建的东西的轮廓。请原谅我的笔迹!(图片由作者提供)

Dash 应用程序

根据上述要求和草图,第一个工作应用如图图 2 所示。请注意,这些截图是在宽屏(24 英寸,16:9,1920 x 1080)上观看的。在较小或不宽的屏幕上,对齐可能会关闭。我强烈推荐克隆 GitHub repo 并亲自探索 UI!

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

**图二。**主视图!(图片由作者提供)

数据输入

在应用程序主视图的左侧,我们为用户提供了适当的机制来输入所需的信息,从而为预测模型生成特征(图 3 )。在可能的情况下使用下拉菜单(所有分类特征),否则可以直接为数字特征输入值。

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

**图 3。**主视图左侧面板,包含预测模型的数据输入。(图片由作者提供)

通常,数据预处理管道将嵌入到应用程序中,以处理插补或缩放等步骤。在这种情况下,由于最少的预处理,而且除了一种情况之外,所有输入的数据都是特征值,所以我选择保持简单。

预测模型输出/建议行动

应用程序的右侧根据我们的预测模型总结了所需的输出(图 4 )。首先,我们得到一个预测的风险评分,用于将患者归入三个风险组之一。

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

**图 4。**预测风险总结和建议措施。(图片由作者提供)

接下来,SHAP 值和瀑布图用于传达哪些患者因素对风险贡献最大。这个想法是,它将帮助用户看到模型认为哪些因素导致心脏病风险,如果可以修改,可以针对生活方式进行干预。当然,这伴随着通常的联想,而不是因果关系。shap 包瀑布图(Scott Lundberg )不容易整合到 dash 应用程序中,所以我使用 plotly 瀑布图创建了自己的副本。

最后,有一个(虚构的)行动建议,基于病人属于三个风险组中的哪一个。这个想法是提示一系列明智的后续步骤,无论是生活方式的改变,进一步的测试,还是后续的预约。这也可以用作参考已批准的预防/治疗医学疾病的指南的地方,或者作为转介到适当服务(即,参考营养咨询)的起点。应与临床同事合作制定风险分组和相应的措施。

模型数据

在本节中,我们添加了关于所用数据、所选模型、培训/调整流程、绩效指标、描述性比较心脏病患者和非心脏病患者的研究队列表以及基于 SHAP 的特征重要性的信息(图 5 )。

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

**图五。**屏幕底部的可扩展面板显示了模型开发的基本信息。(图片由作者提供)

我们还可以考虑包括整个研究群组的平均特征、外部验证程序或其他研究(如果适用)、支持该工具的已发表工作的参考文献、突出任何特征交互等。

改进的潜力

一如既往,任何试点用户界面都有改进的潜力,例如:

  1. **简化数据输入:**我们本可以减少需要输入的信息,因为一些特征对预测风险没有影响。我保留了所有东西,这样其他使用相同数据集开发自己模型的人就可以简单地交换模型。pkl 文件,并按原样使用仪表板。
  2. **自动数据输入:**我们可以使用文件上传或直接数据库连接来代替手动数据输入。但是我们所拥有的对于这个例子来说已经足够了,并且作为一个试验的一部分,不会有太多的负担。
  3. **模型校准:**使用预测风险评分等级有助于推荐后续行动,如本例所示。如果我们向患者报告心脏病的可能性,我们的预测概率必须经过很好的校准(即,与心脏病发生的实际机会一致)。

你还会做出哪些改进,或者你会有哪些不同的做法?

摘要

我们为飞行员准备好了仪表盘。使用 Dash 更接近于部署范围的定制端。这可以通过 PowerBI 或 Qlik 等其他工具部署,作为可能的中端选项。我们也可以采用低端方法,使用例如 FastAPI 创建一个 API。在以后的文章中,我将尝试使用这些 UI 选项重新创建 Dash 应用程序。

感谢您的阅读,我希望您花些时间从这个例子中探索 Dash UI。一如既往,非常欢迎评论、想法、反馈和讨论!

利用数据科学和先进技术抗击流行病

原文:https://towardsdatascience.com/using-data-science-and-advanced-technologies-to-fight-pandemics-dac3b5f45458?source=collection_archive---------74-----------------------

数字生物学

抗击流行病需要生物技术、人工智能等等。我们准备好了吗?因为现在已经不是 1918 年了。

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

iStock 插图

黛安·迪厄利斯、彼得·伊曼纽尔、詹姆斯·佐丹奴和亚历山大·泰特斯

在军队中听到的一个常见表达是,“我们总是在打最后一场战争。”面对全球对新冠肺炎危机的反应,“最后一场战争”是 1918 年的疫情流感。

尽管历史提供了宝贵的教训,但根据当前的环境、能力和复杂性重新审视过去的问题和解决方案是至关重要的。新冠肺炎疫情造成了一个既要确保公共安全和健康,同时又要努力稳定和维持经济的两难境地。

与此同时,显而易见有益的可用先进技术并没有被充分利用来最大限度地利用道德上合理、有效和高效的方法来减少疫情对我们社会和经济的影响。如果说有什么时候可以使用这些工具,那就是现在

疾病监测数据平台需要现代化

测试提供了对疾病特征和模式的理解——如发病率、流行率、恢复和人口统计学——并且应该更早开始。检测病毒感染和暴露的技术已经成熟,但它们缺乏协调,也没有与私营部门的扩大途径联系起来。基因组测试可以揭示谁风险最大,谁可能恢复的数据。因此,关键数据缺失,而这些数据是为决策提供信息所必需的,包括物理距离的范围、对社会经济振兴的影响以及美国国防力量的准备情况。

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

照片由 NASAUnsplash 上拍摄

像新冠肺炎这样的传染病的早期识别需要全球分布的一系列硬件和软件,放置在足够多的位置,以创建一个链接收集站点的网络。这需要通过战略联盟和公私伙伴关系以及国际竞争者的合作企业来发展生物监测系统。这种能力和合作目前还不存在——无论是美国联邦政府还是我们的许多全球合作伙伴。与全球竞争对手的合作监控机制,尽管公认困难重重,但目前仍很紧张,因此也很脆弱。当然,实现这种“合作竞争”需要谨慎和相当的技巧,而这需要更加信任情报和外交服务。

应该定期使用计算工具

应该采用人工智能、机器学习和数字健康方法来模拟病毒的潜在传播,以及识别、设计和开发测试和治疗(如果不是预防的话)干预措施。在最令人担忧的病原体成为流行病的情况下,人工智能和数字卫生不属于准备协议的一部分。如果疫情开始,这种准备将是“超前的”——而不是在快速演变的危机中不得不“启动”疫情反应的这种努力。

当然,任何支持和提供个人实时医疗数据的方法都会在民用和军用环境中产生伦理、法律和社会问题。需要制定法律措施,以防止或减轻治疗和关注方面的潜在偏见,并减少数据黑客行为的风险和可能的影响。

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

NASAUnsplash 上拍摄的照片

供应链也需要技术现代化。新冠肺炎效应对全球贸易的影响向我们展示了美国供应链的脆弱性及其对外依存度,并揭示了对更灵活、更便捷的供应链的需求。这需要对进口进行严格检查,探索创新的制造技术,并防范来自国外的单点故障。

私营部门的许多公司已经证明,在上述计算工具的帮助下,他们可以快速灵活地将生物技术平台导向诊断和医学分子的生产和规模化。这些努力应该更有规律地加强传统供应链。

现在不是 1918 年,也不一定要再来一次

新冠肺炎危机应该从字面意义上来理解——一个变革的时代。我们可以从 1918 年的疫情中学到一些适用于当下的经验。正如 1918 年的疫情威胁、促使医疗反应系统做出反应并改变了医疗反应系统一样,今天的政府、民间和商业部门的基础设施和职能也必须如此。

当前新兴的生物技术可以——也应该——参与开发先进的诊断测试和工具,创建更准确的流行病学模型,创新医疗对策和制造平台,并以数字方式让美国公民参与应对。无论威胁是自然的还是人为的,这种方法必须在一个网络化的生物安保企业中使用,这个企业需要一个全国性的系统,以便能够作出更加有效和高效的反应。这样一个系统将能够更好地预测、准备(如果不能防止的话)下一次生物安保问题,而不仅仅是重复上一次的错误。

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

Diane DiEuliis 是国防大学大规模杀伤性武器研究中心的高级研究员。彼得·伊曼纽尔是陆军未来司令部化学生物中心的高级生物工程研究科学家。James Giordano 是乔治敦大学医学中心神经病学和生物化学系的教授,也是海军战争学院生物安全、技术和伦理项目的高级研究员。亚历山大·提塔斯是高级再生制造研究所的首席战略官。本文中表达的观点仅是作者的观点,并不反映国防部或美国政府的官方政策或立场。

这篇关于 对抗流行病的技术 最初出现在国防上。

使用数据科学和人种学建立一个显示率预测器

原文:https://towardsdatascience.com/using-data-science-and-ethnography-to-build-a-show-rate-predictor-4d7139a0bd2b?source=collection_archive---------51-----------------------

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

图片来自 DarkoStojanovic

我最近为一个(匿名)医院系统开发了一个显示率预测器,为此我必须整合人种学和数据科学方法。许多读者要求这种集成的真实世界的例子,这个项目展示了人种学和数据科学如何能够结合起来,开发出对用户有意义并满足他们需求的有用的基于机器学习的软件。

第 1 部分:确定项目范围

医院系统中的一个特定诊所遇到了大量的预约失约,这给患者和员工都带来了时间浪费、挫败感和困惑。我被要求使用数据科学和机器学习来更好地理解和改善他们的调度。

我通过对诊所进行人种学研究开始了这个项目,以了解更多关于排班是如何正常发生的,它对诊所有什么影响,以及员工看到了什么样的驱动问题。特别是,我观察并采访了排班助理,以了解他们的日常工作和他们对失约的看法。

我从这一切中学到的一个主要教训是,在安排预约时,安排者不断地试图确定在给定的医生轮班中安排多少人,以确保出现正确的人数。例如,说 12-14 个病人是 Rodriguez 医生(虚构的名字)周三早班的一个好病人数。当决定是否在即将到来的周三为给定的患者安排与 Rodriguez 医生的预约时,预约助理试图确定,根据当前安排的预约,他们是否可以预期 12-14 名患者出现。这通常是一门不精确的科学。他们经常需要在一个特定的医生轮班中安排 20-25 名患者,以确保他们理想的 12-14 名患者那天真的会来。然而,这可能会造成混乱,有些日子来的病人太多,而有些日子来的病人太少。

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

图片来自杰拉德

这个问题——在给定的医生轮班中,我们可以期望或预测发生多少次预约——成为我用机器学习来回答的驱动问题。在与诊所的各种利益相关者核对以确保这确实是一个用机器学习来回答的重要而有用的问题之后,我开始构建。

第 2 部分:构建模型

既然我有了一个有驱动力的、可回答的问题,我决定把它分成两个连续的机器学习模型:

  1. 第一个模型学习预测给定约会发生的概率,从发生或未出现约会的历史中学习。
  2. 第二个模型使用第一个模型中的预约概率,估计每个医生轮班时可能发生的预约次数。

第一个模型结合了三个数据流来评估失约的概率:约会数据(例如多长时间前被安排,约会类型等。);患者信息,尤其是过去的预约历史;和医生信息。我进行了广泛的特征选择,以确定要使用的最佳变量子集,并在确定梯度提升之前测试了几种类型的机器学习模型。

第二个模型使用第一个模型中的概率作为输入数据来预测每个医生轮班时会有多少病人。我选定了这个模型的神经网络。

第 3 部分:构建应用程序

接下来,我与团队中的软件工程师一起开发了一个应用程序,以实时利用这些模型,并在调度人员安排约会时将信息传达给他们。我的人种学研究对于开发如何构建这个应用程序非常有价值。

在后端,应用程序计算所有未来约会发生的概率,并根据新安排或编辑的约会的新计算结果进行更新。每周一次,它将合并该周的新约会数据,并将出席率转换为每个模型的训练数据,并相应地更新这些模型。

通过我的人种学研究,我观察了日程安排者是如何安排约会的,包括他们在这个过程中使用了什么软件,以及他们如何使用每个软件。我用它来决定传达信息的最佳方式,定期向调度人员展示我的想法,以确保我的策略会有所帮助。

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

图片来自 Pixabay

我构建了一个界面来交流信息,以补充他们当前使用的软件。除了显示预计到达的患者数量,如果机器学习算法预测某个特定班次预订不足,它会在日历界面上用绿色标记该班次;黄色表示该班次预计有理想的患者人数,红色表示已经预计有过多的患者。颜色编码使信息在那一刻变得容易可视化:当试图为病人寻找预约时间时,如果有必要,他们可以很容易地找到绿色或黄色,但要避开红色。当放大一个特定的班次时,每个约会都将根据发生的概率进行颜色编码(可能、不太可能和中间)。

结论

这是整合数据科学和人种学来构建机器学习应用程序的项目的一个例子。我用人种学来构建应用的参数和框架。它将应用程序与调度程序的需求联系在一起,确保我开发的机器学习模型对那些会使用它的人有用。在他们发展的每一步之前的频繁检查也有助于确认我提出的概念实际上有助于满足他们的需求。

我的数据科学和机器学习专业知识也帮助指导了我的人种学过程。作为机器学习如何工作以及它可以回答什么样的问题的专家,我可以很容易地将我从人种学调查中获得的见解综合到可构建的机器学习模型中。我了解机器学习能够(和不能够)做什么,并且我可以直观地开发战略方法来利用机器学习解决他们遇到的问题。

因此,我作为人种学和数据科学家的双重角色使这个项目受益匪浅。我的人种学倾听技能使我能够发现调度人员面临的潜在问题,我的数据科学专业知识使我能够开发可行的机器学习解决方案。如果没有耐心地聆听大量的民族志,我就不会充分理解这个问题,但是如果没有我的数据科学专业知识,我就无法破译机器学习可以实际解决哪些问题以及如何解决。

这说明了为什么数据科学和人种学的联合专业知识在开发机器学习软件中是无价的。两个不同的个人或团队可以分别完成每个任务——一名人种学家分析用户的需求,一名数据科学家然后确定机器学习建模是否有帮助。但这似乎是不必要的脱节,可能会产生误解、困惑和混乱。通过增加额外的人员层,很容易导致人种学家发现基于机器学习的解决方案需要帮助的需求过于广泛或复杂,或者数据科学家试图将他们的机器学习“解决方案”强加给用户没有的问题。

发展这两方面的专业知识可以更容易地同时理解特定环境中的问题,并构建可行的数据科学解决方案。

你可以在这里找到原始出版物:【https://ethno-data.com/show-rate-predictor/】T2*。有关该网站和其他文章的更多信息,请访问*https://ethno-data.com/

也感谢《数据科学》杂志发表这篇文章。更多关于他们工作的细节,请看

利用数据科学获取客户

原文:https://towardsdatascience.com/using-data-science-for-customer-acquisition-2001525792f?source=collection_archive---------11-----------------------

客户细分报告和客户反应预测

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

为了给自己的品牌带来新客户,公司一直在开发他们的客户获取流程和策略。尽管这并不容易!任何基本客户获取计划的第一步都是识别优质潜在客户,猜猜看!数据科学可以帮助我们做到这一点!这个项目是关于可以用来理解顾客的特点,并可能获得他们的策略。

该项目应用机器学习算法,以便从人口统计数据中获取潜在客户的信息。这是由贝塔斯曼子公司 Arvato Financial Solutions 提供的 Udacity 机器学习工程师纳米学位项目的顶点项目。我选择这个项目主要是因为提供的数据是真实的,而且几乎没有对其进行清理。除此之外,我真的很喜欢了解业务和客户的需求,以便为公司和那些使用商业产品或服务的人提供最佳体验。

项目的第一部分包括基于 Arvato Financial Solutions 的现有客户和德国普通人群构建客户细分报告。为此,我使用无监督学习技术来识别最能描述公司核心客户群的人群。

第二部分包括建立客户营销活动响应预测器,以识别最有可能转化为客户的个人。为了做到这一点,我尝试了一些监督学习算法,并最终找到了给我最好 ROC AUC 分数的算法。

你可以在我的Github页面查看我开发的所有代码。

数据:

如上所述,该项目的数据由德国贝塔斯曼的子公司 Arvato Financial Solutions 提供。有六个数据文件与本项目相关,如下所示:

第一部分)客户细分

  • uda city _ AZDIAS _ 052018 . CSV:德国普通人口的人口统计数据
  • uda city _ CUSTOMERS _ 052018 . CSV:邮购公司客户的人口统计数据
  • DIAS 信息级别—属性 2017.xlsx :属性和描述的顶级列表,按信息类别组织
  • DIAS 属性-值 2017.xlsx : 每个变量的数据值按字母顺序排列

第二部分)营销活动响应预测

  • uda city _ maillout _ 052018 _ train . CSV:作为营销活动目标的个人的人口统计数据
  • uda city _ maillout _ 052018 _ test . CSV:作为营销活动目标的个人的人口统计数据

注意:已将 DIAS 信息级别 DIAS Attributes xlsx 文件 翻译为 data_info.csv 文件,该文件包含关于特征及其各自可能值的信息

数据预处理:

为了给机器学习算法提供输入,必须执行几个干净的预处理步骤。特别是,所提供的数据需要经过 8 个步骤的预处理和特征工程。您知道 80-20 法则吗?嗯,许多人说数据科学项目大约 80%的时间花在数据准备(预处理)上,20%花在数据分析和机器学习方法上。这正是在这个特殊的项目中发生的事情。我建立了一个函数,可以完成所有必需的过程,如下所示:

第 1 步-删除功能

由于缺失值的数量,清理功能会删除 35 个特征(列)。这些列包含超过 40%的 nan 数据。信息的缺乏可能会对模型产生负面影响,正因为如此,我决定摆脱它们。除此之外,对于客户数据集 I,该函数还删除了三个额外的列(“CUSTOMER _ GROUP”,“ONLINE_PURCHASE”,“PRODUCT _ GROUP”)。

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

每个要素的缺失值百分比分布

第 2 步-转换丢失的代码

我创建了 data_info.csv 文件,该文件汇总了来自 DIAS 信息级别-Attributes 2017 . xlsxDIAS Attributes-Values 2017 . xlsx 文件的信息。除此之外,我还包括了每个特征的缺失值代码,这样我就可以识别每个特征的所有缺失值,然后转换为 NAN。

这就是 data_indo 数据框架的样子:

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

编码前每个要素的缺失值总数(仅显示 50 个要素)

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

编码后每个要素的缺失值总数(仅显示 50 个要素)

第 3 步-删除行和数据插补

为了分析每行缺失值的数量,我将数据帧分成不同的集合。第一个具有大量缺失值(超过 250 个),其他的缺失值少于 250 个。通过这样做,我可以调查一些特征的分布,并比较两个数据框架。我意识到(许多特性的)分布是不同的,因此我决定继续处理丢失值较少的数据框,并删除所有超过 250 个 nan 变量的行。

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

第 4 部分—数据插补

尽管大多数特征要么是分类的,要么是顺序的,但我假设所有变量都是分类的。知道这一点后,我用特性中最常见的值替换了所有缺失的值(nan 变量),以补偿数据集中缺失的值。

第 5 部分—特征工程

用于构建客户细分的无监督学习算法需要数值。因此,所有的数据都必须用数字编码,这样模型才能按照预期的方式进行。

在分析了所有这些特性后,我决定如下操作:

  • 奥斯特 _ 韦斯特 _KZ —将被重新编码为 0 和 1 二进制特征
  • LNR——这似乎是一个索引,所以我们可以摆脱它
  • CAMEO_DEU_2015 —此功能有许多带有“XX”类别的行(347 行)。我认为这些输入是丢失的值,用一个数字值替换它们,并应用一个热编码来重新编码变量。
  • CAMEO_DEUG_2015 —该功能也有许多“X”输入。我做了和上面一样的功能
  • CAMEO_INTL_2015 —同上述特征
  • D19 _ letz ter _ KAUF _ branch e—该特征有 36 个类别(字符串),需要重新编码。
  • EINGEFUEGT_AM —这是一个日期格式功能,需要重新编码(年和月列)

为了避免稀疏性问题,我将一个热编码限制为 44 和 33 个最频繁的特征标签。换句话说,我只为 44 个和 33 个最常见的特性类别中的每一个建立了一个二元变量,并将其余的视为噪声。我将设置变量的前 44 类 CAMEO_DEU_2015CAMEO_INTL_2015D19_LETZTER_KAUF_BRANCHE 的前 33 类。

我使用了前 44 和前 33 个最常见的类别,因为这样我可以保证 azdias 数据图的所有顶部组件都等于客户数据图的顶部组件。

主成分分析

由于我们有一个大型数据集,我们将执行降维。为此,我们需要执行特征缩放,以便主分量向量不会受到每个变量的缩放差异的影响。这种方法在处理基于距离的算法时非常重要,这就是我们的情况。

我使用了标准标度,将每个特征表示为 0,标准偏差等于 1。

缩放数据框后,我们可以应用降维。为了做到这一点,我使用了主成分方法,以便找到数据中最大方差的向量。首先,我使用了 dataframe 的所有功能。通过这样做,我们可以看到可变性的一般趋势。下图显示了每个组成部分解释的差异比率和解释的累积差异。

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

在查看了上面屏幕图中每个组件解释的差异后,我决定选择 215 个组件,它们占解释的差异的大约 89%。

k 均值聚类

我们可以绘制肘形曲线,以更好地确定要使用的聚类数。该方法获取 k(聚类)的值,并查看每个数据点到聚类中心的平均距离。我们可以注意到,该值随着 k 的增加而减小,我们选择 k 的数值,在该数值处,k 停止以显著的速率减小(肘部)。

我从使用 MiniBatchKMeans 开始,它是 KMeans 算法的变体,使用小批量来减少计算时间。这个算法的结果比标准的 KMeans 稍差,正因为如此,在确定了聚类数之后,我使用了常规的算法。

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

上面的肘形曲线显示了前 9 个集群的分数迅速降低。即使它在几个点上增加,在群集 11 之后,减少变得越来越不明显。正因为如此,我决定选择 11 作为聚类数。

比较普通人群和客户群

在将 PCA 和聚类模型构建到一般人群数据上之后,我们可以将相同的过程应用到客户数据上,并比较聚类分布。这个想法是为了找出公司最强大的客户群在哪里。换句话说,我们必须找出哪些分组代表过多或代表不足。那有什么帮助?好吧,让我们假设 15%的人被分配到一般人群的特定集群,25%的客户也“感觉”接近该集群的质心。这样的话,消费者的比例将会大于总人口的比例。这表明普通人群中的这些人可能是公司的目标受众。

下面的条形图显示了分配到 11 个集群的人员分布。基于前面的假设,我们可以注意到,代表性最强和代表性最弱的集群分别是集群编号 7 和 6。

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

为了了解这些集群的一些特征,我决定研究一些描述它们的“金融类型”的特征,并绘制它们的分布图。

特点:

  • HH_EINKOMMEN_SCORE :估计家庭净收入(较低=较高收入)
  • FINANZ_VORSORGER :准备好的个人财务类型(较低=较高财务类型)
  • FINANZ_ANLEGER :投资者个人理财类型(较低=较高理财类型)
  • FINANZ_HAUSBAUER :房屋所有者的个人金融类型(较低=较高金融类型)
  • 金融极简主义者:金融兴趣低的人(低=高金融类型)
  • FINANZ_SPARER :存钱者(较低=较高的金融类型)
  • LP_STATUS_GROB :社会地位(下层=下层)
  • KKK :购买力(低=高购买力)
  • 安雷德 _KZ :性别(1 男 2 女)

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

估计家庭净收入

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

准备好的个人财务类型

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

投资者的个人理财类型

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

房主的个人理财类型

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

那些经济利益低的人

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

存钱的人

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

社会地位

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

购买力

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

性别(1 名男性,2 名女性)

解释:

我们可以注意到的第一件事是,在客户群体中,有一个集群代表过多,也有一些集群代表不足。

我们还可以注意到,过表示数量最多的三个集群分别是集群 7集群 11集群 3 。正因为如此,这表明这些集群更有可能成为公司的目标受众。

另一方面,代表性最不足的三个群组是群组 1群组 6群组 8

为了更好地了解每个聚类的总体情况,我们必须检查每个特征的分布。在我的例子中,我选择了代表每种金融类型的特征。

  • HH_EINKOMMEN_SCORE :估计家庭净收入(较低=较高收入)
  • FINANZ_VORSORGER :准备好的个人财务类型(较低=较高财务类型)
  • FINANZ_ANLEGER :投资者个人理财类型(较低=较高理财类型)
  • FINANZ_HAUSBAUER :房屋所有者的个人金融类型(较低=较高金融类型)
  • 金融极简主义者:金融兴趣低的人(较低=较高的金融类型)
  • 金融储蓄者(较低=较高的金融类型)
  • LP_STATUS_GROB :社会地位(下层=下层)
  • KKK :购买力(低=高购买力)
  • 安瑞德 _KZ :性别(1 男 2 女)

拥有过度代表客户数据的集群由更有可能的个人组成:

  • 收入高
  • 做好充分准备
  • 成为投资者
  • 成为省钱达人
  • 购买力一般/很高
  • 男性

代表性不足的群体中的人更有可能:

  • 收入一般
  • 准备一般
  • 不投资他们的钱
  • 经济利益很低
  • 社会地位低而且非常低
  • 购买力一般
  • 不是男的就是女的

客户反应预测

既然我们已经发现了哪部分人更有可能成为邮购公司的客户,我们就可以建立一个监督模型来预测一个人是否会对营销活动做出反应。

“mailout.train”和 mailout.test 中的每一行都代表邮寄活动的目标个人。每个数据集包含大约 43 000 个数据行,训练数据集包括一个列“响应”,该列说明在活动之后某人是否成为公司的客户。

我首先使用 clean_df 函数来处理预处理部分的所有步骤。之后,我注意到数据集在类方面是不平衡的。事实上,98.76%的观察结果对应于没有对活动做出响应的人。因此,准确性度量似乎不是评估模型的好选择。我将使用 ROC AUC 指标,因为它不受不平衡的影响。

ROC AUC 指标

由于第二个模型是一个分类问题,我将使用 AUC-ROC 作为度量。ROC(受试者操作特征)代表概率曲线,它是通过绘制真阳性率(TPR)或召回率与假阳性率(1-特异性)的关系图来创建的。AUC 给出了可分离度。通过使用 AUC-ROC,我们能够知道我们的模型在分类这两类中的表现如何。AUC(曲线下面积)越高,模型预测活动成功的能力就越强(在我们的例子中)。

基线模型

我构建了一个函数,它接受要执行的模型或模型列表、用于馈送 GridSearchCV 和调整分类器的参数名称、X_train 数据、Y_train 数据和一个可选参数,以防我想要绘制条形图和比较不同的模型。

每当我建立一个分类模型时,我喜欢从使用逻辑回归算法的基本形式开始。起初,我删除了代表每个个体的 id 的列,得到了一个很差的结果。令人惊讶的是,在包含该行之后,我得到了 0.7 的结果,这对于基线模型来说是不错的。

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

构建其他模型

我在数据上测试了几个不同的监督学习模型。请注意,我没有对数据进行缩放,因为我最期待的是三个基于模型的更好的结果,正如我们所知,这些模型可以很好地处理非缩放数据。

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

梯度增强调谐

上面的柱状图表明,最有前途的分类器是 gradientBoosting。正因为如此,我选择了这个算法来调整使用。

我做了一个执行试验和错误调整,调整参数,如 n_estimators、loss、learning_rate、n_samples_split、min_samples_leaf、max_depth、max_features 和 subsample。

我最终得到了一个具有以下特征的模型:

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

根据模型的特征重要性:

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

结论

这个项目的主要目标是了解客户群,并预测一个人是否会对营销活动做出反应。这样,我们可以帮助一家德国邮购公司开发一种更有效的瞄准潜在客户的方法。

第一部分包括建立无监督模型,如 PCA 和 k-means 聚类,以执行客户细分。我们使用了 215 个组件和 11 个集群。应用这些方法后,我可以比较代表过多和代表不足的组别,并得出一些结论。例如,我注意到,被过度代表的群体中的大多数人(来自普通人群的人可能是公司的目标受众)收入高,是投资者,也是很好的存钱者。另一方面,普通人收入一般,不投资,购买力一般。

在第二部分,我建立了几个不同的监督学习模型,并对它们进行了比较。梯度推进算法给我提供了最好的 ROC AUC 分数,因此它被选择和调整。经过彻底的参数调整后,我在测试数据中得到了 0.78794 分。

这个项目真的很有挑战性,但是我从中学到了很多。我要感谢 Udacity 的所有支持(特别是我的导师 Mofetoluwa A .)和贝塔斯曼 Arvato Analytics 提供的所有这些数据。

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

使用数据科学进行营销分析

原文:https://towardsdatascience.com/using-data-science-for-marketing-analytics-8fc066c44238?source=collection_archive---------32-----------------------

B2B 与 B2C 的区别

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

资料来源:联合国人类住区规划署

“根据 QuanticMind 的数据,97%的领导者认为营销的未来取决于数字营销人员与基于机器学习的工具一起工作的方式。”——数字营销学院

与 CRM (B2B)活动合作

在 B2B 营销中,企业使用客户关系管理(CRM)软件,如 Salesforce、Oracle 和 SugarCRM,来记录在决策和采购中起关键作用的业务合作伙伴的联系人。这些数据可以在带有营销分析软件的机器学习环境中使用,以绘制针对特定市场的广告活动的有效性。

  • 销售渠道中包含的个性化事件,如呼出电话和电子邮件简讯,可以记录在图表中,以分析未来购买的结果。
  • 商展和促销活动的出席情况在侧重于销售周期的营销分析中以时间戳记录。

B2B 营销中的一大挑战是在销售中确定决策的归属,因为在一次购买中可能会有几个人参与。B2B 营销的个性化可以扩展到每个联系人 100 万个事件,从编程变量生成图表和分析。

参与电子商务(B2C)活动

在 B2C 营销分析中,将销售决策归咎于一个人并不困难。在 B2C 营销中,没有相同的机会来跟踪具有特定采购代理的商业组织和公司。以 B2C 为代表的零售消费市场要广阔得多,是由电商平台需求定义的。

  • 在线商店通过各种形式的 cookies 跟踪网站和移动应用程序上的消费者销售渠道,其中最大的企业网站通常在其平台上支持 1 亿至 2.5 亿注册用户。
  • 这导致了来自由机器学习和数据科学实时驱动的自动化营销分析的电子商务数据的个性化的潜力。
  • 企业跟踪与搜索引擎流量、回头客、PPC 广告和直接电子邮件活动相关的变量,以确定广告在销售周期中的有效性。
  • 这些可变事件还可以通过营销分析软件绘制限时销售和假日促销的效果图。

计算营销活动的 ROMI 分析

营销投资回报率(ROMI)是一个 OPEX 模型,比较非资本支出与收益。该术语由 Guy Powell 于 2002 年创造,用于评估通过投资昂贵的商业广告来建立长期品牌形象、客户忠诚度和商誉的营销活动。 ROMI 是根据与收入、利润和计划支出变化相关的简单公式计算出来的。

  • 鲍威尔认出了两种 ROMI,“模糊的”和“清晰的”。
  • 模糊 ROMI 试图通过对顾客反馈中定性价值的统计测量来估计品牌忠诚度和商誉。
  • 90%的营销分析使用夏普 ROMI 来跟踪商业周期中的总项目支出与新收入。
  • 夏普 ROMI 指标通过机器学习和数据科学来评估 B2B 和 B2C 广告的有效性。

“大数据”存储库通过机器学习算法进行过滤,以帮助决策者通过图表分析来辨别模式,从而预测类似的成功。理想情况是创建一个经过培训的实时数据科学模型,根据客户的历史喜好和偏好向客户部署定制内容和显示。说明性和描述性模型都有好处。

使用描述性模型

描述性模型从电子商务和 CRM 资源中过滤“大数据”,从后视镜中评估 ROMI,即通过对过去活动的分析。

  • 营销分析软件对销售周期中的近期活动进行优先排序,并应每天在数据科学笔记本中进行重新培训。
  • 比较信息包括营销活动、结果和成本,作为跨销售渠道成功的变量。

使用预测模型

营销分析中的预测模型基于实时反馈,依赖于实时数据。来自客户和顾客的这些信息必须存储在一个可靠、安全和快速的数据库中。

  • 营销分析的预测模型有助于决策者辨别如何改变广告活动内容,以符合消费者的口味和趋势。
  • 预测模型在 ROMI 阶段开发,通过产品端和客户端推荐引擎优化广告活动。

这些方法可以帮助电商平台和店铺避免购物车被顾客抛弃。在由数据科学驱动的营销分析中,随着时间的推移,你更新模型越多,结果就越智能。

优化营销分析的成功

为了通过机器学习在广告活动的营销分析中取得成功,企业必须区分现有客户、新业务和续订。

  • 在电子商务中,大多数平台收入来自重复交易,这可以通过向客户推荐产品来创建个性化显示进行优化。
  • 在为数据科学中的指标和分析准备数据时,企业需要将客户事件变量收集到单个流中,然后标记每个事件,并为平台大规模聚合信息。

香槟图可用于确定数据分析中何时出现路径行为。

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

来源:作者

模式拟合显示了人们在购买产品之前是如何消费产品评价的。

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

来源:作者

结论

  1. **获取数据。**要有耐心;这需要几周时间。获得所有许可以找出所有系统的位置并从那里出发需要很多时间。
  • 获得所有系统的访问权限
  • 就单一时间戳方法达成一致
  • 就“成功”对销售的意义达成一致(时间、内容、地点、实体)
  • 查找所有中点系统
  • 就组织活动模式达成一致
  • 每个人/组织/销售、产品系列/销售活动的单数据流数据

2.**使用云数据库:**不要将数据存储在平面文件或笔记本电脑中。计划规模,即使你只是踢踢轮胎。我真的很喜欢雪花,因为它很快,而且是基于云的。因此,如果你想把一个项目从欧洲转移到美国进行分析,这是可行的。如果它在您的数据中心,那么它穿越海洋的速度可能会慢 50-100 倍。

  • 重新组织和规范化数据
  • 输入时将其匿名,但留下一个解码系统(当人们钻研“证据”时)
  • 规划大规模和长期的全球输入/输出—数据是一场流动的盛宴
  • 为将来的“为什么/什么/何时”查询启用—添加一些帮助器列和表
  • 将其连接到快速、可扩展的数据科学笔记本电脑

附加资源

  • 这篇博客摘自 Grover Righter 的网络研讨会“使用数据科学进行营销分析”。点击此处观看整个网络研讨会
  • Zepl 的数据科学平台允许数据科学家和分析师快速构建 Python、R、Scala 和 SQL 模型的原型,为他们的营销分析用例创建丰富的视觉效果。在 www.zepl.com 免费试用
  • 雪花通过为所有数据工作负载提供可扩展、灵活且安全的云数据平台,帮助营销分析团队从其数据中获取更多商业价值。在 www.snowflake.com免费试用

作者

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

Grover Righter 是 Zepl 的首席数据科学家。他专注于基于科学的营销项目,并运行着一个衡量电子邮件、搜索引擎优化和社交媒体有效性的分析引擎背板。他曾在各大知名营销自动化平台上工作,包括 Eloqua、Marketo、Pardot、HubSpot 和 Leadformix。

Grover 自 1981 年以来一直在高科技领域工作。他最初是一名数学家和设计工程师,在 RMS 公司、美国电话电报公司公司、Unisys 公司和 Novell 公司的主要技术的设计和开发中发挥了重要作用。但每次格罗弗制造出一个产品,他都会立即被招募去“销售它”,而不管组织内是否存在另一个销售团队。最终,格罗弗用完了他一生中作为一名工程师参加销售会议的机会,转而从事营销工作。

现在使用数据科学技能:文本可读性分析

原文:https://towardsdatascience.com/using-data-science-skills-now-text-readability-analysis-c4c4641f5875?source=collection_archive---------34-----------------------

如何使用 python 识别阅读水平分数

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

图片来自皮克斯拜

当营销效果分析被开发时,内容阅读水平经常被忽视。这应该是分析的一部分还是你的模型的一部分?如果你认为是,你会如何轻松地将不同的文档或创意与当前的阅读水平联系起来?今天我将回顾如何使用 python 进行阅读水平分析并创建报告。我们将把英语作为主要语言。同样的技术可以用来确定你的其他内容的可读性,比如中型博客。

为什么可读性很重要

无论你是想让你的客户了解你的新服务的好处,还是想让他们了解你的医疗实践,你都需要你的受众阅读并理解这些内容。太难了,你的读者就放弃你了。太简单了,读者会觉得你在居高临下地和他们说话。你不仅想让你的读者舒服地阅读你的文本,这也是搜索引擎优化的一个关键考虑因素。

你的读者是谁?

了解和研究你的典型读者是很重要的。如果你需要专注于一个领域开始,考虑教育水平。估计你的读者受教育的年数,然后减去三到五年来估计平均阅读水平。

如果你不能完全确定听众的教育水平,该怎么办?一些行业经验法则会有所帮助。

得分在 4 到 6 年级的书面文本通常被认为是“容易阅读的”如果你试图简单地为大众解释复杂的概念,这是你的范围。想想一般的博客和教育材料。

得分为 7 到 9 分的书面材料被认为是一般难度。这些读者期待一些更复杂的词汇。他们认为他们可能需要重读一段文字才能完全理解。操作指南文章可能属于这一范围。

任何十年级及以上的课文都被认为是非常难的。这应该留给白皮书、技术写作或文学作品,当你确定你的读者“准备好”和/或期待它的时候。你的读者在阅读和吸收你的内容上花费了相当多的精力。你知道当你读一本让你精疲力尽的书时?这是那个范围。

有哪些局限性?

当心标题、列表和其他“非句子”这些会影响你的分数。此外,根据您使用的指标,等级级别可能会有所不同。这些分数作为分析文本的一般起点。您可以确定哪些内容需要进一步检查。

代码

许多商业产品会扫描你的内容,并提供可读性指标。当这些产品对您不可用或者有成百上千的文档时,您将需要创建一个脚本来自动化这个过程。

我这里有一个脚本,它执行常见的自动化任务。它读入一个文件夹中的所有文本文档,然后给它们打分。有关如何在多个文件夹和数据源中抓取文本的更多信息,请参见这篇相关文章。

[## 现在使用数据科学技能:文本抓取

有一个繁琐的文档搜索任务?用 python 通过 5 个步骤实现自动化。

towardsdatascience.com](/using-data-science-skills-now-text-scraping-8847ca4825fd)

您可以在分析中使用几个软件包,包括 textstat可读性。在这个例子中,我将使用 textstat。使用起来很简单。

import textstat  # [https://pypi.org/project/textstat/](https://pypi.org/project/textstat/)
import os
import glob       # using to read in many files
import docx2txt   # because I'm reading in word docs# where is the folder with your content?
folderPath = '<path to your top folder>\\'# I want to search in all of the folders, so I set recursive=True
docs=[]
docs = glob.glob(folderPath + '/**/*.txt',recursive=True)
docs.extend(glob.glob(folderPath + '/**/*.docx',recursive=True))
#... keep adding whatever types you needprint(docs)# the language is English by default so no need to set the language# Loop through my docs
for doc in docs:
    if os.path.isfile(doc):
        text = docx2txt.process(os.path.join(folderPath,doc))

        print('Document:                     ' + doc)
        print('Flesch Reading Ease:          ' + str(textstat.flesch_reading_ease(text)))
        print('Smog Index:                   ' + str(textstat.smog_index(text)))
        print('Flesch Kincaid Grade:         ' + str(textstat.flesch_kincaid_grade(text)))
        print('Coleman Liau Index:           ' + str(textstat.coleman_liau_index(text)))
        print('Automated Readability Index:  ' + str(textstat.automated_readability_index(text)))
        print('Dale Chall Readability Score: ' + str(textstat.dale_chall_readability_score(text)))
        print('Difficult Words:              ' + str(textstat.difficult_words(text)))
        print('Linsear Write Formula:        ' + str(textstat.linsear_write_formula(text)))
        print('Gunning Fog:                  ' + str(textstat.gunning_fog(text)))
        print('Text Standard:                ' + str(textstat.text_standard(text)))
        print('*********************************************************************************')"""Flesch-Kincaid Grade Level = This is a grade formula in that a score of 9.3 means that a ninth grader would be able to read the document""""""Gunning Fog = This is a grade formula in that a score of 9.3 means that a ninth grader would be able to read the document.""""""SMOG - for 30 sentences or more  =This is a grade formula in that a score of 9.3 means that a ninth grader would be able to read the document.""""""Automated Readability Index = Returns the ARI (Automated Readability Index) which outputs a number that approximates the grade level needed to comprehend the text."""""" Coleman Liau Index = Returns the grade level of the text using the Coleman-Liau Formula.""""""Linsear = Returns the grade level using the Linsear Write Formula."""""" Dale Chall = Different from other tests, since it uses a lookup table of the most commonly used 3000 English words. Thus it returns the grade level using the New Dale-Chall Formula."""

我的四个文档的结果。首先是这个博客。第二个是这个博客,去掉了链接。第三篇是 USAToday 的文章,第四篇是去掉了页眉和照片的 USAToday 文章。

Document:                     C:...readability\sampleblog.docx
Flesch Reading Ease:          56.59  (Fairly Difficult)
Smog Index:                   13.8
Flesch Kincaid Grade:         11.1
Coleman Liau Index:           11.9
Automated Readability Index:  14.1
Dale Chall Readability Score: 7.71 (average 9th or 10th-grade student)
Difficult Words:              124
Linsear Write Formula:        10.833333333333334
Gunning Fog:                  12.86
Text Standard:                10th and 11th grade
*********************************************************************************
Document:                     C:...readability\sampleblognolinks.docx
Flesch Reading Ease:          58.52 (Fairly Difficult)
Smog Index:                   12.9
Flesch Kincaid Grade:         10.3
Coleman Liau Index:           10.5
Automated Readability Index:  12.2
Dale Chall Readability Score: 7.48
Difficult Words:              101
Linsear Write Formula:        10.833333333333334
Gunning Fog:                  11.95
Text Standard:                10th and 11th grade
*********************************************************************************
Document:                     C:...readability\usatoday article no header photos.docx
Flesch Reading Ease:          21.47 (Very Confusing)
Smog Index:                   19.8
Flesch Kincaid Grade:         24.6
Coleman Liau Index:           13.19
Automated Readability Index:  32.2
Dale Chall Readability Score: 9.49
Difficult Words:              317
Linsear Write Formula:        16.25
Gunning Fog:                  27.01
Text Standard:                24th and 25th grade
*********************************************************************************
Document:                     C:...\readability\usatoday article.docx
Flesch Reading Ease:          21.47 (Very Confusing)
Smog Index:                   19.8
Flesch Kincaid Grade:         24.6
Coleman Liau Index:           13.19
Automated Readability Index:  32.2
Dale Chall Readability Score: 9.49
Difficult Words:              317
Linsear Write Formula:        16.25
Gunning Fog:                  27.01
Text Standard:                24th and 25th grade
*********************************************************************************

对于这个博客,分数受到移除链接的影响。USAToday 的文章没有受到移除标题和照片的影响。

参考资料和资源

  • **全国成人识字调查。**全国成人识字调查(NALS)显示了不同年龄、种族/民族和健康状况的人的识字水平。如果你知道你的读者的人口统计数据,你可以利用这次调查的数据来估计平均阅读水平。
  • 社论:避免稿件可读性差的循证指南
  • 卡格尔:

2019 年有一个有趣的比赛,我应用可读性分数来改善洛杉矶市的招聘信息。你可以看到不同的竞争者使用不同的技术。

[## 洛杉矶——可读性和推广

使用 Kaggle 笔记本探索和运行机器学习代码|使用来自多个数据源的数据

www.kaggle.com](https://www.kaggle.com/silverfoxdss/city-of-la-readability-and-promotion-nudges)

结论

文本可读性是一个非常有趣的主题。了解谁是你的受众以及他们如何消费你的内容是非常重要的。忽略这一信息,你可能不会击中目标。

现在使用数据科学技能:文本抓取

原文:https://towardsdatascience.com/using-data-science-skills-now-text-scraping-8847ca4825fd?source=collection_archive---------45-----------------------

有一个繁琐的文档搜索任务?用 python 通过 5 个简单的步骤实现自动化。

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

图片来自皮克斯拜

我们都被赋予了任务,而这些任务在本质上是乏味的。它们是手动的,很烦人。如果这是一个一劳永逸的项目,我们就努力完成它。有时候你知道将来会再次被要求。这时,您只需通过 python 脚本自动完成任务,这样就不会再有人受苦了。这是其中的一个例子。

最近,我被要求提供我们的数据分析师团队查询的每个数据库表、视图和列名的列表。十年,在此期间可能有 30 个数据分析师,在不同的位置有数百个不同的文档。每周都会添加新的表和列。我制作的任何列表都会频繁更改。这需要某种自动化。

我不可能手动查看成千上万的文档来寻找 SQL。那是疯狂的谈话!

我创建了一个可重复的 python 脚本。它也可以适用于不同的情况,如下所示。

  • 确定包含特定客户引用的每个文档。
  • 指出每一份提及某一法院案例或法律的文件。
  • 客户更改了法定名称,需要更新哪些文件?
  • 识别所有文档中的名字。

我已经确定了完成这项任务的五个步骤

1.你要去哪里找?

确定所有需要搜索的文件共享、代码库和内部网站点。

共享文件共享

确定团队使用的所有文件共享。如果人们把文件藏在他们的本地设备上,让他们把它们转储到一个共享的驱动器文件夹中。

Git/Bitbucket

决定是否要将 Git 仓库克隆到一个文件夹中来抓取 Git 本身。我只需要搜索某个主要的代码分支,所以我只是将它克隆到一个文件夹中。您甚至可以从您的开发工作中获得代码的本地克隆。

内部网站点

决定你将如何处理内部或外部网站。如果你使用外部网站,你可能需要先收集并转储你的发现。内部网站也是如此,尽管你可以使用 Sharepoint 或 Confluence APIs。在我的例子中,我对代码本身感兴趣,所以我不需要参考我们内部网站上的文档。

2.您想搜索什么类型的文件?

我在寻找运行的 SQL 和脚本来提取数据。我把搜索范围限制在。txt,。SQL,。hql,。您可能有其他类型的文件来拉。

3.你需要找到什么?

您可能在寻找一个特定的单词或术语。在我的例子中,我不得不寻找许多术语。您需要创建一个这些术语的列表。因为我没有所有可能的表、视图和列的列表,所以我必须生成这个列表。我将使用 DB2 作为例子:

4.创建你的单词表。

-- Generate my word list [DB2](https://www.ibm.com/support/knowledgecenter/SSEPEK_11.0.0/cattab/src/tpc/db2z_catalogtablesintro.html)
-- List of Tables in my set of databases
SELECT DISTINCT NAME , 'TABLE' AS TYPE, '' AS STATEMENT
FROM SYSIBM.SYSTABLES
WHERE CREATOR IN (<list of my databases>)UNION-- List of Columns in my set of databases
SELECT DISTINCT NAME , 'COLUMN' AS TYPE, '' AS STATEMENT
FROM SYSIBM.SYSTABLES
WHERE CREATOR IN (<list of my databases>)UNION-- List of Views in my set of databases, 
-- include statements for complex views
SELECT DISTINCT NAME , 'VIEW' AS TYPE, STATEMENT
FROM SYSIBM.SYSTABLES
WHERE CREATOR IN (<list of my databases>)
;

这里有一些您可以从中提取的其他数据库目录表。

-- SQLServer
SELECT NAME , 'TABLE' AS TYPE
FROM SYS.OBJECTS
WHERE TYPE_DESC = 'USER_TABLE'
UNION...SELECT NAME, 'COLUMN' AS TYPE FROM SYS.COLUMNS-- Oracle
SELECT .... sys.dba_tables and sys.dba_tab_columns-- [Glue Catalog](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html#Glue.Client.get_databases)
this technique uses boto3 and get_database, get_tables (contains column info)

一旦你创建了一个单词列表,你就可以开始提取文档并扫描它们。

5.创建代码以生成匹配文件。

我在下面为这个例子创建了这个通用代码。我知道嵌套循环不是最有效的方法,但它对我的任务来说很好(与几百个文档相比,50k+单词)。

# import required packages
import pandas as pd
import glob
import os
from string import punctuation
import re
import sys# where are you searching?
folderPath = '<path to your top folder>\\'# read in all of the documents 
# I want to search in all of the folders, so I set recursive=Truedocs = glob.glob(folderPath + '/**/*.txt',recursive=True)
docs.extend(glob.glob(folderPath + '/**/*.sql',recursive=True)
docs.extend(glob.glob(folderPath + '/**/*.py',recursive=True)
#... keep adding whatever types you need# I need to remove punctuation, particularly the '.' separator between the database name and the table name
punctuation = '''!()-;:\,./?@%'''# Read in the word list that has been created
word_df = pd.read_csv('mywordlist.csv')
word_list = []
word_list = word_df['NAME'].tolist()# Create the dataframe to hold the matching words 
# and the file found in (optional)
matched_words = pd.DataFrame(columns = ['NAME', 'FILE'])"""Loop through all the files , remove punctuationn, split each line into elements and match the elements to the list of words"""
for doc in docs:
    if os.path.isfile(doc):
        f=open(os.path.join(folderPath,doc), 'r')
        for line in f:
            for ele in line:
                if ele in punctuation:
                    line = line.replace(ele, " ")
            line_list = []
            line_list = line.split() for x in line_list:
                matches = matches.append({'NAME': str(x), 'FILE': doc}, ignore_index=True# write my output file
matches.to_csv('matches.csv')

输出提供了匹配单词的列表以及保存匹配单词的文件名/位置。

额外的好处是这个列表包含了这个单词的每个实例。如果需要计数,可以很容易地将该逻辑应用到这个文件中。

结论

这个简单的脚本代替了一小时又一小时的苦差事。当六个月后有人再次提出这个要求时,很容易被复制。

采取措施消除你工作日中的苦差事。完全值得。

欢迎在下面分享你的代码片段。一如既往,有许多不同的方法来编码解决方案;我的样本只是其中之一。这可能不是最有效或最好的,但这种方法是可行的。

利用数据科学分析足球运动员的表现

原文:https://towardsdatascience.com/using-data-science-to-analyse-player-performance-in-football-4dd04e579cfa?source=collection_archive---------9-----------------------

最常见事件类型的分解技巧

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

丹尼尔·诺林Unsplash 上拍摄的照片

不足为奇的是,传球是足球(或者对任何感兴趣的美国人来说是英式足球)中最常见的事件。一场好的传球比赛对足球的成功至关重要,因为它能让你通过控球来控制比赛,节省能量,从而给你带来更好的得分机会。传球是指使用良好的技术快速、准确、恰当地传球,同时在正确的时间做出正确的决定。

因此,不应该低估分析该领域中玩家表现的重要性。但是我们如何量化一个球员的传球技术呢?

传统的衡量标准是完成的通过次数。然而,使用传球是否完成的二元标签忽略了球员之间传球风格的巨大差异,也没有考虑到球队的流动。

我们知道这种传球类型的变化是存在的,因为专家和评论员讨论它的方式,“伟大的传球”,“侵略性的传球”,“可怜的球”。

使用二进制标签时,这些描述符会被完全忽略。

这个博客建立了一个预期传递模型来改变这种看法。我使用一个客观变量来衡量连续谱上的传球质量,根据之前的传球数据来分析任何传球所涉及的风险水平。对于那些对完整代码感兴趣的人,(包括所有的可视化),请随时查看这里的。

数据

我用来建立这个预期传球模型的数据是基于 20 支球队,打了 380 场比赛,总共尝试了 358,783 次传球。

初始变量包括:

  • 球队、比赛、球员、主场、客场标识符
  • 主客场全职比分
  • 半,分,秒
  • 通过的结果(1 或 0)
  • 通行证的起点 x 和 y、终点 x 和 y 的位置标识符
  • 如果传球是正常传球,或者是头球、传中、角球、抛球、任意球

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

作者图片

坐标假设球场为 105 米 x68 米,并且已经调整,从进攻方的角度来看,X 在进攻方向从 0-105 度,Y 从右到左。例如,从(x,y) = (95,15)开始的传球在对方禁区的右侧开始。

新增功能

尽管我们可以将原始数据输入到机器学习中,但特征工程是转换数据以产生与场景、问题和领域相关的特征的过程。在这种情况下,我设计的功能围绕两个要点——球的移动和团队表现:

  • 利用毕达哥拉斯定理计算传球距离。
  • 每场比赛的主客场位置指标。
  • 向前或向后为传球方向。
  • 对于目前控球的队伍来说,他们的比赛结果。(赢、平、输)
  • 将球场分成 9 个大小相等的方块,标为 1-9

可能会有更多的功能可以被包括在内,所以如果你有任何补充,请随时发送给我!

初步探索性数据分析

探索性数据分析是指对数据进行初步调查的过程,以便在汇总统计数据和图表的帮助下发现模式、发现异常并检查假设。

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

通过距离完成(图片作者提供)

该图显示,很大比例的传球在非常低的距离(小于 5 米)处失败。这可能表明在传球的早期阶段被拦截,而不是非受迫性失误。在 15 到 30 米之间,完成的传球比失败的传球多得多,在 30 米之后,完成传球的比例急剧下降,而失败传球开始趋于平稳。

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

通过 X 年底完成(图片由作者提供)

这第二个视觉化显示传球完成也受球场上传球结束位置的影响。随着球进一步向对方球门移动,传球失误的比率会增加。这个柱状图也向我们展示了大部分的传球,完成的或者失败的,都是在中场结束的。

也许有趣的是,当看一遍从哪里开始时,完成率的这种差异并没有延续到相同的数量级。

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

通过开始完成 X (图片作者)

大多数“特殊”传球类型,如角球和任意球,完成率比普通传球类型低。

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

按传递类型完成传递(图片由作者提供)

无监督学习

无监督学习是一种机器学习,它在最少人工监督的情况下在数据集中寻找以前未检测到的模式。在这种情况下,我使用它作为一种自组织类型来了解各种不同的传递类型,首先删除传递是否完成,因为我不希望传递类型在成功时聚集,并避免数据在管道中进一步泄漏。

K- means 聚类是我使用的无监督学习算法。它遵循一个简单的程序,将给定的数据集分类成一些集群。与其他集群技术相比,它的伸缩性很好,工作速度也很快。这很容易解释。我选择了 22 个集群,目的是让一个团队中的每个球员都有 2 次传球,虽然它显示了球在球场上的一般运动,但更多的集群将提供关于传球通常如何进行的更详细的视图。下面显示了通过平均起点和终点的集群。

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

K 表示使用 22 个聚类进行聚类(图片由作者提供)

这些聚类类别被用作随后的监督学习算法的预测器。

监督学习

监督学习的定义是使用标记数据集来训练算法,以对数据进行分类或准确预测结果。在这种情况下,我们训练一个机器学习算法,以及训练数据集中是否完成了一次通过,并从测试数据集中删除通过结果,看看它可以预测一次通过是否完成的程度。

为了测试算法的性能,标准的做法是预先生成一个虚拟模型。在这种情况下,虚拟模型只是预测所有通道都将完成。在测试集中,完成了 71,001 次通过,18,695 次失败。每次选择“pass complete ”,精确度为 79.3% 。这几乎都是由于高日志丢失造成的噪声。

在尝试了多种不同的方法之后,我选择了 XGBoost。XGBoost 是一种算法,最近一直在结构化数据的应用机器学习和 Kaggle 竞争中占据主导地位。使用超参数调整,产生了以下混淆矩阵:

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

XGBoost 混淆矩阵(图片由作者提供)

它打破了模型的预测和实际发生的事情,彼此并列。在这里,我们可以看到,79.3%的数据集已完成通过。该算法预测 75%已完成通过。

20.7%未通过,模型预测 13%会通过。

该混淆矩阵可用于计算以下指标:

  • 准确度得分: 0.88
  • 精度分数: 0.9
  • 召回分数: 0.95
  • F1 得分: 0.92
  • 测井曲线损失: 0.28
  • AUC : 0.92

所有这些都大大优于基准假人模型。

通过风险和玩家分析

找到一个相对可靠的算法来预测是否通过(1 或 0),我将二进制输出转换为通过的概率,XGBoost 可以为我提供这个概率。

然后,我定义了度量传递风险。如果模型预测传球发生的概率为 0.8,并且完成了,我给球员传球得分加 0.2。如果他们传球没有完成,我给该球员传球得分减 0.8 分。然后,我对球员的传球次数进行平均,以定义平均风险克服分数。这个分数能够比较球员在传球中所冒的风险和克服的风险。

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

玩家平均风险战胜(图片由作者提供)

拥有相似的传球组合的球员,很可能在球场上踢相同或相似的位置。这里我们可以看到,与风格类似的玩家相比,玩家 263 的风险克服得分高于平均水平。

然而,在足球比赛中,我们不仅仅关心平均水平,稳定性也是分析球员表现的关键。

虽然与其他球员相比,球员 263 的传球表现略高于平均水平,但他比其他球员尝试更多的传球。这导致他在与一组类似的同龄人相比时被列为最优秀的传球手之一。像这样观察球员的表现可以让我们寻找其他有价值的替代者。玩家 409 具有非常高的平均风险克服率,但很少传球,他可能被低估或低估。

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

通过风险克服的次数(图片由作者提供)

这为教练提供了建立球队和球员替补席的机会,这些球员在统计上会比他们在转会市场上的价格更好,并识别表现不佳的球员。

考虑到克服风险和传球次数都是考察球员表现时要考虑的重要指标,将它们相乘可以得到一个总传球得分,从而可以进行进一步分析。在这里,我们可以看到 263 号球员在所有排名前 40 的球员中排名第二。

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

通过总分排名前 40 的选手(图片由作者提供)

这一观点使得进一步的发现成为可能,通过这些发现,教练可以从低水平的球队中识别出高水平的球员。可能被降级的球队,或者陷入财务困境的球队,甚至是其他联赛的顶级球员,都有可能被低价收购。

结论

我们可以使用数据科学来分析球员在传球中能够克服多少风险。为足球比赛中发生的所有行为建立类似的衡量标准是可能的——无论是铲球、射门还是控球。这有助于更深入地了解玩家和团队的表现(包括你自己和对手的表现),有助于提高表现并最终提高游戏成绩。

在团队中使用数据科学和机器学习并不新鲜,事实上,体育界完全充斥着统计数据。了解新的方法和使用新的技术来利用体育界存在的大量数据,可以帮助团队和教练超越他们的对手,不管是什么运动。

限制

上述工作有一个明显的局限性;也就是说,通过按风险克服程度对玩家进行排名,我们假设风险是好的。通行证里没有价值的概念,或者说报酬,所以很难建立风险/报酬模型。传球的价值在于它有可能带来机会或者把球带到对手的地盘,这一点很重要。不幸的是,这个数据集只包括传球结果的细节,然而,有了更多关于射门和进球的详细数据,就有可能开始建立这种模型。

进一步的工作

有了这个比较整个联盟球员的用例,一个高层次的模型是有意义的。然而,单个团队和球员可以玩得很不一样。进一步的工作可能包括建立模型来分析单个团队的表现,或者甚至在单个球员层面上进行更精细的分析。这有助于发现你自己球队的弱点,或者提供机会利用对手和特定球员的打法。这一点的开头详述如下。

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

团队级别的聚类(图片由作者提供)

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

玩家级别的聚类(图片由作者提供)

关于我

我希望你喜欢我的作品!我会很感激通过这里对它的任何反馈。我是一名数据科学家,热衷于处理体育数据。作为一名前职业赌徒,我对体育分析和预测有着独特的见解。我目前正在寻找进入体育数据行业,如果你想接触,请前往我的 LinkedIn!

[## 卡特 B. -数据科学家-自由职业者,个体经营者| LinkedIn

随着博客成功地发表了走向数据科学和分析 Vidhya,我目前正在寻找数据科学…

www.linkedin.com](https://www.linkedin.com/in/carterbouley/)

参考文献

保罗·鲍尔、赫克托·鲁伊斯、魏新雨和帕特里克·露西。2017.并非所有传球都是平等的:从跟踪数据客观地测量足球传球的风险和回报。《第 23 届 ACM SIGKDD 知识发现和数据挖掘国际会议论文集》(KDD '17)。计算机械协会,纽约,纽约州,美国。DOI:https://DOI . org/10.1145/3097983.3098051

用熊猫和 Dash 重新思考篮球比赛

原文:https://towardsdatascience.com/using-data-science-to-determine-basketball-is-32-shooting-32-opponents-shooting-20-turnovers-741f34521f0e?source=collection_archive---------58-----------------------

得分尝试树框架确定 NBA 篮球是 32%投篮,32%对手投篮,20%失误,16%篮板

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

得分尝试树(全互动写起)

2019 年 5 月 12 日,猛龙-76 人,第七场,第四节,还剩 4 秒,比赛平手。我想我们都记得接下来发生了什么。现在被称为“一击”。NBA 历史上最重要的季后赛投篮之一。

人们可能不记得的是,那晚投篮对猛龙队不利。

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

猛龙-76 人投篮对比(2019 . 5 . 12)

总的来说,76 人的投篮明显比猛龙好。但是猛龙队以 92 比 90 赢得了比赛。发生了什么事?在一场财产交替的运动中,猛龙队怎么可能赢得那场比赛?

猛龙出手比 76 人多。如果一支球队比他们的对手更频繁地错失第二次机会,或者迫使失误比他们允许的更多,那么他们在导致他们获得超过对手的投篮机会的领域表现良好。利用评分尝试树框架,我们能够生成这种可视化。

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

猛龙-76 人投篮尝试和解(2019 年 5 月 12 日)

那么什么是评分尝试树框架呢?它遵循篮球比赛是一系列树的前提。更具体地说,得分尝试树,每次出现失误、得分或篮板时都会重置。它比每次控球的观点更深入一些,因为进攻篮板有可能在一次控球中出现多次得分尝试。

利用熊猫,我能够从 2018-2019 赛季的比赛数据中收集比赛数据,以符合这一模型。我从大数据球中以 csv 格式提取数据。然后,我开始开发一个标准流程,将一个接一个的数据转换到我的模型中。这主要包括删除与我的分析不相关的数据,如记录暂停、替换、犯规、死球篮板的数据,然后开发检查、修复和模型解释的流程。

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

收集详细数据

该模型的目的是定义投篮、篮板和失误指标,以此来制定每球得分的预期指标。你最终会得到下面的框架。

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

得分尝试树(链接)

我能够让 2018-2019 赛季的所有比赛都符合解释篮球的公式。本质上,该模型使用计算出的 EPos 和拥有数字正确地计算出了所有游戏的最终分数。

回到猛龙-76 人,我们可以看到他们在 4 得分尝试树指标中的表现。猛龙队在失误和篮板方面明显优于 76 人队。

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

猛龙-76 人 4 项指标对比(2019 年 5 月 12 日)

根据这个框架,我们知道每场得分( EPos )是 4 个指标的乘积。我注意到,如果我移除了 m% ,剩余的指标仍然在线性回归模型中以 0.995 的 R 预测 EPos 。为了这个练习的目的,我发现最直观的方法就是将射击视为 EShot

因为篮球是在两端进行的,所以看一下净 EPos、EPos 和 opp EPos 的区别(即对手的 EPos)是有意义的。如果你对 t%oreb% 采取相同的净方法,你会得到代表投篮、对手投篮、失误和篮板的 4 个因素,分别符合净 EPos 的 32%、32%、20%和 16%。

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

四因素回归分析

我将这些因素标准化,使它们在数量上完全相同,这样我们就可以使用加权平均值来计算整体因素。我把这些 zbo 分数叫做 T29,它们本质上就像 2K 等级。我有不同的 zbo 分数参数用于游戏内和多游戏累积结果,以允许两个预期数据集以 75 为中心的友好分布。

回到猛龙和 76 人的比赛,我们可以看到两支球队在比赛中各自的表现。

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

猛龙-76 人比赛中 zbo 得分(2019 年 5 月 12 日)

给你。猛禽队在失误和篮板方面的强劲表现足以推动他们战胜 76 人队,尽管他们的投篮很糟糕。

我运行了整个 2018-2019 常规赛的因素,并为每个球队生成了下面的 zbo 分数

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

2018–2019 常规赛 zbo 得分

值得注意的是,我的赛季末净 EPos 和下面的总体 zbo 分别符合 0.998 和 0.995 的实际赛季积分差。

就是这样。我希望下次你考虑一个球队或球员时,你会考虑他们如何影响所有四个类别,然后相应地评估他们的整体价值。

如果您对本文有任何疑问,请随时通过 david@belleville.app 与我联系。同样,在我的文章中也有更多信息,这里也有。

蒙特利尔的公寓租赁危机分析

原文:https://towardsdatascience.com/using-data-science-to-look-at-montreals-apartment-rental-crisis-cffea9ee6b00?source=collection_archive---------47-----------------------

网页抓取、数据清理、数据可视化等等

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

来源

在蒙特利尔找一套公寓比以往任何时候都难,当前的危机当然也没有帮助。

2020 年 1 月,《蒙特利尔公报》估计,该市的空置率约为 1.5%(15 年来最低),租金价格在一年内上涨了约 3.6%。

随着 7 月 1 日(城市正式搬迁日)的到来,我决定看看目前的租赁市场,看看情况到底有多糟糕。

获取数据

为了做到这一点,我从寻找蒙特利尔公寓的主要网站 Kijiji 上搜集了(使用 BeautifulSoup)数据。更准确地说,我搜集了大约 3500 份公寓出租清单。对于每一个列表,我提取了价格、公寓的大小和离市中心的距离。我不得不使用离市中心的距离(最多 10 公里),因为大多数公寓的实际地址是不可用的。然而,离市中心的距离应该是一个很好的指标,表明公寓是否在理想的位置。对于熟悉这座城市的人来说,这是一张 10 公里半径的地图:

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

来源:使用 mapdevelopers.com 制作的地图

下面是用于从 Kijiji 获取数据并创建起始数据帧的代码:

如上所述,只有前 80 页的网站被刮,只有相对较新的清单。此外,睡眠功能用于通过暂停一段时间来控制循环的速率。我这样做是因为向网站发送太多太频繁的请求会导致网站的服务器关闭或网站变得太慢。

这是我此时的数据帧快照:

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

现在我有了数据,它需要被清理。

清理数据

清理数据分为两步。首先,我想只保留必要的信息。这意味着公寓的大小、离市中心的距离和价格是一个简单的数字(不需要其他符号或字符)。

第二,我删除了没有价格的公寓或没有实际价格的公寓(有些列为每月 1 美元,有些列为每月 10,000 美元,等等)。).

下面是用来清理数据帧的代码。

这里有个小提示:对于那些不知道的人,我们在蒙特利尔用一种奇怪的尺度来描述公寓的大小。

1 1/2 :一个房间,一个独立卫生间。更广为人知的是工作室。

3 1/2 :包括一个独特的客厅、卧室和厨房。更广为人知的是一居室公寓。

之后每增加一个房间,通常是一间卧室。所以 4 1/2 是两居室的公寓。

这是最终清理后的数据框的快照,它包含了 5 月 28 日在 Kijiji 上搜集的总共 3238 个公寓列表。

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

分析数据

公寓挂牌的平均价格是每月 1394 美元。根据蒙特利尔公报,2019 年该市的平均租金为每月 1080 美元。可租的和已租的之间的巨大差价!这是价格分布图。

import seaborn as sns
sns.set(font_scale=1.2)
sns.distplot(df['price'], color="red", axlabel='Prices ($)').set(title='Distribution of Prices')

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

如你所料,在这种类型的部门中,分布是向右倾斜的。绝大多数房源都是价格在 900 美元到 1,600 美元之间的公寓,但也有一些超过每月 3,000 美元。

现在让我们来看看城市里可供出租的公寓类型。

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

令人震惊的是,97.8%的房源都是一居室、二居室或三居室公寓。这说明了这个城市目前面临的租房危机的一个主要问题。对于买不起房子的 5 口之家来说,找房子真的成了问题。对于那些正在寻找一个工作室并且不想为一个完整的一居室公寓付钱的人来说,这也是一个挑战。

我们按户型来看一下均价。

plot1 = df.groupby('size')['price'].mean().plot(kind='bar', figsize= (10,5), color='salmon',title='Average Price by Size')
plot1.set_xlabel("Size",fontsize=14)
plot1.set_ylabel("Price ($)",fontsize=14)
plot1.title.set_size(16)

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

回到我刚刚提出的观点,工作室并不比一居室公寓便宜多少(1070 美元对 1174 美元)。供应不足可能是价格如此之高的原因。对于更大的公寓,我们看到了类似的情况,因为平均 5 间卧室以上的公寓每月 3407 美元,比平均 4 间卧室的公寓高出约 1000 美元。有点让你在生第四个孩子之前想一想!

以下是每种类型公寓每间卧室的价格比率:

  • 工作室:1070 美元
  • 单卧室公寓:1174 美元
  • 双卧室公寓:780 美元
  • 三居室公寓:560 美元
  • 4 卧室公寓:576 美元
  • 5 间卧室以上的公寓:681 美元

最好的价值似乎来自于租一个 3 或 4 卧室的公寓,这对于任何想要和平和安静的人来说显然不是理想的。不过,另一种选择要贵得多(在一套三居室公寓中,一个工作室和一个房间之间的额外租金每年超过 5000 美元)。

面对如此高的价格,人们将不得不搬到离市中心更远的地方,那里的租金应该更便宜。这是根据离市中心的距离列出的平均价格。

plots=sns.lineplot(x=df["distance_center"], y=df["price"], color='red').set(title='Price by Distance to Downtown')

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

我们确实看到了一个明显的趋势,离市中心越远,公寓就越便宜,除了 9 公里以外。这可能是因为距离市中心约 9 公里的地方是 Petite-Italie、Villeray 和 Mont-Royal 等社区,都是非常理想的居住场所。

现在让我们把它们放在一起。这是一张热图,按照到市中心的距离和面积显示了公寓的价格。

some_flats = df[(df['price']<3000) & (df['size']!= 7.5)]     
heat = some_flats.pivot_table("price", "size", "distance_center")
sns.heatmap(heat).set(title='Price Heatmap')

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

再说一遍,数据很清楚。我们看到大公寓或工作室的供应不足,因为经常在离市中心一定距离的地方找不到一个房源(地图上的白色矩形)。

结论

在我看来,从提供的数据中可以得出三个结论:

  1. 在蒙特利尔,一居室或两居室的公寓仍然随处可见,价格相对正常(与其他类型的公寓相比)。
  2. 小型或大型公寓(工作室和 4 间以上卧室)的供应似乎明显不足,这可能会推动价格上涨,尤其是在靠近市中心的地方。
  3. 最好的价值来自于租一个 3 或 4 卧室的公寓,因为小的或大的会更贵。

非常感谢你的阅读!

参考

https://Montreal gazette . com/news/local-news/mayor-addresses-housing-crisis

使用数据科学在波士顿 Airbnb 上进行您的下一次旅行

原文:https://towardsdatascience.com/using-data-science-to-make-your-next-trip-on-boston-airbnb-952030cad433?source=collection_archive---------34-----------------------

预订 Airbnb 前的三个重要问题——位置、房型和价格

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

肖恩·帕沃恩在摄影工作室拍摄的照片

介绍

奥斯顿是美国马萨诸塞州的首府和人口最多的城市。它的经济、文化、历史和教育每年吸引成千上万的游客。我一直渴望去这个美丽的城市旅行,并最终在今年三月制定了我的计划。然而,一个意想不到的全球性疫情把我锁在纽约,推迟了我的计划。待在家里后,我一直在用数据科学技术计划下一次去 Airbnb 波士顿的旅行。我认为将数据科学融入旅行计划会更科学、更有趣。如果你感兴趣,你也可以把这个博客看作是你下一次波士顿之旅的一个有趣的、或许有见地的指南。

我将使用的开放数据集来自这里的和 2020 年 6 月 10 日编译的。原始数据集包括 3440 个房源,Airbnb 在波士顿 25 个社区的 16 个特征。在本帖中,我将为你提供你会关心的三个主要问题的数据可视化和机器学习解决方案:地点:哪些地区你有更多的选择或者你更有可能留在波士顿 Airbnb?房间类型:什么类型的房间最受欢迎?价格:影响价格的重要特征是什么?你能预测一下波士顿 Airbnb 的价格吗?

初步数据可视化

首先,我使用 seaborn 查看配对关系。它提供了 9 个有用的数字特征的一般信息和模式。

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

图一。

一些有见地的观点(查看图 1。):

  1. 纬度:从南 42.25 到北 42.40,波士顿 Airbnb 的房源数量增加。
  2. 经度:从西-71.15 到东-71.00,波士顿 Airbnb 的房源数量增加。
  3. 每月的评论数和评论数有正相关关系。

然后我应用了 Spearman 关联热图(图 2。)来回顾 9 个特征之间的相关性。

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

图二。包含 9 个特征的 Spearman 关联热图

一些有见地的观点:

  1. 纬度与价格(r=0.31)和经度(r=0.30)正相关。
  2. 每月的评论数和评论数呈正相关(r=0.44)。
  3. 可用性 365 和计算的主机列表计数正相关(r=0.25)。

此外,为了便于分析,我还处理了异常值,删除了价格高于$500 的行,虚拟化了房间类型中的特性,并排除了次要的房间类型(图 3。):酒店房间,合租房间。

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

图 3。

因此,新的 Spearman 关联热图具有 11 个特征(图 4。)应该更准确。

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

图 4。包含 11 个特征的 Spearman 关联热图

最后,更重要的一点:

  1. 价格和住宅类型:整栋住宅/apt 与价格正相关(r=0.67)。包间与价格负相关(r=-0.66)。整个住宅/公寓的平均价格高于私人房间的平均价格(将在后面显示)。

2。纬度与价格正相关。随着纬度从南到北的增加,Airbnb 的价格可能会趋于增加。

3。每月的评论数和评论数是正相关的。

4。每月的点评次数和点评次数与最低夜数(主机要求)负相关。

地点:哪些地区你有更多的选择或者你会更有可能留在波士顿 Airbnb?

图 5。显示波士顿 25 个不同社区的 Airbnb 列表数量。

Airbnb 最多的前 5 个街区是多切斯特、市中心、牙买加平原、罗克斯伯里和 Back Bay。

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

图 5。波士顿不同社区的 Airbnb 房源数量

图 6。显示了波士顿各个社区中 Airbnb 的比例。

看看这个。值得注意的是,与其他社区相比,多切斯特的 Airbnb 比例更高,为 12%。

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

图 6。

图 7。一张密度图显示了 Airbnb 在波士顿的分布。最亮的区域有最多的 Airbnb。你也可以在图 8 中查看波士顿 Airbnb 的实际地图。

我发现波士顿 Airbnb 在经度从西-71.08 到东-71.06 和纬度从南 42.34 到北 42.36 高度密集。

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

图 7。

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

图 8。来自 Airbnb 内部的

在图 9 中仔细观察它们。波士顿 25 个不同社区的 Airbnb 散点图。经度和纬度表示在 x 轴和 y 轴上。

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

图 9。

如果你想知道哪些社区更有可能找到你的 Airbnb,图 10 显示了前 5 个社区及其位置。会给你的计划提供有用的信息。

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

图 10。

房间类型:什么类型的房间最受欢迎?

图 11。显示,考虑到房源数量,整个住宅/公寓和私人房间是最适合的房型。

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

图 11。

如果你考虑最短住宿时间,见图 12。显示 91、1 和 2 的最低夜数(东道主要求)可能会给旅行者更多的选择。

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

图 12。

如果你看图 13。和图 14。,你会发现有大约 576 个 Airbnb 房源在 365 天内都不可用(要么非常受欢迎,要么永久关闭)。

有趣的是,在所有 365 天中,还有大约 452 个 Airbnb 房源可供选择。

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

图 13。

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

图 14。

接下来,让我们回顾一些关于不同房间类型的统计数据

图 15。显示旅行者倾向于在共享房间比在私人房间和整个家庭/公寓停留更长时间。

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

图 15。

图 16。和图 17。两者都证实,私人房间和整个家庭/公寓的平均评论数高于合租房间和酒店房间。

确认可能表明整个家庭/公寓和私人房间是您选择的热门房间类型。

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

图 16。

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

图 17。

最后,如图 18 所示。按房间类型显示一年中的平均可用天数。

共享房间有一个低得多的 131.94 天的可用性。但它只有 16 个列表。因此,数据会有偏差,不应被视为受欢迎程度的决定性因素。

与酒店房间相比,私人房间和整个家庭/公寓在一年中的可用天数较少。尤其是整个家庭/公寓的可用天数比酒店房间少 30 天。所以我们大概可以假设整个 home/apt 更受欢迎。

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

图 18。

价格:影响价格的重要特征是什么?你能预测一下波士顿 Airbnb 的价格吗?

在处理了离群值、哑变量、缺失值之后,我利用 3357 个观测值和 11 个变量建立了三个模型:线性回归套索回归随机森林。响应变量是价格。

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

图 19。

同时,我发现包房的平均价格大约是 81.22 美元。整个住宅或公寓的平均价格要高得多,约为 189.38 美元。

测试数据集来看,波士顿 Airbnb 的实际平均价格约为 147.85 美元。根据测试数据集,波士顿 Airbnb 的预测平均价格约为 149.53 美元。同时,预测是建立在随机森林之上的。此外,您还可以在图 20 中查看波士顿 Airbnb 的实际价格与预测价格的分布。

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

图 20。实际价格与预测价格

模特表演

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

图 21。

0.549 的 R 平方(R ) 表示随机森林模型最好地解释了响应数据的可变性。40.423 处的平均绝对误差(MAE) 表示随机森林模型在预测和实际观测之间具有较低的绝对差异。这意味着它具有较低的预测误差。显然,随机森林是三种模型中最好的。

特征解释:回归模型系数, 树型特征重要性方法 Shapley 值

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

图 22。

图 22。显示了套索回归中的系数( alpha=0.1 )。显然,随着纬度、房型、经度的增加,反应变量价格也会增加。反之,房型包间的增加会导致价格的下降。系数的结果也符合我的预期,即位置和房间类型是价格的重要影响因素。

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

图 23。

图 23。显示了随机森林模型中的要素重要性排名图。房型全屋/apt,经纬度依然是预测价格最重要的特征。有趣的是,在随机森林中,计算出的主机列表计数和主机 id 是更大的影响因素。

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

图 24。

我还使用 Shapley 值来分析和解释随机森林中预测 Airbnb 价格的预测。

如图 24 所示,Shapley 值图可以进一步显示预测值与目标变量价格的正负关系[1]。

  • *特征重要性:*变量按降序排列。
  • 影响:水平位置显示该值的影响是否与更高或更低的预测相关联。
  • *原始值:*颜色显示该变量在观察中是高(红色)还是低(蓝色)。
  • 相关性:一个水平的“房型整体家居/ apt”含量对价格有一个高和正的影响。“高”来自红色,而“积极的”影响显示在 X 轴上。同样,“最少住宿天数”与目标可变价格负相关。

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

图 25。

图 25。是 Shapley 值的简单版本,以降序显示每个变量对模型输出价格的平均影响,并忽略价格的正/负预测。当然,Shapley 值可以用来神奇地解释更复杂的模型,如深度学习。下一次,你可以使用这个算法向你的观众解释你的深度学习模型的黑盒。

结论:

使用数据科学不仅可以帮助做出商业决策,还可以使生活更加有趣和科学。到目前为止,在波士顿 Airbnb 的数据科学中,我将把这些指导应用到下一次波士顿之旅中:

  1. 地点:哪些地区你有更多的选择或者你更有可能留在波士顿 Airbnb?

让你做决定的前 5 个街区是多切斯特、市中心、牙买加平原、罗克斯伯里和后湾。从地理角度来说,您希望定位波士顿的经度在-71.08°和-71.06°之间,纬度在 42.25°和 42.40°之间。

2.房间类型:什么类型的房间最受欢迎?

一般来说,在房间类型为全屋/公寓和私人房间的情况下,您找到 Airbnb 的几率会更高。将两者进行比较,whole home/apt 在列表和每月平均评论方面的数字更高。《私人房间》在平均最少住宿天数、平均点评次数和 365 天的平均可用天数方面有更高的数字。

3.价格:影响价格的重要特征是什么?你能预测一下波士顿 Airbnb 的价格吗?

Lasso Regression 和 Random Forests 都同意位置(经度&纬度)和房间类型(整个家/apt &私人房间)对预测波士顿 Airbnb 的价格很重要。

很有意思,随机森林中的特征重要性函数和 Shapley 值都表明计算的主机列表数很重要,而在 Lasso 回归中就系数而言贡献为零。

如果你在乎价格,你可能会为你的下一次旅行选择一个包间。否则,从西南到东北,波士顿 Airbnb 的价格往往会增加。

这是我在 Medium 上的第一篇帖子。希望有帮助!我欢迎反馈和建设性的批评。你可以在 LinkedIn 上联系我:https://www.linkedin.com/in/lanxiao12

在你走之前,可以在我的 GitHub 这里找到代码。快乐编码,快乐生活!

特别感谢 Menoua Keshishian。

参考:

[1]Data man 博士,用数据科学的 SHAP 价值观 (2019)解释您的模型

利用数据科学从公共基因组数据预测新型冠状病毒冠状病毒的起源

原文:https://towardsdatascience.com/using-data-science-to-predict-the-origin-of-sars-cov-2-coronavirus-from-public-genome-data-a-3e0a00eaca0f?source=collection_archive---------17-----------------------

关于科学家如何发现蝙蝠可能是冠状病毒疾病 2019(新冠肺炎)的起源的演练。

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

电子显微镜下显示人体细胞中的新型冠状病毒病毒(黄色)

新型冠状病毒冠状病毒来自哪里?专家认为蝙蝠是病毒的源头。他们是如何得出这样的结论的?

传统上,大多数医学科学家将使用传统的生物信息学工具,如 BLAST 序列比对。然而,在这篇文章中,我将展示我们如何从数据科学的角度分析冠状病毒基因组。具体来说,我们将使用数据科学方法,通过将其基因组序列与感染其他动物(如鸡、牛、鸭和蝙蝠)的其他冠状病毒进行比较,来预测新冠肺炎的起源。基于我们的分析,我们将展示蝙蝠是如何与其他动物相比具有最高的基因组序列相似性的。

数据集

2019 年冠状病毒的基因组序列通过美国国家医学图书馆网站向公众开放(【https://www.ncbi.nlm.nih.gov/】T2 实验室/病毒)。事实上,有一个**“更新”**提醒,当你访问网页时,它会立即出现在顶部。

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

新型 2019 病毒在这里被称为新型严重急性呼吸综合征冠状病毒 2 基因组

你会注意到有两种主要类型的病毒基因组序列:核苷酸 a蛋白质。这里,我们将具体分析 4 种动物的核苷酸序列,即鸡、蝙蝠、牛和鸭。我们将它们与从感染者身上收集的 2019 年冠状病毒核苷酸序列进行比较。你也可以用这里学到的方法来分析蛋白质序列。

数据收集

这项分析的主要目标是确定病毒的可能来源。在实践中,我们需要扫描新冠肺炎冠状病毒的基因组和所有在动物中传播的病毒。然而,由于计算资源有限,我们将只分析从鸡、蝙蝠、牛和鸭传播的冠状病毒。

首先,让我们从 NCBI 病毒网页点击核苷酸链接,下载新冠肺炎冠状病毒的核苷酸序列。

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

点击核苷酸链接下载新冠肺炎冠状病毒的核苷酸序列

该网页是自我探索性的使用。你可以观察到在精炼结果过滤器的病毒部分下自动选择了“严重急性呼吸综合征冠状病毒 2”。此外,还有两种不同的序列类型:完成引用序列。对于本演练,从核苷酸序列类型部分选择完整的序列类型。接下来,点击页面右上角的下载蓝色按钮。基因组序列将作为下载到您的机器上。fasta 文件格式。

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

一个可以下载冠状病毒基因组序列的网页。选择完整的核苷酸序列类型,并点击下载蓝色按钮下载基因组序列。

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

点击下一步,选择选项向下所有记录并选择默认选项用于 FASTA 定义行

一旦你下载了序列数据,让我们在你最喜欢的文本编辑器上打开它,看看基因组序列是什么样子的。

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

MN908947 |严重急性呼吸综合征冠状病毒 2 型分离株 Wuhan-Hu-1|全基因组
attaaaggttatatcttcccaggtaacaaaccaaccaactttcgatcttgtagatct
gttctaaacgaactttaaaatcttaaatctgtgtggctgtcgttcactcggctgcatgcttagtgcact
cacgcagtataattatataatactataatactatattactcgtctattc

您可以观察到第一行以 ’ > ’ 开头,表示对病毒的单行描述。在撰写本文时,NCBI 病毒数据库中有 34 个新冠肺炎冠状病毒样本。

接下来,让我们下载四种动物(即鸡、牛、鸭和蝙蝠)的冠状病毒核苷酸序列。

为此,从细化结果病毒部分移除新冠肺炎冠状病毒选项(即严重急性呼吸综合征冠状病毒 2),并改为搜索冠状病毒。冠状病毒是所有在动物中传播的冠状病毒的学名。选择此选项将为您提供医学科学家过去收集的所有类型冠状病毒家族的核苷酸序列样本列表。有趣的是,你可以从搜索结果中看到,第一次收集到冠状病毒的基因组样本是在 1983 年!

你可以先从收集鸡的核苷酸基因组序列开始。鸡的学名是 gallus gallus 。进入提炼结果主机部分,搜索 Gallus gallus (chicken) 。选择该选项后,搜索结果列表将会更新,您可以再次点击下载按钮下载鸡的完整核苷酸序列。

对剩下的 3 种动物重复这些步骤:1)牛(牛),2)鸭(鸭科),3)蝙蝠(翼手目)。

数据转换

我们的第一项任务是从序列数据 fasta 文件中读取新冠肺炎和其他四种动物的基因组序列,并将它们放到熊猫的数据框架中。为了实现这一点,我们将只需要提取序列字符(例如,attaag),并忽略所有以“>”开头的单行描述。以下代码通过’>‘识别每个核苷酸序列,并提取两个’>'符号之间的序列字符。提取的序列字符随后被顺序附加到列表中。该列表包含每种动物基因组的整个字符串。

from nltk.corpus import stopwords  
from sklearn.feature_extraction.text import CountVectorizer
import pandas as pddef process_file(filename,target_val):
    f = open(filename) #'datasets\\corona-nucleo-chicken-complete.fasta')
    lines = ""
    s1 = list()
    step = 0
    term = 0for line in f:
        line = ''.join(line.split())
        if line.startswith(">") and step==0:
            line = line.split('>',1)[0].strip()
            step = step + 1if line.startswith(">") and step>=1: #and step>=1:
            line = line.split('>',1)[0].strip()
            s1.append(lines)
            lines = ""
            step = step + 1
            term = 0
        lines = lines + line

序列的数字表示

接下来,我们需要从包含序列字符的字符串中生成特征。由于序列被表示为一系列字母字符,我们需要将序列字符分割成小的记号。例如,只有 2 个字符的令牌、只有 3 个字符的令牌、只有 4 个字符的令牌等等。此外,我们需要将标记转换成数字表示格式,以便我们可以将它们输入到机器学习算法中进行预测。一种常见的方法是应用单词包数据表示,计算每个令牌的频率/出现次数。它跟踪两个重要信息:序列字符的词汇表和每个标记出现的次数。

为了同时应用 n-grams 和词袋,我们可以使用来自 scikit-learn 机器学习库的计数矢量器 API。

count_vect = CountVectorizer(lowercase=False, ngram_range=(2,4),analyzer=’char’)
 X1 = count_vect.fit_transform(s1)

在本演练中,我们将只设置最小的 n 元文法来开始从 2 到 4 序列的令牌的**。例如,2-gram 最多包含 2 个字符(例如 at)、3-gram(例如 ACG)和 4-gram(例如 ACTT)。**

def generate_ngrams(s1):
    count_vect = CountVectorizer(lowercase=False, ngram_range=(2,4),analyzer='char')
    X1 = count_vect.fit_transform(s1)

    lcount = list()
    lcount = []
    for i in s1:
        count = len(i)
        #print(count)
        lcount.append(count)count_vect_df = pd.DataFrame(X1.todense(), columns=count_vect.get_feature_names())

    count_vect_df=count_vect_df.apply(lambda x: x / lcount[x.name] ,axis=1)

    return count_vect_df

数据标记

一旦数据被转换成数字值作为特征,我们将需要为它们添加标签以进行预测。

df1 = process_file(‘datasets\\corona-seq-chicken.fasta’,”chicken”)
df2 = process_file(‘datasets\\corona-seq-duck.fasta’,”duck”)
df3 = process_file(‘datasets\\corona-seq-cattle.fasta’,”cattle”)
df4 = process_file(‘datasets\\corona-seq-bat.fasta’,”bat”)

在这里,您可以看到每个 fasta 序列文件都被分配了自己的标签(即鸡、鸭、牛和蝙蝠)。标注在数据转换过程结束时完成。

def generate_ngrams(s1):.....
count_vect_df = generate_ngrams(s1) 
count_vect_df[‘target’] = target_val
return count_vect_df

如果您做的一切都正确,您应该能够以 pandas dataframe 格式的数值查看所有的特性。

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

来自鸡核苷酸序列的样本特征

探索性分析

有了以数据帧格式表示的所有序列,我们可以探索我们的冠状病毒数据集的%分布。我们可以观察到,我们的数据集的 64%是鸡的核苷酸序列,31%来自蝙蝠,剩下的 4%和 1%分别来自牛和鸭。

import matplotlib.pyplot as plt
plot_size = plt.rcParams[“figure.figsize”]
plot_size[0] = 8
plot_size[1] = 6
plt.rcParams[“figure.figsize”] = plot_sizedf7[‘target’].value_counts().plot(kind=’pie’, autopct=’%1.0f%%’)

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

建立预测模型

我们现在准备通过将我们标记的核苷酸数据集应用于机器学习算法来建立预测模型。在这种情况下,我们将使用 XGBoost 梯度增强算法来构建我们的预测模型。

from sklearn.model_selection import train_test_split from xgboost import XGBClassifier
from xgboost import plot_importance
import xgboost# create a train/test split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=7, shuffle=True)model = XGBClassifier()
model.fit(X_train, y_train)

使用我们建立的模型,我们可以进一步分析,以确定核苷酸序列的哪些区域对确定哪些序列属于哪些动物具有最大的影响因素。我们可以观察到“CWG”、“AAAY”和“AAC”是区分 4 种动物基因组的前 3 个序列区域。

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

新冠肺炎冠状病毒的数据转换和文本表示

接下来,我们需要将新冠肺炎核苷酸序列文件加载到我们的程序中,以便进行预测。

与动物冠状病毒序列相似,我们需要对新冠肺炎冠状病毒进行数据转换和数值表示。n-gram 和词袋算法都需要应用,但附加步骤也是必要的。我们将详细解释这些步骤。

首先,我们将从 Fasta 文件中加载新冠肺炎冠状病毒的核苷酸。

cov = process_file(‘datasets\\corona-covid-19.fasta’,“COVID-19”)
cov

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

我们可以看到有 34 个新冠肺炎样本和 409 个特征。但是,请注意,特征的数量与训练特征不匹配。

因为我们要做预测(而不是建立模型),所以我们可以去掉目标标签

cov = cov.drop(‘target’, axis=1)

不幸的是,新冠肺炎产生的特征不会与我们动物的其他冠状病毒 100%相同。我们可以观察到新冠肺炎冠状病毒的特征数量是 409,这与动物冠状病毒的 1786 个特征相比要少得多。由于这种不匹配,在数据集与我们的预测模型完全兼容之前,我们需要执行另外两种类型的数据转换。

  1. 动物冠状病毒中有哪些特征是新冠肺炎冠状病毒所没有的?

这意味着发现动物核苷酸序列中的特征,但它们不存在于新冠肺炎冠状病毒中**。一旦我们发现这样的特征,我们将需要在预测数据集中将其填充为“未知”。**

mc = X_train.columns.difference(cov.columns)
mc

我们可以看到,“AAAM”、“AAR”和“AAAY”是我们在冠状病毒中发现的一些特征,但它们不存在于新冠肺炎冠状病毒中。

索引(['AAAM ‘,’ AAAR ‘,’ AAAY ‘,’ AACK ‘,’ AACM ‘,’ AACR ‘,’ AAGK ‘,’ AAGR ‘,’ AAGW ‘,’ AAGY ',… 'YTWC ‘,’ YW ‘,’ YWA ‘,’ YWAT ‘,’ YY ‘,’ YYC ‘,’ YYCT ‘,’ YYT '],dtype='object ',length=1392)

需要添加这些功能,以便与我们的训练数据集相匹配。因此,我们可以将值填充为未知。由于特性必须是数字形式,我们将使用“-999”数值来表示“未知”。

for newcol in mc: cov[newcol]=-999

2。新冠肺炎有哪些其他类型动物冠状病毒从未有过的新特征?

最重要的是,我们还需要找到存在于新冠肺炎但不存在于训练数据集中的特征。一旦我们发现这样的特征,我们将需要移除这些特征,以使它们与我们的训练数据集相匹配。

rf = cov.columns.difference(X_train.columns)cov = cov.drop(rf, axis=1)

我们可以看到,“AWGC”、“CS”、“CST”和“CSTG”是新冠肺炎病毒的一些新的核苷酸区域,这些区域以前在四种动物的冠状病毒中从未存在过。

索引([‘AWGC ‘,’ CS ‘,’ CST ‘,’ CSTG ‘,’ GCS ‘,’ GCST ‘,’ GGAW ‘,’ STG ‘,’ STGG ‘,’ TGCS ‘,’ TRCC ‘,’ TTYA ‘,’ TYAC ‘,’ WGCT’],dtype='object ')

在从预测数据集中移除所有这些特征之后,我们的预测数据集最终与我们的训练数据集相匹配。

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

现在,我们预测的数据集有 1786 个特征与训练数据集完全匹配

关键时刻

我们现在可以预测新冠肺炎冠状病毒的可能来源了!下一步是预测我们收集的 34 份新冠肺炎冠状病毒样本的可能来源。使用 XGBoost predict API 可以很容易地做到这一点。

model.predict(cov)

数组(['bat ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ T12 ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ T14 ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ bat ‘,’ bat ',

基于预测值,我们可以看到,我们的模型预测所有36 个样本为蝙蝠。甚至没有一个样本被预测为其他动物。为了进一步分析这一点,我们将使用 XGBoost 的 predict_proba API 来获得每个预测的概率。

print(model.classes_)
similarities = model.predict_proba(cov)
np.round(similarities, 3)[‘bat’ ‘cattle’ ‘chicken’ ‘duck’]
array([[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041],
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041], 
[0.957, 0.001, 0.001, 0.041]], dtype=float32)

基于预测概率,我们可以清楚地看到,bat 的预测概率极高,预测值为 0.957。这意味着新冠肺炎病毒有 95.7%的可能性来自蝙蝠,而只有 4.1%的可能性来自鸭子。病毒来自牛或鸡的概率只有 0.1%。因此,我们可以有力地得出结论,蝙蝠是 2019 年新型冠状病毒的可能起源

将我们的结果与 BLAST 进行比较

正如本文开头提到的,BLAST(基本局部比对搜索工具)[1]是典型的标准方法,允许科学家比较核苷酸或蛋白质序列的差异。这个节目在这里公开:https://blast.ncbi.nlm.nih.gov/。从网站上,你可以上传你的新型冠状病毒序列为 FASTA 格式,该程序将根据其数据库查询你的序列,以找到任何与你的查询匹配的相似序列。与我们的方法不同,BLAST 没有对特征应用任何预测模型,而是使用启发式搜索算法。我们的预测方法的一个主要好处是,它可以发现更多的洞察力,并且可以发现标准启发式搜索通常无法发现的隐藏模式。

参考

[1] R. M .凯西(2005 年)。“BLAST 序列有助于基因组学和蛋白质组学”。商业智能网络。

利用数据科学研究美国的经济不平等

原文:https://towardsdatascience.com/using-data-science-to-study-economic-inequality-in-the-united-states-1101e9350c3d?source=collection_archive---------62-----------------------

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

亨妮·斯坦德在 Unsplash 上的照片

数据新闻

我们如何利用公共数据来分析和理解美国黑人社区面临的挑战?

在我的上一篇文章中,我使用 BLS 和美国的人口普查数据创建了一个仪表板,以快速分析每个县按种族和行业划分的美国失业情况。本文将继续这个话题,研究一些受新冠肺炎影响最严重的县,并试图描绘出一幅围绕这些社区的更好的画面。

我的目标是找出主要是经济困难的黑人县,并找出他们之间的共性(或差异)。

我将这个过程分为四个步骤:

  1. 查找感兴趣的县进行比较(使用美国数据仪表板)
  2. 通过媒体和政策(通过网络搜集和 NLP)将各县联系起来
  3. 量化问题(使用开放数据源)
  4. 承认方法中的偏差和改进

查找感兴趣的县进行比较:

我首先查看了失业率最高的县。看起来密歇根州是受灾最严重的,内华达州和加利福尼亚州的部分地区,然后是南部的部分地区。

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

BLS 报告的截至 4 月底的失业率

利用人口普查数据,我们可以得出以下黑人人口最多的地区。

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

比例是美国人口普查局报告的各县黑人人口的%

对比了这两张图表后,下面是我选定的县的列表:

  1. 密西西比州图尼卡——31.7%的失业率
  2. 密西西比州霍姆斯——28.9%的失业率
  3. 密西西比州奇克索——31.4%的失业率
  4. 阿拉巴马州达拉斯——20.9%的失业率
  5. 阿拉巴马州威尔科克斯——22.8%的失业率
  6. 阿拉巴马州朗兹——26%的失业率

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

自上次衰退以来,威尔科克斯和霍姆斯的失业率一直很高(即使全国失业率降至 3.9%),平均收入也是六人中最低的。下图显示了各州各行业的就业依赖情况。

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

澄清一下,最上面的蓝色是贸易、运输和公用事业。

对于这两个州来说,政府部门和贸易/运输/公用事业部门在这个州占据了更高的比例。

通过媒体和政策将各县联系起来

现在,我们已经对各县的经济状况有了一个大致的了解,让我们看看还能收集到哪些其他数据源。了解我们正在研究的国家的历史/背景很重要,所以让我们从了解该地区的媒体报道和公共政策开始。为了实现前者,我依赖于典型的 NLP 预处理/可视化方法。我使用谷歌新闻查询格式([https://news.google.com/rss/search?q={](https://news.google.com/rss/search?q={)})从搜索“county _ name+‘economy’”中搜集了 100 篇文章,然后使用 TF-IDF ( Scikit-learn)对每篇文章中的单词进行分词(使用nltk删除停用词和词条)。

然后,我对所有的文章进行了主成分分析(Scikit-learn),并用 600 篇文章绘制了前两个组成部分。对于那些不熟悉 PCA 的人来说,可以把它看作是文章中单词/主题的变化。对于所有的交互链接,你必须下载 html 文件。

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

你可以在这里观看这个剧情的互动版本。

看起来一般的经济报道都很相似,但是奇克索在第一部分有更多的变化。主要的分类集中在“疫情”和“失业”上。

我在另一个时间段(2008 年至 2019 年)进行了同样的分析,得到了以下更分散的结果:

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

奇克索去了左边,其他人大多居中或右边

然后我在 PCA 组件上也做了 TSNE。TSNE 很难简洁地解释,但可以把它想象成在高维空间中展开复杂的非线性关系(就像展开一个水果卷,但你可以在某种程度上根据颜色撕开并重新排列)。如果你有超过 50 个功能,TSNE 就不能很好地工作。

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

在这种情况下,类似于五氯苯甲醚的结果,链接此处

从互动情节的快速扫描来看,集群集中在“赌场”、“农业”、“贸易交易”、“移民”和“民权”。

TSNE 的左上方是关于黑带、无家可归者和学生的文章。中间是内战以来的民权和财富/不平等。右下角是主要涉及特朗普、贸易和工厂的文章。

通过对其中一些文章的后续阅读,我发现阿拉巴马州的三个县是黑带的一部分,这意味着它拥有该地区丰富的黑色表土。该地区也有阿拉巴马州一半的奴隶人口集中在那里的历史。1965 年有一次从塞尔玛到蒙哥马利的历史性游行。塞尔玛在达拉斯县,蒙哥马利(阿拉巴马州的首府)就在朗兹县的外面。

对于公共政策,我首先研究了选民分布和公共问题。在最近的选举中,我使用了 B allotpedia 和 P olitico :朗兹、达拉斯、威尔科克斯、图尼卡和霍姆斯是民主党人,奇克索是一个关键县(倾向共和党)。我想知道这是否解释了为什么奇克索媒体集群如此偏离正轨。

在我们深入研究之前,先快速概述一下美国的立法系统:正如每个州都有两名参议员和多名众议员代表美国参众两院一样,每个区都有一名参议员和众议员代表州参众两院。

为了找出这六个县所面临的问题,我去了地区立法者发起的议案。阿拉巴马州和密西西比州的选区划分如下:

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

亚拉巴马州

朗兹、达拉斯和威尔科克斯都是第七区的一部分。Proncey Robertson(共和党)是这个区的代表,Sam Givhan(共和党)是参议员。

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

密西西比河

图尼察和霍姆斯是第二区的一部分,奇克索来自第一区。2 区代表是尼克·贝恩(共和党),参议员是迈克尔·麦克伦登(共和党),1 区代表是莱斯特·卡彭特(共和党),参议员是大卫·l·帕克(共和党)。

我使用 billtrack50 来查看他们如何在州议会中发起法案,并使用与前面的法案摘要相同的 NLP 方法对它们进行聚类。总共有 140 个提案。

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

互动剧情此处

我没有发现 TSNE 特别有用,但如果你喜欢,你可以在这里查看一下。账单摘要上的 Gensim 关键字按出现次数为我们提供:

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

此外,各州的赞助法案似乎有些分歧:

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

互动剧情这里

阿拉巴马州的议案主要集中在枪支和犯罪上。下面是按地区(7 是阿拉巴马州,1 和 2 是密西西比州):

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

我对(0,0)中心附近的账单最感兴趣,因为这是我们在各区(县)之间最具共性的地方。

**中心的主题:**围绕消防员和其他基础设施、对许多选民的医疗/健康援助(在校学生的免疫接种、向不孕不育者提供怀孕补助等。).

**第 2 区(图尼卡,霍姆斯)😗*大多倾向于左派,涉及许多儿童问题,如送孩子、收养、儿童抚养、给年轻人发色情短信,以及烟草和尼古丁方面的毒品问题。

第 1 区(Chickasaw): 有各种各样的政策,左侧的主题非常相似(以及一些共同赞助法案的重复),但增加了一些道路/驾驶员法案(驾照/DUI 法案/高速公路和州际公路)。在中心,有一些关于教育的法案(教师收入,阅读障碍,利益冲突和税收条款)。扩散到右侧的都是表彰或祝贺运动队和教练赢得各种奖项和比赛并将其记入官方记录的法案。

**第 7 区(达拉斯、朗兹、威尔科克斯)😗*有很多关于枪支(特别是在校园内非法燃放枪支、隐蔽携带)和犯罪(添加到受管制物质清单中,使向警察撒谎成为犯罪)的法案。但靠近中心的法案大多是围绕州长、市政当局、董事会和司法部门的修正案(修改权限、条款、文件等)。还有一些税收和投资法案。

我们现在有了媒体讨论和公共政策关注的背景。我也想访问市政厅和地区会议记录,看看社区提出了什么问题,但是这些问题不容易找到。

我们的最后一步是看看我们是否能发现这些问题实际上是如何使用开放数据源来解决的。

量化问题:

美国的每个州通常都有指定的机会区,有些州还进一步发展了评分系统。伯克利已经在加州的一个地区(比一个县还小)做了一个很好的例子,见下图:

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

https://belonging.berkeley.edu/tcac-2020-preview

使用 OpportunityDb 我发现阿拉巴马州有 158 个机会区,密西西比州有 100 个。每个县有 0 或 1 个区,都属于“低收入社区”类别。我喜欢伯克利大学给他们的研究打分,所以我仔细研究了他们的方法,以了解我可以把什么转移到这些县。这里就不细说了,这些是他们用的指标:

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

2020 年机会映射方法

他们使用的一些有趣的数据点是“成人教育”、“工作接近度”和“学生贫困率”。他们还使用了一种叫做“CalEnviroScreen 3.0 指标”的东西,这也是一个有趣的研究。

密西西比州的公开数据主要集中于 GIS,而阿拉巴马州的则集中于州支出。他们的 web 界面不同于旧金山、芝加哥和纽约等地,这些地方似乎都有相同的 web 模板和相似的数据集。

对于密西西比州,我寻找了年龄分布和任何与学校/孩子相关的数据。他们从门户网站上得不到任何真正有用的东西,所以我只能依靠 census.gov。它已经过时了,但却是一个起点。看起来人口大多是中年家庭。

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

https://www2 . census . gov/geo/maps/cong _ dist/CD 113/CD _ based/ST28/CD 113 _ ms02 . pdf

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

https://www2 . census . gov/geo/maps/cong _ dist/CD 113/CD _ based/ST28/CD 113 _ ms01 . pdf

我还发现第二区和第一区的高中毕业率分别为 77.6%和 81.2%,而全国平均水平为 88%。

学区数据很有用,因为它能让孩子和他们的父母一起了解情况。首先,媒体对学校的报道(covid 之前)使用与之前相同的方法:

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

互动这里

左下方的聚类包括犯罪、盗窃和枪击。中间/顶部集群涵盖了贫困、失败和隔离,右侧涵盖了儿童殴打/引诱和儿童死亡(也是一系列根据标题看似与学校无关的犯罪)。

我利用国家教育统计中心(NCES)来尝试了解当地学区面临的挑战。您可以在此找到图尼察县学区,并搜索其他学区。我开始使用 bs4 和 Selenium 收集美国最大的 100 个学区以及我们的 6 个县学区的数据。清理完就剩下 70 个学区的数据( csv 链接此处)。

这是我收集的变量的df.hist()图:

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

这是只有%变量的plotly箱线图。在交互式版本中,你可以将鼠标放在圆点上来查看学区名称。

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

互动此处

密西西比州的三个区都有 97%以上的医疗保险覆盖率,这最初让我感到惊讶。然而,一些统计数据引起了我的注意,这里是这些箱线图的放大图:

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

  • “拥有宽带互联网的家庭”:图尼察 64.6%,霍姆斯 37.2%,奇克索 45.9%。
  • “女户主,无丈夫在场”:图尼察为 53%,霍姆斯为 72%,奇克索为 36%。
  • “学士以上学位”:图尼察父母中有 9.3%,霍姆斯父母中有 9.6%,奇克索父母中有 4%。
  • 图尼察 34.2%,霍姆斯 53%,奇克索 49.1%

作为参考,你可以将这些统计数据与加州这个非常富裕的县进行比较。92.3%上网,88%已婚夫妇,27.2%英语说得很好,79.9%父母本科以上学历。

在县一级很难找到儿童虐待/忽视/药物使用,所以我不能在那里找到任何东西。

对于阿拉巴马,我寻找犯罪和学校安全方面的数据。他们的开放数据库专注于国家支出,像这样划分(在 2019 年 10 月至 2020 年 6 月期间)。有大量的点击和页面标签,考虑到所有的数据都应该放在一个 excel 表中(如果你排除了所有收款人的支付日期),这真的很难处理。

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

http://open.alabama.gov/Checkbook/Category/

大部分支出是“补助和福利”,如果我们点击进入,我们会看到一些顶级类别:

  1. 医疗福利 65.41 亿美元
  2. 市/县学校系统 37.82 亿美元
  3. 退休和养老金福利 24.64 亿美元
  4. 拨款 13.36 亿美元
  5. 个人福利 10.13 亿美元

然后我查看了 37.82 亿美元中有多少拨给了达拉斯、朗兹和威尔科克斯学区。

  • 达拉斯 2050 万美元
  • 朗兹 980 万美元
  • 威尔科克斯 1000 万美元

我要指出的是,这些并不真正与学区预算的规模成比例,这就是数据定义如此重要的原因。如果任何人知道更多关于学区预算和国家资助,请与我联系!但是在浏览达拉斯地区2020-2021的预算提案时,我发现

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

我想知道预算的减少是否与学校安全法案有关——尽管从外部来看这很难做出结论。阿拉巴马州似乎没有像和这个来自 NYPD 的这样的投诉或逮捕数据。

让我们将这些学区与密西西比州的学区进行比较。这是总体分布,所以你不用向上滚动:

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

  • “拥有宽带互联网的家庭”:达拉斯 64%,朗兹 49.4%,威尔科克斯 49.2%。
  • “女性户主,无丈夫在场”:达拉斯为 44%,朗兹为 67%,威尔科克斯为 58%。
  • “学士以上学位”:达拉斯有 14.5%的家长,朗兹有 5.9%的家长,威尔科克斯有 6.5%的家长
  • " %贫困线以下":达拉斯 31.8%,朗兹 45.6%,威尔科克斯 44.8%

承认方法中的偏差和改进

我能够深入了解这些以黑人为主的县的社区所面临的一些问题,但不幸的是,我无法将这些问题与失业直接联系起来,或者如何利用支出来解决这些问题。因此,我不会试图做出任何结论。

我在这里的目的是使用典型的数据科学库,提供一组分散的数据集背后的故事,便于我们理解。有几项我想提一下:

  1. 我们正在研究的很多东西都是相互关联的,即使有看似“直觉”的解释,这也可能是危险的。
  2. 有大量的定量数据,但其中大部分过于分散或更新不一致(即使是在开放的数据库中),无法快速收集和使用。这在粒度级别上也变得更加难以处理。
  3. 一个更全面的研究媒体的方法可能是找到关于每个国家历史的顶级书籍,然后运行 gensim 对它们进行总结(或者找到 100 本这样的书并进行 NLP 聚类)。这个过程只有和它的来源一样好。
  4. 研究黑人占少数且失业率高的县也是值得的,尽管数据越细越难找到。农村 vs 城市也是一个很好的细分来研究。
  5. 我们观察到的一切都在动态变化,使用收集到的数据时间越长,做出假设和决策的可靠性就越低。
  6. 我在这里没有太多的比较分析(例如,一些对照组/基线,或像加州研究那样的规模)。下一步可能是深入到我们研究和比较的县附近,但这需要更深入的城市规划和立法知识,因为我们开始处理的不可见变量会成倍增加。
  7. 下一次,我可能会更多地关注每个县就业所依赖的行业,而不是社区,因为这些数据更新得更加频繁和可靠。这是更标准的方法,所以这次我不想采用。

数据科学是各种模型的强大工具,但同样的技能集在提供更清晰的问题和数据描述方面也非常强大。没有固定的方法来做到这一点,这就是为什么我的方法与你习惯阅读的相比可能感觉粗糙。但至少,这是一种在 Kaggle 竞赛和预制 Jupyter 笔记本之外练习技能和学习的方式!

这里表达的所有观点都是我个人的,并不代表我所属的那些人的观点。

使用数据科学来了解和应对冠状病毒和其他流行病。

原文:https://towardsdatascience.com/using-data-science-to-understand-and-attack-the-coronavirus-and-other-epidemics-41019c6b0c86?source=collection_archive---------28-----------------------

流行病危机的理解、行动和预防策略。

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

在 2019 年的最后一天,中华人民共和国政府向国际卫生当局通报了中国武汉市的一系列不明疾病病例。七天后,中国当局确认该病毒是一种属于普通流感家族的冠状病毒,SARS 和 MERS。国际科学界将这种病毒命名为新冠肺炎,根据流行病学标准,这种病毒已经从流行病变成了疫情,因为迄今为止它已经在全球传播到了 75 个国家。

截至 2020 年 3 月 4 日,已有 3062 人死于该病毒(最后一天为 162 人),报告的病例总数达 92860 多例,其中大部分来自 mainland China ( 原始数据)。

世界卫生组织(世卫组织)对这种病毒的一些症状描述如下:

临床症状和体征主要是发热,在某些情况下,呼吸困难和胸部 x 光检查可见双肺浸润性肺炎。

目前已知该病毒的致死率没有其他类似疫情高(约 2%的感染以死亡告终,类似 SARS 和 MERS 的病毒约为 60%)。众所周知,传播的容易程度相对较高,病毒通常需要大约 10 到 15 天才能无症状地潜伏**。正因如此,被感染的人往往会在这段时间内传染他人,而自己并不知道自己生病了。这可能会给卫生系统带来风险,因为没有足够的医院床位来处理大量受感染的病人。**

矛盾的是,这种病毒的低致死率恰恰是它如此危险的原因,因为无法遏制它有可能大规模传播传染病,并且它的“低致死率”比近几十年来任何类似的病毒都要夺去更多的生命。

然而,在全球化时代,这种疾病和其他呼吸系统疾病爆发的大规模性质表明了大规模的战斗战略,其中协调和信息交流成为理解、遏制并最终解决流行病的基本支柱。

这就是数据科学发挥作用的地方;被描述为大规模计算机数据分析工具,以及人工智能(AI)和机器学习(ML) 技术,以更强的理解能力处理这种规模的问题。

在 2020 年中期,我们离不开这些技术,在这一层面,成功战略的决策和规划必须由数据驱动**。**

数据科学有大量的方法,其有效性由统计的严格性来保证,然而,由于该领域的持续发展,以及数据科学家参与的不断创新过程,它们的实施可能变得更像一门艺术而不是科学:没有完美的配方。

在本文中, deep_dive 的团队试图提出一些数据科学的想法和应用,这些想法和应用可能会通过以下工作流程对正确处理这场危机产生影响:

  1. 理解这一现象
  2. 行动
  3. 预防

在第一阶段,我们将通过提取尽可能多的关于病毒的信息,并使用 GIS(地理信息系统)技术和图形分析从数据可视化中理解病毒,来寻求理解这种现象。这些信息将作为行动阶段中模型的训练和部署的基本输入,在此阶段,我们提出了使用时空聚类、基因组数据和一些风险模型的具体应用。最后,在预防阶段,我们将探索数据架构问题,为解决未来类似性质的问题打下更坚实的基础。

理解这一现象

理解流行病学现象的一个关键问题是正确诊断发现该现象的阶段。

疫情在哪里?传染是如何发生的?有多少人生病了?传播有多快?有多少人处于危险中,谁最容易受到影响?诊断最好的方法是什么?

让我们试着用一个典型的工作流来回答这些问题,这个工作流从探索性分析开始。

这一阶段包括提取原始数据可能提供给我们的信息,我们提出以下列表作为起点:

  • 数据可视化。
  • 地理热点(GIS)
  • 网络分析。

数据可视化。

数据可视化是提取现象潜在模式的最有效的工具之一;在分析的初始阶段,正确地查看数据允许我们生成第一个假设。

当谈到一种流行病时,看到图表的用处会立即浮现在我们脑海中,这些图表可以让我们了解病毒的传播和致命性中的时空演变。

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

自 2010 年 4 月 3 日起新冠肺炎病例的演变

这一时间序列可以直观地显示所报告的病毒病例的全球演变情况。我们可以通过二次模型的拟合来想象数据的趋势。

正如我们所见,二次模型似乎不是拟合数据的最佳方式;然而,这种模型的动画可以让我们更好地理解问题的维度及其潜在规模。

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

新的每日感染呈线性增长(总是恒定)的模型意味着总感染是二次的。

通常情况下,流行病学中使用的模型具有指数增长,其发展可以很快超过像这样的二次模型。

地理热点

众所周知,该疾病的首次爆发发生在中国,这就是为什么我们的地理分析将分为两个区域:中国和世界其他地区。首先,让我们想象一下每个地区确诊病例的演变情况。

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

很明显,中国是疫情的焦点,然而,鉴于全球化世界的相互关联性,在世界其他地区出现同等规模的疫情是可行的。此外,世界其他地区 3 月 3 日确诊的新增病例总数似乎超过了中国。让我们更详细地看一下每个地区:

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

武汉市位于中国中部的湖北地区,是迄今为止发现确诊病例最多的地方。

目前,中国有 80304 例报告病例,因此在下图中,病例数对应的颜色超出了建议的比例。

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

这张地图令人担忧的是跨境感染的增长率和各类国家新疫情的出现。截至 3 月 4 日,已有 75 个国家确诊病例。

现在让我们看看中国和世界其他地方报道的死亡案例。

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

截至 3 月 3 日,已有 3112 人死于该病毒。

显然,来自新冠肺炎的最大数量的死亡发生在病毒感染源附近,这再次将中国置于全球比较范围之外,在 3112 例死亡中有 2946 例。

探究意大利、伊朗和韩国的案例很有趣,这些国家的致死率似乎高于其他国家:一个有趣的假设可能是发现传染病例的有效性很低,低估了目前传染病例的数量。

网络分析。

鉴于病毒携带者(人类和一些动物)的离散性,从网络角度研究传播和传染是很方便的。在这些网络中,每个节点意味着一个人,而(节点间的连接)意味着传染。鉴于传染病是随时间变化的进化过程,这种现象的建模变得极其复杂。

为了更好地理解这个案例,让我们把我们的分析从全球蔓延抽象到本地,例如,在墨西哥城地铁(CDMX)设施内。

假设一节地铁车厢 2 米* 40 米,每节车厢有 7 节。这产生了一个 560 𝑚的空间,传染可能发生。如果车满了,让我们假设每个𝑚有 9 个人,交互的数量会变得巨大。

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

𝑚的相互作用总数是 C(9,2)=36 的二项式系数,即 36 个相互作用。现在让我们假设在中心的人被感染了,并假设给定人口密度的感染率,然后我们可以模拟感染。

例如,假设在 15 分钟的互动中,与感染者一起乘坐地铁的每个人都有 30%的机会被感染。根据这些参数,在大约 2 小时内,8 名邻近乘客将已经被感染,这也是假设新感染者不会立即感染其他人(重要的是要注意,这 30%是一个说明性的例子,巨大的流行病学努力必须集中在尽可能估计这些比率上,在此链接中您可以找到更多信息)。

下图让您看到在几次模拟后,这个平均值如何收敛到 120 秒。

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

很明显,这些参数不能轻易假设,每个参数都必须以尽可能好的方式进行估计。基于这种简单推理的更复杂的模型可以在下面的链接中更详细地查阅。

行动

对这些现象采取行动自然是最复杂的部分。在这一阶段,所阐述的解决方案涉及大规模的后勤和行动部署、巨大的资源支出和非凡的政治能力,更不用说适当的规程、训练有素的卫生专业人员和深思熟虑的解决方案。如果不知道我们面临的是什么,不知道提议的解决方案是否是根据探索阶段发现的相关方面设计的,所有这些都不可能正确执行。

模型部署中的可扩展性变得至关重要,因为一个对大规模现象(如流行病)做出响应的系统必须能够处理高水平的并发,而不会在任何时候损害响应的有效性速度

本节概述了医学流行病学应用的可能模型部署,以及每个模型必须考虑的事项。

基因组展示。

由于医学科学的进步,冠状病毒的基因组序列很快被确定,现在是开源的。下图是测序的 DNA 的前 100 个含氮碱基的图片:

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

从这个视觉序列中,我们可以确认一些生物学的基本知识,例如任何生物的 DNA 都是只有四个含氮碱基(A、C、G、T)的序列。

完整的图像可以从完整的原始信息以及其他相关的基因组信息发展而来,这些信息可以在这里找到。

这个数字可能在美学上很吸引人,然而,很少有见解能为我们对这一现象的分析增加价值。

从这个庞大的序列中提取信息并不是本文的重点,然而,使用主成分分析(PCA)等技术或其他维度缩减技术,我们可以帮助实现不同病毒株之间的相似性度量,这可以指导我们创建有效的疫苗。另一方面,遗传树让我们能够可视化突变的进化。冠状病毒的进化可以在这里查阅

时空聚类

除了识别热点之外,另一种时空检测方法是基线的使用。这些让我们能够根据历史信息确定我们在正常范围内会考虑什么。通过这种方式,我们可以有效地检测对典型或历史行为的异常感染的聚集(集群)。

作为该技术的应用示例,我们将使用 2018 年明尼苏达州接种疫苗的学生人数的公共数据集。

我们发现该地区(集群)接种疫苗的幼儿园人数(约 85%)明显低于该州其他地区的百分比(95%)。值得注意的是,检测到的组并不对应于明尼阿波利斯市人口密度最高的区域,因为所实施的算法使用了考虑到人口的基线,因此我们可以检测地理上对于形成有效策略不明显的情况。

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

2018-2019 学年明尼苏达州接种疫苗的学生人数的公共数据集。

这种分析方法可用于多种流行病学应用。一方面,我们可以发现病例数明显高于其他地区的地区。类似地,如果新冠肺炎冠状病毒疫苗可用,我们可以使用该数据集来识别高风险区域。

从这里,我们将冠状病毒感染和疫苗接种率相关联,以便在感染开始不受控制地传播之前,更好地将资源分配给传播感染的最高风险地区,避免这样做可能是的疏忽。****

风险模型

流行病风险模型可以预测某种疾病的感染演变,以及这将如何影响所涉及的其他参与者。

这些模型非常复杂,因为它们依赖于许多特定于每种病毒环境的相互作用。冠状病毒的规模使得风险模型的设计成为一项强制性任务,因为只有这样才能衡量所涉及的成本:确定城市宵禁、关闭市场或拥挤的空间、移民和机场措施等。

有了足够的航班信息,就可以估计来自被归类为“风险”区域的客流,并在此基础上对采取强制性预防措施进行成本效益分析,例如对每个到达的乘客进行诊断,并在检测到的情况下启动健康协议,以避免通过这种方式传染。

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

只有跟踪在一些国家检测到的感染趋势,以及可用的医疗护理能力,才有可能估算出达到饱和的距离。

以意大利为例,该国的医疗保健能力目前为每 1000 名居民 3.4 张病床。穿越这个国家冠状病毒病例的趋势,我们观察以下模型。

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

值得一提的是,最符合流行病学趋势的模型不是多项式模型,而是指数模型。也有适合当地特点的模型来调查地区发展。

考虑到对病例发现趋势和可用床位数量的调整(考虑到之前没有工作),在 36 至 49 天内,意大利医院将没有一张床位可用于治疗新冠肺炎患者。重要的是要考虑到该模型认为所有患者都患有严重疾病,因此需要床位,这不会在包含更多变量的更专业的模型中减少一点趋势。获得一个世界或地区地图来可视化饱和的距离和一些其他风险地图是一个悬而未决的任务,应该很快进行。在这个环节,有一些传播图的例子。

如果我们将这些模型用于全球战略,我们将不得不考虑大规模模型的部署。只有通过像 Google Cloud、Amazon Web Services 或任何其他形式的互联网托管这样的云服务,才能完成如此重大的任务。每个模型都是不同的,因为其不同的体系结构和功能最适合每种情况,并且取决于每个模型的计算、内存和可用性要求。

预防

如果我们能有效地控制疫情,我们就不能停下来。了解最新的最佳实践非常重要,因为只有这样,我们才能为这种性质的危机做好准备。本节讨论数据科学的一个非常重要的部分,它与数据基础设施有关,在数据工程中比在数据分析中更常见。

卫生部门的隐私

保护使用 ML 模型的个人隐私是一个相关的伦理问题,尤其是在使用的数据可能包含敏感信息的情况下,如卫生部门。

我们感谢约翰·霍普金斯大学提供关于这一发展的每日更新,可以在他们的 github 知识库中查阅。

此外,这一主题在未来可能会变得越来越与使用个人数据的组织相关,因为他们将必须遵守保护此类数据流通的新法规,例如通用数据保护法规(GDPR)。

幸运的是,今天已经开发出了(并且仍在开发中)工具,为这种问题提供了技术解决方案,这在本质上是相当法律和政治的。这方面最著名的工具是联合学习、差分隐私和安全多方计算(SMPC)** 。总之,这些工具可以为开发预测模型提供一个框架,同时对数据和模型进行加密,从而保护用户隐私。**

例如,联合学习中的一个范式转变意味着学习不再是集中式的(左),而是分布式的(右)。也就是说,模型移动到数据所在的地方,而不是相反。

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

集中式和分布式学习

想象一下,开发了一种工具,它可以成功地使用生物数据、地理定位和搜索引擎查询(如 Google)的组合来预测流行病的动态。在这种情况下,这些数据可能被用来对用户、他们的日常习惯以及他们的健康状况进行敏感的观察,而这些观察可能会被用于不利的方面。否则,用户可能甚至不愿意提供这些数据,从而使开发这样一个模型变得困难。这就造成了一个道德困境:能够对流行病做出预测会带来直接的社会利益,但这意味着个人隐私会被削弱。这里提到的工具可以促进有效模型的开发,从而克服这一困境。

要了解这个主题的更多信息,我们建议研究一下 OpenMinedDropout Labs 的工作。

结论

尽管国际科学界的反应比以往任何时候都更加敏捷,关于该病毒的信息已在各研究中心共享,并且国际卫生当局已在足够大的范围内及时启动了相关协议,该病毒尚未得到遏制,预计短期内也不会得到遏制。

认为这种病毒的低死亡率是不保持最严格措施的理由将是一个严重的错误。看看冠状病毒的传播模式,很容易想象如何在几周内整个国家的卫生系统可能完全崩溃,进一步危及容易死于这种病毒的人,从而每天增加死于新冠肺炎的人数。

活跃在人工智能模型开发领域的科学界(deep _ dive 的团队是其中的一员)的贡献,提供了有价值的分析和预测方法来缓解这种和其他性质的危机。

我们感谢所有参与这项工作的人,以及那些合作完成这篇文章的人。

曼努埃尔·阿拉贡内斯杰罗姆·阿兰达哈维尔·科尔斯卡蜜拉·布朗内斯阿图罗·马尔克斯 和杰罗姆·马蒂****

利用数据科学挖掘二战的新故事

原文:https://towardsdatascience.com/using-data-science-to-unearth-new-stories-of-wwii-20f968699a55?source=collection_archive---------51-----------------------

胜利日 75 年后,利用大数据、分析和数据可视化照亮过去

1945 年 5 月 8 日,经过五年旷日持久的战斗,第二次世界大战在欧洲结束。

自那以后的 75 年里,关于二战的话题几乎没有被提及。这场战争的大方向已经被反复推敲。

然而,在数据科学和历史的交汇处,有可能发掘出直到今天才被讲述的二战新历史。

两年前,我想出了一个主意,建立一个交互式仪表板,使用大数据讲述二战期间陆军航空队战斗群的故事。

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

华莱士·特鲁斯洛

仪表板后面是我自己的家庭故事:我的祖父沃利在欧洲的 B-24 机组人员中服役至死。他一生都在与创伤后应激障碍作斗争,这让他的战时服役对他生活中的每个人来说都是一个谜。因为我的职业是数据科学家,所以在沃利去世 20 年后,我转向数据来讲述他的故事。

当我开始研究沃利在第 44 炸弹小组的服役时,我最终偶然发现了二战时期新的数字化数据来源。尽管有越来越多的关于二战的数字信息可用,但存放这些数据的数据库使得汇总和分析这些数据变得不可能。

我想超越沃利的故事,看看第 44 炸弹组逍遥法外,以背景沃利的服务。例如,知道沃利在战争中飞行了 42 次任务,但不知道第 44 轰炸大队的飞行员在战争过程中飞行任务的平均次数,这没有什么意义。

通过大量的人工努力和偶然的预感,**我确定沃利执行的任务超过了第 44 轰炸大队所有 5000 名飞行员的 99.5%。**这是从数据中收集的一种见解,它从根本上改变了我对沃利战争和我所认识的祖父的看法。

我知道如果我能创建一个可操作的数据集,就会有成百上千的洞见,就像我收集的关于我祖父的洞见一样,等着被发现。

仪表板的想法源于我想看看第 44 轰炸组所有 5000 名成员的飞行任务、战斗损失和人口统计数据之间的关系——这是一项前所未有的艰巨任务。

我从探索如何利用为业务分析设计的 21 世纪数字工具讲述大数据战争的新历史开始。这些工具是我研究人力资本问题的日常工作的主要内容,在回顾过去时非常有用。

我学到的是,从 75 岁的老人身上挖掘洞察力与从新数据中提取洞察力没有明显的不同。

在建立仪表板之前,我花了一年的大部分时间在网上搜集和清理了 150 万个数据点,涉及战争期间在第 44 轰炸队服役的所有 5000 名飞行员的人口统计数据、战时任务和战斗损失。

在这个过程中,我了解到 75 年前的数据充满了质量问题。最初是用手捕捉,然后手动输入数据库,要纠正的不一致的规模和范围是深远的。获得最终数据集包括 10,000 多行数据清理语法。

带着清理过的数据,我制作了仪表板线框,旨在讲述一个关于集体影响的视觉故事和在第 44 轰炸队服役的 5000 名轰炸机男孩的奇异故事。

经过四个月的休假,第 44 炸弹组数据仪表板在谷歌数据工作室成为现实。

第 44 个炸弹组数据仪表板讲述了一段新的二战历史,直到今天,欧洲战争在 V-E 日结束 75 年后才成为可能。

仪表板从 150 万个数据点中提取数据,具有 100 多种数据可视化,位于数据科学和历史的交汇处。它讲述了第 44 炸弹小组在二战中的集体影响,以及在该小组服役的 5000 名士兵的奇异故事,包括我的祖父沃利。

以下是第 44 轰炸机群在二战期间从未公开的大数据历史,其中包含数据洞察和摘录自 第 44 轰炸机群数据仪表板 :

第 44 轰炸群是驻扎在英格兰的第一个 B-24 重型轰炸机群。他们是空战的先驱。

在盟军登陆欧洲土地的近两年前,第 44 轰炸组飞进了欧洲堡垒。从 1942 年末到 1945 年的胜利日,他们连续飞行了 29 个月。超过一半的第 44 轰炸组的任务(57%)是在 1944 年进行的。在 1945 年五个月的作战行动中,21%的战时任务被执行——与 1943 年十二个月的飞行量相同。

第 44 轰炸队参加了欧洲战区的每一场主要战役。在 344 次任务中,第 44 轰炸组轰炸了 8 个不同的国家,包括德国的 117 个不同的城市和法国的 66 个不同的城市。

第 44 轰炸群的损失是空前的。超过一半(53%)的 B-24 轰炸机在战斗中损失。超过四分之一(26%)在第 44 军服役的飞行员被杀或成为战俘(n=1280)。

从统计数据来看,完成一次服役期是不太可能的。战争结束时,一次旅行包括 35 个任务。阵亡的 44 名飞行员平均执行 9 次飞行任务;成为战俘的飞行员平均执行 11 次任务。

根据人口统计,在第 44 轰炸队服役的 5000 名飞行员来自各行各业:

出生状态

  • 一半来自美国人口最多的 6 个州,另一半来自中间的每个州。
  • 他们来自除阿拉斯加以外的每个州。
  • 将近四分之一(23%)的人出生在纽约、宾夕法尼亚或马萨诸塞州。
  • 五分之一(21%)的人出生在加利福尼亚州、德克萨斯州、伊利诺伊州和俄亥俄州,这些在 1940 年人口普查中人口最多的州不在东北部。

种族&国籍

  • 除了种族,第 44 轰炸组的成员几乎在各个方面都是不同的:第 44 轰炸组 95%的飞行员是白人。注意:非裔美国人不被允许在陆军航空兵中担任战斗飞行员——除了 1941 年接受的少数非裔美国人担任战斗飞行员——即“黑色轰炸机”。

婚姻状况

  • 几乎十分之八(77%)的人在入伍时是单身。这个群体的平均年龄是 22 岁。
  • 只有十分之一(13%)的人在入伍时已经结婚。他们的平均年龄为 27 岁,比单身的同龄人要大。

迄今为止,从未被告知的第 44 轰炸组集体影响的大数据历史一直是焦点,它忽略了在该组服役的 5000 名飞行员的奇异故事。

用大数据制作叙事的美妙之处在于,讲述故事的可能性呈指数级增长,既能看到“大局”,又能放大“大海捞针”般的小故事——只需点击几下鼠标。

仪表板是过滤大数据的有用工具,可以精确定位单一事件。通过创造性地利用 Google Data Studio 等仪表板软件中可用的标准数据元素,可以构建一个类似于数据库的用户界面,这样用户就可以使用各种过滤器轻松确定单个数据点。

在讲述第 44 炸弹组的故事时,与该组集体影响的故事相对应的是搜索单个飞行员故事的能力,这一功能是第 44 炸弹组数据仪表板的基石:

胜利日第 75 天提醒人们过去的存在。在大数据和历史的交汇点上,有一个前所未有的机会来揭示我们祖先的故事。

数据科学家处于一个独特的位置,可以创造性地利用我们的行业工具进行创新,利用大数据、分析和数据可视化挖掘过去的新故事。

数据科学和历史的交集把我带回了我祖父沃利的战争。他默默无闻的英雄主义和克服重重困难生存下来的故事,来自我拼凑的数据点。过了 75 年,人们才知道沃利在战争中做出的巨大牺牲。

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

第 44 轰炸组 B-24 轰炸机在英格兰上空(来源:希普达姆飞行俱乐部博物馆)

大数据有能力从我们个人和集体的历史中讲述深刻的人类故事。

让 V-E 日 75 周年纪念活动鼓励探索历史和数据科学的交汇点:

  • 通过探索位于www.44thbombgroup.org的完整仪表盘,继续学习二战期间第 44 轰炸组飞行员的集体影响和独特故事。
  • 开始探索如何利用你作为数据科学家的技能来挖掘过去的故事,包括你祖先的故事。

用数据寻找最残忍的食人尸歌

原文:https://towardsdatascience.com/using-data-to-find-the-most-brutal-cannibal-corpse-song-bf318d0b3ef4?source=collection_archive---------17-----------------------

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

(来源:瑞安·哈维尔拍摄的照片)

我们能依靠数据来确定有史以来最残忍的食人尸宋吗?—但是,首先,什么是“野蛮行为”?我们真的可以用一首歌来衡量它吗?—是的,我们可以。算是吧。

活跃了三十多年的食人尸是有史以来最重要的死亡金属乐队之一。我仍然记得当他们的第一张专辑“被吃回生命”在 1990 年发行时(那时我十二岁):它在金属界引起了震动。以前从来没有一支乐队在音乐、歌词和视觉方式上表现出如此极端的“残忍”(专辑封面上的“僵尸吃自己的内脏”完美地概括了这一切)。

在这种背景下,受埃文·奥本海默(Evan Oppenheimer)的博客文章的启发,我开始着手用数据驱动的方法寻找最残忍的食人尸体歌曲。

项目简介

这个项目可能看起来有点傻,但它实际上是应用分析的一个很好的练习和展示。当我们不仅缺乏有标签的数据(我们实际上从一开始就没有任何数据——我的唱片架上的食人唱片帮不上什么忙…),而且——更糟糕的是——我们甚至还没有一个清晰的、可衡量的目标值定义时,这是一个不那么微不足道的情况。

所以,最初的问题是:

  • 残忍的定义是什么?
  • 如何衡量一首歌的残暴程度?
  • 我们能获得什么数据来构建这样一个“残暴指数”?

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

食人尸首张专辑的美术作品。30 年过去了,考虑到随后两张唱片的封面艺术,它现在看起来实际上是无害的。但是有一件事你绝对应该认真对待:“父母忠告”贴纸!(来源:文森特·洛克的作品

数据&代码:用 Python 进行分析。从 Spotify API 请求音频相关功能(使用 spotipy 库)和从 genius 网站抓取歌词(使用 API 请求和 web 抓取与 beautifulsoup4 库的混合方法)。如果你想更深入地研究或编码:所有代码,包括一些额外的数据探索、推理和解释(以及一些额外的声音剪辑),都可以在这个 GitHub repo 中找到。

定义“总残暴指数”

根据《免费词典》,残暴被定义为:“无情、残酷、苛刻或无情的状态或品质。”

对我来说,在一首歌里有两种表达方式:

  1. 到了声音特征(比如音乐本身的能量和效价)
  2. 歌词(一个充满‘苛刻而残酷’的词汇)

所以,为了定义一个’总残暴指数 ’ ( TBI )我们必须首先计算然后结合这两个元素。我将把第一个称为’声波野蛮指数 ’ ( sbi ),第二个称为’抒情野蛮指数 ’ ( lbi )。为了构建 TBI ,我们可以取它们的平均值(算术平均值):

总残暴指数,TBI=

*(0.5 声波残暴指数,sbi) +

*(0.5 抒情兽性指数,lbi)

因为我将确保 sbi 和 lbi 都在相同的范围内,从 0 到 1,所以将权重设置为 0.5 意味着歌曲中的总残忍程度由歌曲的歌词和音乐决定。(对我来说没问题,但是当然,如果需要,可以通过设置不同的权重来改变比例。)

野蛮音乐:计算‘声波野蛮指数’

为了确定一首歌曲的声音残忍程度,我依赖于 Spotify 为他们网站上的每首歌曲提供的两个音频功能。你可以通过它们的 API 来访问它们(详见 GitHub repo 中的第一个笔记本)。

许多提供的音频功能不符合我们的特殊目的,但有两个特别有趣。第一个是“”。据 Spotify 称:

  • 是一个从 0.0 到 1.0 的量度,描述一个音轨所传达的音乐积极性。高价曲目听起来更积极(例如,快乐、愉快、欣快),而低价曲目听起来更消极(例如,悲伤、沮丧、愤怒)。

好吧,我们当然希望一首残酷的歌曲大部分是负面的(也就是低价),但我们不希望它是悲伤或沮丧的,所以我们需要结合高价和高能来抵消这一点。幸运的是,Spotify 也为我们提供了这一功能(甚至在描述中提到了死亡金属——罢工!):

  • 能量 是从 0.0 到 1.0 的度量,代表强度和活动的感知度量。通常,高能轨道感觉起来很快,很响,很嘈杂。例如,死亡金属具有高能量,而巴赫前奏曲在音阶上得分较低。对该属性有贡献的感知特征包括动态范围、感知响度、音色、开始速率和一般熵。

因此,让我们来看看从 Spotify 数据库中搜集的 164 首食人尸体歌曲的的分布,每首歌曲的评分范围为 0 到 1:

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

化合价和能量分数分布图。“距离图”显示了歌曲在相应特征的范围频谱上的分布情况。

是的,这些歌曲确实倾向于消极的一面(低价)——但是,见鬼,看看那种能量分布……都被挤在最大值附近!相当激烈的东西,然后…

通过计算能量1-化合价(从 1 中减去化合价,这样更高的值意味着它更“负”)的平均值,我们可以创建一个“声波残暴指数”(sbi)的方程。这样一来,最残酷的歌曲将是那些既高能又低价,同时又对两者同等重视的歌曲:

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

计算所有歌曲的 sbi 导致以下结果:通常所有歌曲的范围在 0.7 和 1 之间。音乐上最残酷歌曲的竞争非常非常激烈。以 2014 年专辑《一个骨骼领域》中的歌曲高速撞击飞溅险胜。(在这里听一段 30 秒的声音样本。不错吧,嗯?)

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

sbi 评分排名前五的歌曲。前十几首歌左右超级接近。

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

所有歌曲的 sbi 分数的频率分布。总的范围是 0 到 1,但是没有一首歌的分数低于 0.7。有很多歌真的很接近 max 值。

因为得分最高的歌曲的得分如此接近,我们不得不希望“抒情暴力指数”能够做出更明确的区分。

(而且,可以这么说,会的……)

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

(非常)早期的食人尸体队列,可能在 1990 年左右。从一些旧金属杂志上扫描下来的。(来源: Pinterest )

残忍的歌词:计算“歌词残忍指数”

这是更棘手的部分,不仅仅是因为我觉得必须以某种免责声明开始:食人尸的歌词很恶心。真的。这是他们应该做的。但是他们音乐的一个好处是你实际上无法理解他们在说什么。;-)

(顺便说一下:1995 年,当时的参议员鲍勃·多尔指责该乐队“破坏了美国的国民性”。在德国,前三张专辑的销售和现场演出直到 2006 年才被禁止。)

尽管如此,我还是从 genius.com 搜集了所有食人僵尸歌曲的歌词。但是如何确定他们的残暴程度呢?

为了帮助我,我找到了 NRC(加拿大国家研究委员会)提供的“化合价、唤醒和支配词汇”。它包括一个超过 20,000 个英语单词及其效价,唤醒和优势分数的列表,范围从 0(最低 V/A/D)到 1(最高 V/A/D)。

而一家独大对我们帮助不大,(再来!)和唤起正是我要找的。根据核管制委员会:

  • 是积极—消极或愉快—不愉快的维度
  • 唤醒是兴奋——平静还是主动——被动维度

那就让我们选择低价、高唤醒度的词汇组合吧!这可能是最接近残酷的。引起强烈负面情绪的东西。是的,从 20,000 个词条的整个词典中筛选出具有最高低价高唤醒分数组合的单词(我称之为 wbi ,‘单词残暴指数’)会返回我们正在寻找的结果:

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

根据“单词残暴指数”在 VAD 词典中排名前 10 的单词。请注意,为了方便起见,我将(1 价)转换成了‘反价’特性。通过简单地取‘唤醒’和‘反价’的平均值,然后将它们全部归一化到从 0 到 1 的范围,为词典中的每个单词计算 wbi。

那么,如何利用这个“野蛮得分”的词汇呢?最简单的解决方案可能是根据每首歌出现的所有单词来计算平均 wbi 值。但是凭直觉,我不认为这是最好的方法,因为我对包含(必要但不重要)“非残酷”单词的分数和分布不感兴趣。

我在寻找一个乐谱

  1. 考虑到在一首歌中使用了多少次野蛮的词语,

2.他们在总字数中所占的比例是多少

3.这就带来了与歌曲持续时间相关的所有这些。(因为,当然,我们不仅仅想要许多残酷的话语,我们想要一个高密度的残酷话语,意味着每分钟尽可能多的残酷话语。)**

所以,我最终选择的 lbi 是:

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

(可以看出,残暴词的字数/道具在最终等式中被数学抵消了。)

**好吧,但这让我们解决最后一个问题:如何将一个词归类为残暴?通过“单词残暴指数”,我们对每个单词都有一个从 0 到 1 的连续评分,现在必须将其转换为“残暴”/“非残暴”的硬二进制分类。

经过一些测试后,我(尽管有些武断)决定这样做:取词典中 20,000 个单词的总体 wbi 分布,并将其中具有最高 wbi 分数的 5%归类为“野蛮”。其余 95%的单词被归类为“非野蛮”——所以总体来说,20 个单词中有 1 个被认为是“野蛮的”:

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

灰线标志着“野蛮”词语的界限。所有单词中有 5%的 wbi 阈值为> 0.797。他们被归类为“野蛮人”。其余的不是。(顺便说一句:我试验了不同的阈值,对最终结果的影响很小,得分最高的歌曲从未改变。)

是时候通过一个基本的 NLP 管道来输入所有这些食人尸体歌曲的粗糙歌词了(对它们进行清理、标记和词条化,然后删除所谓的“停用词”,这些词通常没有什么隐含意义(如果有的话)。结果:每首歌曲的单个内容单词的干净列表,然后使用词典进行 wbi 评分和分类。wbi_score >大于阈值(0.797)的所有单词都被标记为“野蛮”。

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

歌曲文本通过预处理管道的旅程。从字符串到词汇化的标记,到 wbi 分数,再到最终的单词分类。

因此,在根据上面定义的公式计算所有歌曲的“抒情暴力指数”后(歌曲的持续时间是从 Spotify 单独刮出的),我们可以查看最终的分布和具有最高“抒情暴力指数”分数的 5 首歌曲:

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

lbi-分配。请记住,履行机构没有产生一个明确的赢家。这里我们有一些明显的“异常值”在上端!它们是:

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

lbi-score 排名前五的歌曲。

结果很明显。《刺伤惨案》是目前为止“抒情残暴指数评分最高的歌曲。这首歌只有短短的 1 分 41 秒,这无疑是一个很大的帮助。食人者尸体成功地在这么短的时间内包装了许多残忍的词语……(我真的不想深入抒情的细节,但文本以多次重复短语“刺、砍、砍、杀”开始——相信我,这是迄今为止最精彩的部分……)

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

食人尸体后来排队,表现正常的宣传片拍摄。(来源

将所有这些放在一起:计算 TBI

一个人不需要更高的数学学位来决定哪首歌将是最终的赢家,但是,无论如何,让我们把所有东西都汇集在’总暴行指数’ (TBI):

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

哦,我们几乎得到了一个漂亮的钟形正态分布!标准化并组合 sbi 和 lbi 后,我们仍然可以看到上面已经检测到的异常值。

所以,最后…他们来了…有史以来最残忍的 5 首食人尸体歌曲!(据我 TBI。)

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

他们来了。注意“穿刺伤大屠杀”有多突出!

就是这样:《穿刺伤屠杀》是迄今为止最残忍的食人尸歌。所以,现在,如果你敢,请点击这里来听一听。

(如果你想看到更多的分析,比如大麻尸体在音乐上是否与食人尸体一样残忍,或者基督·巴恩斯或乔治·费舍尔是否是更残忍的歌手,而且——真的很有趣——食人尸体似乎在将 TBI 调小一些时处于最佳状态,那么看看 GitHub 上笔记本 中的附录部分。)

资源/大大感谢:

奖金

如果你喜欢(或想喜欢)死亡金属——这些是 2019 年我的唱盘上旋转次数最高的唱片
(它们都是:K-I-L-L-E-R):

1) 石化——掏空空洞 LP

2)女巫的呕吐物——深埋在无底的坟墓里 LP

3)爬山虎—索诺兰恶化 LP

4)弱侧—向前进入黑暗 LP

5)骨骼残骸——注定悲惨 LP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值