TowardsDataScience 博客中文翻译 2016~2018(一百零八)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

将探索数据科学作为一种爱好

原文:https://towardsdatascience.com/exploring-data-science-as-a-hobby-eab19d21dfbb?source=collection_archive---------7-----------------------

Credit: giphy.com

我不会深究我是如何偶然发现数据科学并立即确信这是我想长期追求的东西的故事。或者有一段时间我是如何处于不知从何开始的困惑状态。只是这一次似曾相识。事实上,一年多以前,我也在同样的地方从事编码工作。

我一圈又一圈地看了无数的文章和博文。我怀疑我的兴趣是否源于《纽约时报》的一篇文章,这篇文章将数据科学列为 21 世纪最性感的工作。通过它,所有关于获得这些技能的可能性的唠叨想法变得无法控制。

更不用说我可以玩我的两个爱好了——数学和编程。我非常喜欢这两个人,因为他们经常让我感到沮丧。然而,我很难想象没有他们的生活。我的意思是,你能想象计算机出现之前的生活吗?更别说笔记本电脑了?

一想到企业依赖人脑处理所有数据的时代,我就不寒而栗。该死,那些家伙和女孩真有耐心。你能想象手工计算一张数学表吗?(插入 gif geez)

所以我决定学习一些关于数据科学的东西。在非常好的朋友和同事*(非常感谢你们)的建议下,我开始寻找一个在线课程。感谢上帝,我们生活在这样一个时代,无论身在何处,我们都可以在舒适的客厅里听哈佛大学、麻省理工学院、加州大学伯克利分校、斯坦福大学等等的讲座和课程笔记。mooc(大规模开放在线课程)的力量和潜力是另一个世界。只要你不屈服于打开多个浏览器的诱惑。*

有一段时间陷入了瘫痪。读了这么多关于数据科学及其应用的东西,却没有采取任何实际步骤。我花了一段时间和一个村庄才开始。我开始觉得那些智者说得对,他们说“养育一个孩子需要一个村庄”。

从凯茜·奥尼尔和雷切尔·舒特的书《做数据科学》开始。然后阅读许多数据科学家的简介——既有经验丰富的,也有像我这样的新手。这一切花了我太多时间。很大程度上是因为我脱离了代码的轨道。阅读很有趣,也很有启发性,但归根结底,练习也是一种享受。所以如果你选了一本书,请不要像我一样把你的文本编辑器放在身边。

当我报名参加由神奇的 NairobiWIMLDS 组织的数据科学初学者马拉松时,我遇到了困难。我参加了数据科学 Python 入门课程。其他人做了数据科学的 R 简介。而一些胆大的人则一口气尝试了两种方法。所有这些都在 edX 上。

我喜欢上这门课,由于运行了实际的脚本,我终于明白了很多道理。

我接下来的帖子将分享我的一些笔记、旁注和更多见解。

数学的乐趣不在于将这门学科残酷化为表演行为的廉价竞争。

用视觉分析法探索英国工党投票中的人口统计变化

原文:https://towardsdatascience.com/exploring-demographic-changes-in-the-uk-labour-partys-vote-with-visual-analytics-42cb5e8b6b2d?source=collection_archive---------9-----------------------

这篇文章改编自我在理学硕士数据科学课程中进行的一项分析,研究人口统计变量如何与 2017 年英国大选中工党选票的变化相关联,以及这些关系在全国各地如何变化。

这个项目的概要是非常公开的;选择一个研究问题,使用任何数据集和任何工具进行研究。唯一的限制是分析必须利用视觉分析方法,也就是说,“视觉输出的解释必须通知计算分析,计算输出必须通知你可视化和解释输出的方式。”

我所有的工作都是在 R 中进行的,代码、数据、完整报告都可以在 GitHub 上获得。

介绍

我选择关注最近一次英国大选的结果,部分原因是因为我需要的数据相当大、丰富且可以公开获得,但也因为我渴望看到,我是否可以超越我在新闻中读到的内容来理解这些结果。

过去三年里,英国和全世界都经历了一连串的选举冲击。最近的一次是 2017 年英国大选。竞选活动以保守党享有 20%的民意调查领先优势开始[1],但以非常接近的结果结束(保守党 42.4%,工党 40%[2])。尽管保守党继续执政,但相对于他们的预期表现,这一结果被广泛认为是工党的成功。工党的成功在很大程度上归功于年轻人和受过良好教育的中产阶级的支持,而不是工党传统的白人工人阶级基础[4]——这一群体的支持率下降,特别是在杰里米·科尔宾当选为工党领袖和 2016 年欧盟公投结果之后,被认为是他们失败的原因[5]。这种情况在多大程度上对英国两大政党的未来走向有着重大影响。

我的目标是通过回答三个问题,调查议会选区的人口构成与 2017 年投票方式之间的关系,重点是工党的意外成功:

  1. 工党选举表现的改善在多大程度上与选民的人口构成有关?
  2. 这种关系全国都一样吗?
  3. 这在多大程度上代表了工党支持者的社会构成的变化?

数据和指标

2015 年和 2017 年英国大选的选举数据由英国议会公布[6][7],给出了英国 632 个选区中每个政党的投票数。我排除了北爱尔兰,因为工党在那里没有候选人。人口统计数据来自 2011 年英国人口普查的结果,由英国国家统计局提供[8],人口普查输出区域到议会选区的映射也是如此[9][10][11],从而能够将人口普查与选举结果进行比较。

为了评估选举结果,我使用了两种方法:从保守党转向工党,这是衡量工党支持率的基线指标(他们在 2015 年大选中的投票份额)。摆动计算如下:

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

在哪里

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

分析

第一步是可视化这两项措施在全国的分布,这是通过议会选区的六边形地图来完成的,如下所示。这些地图清楚地显示了每一项措施的不同分布,表明驱动每一项措施的因素可能不同,而且它们可能因地区而异。

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

Figure 1: Left: The Labour Party’s share of the vote in the 2015 General Election. Right: Swing from Conservative to Labour in the 2017 General Election.

这一想法得到了对两个指标之间关系的评估的支持(图 2),该评估仅显示了一周的相关性,以及一些不同的区域模式。例如,伦敦和西北部在 2015 年显示出对工党的强烈支持,并进一步向那个方向摇摆,但东北部、约克郡和亨伯河在 2015 年显示出对工党的强烈支持,并在 2017 年转向保守党。

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

Figure 2: 2017 Swing to Labour vs 2015 Labour Vote Share. Only a week correlation is observed between the two measures.

为了研究人口统计数据并找出可能有助于解释选举结果的因素,我结合人口普查结果创建了 11 个变量,每个变量都可以作为预计投票给工党的群体的指标。这些在下表中列出。

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

Table 1: Census variables selected for analysis and the group or area characteristic which they are expected to represent.

下图的比较表明,一些变量与两种选举措施有类似的关系:代表年轻人(年轻成年人和更年轻的成年人)的变量有正相关性,代表“传统”英国(或缺乏社会多样性)的变量都有负相关性。然而,受教育程度和专业人士都显示出与劳动力的基线轻微负相关,但与摇摆有明确的正相关。穷人或工人阶级的指标都显示出与基线有很强的正相关性,但与摇摆关系不大。同样值得注意的是,在所有变量中,苏格兰的选区始终显示出比全国其他地区更倾向于工党。

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

Figure 3: Demographic Variables vs Labour Vote Share

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

Figure 4: Demographic Variables vs 2017 Swing

接下来,我想模拟这些变量和选举结果之间的关系,并评估它们的地理差异。图 1 表明,我们需要为每个度量使用不同的模型。我使用调整后的 R 分数来确定最强的解释变量(2015 年投票份额的无车(0.49)和 2017 年摇摆的学历(0.28)),并为每个变量创建线性回归模型。每个选区的每个模型的残差(模型预测和实际结果之间的差异)如图 5 所示。残差被标准化为[-1,1]的区间,以说明摇摆通常小于投票份额的事实。

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

Figure 5: Residuals from global univariate regression models, normalised to a range of [-1,1] Left: No Car vs 2015 Labour Vote Share. Right: Degree Educated vs 2017 Swing Towards Labour.

首先要注意的是,这两个模型都过度预测了工党在苏格兰的成功,这表明英国这一地区的投票行为可能有根本的不同。将苏格兰从模型中移除会增加调整后的 R 结果(分别从 0.49 增加到 0.55,从 0.28 增加到 0.38)。

无车模型低估了在英格兰北部和伦敦大部分地区的成功,而高估了在伦敦西部和南部其他地区的成功,这很好地反映了对工党传统基础的公认理解。受教育程度模型显示了英格兰和威尔士相当准确的统一结果,支持了 2017 年工党支持率上升的观点,这是由于不同的群体,而不是那些构成他们历史支持的群体。

对多变量模型的进一步实验显示了与图 5 所示相似的模式,但是调整后的 R 增加到 0.7 和 0.46。报告中详细描述了变量的最终选择以及这些选择的原因。

分析的最后一步是应用地理加权汇总统计数据,如图 6 所示。每张地图都显示了全国范围内两个变量之间的相关性是如何变化的。使用加权邻域为每个选区创建单独的模型,在本例中是 50 个最近的选区。蓝色区域显示负相关,红色区域显示正相关。

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

Figure 6: The first map shows the geographically weighted correlation between 2015 Labour Vote Share and 2017 Swing. Each subsequent map shows the weighted correlation between one demographic variable and one electoral measure.

回答我们的问题

那么,在建立了一系列模型,并绘制了一些漂亮的图表和地图之后,它对我们回答最初的三个研究问题有多大帮助呢?

1.工党选举表现的改善在多大程度上与选民的人口构成有关?

工党在 2017 年大选中的改善结果确实显示了与议会选区人口构成的相关性,尽管没有他们的基线支持那么强烈。

这种摇摆强度的最重要指标是那些代表年轻、受过教育、中产阶级(20 至 44 岁、具有学位水平资格或从事专业水平就业的居民比例)的指标,分别解释了结果中 20%、28%和 23%的变化。这与 2015 年投票份额的最强指标形成了对比,这些指标与较贫困或工人阶级社区有关(居住在社会住房、没有汽车或健康状况不佳的人口比例(36%、49%和 17%)。

社会多样性在 2015 年的结果和 2017 年的变化中都是不变的,在两种情况下都是负相关的,尽管这一类别在两种情况下都不是最重要的。

2.这种关系全国都一样吗?

全球模型的残差显示,尤其是苏格兰和英国其他地区之间存在差异。地理加权模型显示,基线支持指标往往具有相当的全球性(苏格兰的某些情况除外);在英格兰和威尔士,相关性通常在相同的方向,具有相似的强度,特别是多样性和工人阶级指标。

与挥杆的相关性通常较弱,并在几个测量中显示出较大的区域差异。然而,最强的指标确实显示了一种全球模式。

3.这在多大程度上代表了工党支持者的社会构成的变化?

在国家一级,没有一个指标显示从 2015 年的结果到 2017 年的波动从正相关转为负相关,这表明工党在已经支持它的群体中没有失去重要的支持。受教育程度和专业人士之间从负相关到正相关的转变可能表明工党支持者的人口构成发生了变化,但很难对问题 3 做出定量回答。对这些指标所贡献的相对票数进行进一步分析,并对较长时期内的结果进行检查,将有助于更详细地回答这个问题,但这超出了本分析的范围。

反射

方法的有效性

对于这种类型的分析,人们必须小心,不要试图对个人投票行为下结论。虽然我们观察了选区一级的关系,但我们不知道每个选区内的团体是如何投票的,也不知道他们的相对投票率是多少,我们也不能说某个团体以某种方式投票。分析也不试图捕捉可能影响投票行为的具体地方问题,也不能说明自 2011 年人口普查以来可能发生的人口变化。民意调查可能更容易建立这种联系,在民意调查中,一个人的人口统计、观点和投票之间有直接联系。然而,这些都是昂贵的,并且很少在足以揭示本研究调查的区域差异的规模上进行。这种分析的优势在于它包括每一个人和每一张选票,因此它的范围比民意测验分析要广得多。

选举措施的选择提供了有用的结果,但这些措施是有限的。在苏格兰,保守党和工党之间的摇摆可能过于简单,因为两者都不是那里的最大政党,而且它确实表现出与全国其他地区不同的模式。苏格兰也在 2014 年举行了自己的英国成员资格公投;一个非常重要和特殊的政治事件。包括苏格兰民族党在内的具体苏格兰分析可能会更好地理解这些关系。

选择六边形地图显示地理关系效果很好,可以对结果进行清晰的视觉解释,尽管地理失真意味着特定位置的身份并不总是立即明显。它们与全球回归模型一起使用对回答问题 2 特别有帮助。

六边形图是散点图的一个很好的补充,散点图提供了一个高层次的相关性视图,但由于大量的数据点和相对大量的区域,很难详细解释,使得很难区分图中心拥挤的模式。对单个区域的进一步分析将是有趣的,但作为这项工作的一部分是不可行的。

相关性的地理加权模型显示了有趣的区域差异,但理解这些不同的相关性如何组合成一幅整体图景并不简单,而且量化它们如何影响两个单独的选举措施组合尤其困难。使用基于分区的聚类的进一步工作可能对此有所启发,并有助于获得问题 3 的更可量化的答案。

此分析中使用的技术可高度推广到复杂空间多元数据常见的其他领域。除了政治之外,类似的方法可以应用于调查各种社会问题答案的空间变化,例如比较任何财富或收入平等、健康、教育成果或环境变化。

含义

在英国的多党、得票最多者当选的选举制度中,了解地方一级的投票模式是如何受到影响的非常重要。在选举之前,有很多关于全国民意调查的讨论,以及全国投票份额的变化如何反映在议会席位中。众所周知,这种推断很难,正如最近的几次选举所显示的那样,相对较小的民意调查并不总是能很好地概括全国的情况。因此,了解一个政党在人口统计和区域变量方面的表现是非常有价值的。然而,这种分析本质上是反应性的;它可以提供对过去结果的洞察,但这并不意味着它可以用来预测未来的选举,因为采样和未来事件之间的差距太大了。

结果显示,受教育程度变量与倾向于工党的相关模式类似,因为其他工作已经注意到在 2016 年欧盟公投中投票[12],尽管这种关系没有那么强。这支持了一种观点,即工党的部分成功是对公投结果的反应,不满的专业保守党,留欧选民转向工党,而工人阶级脱欧投票工党支持者的预期相反反应并没有成为现实。然而,也有人认为,这两个结果都反映了选民行为中更为根本的变化[13]。

如果工党能够保持这种模式,在保持现有支持的同时,扩大他们对新人口的支持基础,这显然对他们有利。对照人口指标分析选区一级目前的选举差额可能是一个值得探索的有趣途径,以便了解这些模式的继续会在未来产生多大的影响。

最后

谢谢你能走到这一步!请随时留下任何评论、反馈或掌声。如果你是一个真正喜欢惩罚的人,那么完整报告将会更详细地介绍你在这个过程中所使用的方法和做出的选择。

参考

[1] J. Holder、N. Kommenda、C. Barr 和 S. Clarke,“特里萨·梅的选举赌博是如何失败的?|政治|卫报。”【在线】。可用:https://www . the guardian . com/politics/ng-interactive/2017/jun/09/Theresa-may-election-gamble-fail-conservatives-majority-polls。【访问时间:2017 年 12 月 1 日】。

[2]“2017 年英国大选:全部结果|政治|卫报。”【在线】。可用:https://www . the guardian . com/politics/ng-interactive/2017/jun/08/live-uk-election-results-in-full-2017。【访问时间:2017 年 12 月 1 日】。

[3] P. Walker 和 J. Elgot,“当工党赢得席位时,科尔宾蔑视怀疑者|政治|卫报。”【在线】。可用:https://www . the guardian . com/politics/2017/jun/09/Jeremy-cor byn-labour-defies-doubles-gain-seats-election-2017。【访问时间:2017 年 12 月 31 日】。

[4] H .刘易斯,“是什么推动了工党的成功?对移民采取强硬路线,并向中产阶级发出呼吁。”【在线】。可用:https://www . newstatesman . com/politics/June 2017/2017/06/what-driven-labours-success-tough-line-immigration-and-appeal-middle-class。【访问日期:2017 年 12 月 31 日】。

[5] K .麦肯,“民意调查显示,工党现在是工人阶级选民中第三大受欢迎的政党。”【在线】。可用:http://www . telegraph . co . uk/news/2017/02/13/labour-now-third-popular-party-in-working-class-voters-poll/。【访问日期:2017 年 12 月 31 日】。

[6]英国议会,“2015 年大选结果—data . Parliament . UK”[在线]。可用:http://www . data . parliament . uk/dataset/general-election-2015。【访问时间:2017 年 12 月 13 日】。

[7] C .贝克《2017 年大选:全部结果与分析》【在线】。可用:http://research briefings . parliament . uk/research briefing/Summary/CBP-7979。【访问时间:2017 年 12 月 13 日】。

[8] O .英国政府,“批量数据下载—国家统计局。”【在线】。可用:https://www . ons . gov . uk/census/2011 census/2011 census data/bulk data/bulk data downloads。【访问时间:2017 年 12 月 1 日】。

[9] O. for N. S. UK Government,“英格兰和威尔士地方当局辖区的输出区域(2016 年 12 月)查找|开放地理门户”,2016 年。【在线】。可用:http://geo portal . statistics . gov . uk/datasets/output-area-to-ward-to-local-authority-district-2016-12-lookup-in-England-and-Wales。【访问时间:2017 年 12 月 11 日】。

[10] O .对于 N. S. UK 政府,“从威斯敏斯特议会选区到地方当局选区(2016 年 12 月)在英国|开放地理门户中的查找。”【在线】。可用:http://geo portal 1-ons . open data . ArcGIS . com/datasets/f 52 c 48 ea 5 cf 2494 b 824d 35 f 4 be 88 F2 EC _ 0/data。【访问时间:2017 年 12 月 11 日】。

[11]苏格兰政府,“2011 年数据区和中间区查找”【在线】。可用:http://www . gov . scot/Topics/Statistics/SNS/SNS ref/dz 2011 lookups。【访问时间:2017 年 12 月 13 日】。

[12] R. Beecham,A. Slingsby 和 B. Chris,“英国投票脱离欧盟背后的地方差异解释”,2016 年。

[13] W .詹宁斯和 g .斯托克,“向世界主义轴心倾斜?英格兰的政治变化和 2017 年大选。Q. ,第 88 卷第 3 期,第 359–369 页,2017 年。

在 Azure 机器学习工作台中通过示例探索派生列

原文:https://towardsdatascience.com/exploring-derive-column-by-example-in-azure-machine-learning-workbench-43a7842e61b?source=collection_archive---------3-----------------------

与我最近在博客上分享的关于Visual Studio Code Tools for AI的内容类似,Azure Machine Learning Workbench 或 AML Workbench 也是最新的人工智能工具之一,由微软在 2017 年 9 月的 Microsoft Ignite 上发布。

AML Workbench 是一个跨平台的桌面客户端(目前 Windows 和 macOS 都支持),用于数据辩论和实验管理。我发现 AML Workbench 的一个有趣的特性是“通过示例导出列”。

通过示例导出列转换使用户能够使用用户提供的导出结果示例来创建一个或多个现有列的衍生物。导数可以是支持的字符串、日期和数字转换的任意组合。

旁注:如果你还没有安装和设置你的 AML 工作台,你可以查看我的博客文章 设置你的 Visual Studio 代码工具用于人工智能 ,在那里我也分享了如何设置 AML 工作台,因为这是使用 VSCode 工具用于人工智能的先决条件。或者你可以直接查看他们的官方文档页面 这里

入门指南

为了向您展示该功能的工作原理,请打开您的 AML 工作台并创建一个新项目(在本教程中,它可以是一个空白项目)。

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

导入数据集

我将在这个例子中使用的数据集是来自 kaggle 的 NASA 宇航员,1959 年至今的数据集,你可以在这里下载

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

NASA Astronauts, 1959-Present Data preview

创建项目并准备好数据集后,您需要:

  1. 点击“数据”图标
  2. 添加新的“数据源”

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

3.选择“文件/目录”

4.使用“本地”路径添加astronauts.csv文件

5.点击“完成”

成功创建了一个astronauts.dsource文件后,您应该能够看到:

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

创建数据准备包

既然我们已经有了数据源,现在我们将创建一个数据准备包,我们将使用它来转换我们的数据。

数据准备提供了一套有效探索、理解和解决数据问题的工具。它允许您使用多种形式的数据,并将这些数据转换成更适合下游使用的干净数据。

  1. 再次点击“数据”图标
  2. 右击astronauts数据源并点击“准备”
  3. 添加“数据准备包名称”,然后按“确定”

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

这将在您的项目目录中创建一个astronauts.dprep文件,并显示一个与我们添加数据源后看到的几乎相似的页面。

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

通过示例转换派生列

让我举几个例子来说明这种转变是如何进行的。

转换日期

假设我们想要将出生日期列的格式从yyyy-mm-dd 00:00:00更改为mmm-dd-yyyy

  1. 右键单击“出生日期”列,然后选择“根据示例导出列”
  2. 键入您希望在“出生日期”列右侧新添加的列中使用的日期格式示例。
  3. 单击“确定”接受转换

日期转换应该如下所示:

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

Date Transformation

转换字符串

对于这个例子,让我们通过执行与上一个类似的步骤,尝试将性别格式从男性/女性更改为 M/F。

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

String Transformation

转换数

在下一个示例中,我们将更改 Space Flight (hr) 列的数字格式,为数字添加一个适当的逗号。

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

Number Transformation

您还可以通过转到“步骤”部分,右键单击特定步骤,然后按“编辑”来编辑您已成功做出的更改。从那里,您将能够更新列的值。

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

如何看待 Azure 机器学习工作台中的 Derive 专栏 By Example?如果你想要更多的例子,你可以去他们的官方文档页面这里

使用 word2vec 探索情感组合

原文:https://towardsdatascience.com/exploring-emotion-combinations-using-word2vec-54c8be43fa6?source=collection_archive---------5-----------------------

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

Photo by Tengyart on Unsplash

在这篇博文中,我们使用 word2vec 探索了两组情感组合。具体来说,一张是由罗伯特·普卢奇克在 1980 年制作的,另一张是由 vox.com 的 T2 制作的流行媒体图表。我们将范围限制在二元组,即两种基本情绪的组合,构成一种更复杂的情绪。

正如 **;喜悦惊喜给予喜悦。**

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

Above: The table has been extracted from the Wikipedia page.

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

Above: The wheel of emotions contains a superset of the previous table, where similar emotions in the wheel are near to each other. Also extracted from the Wikipedia page.

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

Above: Popular media ‘best-guess’ on emotions dyads based on characters from Inside Out. From Vox.com

给大家一些背景资料,这部电影描述了一个孩子进入青春期后如何产生复杂的情感。在这里,一个混合了的快乐和悲伤被描绘出来。**

方法

为了探索情绪的可加性,word2vec 是一个很好的候选模型。如前几篇文章所述,我们看到分布式表示模型(如 word2vec)可以解决以下不同复杂性的类比,并建议使用斜体单词。

男人:国王::女人:皇后

Lady Gaga:美国::滨崎步:日本

等效地,上述词对类比可以表示为等式:

男人+国王-女人= 女王

Lady Gaga +美日= 滨崎步

在接下来的部分中,我们将演示单词向量的加法属性,以找到斜体的单词。

喜悦+惊喜= 喜悦

为了实现这一点,我们使用来自的预训练 word2vec 向量,这里是。有了 gensim ,我们可以轻松使用这些向量。

使用上面的代码,可以从 word2vec 中提取两种情绪之和的最相似的单词,计算建议单词和人类建议之间的余弦相似度。这个相似性度量的范围从-1(完全相反)到 1(相同的意思),最后,检查来自人类的建议情感是否在 word2vec 的前 10 个建议单词内。

这篇文章的其余部分被组织成两个研究,每个研究测试 word2vec 和一组特定建议之间的一致性。在每项研究中,我们将首先展示结果,然后进行讨论。

研究 1 —普卢奇克

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

Above: Study 1 results

此时,需要注意的是,预训练的 word2vec 模型已经在 Google News 数据集上进行了约 1000 亿字的训练。作为一个以新闻为中心的数据集,语料库并不期望产生一个模型来对情绪进行微妙的区分。

令人鼓舞的是,word2vec 显示出与 Plutchik 的暗示情绪基本一致,所有情绪对的积极得分相似。

我们观察到 word2vec 为一些情感对建议了相同的单词。例如,悲伤在第 9、11、16、17、18 对中暗示。每当悲伤被加上什么东西的时候,悲伤就被暗示出来。这突出了用新闻数据集训练的模型的情感之间的有限区别。

Pair 13 是一个有趣的组合,是惊喜悲伤的总和。Plutchik 建议不赞成而 word2vec 建议失望我个人更喜欢这个。然而,这只是一个外行对心理学的看法。

Pair 7 是另一个有趣的,word2vec 认为恐惧信任否定信任并暗示不信任*,而 Plutchik 则暗示提交恐惧信任的累积。两者似乎都有道理,这表明单词可以以多种方式有意义地组合在一起。该组合可以通过句子中的词汇结构来修改。*

对 21 接收 n/a,因为 word2vec 字典没有病态*。*

研究 2 —从里到外

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

Above: Study 2 results

研究结果与研究 1 非常相似,在研究 1 中,我们观察到人类建议和 word2vec 之间的一般一致性,以及跨情感对重复建议(例如悲伤沮丧*)。*

结论

这结束了一个简短的帖子,说明了词的通用分布式表示的另一种用途,并强调了使用相关语料库来训练词向量的重要性,如果它将用于专门领域的话。

原载于 2018 年 1 月 30 日 joshuakyh.wordpress.com**

通过数据探索传染病:登革热

原文:https://towardsdatascience.com/exploring-infections-through-data-dengue-fever-b35f64842601?source=collection_archive---------12-----------------------

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

A 1920s photograph of efforts to disperse standing water and thus decrease mosquito populations — Wikipedia ( https://tinyurl.com/y8zcj7te) Public Health Image Library (PHIL) — This media comes from the Centers for Disease Control and Prevention’s Public Health Image Library (PHIL)

这一年是 1780 年,“胆汁返流热”的病例困扰着费城。国父和医生本杰明·拉什在 1789 年将其描述为“断骨热”,现在人们普遍认为这是我们现在称之为登革热的第一次有记录的爆发。拉什指出,他的患者出现了严重的发烧、头部、背部和四肢疼痛,在某些情况下还出现了出血症状(我们现在称之为登革出血热)。这种疾病通常是自限性的,在某些情况下是致命的,但在几乎所有情况下对受感染的个体来说都是创伤性的;突然出现难以忍受的发热和肌肉疼痛,许多患者还出现呕吐以及躯干、手臂、腿和面部出现明显皮疹。拉什在 18 世纪费城所描述的,尽管是第一个被完整记录在案的案例研究,被认为已经困扰了人类几个世纪。最近的证据表明,它起源于大约 1000 年前,但只是在最近几百年才在人类中确立了地方性传播。

现在对 21 世纪的登革热有了很好的了解。它是由登革热病毒引起的,登革热病毒是黄病毒属的一员(使其与其他令人讨厌的病毒如黄热病病毒、西尼罗病毒和日本脑炎病毒密切相关)。感染最常见的是由 T4 伊蚊传播,在一些罕见的病例中是由受感染的献血者输血引起的。

在有充分治疗的地方,死亡率低于 1%,但在没有这种治疗的地方,登革热仍然是一个严重的公共卫生问题,全球每年有数千人死亡。2013 年,全球报告有 6000 万例感染,约 13600 例死亡。不出所料,发展中国家受到的打击最大,这反映了全球伊蚊的分布。其中一个发展中国家是菲律宾,它将是本文感兴趣的主题。

我将通过观察 2008 年至 2016 年间菲律宾的登革热病例来探索用 R 编程语言进行时间序列分析的方法。该数据集可在 Kaggle 上访问,包含菲律宾每个地区每 100,000 人每月记录的登革热病例。我们的目标是观察这一时期登革热病例的趋势,并尝试预测 2016 年以后的趋势。

我假设读者对 R 有所了解。如果没有,我强烈推荐阅读 Garrett Grolemund & Hadley Wickham 的 DataCamp 或 R for Data Science,后者是免费的。

这个项目的所有 R 代码都可以在我的 github 页面上的 Jupyter 笔记本中找到。我个人是 Tidyverse 的忠实粉丝,我广泛使用这个 R 包集合。

先看数据

在使用readr包中的read_csv方法将数据加载到 tibble dataframe 中之后,我使用str函数来洞察数据的内部结构:

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

所以首先映入我眼帘的是,月份和地区存储在字符数据类型下,年份存储为整数。更恰当的做法是将这些变量存储为类别,我可以使用因子函数。

data$Month <- factor(data$Month, levels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))
data$Region <- factor(data$Region)
data$Year <- factor(data$Year)

准备就绪后,我现在可以使用summarystr函数在继续之前查看数据。

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

可变月份有 12 个级别,这是有意义的,因为一年有 12 个月。该数据集描述了 9 年,17 个地区中的每一个都有一个类别。整个数据集的登革热病例平均数为 6.395,中位数为 11.297,最大值为 147.324。

现在是时候想象登革热病例如何逐月和逐年变化了。我总是喜欢从简单开始,然后逐步完善,所以我从一个按年份分面的条形图开始。

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

因此,我可以从上面看到,在 2012/13 年病例急剧增加,然后在 2016 年逐渐下降。以上也暗示了季节的变化。我不太喜欢多面条形图。所以我去寻找灵感,发现了这篇奇妙的博文和这篇 Kaggle kernal

data %>%
    group_by(Year, Month) %>%
    summarise(Total_Cases = sum(Dengue_Cases)) %>%
    ggplot(aes(Year,Month,fill=Total_Cases)) + 
    geom_tile() +
    scale_fill_gradient(low = "white", high = "red", name = "Dengue  cases/ \n100,000 population") +
    xlab(label="Year") + 
    ylab(label="Month")

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

data %>%
    group_by(Year, Region) %>%
    summarise(Total_Cases = sum(Dengue_Cases)) %>%
    ggplot(aes(Year,Region,fill=Total_Cases)) + 
    geom_tile() +
    scale_fill_gradient(low = "white", high = "red", name = "Dengue cases/ \n100,000 population") +
    xlab(label="Year") + 
    ylab(label="Month")

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

在第一张热图中,我可以通过垂直方向的颜色变化看到季节性模式,然后通过水平方向的变化看到 2012/13 年左右的高峰。

第二张热图显示了每个地区的病例数。它显示了在 2012/13 年爆发期间,中非共和国地区是受影响最严重的地区,其次是第六区、第一区和第七区。

时间序列

让我们开始绘制一段时间内登革热病例的数量,并讨论时间序列分析。首先,我将创建一个包含登革热病例总数的数据框架,然后生成一个时间序列对象。

total_cases <- data %>%
    group_by(Year, Month) %>%
    summarise(Total_Cases = sum(Dengue_Cases))total_cases_ts <- ts(total_cases$Total_Cases, start=c(2008,1), end=c(2016,12), frequency=12)

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

上面显示了一个时间序列对象,这是一段时间内观察到的登革热病例的向量,其中频率被指定为 12,与公历的月份相对应。您会注意到我是如何指定开始和结束日期的。

一般来说,时间序列的历史模式可以用以下几个分量来描述:季节分量( St )、趋势分量( Tt )、周期分量、残差或误差( Et )。

并非所有的时间序列都由这些组成部分组成,但是当存在这些组成部分时,解构时间序列以独立观察它们可以获得巨大的洞察力,并形成时间序列分析的基础。提取成分的过程被称为分解。

加法与乘法分解

当分解一个时间序列时,我们要么使用加法模型,要么使用乘法模型。在一个附加模型中,我们假设季节性效应的幅度每年都是相同的。换句话说,比如说,10 月和 12 月之间的登革热病例差异不会逐年改变。

或者,乘法分解假设季节性成分以比例变化到序列的趋势,简单地将这些成分相加不足以重建序列。

在这里,我假设季节差异在多年的观察中保持不变,因此将使用一个加法模型。

稍后,我将创建一个 ARIMA 模型(见下文的完整解释)。这些模型可以适用于季节性和非季节性数据。季节性 ARIMA 模型有更多的参数,但是因为我将使用auto.arima()函数,它为我们搜索最佳订单参数,所以我不会将数据非季节性化。对于非季节性数据和普通非季节性 ARIMA 模型的完整解释和例子,我将读者引至此处

我使用预测包中的stl()函数来生成一个分解(stl 默认使用一个附加模型)。

plot(stl(total_cases_ts, s.window = "periodic"))

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

我可以在这里看到 2012/13 年左右登革热病例的高峰,但也可以看到季节性成分和随机噪音的数量(由剩余部分显示)。

平稳时间序列和 Dickey-Fuller 检验

为了拟合 ARIMA 模型并预测未来的登革热病例,要求时间序列是平稳的。那么到底什么是平稳时间序列呢?

如果时间序列的均值、方差和自相关结构不随时间变化,则称该时间序列是平稳的。这对 ARIMA 很重要,因为它使用序列之前的滞后(时间段)来模拟其行为,并且模拟具有一致属性的序列涉及较少的不确定性(如果序列的统计属性在未来与过去相同,这使得预测任务变得简单!).

有一种简便的正式统计检验可以告诉我们一个时间序列是否是平稳的,这就是扩展的 Dickey-Fuller (ADF)检验。ADF 程序测试观察值的变化是否可以用滞后值和线性趋势来解释。如果 Y 的变化没有受到滞后值的显著影响,并且存在趋势成分,那么零假设(假设序列是非平稳的)不会被拒绝,并且该时间序列被称为“非平稳的”。

adf.test(total_cases_ts, alternative = "stationary")

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

p 值大于 0.05,因此不能拒绝零假设,因此我们说该数据是非平稳的。

快速浏览 ACF、PACF 和 ARIMA

登革热病例时间序列是非平稳的。那现在怎么办?我可以用一种叫做差分的技术让一个非平稳的时间序列平稳。趋势或周期是通过从上一个周期中减去一个周期的值来去除的。这背后的概念是,如果原始时间序列在一段时间内没有恒定的属性,那么从一个时期到另一个时期的变化可能会有。

有一些诊断可以帮助确定差异的顺序,或者您可以让auto.airma()为您解决这个问题。但是理解 ARIMA 模型的顺序参数是有好处的。但是等一下…ARIMA 到底是什么!?

ARIMA 代表“自回归综合移动平均线”。让我们来分析一下。MA 代表“移动平均数”,因此不是采用特定月份或年份的平均登革热病例,而是 1 月、2 月和 3 月的平均登革热病例,然后是 2 月、3 月和 4 月的平均病例,依此类推。

AR 代表“自回归”并代表内部回归,因此来自某个时间序列的数据被用于预测同一时间序列的数据。

“我”只代表“综合”。因此,当你把所有这些放在一起时,ARIMA 模型将根据同一时间序列的移动平均值来预测该时间序列的未来值。ARIMA 模型有时也被称为 Box-Jenkins 方法。

ARIMA 模型由三个序参量指定: *p,q。*我们之前已经遇到过 d 。这是差异的程度,并在模型的集成组件中指定( I(d) )。 p 指定在模型中使用的滞后数,是自动回归分量 AR§的一部分。MA(q) 是移动平均分量,代表模型的误差,其中 q 定义要包含的项数。除了刚刚描述的参数,如果 ARIMA 模型具有季节性结构,还包括另外三个参数, *(P,D,Q)m,*描述了 m 周期的季节性成分。

虽然auto-arima将为您优化这些参数,但让我们讨论两个图,它们可以帮助您选择 *p,d,*和 *q 的最佳值。*它们是自相关图(ACF)偏自相关图(PACF) 。ACF 图显示了一个序列和它的滞后之间的相关性。该图可以告知要使用的差分顺序以及移动平均分量的顺序。另一方面,PACF 图显示了一个序列和它的滞后之间的相关性,这种相关性不能用以前的滞后来解释,因此有助于确定自回归分量的阶数。

r 生成具有 95%显著性边界的图,其中具有滞后的显著自相关将超过这些边界。我们可以使用 R 中的acfpacf函数来生成这些图。

我们去做模特吧!

您会注意到下面我将通过auto.arima函数直接使用原始数据集。这是因为函数为我执行差分。它通过最小化一组信息标准来确定自回归函数、差分、移动平均函数的最佳参数,以及季节模型的最佳参数(阅读更多信息此处此处)。

dengue_arima <- auto.arima(total_cases_ts)

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

然后,我可以使用定义的模型定义一个forecast对象,并指定我希望“预测”未来的月数。让我们试着预测一下 2017/18 年的病例数。

dengue_future <- forecast(dengue_arima, 24)
plot(dengue_future, ylab = "Dengue cases per 100,000 population")

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

该模型预测这两年的模式与 2016 年相似,但具有高度的不确定性。那么模型表现如何呢?从世卫组织的数据来看,与 2016 年相比,2017 年的病例数实际下降了 36.9%。

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

Figures from WHO (https://tinyurl.com/yblwvssk). Note that the unit for the y-axis is total number of cases observed, we divide by 100 to get cases per 100,000, showing a dramatic decrease in the peak number of cases in comparison to 2016.

ARIMA 模型成功地捕捉到了季节性趋势,但高估了登革热病例总数。

走向

我真的很喜欢这个项目,觉得这是一次很好的学习经历。当我刚开始的时候,我对 ARIMA 模型不是很熟悉,这是我第一次尝试用 R 语言进行时间序列分析。

基于菲律宾登革热病例的主题,我想探索递归神经网络在预测未来病例中的应用,但包括与登革热暴发相关的特征,如天气和迁移数据。我希望将此作为未来文章的主题。

对于这个项目,我要感谢互联网和每天在 medium 上发表的鼓舞人心的作品。下面列出了我用来学习时间序列分析和预测的一些极好的资源,以及关于登革热事实的来源:

通过数据探索传染病:美国麻疹的交互式可视化

原文:https://towardsdatascience.com/exploring-infections-through-data-interactive-visualisation-of-measles-in-the-usa-6ae8d5949538?source=collection_archive---------20-----------------------

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

在美国,1912 年,麻疹成为全国性的传染病。因此,美国所有的医疗保健提供商和实验室都必须向联邦政府报告确诊病例。今天我将关注从 1928 年到 2002 年在美国收集的麻疹数据。这是从项目 Tycho 获得的,该项目旨在向全球研究人员、数据科学家、学生和公众提供大规模公共卫生数据。这些数据来源于每周国家法定疾病监测系统报告,包括州一级的标准化计数和基于历史人口估计的每 100,000 人的发病率。

这个项目的目的是探索不同的数据可视化方法和 BokehJS 的能力。我被 BokehJS 的结果淹没了,我强烈推荐探索这个包。BokehJS 提供了一个强大的 Python API,允许你以 D3.js 的风格创建交互式绘图。我主要是从他们在网站上提供的文档和优秀教程中了解 BokehJS 的。

我也强烈推荐这些资源:

  • 威廉·科尔森(William Koehrsen)关于 BokehJS 创建 BokehJS 仪表板的文章非常精彩,分为三部分:第 1 部分第 2 部分第 3 部分
  • Eugine Kang 在这里给出了一个很好的基本概述。
  • 来自 FreecodeCamp 的 Mandi Cai 在这里对散景和 D3 做了一个很棒的对比。
  • Eric Strong 可以帮助你开始在 Heroku 上运行一个散景应用程序。真是救命恩人(一般来说也是一个非常棒的博客!)

对于所有其他查询,Stackoverflow 和 Google 通常就足够了。

这个项目的所有代码可以在我的 Github 这里找到:https://github.com/burtonbiomedical/measles_map

我的 BokehJS 努力的最终产品在这里展示(这是一个在免费 Heroku dyno 上托管的 Bokeh Python 应用程序。它的性能落后于本地主机,可以从优化中受益。):【https://measles-bokeh.herokuapp.com/

麻疹是什么?

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

An electron micrograph of the measles virus. Photo Credit: Cynthia S. Goldsmith Content Providers(s): CDC/ Courtesy of Cynthia S. Goldsmith; William Bellini, Ph.D. — This media comes from theCenters for Disease Control and Prevention’s Public Health Image Library (PHIL), with identification number #8429

苏格兰医生弗朗西斯·霍姆发现麻疹是由血源性传染因子引起的。1758 年,爱丁堡爆发了一场麻疹流行病,霍姆开始试验麻疹疫苗。

麻疹传染性很强,通过感染麻疹病毒的人咳嗽和打喷嚏传播。该病毒有 10 至 12 天的潜伏期,随后症状会持续一周以上。这些症状最初包括高烧、咳嗽、其他类似流感的症状和眼睛发炎。症状期开始后三天内通常会出现明显的红色扁平皮疹,从面部蔓延至身体其他部位。大约有三分之一的病例会出现并发症,其中一些可能会改变生活,甚至是致命的,包括失明、脑炎和肺炎。尽管许多人可以存活并从感染中恢复,但每一千个病例中就有一个会导致急性脑炎,通常会导致永久性脑损伤,在不发达国家,死亡率已经高达 28%

尽管弗朗西斯·霍姆的疫苗接种尝试没有成功,但约翰·F·恩德斯和托马斯·C·皮布尔斯博士于 1954 年成功地从 13 岁的戴维·埃德蒙斯顿身上分离出麻疹,后来研制出第一种麻疹疫苗。但自 1968 年以来,莫里斯·希勒曼及其同事开发的改良弱麻疹疫苗为成功接种麻疹疫苗铺平了道路。

数据争论

我将在这里给出项目结果的简要总结,但是完整的细节请查看我的 Jupyter 笔记本

让我们先来看看第谷项目提供的数据:

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

原始麻疹数据的时间变量有一个令人困惑的列,所以我在 apply 方法中用一个很好的 lambda 函数创建了一个年和周数列。熊猫图书馆对于数据争论来说确实是极好的。

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

然后,我为自己创建了一个总结函数,我可以在整个项目中使用它来生成汇总信息的数据框架,例如每年的总病例数、每周平均发病率以及每个州和年份组合的每周平均病例数:

def summarise(df, group_by):
    #Group data
    grouped = df.groupby(by = group_by)
    #Summarise data as Series then convert back to Dataframe
    cases_sum = pd.DataFrame(grouped["cases"].sum()).reset_index()
    cases_avg = pd.DataFrame(grouped["cases"].mean()).reset_index()
    avg_incidence_year = pd.DataFrame(grouped["incidence_per_capita"].mean()).reset_index()
    #Give columns sensible names
    avg_incidence_year = avg_incidence_year.rename(columns = {"incidence_per_capita": "avg_incidence_per_week"})
    cases_sum = cases_sum.rename(columns = {"cases": "total_cases_per_year"})
    cases_avg = cases_avg.rename(columns = {"cases": "avg_cases_per_week"})
    #Merge dataframes
    cases = pd.merge(cases_avg, cases_sum)
    new_df = pd.merge(avg_incidence_year, cases)
    return new_df

然后我得到了我需要的地理坐标(你看我要去哪里……敬请关注地图!)从散景库中下载,如下所示:

from bokeh.sampledata.us_states import data as States

我将地理信息嵌入到我的熊猫数据框架中,以便在项目后期使用。更多信息请参考我的 GitHub 上的笔记本。

Seaborn 的静态图

在我进入数据科学世界的旅程中,我非常喜欢使用 Python Seaborn 库。当我刚开始的时候,我经常发现 matplotlib 笨拙而令人沮丧(一些纯粹主义者可能会因此讨厌我)。发现 Seaborn 是一种享受。它与熊猫的集成非常好,最终,作为一名数据科学家,你希望能够专注于你的模型和交流你的发现,而不是与图形包搏斗。

我从一些简单的线条图开始;一段时间内人均周平均发病率的变化和一段时间内病例总数的变化。

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

我们可以立即看到疫苗接种计划在 60 年代末/70 年代初产生的巨大影响。但是州之间的差异呢?有季节性模式吗?

由于数据的多维属性,这类问题不能通过线图很好地强调。使用热图可以实现更合适的可视化。在 Seaborn 生成热图相对简单。您可以向热图函数传递一个“long”格式的 Pandas 数据帧,其中轴值由索引和列给出,每个单元格的值是您希望在热图的每个给定交叉点绘制的值。用pivot方法可以实现“长”格式的 Pandas 数据帧的格式化。您可以指定要用作索引的列、将用于生成新列的列(每个值将指定一个新列)以及每个交叉点的值。这将返回一个“长”格式的数据帧。

通过使用热图,我可以通过在 x 轴上绘制年份,在 y 轴上绘制周数,在每个交叉点上绘制麻疹的严重程度(由人均发病率给出),来展示季节模式;其中较亮的颜色表示较高的发病率。热图非常适合可视化这样的三维数据。然后,我可以通过在 y 轴上绘制州名来对州进行同样的操作。这已经是一种非常有效的可视化方法,证明了保持一致的季节模式,以及 60 年代和 70 年代疫苗接种计划的显著效果。

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

静态的剧情很无聊!让我们开始互动吧!

虽然热图在传达美国麻疹疫苗接种的效果方面非常有效,但我认为在这个项目中探索交互式可视化会很有趣。启发性的统计数据、伟大的模型和有洞察力的趋势都是强有力的工具,但如果没有有效的沟通,这些都是没有意义的。当观众不仅有机会获得数据的广阔视野,而且有机会与它互动,探索它,并提出自己的问题时,这就是数据可视化真正变得神奇的时候。这就是我要利用 BokehJS 力量的地方。

我不会在这里详细介绍 BokehJS 是如何工作的,但是在这个项目的笔记本中,我给出了创建我下面演示的产品的每个步骤的完整解释。我也强烈推荐我之前列出的资源,如果没有我从每个资源中获得的洞察力,我将无法完成这个项目。

BokehJS 的真正力量可以在我认为对学习这个库至关重要的几个关键方面找到:

  • ColumnDataSource 对象:Bokeh 处理数据的核心是 ColumnDataSource 类。基本的 ColumnDataSource 对象是一个字典,其中的键与列名相关,值是这些列的内容。当在多个图中使用同一个 ColumnDataSource 对象时,它允许图之间的链接,这是我充分利用的。
  • 检查员:一个非常简单的概念,立即让您创建强大的互动情节。只需几行代码,您就可以将静态二维图转换为交互式显示,使观众能够悬停在每个数据点上,并接触到原始数据集中包含的其他变量。
  • 小部件和回调:散景库附带了大量的小部件,您可以使用它们来为您的绘图添加交互功能。我在应用程序中使用滑块并选择小部件。这些方法允许使用回调函数。您可以使用定制的 javascript 来完成这项任务,也可以像我在应用程序中那样使用 Python 函数。

所以,事不宜迟,这里是我的散景涂鸦的结果:

上面的两个视频显示了 Jupyter 笔记本中本地运行的完全交互式的情节。然后我将这些图组合成一个单独的 Python 应用程序,可以在 Heroku 上看到。

我希望这激发了你对 BokehJS 及其功能的好奇心。我已经在 GitHub 上的项目目录中包含了一个小教程,并试图让主项目笔记本尽可能的丰富。但是,如果您有任何问题,请不要犹豫,在下面留下您的评论。

探索和机器学习多伦多的 Airbnb 房源

原文:https://towardsdatascience.com/exploring-machine-learning-for-airbnb-listings-in-toronto-efdbdeba2644?source=collection_archive---------5-----------------------

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

Photo credit: Inside Airbnb

Airbnb 房源、特征工程、探索性分析、回归

Airbnb 不提供我们可以使用的巨型数据库或转储意义上的开放数据。然而,Airbnb 内部的利用从 Airbnb 网站汇编的公开信息,分析关于一个城市的 Airbnb 房源的公开信息,并提供过滤器和关键指标,以便我们可以看到 Airbnb 在世界各大城市的使用情况。Airbnb 内部的是一套独立的、非商业性的工具和数据,与 Airbnb 或 Airbnb 的任何竞争对手都没有关联,也没有得到它们的认可。

然而,Airbnb 内 提供的信息对我们来说是不够的。我们将从那里下载数据用于我们自己的分析。

我将与多伦多数据合作。因为我住在这里,我知道这里的一些街区。欢迎你选择任何你喜欢的城市。

我们将查看 Airbnb 的房源和日历,并尝试提供一些关于预测房源价格的探索性分析,如果我们假设在 Airbnb 工作,也是为了消费者。我们开始吧!

日历

**calendar = pd.read_csv('calendar.csv.gz')
print('We have', calendar.date.nunique(), 'days and', calendar.listing_id.nunique(), 'unique listings in the calendar data.')**

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

**calendar.date.min(), calendar.date.max()**

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

该日历涵盖一年的时间范围,即下一年每天的价格和可用性。在我们的案例中,从 2018–10–16 到 2019–10–15。

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

Figure 1

日历上的可用性

当我们查看日历数据时,我们可能想问这样的问题:未来一年多伦多的 Airbnb 主机会有多忙?

**calendar.available.value_counts()**

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

f(假)表示不可用,t(真)表示可用。为了找出一年的日平均可用性,如果可用,我们将把 available 列转换为 0,如果不可用,则转换为 1。

**calendar_new = calendar[['date', 'available']]
calendar_new['busy'] = calendar_new.available.map( lambda x: 0 if x == 't' else 1)
calendar_new = calendar_new.groupby('date')['busy'].mean().reset_index()
calendar_new['date'] = pd.to_datetime(calendar_new['date'])plt.figure(figsize=(10, 5))
plt.plot(calendar_new['date'], calendar_new['busy'])
plt.title('Airbnb Toronto Calendar')
plt.ylabel('% busy')
plt.show();**

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

Figure 2

多伦多最繁忙的月份是刚刚过去的十月。接下来忙碌的几个月似乎是在四月之后,一直延续到夏天。这些都在我们的体验和预期之内。

日历上的价格

价格如何逐月逐年变化?

我们删除 price 列中的“$”符号,将其转换为数字,并将 date 转换为 datetime 数据类型。

**calendar['date'] = pd.to_datetime(calendar['date'])
calendar['price'] = calendar['price'].str.replace(',', '')
calendar['price'] = calendar['price'].str.replace('$', '')
calendar['price'] = calendar['price'].astype(float)
calendar['date'] = pd.to_datetime(calendar['date'])
mean_of_month = calendar.groupby(calendar['date'].dt.strftime('%B'),
                                 sort=False)['price'].mean()
mean_of_month.plot(kind = 'barh' , figsize = (12,7))
plt.xlabel('average monthly price');**

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

Figure 3

多伦多的 Airbnb 价格在 7 月、8 月和 10 月上涨。同意,这三个月是游览多伦多最好的月份。

价格在一周中的某一天是如何变化的?

**calendar['dayofweek'] = calendar.date.dt.weekday_name
cats = [ 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
price_week=calendar[['dayofweek','price']]
price_week = calendar.groupby(['dayofweek']).mean().reindex(cats)
price_week.drop('listing_id', axis=1, inplace=True)
price_week.plot()
ticks = list(range(0, 7, 1)) # points on the x axis where you want the label to appear
labels = "Mon Tues Weds Thurs Fri Sat Sun".split()
plt.xticks(ticks, labels);**

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

Figure 4

星期五和星期六比一周中的其他时间要贵 10 美元以上。

清单

每个街区的列表数量

**listings = pd.read_csv('listings.csv.gz')
print('We have', listings.id.nunique(), 'listings in the listing data.')**

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

**listings.groupby(by='neighbourhood_cleansed').count()[['id']].sort_values(by='id', ascending=False).head(10)**

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

Figure 5

列表数量最多的街区是海滨社区——岛屿,几乎是第二多的街区(尼亚加拉)的四倍。从上面的标题图,我们也可以看到这一点。

审核评分等级

**plt.figure(figsize=(12,6))
sns.distplot(listings.review_scores_rating.dropna(), rug=True)
sns.despine()
plt.show();**

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

Figure 6

**listings.review_scores_rating.describe()**

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

Figure 7

不出所料,大多数评论者都给出了高分。

探索价格

price 列需要一些清理,例如删除“$”并转换为数字。

**listings['price'] = listings['price'].str.replace(',', '')
listings['price'] = listings['price'].str.replace('$', '')
listings['price'] = listings['price'].astype(float)listings['price'].describe()**

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

Figure 8

多伦多最贵的 Airbnb 房源是 12933 美元/晚。从的列表网址,据我所知似乎是合法的。一位艺术收藏家在多伦多最时尚街区的顶层公寓。不错!

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

source: Airbnb

为了不受极端情况的影响,我决定删除超过 600 美元/晚的房源,以及 7 个价格为 0 的房源,以便进行下面的探索性分析。

剔除异常值后的列表价格分布

**listings.loc[(listings.price <= 600) & (listings.price > 0)].price.hist(bins=200)
plt.ylabel('Count')
plt.xlabel('Listing price in $')
plt.title('Histogram of listing prices');**

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

Figure 9

邻里关系与价格

neighbourhood vs. price

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

Figure 10

不仅是滨水社区——岛上的房源数量最多,它还享有最高的中位价,而米利肯的中位价最低。

物业类型与价格

property_type vs. price

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

Figure 11

当我们查看每种物业类型的中值价格时,我们必须小心,不能说“最贵的物业类型是公寓式酒店,帐篷和停车位的中值价格高于公寓和城堡。”,因为 Aparthotel、Tend 和 Parking Space 各只有一个列表。

房型与价格

room_type vs. price

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

Figure 12

不言而喻,整个房间/公寓的价格比其他类型的房间要高得多。

**listings.loc[(listings.price <= 600) & (listings.price > 0)].pivot(columns = 'room_type', values = 'price').plot.hist(stacked = True, bins=100)
plt.xlabel('Listing price in $');**

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

Figure 13

整个家/公寓也有最多的房源。Airbnb 内部已经表明整栋整栋的住宅或公寓全年对游客开放,可能没有主人在场,可能是非法的,更重要的是,正在取代居民。我们将暂时把忧虑放在一边。

床型与价格

bed_type vs. price

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

Figure 14

这里没有惊喜。

便利设施

便利设施文本框需要清理一下。

**listings.amenities = listings.amenities.str.replace("[{}]", "").str.replace('"', "")
listings['amenities'].head()**

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

Figure 15

20 种最常见的娱乐设施。

**pd.Series(np.concatenate(listings['amenities'].map(lambda amns: amns.split(","))))\
    .value_counts().head(20)\
    .plot(kind='bar')
ax = plt.gca()
ax.set_xticklabels(ax.get_xticklabels(), rotation=45, ha='right', fontsize=12)
plt.show();**

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

Figure 16

Wifi、暖气、必需品、厨房和烟雾探测器等都是最常见的便利设施。

便利设施与价格前 20 名

**amenities = np.unique(np.concatenate(listings['amenities'].map(lambda amns: amns.split(","))))
amenity_prices = [(amn, listings[listings['amenities'].map(lambda amns: amn in amns)]['price'].mean()) for amn in amenities if amn != ""]
amenity_srs = pd.Series(data=[a[1] for a in amenity_prices], index=[a[0] for a in amenity_prices])amenity_srs.sort_values(ascending=False)[:20].plot(kind='bar')
ax = plt.gca()
ax.set_xticklabels(ax.get_xticklabels(), rotation=45, ha='right', fontsize=12)
plt.show();**

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

Figure 17

有趣的是,便利设施功能似乎与价格有一定关系。

床位数量与价格

**listings.loc[(listings.price <= 600) & (listings.price > 0)].pivot(columns = 'beds',values = 'price').plot.hist(stacked = True,bins=100)
plt.xlabel('Listing price in $');**

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

Figure 18

绝大多数房源都有一张床,一张床的房源价格差异很大。有没有床的列表。

**sns.boxplot(y='price', x='beds', data = listings.loc[(listings.price <= 600) & (listings.price > 0)])
plt.show();**

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

Figure 19

有趣的是,无床房源的中值价格高于 1 床和 2 床房源,而 10 床房源的中值价格非常低。

数字特征

我们选择了几个数字特征,并尝试一起探索它们。

**col = ['host_listings_count', 'accommodates', 'bathrooms', 'bedrooms', 'beds', 'price', 'number_of_reviews', 'review_scores_rating', 'reviews_per_month']
sns.set(style="ticks", color_codes=True)
sns.pairplot(listings.loc[(listings.price <= 600) & (listings.price > 0)][col].dropna())
plt.show();**

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

Figure 20

**corr = listings.loc[(listings.price <= 600) & (listings.price > 0)][col].dropna().corr()
plt.figure(figsize = (6,6))
sns.set(font_scale=1)
sns.heatmap(corr, cbar = True, annot=True, square = True, fmt = '.2f', xticklabels=col, yticklabels=col)
plt.show();**

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

Figure 21

有一些不坏的消息,如卧室和住宿的数量似乎与价格相关。也容纳,床和卧室是相关的,我们将保留其中一个模型。

建模标价

数据预处理和特征工程

清理价格特征。我们将要建模和预测的特征。

**listings['price'] = listings['price'].str.replace(',', '')
listings['price'] = listings['price'].str.replace('$', '')
listings['price'] = listings['price'].astype(float)
listings = listings.loc[(listings.price <= 600) & (listings.price > 0)]**

娱乐设施功能的术语文档矩阵。

amenities

如果为“f”,则将以下特性中的值替换为 0,如果为“t”,则替换为 1。

**columns =  ['host_is_superhost', 'host_identity_verified', 'host_has_profile_pic',
                   'is_location_exact', 'requires_license', 'instant_bookable',
                   'require_guest_profile_picture', 'require_guest_phone_verification']
for c in columns:
    listings[c] = listings[c].replace('f',0,regex=True)
    listings[c] = listings[c].replace('t',1,regex=True)**

用同样的方法清理其他货币值列。

**listings['security_deposit'] = listings['security_deposit'].fillna(value=0)
listings['security_deposit'] = listings['security_deposit'].replace( '[\$,)]','', regex=True ).astype(float)
listings['cleaning_fee'] = listings['cleaning_fee'].fillna(value=0)
listings['cleaning_fee'] = listings['cleaning_fee'].replace( '[\$,)]','', regex=True ).astype(float)**

以下是我们将使用的数字功能。

numeric_features

用中位数填充数值要素中缺失的值。

**for col in listings_new.columns[listings_new.isnull().any()]:
    listings_new[col] = listings_new[col].fillna(listings_new[col].median())**

处理和添加分类特征。

**for cat_feature in ['zipcode', 'property_type', 'room_type', 'cancellation_policy', 'neighbourhood_cleansed', 'bed_type']:
    listings_new = pd.concat([listings_new, pd.get_dummies(listings[cat_feature])], axis=1)**

添加我们之前从便利设施功能创建的术语文档矩阵。

**listings_new = pd.concat([listings_new, df_amenities], axis=1, join='inner')**

数据预处理和特征工程完成了!

随机森林回归器

RandomForestRegressor

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

随机森林的特征重要性

**coefs_df = pd.DataFrame()coefs_df['est_int'] = X_train.columns
coefs_df['coefs'] = rf.feature_importances_
coefs_df.sort_values('coefs', ascending=False).head(20)**

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

Figure 22

LightGBM

LightGBM

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

light GBM 的特征重要性

**feat_imp = pd.Series(clf.feature_importances_, index=X.columns)
feat_imp.nlargest(20).plot(kind='barh', figsize=(10,6))**

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

Figure 23

这两个模型产生的特征重要性是相似的。

因此,我们取得的最好结果是平均小于 60 美元的测试 RMSE 误差,该模型解释了 62.4%的上市价格波动。

结果好吗?不太好。然而,价格是一个很难建模的东西,似乎在功能中没有足够的信号。我们可能希望添加季节性、预订窗口、停留时间等功能。我将把它留给其他时间。

Jupyter 笔记本可以在 Github 上找到。享受这周剩下的时光。

用 AWS Athena 探索墨尔本的 Myki 数据

原文:https://towardsdatascience.com/exploring-melbournes-myki-data-with-aws-athena-511410d2e461?source=collection_archive---------4-----------------------

使用无服务器 SQL 查询对 S3 CSV 数据进行简单分析

编辑:应维多利亚数据中心的要求,本文中讨论的数据链接已被删除。

作为墨尔本居民和 Myki 公共交通票价系统的日常通勤者(无可奉告),当我听说 2018 年墨尔本数据大会的数据集将是大规模的真实世界 Myki 使用数据时,我很感兴趣。关于我们熙熙攘攘的城市如何使用公共交通网络,我们能收集到什么样的深刻见解?让我们来了解一下!最重要的是,我们将检查它,而不需要从 CSV 转换,甚至不需要将它移出 S3。

下面是我从这个 18 亿行的数据集中收集到的一些快速统计数据,SQL 查询只需几秒钟就能运行,比一杯咖啡的费用要低得多:

  • 票价包括 65.65%的全票价,33.65%的付费优惠票价,以及少得可怜的 0.69%的免费乘车优惠
  • 周日,维多利亚州老年人优惠卡持有者最喜欢去的地方是博克斯山火车站

AWS 雅典娜

AWS Athena 是一个完全托管的无服务器查询服务,允许您对存储在 S3 存储桶中的数据运行 SQL 查询——有点像魔术。基于 Apache Hive 和脸书的 Presto ,Athena 让你定义(甚至发现)你的数据模式,然后立即开始运行查询。你所支付的只是雅典娜运行你的查询所需要的数据,以及在 S3 存储这些数据的费用。

因此,首先让我们获取数据,将其放入 S3,并准备我们的模式。

在 S3 准备我们的 Myki 数据

要先看一眼并探索数据文件,请查看这个公开的 S3 链接:

*Edit: by request of Data Victoria, links to the data discussed in this article have been removed.*(bucket contents is 25.4gb)---Once again, so many thanks to Data Science Melbourne for organising the Melbourne Datathon and providing the data. Thanks also to PTV for releasing the dataset.[http://www.datasciencemelbourne.com/datathon/](http://www.datasciencemelbourne.com/datathon/)
[https://www.ptv.vic.gov.au/](https://www.ptv.vic.gov.au/)

以下是我们今天感兴趣的文件的简要描述:

[events/](https://tomwwright-myki-data.s3.ap-southeast-2.amazonaws.com/lst.html?prefix=events/)         # our myki usage dataset is in here
 [Samp_0/](https://tomwwright-myki-data.s3.ap-southeast-2.amazonaws.com/lst.html?prefix=Samp_0/)        # data is split into ten chunks
  ScanOffTransaction/  # myki 'touch on' events when people board
  ScanOnTransaction/   # myki 'touch off' events from disembarking
   2015/        # year partitions
   ...
   2017/
    Week1/      # week partitions
    ...
    Week52/
     [QID3530164_20180713_12510_0.txt.gz](https://tomwwright-myki-data.s3.ap-southeast-2.amazonaws.com/Samp_0/ScanOffTransaction/2017/Week53/QID3530164_20180713_12510_0.txt.gz)    # data!
 [Samp_1/](https://tomwwright-myki-data.s3.ap-southeast-2.amazonaws.com/lst.html?prefix=Samp_1/)
 ...
 [Samp_9/](https://tomwwright-myki-data.s3.ap-southeast-2.amazonaws.com/lst.html?prefix=Samp_9/)
[calendar/](https://tomwwright-myki-data.s3.ap-southeast-2.amazonaws.com/lst.html?prefix=calendar/)       # map dates to week numbers, days of week, etc.
[cardtypes/](https://tomwwright-myki-data.s3.ap-southeast-2.amazonaws.com/lst.html?prefix=cardtypes/)      # myki fare types: full fare, concession, etc.
[stops/](https://tomwwright-myki-data.s3.ap-southeast-2.amazonaws.com/lst.html?prefix=stops/)          # links stop information to a stop id

为自己创建一个存储桶并复制数据!(如果您想更好地了解数据,可以随意复制其中一个Samp_X目录)

aws s3 mb s3://mediumreader-myki-data
aws s3 cp --recursive s3://bucket-no-longer-exists/ s3://mediumreader-myki-data/

轻松点。现在,我们告诉 AWS Athena 我们的数据是什么样子,以便它可以查询它——我们使用 AWS Glue 中的数据目录来完成这一点,它与 Athena 集成在一起。

在 AWS Glue 数据目录中准备我们的数据模式

AWS Glue 是亚马逊完全托管的 ETL(提取、转换、加载)服务,可以轻松地从各种数据源准备和加载数据,以进行分析和批处理。今天,我们只对数据目录使用 Glue 感兴趣,因为这将允许我们在刚刚转储到 S3 的 Myki 数据上定义一个模式。AWS Glue 通过提供数据“爬虫”使这变得容易,这些爬虫可以窥视我们的数据并自动发现我们的大量模式。

  • 导航到 AWS 胶水
  • 从菜单中选择爬虫
  • 选择添加爬虫

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

Getting started by adding a crawler to discover our schema

  • 命名我们的爬虫 myki_crawler
  • 点击*下一步,*这里我们不需要任何可选配置

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

Naming our crawler, other optional config is fine as defaults

  • S3 数据仓库
  • 我的账户中指定的路径
  • 对于我来说,Include path 是S3://tomwwright-myki-data/,替换为您之前在复制数据时调用的 bucket
  • 排除模式留空,对于这个数据集,我们只清理爬虫发现的我们不想要的垃圾
  • 点击下一步,s 选择添加另一个数据存储,再次点击下一步

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

Pointing our crawler at our S3 data bucket

  • 选择创建一个 IAM 角色(除非您已经为 Glue 准备好了角色)
  • 输入 MykiCrawler 作为名字——或者随便你怎么想,我是一个中等职位,不是你的母亲
  • 点击下一个

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

Creating an IAM role to give our crawler access to our bucket

  • 选择“按需运行”作为频率,我们只想运行一次
  • 点击下一个

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

We just want to run it the once anyway…

  • 选择添加数据库,姑且称之为 myki ,不需要任何的可选配置,点击创建
  • 保持所有可选配置不变
  • 点击下一个
  • 点击完成!

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

Creating a database for the tables discovered by the crawler

你应该已经回到 AWS Glue 的爬虫屏幕,所以选择 myki_crawler 并点击 Run crawler 。根据我的经验,跑步大概需要 7 分钟,所以你可以喝杯咖啡或者散散步。

一旦爬虫完成,我们将能够在数据库- >表下查看发现的表。我们要做的第一件事是删除一些垃圾表,这些垃圾表是爬虫通过检查我们的 S3 桶中的一些非数据文件而创建的——删除所有分类为 Unknown 的表,如下面的截图所示。我们本来可以通过忽略将它们复制到 bucket 中,或者将它们添加到 crawler 的 exclude paths 配置中来省去这个麻烦。哦,好吧,很容易删除它们。

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

Deleting junk tables the crawler inadvertently created by scanning everything in the bucket — that’s our bad, oops.

打开日历表,我们可以看到爬虫为我们发现的所有好东西:数据格式、分隔符、记录计数、列类型等等。缺少的一点是列名,因为 myki 数据文件中没有该信息。下面你会发现一些我们需要应用的列标签(不一定是全部),以便能够为我们的表编写可读的查询。选择一个表并点击右上角的编辑模式来更新列。

table: calendar1  col0   bigint   dateid
2  col1   string   date
3  col2   bigint   year
6  col5   string   month
13 col12  string   daytype  # 'Weekday', 'Weekend', 'Public Holiday'
16 col15  string   dayofweek---table: cardtypes1  col0   bigint   typeid
2  col1   string   typedesc
3  col2   string   paidorfree  # 'Paid', 'Free'
4  col3   string   concession  # 'Full Fare', 'Concession'---table: events1  col0   bigint   mode
2  col1   string   date
3  col2   string   datetime
4  col3   bigint   cardid
5  col4   bigint   cardtypeid
6  col5   bigint   vehicleid8  col7   string   routeid
9  col8   string   stopid
10 partition_0     samplenum
11 partition_1     onoroff  # 'ScanOffTransaction', 'ScanOnTra...on'
12 partition_2     year
13 partition_3     week---table: stops1  col0   bigint   stopid
2  col1   string   name
3  col2   string   longname
4  col3   string   stoptype
5  col4   string   suburb
6  col5   bigint   postcode
10 col9   double   lat
11 col10  double   long

有了我们的列名,我们终于准备好做一些查询了!

用 AWS Athena 查询我们的模式

通过点击 Athena 服务,我们发现自己首先出现在查询编辑器屏幕上。酷,让我们选择我们的myki数据库并插入一个简单的计数查询!

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

AWS Athena’s Query Editor makes it simple to develop queries against our Myki schema

当我们得到一个我们真正满意的查询时,我们可以点击Save as并给它一个名字,然后我们可以很容易地找到它并在Saved Queries下再次运行它。Athena 还允许我们在History下访问我们的查询历史,在那里我们可以下载任何查询结果。

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

AWS Athena’s query history allows us to find our past queries and download the results

这里需要注意的一个重要指标是 Athena 查询所扫描的数据,因为 Athena 的定价直接(且仅)与 Athena 在运行查询的过程中读取的数据量相关:

“Amazon Athena 会根据扫描的字节数向您收费,四舍五入到最接近的兆字节,每次查询最少 10MB。

扫描每 TB 数据 5 美元”

由于它操作的是普通的平面文件,Athena 很难智能地处理它所扫描的数据,通常它需要读取模式指定的构成表的所有文件。除非在创建模式时,指定了分区来定义映射到目录的“列”, Athena 可以使用这些目录来智能地判断对于给定的查询应该扫描哪些数据。举例来说,回想一下我们数据的文件夹结构:

[events/](https://tomwwright-myki-data.s3.ap-southeast-2.amazonaws.com/lst.html?prefix=events/)         # our myki usage dataset is in here
 [Samp_0/](https://tomwwright-myki-data.s3.ap-southeast-2.amazonaws.com/lst.html?prefix=Samp_0/)        # data is split into ten chunks
  ScanOffTransaction/  # myki 'touch on' events when people board
  ScanOnTransaction/   # myki 'touch off' events from disembarking
   2015/        # year partitions
   ...
   2017/
    Week1/      # week partitions
    ...
    Week52/
     [QID3530164_20180713_12510_0.txt.gz](https://tomwwright-myki-data.s3.ap-southeast-2.amazonaws.com/Samp_0/ScanOffTransaction/2017/Week53/QID3530164_20180713_12510_0.txt.gz)    # data!
 [Samp_1/](https://tomwwright-myki-data.s3.ap-southeast-2.amazonaws.com/lst.html?prefix=Samp_1/)
 ...
 [Samp_9/](https://tomwwright-myki-data.s3.ap-southeast-2.amazonaws.com/lst.html?prefix=Samp_9/)
[calendar/](https://tomwwright-myki-data.s3.ap-southeast-2.amazonaws.com/lst.html?prefix=calendar/)       # map dates to week numbers, days of week, etc.
[cardtypes/](https://tomwwright-myki-data.s3.ap-southeast-2.amazonaws.com/lst.html?prefix=cardtypes/)      # myki fare types: full fare, concession, etc.
[stops/](https://tomwwright-myki-data.s3.ap-southeast-2.amazonaws.com/lst.html?prefix=stops/)          # links stop information to a stop id

我们的events文件夹由一系列子文件夹组成,这些子文件夹按照几个关键列整齐地划分我们的事件数据:一个编号的样本文件夹,无论它是一个接触式事件还是触发式事件,年份和星期。幸运的是,我们的 AWS Glue crawler 足够聪明,能够注意到所有这些,并且已经在我们的模式中组织了所有这些!不错!

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

You can view partitions for a table in the AWS Glue Data Catalogue

为了说明这些分区的重要性,我用两个不同的查询计算了 2016 年使用的唯一 Myki 卡的数量(顺便说一下,大约 740 万张):一个使用数据中date列的LIKE操作符,另一个使用我们的year分区列。

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

The power of partitioning: Athena scans only the relevant data for 2016, less than 30% of the entire dataset

我们使用date LIKE '2016%'的第一个查询必须扫描整个events表,总共 25gb,因为 Athena 无法确定哪些文件中可能有匹配行。此查询的成本约为 0.12 美元。

我们使用year = '2016'的第二个查询能够检索我们的结果,并且只扫描 8g 的events数据!这是因为year是映射到我们的 S3 数据中特定键模式的分区列之一。该查询的成本约为 0.04 美元,运行时间不到三分之一!

使用分区智能地组织数据是能够在 Athena 上运行快速且经济高效的查询的关键。好吧,我们继续!

触发的热门站点

所以,我的第一个想法是,人们使用 Myki 会去哪里?用 SQL 回答这个问题似乎很简单,让我们从获得最受欢迎的站点列表开始。

# top 20 stop ids for touch-off events select stopid, count(*) as count
from events
where onoroff = 'ScanOffTransaction'
group by stopid
order by count desc
limit 20;

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

Touch-off events aggregated by the stop ID

很好,我们可以用我们的stops表来连接这个,以获得一个更易于阅读的表示,就这么做吧。

# select our top stops like before, then join to our stops tablewith topstops (stopid, count) as (
  select stopid, count(*) as count
  from events
  where onoroff = 'ScanOffTransaction'
  group by stopid
)
select topstops.stopid, stops.longname, stops.suburb, topstops.count
from topstops left outer join stops
on topstops.stopid = stops.stopid
order by topstops.count desc
limit 20;

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

Results of running our “top touch-off stops” query

嗯。有一堆stopid行遗漏了stops信息……对我来说,鉴于它们是最受欢迎的车站,并且有正确的数字,我的猜测是64xxx站是城市环路铁路站,也许24001是里士满站?

除此之外,这些结果对我来说是有意义的,看到所有的顶级车站都是火车站一点也不奇怪。

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

Melbourne’s City Loop — map courtesy of Public Transport Victoria

票价类型的细分

似乎总是有一些关于向各种群体提供优惠公共交通出行的肆意支出的喋喋不休。全价票和优惠票的细目是什么?同样,看起来很简单。让我们首先根据events表中的卡类型进行汇总。

# aggregate our touch-on events by the card type usedselect cardtypeid, count(*) as count
from events
where onoroff = 'ScanOnTransaction'
group by cardtypeid
order by count desc

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

Touch-on events aggregated by the card type ID

很好,所以和上次一样,让我们加入到我们的cardtypes表中来,以提供更多人类可读的信息:

# aggregate by card type as before, then join to card types
# information to determine concession and paying statuswith cardtypecounts (cardtypeid, count) as (
  select cardtypeid, count(*) as count
  from events
  where onoroff = 'ScanOnTransaction'
  group by cardtypeid
)
select cardtypecounts.cardtypeid, cardtypes.typedesc, cardtypes.concession, cardtypes.paidorfree, cardtypecounts.count
from cardtypecounts left outer join cardtypes
on cardtypecounts.cardtypeid = cardtypes.typeid
order by cardtypecounts.count desc;

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

Top fare types and concession / paying status

全价乘客看起来占了绝大多数,是最常见(但标签模糊)优惠票价类型的 4 倍多。但是列表的其余部分是由各种不同的特许权类型组成的,所以可能不会这么简单。唯一进入前 14 名的免费乘车类型是Employee Travel Pass——有道理。

让我们通过再次汇总来进行更高层次的观察,我对全价、优惠和免费的总体细分很好奇。

# further aggregating our query by concession and paying
# statuseswith cardtypecounts (cardtypeid, count) as (
  select cardtypeid, count(*) as count
  from events
  where onoroff = 'ScanOnTransaction'
  group by cardtypeid
)
select cardtypes.concession, cardtypes.paidorfree, sum(cardtypecounts.count) as count
from cardtypecounts left outer join cardtypes
on cardtypecounts.cardtypeid = cardtypes.typeid
group by cardtypes.concession, cardtypes.paidorfree 
order by count desc;

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

Full-fare vs. concession vs. free fare types

好吧,这就是全貌:65.65%的全价票,33.65%的付费优惠票,以及少得可怜的 0.69%的免费乘车优惠票。

老年人的最佳周日目的地

最后,让我们尝试一些稍微具体的东西。在一个星期天,我们的高级公共交通用户喜欢去哪里?

加入我们的calendar表将允许我们确定哪些日期是Sunday,我们之前对票价类型的查询显示cardtypeid = 9是我们需要寻找的Victorian Seniors Concession票价类型。厉害!

# selecting touch-on events that were on a Sunday using a Victorian Seniors
# Concession fareselect stopid, count(*) as count
from events, calendar
where onoroff = 'ScanOffTransaction'
and events.date = calendar.date
and events.cardtypeid = 9
and calendar.dayofweek = 'Sunday'
group by events.stopid;

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

Touch-on events on a Sunday by seniors, aggregated by the stop ID

现在就像我们的第一个查询一样,加入到stops来给我们一些人类可读的信息。再次记住有些止损点似乎错过了他们的信息…

# join or sunday seniors stops to stops informationwith seniorsundaystops (stopid, count) as (
  select stopid, count(*) as count
  from events, calendar
  where onoroff = 'ScanOffTransaction'
  and events.date = calendar.date
  and events.cardtypeid = 9
  and calendar.dayofweek = 'Sunday'
  group by events.stopid
)
select seniorsundaystops.stopid, stops.longname, stops.suburb, seniorsundaystops.count
from seniorsundaystops left outer join stops
on seniorsundaystops.stopid = stops.stopid
order by seniorsundaystops.count desc;

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

我们神秘的未命名站点(几乎可以肯定是城市环路站点)仍然领先,但显然我们挥舞着 Myki 的老年人喜欢在 Box Hill,Caulfield 和 Footscray 度过时光。谁知道呢。

包扎

花点时间想想这种技术有多酷是有好处的,因为一旦你投入进去,就很容易忘记。能够运行带有连接的 SQL 查询,只针对位于 S3 的 CSV 文件。令人印象深刻。

这个 Myki 数据也不是一个可以分析的小数目。超过 18 亿行,我们能够在不到 10 秒的时间内处理它。而且它的成本非常低。本文中列出的查询扫描了大约 145 千兆字节的 S3 数据,总共花费了我巨大的…

$0.75

查询愉快!汤姆

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

Counting our data — it’s a decent bit to be crunching in under 10 seconds and paying next to nothing for

用交互式可视化探索电影数据

原文:https://towardsdatascience.com/exploring-movie-data-with-interactive-visualizations-c22e8ce5f663?source=collection_archive---------3-----------------------

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

合著者:阿尔维拉·斯瓦林

你有没有看过一部自己喜欢的电影,思考过让它成功的不同因素?

这是对 1910 年至 2016 年电影数据库(TMDB)数据的探索。一部商业上成功的电影不仅能娱乐观众,还能让电影制作人获得丰厚的利润。好的导演、有经验的演员和上映时间等几个因素对盈利很重要,但它们并不总是能保证一部电影的评级有多高。

在这个项目中,我们试图了解影响电影盈利能力的时间模式,了解流行类型如何随着时间的推移而变化,确定重要的演员和导演,并观察电影收视率和平均投票率随时间的变化。

时态模式分析

电影什么时候最赚钱?

从这张热图中,我们可以看到平均盈利能力在最近几年有所提高,6 月、11 月和 12 月对电影发行尤为重要。6 月份的平均利润是 1 亿美元,比 1 月份的平均利润多 10 倍!这可能是因为人们在夏天可能有更多的空闲时间看电影。

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

随着时间的推移,哪些流派已经盈利?

下图显示了不同类型电影的利润趋势。“家庭”和“冒险”类型的电影最近似乎变得越来越有利可图,而“戏剧”电影最近产生的利润越来越少。

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

哪种类型的电影最流行?

下面的单词云显示了我们的数据集中最常见的电影类型,我们可以看到这些年来最流行的电影类型是“戏剧”和“喜剧”。这意味着,虽然“冒险”和“家庭”最近更有利可图,但这不仅仅是因为这些类型的电影数量最多。

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

随着时间的推移,投票数和平均电影评分的分布如何变化?

以下两个图突出显示了从 20 世纪到 21 世纪,由于互联网设施使投票变得更加容易,电影的投票数急剧增加(增加了 3 倍)。此外,值得注意的是,随着平均投票率在每十年中不断下降,人们最近变得越来越挑剔。我们认为,这是因为人们将新电影与他们过去看过的电影进行比较,并认为这些电影是原创的,更好。

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

电影特色分析

电影预算是如何影响利润的?

下图显示了一部电影的利润与其预算的对比。标记的颜色和大小代表电影的平均评分(满分 10 分)。利润和预算之间存在某种正相关关系,因此预算较大的公司似乎实际上通过更高的利润看到了这些预算的好处。

如果你悬停在图表的最高点,你会发现《阿凡达》是有史以来最赚钱的电影。

电影放映时间如何影响利润?

同样,我们也可以研究一部电影在几分钟内的播放时间是如何影响其利润的。标记的大小和颜色再次表示电影获得的平均评级。有趣的是,运行时间似乎对电影利润没有太大影响。

演职人员分析

哪些导演平均利润最高?

这些都是导演过 5 部以上电影,平均利润最高的导演。执导《阿凡达》的詹姆斯·卡梅隆是获利最大的导演。将鼠标悬停在条形上会让您看到确切的值。

哪些导演的电影平均收视率最高?

而这些都是导演过 5 部以上电影平均电影评分最高的导演。评分水平接近,但导演《黑暗骑士》的克里斯托弗·诺兰获得了最高的电影整体平均评分。

有多少主演合作过?

接下来,我们想观察哪些演员彼此合作最多,因此创建了一个网络主要演员。为了创建这个网络,我们选择了大约 270 名在 3 部以上电影中出现过的演员作为主要演员(演员 1 或 2 ),并创建了这些演员的网络。这个网络中的每条边都表明这两个演员作为主要演员在同一部电影中合作过。将鼠标悬停在这个网络中的节点上会显示参与者的名称,连接数通过颜色表示,您可以放大查看子网络的详细信息。

谁是最有影响力的演员?如果您将鼠标悬停在连接数最多的黄色节点上,您会看到它是劳勃·狄·尼诺。

怎么才能比较顶级演员?

从上述 270 名演员中,我们根据他们与其他重要演员的合作次数选择了前 15 名演员,并使用平均投票率、盈利能力和他们所演电影的受欢迎程度等指标来比较他们的表现。您可以从下拉菜单中选择这些指标,参与者姓名旁边的括号中的数字是他们的连接数。

外卖

  • 电影往往在六月最赚钱。
  • 家庭和冒险电影往往是最近最赚钱的。
  • 2010 年的平均电影评分一直在 6.5 左右。
  • 詹姆斯·卡梅隆是电影平均利润最高的导演。
  • 克里斯托弗·诺兰是电影平均收视率最高的导演。
  • 阿凡达是有史以来最赚钱的电影。
  • 放映时间对电影利润没有太大影响。
  • 劳勃·狄·尼诺是一个主要演员,他和其他 24 个主要演员合作过。
  • 在与其他主要演员合作最多的演员中,汤姆·克鲁斯的电影平均利润最高,凯特·温斯莱特的电影平均票数最高,克里斯蒂安·贝尔的电影最受欢迎。

感谢您花时间通读这部电影探索,如果您喜欢,请随时与阿尔维拉·斯瓦林基尚·潘查尔联系。
同时,我们要感谢来自 USF 的 Alark Joshi 教授为我们讲授了有效的数据可视化技术和原理。

参考文献

  1. Github 存储库,其中包含用于创建这些图的所有代码:https://github.com/k7p/dataviz_project
  2. 所有视觉效果都是互动的项目网站:https://sites.google.com/dons.usfca.edu/movieviz/home
  3. Plotly 文档:https://plot.ly/python/
  4. 散景文档:https://bokeh.pydata.org/en/latest/
  5. 电影数据库(https://www.themoviedb.org/?language=en)

探索 NLP/AWS/BigData:第 1 部分

原文:https://towardsdatascience.com/exploring-nlp-aws-bigdata-part-1-53716f3ad671?source=collection_archive---------5-----------------------

我必须承认,在我探索机器学习的时候,我对 NLP (自然语言处理)并不太感兴趣,实际上我把它和另一个 NLP (神经语言编程)混淆了。但是当我在大会上重温我的顶点项目的材料时,我偶然发现了由 YELP 提供的这个惊人的数据。数据集非常具有描述性,但是非常庞大,但是可以分为两条路线(NLP 或图像识别)。

在这个系列中,我将使用 yelp 提供的数据集回顾我探索 NLP 技术的过程。我将探索我的陷阱和策略,并希望我能帮助揭开一些概念的神秘面纱。在本系列中,我还将回顾我使用 AWS 弹性计算云( E2C )的经历,并用 Scala 语言复制 python 中的几种机器学习技术(我觉得这种语言可以完成的工作,但对于一个来自 Python 和 C++的人来说,这是一种如此丑陋的语言)。

Yelp 数据集

  • 图像分类通过有 5 千兆压缩的 JPEGs。
  • 来自几个主要城市的商业/用户/评论数据库。

英国:爱丁堡

德国:卡尔斯鲁厄

加拿大:蒙特利尔和滑铁卢

美国:匹兹堡、夏洛特、厄巴纳-香槟、凤凰城、拉斯维加斯、麦迪逊、克利夫兰

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

踪迹地图

  1. 规范化、清洗和 EDA。
  2. 模型选择(逻辑回归、贝叶斯、随机森林)
  3. 使用 AWS 的 Spark、Scala 和 Hadoop。
  4. Word2Vec。

设置和库:

我用的是 Python 3.5.2 |Anaconda 自定义(64 位)。

Git bash 终端。

我的电脑运行的是 I-7–5500 2.40 GHz 和 8GB RAM(我们将把它与 AWS 服务器进行比较,看看为什么后者是更好的选择)

  • 空间(版本 1.8.0)。安装了英语“en”型号。这在处理“停用词”时很重要。
pip install spacy
sudo python -m spacy download en
  • NLTK(3 . 2 . 1 版)另一个比 SpaCy 更老的 NLP 库。
  • gensim(版本 2.1.0)是一个很棒的免费库,我用来实现 Word2Vec
  • 全球。从路径名中读取文件。
  • tqdm (4.11.2)这是可选的,但是当你想检查一个熊猫函数的进度时,这是必须的。这些文件是巨大的,当你运行所有的东西时,看到你在哪里是很棒的。

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

SpaCy 对 NLTK:

简而言之空间就是。在我最初的 YELP 草稿中,我一直与这两个库合作,并且在“标记化”和“词汇化/词干化”过程中,我使用 SpaCy 做了许多繁重的工作,它非常快速和健壮。

JSON 到 CSV:

Yelp 提供的数据集由原始 json 组成。我的第一个挑战是将如此大的文件管理成可以翻译成 Python pandas 的东西。

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

Do not open this with pythons.read() . You’ll regret it.

我找到的解决方法是链接这里。这将需要一段时间来转换,尤其是 review.json。对于 Python 3 用户,您可能需要将这一行代码添加到上面的链接中。

**tqdm**(glob('yelp_academic_dataset_checkin.json')):
df = pd.DataFrame([convert(line) for line in **open**(json_filename)]) 

一旦 json 被转换成 CSV 格式,你可以用熊猫打开它,结果应该是这样的。

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

约束条件:

重要的是要记住,我的最终数据集不同于 YELP 提供的数据集。有大量的删改工作,包括将所有评论保留在美国和英国。原始数据集包含美国境内外的德国评论,因为拉斯维加斯是一个主要的旅游目的地,所以我看到一些德国评论并不奇怪。然而,我决定消除这些类型的审查,留在美国是基于领域知识。我不认为自己非常精通英语语言学,但我理解现代口语和基本的语法结构,作为美国公民,我也能理解每个城市/州的风味和内涵。当我探索欧洲城市时,我失去了这种能力(我不能告诉你英国哪个地区以炸鱼薯条闻名,但我知道最好的 Tocos 总是在边境以南,胸肉在德克萨斯州是国王)。另外,我唯一知道的德语单词是“幸灾乐祸”和其他。。。脏话。

YELP API 中的类别是另一个挑战。问题是如何处理数据框中的嵌套数组。最后,我决定将每个类别过滤成 7 个主要类别和一个空角色。

我们来看看数据:

使用美国大约 300 万条评论的整个数据集。

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

The bulk of the reviews came from NV,AZ,NC. With only 2 reviews for VT.

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

可视化:

这里有一个表格显示了 Q1 第四季度时间序列中平均商业得分最高的四个州。

后续步骤:

在我的下一篇文章中,我将探索模型选择过程。(逻辑回归、多项式朴素贝叶斯、随机森林)。我将讨论每种策略的利与弊,以及幕后发生的一些事情。

用高斯过程回归探索脉动变星

原文:https://towardsdatascience.com/exploring-pulsating-variable-stars-with-gaussian-process-regression-418fab1d3d04?source=collection_archive---------6-----------------------

事实证明,高斯过程对于难以用经典单变量或多变量回归描述的现象建模非常有用。但是,在许多情况下,当处理定型数据域之外的特征值时,它们的预测能力会下降。然而,一个例外是依赖于三角函数的高斯过程协方差函数,例如 sin( x )。这些函数以其估计值的周期性为特征,可用于模拟观测数据所涵盖的时间段之外的稳定的周期性现象。

下面,我将逐步演示使用高斯过程回归和 ExpSineSquared 协方差函数来模拟一种脉动变星的光度曲线。在此过程中,我将分享我遇到的主要陷阱和见解,我希望你会发现这是对这一练习的相对直观的解释。

脉动变星

恒星的光度会因为各种不同的原因而波动。对于一些人来说,脉动的模式是混乱的,看起来是随机的,就像新星(恒星爆炸)或具有重复出现的太阳黑子的恒星的情况一样。对于其他人来说,比如我将在本次分析中使用的恒星,其模式是一致且稳定的。

长周期变星是由于恒星大小的变化而脉动的红巨星。我在这里要关注的恒星,塞特斯星座中的御夫座(Omicron Ceti),是长周期变星中最广为人知和研究最多的例子。米拉的光度变化源于恒星温度的变化,导致大小以及可见光范围内外光输出波长的波动。

我将利用 1985 年到 2007 年对米拉的光度观测来预测 2008 年以后的光度曲线。我将使用的数据可从 AAVSO 国际数据库免费获得,该数据库汇集了来自世界各地的恒星观测者的贡献。

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

拟合高斯过程回归

我使用 Scikit Learn 的高斯过程回归(GPR)来促进这一分析。最初的挑战是将数据缩小到可用的大小。GPR 运行时间与(样本大小)成比例,因此随着数据量的增长,GPR 运行时间很快变得不切实际。在我的分析中,我发现从训练数据中随机抽取 1,000 个观察值(总共超过 80,000 个观察值)产生了相对一致的结果,同时将运行时间保持在一分钟左右。

我从 ExpSineSquared 内核和 WhiteNoise 内核开始,以捕捉 Mira 亮度测量中固有的随机波动性。仔细选择先前的内核超参数,以及设置超参数的上限和下限,对于建立良好的拟合至关重要。我重复了这个过程无数次,每次都不太合适,直到我发现了两个不同的参数:

  • 白化上界:在设置一个噪声水平上界之前,模型反复拟合一个高噪声值的“懒惰”后验核。一旦我定性地评估了训练数据曲线上任何给定点的“真实”噪音的程度,我就将上限设置为 0.5,理由是噪音的量永远不应该超过该量。
  • expsine squared periodicity:类似于 WhiteNoise 参数,一旦我为 periodicity 超参数设置了上限和下限,我看到 GPR 拟合有了显著的改进。在这里设置界限很简单,只需查看光变曲线数据的散点图,目测波峰和波谷之间的距离。

以下是采用这两种超参数限制后的拟合结果:

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

在这张图中,我通过 2008 年至 2018 年的观察扩展了预测结果,在图上以红色显示。将拟合的单核 GPR 与训练窗口之外的数据进行交叉验证是我对预测准确性的主要测试。下图显示了 2008-2018 年实际观测亮度与同期拟合估计值的残差。

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

我想回答的另一个问题是:多核 GPR 是否比单个 ExpSineSquared (+WhiteNoise)核更适合 Mira 的亮度曲线?答案是肯定的,也是否定的。对于将 GPR 专门拟合到训练数据,将 ExpSineSquared 内核与任何数量的其他固定内核相结合提供了增强的拟合。然而,除了训练数据之外,添加第二个稳定的非周期内核的边际增益很快变得极小。下面,观察使用 ExpSineSquared 核乘以 RBF 的拟合 GPR。随着与训练数据的距离增加到 RBF 的 lambda 参数以上,RBF 下降到零,GPR 变得无用。

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

然而,这并不是说单核 GPR 总是优于多核 GPR。如果被建模的现象在一个以上的时间跨度上表现出周期性,则使用多个 ExpSineSquared 核可能是合适的。在这种情况下,每个 ExpSineSquared 核可以拟合到不同的周期性超参数,以实现较高的预测精度。

这是相同的数据,拟合到一个协方差函数,该函数将两个 ExpSineSquared 内核相加(+WhiteNoise)。

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

尽管 GPR 符合周期参数约为 1,500 天的 ExpSineSquared 内核之一,但该模型的预测能力(如以下残差图所示,以及 1 核和 2 核 GPR 之间的均方根误差比较)并没有实质性提高。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 [## daso telo/Python _ Projects/Omicron _ ceti . py

通过在 GitHub 上创建一个帐户来为 Python_Projects 开发做贡献。

github.com](https://github.com/dasotelo/Python_Projects/blob/master/Omicron_Ceti.py)

探索 Tableau 与资本自行车共享和天气数据

原文:https://towardsdatascience.com/exploring-tableau-with-capital-bikeshare-and-weather-data-7da84f0ecee2?source=collection_archive---------9-----------------------

在这篇文章中,我将向您展示如何使用 Tableau Public 2018 进行一些有趣的数据分析和可视化。

我们将在 2018 年夏天探索华盛顿 DC 地区的首都自行车共享用户。特别是,我们将看看天气、星期几和会员类型如何影响乘客量。

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

我们开始吧。🚀

(舞台上由人扮的)静态画面

Tableau 是一款超级强大的数据分析和数据可视化工具。它已被各种公司广泛采用,以帮助他们变得更加数据驱动。对于许多数据科学家、业务分析师和高管来说,这是一个能够使用的重要程序。

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

整个 DC 市区有超过 4300 辆自行车共享单车。我是一个自行车共享成员,并挖掘它。我只是希望有更多的自行车和码头:)

数据

首都自行车共享数据可在此免费获取:

[## 系统数据|首都自行车共享

开发者、工程师、统计学家和学者可以找到并下载首都自行车共享会员的数据…

www.capitalbikeshare.com](https://www.capitalbikeshare.com/system-data)

天气数据可在此免费获取:

[## 搜索|在线气候数据(CDO) |国家气候数据中心(NCDC)

气候数据在线(CDO)国家气候数据中心(NCDC)定位数据的主要一般搜索页面…

www.ncdc.noaa.gov](https://www.ncdc.noaa.gov/cdo-web/search)

Tableau Public 可在此免费获得:

[## Tableau 软件

Tableau 可以帮助任何人看到和理解他们的数据。连接到几乎任何数据库,拖放创建…

www.tableau.com](https://www.tableau.com/)

Bikeshare 数据只包含几个字段。

  • 持续时间—行程的持续时间
  • 开始日期—包括开始日期和时间
  • 结束日期—包括结束日期和时间
  • 起点桩号—包括起点桩号名称和编号
  • 终点桩号—包括终点桩号名称和编号
  • 自行车号码—包括旅行中使用的自行车的 ID 号
  • 会员类型—表示用户是“注册”会员(年度会员、30 天会员或日间会员)还是“临时”会员(单程、24 小时通票、3 天通票或 5 天通票)

仅查看 2018 年 6 月、7 月和 8 月就有 100 万条记录,因此我们将在这三个月停下来做这个练习。进入 Tableau 工作表后,您可以创建一个计算字段,使持续时间更容易处理。持续时间如果你想以分钟而不是秒为单位工作,需要除以 60。或者你可以提前在 Excel 或 Google Sheets 中完成。

我从 NOAA 获取了里根国家机场(DCA)从 2018 年 6 月 1 日到 2018 年 8 月 31 日的温度和降水数据。当数据可以下载时,NOAA 会给你发一封电子邮件。只需要一分钟。我删除了。csv 文件除了降水,最高温度,日期使用 Excel。🌦

导入和设置数据

确保在添加天气数据之前将 Bikeshare 数据添加到 Tableau。这将在您稍后更改 Bikeshare 数据的主键时派上用场。

在 Tableau 中,执行一个 union 来快速垂直连接所有观察结果(也称为添加更多行)。

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

然后是添加天气数据的时候了。我们需要在自行车共享数据中加入天气数据。为了使这个连接工作,需要使用一个日期列作为键,即两个表中的共享列。

如果不进行修改,Bikeshare 开始日期列将无法工作,因为它是日期时间格式,而天气数据的日期字段是日期格式。Tableau 的数据解释器可能在这方面有所帮助,但每当我试图使用它时,它都会抛出一个错误。这个问题发生在文本文件中,包括。csv 文件。如果你先把你的数据存成一个. xls 文件,它可能会工作——我没有测试过。

对于这个分析,我们并不真正需要开始日期结束日期列,所以我将结束日期列转换为日期数据类型。

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

实际上花了一些时间来弄清楚如何让 Tableau 保存一个新的数据库字段用于连接。诀窍在于,在你点击工作表之前,Tableau 不会保存数据类型的改变。然后,您可以返回到数据源选项卡并进行连接。

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

数据可视化和分析乐趣

我制作了一些可视化的工作表,探索数据的各个方面。然后我把其中几个组合成一个仪表盘和一个故事,你可以在这里看到。仪表板和故事可以嵌入到大多数网站中,但 Medium 不允许真正的嵌入 html 或 javascript 代码,所以您在下面看到的是一个截图。

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

同样,对于交互式版本,请点击这里。Tableau 的强大之处在于它的交互式图表,所以我鼓励你去看看这个网站。

最上面的两个图表是双轴图表。我不喜欢双轴图表,因为它们通常不像单轴图表那样直观。然而,它们可以很好地显示三个变量之间的关系。

分析

在某些情况下,高降雨量确实与低乘车率相一致。看起来下雨和低客流量之间有关系。🌧

分解一天中的时间来观察乘客量会很有趣。深夜或清晨的雨可能对乘客没有什么影响。我们将把这个分析留到以后。😃

有趣的是,温度对乘车人数没有明显的影响。

我很惊讶地发现,夏季的周四和周五的客流量比一周前几天要高得多。一周中每天的乘车次数条形图清楚地表明了这种关系。

有趣的是,成员们骑行的时间比临时的、不骑马的成员要短得多。这是有道理的,因为会员可能主要是通勤者,而非会员可能是悠闲地参观购物中心周围景点的游客。

在这三个月中,会员的旅行次数几乎是非会员的三倍。随着旅游季节的结束,这种差距是否会扩大,这将是一件有趣的事情。

Tableau Public 没有很多内置的统计工具,尽管它增加了更多。你可以拟合一条趋势线,了解是否有一些相关性。唯一有意义的(p < .05) correlation I found via linear regression was between date and temperature — it got hotter over the summer. ☀️ Not a shock there.

Conclusion

In this article we found some interesting insights about Bikeshare ridership in Washington DC by using Tableau and combining two publicly available datasets. Tableau makes data analysis fast; it took just a few hours to find, clean, and join the data, make the dashboard, and write this article.

There are lots of related analyses and projects it would be neat to explore, in addition to the ones mentioned above. It would be interesting to look at data since the program’s inception in 2010 to see how ridership has increased.

It would also be interesting to create a forecast for ridership using machine learning. Tableau Public doesn’t allow easy links to python code, but the Tableau Desktop, which recently jumped to $70 per user, does.

Finally, Bikeshare is about to unveil its first electronic bikes. It could be interesting to dig into that data in a few months to see how they are used.

Wrap

Thanks for reading. 👍 I hope you found this article helpful. If you did, please share it on your favorite social media channel. 😃

I encourage you to try out Tableau if you haven’t. Udemy’s Tableau 10 A-Z:数据科学实践 Tableau 培训! 对任何想尝试的人来说都是一个很好的廉价训练。

我帮助人们了解 Python、云计算、数据科学和其他技术主题。查看我的其他文章,如果你对这些感兴趣,请关注我。

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

用餐愉快!📊

使用气泡图探索人口普查收入数据集

原文:https://towardsdatascience.com/exploring-the-census-income-dataset-using-bubble-plot-cfa1b366313b?source=collection_archive---------3-----------------------

数据科学最美妙的事情之一是数据探索和可视化。那就是当数据告诉我们一个故事的时候,我们只需要花一些时间,去探索,去认真倾听。

在探索数据集时,我们会查看数据中不同特征之间以及特征和目标之间的联系。这可以为我们提供许多见解,如我们应该如何制定问题、所需的预处理(缺失值、归一化)、我们应该使用哪种算法来构建模型、我们应该分割数据并为数据集的不同子集构建不同的模型等。

人口普查收入数据集

为了演示这一点,我选择了人口普查收入数据集,它有 14 个属性和 48,842 个实例。该数据集的目标是根据人口普查数据预测收入是否超过 5 万美元/年。

数据的特征是:“年龄”、“工作阶级”、“fnlwgt”、“教育”、“教育人数”、“婚姻状况”、“职业”、“关系”、“种族”、“性别”、“T5”、“资本收益”、“资本损失”、“每周小时数”、“本国”。

目标是收入水平:> 50K 或者≤50K。

下面是一个人口普查收入数据集的例子:

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

年龄(数值)和收入(类别)之间的联系

让我们来看看年龄与收入的散点图。

y _ 轴: > 50K → 1,≤50K。→0, x 轴:年龄

from matplotlib import pyplot as plt
plt.scatter(data.age, (data.target==’<=50K’))

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

Scatter plot — Income vs. age - x_axis: age, y_axis: income >50K → 1 , ≤50K. →0

这并没有告诉我们太多,对不对?所有的点都是一个接一个的。我们可以给每个关卡添加一些随机噪声来实现更多的散乱点。

plt.scatter(data.age, (data.target==’<=50K’)+0.5*np.random.rand(len(data)))

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

Scatter plot — Income vs. age —x_axis: age, y_axis: >50K → values above 1 , ≤50K. → values below 0.5

这样更好,但是仍然,当有很多点时,很难理解模式。

现在让我们试试 泡泡剧情 (泡泡剧情的完整文档和代码可在https://github.com/shirmeir/bubble_plot获得)。

通过以下方式安装软件包:

pip install bubble_plot

我们需要提供数据帧,x 轴和 y 轴。

from bubble_plot.bubble_plot import bubble_plotbubble_plot(data,’age’,’target’, normalization_by_all=False)

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

bubble plot — target vs. age — P(y/x)

现在我们可以看到一个实际的模式!

对于数字特征,如年龄,气泡图会创建桶。每个气泡的大小与每个桶中的点数成比例(在这种情况下,还与颜色成比例)。

我们可以看到收入最高的人群大多在 39–45 岁左右(这个水桶的中间是 42.5)。

将参数 normalization_by_all 设置为 False 定义了我们想要绘制 P(y/x),也就是说,在给定年龄(x)的情况下绘制收入(y)的分布。该图中的每一列都是给定年龄的收入值的独立(1D)直方图。

将参数 normalization_by_all 设置为 True 将绘制年龄(x)和收入(y)的联合分布 P(x,y),这实际上是一个带有气泡的 2D 直方图。

bubble_plot(data,’age’,’target’, normalization_by_all=True)

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

bubble plot - target vs. age — P(x,y)

现在我们得到了收入(y)和年龄(x)的联合分布,P(x,y)。从这里我们可以看到,我们数据中的大多数人都处于较年轻的年龄段(大约 20-30 岁),一小部分年轻人(大约 20 岁)群体拥有高收入,因为他们的泡沫非常小。在高收入人群中,最大的年龄组是 42 岁左右。

这是分类特征和数字特征的对比图。但是如果我们想要可视化两个数字特征之间的联系呢?

绘制两个数字特征之间的联系

让我们回顾一下每周工作时间与年龄的关系。

plt.scatter(data.age, data[‘hours-per-week’])

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

Scatter plot — working hours per week vs. age — x_axis: age, y_axis: working hours

同样,由于这个数据集有许多点,从散点图中你无法了解这两个变量之间的联系。

使用气泡图,我们可以得到更清晰的东西。

bubble_plot(data,’age’,’hours-per-week’, normalization_by_all=False)

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

Bubble plot — working hours per week vs. age — P(y|x): x_axis: age, y_axis: working hours, distribution of the working hours given the age group. The bubble are normalized by the x-axis (age) so in each column the bubble size sums up to 100%

我们可以看到,给定一个人的年龄在 20 岁左右,一个人最有可能每周工作 15-20 小时,而如果一个人在 35-45 岁之间,一个人更有可能工作 45-90 小时。)一周小时。

气泡图为两个数字特征(年龄和每周工作时间)创建了存储桶,并且在给定年龄的情况下,气泡大小与每周工作时间的计数频率成比例。

现在我们来看看联合分布

bubble_plot(data,’age’,’hours-per-week’, normalization_by_all=True)

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

Bubble plot — working hours per week vs. age, P(x,y): x_axis: age, y_axis: working hours

现在,气泡的大小与每周小时数和年龄值的频率成正比。我们可以看到,这个数据集中的大多数人年龄在 20-30 岁之间,每周工作 30-45 小时。

用气泡图可视化三个维度——年龄、工作时间和收入

现在我们来看年龄,每周工作小时,结合收入水平。这怎么可能呢?我们能在二维图中显示三维信息吗?

bubble_plot(df, x=’age’, y=’hours-per-week’, z_boolean=’target’)

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

Bubble plot — working hours per week vs. age —P(x,y): x_axis: age, y_axis: working hours, color — proportional to the rate of high income people within each bucket

在这个泡泡图中,我们再次看到了每周小时数与年龄(p(x,y))的联合分布,但这里的颜色与这个桶中所有人的高收入人的比率—(#>50K/(#>50K)+(#≤50K))—成比例。通过提供 z_boolean 变量,我们使用气泡的颜色向绘图添加了额外的维度。

颜色越浅,给定布尔特征/目标 z 的比率越高。请参见图像中的色彩映射表。

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

Cool colormap — Pink would stand for the higher ratios in our case, cyan would stand for the lower ratios

这张图清楚地向我们表明,在每周工作超过 40 小时的 30 岁以上的人群中,高收入更为普遍。

工作阶级与年龄与收入

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

p(x,y): y-axis - workclass, x-axis - age. color is proportional to the rate of high incomes within each bucket.

这里,y 轴是工作阶层,x 轴是年龄,颜色与每个区间内的高收入比率成比例。

你可以看到,如果你是 30-60 岁之间的自营职业者,你收入超过 5 万英镑的可能性最大。联邦政府也有更高的税率获得收入超过 50K,但在 40-60 岁之间。州政府在 48-52 岁之间有较高的收入。

职业 vs 关系与收入

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

p(x,y): y-axis — occupation, x-axis — relationship. color is proportional to the rate of high incomes within each bucket.

专业、行政管理和技术支持的高收入人群比例最高。已婚人士似乎有更高的概率获得高收入。请注意,在经理层中,丈夫的高收入比率比妻子略高(更高)。

总结

虽然散点图和箱线图可以为我们提供数据分布和汇总统计的高级视图,但这有时是不够的,尤其是在数据有许多点并且变量之间的联系不是一个平凡函数的情况下。

使用气泡图来可视化我们的数据可以帮助我们清楚地看到数据集中特征之间的关系,即使是大型数据集,对于分类特征和数字特征也是如此,这可以帮助我们以更合适的方式对数据建模,并为连接和特征找到正确的函数。

安装气泡图:

pip install bubble_plot

在 python 上运行 bubble_plot:

import pandas as pd  
from bubble_plot.bubble_plot import bubble_plot
from sklearn.datasets import load_boston                            
data = load_boston()                            
df = pd.DataFrame(columns=data['feature_names'], data=data['data'])                            
df['target'] = data['target']                            
bubble_plot(df, x='RM', y='target')

探索数据丛林

原文:https://towardsdatascience.com/exploring-the-data-jungle-4bb98cd6fa34?source=collection_archive---------6-----------------------

关于发现、驯服和研究解决实际问题所需数据的免费电子书

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

一些人认为数据来自简单、有组织的表格——数字和文本整齐地排列成小行,每个值用逗号隔开。还有一些人认为所有的数据值都是 100%正确的,因为它们源自一台从不出错的自主数据收集机器。有些人认为,每个数据库,开箱即用,可以存储任何东西,并使其在几分之一秒内容易检索。在一个完美的世界里,这些信念可能与真理一致,但在这个世界里,远非如此。

野外的数据杂乱无章。它并不总是在你想要的地方。它可能以一种奇怪的格式存在。它可能缺少值或值不正确。它可能是有偏差的,或者不能代表你想要研究的人群。可能有太多的东西需要管理。可能不存在。一个优秀的数据科学家对这样的问题并不陌生;他们是天生的。为了避免或解决这些问题以及类似的问题,熟悉数据的位置、格式和质量是很有帮助的。

这本书的三个章节分别展示了你在寻找数据时可能会发现的东西。第一章——摘自我自己的书 像数据科学家一样思考——将数据的世界描述为一片值得探索和细致调查的荒野。在这里,数据在现代世界中的作用已经发展到不能再被忽视的程度;因此,我们需要为可能找到我们想要的数据的许多方法和形式做好准备。第二章来自 Nina Zumel 和 John Mount 的 【实用数据科学与 R】—全面介绍了检查数据的多种方法。这种特定于 R 的观点的指示和建议可以推广到使用任何统计软件来全面理解您的数据,而不仅仅是 R。第三章-来自 Henrik Brink、Joseph W. Richards 和 Mark Fetherolf真实世界的机器学习-为您准备真实世界的机器学习数据提供了一个深思熟虑的蓝图。如果不进行一点清理、组织和修饰,来自野外的数据通常不会被输入到一个高度智能但冷冰冰的确定性算法中。

数据并不总是容易获得的。它可能是混乱的、错误的或难以访问的。但是尽管如此,它仍然可以回答真正的商业问题,解决有意义的问题。这一系列章节向你展示了如何在野外处理数据以获得最大的洞察力和利益。

点击此链接下载曼宁的免费电子书。

让我知道你的想法!

Brian Godsey 博士是一名数学家、企业家、投资者和数据科学家,他的著作 像数据科学家一样思考 现在有印刷版和电子书。——briangodsey.com

如果你喜欢这个,请点击💚下面。

**[## 数据科学的过程被低估了

编码和统计很重要,但是选择先做什么和下一步做什么也很重要

medium.com](https://medium.com/towards-data-science/the-process-of-data-science-is-underrated-87ea58d5f70c)**

探索知识的新领域

原文:https://towardsdatascience.com/exploring-the-frontiers-of-knowledge-a7f7acf538f0?source=collection_archive---------4-----------------------

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

人工智能

人工智能是让机器变得聪明的科学,但它们有多聪明,我们希望它们有多聪明?在这篇文章中,我邀请你深入研究制造智能机器的哲学,并帮助我探索我们对我们生活的世界的知识前沿,以及人工智能可能如何改变这种情况。

“人工智能系统将成为我们大脑的延伸,就像汽车是我们双腿的延伸一样,它们不会取代我们,它们将放大我们所做的一切,增强你的记忆,给你即时的知识,让我们专注于做正确的事情。” —脸书人工智能研究

我们对人工智能做了什么?

从语音识别系统、自主系统和自动驾驶汽车、自动机器翻译、计算机视觉和自然语言处理(照片中的对象检测和分类、图像字幕生成),许多领域都有许多涉及人工智能的创新,不胜枚举。以下是人工智能使用的一些常见用例列表。

  • 营销个性化、广告(谷歌广告感知、赞助广告)和推荐引擎(网飞、亚马逊)
  • 个人安全
  • 医疗保健(在早期阶段检测疾病),如果你想了解该行业对这场斗争的重视程度,最近有一个关于提高肺癌检测的挑战,现在又有一个关于预测基因变异的影响以实现个性化医疗的挑战
  • 金融交易
  • 欺诈检测
  • 网上搜索
  • 数据安全
  • 太空、天文学和机器人学
  • 天气预报
  • 计算神经科学

人工智能的目标

你认为什么样的人工智能会给我们带来完整的体验?我们知道,我们需要人工智能做得更好的事情之一是当涉及到感知时,即看到和理解语言的能力,以便与我们周围的事物进行交互和描述。我们不能否认我们对卷积神经网络(CNN)、递归神经网络、生成对抗网络(GAN)和许多更复杂的算法的热爱和热情,这些算法在学术界和工业界都产生了最先进的结果,但即使如此,主要问题仍未解决。现在你可能会问我,人工智能的终极目标是什么?

答案:人工通用智能 ( AGI )

其他人也会认为人工智能的目标之一是奇点,技术奇点是一种假设,即人工智能超智能的发明将突然引发失控的技术增长,从而导致人类文明发生深不可测的变化。根据这一假设,一个可升级的智能代理(如运行基于软件的人工通用智能的计算机)将进入自我改进周期的“失控反应”,每一代新的更智能的一代出现得越来越快,导致智能爆炸,并产生一个强大的超级智能,从质量上讲,它将远远超过所有人类智能。

人工通用智能(AGI)

AGI 是一台智能机器,它能成功地完成人类能完成的任何智力任务。它是一些人工智能研究实验室的首要目标,也是科幻小说和未来研究中的常见话题。AGI 也被称为强人工智能或通用人工智能,你可以在 AGI 学会上找到更多信息,还有这个通用人工智能挑战赛

我们有什么样的人工智能?

现在我们知道人工智能的目标,但我们还没有达到,但这里还缺少一些东西,那就是描述什么样的人工智能目前对我们可用?

人工狭义智能(狭义 AI)

狭义人工智能(Narrow AI),也称为 Week AI,是人类迄今为止实现的唯一人工智能形式。这是一种擅长执行单一任务的人工智能,例如下棋或下围棋,提出购买建议,销售预测和天气预报。计算机视觉、自然语言处理现阶段仍属于狭义 AI。语音和图像识别是狭义的人工智能,即使它们的进步看起来很迷人。甚至谷歌的翻译引擎和许多我们习惯看到甚至钦佩的人工智能,尽管它们很复杂,但它们是狭义人工智能的一种形式。

为什么是艾将军?

我认为 Google DeepMind 的两份使命声明确实有助于回答这个问题。

DeepMind 任务

  1. 求解智能
  2. 用它来解决其他一切

这里的前提是,如果人类曾经达到解决智能的地步,那么我们将利用它来解决其他一切问题,从而使世界变得更加美好。在这个关于万有理论的演讲中,戴密斯·哈萨比斯说:“为了找到万有理论,结果可能是我们必须解决智力”。这源于这样一种想法,即关于这个世界,我们仍然有许多事情不了解,人类不断面临着困难的问题(治愈疾病,星际探索……),并且有这样一种信念,即人工智能将帮助人类以不同的方式处理这些问题,并更快地解决它们,从那时起,我们将开始突破知识的前沿。在我忘记之前,AlphaGo 是科学的巨大突破,但还不是 AGI。

是什么让求解智能如此困难?

为什么一直没能解决一般情报?事实是,这个问题没有明确的答案,但让这句话帮助我们:

我无法建造的东西,我并不真正理解。—理查德·费曼

最近,深度学习的爆炸式发展带来了许多进步和新发现。深度学习表示一组基于深度人工神经网络的架构。现在另一个问题可能会出现在你的脑海中,什么是人工神经网络?人工神经网络是受人脑工作方式启发的算法。

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

Anatomy of neuron

我不会谈论太多细节,但现在你应该知道,在神经科学中,生物神经网络是一系列相互连接的神经元,它们的激活定义了一条可识别的线性路径。神经元与其邻居相互作用的界面通常由几个轴突终末组成,这些轴突终末通过突触连接到其他神经元上的树突。

许多人误解了这一点,人工神经网络不像我们的大脑那样工作,人工神经网络只是简单的原始比较,神经元之间的连接比通过人工神经网络架构实现的连接要复杂得多,记住,我们的大脑要复杂得多,我们需要从中学习更多。关于我们的大脑,有许多事情我们不知道,这也使得我们很难知道我们应该如何在人类层面上模拟一个人工大脑来进行推理。

如果有人说大脑是宇宙中最复杂的机器,他有充分的理由这样想。

最终注释

也许这里的标题应该是“最终问题”,这个帖子是为了陈述一些还没有最终答案的问题。很难说哪里会有突破,但我们仍然可以提出一些问题,思考解决真正人工智能的问题。

  • 我们已经有解决智能问题的正确算法了吗?
  • 我们是否受到当前可用硬件的限制?
  • 我们还需要发明智能数学吗?
  • 如果我们不知道我们的大脑是如何工作的,构建人工智能也将成为一项艰巨的任务,人类的大脑是我们了解学习如何发生、记忆如何储存的最佳工具?推理是怎么做的?我们应该如何模拟一个人造大脑
  • 理解深度神经网络如何学习变得越来越难,许多其他人工智能被视为黑盒,因为我们不太明白它为什么或如何工作或做什么,如果它们中的一个达到了人类水平的智能,我们将如何知道?

我个人认为这个话题还有很多东西需要探索,不可能一篇文章或者一本书就能完全涵盖我在这里提出来讨论的主题。这是一个公开的讨论,我对人工智能和世界各地正在开发的改善人们生活的东西很感兴趣。显然,人工智能的未来仍是未知的,世界仍在探索这一强大技术的其他用途。

这是一个公开的讨论,我很想听听你对这个话题的看法,并找到可以一起探讨更多想法的人。欢迎回复本帖或 微博我

如果你喜欢这些作品,请留下你的掌声👏推荐这篇文章,让别人也能看到。

用最新的维基百科点击流探索人工智能、数据科学和机器学习的意义

原文:https://towardsdatascience.com/exploring-the-meaning-of-ai-data-science-and-machine-learning-with-the-latest-wikipedia-5fea5f0a2d46?source=collection_archive---------5-----------------------

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

数据科学、机器学习和人工智能等术语在科技流行语的“万神殿”中找到了一个当之无愧的位置。

我们几乎每天都听到和读到关于他们的报道。事实上,它们经常被互换使用,尽管根据来源的不同会有明显的偏好(你可能已经注意到市场营销和媒体对术语 AI 的某种偏好)。

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

https://medium.com/enabled-innovation/artificial-general-intelligence-too-much-or-too-little-too-soon-9c0dd7bd1c2d

上图是根据普华永道 改编的 ,这是互联网上众多试图解释术语之间关系的维恩图中的一个,但并不十分直观。

我们可以使用数据和分析方法来捕捉这些术语的含义和语义上下文吗?好吧,让我们试一试,试着以毒攻毒。维基百科点击流数据集对此会有很大帮助。

维基百科点击流

维基媒体基金会最近决定对几种主要语言的每月点击流进行开源。一个典型的英语点击流包含数百万个不同的维基百科网址,被互联网用户请求数十亿次。

拥有如此全面的资源是一个好消息。它可以对全球最繁忙的网站之一的在线用户行为进行多种复杂类型的分析。事实上,有几篇发表的学术论文从不同的科学角度研究了点击流数据集,尤其是行为角度。

这将是一种使用网络分析的实用方法。不仅是为了回答上面的问题,也是为了激励点击流和网络分析在其他应用和领域的使用。关键词研究、内容开发、网络流量可视化浮现在脑海中,我相信还有很多其他的。

数据集

我们将使用 2018 年 3 月的最新可用数据集,其中包含 2330 万对英文引用和目标 URL,占维基百科服务器总页面请求数的 62 亿。

该数据集使得基于用户从一个维基百科页面导航到另一个页面的方式来可视化不同术语之间的关系成为可能,要么通过跟随链接,要么使用内置的搜索功能——有时会成为维基百科兔子洞的受害者。

节点、边和邻域

数据集实际上是一个巨大的节点网络(维基百科文章),这些节点根据用户会话期间请求的页面顺序通过边连接到其他节点(相关文章)。

边的大小可以被认为是反映两个节点之间流量的权重因子。使用网络分析的一个好处是其输出可以制成图表。这让我们可以看到所有这些点击和页面转换可能意味着什么的整体视图。

注意:下面的图表已经过配置,可以在移动设备上正常查看。然而,它们最好在大屏幕上观看。

接下来,我们将研究以下术语的点击流图:

  • 数据挖掘和数据科学
  • 机器学习
  • 人工智能和人工通用智能。

数据挖掘热身

作为热身,为了解释分析方法,我们将从数据挖掘开始,这是一个过去经常使用的术语。

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

这个初始图隔离了网络中涉及“数据挖掘”的部分及其相邻节点(文章)。两个节点之间的边是它们之间的流量,节点的颜色和大小反映了它们所连接的邻居的数量。这在某种程度上已经是有用的了。为了更好地理解相关术语,作为第二步,节点被分组到相关类别中,以便更清楚地看到更广泛的关系。

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

这种做法的缺点(除了我个人对使用标签的偏见之外)是图表可能会有过多的文本和颜色。此外,在某些情况下,例如人工智能,很难将组的数量控制在可管理的水平。在人工智能的情况下,节点不够同质,无法创建有意义的类别。在这两种情况下,节点都是故意不分组放置的。还要注意的是,为了使图形更加清晰,一些节点是不可见的——要么是因为它们的通信量低,要么是因为它们的邻居数量非常少。

数据科学

首先要注意的一点是,维基百科中关于数据科学的条目相对有限。在这篇文章中,它是所有其他术语中超链接数量最少的。然而,内容一直在大幅增长。自 2017 年 11 月第一个数据集发布以来,页面上的链接几乎翻了一番。

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

  • 在观察了图表之后,我们可以说,从维基百科的角度来看,数据科学围绕着机器学习(主要)和统计学(其次)以及一点计算机科学(当考虑到节点的长尾时,这变得更加明显)。
  • 实际上,我认为大多数人都会同意数据科学比这更广泛。随着文章内容的不断增长,希望很快会有更多的证据。
  • 对于机器学习是否应该被视为数据科学的重要组成部分这一常见问题,从维基百科点击流的角度来看,答案显然是肯定的。

(关于数据科学的有趣事实:与它相关的一个页面实际上是维基百科关于流行语的文章,尽管它的顶点度数不足以让它进入图表)。

数据科学—数据挖掘比较

关于数据挖掘的文章更加全面,因为它已经存在了很长时间。

也就是说,在相关术语的类型之间仍然有相当多的相似性。数据科学图表中的大多数术语也出现在数据挖掘图表中。这可能会给那些认为数据科学是 90 年代和 21 世纪初使用的数据挖掘的更名版本的人提供一些依据。

然而,就目前而言,数据科学缺乏与业务相关术语的强关联,如商业智能、分析,可能还有数据挖掘的 OLAP 等术语,但随着数据科学文章的发展,这些和其他关联可能会出现。

机器学习

机器学习似乎是最直接的例子。它在很大程度上与涉及知识发现或预测的不同科学方法的术语有关(被称为机器或统计学习方法)。

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

  • 我们看到以下两种类型的许多节点:经典方法,如统计分类和逻辑回归,以及其他更现代的方法,如支持向量机、随机森林和人工神经网络。
  • 机器学习的概念主要与方法、模型和技术相关联。许多人——但不是所有人——的目标是在给定一组观察结果的情况下预测结果。事实上,ML 相关节点的列表可以很容易地转换成一本关于 ML 的书的目录。
  • 深度学习或强化学习等几种“x”学习类型的出现也令人印象深刻。这不再仅仅是有监督和无监督的学习。这一发现表明,ML 本身可能正在演变成一个总括术语,以容纳越来越多的学习型家庭。
  • 机器学习“需要”统计数据吗?就像之前维基百科的答案是肯定的,因为在许多与最大似然相关的方法中存在统计或统计学习。

人工智能

这是迄今为止最广泛、最多样的术语,但也是最难转换成图表的术语。AI 本身与超过 450 个节点相关联,我不得不为邻居的数量设置一个高阈值,这样图形就不会看起来像一个巨大的毛球。节点的多样性仍然很难定义有意义的类别。

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

  • 许多节点具有非常一般的性质:科学(心理学、哲学)或科学领域(逻辑学、博弈论等)的名称,这是多学科人工智能的证据。
  • 大多数相关节点本质上是对人工智能某些特定方面的引用,例如人工智能的应用、人工智能术语表、时间轴、历史等。这是我们在之前的术语中没有观察到的。
  • 同样,在这里我们第一次看到了一家公司的存在:Deep Mind,这可能是该组织在将人工智能应用到现实世界中所发挥的作用的结果。
  • 最后,有两个关于艾伦图灵的节点,他自己的页面和同名测试的页面。令人印象深刻的是,可以追溯到 1950 年的图灵测试经受住了时间的考验,并且仍然与今天的人工智能环境相关。

人工通用智能

为了跟上时代精神,最后一张点击流网络图是为人工智能设计的。

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

图中的节点不够均匀,无法创建多个有意义的群集。然而,在带有“头脑上传”和“智能爆炸”等名称的节点之间,我们可以看到编辑和用户似乎感兴趣的两个主题。

让我们称第一个集群为“邪恶的人工智能”,包括如下页面

  • 来自人工一般智能的存在风险
  • 人工智能接管
  • 全球灾难风险

让我们以“AI for good”集群结束,它包括:

  • 友好的人工智能
  • 人工智能和哲学
  • 人工智能伦理

聚类本身不能明显地定义人工一般智能,但是它们指示了与它们相关联的流行内容。

人工神经网络的普遍性

我们研究了这 5 个术语,人工神经网络(ANN)是所有 5 个术语中唯一存在且突出的相关术语。

很难接受这是一个巧合。人工神经网络结合现代计算技术的进步与人工智能领域的最新进展密切相关。在某种程度上,他们帮助人工智能在经历了多年的“人工智能寒冬”后重新崛起。

目前最先进的深度学习模型是基于人工神经网络的。Tensorflow 是 Deep Mind 最著名的开源项目,在 Github 交互Stackoverflow 流量方面,它是最受欢迎的人工神经网络应用程序库之一。从各方面考虑,人工神经网络似乎很可能会继续存在,我们将会听到越来越多关于它们的消息(我的预测)。

密码

使用 R 语言生成图形的代码可在github repo中找到,其中一些参数和过滤器选项(如边数过滤器、阶数、阶数)可用。

您可以使用简单的开始脚本,快速试验您选择的其他概念是如何相互关联的。

动机

这篇文章是由一些内容组合而成的,这些内容是我最近接触到的,我强烈推荐这些内容。

  • 米哈伊尔·波波夫关于创建网络中立图的博客文章
  • 米克·库尼在都柏林数据科学会议小组的网络分析培训材料
  • 大卫·罗宾逊的 blogpostWinVector 的文章从实用的角度解释了 AI、ML、数据科学(和公司)的区别

我还想强调像 ggplotgg graph这样的开源库在处理网络数据可视化时是多么有用。

最终意见

当你现在正在判断你刚刚阅读的内容,并且可能已经有了一些异议,请记住:我们的目标不是定义任何术语,而是通过维基百科编辑和用户行为的角度来看待它们。在我看来,这有点像在玩拼图游戏。

当然,文章反映了作者的偏见,这是一种固有的偏见。然而,积极的一面是,在维基百科的情况下,由于维基的编辑模式和控制过程,我们可以依靠群众的智慧来减轻任何强烈的偏见或极端/错误的观点。举个例子,维基百科关于人工智能的文章有数以千计的编辑和观察者。

总之,对维基百科点击流进行网络分析的一个重要好处是,它可以揭示世界上最大的百科全书的用户和贡献者都认为重要的内容。基于他们书写和点击的方式。

你怎么看,维基百科点击流还有其他值得探索的术语吗?你认为这个数据集还有其他有趣的用途吗?数据科学从业者:有没有一种方法可以使用例如 NLP 来自动对图中的节点进行分组?

亚历克斯·帕帕乔治

关于我

我是营销分析和数据科学方面的独立顾问,帮助转化驱动的数字企业做出明智的营销决策。我在我的 博客 上,通过 Twitter LinkedIn分享我关于数字、营销和数据分析的故事。

探索 2018 年的 SAR 工具前景

原文:https://towardsdatascience.com/exploring-the-sar-tools-landscape-in-2018-925aec6fe7c3?source=collection_archive---------10-----------------------

使用 SAR 数据处理应用程序时,有许多工具可供选择。其中大部分是已经存在多年的商业或开源软件。功能范围从基本的 SAR 处理和可视化,到干涉测量和时间序列分析。如今,支持普通开发人员处理 SAR 数据的全功能云原生平台的选项越来越少。

题目

我想了解有哪些商业和开放工具可用于从 SAR 数据中获取信息。我非常熟悉光学影像工具的前景,并且知道因为它们主要只是地理空间栅格处理的引擎,所以它们中的大多数在某种程度上用于基本的 SAR 数据处理。然而,我想专门探索那些构建时考虑了 SAR 功能并具有独特或明确的 SAR 特性的工具。我把这些工具分为四类:商业云平台、开源平台、商业软件、开放软件。我没有使用过所有这些工具,但是我尝试给出一个从我能找到的信息中提炼出来的简要描述。我有意不讨论数据发现工具。这里的目的不是要全面,而是要给人一种对地形的感觉。

商业云平台

如今,相对而言,很少有云原生的SAR 工具作为服务提供给应用程序开发人员和科学家。总的来说,云原生地理空间平台才出现了几年,所以我想这并不奇怪。我没有遇到任何平台提供内置功能,比如多视角或干涉处理。随着更多合成孔径雷达数据的出现,我预计在未来几年内,这一领域的能力和选择的数量都会增加。

谷歌地球引擎 是一个平台,它使任何科学家或开发人员都可以相对容易地进行大规模的 SAR 数据处理。如果你能用 javascript 编写一些代码,你就可以使用他们的代码编辑器和可视化工具来进行大规模的 SAR 数据处理。到目前为止,我看到的所有 SAR 用例都围绕着 Sentinel-1 数据,但是有一个强大的用户社区开发脚本来支持 SAR 处理。最棒的是,这些工具可以免费用于非商业目的(目前)。如果你正在处理自己的数据,并把它存储回谷歌云中,你可能需要支付一点存储费用。对于使用 Sentinel-1 数据的学者和非政府组织来说,这是一个很好的选择,但对于支持企业的平台来说,这不是一个很好的选择。

GBDX是 DigitalGlobe 云原生平台,用于处理他们的卫星图像。随着 MDA 和 DigitalGlobe 的合并,他们已经开始引入一些工具来处理 Radarsat-2 数据,就像这个 SAR 振幅变化检测工作流程。由于 GBDX 平台的核心似乎只是一个将“任务”链接到“工作流”的大型容器编排系统,开发人员可以使用任何库来构建自己的 Radarsat-2 数据处理工作流。GBDX 还在他们的平台上提供了来自 Harris ENVI 的一些算法。对于试图构建使用 Radarsat-2 数据的工作流的软件工程师来说,这将是一个很好的云原生选项。

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

A SAR Amplitude Change Detection Result from the GBDX Platform. Borrowed from their public docs.

笛卡尔实验室 将他们的平台标榜为“数据精炼厂,为了解这个星球而建”。它在概念上类似于 GBDX,但是可能更加数据不可知。用户可以通过目录 API 添加自己的数据。用户利用几个预定义环境中的之一,用 python 代码编写一个“任务”。这些环境包含用于地理空间数据、数据科学和机器学习的典型 python 库。似乎没有任何独特的更高级别的工具可以更容易地处理 SAR 数据,尽管他们已经用他们的平台建立了一个 Sentinel-1 数据的全球复合图。对于试图构建 SAR 工作流的公司来说,这将是一个很好的云原生选择,但是工程团队仍然需要 SAR 专家。

Planetwatchers 预见 最近宣布成为地理空间分析平台,最初专注于利用 SAR 和光学数据解决林业、农业和能源使用案例。他们的平台上没有多少公开信息。

开源平台

包含 SAR 相关特性的开源平台选项似乎相对有限。我似乎找不到任何好的例子。目前有几个值得注意的处理栅格数据的开源平台选项,如 RasterFoundryGeotrellis (由 Azavea 开发)和 Cumulus (由开发种子开发)。虽然它们都没有特定的 SAR 焦点,但它们都可以用作执行一些常规数据管理和大规模栅格数据处理(通常为无服务器)的起点。例如, Radiant Earth 正在使用 RasterFoundry 作为他们开放数据平台的基础(尽管还没有 SAR)。

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

Raster Foundry Lab for examining wildfire damage with optical imagery. Borrowed from their blog post.

开源软件

对于各种类型的 SAR 数据处理,似乎有太多好的开源软件包。与平台选项一样,有许多有用的项目不一定是特定于 SAR 的,比如 GDAL ,但是我将坚持探索那些具有 SAR 焦点的项目。这只是我经常看到提到的一些例子。我将留给读者去更深入地探究这个来自 RadarCODEpoke about github的两年前的列表。

SNAP Sentinel-1 工具箱 PolSARPro都是在欧洲航天局(ESA)的资金支持下开发的软件包。PolSARPro 是一个较老的偏振处理和教育工具。积极开发似乎在 2013 年停止了。SNAP 是一个通用的架构和接口,用于处理来自所有 Sentinel 任务的数据以及来自一些 Copernicus 贡献任务的数据。Sentinel-1 工具箱是所有欧空局搜救任务和一些第三方数据提供商(如 COSMO-SkyMed)的处理工具、数据产品读取器和写入器的集合。Sentinel-1 工具箱包含了从它所支持的任务中获取信息产品所需的任何功能。你可以通过 SNAP GUI,或者使用 SNAP python 接口来实现。

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

Working with some Sentinel-1 data in the SNAP interface.

RAT 和 是通用的 SAR 后处理工具。RAT 项目在柏林技术大学启动,现在已经退役。它以 PyRAT 的形式存在,PyRAT 是一个用于 SAR 处理的 GUI、CLI 和 python 框架。这似乎是一个面向专家的选项…这里没有训练轮。

InSAR ISCEGM tsarDoris都是干涉 SAR 处理工作流程的成熟工具。它们在许多期刊文章中被很好地记录和引用。对于科学家和学者来说,这些都是很好的工具。任何打算将该软件用于商业目的的人都应该仔细阅读许可证。虽然 GMTSAR 是 GPL,但其他两个似乎有更复杂的许可条件。****

迪诺萨尔 是一个有趣的项目,旨在云中按需处理干涉图(目前是 AWS,ISCE 在引擎盖下)。我希望在未来看到更多像这样的更高级别的项目,因为它们将使没有深厚遥感或信号处理背景的开发人员仍然能够进行有趣的地理空间分析。

是一个跨平台的 C++ API(带有一些 python 绑定),用于读写 NGA 的复相历史(CPHD)、复相(SICD)、派生(SIDD)传感器无关雷达格式。该项目的目的是为开发人员提供一种简单的方法来确保他们的文件和元数据符合 NGA 标准,并为多源数据提供一种通用格式。

商业软件

通常的嫌疑人都有内置或附加的 SAR 数据处理能力。这些工具中的大多数已经存在了许多年(> 20 年),并且已经迭代了许多版本。它们主要是桌面工具,尽管一些供应商已经开发了跨多台机器编排更大规模工作流的引擎(例如 PCI GXL )。性能、许可模式和成本各不相同,但不同软件包的功能似乎相似:正射校正、协同配准、斑点滤波、InSAR、相干变化检测等。

哈里斯 ENVI&sar scape是用于多源图像分析的桌面和服务器软件。基本的 ENVI 包允许一个分析师在桌面上做数据处理,或者一个开发者从服务器配置中使用 ENVI API 建立一个工作流。与 ESRI T21 的软件生态系统也有相对深度的整合。SARScape 是一个附加模块,有三个模块,允许您进行基本的 SAR 处理、干涉测量和干涉测量叠加。

PCI Geomatica &雷达套件 似乎在功能上与 ENVI 相似。Geomatica 有一个桌面版本和一个面向开发人员的版本,提供对 python API 的访问。雷达套件提供了用于基本 SAR 分析、干涉测量、正射校正和 DEM 生成的工具。

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

SAR Change Detection using PCI.

BAE SOCET GXP是另一个多源遥感软件包,功能与上述类似。根据用户需求,GXP 还提供各种许可捆绑包选项。

ERDAS IMAGINE是商业套装的另一个好选择。这里没有惊喜。****

GAMMA 是一个专注于 SAR 的软件包,由瑞士的一家小型软件提供商提供,支持从原始数据到衍生产品的整个处理链。GAMMA 在他们自己的咨询活动中使用该软件,并提供商业许可。

MATLAB对于那些希望其信号处理链具有近乎无限灵活性的人来说,是一款强大的工具。如果你仔细观察,会发现有一些库可以使摄取和处理 SAR 数据集变得更容易,比如 NGA 的 MATLAB SAR 工具箱

包扎

商业和开放软件选项比比皆是,但具有更高级工作流的平台选项对于 SAR 来说仍然有点有限。如果普通开发人员对在他们的应用程序中从 SAR 数据中获取信息感兴趣,他们仍然有一个陡峭的学习曲线和许多行代码要写。随着可用 SAR 数据量的增加,是否会有更多的平台选项和功能变得可用,这将是一件有趣的事情。

我错过了什么有趣的软件包或项目吗?请在评论中告诉我。

用动态话题模型探索联合国一般性辩论

原文:https://towardsdatascience.com/exploring-the-un-general-debates-with-dynamic-topic-models-72dc0e307696?source=collection_archive---------6-----------------------

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

Credit: Vladislav Klapin on Unsplash

在本文中,我介绍了动态主题模型背后的直觉,并通过对演讲语料库的应用,展示了这种方法在非结构化文本中发现不断发展的叙事的能力。

通过阅读,我希望你能了解动态主题模型,它们试图解决的问题,使用文本数据完成项目的实用技巧,以及对现代世界事务的一些见解!如果你想跟随代码,你可以在这里找到。

每年秋天,世界各国领导人聚集在纽约,参加联合国大会的一般性辩论。在围绕核武器和叙利亚战争等问题进行讨论后,今年的会议于本月早些时候结束。

一般性辩论中的发言形成了国际社会关注的问题的历史记录。隐藏在这些文本数据中的是关于对话如何随时间变化的见解,而动态主题模型可以帮助我们定量地模拟这种演变。

动态主题模型

主题建模是一个通用术语,用于描述在非结构化文本语料库中查找主题的过程。一种流行的方法是潜在狄利克雷分配(LDA ),这是一种学习预定义数量的潜在主题的生成模型,其中每个主题被表示为词的分布,每个文档被表示为主题的分布。下面的文章很好地解释了这个想法,并且维基百科页面也是一个很好的参考。

[## 你的潜在狄利克雷分配简单指南

在我们开始之前,我做了一个工具(这是源代码),可以在你的浏览器中运行 LDA(非常简洁)。是…

medium.com](https://medium.com/@lettier/how-does-lda-work-ill-explain-using-emoji-108abf40fa7d)

LDA 由于其高度可解释的主题而对于大语料库的定性分析是一种非常强大的技术,并且由于其将稀疏的文档术语矩阵转换成固定的低维文档主题矩阵而对于维数减少也是有用的。然而,LDA 忽略了存在于许多文档集合中的时间方面。

考虑一下 LDA 在过去十年的新闻语料库中发现的一个关于美国政治的话题。你可能认为最有可能的术语是“国会”、“选举”、“投票”等等。然而,该模型在术语概率方面将 2010 年的文件与 2018 年的文件视为相同,因此它无法了解到,例如,“特朗普”一词直到最近才在政治背景下几乎不存在。

Blei 和 Lafferty 在这里提出的动态主题模型(DTM)通过扩展 LDA 的思想来解决这个问题,以允许主题表示在固定的时间间隔(如几年)内发展。具体地,每个时间片内的文档用相同维度的主题模型建模,时间片t内的每个主题由时间片t-1内的相应主题演化而来。

LDA 的生成过程大体上保持相同,除了关键的差异,即整体主题分布和每个主题的术语分布根据时间片而不同。特别地,这些分布的参数在每个时间片上“发展”,这是通过从以前一个时间片的相应值为中心的分布中提取的。

这样做的最终结果是一系列类似 LDA 的主题模型,它们按顺序连接在一起。因此,DTM 学习的主题是一系列相关的术语分布。带着这种直觉,我现在转向它的应用。

一般性辩论数据集

由 1970 年至 2015 年一般性辩论中的发言组成的语料库由托管在 Kaggle 上(总共 7507 篇)。该数据集最初是由英国和爱尔兰的研究人员在去年发布的(见本文见),他们用它来研究不同国家在不同政策维度上的立场。

每篇演讲都标有发表的年份和会议,以及演讲者代表的国家的 ISO Alpha-3 代码。

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

Sample rows from the dataset

数据预处理

在这个数据集中的一个关键观察是,这些演讲中的每一个都包含了对大量话题的讨论。如果每个演讲都包含关于贫困和恐怖主义的讨论,那么在整个演讲上训练的主题模型将无法理解像“贫困”和“恐怖主义”这样的术语应该代表不同的主题。

为了解决这个问题,我将每个演讲分成段落,并将每个段落作为一个单独的文档进行分析。一个简单的基于规则的方法,寻找由换行符分隔的句子,在这个数据集的段落标记化任务中表现得相当好。在这一步之后,文件的数量从 7,507(完整的发言)增加到 283,593(段落)。

在将每个语音扩展成多个文档后,我进行单词标记化,通过小写和词条化来规范化每个术语,并从词汇表中删除低频术语。最终结果是 7,054 个术语的词汇表和每个文档的单词包表示,可以用作 DTM 的输入。

Word, sentence, and paragraph tokenizers for the General Debate corpus

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

Sample rows after paragraph tokenization

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

Sample rows after word tokenization of paragraphs

推理

为了确定要使用的主题数量,我使用不同数量的主题(10、15、20、30)在几个不同的时间片上分别运行了 LDA,以便对问题有所了解。通过手工检查,15 似乎产生了最可解释的主题,所以这就是我为 DTM 选定的。更多的实验和严格的定量评估肯定可以改善这一点。

使用[gensim](https://radimrehurek.com/gensim/models/wrappers/dtmmodel.html) 的 Python 包装器的原始 DTM C++代码,推断 DTM 的参数是简单明了的,尽管很慢。在 Google 云平台上的 n1-standard-2 (2 个 vCPUs,7.5 GB 内存)实例上,推理耗时约 8 小时。然而,我是在单核上运行的,所以如果您能够编译原始 C++的并行版本,这个时间可能会缩短。

结果

该模型发现了非常容易解释的主题,我在这里深入分析了其中的几个。具体来说,我为几个主题展示了时间片样本中的顶级术语,以及随着时间推移显著术语的概率图。该模型发现的主题及其热门术语的完整列表可以在本文末尾的附录中找到。

人权

《联合国宪章》序言指出:

我联合国人民决心……重申基本人权、人格尊严与价值、男女平等权利和大小国家平等权利的信念。

因此,毫不奇怪,人权是一般性辩论中的一个永恒主题,也是该模型能够发现的一个主题。尽管上文引用的《宪章》中出现了两性平等的概念,但模型显示,“妇女”和“性别”这两个术语真正流行起来还需要相当长的时间。此外,请注意“humane”的使用在增加,而“mankind”的使用在减少。

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

Topic 3 (Human Rights): Top ten terms by probability at sampled time slices (left) and selected term probabilities over time (right)

以色列

自 1948 年现代以色列成立以来,围绕阿拉伯-以色列冲突、边界、定居点和巴勒斯坦人民的待遇,一直存在着争论,而联合国一直密切参与其中。事实上,维基百科上有整整一个页面专门讨论这个问题。

该模型显示,在 2007 年以色列和埃及封锁加沙之后,人们越来越关注加沙,并不断围绕以色列定居点展开讨论,根据国际法,联合国认为这种做法是非法的。“两个”一词的出现很有趣,可能来自于围绕“两国解决方案”的讨论。

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

Topic 5 (Israel): Top ten terms by probability at sampled time slices (left) and selected term probabilities over time (right)

非洲

关于非洲的讨论已经从过去的殖民地发展到独立、种族隔离时代,最后是新政府的诞生、选举和民主。

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

Topic 8 (Africa): Top ten terms by probability at sampled time slices (left) and selected term probabilities over time (right)

核武器

冷战时代带来了美国和苏联之间的军备竞赛,以及随后关于裁军的讨论。最近,焦点集中在伊朗。

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

Topic 2 (Nuclear Weapons): Top ten terms by probability at sampled time slices (left) and selected term probabilities over time (right)

发展

千年发展目标和可持续发展目标是联合国分别于 2000 年和 2015 年推出的倡议,旨在解决贫困、教育和性别平等等问题。这个话题似乎已经从围绕国际发展的一般性讨论发展到这些结构化的项目。

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

Topic 4 (Development): Top ten terms by probability at sampled time slices (left) and selected term probabilities over time (right)

结论

这个练习演示了 DTM 是如何表示主题的,以及这种方法在非结构化文本中发现叙事的惊人能力。请记住,该模型在没有任何人类智能的情况下完成了上述所有工作!

我有可能通过试验更大的词汇量、不同数量的主题及其评估、短语提取(例如,“human_rights”可以是一个标记,而不是分别具有“human”和“rights”),以及不同的词干分析器或词尾分析器来改进所使用的方法。其他超出单词表示范围并使用单词嵌入的方法也值得探索。

这里没有利用 DTM 的一个方面(但是我想进一步探讨的一个方面)是学习文档的向量表示。这不仅有助于计算文档之间的相似性值,也有助于找到每个主题的代表性文档。例如,获取美国代表的所有发言,为每个时间段挑选出最具代表性的段落,比如说人权主题,并使用这些段落来构建美国人权话语演变的线索,这将是很有趣的。

总的来说,这是一个令人着迷的练习。如果您想亲自试验或更深入地了解实现细节,可以在 repo 这里的中再次找到该分析的所有代码。感谢您的关注,如果您有其他想法或问题,请留下您的评论!

附录

以下是 DTM 发现的主题的完整列表。对于每个主题,显示了 1975 年、1995 年和 2015 年时间片的前十个术语。

Topic 0
            1975           1995           2015
0       security        council        council
1            non       security       security
2          state         member         member
3        council          state         reform
4         cyprus        general         united
5  international         reform         nation
6      principle         nation      permanent
7         nation         united          state
8        aligned  international           must
9        charter           must  international

Topic 1
            1975           1995           2015
0            sea  international          state
1            law          state         island
2          state         island          small
3          latin           drug  international
4        america        country        country
5       resource          small           sids
6       american        america          crime
7        country      caribbean      caribbean
8     conference     convention     developing
9  international          crime        pacific

Topic 2
          1975           1995           2015
0      nuclear        nuclear         weapon
1  disarmament         weapon        nuclear
2       weapon         treaty           iran
3          arm    disarmament         treaty
4        state  proliferation            arm
5       soviet            non      agreement
6       treaty            arm  international
7        power          state            use
8        union           test            non
9         race  international       chemical

Topic 3
            1975           1995           2015
0          right          right          right
1          human          human          human
2         people        respect            law
3  international      democracy          woman
4        freedom         people         people
5      principle  international        respect
6        justice            law        freedom
7      political        freedom           rule
8        respect      principle  international
9           must        society          peace

Topic 4
            1975           1995           2015
0       economic       economic       economic
1  international    development        country
2          world  international          world
3        country          world         global
4            new            new  international
5          order         social         social
6    development      political    development
7       relation        country      political
8      political         global         crisis
9             co    cooperation            new

Topic 5
          1975         1995           2015
0         east        peace          state
1       middle         east          peace
2         arab       middle       solution
3       israel   resolution    palestinian
4        peace       people       conflict
5  palestinian  palestinian  international
6       people       israel          syria
7        right      process         people
8    territory       region           east
9    palestine    agreement         israel

Topic 6
         1975          1995           2015
0    republic        united         united
1      people        nation         nation
2      united         peace  international
3       state     operation          peace
4      nation       keeping       conflict
5  government      republic           role
6       korea      conflict   peacekeeping
7    peaceful        bosnia        mission
8        viet  organization        support
9     country   herzegovina       republic

Topic 7
        1975         1995           2015
0  operation  cooperation         region
1         co       region    cooperation
2      peace     regional  international
3    country     european        country
4     europe      country       security
5   security       europe       regional
6   relation        union       european
7   european        state      terrorism
8     region     security          union
9    detente    stability         effort

Topic 8
           1975        1995        2015
0        africa      africa     african
1         south     african     country
2       african     country      people
3        people  government  government
4        regime       peace    republic
5      southern   community      africa
6       namibia      people   political
7     apartheid  democratic   community
8  independence     process  democratic
9        racist      effort       peace

Topic 9
        1975      1995       2015
0      world       war    climate
1          u     world     change
2        one  conflict      world
3        war      cold     global
4    problem      many     threat
5       time         u  challenge
6  situation     peace       must
7      peace       one    country
8      power   problem     crisis
9   conflict      must   conflict

Topic 10
           1975        1995       2015
0        people      people     people
1      struggle     country        war
2       country     refugee       year
3  independence        year      world
4      national       state    country
5         force       force        one
6    liberation         war  terrorist
7         state  government      today
8   imperialist         one      state
9   imperialism        life       many

Topic 11
            1975           1995       2015
0         nation         nation     nation
1         united         united     united
2   organization   organization      world
3          world          world          u
4          peace           must       must
5         member  international  challenge
6  international              u     future
7        charter           role      peace
8           role          peace       year
9          state            new     global

Topic 12
          1975         1995         2015
0      country      country  development
1   developing  development      country
2  development     economic         goal
3     economic   developing  sustainable
4        world        trade          per
5    developed     resource       agenda
6     resource      economy         cent
7        trade    financial      poverty
8        price    programme       health
9   assistance   assistance    education

Topic 13
         1975       1995       2015
0          mr    general    general
1     general    session   assembly
2   president   assembly    session
3    assembly         mr  president
4     session  president         mr
5  delegation  secretary       like
6        also       also      would
7        like       like  secretary
8        wish   election       also
9    election       wish      sixty

Topic 14
         1975         1995         2015
0     session   conference  development
1    assembly  development         2015
2     general      general           70
3  conference         year       agenda
4  resolution       agenda         year
5        year     assembly  sustainable
6     special      meeting   conference
7  government       summit           pv
8      united         held           15
9     meeting         last         post
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值