TowardsDataScience 博客中文翻译 2016~2018(九十八)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

比赛日会提升世界杯歌曲吗?

原文:https://towardsdatascience.com/do-match-days-boost-the-fifa-world-cup-soundtrack-d75d7ef785c1?source=collection_archive---------8-----------------------

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

音乐是足球文化的一部分。国际足联官方歌曲和当地主题曲将所有参加今年世界杯的国家团结在一起。除了提升比赛期间的气氛,这项活动还让艺术家们获得了非同寻常的世界报道和名声。我们都记得像夏奇拉的《T0》、《Waka Waka》、《T1》和皮特保罗的《T2》、《我们是一家》、《T3》这样的热门歌曲,尽管它们分别是在 8 年前和 4 年前发行的。

由于这项活动的巨大影响力和音乐在支持者中的统一性,我想知道我们是否可以追踪本届世界杯国歌的结果,看看这些是否会在比赛日增加——如果是这样,这是否因国家而异?

在俄罗斯 2018 年世界杯期间,官方国歌将由尼基·贾姆、威尔·史密斯和 Era Istrefi 代表,名为‘尽情狂欢’。出于这一分析的目的,我们将跟踪这首歌的表现,以衡量事件的影响。

数据集

对收集的数据进行简短描述,以便进行实际分析;

  • 由于我没有该曲目的实际每日流媒体数据(这是不公开的),我决定偏离 Spotify 排行榜,寻找有排行榜的国家。日线图是在曲目发行日到淘汰赛第一轮之间刮出来的。
  • 我们需要所有比赛的时间表,以便与 Spotify 的每日图表相匹配。这些都可以通过国际足联网站获得。

比赛日会导致更高的图表位置吗?

当我们比较参赛国家的每日图表位置,并将它们与各个国家比赛的日子进行比较时,我们可以确定在比赛日是否出现增长。当综合数据集中的所有国家并计算平均值时,我们得出结论在比赛日增加了 12 个位置。

为了让它更有趣,我在下面突出了几个国家,图表显示了当特定国家有世界杯比赛时,图表位置的增加。

看看瑞典,当他们的国家队比赛时,我们看到平均增加了 25 个位置。在 16 强决赛对阵瑞士的那天,这首歌在 Spotify 每日排行榜上从第 49 位上升到第 8 位。

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

Chart increase for Sweden

当所谓的红魔登台时,比利时也显示出图表位置的显著增加。同时,似乎在非比赛日有更多的高峰。

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

Chart increase for Belgium

冰岛的支持者总是令人印象深刻,在体育馆里制造威胁的声音。他们的比赛日平均涨幅是 30 个位置。

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

Chart increase for Iceland — period between May 25th and June 15th means no chart inclusion

当看法国时,我们也可以得出结论,赛道往往会在比赛日爬上图表,除了对秘鲁的比赛,赛道在法国图表中下降,但在第二天增加。

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

Chart increase for France — period between May 25th and June 12th means no chart inclusion

淘汰

当研究这个问题时,我首先想到的事情之一是,被淘汰出局的国家是否也会停止聆听世界杯官方国歌。当看着最受欢迎的参赛者之一巴西时,我们看到了一些值得注意的事情——这首歌在 6 月 19 日从他们的 Spotify 排行榜上消失了,而他们直到 7 月 6 日仍在争夺世界杯。巴西在这条赛道上的最高排名是第 105 位,与其他(周边)国家相比,这个排名相当低。

对于其他一些被淘汰的国家(可能比预期的要早),我们不一定会看到图表的大幅下降。像德国、阿根廷和墨西哥这样的国家在不得不离开俄罗斯后,头寸略有减少,但在失望情绪消失后的几天里,头寸仍然很大,甚至有增加的趋势。

相反,冰岛似乎已经厌倦了“尽情享受”,因为在他们输给克罗地亚两天后,我们不会在他们的本地 Spotify 排行榜上找到这首歌。

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

Chart positions after being knocked out

英国更喜欢其他方式

虽然原声音乐出现在一些当地的 Spotify 排行榜上,但它没有能够到达英国,甚至在比赛日也没有。英国人似乎更关心他们自己的地方国歌 三狮s(1996 年发行)*,*迅速攀升至 Spotify 排行榜,并自今日起占据榜首。

应用与我们对 FIFA 原声所做的相同的方法,我们看到在比赛日平均增加了 118 个位置(只看原声,有多个版本)。

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

Chart increase for U.K. — looking at the Three Lions anthem

英格兰跟着他们的“三狮军团”国歌一起唱,我并不感到惊讶,因为我们在荷兰已经习惯了跟着唱像“Viva Hollandia”“Wij Houden Van Oranje”这样的歌曲。虽然我不需要检查这些歌曲,这也可以解释为什么我有一些空闲时间进行这样的分析。;-)

放弃

  • 这将是最准确的时候,看看每个国家的实际流计数,不管图表是否包含。因为这些都不是公开的,所以我选择使用 spotifycharts.com 的网站。很有可能在比赛日发生的其他活动会导致现金流上升,从而导致图表位置上升。
  • Spotify 是唯一被考虑的流媒体服务。鉴于该服务并非在所有参与国家都可用,因此一些国家被排除在此分析之外。
  • 一些国家可能会有当地的国歌在比赛期间也有所提高,但这些没有被考虑在内。

感谢阅读!如果你喜欢读这篇文章👏🏻很感激。

我写的更多故事:

[## 拉丁语和雷鬼音乐的传播

公平地说,我们很多人都在跟着当今最热门的拉丁和雷鬼音乐一起唱歌,而不一定…

towardsdatascience.com](/the-diffusion-of-latin-and-reggaeton-69113f9929dd) [## 音乐的旅行时间是多少?⏱

我们生活在一个数字世界,因此信息和音乐的传播速度比以往任何时候都快。从来没有…

medium.com](https://medium.com/@boplantinga/music-travels-but-what-s-the-travel-time-8fd7279e1aa6) [## Spotify 周日的图表与本周其他时间有所不同吗?

看看我自己的倾听行为,我经常承认我在周日倾向于有不同的偏好…

towardsdatascience.com](/does-spotifys-chart-on-sunday-differ-from-the-rest-of-the-week-d7272f300508) [## Pusha T vs. Drake:用数据备份他们的 diss 轨迹

也许没有必要花太多时间来介绍德雷克和普什塔之间的矛盾

towardsdatascience.com](/pusha-t-vs-drake-backing-up-their-diss-tracks-with-data-1083e6159c75)

更多的枪支会降低暴力犯罪率吗?(第一部分:数据可视化)

原文:https://towardsdatascience.com/do-more-guns-reduce-violence-crime-rate-part-i-data-visualization-fb3fd6a918a5?source=collection_archive---------6-----------------------

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

携带权利法要求美国政府向任何符合必要标准的申请人发放隐蔽携带手枪许可证。这是增加了暴力犯罪率还是降低了暴力犯罪率?

枪支对美国犯罪的影响引发了许多公众辩论。两个方向似乎都有足够的研究(说明法律有效和无效),人们总是可以挑选一个研究来支持他们的立场。事实上,在这篇文章中,一个可视化给出了一个与最终结论不同的矛盾见解。

这一系列的文章是关于分析法律的影响,在这一时期的可用数据。这篇文章(第一部分)有视觉表现,以了解携带权利法是否减少了暴力犯罪。在后面的部分,面板回归将被用来估计携带权利法对暴力犯罪率的影响。

我的 GitHub 上的 r 代码和数据:

[## saivishnuk/数据科学

在 GitHub 上创建一个帐户,为数据科学的发展做出贡献。

github.com](https://github.com/saivishnuk/Data-Science/tree/master/Do_more_guns_reduce_violence_crime_rate)

更多我的博客,请查看我的 和我的 GitHub

探索性数据分析

**数据字典:**数据是 1977-1999 年美国 50 个州加上哥伦比亚特区(总共 51 个“州”)的平衡面板。每个观察值都是给定年份的一个状态。总共有 51 个状态× 23 年= 1173 个观测值。

图表 1: 不同州何时出台了承运权法?

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

图表 1 中的见解:

  • 在观察期间,51 个州中只有 29 个州有有效的携带权法律
  • 在这 29 个国家中,有 4 个国家的运载权法律从观察期开始时就已经生效
  • 超过 50%的州在观察期的后半段实施了该法律

在引入该法律的州,暴力犯罪率降低了吗?

图表 2: 在观察期内至少实施过一次运载权法律的国家被视为应国,其余被视为非应国

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

  • **图表 2 中的见解:**平均值的趋势。“应”和“非应”州的暴力率与“总体平均”类似。暴力犯罪率”和平均犯罪率的上升或下降。这些年来,各州的犯罪率一直居高不下
  • **假设一:**这个图没有得出足够的证据,因为 avg 没有划界。shall 州引入 shall 法前后的暴力犯罪率

**图 3(检验假设一)😗*将已经实施法律的州的犯罪率分为法律出台前和出台后。

例如,如果 1990 年在州“1”中引入了该法律,则在 1990 年之前,州“1”将被计入“应州平均”。在“应介绍”之前的暴力率和 1990 年之后的状态“1”将被认为是“应说明平均”。暴力 _ 率后应介绍”。

“应说明平均值。从 1997 年开始,暴力发生率将为零,因为法律实施的最后一年(观察期内)是 1997 年。

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

  • 从图表 3 中洞察:“应州平均值”的趋势。谋杀率后,应介绍“增加了多年。
  • 假设 2: 虽然这表明法律在降低犯罪率方面并不有效,但这也可能是因为在观察的初始阶段采用 shall 法律的州的平均犯罪率更低。暴力率高于在观察期后期实施该法律的州。

图表 4(检验假设 2): 在观察初期采用了该定律的州是否 avg 较少。暴力率比那些在观察期后期采用运载权法律的州高吗?
对于已经引入该法律的州,数据已经根据该法律引入的年份分成几个箱,每个箱有 5 年。

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

  • **图表 4 中的见解:**在(77–80)、(81–85)、(86–90)中引入法律的州的平均犯罪率低于在(91–95)、(96–100)中引入法律的州,这表明在观察的初始阶段采用法律的州的平均犯罪率更低。暴力率高于后一时期实施该法律的各州。

所有上述图表都没有给出法律是否有效的结论性证据。将“图 4”分成不同的子图,每个子图显示一个趋势,可以更好地理解。

**图表 5(图表 4 的分割)😗*假设有 4 个州在(77-80)期间实施了 shall 法律,那么在引入期之后(即从 80 到 99)分析这 4 个州的平均暴力率。

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

  • **图表 5 中的洞见:**在法律已经跨不同时间段实施的州中,平均。据观察,法律出台后,暴力率有所下降。这表明携带权利法在降低暴力犯罪率方面是有效的。

这只是一个直观的表象,可能有更多的因素导致暴力犯罪率的上升或下降。面板回归方法用于说明第二部分中的每个因素。下面是第二部分的链接。

[## 更多的枪支会降低暴力犯罪率吗?(第二部分:R 中的面板回归)

携带权利法是要求美国政府颁发隐蔽携带手枪的法律…

towardsdatascience.com](/do-more-guns-reduce-violence-crime-rate-part-ii-panel-regression-in-r-d3f0eafdf401)

谢谢你的阅读。如果你喜欢这篇文章,给它一些掌声👏。希望你有一个伟大的一天!

更多的枪支会降低暴力犯罪率吗?(第二部分:R 中的面板回归)

原文:https://towardsdatascience.com/do-more-guns-reduce-violence-crime-rate-part-ii-panel-regression-in-r-d3f0eafdf401?source=collection_archive---------5-----------------------

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

携带权利法要求美国政府向任何符合必要标准的申请人发放隐蔽携带手枪许可证。这是增加了暴力犯罪率还是降低了暴力犯罪率?

这是本系列的第二篇文章,在第一部分中,数据可视化被用来理解携带权利法对暴力犯罪率的影响。下面是第 1 部分的链接。

[## 更多的枪支会降低暴力犯罪率吗?(第一部分:数据可视化)

第一部分有视觉表现,以了解携带权利法是否减少了暴力犯罪。在后来…

towardsdatascience.com](/do-more-guns-reduce-violence-crime-rate-part-i-data-visualization-fb3fd6a918a5)

在这一部分,将使用面板回归方法来了解基于监禁率、携带权利法、人口等因素的暴力犯罪率的变化…

我的 GitHub 上的 r 代码和数据:

[## saivishnuk/数据科学

在 GitHub 上创建一个帐户,为数据科学的发展做出贡献。

github.com](https://github.com/saivishnuk/Data-Science/tree/master/Do_more_guns_reduce_violence_crime_rate)

更多我的博客,请查看我的 和我的 GitHub

在本文中:

  • 将用于面板回归的所有变量的定义
  • 检查每个变量的正态性
  • 执行变量转换
  • 检查成对相关性
  • 面板回归(将使用混合和固定效应模型)
  • 归纳不同面板回归模型的结果

不同变量的定义

如果运输权法在某一州和某一年有效,则变量“应”等于 1,否则“应”等于 0。

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

使用密度图的每个变量的正态性

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

  • 暴力率、监禁率和人口密度具有较高的偏态性(大于 2.5)
  • 这三个变量已经使用对数函数进行了转换

变量之间的成对相关性

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

  • pb1064(该州 10-64 岁黑人人口的百分比)和 pw1064(该州 10-64 岁白人人口的百分比)高度负相关(-0.98)
  • 包含高度相关的独立变量会导致标准误差的扩大

面板回归

  1. 以 log(暴力率)为因变量的混合普通最小二乘法

代码

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

结果

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

  • **第 1 部分:**Pb 1064 和 Pw1064 的估计值与零没有显著差异,有携带权利法的暴力率比没有携带权利法的暴力率降低了 28%。
  • **第二部分:**联合假设检验,H-Null 为 Pb1064 =0 & Pw1064=0,表明两个变量都不显著
  • **第三部分:**模型的监禁率-残差图具有锥形结构,这表明异方差的存在。因此,使用聚类稳健的标准误差来校正标准误差。
  • **第 4 部分:**使用聚类稳健 S.E 的无 Pb1064 和 Pw1064 的混合回归模型显示,所有变量在 p 值为 0.15 时都是显著的,有携带权法律比没有该法律减少了 28%的暴力率。这似乎是一个非常高的估计,这可能是因为忽略了变量偏差。

2。具有实体固定效果的固定效果模型

固定效应模型不受遗漏变量偏差的影响,遗漏变量偏差来自于随时间恒定的变量,并且在各州之间变化,而不在各州内变化。例如,人们对犯罪的文化态度不能用混合 OLS 模型来量化。

代码

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

结果

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

  • **第 1 部分:**实体固定效应模型显示,平均收入的估计值与零没有显著差异,有携带权利法比没有携带权利法减少了 3.7%的暴力率
  • **第 2 部分:**没有平均收入的实体固定效应表明,有携带权利法比没有携带权利法减少了 3.8%的暴力率,估计值仅在 0.04 的高 p 值下有意义。估计值与民意测验的估计值大相径庭。

3。具有实体固定和时间固定效果的固定效果模型

仍然可以省略变量,这些变量可能随时间变化,但在不同状态下是恒定的。通过为时间创建虚拟变量,使用具有时间固定和实体固定效应的固定效应模型,将从这些省略的变量中消除偏差。

代码

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

结果

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

  • **第 1 部分:**实体固定和时间固定效应模型显示,Pb1064、pop、平均收入和 pw1064 的估计值与零没有显著差异,没有携带权利法比有携带权利法增加了 2.8%的暴力率
  • H-Null 为 Pb 1064 = 0 & pop = 0 & avg . income = 0 & pw 1064 = 0 的联合假设检验表明,所有四个变量都不显著
  • **第二部分:**没有 Pb1064、pop、avg.income 和 pw1064 的实体固定和时间固定效应模型表明,没有携带权法律比有携带权法律增加暴力率 2.8%,这也意味着有携带权法律比没有携带权法律减少暴力率 2.8%。“应”变量也很重要,估计值与集合模型相比有很大不同

结论

  • 对“具有实体固定和时间固定的固定效应”和“具有实体固定的固定效应”模型的估计表明,有携带权法律比没有携带权法律降低了暴力犯罪率,但仅降低了不到 4%
  • 这也与第一部分的调查结果一致,即“携带权法律在降低暴力犯罪率方面是有效的”
  • 还有其他研究表明,更多的枪支导致抢劫率(入室盗窃率)上升。这项研究只关注暴力犯罪率

谢谢你的阅读。如果你喜欢这篇文章,给它一些掌声👏。希望你有一个伟大的一天!

“做一些有趣的事情”

原文:https://towardsdatascience.com/do-something-interesting-50a3876a1af3?source=collection_archive---------8-----------------------

不要用数据、AI、ML“做一些有趣的事情”——做一些以人为中心的事情

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

如果你是一个拥有大量数据的团队,你多久会听到经理、主管和产品人员提出“做一些有趣的事情”的要求?我猜很多。

当构建人工智能、机器学习和深度学习系统时,请求可能是“做一些比我们人类能想到的更好的事情。”

在设计领域,要求澄清之后会说“当我看到它的时候我就知道了”

但是,真的很难!你从哪里开始?

之所以这么难,是因为洞察的观念被颠倒了。不应该是看数据,告诉你一些有趣的事情。它是关于理解这个世界,理解人们所面临的问题,并通过实验来建立对这种理解的信心。

数据本身,无论有多少,都只是“是什么”,而不是“为什么”。通过理解“为什么”,我们可以为人们的问题找到更好的解决方案。更多的数据胜过更好的算法除非有更多的人类目的胜过更多的数据。

寻找偶然相关性有什么问题?它们可能会分散组织的注意力,或者在最坏的情况下,它们可能根本不存在(参见“德克萨斯神枪手谬误】)。

什么是“有趣?”

一般来说,“有趣”是指被认为新奇或出乎意料的事情。当人们寻找“有趣”的东西时,他们会尝试很多不同的东西,直到某样东西奏效或者“一拍即合”

基于新奇的方法有很多优点。在Kenneth o . Stanley 和 Joel Lehman 所著的《为什么伟大不能被规划:目标的神话》中,有一些例子说明了这种注重探索的方法是如何获得比其他方法更好的结果的。

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

基于新颖性的搜索地址是一个正在进行中的“欺骗”问题。朝着一个特定的目标进行更有针对性的搜索看起来你走的路是对的,但实际上并不是在通往目标的路上。

目标是问题吗?

当我们朝着“有趣”的方向努力时,我们是否在回避目标?不在高管的头脑中,因为他们往往是基于时间框架的结果。

基于新颖性的搜索会有相当多的失败,并不是所有的组织(或他们的主管)都愿意失败并等待成功。这就是战略探索和利用之间微妙平衡的来源。

我们可以从路线图和关键绩效指标中学习

产品工作中有两种类似的情况可能会有所帮助:路线图和 KPI。

当设定了错误的预期时,产品路线图往往会“失败”。路线图旨在帮助理解未来,但由于世界的复杂性,我们应该做的事情随时都在变化。路线图中应包含这样的预期:随着时间的推移,路线图会发生变化,可信度也会降低。

主题路线图试图将重点放在你试图解决的问题上,而不是你试图推出的功能上。我发现它们比基于功能的路线图更成功。

KPI 类似于目标,因为它们是组织将监控和采取行动的对象。人们并不总是理解,随着市场、客户和组织的变化,这些 KPI 也应该变化。假设它们可以设置一次并永远遵循是不恰当的。

对于路线图和 KPI 来说,了解如何关注问题并学会改变是关键。写得不好的目标可能会在你理解问题之前预设一个解决方案。当他们正在解决一个现在对某人来说很重要并且以后可以改变的问题时,他们会很有帮助。

当我们的目标不再合适时,我们如何理解?我们如何知道何时改变我们的模型?要做到这一点,我们需要从当今世界的运作方式入手,并从中学习。

以人为本

在 HBR 最近的一篇文章“当数据科学家和设计师一起工作时会发生什么”中,有一个重要的方面是数据科学家(或 AI/ML 工程师)如何:

与狭隘地专注于研究新的统计模型或构建更好的数据可视化的数据科学版本不同,设计思维方法将数据科学家视为创造性的问题解决者。

我们这样做的方式是关注人们所面临的问题。你可以通过与你希望帮助的领域的专家交谈来做到这一点。那些专家知道真正的问题是什么。从这些对话中获得的见解将帮助您利用数据来了解问题是如何表现出来的。

在你知道了真正的问题之后,你就需要让团队中许多不同的人参与到解决方案中来。这既包括行业内外的技术人员,也包括非技术人员。

在这种情况下,专家并不总是能帮上忙。事实上,他们可能会限制团队用旧的方法解决问题,而不是允许新的方法。

一旦你有了确定问题的解决方案,和你试图帮助的人一起测试你的解决方案的原型。听他们的话闭嘴

这种以问题为中心的思维,与真正的用户交谈,共同创造是设计思维的基石。在做数据科学、人工智能、人工智能、深度学习或其他智能系统时,没有足够的时间。

在实践中

Philosophie ,我们发现以人为中心的设计和跨团队合作的基础为找出真正重要的东西提供了合适的平台。特别是对于人工智能和人工智能项目,可能需要几个月的时间来建立一个完全训练好的模型。

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

An Empathy Map for the Machine from our LA workshop

我们对机器使用移情映射困惑映射挑战映射疯狂八,以及其他练习让人们达成共识,而不会陷入人工智能术语的泥潭。这对你能与之打交道的设计师、产品人员、高管和客户尤其有帮助。技术和非技术角色之间的共同创造(和彻底的合作)获得了问题的所有角度和可能的解决方案。

此外,通过原型了解问题和快速测试解决方案也非常有效。甚至在你投入巨资构建完整的解决方案之前,比如一个专注于人工智能的 MVP

而不是仅仅“做一些有趣的事情”,做一些有影响力的事情来解决人们的问题。

关于克里斯·巴特勒

我帮助团队理解他们应该用以人工智能为中心的解决方案解决的真正的商业问题。我们工作的团队通常被要求用他们拥有的数据“做一些有趣的事情”。我们通过偶发事件相关性帮助他们避免局部极值,并专注于解决巨大的业务问题。我的背景包括在微软、KAYAK 和 Waze 等公司超过 18 年的产品和业务开发经验。在 Philosophie,我创造了像机器的移情映射困惑映射这样的技术,以便在构建人工智能产品时创建跨团队的一致性。如果你想了解更多或通过、、LinkedIn 或访问、http://philosophie.is/human-centered-ai联系。

NBA 顶级球员推特账户的情感分析——第一部分数据收集

原文:https://towardsdatascience.com/do-tweets-from-nba-leading-players-have-correlations-with-their-performance-7358c79aa216?source=collection_archive---------24-----------------------

<本文其他部分的快速链接>

第一部分数据收集

Part2 推文数据清理

Part3 情感分析&聚类

Part4 绩效之间的相关性测试&情绪

摘要

我们知道,一个团队中的领军人物对赢得比赛起着至关重要的作用。因此,我们很好奇球员在比赛前的情绪是否会与他们的表现甚至比赛结果相关联。为了衡量这种影响,我们选择 twitter 作为衡量球员情绪的工具,因为大多数 NBA 球员都在 Twitter 上发表自己的观点或想法。

但是,评价联盟中每个球员的推文是很费时间的;因此,我们将只关注根据ESPN.com排名的前 10 名玩家。现在有人可能会开始争论为什么这些人是每支球队中最好的球员,但是这里我们使用了一个示例网站,而不是任何个人偏好。

在分析中,我将使用 Python 作为编程语言,这个主题将涉及诸如 web 抓取、聚类、数据可视化和自然语言处理等技术。

韵律学

既然最终目的是衡量情绪和游戏表现的相关性。这里的情感评分是通过基于极性化合价计算正面或负面评分。我们稍后将讨论这一点。

至于性能,我们在本文中使用高效场目标(eFG) ,因为它在简单性和准确性之间取得了良好的平衡。

eFG 公式:(FG+0.5 * 3P)/FGA

第 1 部分的先决条件

在我们开始之前,这部分需要这些包:

不要慌!包的细节将在整篇文章中解释。

但是在事情开始之前,记住你应该已经有一个 Twitter 开发者账户,否则你不能继续这个过程。

请注意,consumer_key、consumer_secret、access_token 和 access_secret 应该使用您的令牌。不要与任何人分享!!

数据收集的步骤

知道我们正在寻找球员的推文和表现之间的关系。在我们开始分析之前,将有四个资源来完成数据收集。

  1. ESPN.com获得前 10 名玩家的名字
  2. 从 reference.com收集 NBA 球员的推特账号和他们的名字列表,将前 10 名球员的名字和他们的推特匹配
  3. 废弃 reference.com上匹配玩家的统计数据
  4. 抓取玩家的推文以及每条推文的创建时间。

下图显示了这些数据是如何连接和匹配的:

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

数据的前三部分将通过网页抓取技术收集。这里我们使用 Python 的 请求beautiful soup包进行提取。Requests 包是 Python 的高级 HTTP API,其中一半的抓取任务可以在这个函数中完成:requests . get(yout _ URL _ link)。这个功能下载 HTML 内容到你的电脑,不做任何修改。

然后,我们需要的是应用 BeautifulSoup 来解析数据。我们只需右键单击您想要的内容,然后单击“检查”然后网页源代码瞬间出来,通过 标签 找到确切内容。注意,标签是一种可以被搜索引擎检测到的标记词。通常,标签会附上不同种类的单词,称为属性。例如,术语“是标记, href 是属性名,URL 后面是属性 href 的值。当然,就是我们要找的内容。

现在,这才是开始!

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

Image from ESPN.com

1.从ESPN.com获得前 10 名玩家的名字

2.收集 NBA 球员的推特账号和他们的名字

上述结果以如下的字典格式存储:

这些名字是字典的关键,他们的 Twitter 账户就是这些值:

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

3.废弃reference.com上匹配玩家的统计数据

现在,这部分是关于提取球员在球场上的表现的数据。我们正在统计 2016-2019 赛季的数据,但在这里我们遇到了一些问题。每个 URL 会根据每个玩家的不同而不同,URL 没有固定的模式。因此,我现在想到的唯一方法是列出每个玩家的所有 URL。之后,我们根据每个玩家的网址计时,得到我们需要的全部网址。

在我生成 URL 之后,我将它们发送到下面的函数中。在这里,我们收集了比赛时间、比赛结果、投篮命中率(FG)、尝试投篮命中率(FGA)和三分球命中率(FG3)。此外,我们有很多“如果…否则”语句的原因是,reference.com用特定的词标记记录,如果玩家没有玩游戏,例如“不活动”或“没有玩”

然后,我们将列表类型的数据改造成数据框架。在这里,我们还将数据类型转换为正确的格式,并通过将“int类型指定为“int16”来最小化数据大小。回想一下,我们衡量玩家的表现和他们的推文。我们定义的绩效是有效飞行目标(eFG),,公式是 (FG + 0.5 * 3P) / FGA

该图显示了我们收集的一个玩家数据:

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

现在,Twitter 来了,我们开始根据刚刚得到的账户抓取推文数据。

4.获取玩家的推文以及他们每条推文的创建时间

这里的功能看起来很复杂,但它只是获取推文、关注者数量、朋友数量、最爱数量,并将他们的表现和球员姓名的统计数据组合到一个巨大的数据框架中。

注意:

记住添加 tweet_mode = ‘extended’ 以获得完整的字符数,否则每条 tweet 上只能获得前 140 个字符。此外,只有 tweepy。光标()。items(1000) api 可以访问超过 200 条推文。 api.user_timeline(id = ID,count = 200) API 有这个限制。

此外,我们发现科怀·伦纳德已经很多年没有发微博了。所以我们需要删除科怀·伦纳德。抱歉莱纳德。

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

数据收集到此结束,在下一章,我们将对 tweets 进行一些数据操作。

我们停下来想一想为什么吗?

原文:https://towardsdatascience.com/do-we-pause-and-think-why-748e67ec7e51?source=collection_archive---------13-----------------------

当我们奔向…

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

Fig 1: Pause….(Source: Reflections)

本文分为两部分。第一部分是数据科学/机器学习/人工智能社区。 第二部分是为工作的父母或即将为人父母的人。

我们为什么要在人工智能和相关领域做我们今天正在做的事情?我们有时间停下来思考吗?

我不会在这里回答“为什么”。我想做的是向读者提出一些问题,以便他们找到自己的答案。我们开始吧:

我们停下来试着想象一下 20 年后的世界会是什么样子吗?在某种意义上,当我们学习和应用时间序列时,我们是否会想到,我们的大脑在直观地关联所有经验和预测未来方面要好得多?我们把技术和现实生活联系起来了吗?

某些思维过程不断在我们的大脑中发生,但我们大多数时候并没有意识到它们。有时候梦能让你更好地了解他们。有一天,一件事可能会自然而然地让我们意识到什么对我们来说才是重要的。可能是读一本书,或者去一个不同的地方,或者在极端的情况下——一个人自己的家庭或朋友圈里的悲剧/健康问题可以引发更高层次的思考。

如果我们想成为数据科学家,开发更高的价值观是极其重要的。我不需要举任何例子;因为我不是一个新闻狂——我认为可以有把握地假设读者知道的比我多得多。我们都知道数据可以用来做好事和坏事。

我们想成为什么样的数据科学家?我们在忙着运行笔记本的时候会停下来思考吗?

在第一份工作中,我们可能没有选择去寻找我们的意义,但是我们能坚持多久呢?我们什么时候才能实现这种转变,去做我们关心的事情?我们是要忘记我们从哪里开始,我们是如何得到支持的,还是要把它全部向前传递?看这个例子:直接给。GiveDirectly 是一家在东非运营的非营利组织,通过手机向极端贫困的家庭无条件转移现金来帮助他们。give 直接向肯尼亚、乌干达和卢旺达的人们转移资金。听起来有点奇怪,对吧?人们可能不指望它能起作用,但它能起作用,不会被滥用。它正在得到数据科学/机器学习的帮助。这些都没有给予太多的宣传,但如果我们的心是为了做好事,我们肯定会听到。Datakind 对社会有益。所有这些都可以通过谷歌搜索“社会公益数据”找到

当我们忙于努力在工作中保持竞争力或渴望成为数据科学家(在大多数情况下还有另一份全职工作)时,我们给予配偶/孩子足够的关注了吗?

我们在育儿方面遵循同样的科学方法吗?我们中的一些人是由充满爱的一代人抚养长大的,但他们不知道养育孩子的技巧,也没有机会得到温柔的养育。我们是要把我们的一些人格扭曲遗传给我们的孩子,还是要从现有的数据中进行自我教育?

我们是要在婴儿/蹒跚学步的最初几天读几本育儿书,然后开心地忘记更新自己,还是要在他们成长的过程中不断学习,以迎合他们不断变化的情感需求?

这可能听起来像是题外话,到了段落的结尾,就不是了:

我在 LinkedIn 上看到一些让我害怕的讨论。人们对那些停下来照看婴儿的人有一种不言而喻的偏见。辞职或休息时间超过 6 周不好吗?这是否意味着这个人不是职业导向型的?或者它能告诉我们一个人的自信、分清主次的能力、将团队(在这里是家庭)置于自我之上的意愿吗?养育了两个孩子,让我写下:婴儿一点也不好玩,尤其是在晚上。他们是强硬的老板。老板通常是理性的,婴儿是感性的。他们“现在”就想要结果。他们不能说话,即使他们认为他们在说话。

休息不是为了享受孩子而不是事业。有时可能是因为缺乏支持系统。有时,这可能是父母有意识的决定,给宝宝一个难忘/安全的人生起步。这并不意味着职业不那么重要。这意味着事业同样重要,但不是当时的优先考虑。当该休息回来时,婴儿会平静地进入日托所。因此,休息一下比试图一次处理太多事情要好得多。对于不愿意休息的家长,我有一个问题。你有没有停下来想一想,这里(家)和那里(工作)你会失去什么?我也有一个类似的问题,想问那些对休息的父母有偏见的老板。你有没有停下来想一想因为不支持新父母而可能造成的损失?或者更好的是,从长远来看,支持这个高度进化的人会有什么潜在的好处?

有一个概念叫做用心育儿【谷歌一下,挑一本书】。几年前我读过一本这方面的书。它有关于为什么来自某些文化的人比其他人更友好的案例研究。他们都指出这样一个事实,即在婴儿时期,他们有机会与母亲在一起更长时间,他们的父亲在他们的成长过程中也扮演了积极的角色。

我们对情绪智能的未来和对人工智能的未来一样有意识吗?如果在使用人工智能的人当中没有同样强大的人工智能,人工智能能有什么用?

希望我们大多数人都知道,出生到 6 岁是孩子一生中最重要的时期。他们得到了终生难忘的印象。团队工作能力和心里承载的情商和善良程度密切相关,不是吗?

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

Simple, yet powerful quote right? (source: Quotes Valley)

我希望作为聪明的专业人士,我们也能把我们的智慧应用到个人和社会的方方面面。在这篇文章中,我可能会重复,但那只是因为我对建设一个高品质的社会有强烈的感觉。如果我们开始在家里建造它,这是可能的。

如果你喜欢我的想法,请回应或鼓掌鼓励!:)谢谢。

如果您想了解我的想法、数据科学内容,请在 Twitter 上关注我

你的团队中有数据英雄吗?

原文:https://towardsdatascience.com/do-you-have-a-data-hero-on-your-team-e4ddc318926e?source=collection_archive---------7-----------------------

商业分析和商业智能

您知道每天会产生惊人的 15pb 新数据吗?如果你想把它形象化,这相当于大约 3 亿个四屉文件柜的纸。企业如何处理所有这些数据?

答案可能会让你大吃一惊。今天的企业每天都在发现收集和使用数据的新方法,这意味着发展解释数据的能力可以在几乎所有可以想象的业务运营中做出更明智的决策。

业务分析涉及通过统计和定量分析、数据挖掘、预测建模以及其他用于识别趋势和理解推动业务变革的信息的技术,对来自许多后端系统的历史数据进行探索和分析。商业分析是使用任何东西发现洞察力的行为:任何你可以使用的工具或服务。

商业分析位于商业和数据科学的交叉点。它通过统计和运营分析获取业务数据(如客户关系指标),并得出对各种业务功能的见解。业务分析使组织更加知情,并为更好的决策提供洞察力。业务分析通过混合使用数据、统计和定量分析以及解释性和预测性建模来帮助制定可行的决策,从而使业务领导者具备提高业务绩效的技能、洞察力和理解力。此外,业务分析可以提高成本效率。它帮助组织快速响应用户对数据可用性的需求,提高竞争力,并生成组织或业务信息的单一统一视图。业务分析为能够发现、分析和监控大数据的组织提供了巨大的价值。

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

业务分析包括数据挖掘、预测分析、应用分析和统计,并作为适合业务用户的应用程序交付。这些分析解决方案通常附带针对行业业务流程(例如,索赔、承保或特定监管要求)的行业解决方案。

虽然它通常被称为商业智能领域,但在过去 10 年中,谷歌搜索“商业分析”的数量急剧上升,而“商业智能”的数量略有下降。

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

业务分析的使用在所有领域都呈指数级增长,包括医疗保健、保险、政府、零售、电子商务、媒体、制造业和服务业。

在当今不断变化的业务环境中,业务分析师的角色正在从一个专注于收集需求的角色转变为一个帮助调整和推动组织战略的角色。传统的商业智能(BI)主要集中在报告信息上。在这种方法中,报告由少数人创建,通常是报告开发人员,许多人可能知道这些职位是 SQL 报告编写人员,因为这正是他们所做的,从 SQL 数据库生成报告。然后,这些报告被分发给整个部门或组织,以采取有利于业务的行动。目前的趋势是远离这种实践,更多地进入真正的业务分析,而不是为那些对自己的数据有疑问的人提供工具来获得他们自己的答案。现在是让商业人士自己成为分析师。

其结果是,越来越需要具有分析管理方法的员工,他们能够利用数据,理解统计和定量模型,并能够做出更好的数据驱动的业务决策。

如今,企业的每个部门都应该使用业务分析。首席信息官们明白这一点,并看到这一点在他们的预算中得到了体现,各行各业中有 64%的首席信息官在大数据方面进行了大量投资。这些数据用于指导销售、营销、产品开发、生产、客户服务等。大数据洪流需要一位能够帮助职能部门从数据中获得最大洞察力的首席信息官。

由于大数据的使用和分析只是在最近几年才出现,因此很少有经理具备数据领域的高级专业知识。即使是新的管理者和领导者也不具备整合数据驱动战略的技能。大多数组织需要一种精通数据驱动的业务领域的新型人才基础。一份麦肯锡报告估计,到 2018 年,美国将面临 14 万到 19 万数据科学专业人员的短缺。即使是现在,公司也必须支付非常高的薪水来雇佣数据分析师。

数据英雄

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

这种新方法是对数据英雄的发展:在日益以数据为基础的商业环境中,数据英雄是不可或缺的资产。数据英雄需要了解业务,并在支持业务流程的系统如何工作方面有经验,同时能够解释流程、数据和数据使用方式之间存在的依赖关系。这个人需要成为解决问题的专家:当某件事“做不到”时,他们会挺身而出去完成任务。数据英雄将为统计分析准备数据,执行基本的探索性和描述性分析,并应用统计技术分析数据,以进行商业建模和决策。

业务分析的目标是开发成功的分析模型。它模拟场景来预测未来的情况。这是一种预测未来趋势的非常技术性的方法。这个过程有助于在分析以前和当前的数据后找到模式。该分析用于设计未来的行动方案。数据英雄、商业分析专家使用数据挖掘、描述性建模和模拟。

商业智能使用不同类型的软件应用程序来分析原始数据。在这个领域工作的专业人士研究商业信息。他们与决策经理密切磋商。他们识别现有的业务问题,分析过去和现在的数据,以确定性能质量。他们使用 KPI 和其他指标,并准备易于阅读的报告。这些报告提供了对业务运作的独特见解,并使组织能够做出最佳的业务决策。

商业分析专家帮助预测未来会发生什么。他们用数据来分析在某些特定条件下会发生什么。他们可以预测接下来的趋势和结果。

另一方面,商业智能专家帮助跟踪和监控数据和商业指标。他们能正确地识别出发生了什么和现在正在发生什么。他们可以发现某件事发生了多少次,以及这些事件是何时发生的。

随着商业智能和商业分析领域的不断发展和壮大,组织必须意识到这些术语之间的区别,并理解它们的价值。商业智能和分析工具的采用和使用没有放缓的迹象。理解这些概念对于做出最佳商业决策、保持所有行业的竞争优势以及让公司获取运营和战略价值至关重要。

您知道数据可视化中“显示数字”的三种不同方法吗?

原文:https://towardsdatascience.com/do-you-know-the-three-different-approaches-to-show-the-numbers-in-data-visualization-f5ab59faba83?source=collection_archive---------9-----------------------

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

Photo by Marius Masalar on Unsplash

你是想获得洞见、交流还是做艺术?

随着大数据的出现,可视化数据变得越来越流行。使用视觉通道来思考数据和获得洞察力的想法并不新鲜。1854 年,一位名叫约翰·斯诺的伦敦医生是第一批使用点阵地图来识别霍乱受害者的人之一。通过在地图上将霍乱的受害者标为一个点,并将其与附近的水井进行对比,他可以得出结论,这些水井可能是传染性细菌的来源。

然而现在,数据可视化通常包括在 Excel 中快速绘制成条形图或时间线的销售数字。

使用数据可视化有区别吗?我认为使用视觉来与数据互动有三种不同的用途,它们服务于不同的目的,但经常被混淆和互换。

首先,你可以使用数据可视化来获得洞察力 Snow 先生在这个例子中就是这么做的。

其次,你可以使用可视化来表明观点——支持一个论点,或者在数据本身中提出一个论点。

最后,数据可视化可以是纯粹的艺术,你可以从你的数据源生成美丽的颜色星座。

探索者:获得洞察力

我们收集的大多数数据,无论是在科学领域还是其他领域,都是由简单的值点字段组成的。如果你出去记录一天中每小时的温度,你会得到 24 组数据点:时间和温度。记录这些数据很可能是以表格的形式。此刻你唯一使用的渠道是数字和文本。当你用软件或简单的纸笔以任何方式绘制这些数字时,有趣的飞跃就来了。你会得到一条曲线,让你从测量中获得洞察力。正常夏日的温度曲线可能是从凉爽的早晨到炎热的下午平稳上升,随后是太阳落山时的凉爽期。平均每天的温度,并在一年内重复这项运动,你会得到一条相似的曲线,一条显示夏季和冬季之间差异的曲线。

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

https://en.wikipedia.org/wiki/File:AtlantaWeatherGraph.PNG

由于我们是非常视觉化的动物,将数据以视觉形式呈现出来通常能让我们看到在成堆的数字中我们无法发现的模式和联系。数据变得越大,我们就越必须依靠算法(又名机器学习)来指出显著的统计联系,或者我们必须找到将数据可视化的方法,“自己去看”。

许多科学和商业报告利用数据的展示来显示数字,但往往让读者去提取关键信息。

沟通者:表达观点

一旦你把你的数据放入一个表格,允许你检索你能得到的任何“证据”,你就可以用这些数据来支持你的主张。不幸的是,我们从未真正学会如何做到这一点——从“展示”数据到“使用”数据作为额外的证据。然而,它应该是我们交流的核心:作为作者,你有责任提出你的观点,并添加支持它的信息。

那为什么统计数据和其他可视化数据往往被置之不理,没有评论或亮点?

夸张一点,就像说:这是我的论点,后面是 300 字的清单。你可以选择这些单词中的哪些来支持我的论点。

听起来很傻?然而,在糟糕的数据可视化中,没有焦点和亮点,这几乎是读者或听众必须做的事情。

“看这些线,它们各自向上的斜度就是我所说的证据”。

如果您选择交流您的见解,并希望使用数据来支持论点,请为相关数据添加亮点,注释要点,并帮助读者理解您的图表。可读性和清晰性是这一步的重点。更多还可以在我的文章中找到。********

艺术家:作为艺术的数据

除了产生“有用”的见解,数据还可以产生艺术。我们真的不能指望从这些展示中学习任何东西,或者用它们来建立论点。然而,数据艺术和巧妙的数据可视化可以作为思考数据在我们世界中的重要性的一个有趣的切入点。

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

https://www.flickr.com/photos/walkingsf/4671589629/in/album-72157624209158632/ Locations of pictures taken by locals and tourists.

无处不在的数据收集会对我们的生活产生什么影响?如果我们免费提供我们的数据,这是监视吗?可以通过哪些积极和消极的方式利用这些数据?我记得有一个例子,美国军事基地出现在公共地图上,因为一个健身跟踪设备服务收集并在网上发布数据供所有人查看。

结论

视觉通道对于思考我们收集的数据很重要。如果你在处理数据,花点时间思考一下你目前的步骤是什么:你在探索数据吗?你是否试图利用这些数据进行交流——如果是的话,你是否强调了数据中的信息以帮助读者?或者你只是在寻找一种方法让数据看起来有趣而巧妙?

如果你喜欢这篇文章,请按几下“鼓掌”按钮或发表评论。我会定期在我的个人资料上发布关于技术、科学、数据可视化和创新的内容,如果这些内容与你相关,请关注我。

你知道数据贴标签机是做什么的吗?

原文:https://towardsdatascience.com/do-you-know-what-does-a-data-labeler-do-98561cb0029?source=collection_archive---------5-----------------------

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

日子一天天过去,但争论仍在继续,信息和通信技术部门正在通过自动化通常由人力执行的任务来消除工作岗位。据估计,由于自动化活动的兴起,到 2030 年,中国将减少 2.36 亿个工作岗位,印度将减少 1.20 亿个工作岗位,美国将减少 7300 万个工作岗位(麦肯锡全球研究所,2017 年)。事实上,随着技术的发展,人工智能和物联网的结合将不可避免地消除世界各地的许多劳动力。然而,也有很多新的机会被创造出来,数据标签只是其中之一。

数据标签是人类在机器学习和人工智能应用程序上对数据的人工管理。标记数据是必不可少的,因为计算机有无数的局限性,其中一些在没有人类干预的情况下无法简单解决。事实上,计算机可以被编程来执行艰苦的计算和自动化的活动,这些活动对我们来说太繁琐了,无法通过手动来完成,然而,如果没有适当的训练,计算机无法区分照片中的汽车和狗。总之,计算机使用算法在数据集中进行学习,这通常需要有人监督。粗略地说,我们称之为有监督的机器学习,因为计算机需要人的监督来接受训练,以执行对机器来说很棘手,但对人类来说肯定很容易的任务,如图像识别。因此需要一个数据标签。

训练一台机器的工作量可能是无穷无尽的。假设您想训练一个模型来检测街上的狗,但由于狗的大小、颜色和形状会因品种而有很大差异,您首先需要确保您的模型既不会出现高发生率的假阳性,也不会出现高发生率的假阴性。请记住,当在涉及监督机器学习的复杂现实项目中工作时,可能需要几周甚至几个月才能达到预期的结果。

由于编程技能最初不是一个要求,只要候选人喜欢技术并愿意学习新工具,几乎每个人都可以成为数据标签员。最重要的是,随着人工智能和机器学习的兴起,数据标签的数量预计将在未来几年大幅增加。像 IBM、谷歌、脸书这样的公司以及游戏行业和市场营销领域的许多公司已经在招募新人,准备立即开始工作。

你以前听说过数据标注吗?请与我们分享您对数字革命和未来机遇的看法。=)

数据科学需要研究生学历吗?

原文:https://towardsdatascience.com/do-you-need-a-graduate-degree-for-data-science-8e3d0ef39253?source=collection_archive---------2-----------------------

也许是这样。也许不是。

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

我跟你说实话:我是个博士辍学生。

顺便说一句,这个头衔让我受益匪浅:它暗示我读了很多研究生,但仍然保持着只有“辍学”这个词才能提供的坏蛋光环。从某些方面来说,这是一种终极的谦虚吹牛。博士毕业,万中无一。但是两年半之后,你就成了一个的急躁的书呆子。人们会想知道你接下来还会做些什么。“埃隆·马斯克从研究生院退学了,”他们会说。“这家伙可能就像埃隆一样!”

虽然从研究生院退学对我作为一个不可预测的、玩四维象棋的、躲在壁橱里的书呆子天才的名声有很大的好处,但我越来越清楚,成为一名博士退学者的两个关键因素并不适合所有人:1)开始攻读博士学位,2)退学。硕士也是如此。这对一般有抱负的 STEM 专业人士来说是正确的,但对有抱负的数据科学家来说更是如此。我马上会解释原因。

但是首先,你可能想知道我是怎么知道的。

事情是这样的:我在一家数据科学导师创业公司工作。通过这项工作,我可能采访了 1000 多名有抱负的数据科学家——有些人有博士学位,有些人有硕士学位,有些人有本科生,有些人在中间的每个阶段都辍学了。这给我留下了一件罕见而珍贵的东西:数据科学职业故事的统计显著样本。

下面是我从这些故事中学到的:在某个时间、某个地点和某个人身上,不同的学位是有意义的。但是因为大多数人求助于大学和学院的研究生导师来决定是否去读研究生,他们在签约之前往往不了解事情的全貌。

因此,听听一位前学术出身的初创企业创始人的话:不是所有的学位都适合所有人。原因如下。

1.博士学位

[警告:这将会让很多拥有博士学位的人感到不安。我提前道歉。]

“我发现很多数据科学工作都需要博士学位。我需要博士学位才能成为数据科学家吗?”

天啊,没有。什么都没有。

不要误解我的意思,在你的电子邮件结尾加上这三个额外的字母绝对是一个加分项。有时候我真希望自己只是因为这个原因才留下来。但是现实来了。

如果你的目标是成为一名数据科学家或机器学习工程师/研究员,博士学位可能是一个不错的选择。但也有两大原因可能不是这样:

  1. 获得博士学位需要很长时间。
  2. 除非你从“正确的”导师那里获得“正确的”博士学位,否则你不可能学到任何有价值的东西。

第一点:在美国或加拿大,完成一个博士学位需要 4 年到 7、8 年的时间。完成的平均时间通常是 5 或 6 年,视机构而定。现在让我们来看一下这个问题。

你知道 5 年前数据科学中没有什么东西吗?Spark,XGBoost,jupyter 笔记本,GloVe,spaCy,TensorFlow,Keras,Pytorch,InceptionNet,ResNet,强化学习(喜欢,基本上一点都不喜欢)等。

因此,除非你决定在这些东西出现时自己去了解它们(在这种情况下,我不确定研究生院是否值得称赞),否则你的博士学位可能会让你处于 2012 年被低温冷冻的人的位置,而今天却被重新激活成一个完全的新手。你会发现自己置身于一个勇敢的数据科学技术新世界,无论如何,毕业后你都必须自己学习。

关键是,数据科学和机器学习的发展非常快。他们将来只会走得更快。因此,如果你正在考虑攻读数据科学或机器学习相关领域的博士学位,并且你的目标是有朝一日在行业中工作,请记住,你实际上是在你专攻的领域上下了赌注:你指望它在你最终毕业时既相关又受欢迎。这可能是一个风险很高的赌注。

**第二点:**花点时间想想谁会监督你,为什么他们不在谷歌或脸书工作。

当然,也有人干脆更喜欢学术研究,而不是在工业界做数据科学或机器学习。但值得记住的是,提供给行业顶级 ML 人才的金额足够高,以至于留在学术界的人肯定会面临向下的选择压力。

当然,在某些地方,你总能找到这条规则的例外。这些通常是超级精英项目,如加拿大的 Vector Institute 或 MILA,或美国麻省理工学院和伯克利分校的数据科学项目。当你看到它们时,你会知道它们,但请记住,你的州立大学,或世界排名“前 200 名”的学校,可能不会是其中之一。

综上所述:如果你只对成为 Airbnb 的深度学习工程师感兴趣,那么当然,博士学位可能是相对较少的入门途径之一。但是,如果你没有在白金+项目中攻读博士学位,就不要指望被白金+公司聘用。

但是如果你正在寻找一个更典型的(更现实的)数据科学角色,博士学位很少是正确的选择。你最好把这 4 到 8 年的时间花在获取实际数据科学家的工作经验上,在那里你会学到新技术,在那里你会更好地预测新趋势并走在它们的前面。

哦,如果你正在考虑攻读一个与数据科学完全无关的领域的博士学位(例如,物理、生物、化学),并且你的目标是一个数据科学的角色,这里有一个有用而又苛刻的启发:如果你距离毕业还有 18 个月或更长时间(并且你真的确定你想成为一名数据科学家),就退学吧。沉没成本谬误会让你对这一策略产生怀疑(你应该这样做),但根据我的经验(从统计数据来看),这更有可能是正确的举措。

2.理学硕士。

做数据科学需要硕士吗?

看情况。这是我刚做的记分卡。把适合你的分数加起来,如果总数大于 6,那么答案是“可能硕士学位会有帮助。”

  • 你有“硬”STEM 背景(物理/数学/CS 本科或其他学位/文凭): 0 分
  • 你有“软”STEM 背景(生物学/生物化学/经济学本科或其他学位/文凭): 2 分
  • 你有非梗背景: 5 分
  • 您使用 Python 的经验不足 1 年: 3 分
  • 你从未做过涉及编码的工作: 3 分
  • 你觉得自己不擅长自主学习: 4 分
  • 当我说这个记分卡基本上是一个逻辑回归算法时,你没有理解我的意思: 1 分

注意事项:

→需要考虑的是,你是需要一个数据科学的完整硕士学位,还是一个训练营。如果你选择参加训练营,请记住他们的动机:你是否被要求提前支付费用,但不能保证之后会被雇佣?训练营有相关的职业服务吗?

→大多数人对训练营持怀疑态度。理应如此。但大多数人忽略的是,他们应该对任何不提供安置保证的大学硕士学位持同样的怀疑态度。硕士学位是训练营。那样对待他们。如果你做了,不要关注你的成绩,关注你正在学习的东西。问问你的项目的研究生就业率是什么样的。大学有一种有趣的方式来说服他们的学生,一个简单的项目是一个好项目,或者他们让你进来是在帮你的忙。这是一个心理游戏,并且被过时的“传统智慧”所强化,即大学学位具有独立的价值。但是你的目标是被录用,而不是“投入你的时间”得到一张纸。

→即使你完成了硕士学位,你还有很多技能需要提高。可能比你想象的还要多。但是只要项目时间短(不要去 2 年以上的硕士项目),而且价格不太高,它绝对是值得的。

3.本科生

总的来说,是的,你需要一个本科学位才能成为一名数据科学家。不一定是因为你需要知识,而是因为公司还没有准备好接受自学+参加训练营和一些在线课程实际上可以让你为工作做好准备的想法(尽管在某些情况下绝对可以)。

但是本科学位有个问题。

它们不是工作。如果你和技术领域的任何人交谈,你会很快意识到技术工作>>学习技术的学校。部分原因是大学里教授的课程通常已经过时了 5 到 10 年。如果你在一个变化不大的领域,比如物理、数学或统计学,这可能没什么问题。

但是如果你在工程或计算机科学领域,你在一家很棒的公司得到了一份暑期实习,你想推迟你的学位(或退学)以获得更多的工作经验,这是你应该 100%考虑去做的事情。如果你本科的目的是找一份工作,如果你已经在一家有足够跑道让你获得前两年经验的公司获得了一个职位,那么支付更多的学费就没有什么意义了。

我绝对不是说你应该从本科退学。我想说的是,一般来说,更多的人应该更开放地接受未完成的学位,如果他们已经实习过,并转化为全职工作的具体机会。这种情况并不经常发生,但我怀疑这在很大程度上是因为许多本科生认为完成学位是“好人做的事情”

我在这里给出的建议在很多方面都是非传统的。但是在像数据科学这样一个快速发展的领域,传统往往会大大落后于最优。作为一个社会,我们对研究生教育价值的看法是传统智慧中最需要赶上现实的一个方面。

当然,这并不意味着正规教育,甚至研究生学位都不值得获得。但任何人都不应该认为需要硕士或博士是理所当然的:如果你报名攻读理学硕士只是为了符合你对良好的数据科学职业轨迹的刻板印象,你可能需要重新考虑你的策略。

你真的需要一个数据科学家吗?

原文:https://towardsdatascience.com/do-you-really-need-a-data-scientist-fcdfc226f4e4?source=collection_archive---------8-----------------------

仅仅在您的数据库中“插入”一个数据科学家不会带来预期的结果。首先,你需要确保你的数据确实有价值。

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

您的公司拥有数据,而且很可能是大量数据。数百万行,甚至可能是图像、音频和视频。但是还没有什么可以称之为大数据的东西。随着时间的推移,数据是通过许多系统收集的,无论是您的系统还是第三方系统,如 ERP、CRM 和其他应用程序。你把它存储在某个地方:你的关系数据库、电子表格、NoSQL 数据库或其他任何地方。它甚至可能存储在第三方数据库中(在您使用的一些软件中)。事实是:数据属于你,它被存储起来,你可以访问它。因为数据科学现在是一个热门话题,所以出现了一个常见的错觉:

如果有数据存储在某个地方,我们需要做的就是雇佣一个数据科学家。他/她一定会从数据中提取一些东西,然后转化为对我们有价值的东西。

好吧,如果你公司的现状和上面的描述有某种联系…我很抱歉。你可能真的不需要数据科学家。至少,现在还没有。让我们来探讨一个假设的场景,您雇佣了一名数据科学家。

假设场景:雇佣一名数据科学家

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

我在就业市场上看到的大多数数据科学家实际上只是在mooc中学过 Python、R、pandas 和 scikit-learn 的分析师。他们参加过一些 Kaggle 的比赛,没有什么职业经验。而且他们渴望在“现实世界”中展示自己的知识。

这是 21 世纪最性感的工作。 再也没有人想创建仪表盘和报表了,每个人都想和人工智能打交道。

如果你发布一份寻找数据科学家的工作,大量的候选人将会出现,你可能会面临以下情况:

  1. 你的面试,测试,筛选,会成功选出一个具备一些机器学习工程素质的数据科学家。他/她将具有良好的编程技能和几种算法及其应用的理论知识。
  2. 你将向他/她展示你的“存储在某处的数据”。然后给他/她一个开放式问题来处理。比如:我们希望降低违约风险,或者我们需要增加销售额。
  3. 他会尝试使用数据,应用模型和算法来回答你提出的问题。很可能会失败。
  4. 然后,你将开始给他一些应该交给商业智能分析师的任务,比如设计一个跟踪日常销售的仪表板,或者做一些自动化的后勤工作。
  5. 过一会儿,你的数据科学家会感到沮丧。他终究不能把在课程和比赛中学到的东西应用到实践中去。他将开始考虑其他公司的工作岗位,因为他们显然在做真正的数据科学——篱笆那边的草总是更绿。
  6. 您的企业不会从雇用数据科学家中获得预期的好处。最多,你会有一个没有动力的 BI 分析师,和一个数据科学家挣得一样多。也许你将不得不寻找一个替代的专业人士。

注意,问题不在数据科学家。他有必要的知识,并努力做好自己的工作。实际问题在于你的数据…也在于缺乏一个真正的科学家。

大多数数据科学家的最大问题是,他们实际上并不是科学家。对快速应用模型和算法的焦虑和渴望最终超过了优秀数据科学工作的重要阶段,如情境化、问题框架、实验设计和数据收集。

你的数据(很可能)是垃圾!

交易数据库(存储订单、支付、访问日志等数据的数据库)是专门为存储交易数据而开发的,交易数据支撑着应用程序。这些原始数据对数据科学来说没什么价值。构建这些数据库的开发人员没有考虑,也许也不应该考虑如何将这些数据用于分析。他们只是创建了数据模型,可以提高他们当时正在编写的任何应用程序的性能。

这些事务数据库中的数据可能格式不正确,没有文档,列名没有代表性,没有键一致性,有大量重复或缺失的行,不同来源之间的值不一致,等等。也有可能,无论是大公司还是小公司,有些流程完全依赖于电子表格。因此,您的数据库不会有变更日志或历史数据。流程和控制的缺失,会让每个事件的真相真的很难分辨。

很可能您已经在这些事务数据库上运行了一个商业智能结构。您只需将一些工具直接插入数据库或电子表格,并让一些数据分析师创建报告和仪表板。这非常有效,并为公司带来了价值。你看见了你所做的一切,一切都很好。

但是,当你开始洞察数据如何帮助你的公司增加市场份额、提高效率等等的时候,就到了。你在那里看到了所有这些数据…可用…只是用来创建一些报告和解释已经发生的事情…就等着传递更多的价值。

如果预测未来是可能的呢?优化商业政策呢?还是留住一个刚要离开的客户?你有数据——很多数据。他们在那里…焦躁不安,尖叫,催促被使用。你感觉像伊甸园里的夏娃。蛇问:“你不吃花园里任何一棵树上的果子吗?”。是的,你受到诱惑,雇佣了我在前面的假设情况中提到的那个数据科学家。

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

事情是这样的:将数据存储在事务性数据库中这一简单事实并不意味着你有金矿可挖。它们需要仔细加工并转化为分析基础——这个过程需要很多时间。创建分析数据库需要特定的环境,也需要了解业务特性,以便将单纯的交易转化为有意义的事情。

尽管如此,仍然存在事务性数据实际上是垃圾的情况,因为收集没有按预期进行。我遇到过这样的情况,系统没有存储所有的交易信息,或者存储了转换后的数据,使得无法返回到它们的原始组件。两年多的数据收集可能有助于开发一个奇妙的预测模型,但却增加了公司的存储成本。

让我们把事情说清楚:你有一个数据问题。你最终雇佣的数据科学家将拥有创造价值的所有工具和方法。但是,没有好的数据,他们做的任何事情都是无用的。这不是他们的错,是你的错。在这种情况下,你和数据科学家在一起的每一天,都是看到你的钱从前门离开的一天。

雇佣一个科学家。从事数据工作的人。

科学家必须处理实验的每一个步骤,从他们的构想到发表结果。他们通常是拥有物理、化学、数学、统计学或生物学学位的专业人士。他们可能不知道关于机器学习的一切,但是,在阅读的这一点上,我想我已经表达了我的观点:你不一定需要能够实现 scikit-learn 方法的人。

科研流程通常如下:

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

雇用知道如何这样思考的人。在面试时,不要测试候选人是否知道所有的工具和技术。相反,测试他/她是否能遵循上面的思路。寻找表明他们能够遵循科学方法中每一步的情况和证据。具备这些技能的候选人可能会在处理你的业务数据时表现出色。

科学家检验想法和假设。他失败了,学习了,最终想出了一个解决方案。如果你真的需要快速完成工作,那就雇佣一个有经验的科学家。确切了解您的数据情况,然后测试申请人的经验,验证他/她是否已经面临类似的情况。询问他采取了哪种行动,从中学到了什么。一个有经验的科学家能够更快地解决类似的问题。

学习如何使用新工具相对较快。另一方面,学习如何思考是一个漫长而缓慢的过程。通常需要四年或更长时间的自然科学学士学位,有时还需要硕士或博士学位。雇佣一个知道如何思考并具备一些数据科学工具基础知识的人,要比雇佣一个知道很多不同工具但不考虑在哪里以及如何应用它们的人好得多。这并不意味着你不应该雇用一个不知道如何编程的科学家,而是说在选择候选人时,编程技能不应该是最相关的。

你还必须重新思考你所有的流程和数据流。科学家需要了解业务环境,并了解如何收集您的数据。他/她应该对您的应用程序提出修改建议,以便在正确的时间获取正确的数据。他必须确保所有过程都是可重复的。这将要求您的开发人员改变服务,创建新的 API,并满足科学家的需求(他们必须知道如何用可靠的证据来支持他们)。您的技术团队需要给他一定的自主权,以便科学家能够创建新的数据模式、自动化流程并创建新的 ETL。

听着,这并不意味着忘记眼前的回报而只关注长远。你的科学家将致力于组织和提高数据质量。在此过程中,他/她将发现需要优化的流程,并检测一些模式。他将能够运用人类的智慧进行调整,这将在短期内产生回报。与此同时,这将使你离真正需要一个了解机器学习一切的数据科学家更近一步。

数据科学码头工人

原文:https://towardsdatascience.com/docker-for-data-science-4901f35d7cf9?source=collection_archive---------1-----------------------

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

Docker for Data Science

Docker 是一个为软件工程师简化安装过程的工具。来自统计背景的我过去很少关心如何安装软件,偶尔会花几天时间来解决系统配置问题。万能的上帝派来的码头工人。

把 Docker 想象成一个轻型虚拟机(我为使用这个术语向 Docker 大师们道歉)。通常有人会编写一个Dockerfile来构建一个Docker Image,其中包含了项目所需的大部分工具和库。您可以以此为基础,添加项目所需的任何其他依赖项。它的基本理念是,如果它能在我的机器上工作,它也能在你的机器上工作。

对数据科学家有什么好处?

  1. 时间:不安装软件包所节省的时间本身就使得这个框架物有所值。
  2. 可重复研究:我认为 Docker 类似于在报告中设置随机数种子。在您的机器上使用的相同的依赖项和库版本也在其他人的机器上使用。这确保了您正在生成的分析能够在任何其他的分析机器上运行。
  3. 分发:你不仅分发你的代码,而且还分发代码运行的环境。

它是如何工作的?

Docker 采用了(可重用)层的概念。所以你在Dockerfile里面写的任何一行都被认为是一个层。例如,您通常会这样开始:

FROM ubuntu
RUN apt-get install python3

这个 docker 文件将在Ubuntu层的顶部安装python3(作为一层)。

你本质上要做的是为每个项目写下所有的apt-get installpip install等等。命令放到 docker 文件中,而不是在本地执行。

我推荐阅读关于https://docs.docker.com/get-started/的教程来开始使用 Docker。学习曲线最小(最多 2 天工作),收获巨大。

Dockerhub

最后,Dockerhub 值得一提。就个人而言,Dockerhub 是 Docker 真正强大的原因。这就是 github 对于 git 的意义,一个共享 Docker 图片的开放平台。你总是可以使用docker build …在本地构建一个 Docker 映像,但是最好将这个映像push到 Dockerhub,这样下一个人就可以简单地pull用于个人使用。

我的机器学习和数据科学的 Docker 图像可以在这里找到,还有它的源文件

总结想法

就我个人而言,我已经开始在我的 github repo 的大部分(如果不是全部的话)中包含 Dockerfile。尤其是考虑到这意味着我将永远不必处理安装问题。

Docker 是软件工程师(现在是数据科学家/分析师)应该拥有的工具之一(几乎和 git 一样受到重视和尊重)。长期以来,统计学家和数据科学家忽略了数据分析的软件方面。考虑到使用 Docker 已经变得如此简单和直观,没有理由不把它作为软件开发管道的一部分。

编辑 1

如果你想看比上面提供的快速提示更有实质内容的教程,请看这个视频(跳到 4:30 左右):

Edit 2(关于 python 的 virtualenvs、R 的 packrat 等的快速注释。):

就我个人而言,我没有使用过任何其他的容器化工具,但是应该注意的是,Docker 独立于 python 和 R,并且超越了特定编程语言的容器化应用程序。

看这里是我关于机器学习和深度学习的课程(使用代码 DEEPSCHOOL-MARCH to 90% off)。

数据科学码头工人

原文:https://towardsdatascience.com/docker-for-data-science-9c0ce73e8263?source=collection_archive---------0-----------------------

如果你选择了数据科学的道路,你应该知道很多工具,比如 pythonNumPy熊猫MatplotlibSciPyJupyter notebookscikit-learn ,甚至可能还有 Apache Spark

有很多工具是为了让生活变得更简单而创造的,例如Anaconda——为开源和私人项目提供强大的协作和软件包管理。

我想展示另一个好工具——Docker。它有助于你在任何地方的工作环境。

我将展示从安装 Anaconda 和升级软件包到构建 Docker 映像并将其发布到 Docker hub 上的所有步骤。

蟒蛇

如果你刚刚开始自己的数据科学之路,你可以找到很多书籍和课程( CourseraUdemy……)。几乎所有地方都应该从安装环境开始。你可以使用 python 和 pip 或者安装 Anaconda。

在这里,我将向您展示如何安装 Anaconda 并更新所有依赖项。

有很好的文档如何在任何平台(Mac OS,Linux,Windows)上安装。由于我主要使用 mac,我将展示 Mac OS 的所有步骤。但是对于 Linux 和 Windows 来说,几乎是一样的。让我们打开在 macOS 上安装页面,点击Anaconda installer for MAC OS链接下载安装程序。

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

我来安装 Python 3.6 版本 64 位图形安装程序(569 MB) 。只需点击链接并下载它。像往常一样,在 mac 上安装软件很容易。

运行安装后,您可以看到一些步骤。单击下一步:

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

你可以看到一些安装信息,点击下一步:

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

阅读许可证:

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

然后单击下一步:

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

您需要同意许可证:

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

选择安装位置:

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

对于所有的包,我们需要将近 2 Gb 的磁盘空间。单击安装:

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

等待:

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

就这么定了。我们可以删除安装程序:

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

要测试它,只需打开终端并运行命令 conda :

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

Conda 是一个针对任何语言——Python、R、Ruby、Lua、Scala、Java、JavaScript、C/ C++、FORTRAN——的包、依赖和环境管理。

下一步是更新所有依赖项。我们需要更新 conda、anaconda 和所有软件包:

conda update conda

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

conda update anaconda

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

conda update --all

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

即使您刚刚安装了 anaconda,您也可能需要更新一些软件包。

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

最终我们可以看到

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

仅此而已。为了测试它,我们可以运行 jupyter notebook:

jupyter notebook

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

并在浏览器中查看:

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

为了当地的发展仅此而已。但是如果你需要为其他 PC 共享你的环境(家庭和工作或者为团队共享),你应该使用 Docker。

码头设备

要使用 Docker,我们需要安装它。打开文档页面。我们将使用社区版 (CE)版本,因为它是免费的,对我们来说没问题。

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

和之前一样我选择 Docker for Mac (macOS)

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

我会使用稳定频道

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

点击链接并下载。打开后,只需拖放它

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

在你的程序中有了它之后。运行它:

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

您会看到图标

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

起作用了。让我们在命令行中运行它:

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

我写了一篇文章,描述了一些有用的案例:使用 Docker 做正确的事情。我建议在我们继续之前阅读它。

Docker 图像

下一步是创建一个图像并保存在 github 上。我希望你有 gihub 帐户。如果没有,很容易创建它

接下来我将展示如何创建 Dockerfile 和构建映像,运行它和停止它。但是在我们需要创建工作目录和空 Dockerfile 之前:

mkdir docker-data-science
cd docker-data-science
touch Dockerfile

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

并在您最喜欢的 IDE 中打开它。因为我们已经安装了 jupyter 笔记本,所以我们可以使用它:

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

打开它

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

我将为我们的映像使用 linux 的 Ubuntu 版本。这是最流行的 linux 发行版。你可以在文档中阅读如何安装 Anaconda for linux。不像 mac os 那么容易。

让我们打开下载页面,复制 Python 3.6 64 位(x86)安装程序(525 MB) 的链接。

这是我们的文档:

# We will use Ubuntu for our image
FROM ubuntu# Updating Ubuntu packages
RUN apt-get update && yes|apt-get upgrade# Adding wget and bzip2
RUN apt-get install -y wget bzip2# Anaconda installing
RUN wget [https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh](https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh)
RUN bash Anaconda3-5.0.1-Linux-x86_64.sh -b
RUN rm Anaconda3-5.0.1-Linux-x86_64.sh# Set path to conda
ENV PATH /root/anaconda3/bin:$PATH# Updating Anaconda packages
RUN conda update conda
RUN conda update anaconda
RUN conda update --all# Configuring access to Jupyter
RUN mkdir /opt/notebooks
RUN jupyter notebook --generate-config --allow-root
RUN echo "c.NotebookApp.password = u'sha1:6a3f528eec40:6e896b6e4828f525a6e20e5411cd1c8075d68619'" >> /root/.jupyter/jupyter_notebook_config.py# Jupyter listens port: 8888
EXPOSE 8888# Run Jupytewr notebook as Docker main process
CMD ["jupyter", "notebook", "--allow-root", "--notebook-dir=/opt/notebooks", "--ip='*'", "--port=8888", "--no-browser"]

我描述了每个步骤,并在 Anaconda 安装部分中放置了到 Anaconda 文件的链接。所以我们需要看到:

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

为了构建映像,我们需要运行命令:

docker build -t docker-data-science .

你可以看到每个步骤,从下载 Ubuntu 镜像开始:

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

和更新:

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

下载 Anaconda 安装程序:

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

安装 Anaconda:

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

和更新软件包:

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

您可以随时停止构建并重新运行它。Docker 保存每一步,这样你就可以从最后一点继续。如果您需要向 Dockerfile 添加一些新的包或其他依赖项并继续构建映像,它会很有帮助。

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

终于完成了。我们可以看到我们下载并创建的图像:

docker images

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

保存 Docker 文件后,不要忘记在本地停止 jupyter 笔记本,因为我们将使用 Docker 容器中的相同端口:

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

现在,我们可以基于新映像运行容器了:

docker run --name docker-data-science -p 8888:8888 -v "$PWD/notebooks:/opt/notebooks" -d docker-data-science

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

并打开 http://localhost:8888/

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

输入

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

如果我们创建一个新文件

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

我们可以在子文件夹中看到它:

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

所以我们的地图起作用了。我们可以运行容器,创建文件,测试它,它将被保存在 PC 上。

要停止容器运行:

docker rm -f docker-data-science

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

我们可以在浏览器中看到:

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

开源代码库

现在是时候在 github 上保存我们的 docker 文件了。之后,我们开始与 Docker hub 合作。

登录 github 后,点击创建新的存储库按钮或直接打开https://github.com/new

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

在我们看到添加和保存文件的步骤后:

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

所以让我们发出这些命令:

git init
echo "notebooks" > .gitignore
git add .
git commit -m "first commit"

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

命令回显【笔记本】>。gitignore 创建。gitignore 文件,我们可以把不想保存的目录或文件放在 git 中。在我们的例子中是笔记本。您只需要存储源代码。

接下来:

git remote add origin https://github.com/evheniy/docker-data-science.git
git push -u origin master

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

我们刚刚在 github 上保存了 docker 文件。如果我们重新加载页面,我们可以看到:

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

但是我们看到消息说我们需要创建 README.md 文件来描述我们的存储库。让我们来做吧:

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

保存并刷新页面:

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

现在您可以发出命令:

git clone [https://github.com/evheniy/docker-data-science.git](https://github.com/evheniy/docker-data-science.git)

并在任何带有 Docker 的 PC 上构建映像。但是如果你不想等半个小时,而它的建设,你可以建立一次,并保存在 Docker 枢纽。

码头枢纽

Docker hub 是一个类似 github 的 Docker 图片存储。你需要创建帐户,然后你可以存储自己的图像。

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

要存储图像,您需要点击创建存储库链接,并执行后续步骤:

  1. 选择一个名称空间*(必需)*
  2. 添加存储库名称*(必填)*
  3. 添加简短描述
  4. 将降价添加到完整描述字段
  5. 将其设置为私有或公共存储库

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

保存后,我们将它放在 docker hub 上:

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

之后,我们需要提升我们的形象。但是在我们需要登录之前:

docker login

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

接下来,我们需要设置 docker 用户

export DOCKER_ID_USER="evheniy"

制作新标签:

docker tag docker-data-science evheniy/docker-data-science

和推送图像:

docker push evheniy/docker-data-science

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

我们的形象是一个巨大的。

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

我们可以看到刚刚创建的标记:

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

现在我们可以运行命令了

docker pull evheniy/docker-data-science

在任何电脑上获取图像

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

我们可以看到更新的 docker hub 配置文件:

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

自动构建

手动制作图像也可以。但是如果你在 github 上修改代码,Docker hub 可以帮助你自动构建它。为此,我们需要创建自动化构建:

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

并链接 github 或 bitbucket 帐户—保存代码的地方:

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

如果你是第一个,你应该连接你的账户。让我们为我们的 github 帐户制作:

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

一些有用的信息:

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

和链接账户。我们需要达成一致:

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

我们可以看到结果:

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

现在我们可以创建自动构建:

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

为此,我们需要选择 github 存储库,在我们的例子中是 docker-data-science:

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

一些配置:

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

我们需要重命名构建存储库,因为我们有其他同名的存储库:

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

我们刚刚为我们的存储库创建了一个新的自动化构建:

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

让我们更新代码来运行 build:

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

我们看到我们的变更正在排队:

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

几分钟后,is 开始构建:

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

要构建所有步骤,我们需要等待 40 分钟:

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

之后我们可以看到结果:

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

在本文中,我们用 Anaconda 和 docker 映像创建了本地环境。每当我们在 Docker hub 上保存一个新的映像时,以及在我们创建了自动构建配置之后,跳过构建。我们将在下一篇文章中使用这张图片,在那里我将展示一些关于机器学习和大数据的有用东西。

参考

数据科学家的 Docker

原文:https://towardsdatascience.com/docker-for-data-scientists-5732501f0ba4?source=collection_archive---------8-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 [## 想在数据科学方面变得更好吗?

当我在我发布独家帖子的媒体和个人网站上发布新内容时,请单击此处获得通知。](https://bobbywlindsey.ck.page/5dca5d4310)

Docker 在开发人员中很热门,虽然数据科学家不是严格意义上的软件开发人员,但 Docker 有一些非常有用的功能,从数据探索和建模到部署。由于 AWS 等主要服务支持 Docker 容器,因此使用 Docker 实现持续集成和持续交付更加容易。在这篇文章中,我将向您展示如何在数据科学环境中使用 Docker。

Docker 是什么?

这是一个软件容器平台,为我们提供了一个隔离的容器,让我们拥有运行实验所需的一切。本质上,它是一个轻量级的 VM,由一个可以进行版本控制的脚本构建而成;因此,我们现在可以对我们的数据科学环境进行版本控制了!开发人员在与同事进行代码协作时使用 Docker,他们也用它来构建敏捷软件交付管道,以便更快地交付新功能。这听起来耳熟吗?

码头术语

我有数学背景,所以很难避免定义!

容器:非常小的用户级虚拟化,帮助你构建、安装和运行你的代码

图片:你的容器的快照

Dockerfile :一个基于 yaml 的文件,用来建立你的形象;这是我们可以控制的版本

Dockerhub : GitHub 为你的 Docker 图片;您可以将 Dockerhub 设置为在 GitHub 中更新 Dockerfile 时自动构建映像

为什么 Docker 对数据科学如此重要

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

Source: developermemes

听过你同事的这些评论吗?

  • “不知道为什么它不能在你的电脑上工作,但它能在我的电脑上工作。”
  • “从零开始为 Linux、Windows 和 MacOS 安装所有东西,并试图为每个操作系统构建相同的环境,这是一件痛苦的事情。”
  • “不能安装你用过的软件包,你能帮我吗?”
  • “我需要更强的计算能力。我可以使用 AWS,但安装所有这些软件包和配置设置就像我在机器上安装它一样,需要很长时间。”

在很大程度上,Docker 很容易解决这些问题。目前的例外是 GPU 对 Docker 图像的支持,它只能在 Linux 机器上运行。除此之外,你很棒。

Python 和 Jupyter 笔记本的 Docker

看看这个文档

# reference: [https://hub.docker.com/_/ubuntu/](https://hub.docker.com/_/ubuntu/)
FROM ubuntu:16.04# Adds metadata to the image as a key value pair example LABEL version="1.0"
LABEL maintainer="Your Name <some_email@domain.com>"# Set environment variables
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8# Create empty directory to attach volume
RUN mkdir ~/GitProjects# Install Ubuntu packages
RUN apt-get update && apt-get install -y \
    wget \
    bzip2 \
    ca-certificates \
    build-essential \
    curl \
    git-core \
    htop \
    pkg-config \
    unzip \
    unrar \
    tree \
    freetds-dev# Clean up
RUN apt-get clean && rm -rf /var/lib/apt/lists/*# Install Jupyter config
RUN mkdir ~/.ssh && touch ~/.ssh/known_hosts
RUN ssh-keygen -F github.com || ssh-keyscan github.com >> ~/.ssh/known_hosts
RUN git clone [https://github.com/bobbywlindsey/dotfiles.git](https://github.com/bobbywlindsey/dotfiles.git)
RUN mkdir ~/.jupyter
RUN cp /dotfiles/jupyter_configs/jupyter_notebook_config.py ~/.jupyter/
RUN rm -rf /dotfiles# Install Anaconda
RUN echo 'export PATH=/opt/conda/bin:$PATH' > /etc/profile.d/conda.sh
RUN wget --quiet [https://repo.anaconda.com/archive/Anaconda3-5.2.0-Linux-x86_64.sh](https://repo.anaconda.com/archive/Anaconda3-5.2.0-Linux-x86_64.sh) -O ~/anaconda.sh
RUN /bin/bash ~/anaconda.sh -b -p /opt/conda
RUN rm ~/anaconda.sh# Set path to conda
ENV PATH /opt/conda/bin:$PATH# Update Anaconda
RUN conda update conda && conda update anaconda && conda update --all# Install Jupyter theme
RUN pip install msgpack jupyterthemes
RUN jt -t grade3# Install other Python packages
RUN conda install pymssql
RUN pip install SQLAlchemy \
    missingno \
    json_tricks \
    bcolz \
    gensim \
    elasticsearch \
    psycopg2-binary# Configure access to Jupyter
WORKDIR /root/GitProjects
EXPOSE 8888
CMD jupyter lab --no-browser --ip=0.0.0.0 --allow-root --NotebookApp.token='data-science'

如果你曾经在 Ubuntu 中安装过软件包,这应该看起来很熟悉。简而言之,这个 Dockerfile 是一个脚本,用于自动构建和设置一个轻量级版本的 Ubuntu,其中包含使用 Jupyter 笔记本进行[我的]数据科学探索所需的所有必要的 Ubuntu 包和 Python 库。最好的一点是,无论我是在 MacOS、Linux 还是 Windows 上,这都将以相同的方式运行——无需编写单独的安装脚本和第三方工具来在每个操作系统中拥有相同的环境。

要从这个 Docker 文件构建 Docker 映像,您需要做的就是执行

docker build -t bobbywlindsey/docker-data-science .

鲍勃是你的叔叔。要运行映像,您有两种选择—您可以交互运行映像(这意味着您将实时看到 Jupyter 笔记本服务器的输出),也可以在分离模式下运行映像(在这种模式下,您可以进入映像的终端进行操作)。

要在 Windows 上以交互方式运行映像,请执行

docker run -it -v ~/GitProjects:/root/GitProjects --network=host -i bobbywlindsey/docker-data-science

否则,

docker run -it -v ~/GitProjects:/root/GitProjects -p 8888:8888 -i bobbywlindsey/docker-data-science

要在 linux 的分离模式下运行映像,请执行以下操作:

docker run -d --name data-science -v ~/GitProjects:/root/GitProjects --network=host -i bobbywlindsey/docker-data-science
docker exec -it data-science bash

或者对于 MacOS 和 Windows:

docker run -d --name data-science -v ~/GitProjects:/root/GitProjects -p 8888:8888 -i bobbywlindsey/docker-data-science
docker exec -it data-science bash

不算太差!我意识到键入这些运行命令可能有点麻烦,所以我看到了几个选项。您可以给这些命令起别名,也可以使用 docker-compose 文件。

使用多个容器

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

Source

我不会在这里过多地讨论 Docker Compose,但是作为一个例子,我必须运行一个 docker-compose 文件,用于一个 Jekyll 博客:

version: '3'
services:
  site:
    environment:
      - JEKYLL_ENV=docker
    image: bobbywlindsey/docker-jekyll
    volumes:
      - ~/Dropbox/me/career/website-and-blog/bobbywlindsey:/root/bobbywlindsey
    ports:
      - 4000:4000
      - 35729:35729

有了这个文件,您的运行命令就变成了:

docker-compose run --service-ports site

但是 Docker Compose 比仅仅用它来代替运行命令要强大得多。您的 docker-compose 文件可以配置多个映像,并且通过使用一个命令,您可以一次创建并启动所有服务。例如,假设您构建了一个 Docker 映像来预处理数据,另一个用来建模数据,另一个用来将模型部署为 API。您可以使用 docker-compose 来管理每个映像的配置,并使用一个命令来运行它们。

结论

即使 Docker 可能需要一些数据科学家的学习曲线,我相信这是非常值得的努力,并且不会伤害到这些 DevOps 技能。您在数据科学工作中使用过 Docker 吗?

如果你喜欢我在这里写的东西,一定要看看我的个人博客,我在那里有一些在媒体上看不到的文章。

原载于 2018 年 7 月 16 日bobbywlindsey.com*。*

轻松获得数据科学的 Docker

原文:https://towardsdatascience.com/docker-without-the-hassle-b98447caedd8?source=collection_archive---------12-----------------------

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

(Source)

如何使用 repo2docker 自动构建 docker 映像

如果您没有使用 docker 进行数据科学,那么您可能应该使用。Docker 最好被认为是一个运行映像——环境——的轻型虚拟机,其中包含项目的所有库、数据和代码。Docker 对于可再生的数据科学来说是非常棒的,因为它使得共享代码更加容易:不用发送代码和需求,你可以制作一个 Docker 映像,当其他人运行你的映像时,你的项目就可以在他们的机器上工作。这解决了每当人们试图共享代码时不可避免地出现的“依赖地狱”问题:“它在我的机器上工作”现在是一个过去的短语,感谢 Docker。

即使拥有 Docker 的明显优势,许多数据科学家仍然没有接受这项技术。制作 Docker 映像需要编写一个 [Dockerfile](https://docs.docker.com/engine/reference/builder/)with the命令来构建映像。虽然这并不困难,但是仅仅 [pip freeze > requirements.txt](https://pip.pypa.io/en/stable/reference/pip_freeze/)一个 Python 环境并使用它要容易得多(不是最佳实践,但总比没有好)。幸运的是,多亏了 Jupyter 项目[repo2docker](https://repo2docker.readthedocs.io/en/latest/)工具,从 GitHub 库创建 Docker 映像的过程现在只需要一行代码。

使用方法:极短版本

  1. 安装对接器
  2. 安装 repo2docker : pip install jupyter-repo2docker
  3. 运行repo2docker repo-link并在几分钟内获得图像:
repo2docker [https://github.com/WillKoehrsen/feature-selector](https://github.com/WillKoehrsen/feature-selector)

如果这对你来说足够了,那就去开始吧!否则,请继续阅读更多细节。

Repo2Docker 基础知识

Repo2Docker 的工作方式是检查 GitHub 库中的任意数量的配置文件,例如 Python 库的[requirements.txt](https://repo2docker.readthedocs.io/en/latest/config_files.html#requirements-txt-install-a-python-environment)、Conda 的[environment.yml](https://repo2docker.readthedocs.io/en/latest/config_files.html#environment-yml-install-a-python-environment)或构建 Python 包的[setup.py](https://repo2docker.readthedocs.io/en/latest/config_files.html#setup-py-install-python-packages)。然后,它将这些内容翻译成 Dockerfile 文件并构建图像。最后,它运行映像并启动一个 Jupyter 服务器,在那里您可以访问 Jupyter 笔记本(甚至 RStudio)。所有这些都在一个命令中完成!

有关 repo2docker 的更多信息,请查看: Intro postdocumentation 或 GitHub repository (随时欢迎投稿)。(repo2docker 也是 [binder](https://mybinder.org/)背后的技术,Jupyter 的另一个项目值得一试。)

如何使用:稍微友好的版本

  1. 首先安装 docker。您的机器的说明可以在这里找到docker 入门指南对于学习 docker 如何工作是有用的,尽管我们不需要细节来有效地使用它
  2. 确保 docker 正在运行。如果docker run hello-world显示信息Hello from Docker!,那么你就可以开始了。
  3. pip install jupyter-repo2docker安装repo2docker。通过键入repo2docker -h调出帮助选项,确认它可以工作。
  4. 找到一个至少有一个requirements.txt文件的 GitHub 库。例如,我正在为[feature-selector](https://github.com/WillKoehrsen/feature-selector)使用 repo,这是我为机器学习特征选择制作的一个工具,它有一个setup.py文件。
  5. 运行 magic line repo2docker repo-link,它会自动创建一个新的 docker 映像,安装所有需要的依赖项,最后在环境中启动一个 jupyter 服务。这可能需要 5-10 分钟,但请记住,这可以节省您的工作时间和挫败感。
  6. 命令完成后,复制 url 并导航到 docker 容器中运行的 Jupyter 记事本。

命令和最终输出将如下所示:

repo2docker [https://github.com/WillKoehrsen/feature-selector](https://github.com/WillKoehrsen/feature-selector)... Lots of steps ...
... while your Docker image ...
... is built and run ...Final output:Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        [http://127.0.0.1:65375/?token=](http://127.0.0.1:65375/?token=c23a4e26bb5a8cfd7c818eb2747198f207bead7512b71eb1)randomstringofcharacters

运行笔记本,惊叹使用 docker 和repo2docker是多么容易

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

Notebook running in a docker container

重要注意事项

docker 容器运行后,打开一个新的 shell 并键入[docker ps](https://docs.docker.com/engine/reference/commandline/ps/)来查看容器进程。获取CONTAINER_ID然后运行docker exec -it CONTAINER_ID /bin/bash在运行容器中打开一个交互外壳 。在 shell 中,您可以在命令行上做任何事情,比如列出文件、运行 python 脚本或监控进程。

当您完成会话后,您可以使用 ctrl + c 或[docker stop](https://docs.docker.com/engine/reference/commandline/stop/) CONTAINER ID关闭 Jupyter 服务器和容器。好消息是,当我们想要重启容器时,我们不必再次重新运行repo2docker repo-link。整个环境被保存为我们机器上的 docker 图像,我们可以用docker image list看到。

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

Output of docker image list

要再次启动该容器,选择IMAGE ID并运行命令:

docker run -p 12345:8888 IMAGE ID jupyter notebook --ip 0.0.0.0 

这将启动容器,将容器的端口 8888 发布到主机端口 12345,并运行可在 127.0.0.1:12345 访问的 jupyter 笔记本。您可以再次在浏览器中访问 Jupyter 笔记本,所有要求都已准备就绪。(感谢 t 他在 GitHub 上的问题提供了这个解决方案。此外,更多选项请参见 docker 上的文档

repo2docker正在持续工作,如果 GitHub 库中的配置文件没有改变,有主动拉取请求自动使用预建镜像。上述命令始终有效,也可用于不是通过repo2docker创建的图像。一旦你从repo2docker学会了基础知识,试着阅读一些 Docker 指南,看看如何有效地利用 Docker。

结论

正如在 Keras 中构建神经网络时不必担心反向传播的细节一样,您也不必掌握复杂的命令来实践可再现的数据科学。幸运的是,数据科学的工具继续变得更好,使得采用最佳实践更容易,并有望鼓励更多不同的人进入该领域。

Repo2docker 是这些技术中的一种,它将使你作为一名数据科学家更加高效。当然,你可以是那个满腹牢骚的老人:“我花了那么多时间学习 docker,而现在这些年轻人甚至不会写 docker 文件”,或者你可以走大路,庆祝不断增加的抽象层。这些层将您从繁琐的细节中分离出来,使您能够专注于数据科学的最佳部分:通过数据做出更好的决策。

一如既往,我欢迎反馈和建设性的批评。可以通过推特 @koehrsen_will 联系到我。

停泊气流

原文:https://towardsdatascience.com/dockerizing-airflow-58a8888bd72d?source=collection_archive---------5-----------------------

面向本地工作负载的 Docker 上的 Apache 气流

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

Photo by Koushik Chowdavarapu on Unsplash

Airflow 是大多数数据工程师工具箱中事实上的 ETL 编排工具。它为强大的后端提供了一个直观的 web 界面,以便为您的 ETL 工作流安排和管理依赖关系。

在我的日常工作流程中,我用它来维护和管理建立在 AWS S3 之上的数据湖。我的 Airflow DAGs 中的节点包括多节点 EMR Apache SparkFargate 集群,这些集群从数据湖中聚合、删减并产生副数据。

由于这些工作流是在分布式集群(20 多个节点)上执行的,并且具有很强的依赖性(一个 ETL 的输出作为输入提供给下一个 ETL),所以使用气流来编排它们是有意义的。然而,它没有意义,有一个中央气流部署,因为我将是唯一一个使用它。

因此,我选择对接气流,这样我就可以旋转容器,轻松运行这些工作流,而不必担心气流部署。

在这篇文章中,我将回顾一下我是如何做到这一点的,并简单解释一下设计过程中的一些决定。

气流部件

在气流 ETL 中,工作流被定义为有向非循环图 ( 气流 DAG ),其中每个节点都是独立的 ETL,每个下游节点都依赖于上游节点的成功完成。

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

Simple Airflow DAG

气流有三个展开组件:

  • web 服务器( Flask 后端用于触发和监控 Dag)
  • 调度程序(调度和运行 DAG 执行程序的守护进程)
  • 数据库(DAG 和 DAG 实例定义的前置层)

气流快速启动

用气流启动快速简单;

# airflow needs a home, ~/airflow is the default,
# but you can lay foundation somewhere else if you prefer
# (optional)
export AIRFLOW_HOME=~/airflow# install from pypi using pip
pip install apache-airflow# initialize the database
airflow initdb# start the web server, default port is 8080
airflow webserver -p 8080

在运行这些命令时,Airflow 将创建一个$AIRFLOW_HOME文件夹,并放置一个airflow.cfg文件,其默认设置可以让您快速运行。您可以在$AIRFLOW_HOME/airflow.cfg中或者通过Admin->Configuration菜单中的 UI 来检查文件。网络服务器的 PID 文件将存储在$AIRFLOW_HOME/airflow-webserver.pid中,如果由 systemd 启动,则存储在/run/airflow/webserver.pid中。

开箱即用,Airflow 使用一个 sqlite 数据库,您应该很快就能适应,因为使用这个数据库后端不可能实现并行化。它与只顺序运行任务实例的SequentialExecutor协同工作。虽然这非常有限,但它允许您快速启动并运行,浏览 UI 和命令行实用程序。

下面是几个将触发几个任务实例的命令。当您运行下面的命令时,您应该能够在example1 DAG 中看到作业的状态变化。

# run your first task instance
airflow run example_bash_operator runme_0 2018-01-01
# run a backfill over 2 days
airflow backfill example_bash_operator -s 2018-01-01 -e 2018-01-02

停泊气流

一个容器的主要运行过程是ENTRYPOINT和/或Dockerfile末端的CMD。通常建议您通过对每个容器使用一个服务来分隔关注的区域。

然而,由于我们想让Airflow Webserver &和Airflow Scheduler进程都运行,我们将使用supervisord 作为进程管理器。

这是一种中等重量级的方法,要求您将supervisord及其配置打包到 docker 映像中(或者基于包含supervisord的映像),以及它管理的不同应用程序。

然后你启动supervisord,它为你管理你的进程。首先我们需要定义supervisord.conf:

[supervisord]                       
nodaemon=true[program:scheduler]                       
command=airflow scheduler                       stdout_logfile=/var/log/supervisor/%(program_name)s.log                       stderr_logfile=/var/log/supervisor/%(program_name)s.log                       autorestart=true[program:server]                       
command=airflow webserver -p 8080                       stdout_logfile=/var/log/supervisor/%(program_name)s.log                       stderr_logfile=/var/log/supervisor/%(program_name)s.log                       autorestart=true

然后我们将使用supervisord作为 docker 文件的ENTRYPOINT:

FROM python:3.6.3# supervisord setup                       
RUN apt-get update && apt-get install -y supervisor                       COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf# Airflow setup                       
ENV AIRFLOW_HOME=/app/airflowRUN pip install apache-airflow                       
COPY /dags/response_rate_etl.py $AIRFLOW_HOME/dags/RUN airflow initdbEXPOSE 8080CMD ["/usr/bin/supervisord"]

构建 Docker 映像:

docker build . -t airflow

运行容器:

docker run -d -p 8080:8080 --rm \
   --name airflow_container \
   airflow

启动 DAG:

docker exec airflow_container airflow trigger_dag example_bash_operator

监控 DAG 运行:

打开浏览器并导航至http://localhost:8080以监控 DAG 实例运行。

这就是所有人,请继续关注未来的帖子,在那里我将深入定义 AWS EMR dags,定义自定义气流操作符,注入 AWS 凭证等等!

文档特征提取和分类

原文:https://towardsdatascience.com/document-feature-extraction-and-classification-53f0e813d2d3?source=collection_archive---------0-----------------------

E 非常分类问题在自然语言处理 (NLP)中被大致归类为文档令牌级分类任务。这是关于如何用 python 实现这一切并理解其背后的理论背景和用例的两部分博客的第一部分。这篇博客的所有代码、数据和结果都可以在我的 GITHUB 个人资料中找到。这篇文章专门讨论文档分类,随后的部分将讨论标记级分类,也称为解析。

文档只不过是一组(不止一个)令牌。每一个有监督的机器学习算法都要求每一个文本文档都以向量的形式表示,以开始对这些文档进行训练,这是通过向量空间建模 (VSM)来完成的。

VSM 很大程度上可以通过两种独特且截然不同的技术来实现

  1. 使用 TF-IDF 的传统词汇方法(在本博客中)
  2. 像 doc2vec 这样的单词嵌入

在这个博客中,我使用了路透社新闻分类数据集,每个新闻文件都属于 8 个类别中的一个。我使用 tf-idf 和 doc2vec 进行特征提取,然后在 75:25 的训练:测试分割上使用逻辑回归和朴素贝叶斯分类器对这些向量进行分类

因此,工作流程是首先将所有文档转换为矢量。保留这些向量中的大部分用于训练,其余的用于测试,然后应用各自的监督分类技术。

使用 BOW :: TF-IDF 的特征提取

术语频率-逆文档频率使用数据集中的所有标记作为词汇。词汇中的标记在每个文档中的出现频率由术语频率组成,标记出现的文档数量决定了逆文档频率。这确保的是,如果一个标记在文档中频繁出现,该标记将具有高 TF,但是如果该标记在大多数文档中频繁出现,那么它将减少 IDF,因此像 an、the、i 这样频繁出现的停用词将受到惩罚,而包含文档本质的重要词将得到提升。特定文档的这些 TF 和 IDF 矩阵相乘并归一化以形成文档的 TF-IDF。

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

TF-IDF formulation

你必须浏览一下克里斯蒂安·佩罗尼的这个博客,在那里他用实现细节很好地解释了这个概念。

使用单词嵌入的特征提取::doc2vec

Doc2vec 是与 tf-idf 完全不同的算法,TF-IDF 使用 3 层浅深度神经网络来测量文档的上下文,并将相似的上下文短语关联在一起。

关于 doc2vec 需要注意的重要一点是,它不是像单词包那样的单片算法,它有两种不同的变体 SKIP GRAM 和 CBOW,它还可以与其他变体一起使用,如带或不带负采样和带或不带分层 softmax。

最后,doc2vec 应该在一个足够大和高质量的数据集上进行训练,以使模型生成合理的嵌入,这将导致良好的特征生成。

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

Doc2Vec Source

结果

整个练习的结果都符合预期。TF-IDF 逻辑回归优于 doc2vec 逻辑回归,因为 doc2 vec 的训练集不够丰富或大,不足以让模型学习实际的上下文关系来生成合理的嵌入。虽然 doc2vec LR 的表现比 TF-IDF 朴素贝叶斯要好。

值得一提的是,对于 tf-idf,实现了多项式朴素贝叶斯,对于 doc2vec 使用了高斯朴素贝叶斯,因为多项式朴素贝叶斯对于在 doc2vec 中生成的负值是失败的,并且在 tf-idf 的情况下特征肯定是非负的,因为出现频率不能是负的。

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

在下一篇博客中,我将尝试使用单词包技术进行令牌分类,并通过特征哈希来扩展它,实现 word2vec 嵌入。

请在 contact.ishaanarora@gmail.com 联系我,或者在这个 github repo 上开一个问题,讨论这个帖子中的任何事情,甚至是一般的生活:P 如果你已经到了这一步,你太棒了!

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

记录看不见的雅加达交通

原文:https://towardsdatascience.com/documenting-the-unseen-jakarta-traffic-7f4c64be4cca?source=collection_archive---------9-----------------------

量化政府政策结果的实验。

潘迪托·普拉塔马-毛拉娜·伊奇桑·吉图里

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

credit image: Maulana Ichsan Gituri

西安亚运会和亚残运会已经结束。与之配套的政策也是如此,单双号政策。在许多城市交通讨论中,经过长时间的辩论、批评和讨论,直到最近在印度尼西亚 ITDP的讨论,邀请了 Polda Metro Jaya 的交通总监、雅加达交通局局长、大雅加达交通管理局局长以及雅加达 PT Transportasi 的总裁,该政策成为社会的热门话题,也引发了一些问题,如:亚残运会后该政策是否会继续?如果是的话,这项政策是否会采用与以前相同的方案?政策真的让城市动起来更快了吗?

在我们跳进许多假设和偏见之前,让我们开始分析可以量化政策影响的数据。

首先,要量化政府政策的表现,我们不仅要从私家车方面看,也要从公共交通方面看。因为公共交通方面是政府可以直接采取行动的一方,而且由于其可承受的价格,它可以方便任何人。然后,我们必须着眼于最广泛的交通网络来代表雅加达道路上的所有公共交通。(通勤线路每天可能会有更多的乘客,但单双号政策只出现在基于道路的运输中。)

它实际上始于记录人们每天在交通中看到的东西的精神,而没有一个组织良好的数据文档。

看看雅加达最广的交通网络,Transjakarta。我们称这个系统为快速公交系统。简而言之,公交车有一条专用车道,使得它们快速。我们可以说,雅加达的任何人都知道,公共汽车可以与其他车辆分开行驶,因为他们有分离器,一旦你用自己的汽车/摩托车占用车道,你可能会被罚款,公众知道,不是所有的车道都有分离器。但是他们真的了解专用车道的改造吗?他们真的注意到网络的扩张了吗?我和毛拉娜以这种方式开始真正让这个雅加达的巨人有据可查。

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

Jakarta BRT Corridor “healthiness”, changes of the alignment of separation occur due to the many mega projects in several parts

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

Transjakarta’s Network Growth 2015–2018

从地图上可以看出,该网络已经快速发展了 4 年。目前,Transjakarta 不仅提供 BRT 服务,还提供支线服务,可以到达路权较小的道路。鉴于这一事实,外雅加达并不总是有无菌车道,主干道上的交通对外雅加达的表现有很大影响。

但我们如何量化单双号政策期间公共交通的表现呢?

由于谷歌地图 API 只提供私人车辆的交通流量,我们不能用它来评估公共交通的表现。幸运的是,每辆雅加达的公交车都有一个 GNSS 接收器(或者人们通常称之为 GPS,但 GPS 是美国版的 GNSS,实际上接收器捕捉到的信号可能来自伽利略,欧洲 GNSS,或 Glonass,俄罗斯 GNSS,甚至北斗,中国 GNSS,谢谢我后面的琐事:p)

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

GNSS raw data from Transjakarta bus

我们决定从四月和八月的几天收集数据。为什么是四月和八月?我们发现,4 月份是雅加达没有单双号政策干预的情况,4 月份我们找不到任何独特的交通季节性行为,因为没有斋月和伊斯兰长假,8 月份是该政策在 7 月份试行一个月后有效应用的地方。

这些数据是海量的数据,每天包含数百万条记录。所以电子表格不是处理我们所有数据的好主意。然后,我们使用 R 来过滤、规范化和生成我们需要的信息。过滤是必要的,因为对于这项研究,我们决定只包括在走廊的高峰时间和公共汽车的数据。所以我们清理了所有不属于这个类别的数据。不幸的是,在我们第一次尝试在地图上绘制数据时,数据移动了几米,因此我们需要先将它们标准化,这样它们才能回到正轨。最后,我们计算了四月和八月每个走廊的速度,结果相当令人惊讶。

如果你不熟悉雅加达,这是显示交通状况的地图,以及该政策实际适用的地方。

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

Map of Jakarta with odd-even policy segment highlighted

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

每一个有奇偶直接影响的走廊,速度都显著提高。

你可能想知道,单双号政策对分隔车道有什么影响?

答案是,并非所有的雅加达走廊都与其他交通分开。他们中的一些是混合交通,他们中的一些有几个路口和红绿灯,他们中的一些成为警察自由裁量权政策的受害者。所以没错,单双号政策对雅加达走廊有相当大的影响。

如果您想知道速度提升后是什么样子,这里我们将为您提供两个奇偶政策效果的空间可视化示例。

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

Tendean Intersection, before and after odd-even policy

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

Metro Pondok Indah, before and after odd-even policy

好吧,这些算好消息吗?事实上,他们是,任何大都市地区的公共交通的愿景之一是缩短旅行时间,增加市民的流动性,上面所有的地图都反映了这些愿景。

发现未知,下一步是什么?

是的,我们确实研究了这项政策对公共交通方面的影响,我们实际上担心其他部门可能会把这项政策视为一场噩梦。

零售?商业?财产?我们相信这不是一个零和游戏,所有受影响的人可能会经历一个大的冲击,因为这仍然是新的,但如果在这一点上的一致性和承诺,我们相信我们可以适应并形成一个更好的新常态。

但我们能否先欣赏一下政府为实现这一目标所表现出的勇气?现在这项政策即将结束,在此之后,单双号政策仍然适用,但不是一天一夜,从明天开始直到年底,这项政策只适用于早晚高峰,但感谢上帝,他们没有消除任何路段,仍然一样。

在这里,我们只是试图量化一项政策如何影响许多人生活的普通公民。决定一个城市的进步需要政治支持,有时,这些进步不是通过演讲,而是通过签署一揽子政策文件来实现的。

安德鲁·威金斯有努力的问题吗?

原文:https://towardsdatascience.com/does-andrew-wiggins-have-an-effort-problem-a6a13c0337bb?source=collection_archive---------15-----------------------

对于不关注 NBA 的人来说,下面是吉米·巴特勒/森林狼队迄今为止的恶作剧:

  1. 吉米·巴特勒是森林狼队的一名超级勤奋的球员(联盟排名前 10 -15)。
  2. 吉米·巴特勒与卡尔安东尼唐斯(凯特)和安德鲁·威金斯有问题,他们是他的两名队友,刚刚签署了巨额合同。
  3. 具体来说,吉米·巴特勒认为凯特是“软”的,尽管他是队里最有天赋的人,而威金斯没有职业道德,尽管他是队里最有天赋的人。
  4. 吉米·巴特勒想离开森林狼。
  5. 显然,吉米·巴特勒晚了一个小时才出现练习,并和一群板凳球员一起击败了首发(包括凯特和维金斯)。这是我经历过的最混蛋也是最不可思议的事情。
  6. 两小时后,他立即接受了 ESPN 的采访,基本上在在线篮球社区引发了一场迷因风暴和疯狂的过度反应。

那么,巴特勒的抱怨有多少道理呢?嗯,很难量化一个球员有多“软”,但我记得在 Reddit 上读到过一个评论,说维金斯只试着对抗一支球队——那支交易走他的球队,克利夫兰骑士队。

提示美国汪达尔画外音。那可能是真的吗?安德鲁·威金斯真的会吝惜一个赛季的两场比赛,而在接下来的 80 年里无所事事吗?如果威金斯努力的话,他真的能成为超级巨星吗?

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

Is this the face of a man who could take over the league?

安德鲁·威金斯是职业生涯场均 19.7 分 (ppg)球员,拥有 51%的真实投篮命中率 (TS,基本衡量你投篮的好坏)。19.7 分一点也不差——去年 NBA 只有 20 个左右的球员场均得分高于这个数字。两个问题是,威金斯已经有一段时间没有明显好转了,而 51% TS 真的很糟糕

如果你有 51%的 TS,这意味着你每投一球就能得到 1.02 分。这将使你处于去年 NBA 最差球队的第 26 和第 27 名之间。这对一名球员和一支球队来说都不是好事。以下是维金斯去年与去年联盟前 100 名得分手的对比。你可以清楚地看到联盟中没有人比威金斯投篮更差,而且经常如此。

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

Wiggins with some other players for context

关于效率的一件重要事情:经验法则是,对于大多数球员来说,投篮次数(FGA,或投篮次数)和效率是成反比的。你拍的照片越多,质量就越差,对吗?你已经投出了那些你认为‘好’的球,现在为了投出更多的球,你必须投出那些你可能不会投的低命中率的球。

这就是有趣的地方。看看这张图表。每个点代表维金斯在不同球队 4 年常规赛中的平均数据。

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

Outlier time baby!

你看到右上角的那个点了吗?看起来不像是同一个数据集的一部分?

现在我明白这个理论的来源了。

场均 19 FGA 的 65%的命中率是 MVP 的统计线,维金斯保持了 8 场比赛。现在,有可能骑士只是防守太差了。根据霍林格统计,骑士队在过去的 4 年里排名第 20、10、22 和 29。这…很糟糕,但是我不认为这能让一个低于平均水平的球员成为 MVP。

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

Two things that are normally very uncorrelated

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

While not the perfect measurements of a player’s impact, these PPG and Game Scores do look kind of funky

看看这些快速和肮脏的衡量球员进攻成功的标准,克利夫兰每次都在中位数及其周围四分之一的范围之外。

在维金斯投篮次数最多的球队中,投篮次数多和投篮命中率低之间有很强的相关性。三个明显的例外——克利夫兰、多伦多和萨克拉门托。

萨克拉门托我想排除,因为他们的防守一直介于历史上糟糕和可怕的威金斯在联盟的整个时间(平均约第四最差的球队在过去 4 年)。我可以看到维金斯只是采取了许多简单的投篮对他们。

Reddit 上的另一个随机事件(/u/afraidobricks)谢谢!)指出,维金斯在对阵家乡球队(多伦多)的比赛中得分不错,这看起来有点古怪。一支防守排名第 23、第 11、第 10 和第 5 的球队在 57%的防守得分上被挑到 18.3 的 FGA,这看起来确实很奇怪(这只是的全明星/边缘巨星水平),但这似乎是那种你从结论开始并开始寻找支持它的东西的事情,所以我要把这个想法扔在那里,小心翼翼地不再提它。

为了寻找更多精选的数据来支持我的结论(我发誓这是一个笑话),我看了维金斯在骑士队 vs 所有比赛中的投篮得分表。这些图表/数据由 NBASavant 提供。

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

Cavaliers Only

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

All teams

不仅仅是投篮命中率(我们已经知道这些在骑士队的比赛中会是非常高的),我还想看看他投篮的类型。有趣的是,他从弧后变成了加拿大库里,并在对骑士的比赛中从禁区内投篮命中沙克的百分比?是的,但是这可能是不可持续的。

如果你想知道的话,这部分是一个几乎不加掩饰的借口,让我模仿一些皱巴巴的纸跳线一直在做的工作,并将其与我的老板正在制作的图表合并。

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

If you don’t think graph nerdery is cool, idfwu

好吧,这张图表到底向我们展示了什么?嗯,骑士队的比赛和常规比赛在投篮选择上的区别是,维金斯在整个球场上的 3 分要少得多,2 分要多得多。根据 teamrankings.com 的说法,骑士队是一支相当普通的球队,在 3 3/4 年的时间里卫冕冠军,所以我怀疑这是维金斯为了球队的弱点而调整他的比赛风格。这看起来像是维金斯有能力在他想要的时候打不同的比赛。

就像《美国破坏者》在第一季中强烈暗示了罪魁祸首,但最终没有做出彻底的谴责,我将避免对安德鲁·威金斯做出任何明确的声明(我也看他一年打 5 场比赛?这些都不是对骑士的比赛。).然而,我要说,这看起来相当糟糕。

我也将尝试提前解决统计/篮球争论启示录的四骑士,有人会在评论中提出。

  1. 样本量小!!!111!!111;兄弟,这是 328 场常规赛中的 8 场。我明白了。但是,如果你想提出这样的论点,并且我曾经听到你谈论一个 7 场季后赛系列赛定义一个球员的职业生涯,我会通过屏幕打你。
  2. 伪相关!!11!!!11!!;谁知道呢,也许这些克利夫兰的比赛恰好与水星在逆转的卡戎后面逆行相吻合,这给了威金斯超能力。但我用我的陷阱卡“奥卡姆剃刀”来反驳,它迫使你坐在那里问自己,你是否把这种程度的相关性严谨应用到你生活中的其他事情上。这并不是说我会四处乱切数据直到我得到好的结果——我实际上只是问维金斯在与骑士的比赛中得分如何。
  3. 眼睛测试!!11!!去看比赛吧,你这个书呆子!!11!!;不,我很好,让我安静地乱猜吧。我甚至不认为森林狼的其他球员会在外面看着维金斯。见鬼,我怀疑其他球队的球员在看他,所以不要告诉我你看过他的每一场比赛,是威金斯投篮的权威,除非你能说出他的 3 张专辑。不过,严肃地说,领域知识+统计数据通常会带来有趣的突破,但忽视统计相关性会导致你的工作被人工智能取代。我同意我可能应该在发帖前多看一些他的比赛,但是…我可以在工作中这样做,我不能看森林狼比赛崩溃,所以…
  4. 统计意义!!11!!p 测!!T-TEST!!11!!;请不要拿你半辈子都没想过的高中 AP 统计知识来冲我。检测和理解异常值是它自己的统计学领域,坦白说这不是我的专长,但我也不认为这是你的。如果你真的想谈论统计和方法以及不同的测试,我真的洗耳恭听。

不管怎样,谢谢你读到这里。我的数据集和 Tableau 工作表被收集在这里如果你足够关心来试着证明我是错的。否则,我希望你们像我一样对篮球赛季的开始感到兴奋。#信任流程

乡村音乐比其他流派喝的多吗?调查 5 年的歌词来找出答案

原文:https://towardsdatascience.com/does-country-music-drink-more-than-other-genres-a21db901940b?source=collection_archive---------13-----------------------

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

From Adam Wilson on Unsplash

感谢 Spotify 的热门乡村乡村之夜播放列表,我最近进入了一个听乡村音乐的不寻常阶段。摇滚通常更适合我,所以这对我来说是第一次。在我立即意识到乡村是多么吸引人之后,真正让我震惊的是似乎有 那么 很多地方提到酒精和饮酒!

从下面克里斯·斯台普顿的诗句中汲取灵感。你认为他知道不含酒精的东西也可以用于比较吗?

你像田纳西威士忌一样柔滑,你像草莓酒一样甜美,你像一杯白兰地一样温暖

田纳西威士忌——克里斯·斯台普顿

或者奥斯本兄弟的这些台词。真的不是他们的错吗?

把威士忌归咎于啤酒把啤酒归咎于威士忌把早晨归咎于夜晚

这不是我的错——奥斯本兄弟

当我想到乡村音乐时,啤酒和威士忌是我脑海中的一部分,但并不比摇滚或说唱/嘻哈音乐更多。我想知道我听到更多关于酒的提及,是因为我刚到这个国家,还是不同流派之间的提及真的有可测量的差异。

我想我需要做的就是找出答案。

  • 从 Billboard 网站获得不同音乐流派的流行歌曲列表,该网站有摇滚、流行、乡村等流派的具体图表。
  • 获取他们的歌词
  • 获取酒精和饮酒相关词汇的列表
  • 数一数有多少首歌提到了这些词

这个过程可能比这四个简短的要点所表明的时间要长一点,但是下面是这个过程、分析和发现的一个步骤,希望你能喜欢!

数据收集和清理

刮了五年的图表

第一步是为每个流派创建一个歌曲数据集。我决定使用 Billboard 网站上的年终排行榜,因为它们通常有 100 个条目,所以会提供大量数据,我可以肯定它们代表了人们在这些流派中真正听的东西。这些是美国的图表,但是,由于美国往往会引领世界潮流(不管我们喜欢与否),并且拥有最大的乡村音乐听众,我觉得它们是这个项目的最佳数据源。

Billboard 网站上有摇滚乡村流行R & B/Hip-Hop舞蹈/电音基督教的排行榜,我也决定把非流派特定的整体 Hot 100 排行榜收录进来,以供参考。我没有包括拉丁或国际图表,因为非英语歌曲会影响后来的分析结果。

上面的链接是 2017 年年终图表,但它们都至少可以追溯到 2013 年。我决定收集过去五年的数据,这样我就可以研究一段时间内的趋势。

我主要使用每个流派的“热门”排行榜,除了流行音乐没有“热门”排行榜。热门排行榜包括广播剧、实体销售和信息流,而流行排行榜只在广播剧中出现。但在所有情况下,它们都应该很好地代表人们在每一个流派中听到的和正在听的内容。

有些歌曲可能会出现在多个图表或年份中。我不会删除任何重复的内容,因为我不想改变任何图表的内容。

我使用 Python Beautiful Soup library 来帮助从每个网页的 html 中提取每个图表条目的歌曲和艺术家姓名。这和你在 Chrome 的网页上按 Ctrl+Shift+i 看到的 html 是一样的。

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

Example of song information in html from Billboard’s website

我在这样做的时候发现了一些问题,比如 2015 年 R & B/Hip-Hop 图表只有 25 个条目,而其他年份通常有 100 个。或者说 2016 热 100 因为#87 缺失只有 99 个条目。不知道这些问题背后的原因,但我确实考虑到,当我稍后进行分析时,图表长度可能会有所不同。

获取 2840 首歌曲的歌词

图表抓取找到了 3019 个图表条目,我使用 Genius.com 的 API 得到了其中 2840 个的歌词。你只需要注册就可以免费使用。在我的代码中,我使用了lyricsgiusPython 包,使得 Genius.com 的 API 非常容易使用。

在这个阶段,我遇到的问题是如何将 Genius 使用的歌曲和艺术家名字与 Billboard 匹配。例如,当一首歌由多位艺术家创作时,就会出现很多问题。Billboard 有很多组合艺人名字的方法,比如“特色”,“x”(比如 Kygo x Selena Gomez),“With”等等。但是天才更挑剔,所以我不得不尝试不同的组合。

最终,尝试发现这些问题所花费的时间不再值得。2,840 是总条目的 94%,因此我决定继续前进。下面是每张图中找到的带有歌词的歌曲数量。

摇滚:483
乡村:490
舞蹈/电子:442
流行:240
火爆 100:476
R&B/嘻哈:379
基督教:322

发现不同数量的事实不会影响后面的结果,因为分析比较的是百分比。

歌词清理

为了避免一个单词的多种时态、复数或变体导致遗漏或错误计数,我使用了 leammatisation 将单词分组到它们的词根形式。例如,动词“walked”、“walks”和“walking”都可以归为“walk”。

要做到这一点,所有的单词都需要标注词性。这些标签可以是动词、形容词、副词或名词/其他。通常情况下,你会将句子传递到词性标注器中,但在这种情况下,由于歌曲中缺少标点符号,我将歌词分成几行并传递它们。

对于这两个任务,我使用了 Python NLTK 库,它非常成功。多达 6 个单词被组合成一个共同的源单词。例如,“去”、“去”、“去了”、“去了”、“去了"和"去了"都被组合成"去”。

分析

创建饮酒和酒精词汇列表

我寻找一个预先存在的与酒精相关的关键词列表,但不幸的是没有找到任何关键词。我发现的一些研究使用了关键词列表,但没有分享它们。所以我用高度科学的方法想出了我能想到的所有关键词,并用谷歌搜索同义词试图找到更多。

我把“喝”和“射”从这个列表中排除了,因为它们对饮酒不够具体。我第一次尝试使用它们,但是它们导致了一些高错误率。这对基督教歌曲尤其不利,因为这两个词,11 首歌曲中有 8 首被识别为假阳性。

我得出的最终名单是:

醉*,喝*,酒精,酒精,宿醉,宿醉,白酒,鸡尾酒,豪饮,烈酒,瓶子,啤酒,苹果酒,麦芽酒,龙舌兰酒,伏特加,葡萄酒,杜松子酒,威士忌,苏格兰威士忌,朗姆酒,波旁酒,香槟,莫吉托,马提尼,代基里,雅格,雅格啤酒,百威啤酒,米勒,库尔斯,喜力,百加得,斯米尔诺夫,酩悦,轩尼诗,酒吧,品脱,消防水,霍奇,月光,烈酒,swig,烈酒

“喝醉了”和“喝了”不会计算过去时态动词“喝了”的出现次数,因为那些“喝醉了”和“喝了”会被解释为“喝了”。不过它们也可以用于其他用途,比如在“我醉了”中作为形容词,或者在“我可以带酒来”中作为名词。

测量饮酒和酒精提及

我使用的衡量标准是至少一次提到饮酒或酒精相关词汇的歌曲的百分比。

闲话少说,Billboard 排行榜中提及饮酒的歌曲比例如下:

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

**哇!**乡村音乐歌曲似乎更经常提到酒精。在我看来,40%的歌曲以某种方式提及酒精确实很高,所以我手动检查了 2017 年的乡村歌曲,发现只有一个误报(由罗素·迪克森的《你的瓶子》中的“瓶子”引起),我觉得这是一个可以接受的错误率。如果您记住年终图表用于此分析,那么高的结果更有意义。因此,这并不一定意味着所有乡村音乐歌曲中有 40%提到了饮酒,只是说过去五年中有 40%的热门歌曲提到了饮酒。

差异显著时的假设检验

是时候回答我最初的问题了:是不是更多的乡村音乐歌曲比其他类型的歌曲更多地提到了酒精和饮酒。

如下图所示,乡村音乐和其他音乐类型之间有明显的差异。然而,如果你测量两个不同的组,你会期望结果仅仅因为随机变化而有一点点不同。我想确认差异大到足以具有统计学意义,这是不太可能由随机变异引起的另一种说法。

我放弃了这个测试的热门 100 和基督教排行榜结果,因为热门 100 不是特定的流派,基督教排行榜是一个离群值,它很少提到酒精,至少对我来说,不是一个主流流派。

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

由于数据是分类数据,我将使用卡方检验来检验统计显著性。这是分类数据,因为歌曲要么提到要么没有提到酒精,没有中间值。巧合的是,这也是我在上一篇文章中使用的测试,用来衡量惩罚中的损失厌恶。

该测试输出一个称为“p 值”的置信度指标,如果它低于我选择的显著性水平,那么可以说测量值不同,测量的差异不是由随机变化引起的。我选择 0.05 的显著性水平,这意味着只有 5%的可能性结论是错误的。无效假设是乡村音乐中提及酒精的歌曲数量与其他流派没有区别。

结果是:

p 值= 2.71698301e-34

结论:差异显著

e-34 表示在 271…偶数开始之前,小数点后有 33 个零。对于 p 值来说,这是一个很小的结果,远远低于 0.05 的要求!无效假设可以被拒绝可以得出结论,乡村音乐歌曲比其他类型的歌曲更有可能提到酒精

按年份来看提及酒精的歌曲的百分比进一步说明了这种差异,因为可以看出乡村音乐每年都领先。

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

有趣的事实

喝酒有哪些不同的流派?

苏格兰威士忌和波旁威士忌等提及率很低的饮料类型被排除在该图表之外。

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

这是 Psy 和 Snoop Dogg 的热门歌曲宿醉,不可思议的被提及了 154 次。几乎所有的提及都来自于在合唱中一遍又一遍重复的“宿醉”。

哪首乡村歌曲的饮酒关键词被提及次数最多?

这是一个三人平手的局面,德克斯·本特利的《醉在飞机上》、布雷特·艾尔缀奇的《醉在你的爱上》、克里斯·斯台普顿的《田纳西威士忌》各被提及 14 次。田纳西威士忌还成功登上了 2015 年、2016 年和 2017 年的排行榜。

酒精提及有趋势吗?

是的,酒精提及率在过去 5 年中上升了 5 个百分点。

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

在我的 Github 这里 上,图表和歌词的数据集可以作为 csv 文件,以及生成它们的 python 工作簿获得。柱状图是用 Tableau workbooks 制作的,可以在 这里 下载。

深度学习真的需要“大数据”吗?—不!

原文:https://towardsdatascience.com/does-deep-learning-really-require-big-data-no-13890b014ded?source=collection_archive---------4-----------------------

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

当我告诉人们应该考虑对他们的数据应用深度学习方法时,我得到的一个常见的初步反应是我(1)没有处理足够“大”的数据,以及(2)我没有足够的计算资源来训练深度学习模型。我相信这些假设来自大公司(如谷歌),它们经常喜欢通过对大型数据集进行研究来炫耀,如包含超过一百万张图片的 ImageNet ,并使用大量的 GPU。这对这些公司来说很好,但从我的印象中,一般的深度学习从业者不会处理这样大的数据集(或者甚至不需要),也没有机会访问这样大的计算资源。例如,作为一名研究生,我的资金几乎限制了我只能使用免费的资源,所以我使用谷歌云平台免费提供的(至少一年)K80 GPU 来进行我所有的深度学习。是的,我没有花一分钱进行深度学习,我只用了 1 个 GPU。

我写这篇文章是想告诉你,这些假设是不正确的。**深度学习不需要大量的数据和计算资源。**这些假设非常有害,因为它们限制了人们利用深度学习的数量,而我认为深度学习有可能改善世界。我举例说明了深度学习不需要“大数据”,方法是训练一个分类器来区分我最喜欢的两种鱼的图片——小丑鱼和蓝色少女(是的,我确实有一个只有这两种鱼的盐水水族馆)。我能够用训练数据集中仅有的 20 幅图像来训练一个准确率为 100%的分类器。我也借此机会举例说明我解决计算机视觉问题的常用方法。事实证明,这些方法中的一些并不一定要达到 100%的准确性,但它们通常对处理更大的数据集非常有帮助(我通常处理成千上万的图像)。代码和示例数据集可在我的 GitHub 上获得。

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

数据集&模型

该数据集由小丑鱼和蓝色少女的图片组成。在训练组中,每种鱼有 10 条。在验证集内有 11 条小丑鱼和 10 条蓝色少女。我通常在验证集中包含大约 20%的项目,但是这里我有 50%,因为这是一个很小的数据集。

我训练的型号是 Resnet-34 。我不会详细介绍这个模型(也许我会在以后的文章中介绍),但它是一个最先进的卷积神经网络。我们可以利用 Resent(以及许多其他卷积神经网络)已经在著名的 ImageNet 数据集上进行了训练。ImageNet 由来自 1000 个类别的 100 多万张图片组成的大型数据集。这些类别从动物到植物到无生命的物体。尽管在 ImageNet 上训练的模型被训练来区分这 1000 个类别,但事实证明,训练的层可推广到其他数据集。研究人员已经从 ImageNet 上训练的模型中可视化卷积过滤器(见下图),早期层的过滤器检测低级视觉特征,如边缘,直到后面的层,过滤器才拾取更特定于训练数据集的特征。这意味着,根据数据集的不同,预训练过滤器可能会应用于您正在使用的数据集。由于我们正在训练一个分类器来区分两种类型的鱼,并且 ImageNet 包含鱼,所以使用预训练模型可能非常容易。

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

Image source: https://arxiv.org/abs/1311.2901

训练模型

所以让我们开始训练模型吧!我们再次使用预训练模型。我们将弹出最后一层(区分 1000 个 ImageNet 类别)并添加一个新层,区分小丑鱼和蓝色少女。首先,我们将只训练最后一层。在我们开始训练之前,我们需要选择学习率,这在传统上被认为是很难选择的。解决这个问题的方法是使用循环学习。通过这种方法,学习速率是变化的,并且损失的变化被检查。我们从非常低的学习率开始,逐渐提高学习率。下图演示了这种方法。左图显示,随着迭代次数的增加,学习率也增加。右图是我们如何选择学习率,并显示了作为学习率函数的验证损失。通常,我们选择最高的学习率,此时损失仍在减少,但尚未达到稳定状态。由于这是一个如此小的数据集,我们应该选择什么样的学习速率并不完全明显,但是对于包含更多迭代的较大数据集,这通常更明显。在这里,我选择了 1e-2 的学习率。

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

我们现在准备开始训练!正如下面所看到的(参见运行的纪元的完整数目的代码),我们已经成功地训练了我们的分类器,具有 100%的准确性来区分小丑鱼和蓝色少女!不太难吧?

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

改进模型

在这里,我们实现了 100%的准确性,因此我们可能不需要进一步改进模型,但对于绝大多数数据集,要实现高准确性需要做更多的工作。这里有一些我在训练卷积神经网络时经常使用的技术。

数据扩充

改进计算机视觉模型的一种方法是通过数据扩充。数据增强在每个时期都会稍微改变我们的图像。在某种程度上,这就像在没有收集额外数据的情况下向训练集添加更多数据,这有时很困难,甚至是不可能的。这是一个非常强大的方法,根据我的经验,它几乎总能提高分类器的准确性。以下是数据扩充可能对图像进行更改的示例。

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

差异学习率

在前面的示例中,我们所做的只是训练最后一层,这对于本示例数据集来说很好,但一种强大的方法是训练所有层,但学习率不同。请记住,我们的预训练模型来自 ImageNet。如上所述,先前的工作已经确定来自早期层的滤波器检测低级视觉特征,例如边缘,并且随着我们越来越深入网络,滤波器开始拾取更高阶的视觉特征。因此,几乎总是可能出现这样的情况,即没有必要像训练更特定于训练数据集的后面的层那样训练更早的层。我们训练每一层的程度也取决于它与训练数据集的相似程度。在这个例子中,我们正在训练鱼的图片,这些图片也包含在 ImageNet 中,所以我们不打算对早期的图层进行太多的修改(或者甚至根本不修改!)作为后来的层。

重启的随机梯度下降

我的下一个技巧是使用重启随机梯度下降(SGDR)。SGDR 是学习率退火的一种变体,其中学习率随着训练的进行而逐渐降低。理论是,当我们接近最小值时,我们需要开始使用较小的学习速率,这样我们就不会错过最小值。问题是,我们可能会陷入一个不太有弹性、不能很好概括的最小值。所以我们能做的就是跳回到一个更高的学习率,再次开始降低学习率,并且尽你所能地重复这个过程。这背后的想法如下图所示。

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

Image source: https://arxiv.org/abs/1704.00109

我在示例 fish 数据集上使用了这种技术,如下图所示。该图显示了学习率随着迭代次数的增加而降低,但是随后学习率跳回(即重新开始)。

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

我们可以通过改变学习率下降的时间来做得更好,从而重新开始学习。随着训练的进行,我们的模型可能会到达一个更稳定的位置,更接近于最小值。因此,在训练的后期,我们可能不希望频繁地重新开始,所以我们可以加倍(或乘以任何你想要的数字)从最高到最低学习速率的周期。这可以在下图中看到。

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

结论

从这个分类问题的例子中可以看出,深度学习可以成为解决计算机视觉(以及其他)问题的一个非常强大的工具**,即使在小数据集的情况下也能很好地工作**。我希望这篇文章将激励目前不使用深度学习的机器学习从业者考虑将深度学习方法添加到他们的工具包中,即使他们无法访问大型计算资源。深度学习已经被证明能够解决以前很难解决的问题,因此,我相信它将继续彻底改变这个领域。同样,如果你有兴趣看代码和示例 fish 数据集,请查看我的 GitHub。

GDPR 威胁到数据科学的未来了吗?

原文:https://towardsdatascience.com/does-gdpr-threaten-the-future-of-data-science-ecf5b99a07a5?source=collection_archive---------4-----------------------

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

Rick Jo/Dot Magazine

如果大多数组织都知道 GDPR 的新欧洲立法,那么很少有人考虑过这个框架将如何改变数据科学的实践【I】

《一般数据保护条例》将规定商业使用个人数据的内容和方式。该立法将于 2018 年 5 月 25 日生效,适用于所有处理欧洲公民数据的公共和私人组织,无论其运营基础如何。违规罚款可达€2000 万英镑或该组织年营业额的 4%,以金额较大者为准。【ii】让我们来探讨一下为什么 GDPR 应该得到您的充分关注,这项立法是关于什么的,它将如何影响数据科学的实践,以及您可以做些什么来将这种“威胁”转化为机遇。

*数据不再是业务流程的简单副产品,而是现代经济的燃料。*如果说传统上收集数据是为了反映我们组织和市场的真实情况,那么今天,人们越来越多地利用数据来放大个人如何购买和消费产品和服务的微小细节。因此,组织使用信息技术创建平台来揭示、捕捉和分析消费者体验。由此产生的数据的价值与其说取决于它描述消费者、商品和服务之间关系的精确程度,不如说取决于它在构建预测和影响人类行为的场景中的用途。【iii】

这种对数据的不断追求深刻地影响了个人的隐私和保密性——个人做的、说的、甚至认为的任何事情都很难免受公众的审查。欧洲的《通用数据保护条例》在试图监管私人和敏感数据的商业使用时明确认识到了这些危险。私人数据定义为可用于识别欧洲消费者个人身份的任何信息,以及可用于识别个人身份的任何数据(个人可识别信息)。敏感数据包括对个人健康、宗教、种族背景、政治或性取向的描述,这些信息可能会被用来区分个人。最后,一个特殊的预览保护一般 16 岁以下的儿童-没有明确的父母同意,他们的个人资料不能被收集。

GDPR 推出欧洲公民数字权利法案。数据主体(公民)现在将有权知道正在收集哪些与他们有关的个人数据,收集的地点和目的。公民将有权要求组织删除他们的个人数据,和/或停止处理或进一步传播他们的数据。最后,公民可以恢复以“常用和机器可读格式提供给组织的个人数据,并可以将这些数据转移给第三方。

公司、小企业、国家政府和地方政府将被要求制定流程和内部记录保存要求,以确保符合这些新法规。这些组织,无论是数据收集者还是数据处理者,都需要在设计中实施隐私概念,这一概念基于数据保护应内置于其信息系统核心的原则。组织将被要求只收集对业务绝对必要的数据(数据最小化),并将对个人数据的访问仅限于那些需要处理数据的人。最后,所有公司都必须在 72 小时内通知客户任何可能危及“个人权利和自由”的违规通知。

在接下来的五个月里,为欧洲公民服务的企业需要制定一个行动计划,以满足 GDPR 合规性的最低要求。首先要指定一名项目负责人或数据保护官来监督数据保护战略和实施。他或她的项目团队需要识别和分析当前正在捕获、存储和处理的个人数据。他们需要了解不同的组织利益相关者如何在组织内部或通过第三方分包商处理数据。他们需要提出满足立法要求所需的措施和手段。最后,他们需要制定和实施必要的任务和流程,以确保合规性。

乍一看,GDPR 提出的数据隐私愿景似乎与数据科学家获取新数据源和开发新使用场景的基本职责截然相反。*具体而言,该立法将在三个方面影响数据科学的实践:*通过对数据处理和消费者档案进行限制,通过在组织使用自动决策来评估信贷申请、招聘和保险决策时赋予“解释权”,以及通过让组织对自动决策中的偏见和歧视负责。【iv】

尽管如此,从长远来看,数据科学的实践将从这些限制中受益。组织需要鼓励基于可靠数据匿名化的数据科学流程。数据科学家需要采取措施,防止来自代理变量、多重共线性和其他原因的间接偏差,以限制歧视性结果。最后,数据科学家在记录从源到目标的所有处理步骤中的数据流时,需要关注数据血统。【第五季】

有兴趣掌握设计和实施有效的 GRPR 合规框架的方法吗? 注册参加我们新的一日大师班,成为数据保护官。商业分析实践是商业分析学院的核心和灵魂。在我们位于巴约纳的暑期学校以及我们在欧洲的大师班中,我们对数字经济、数据驱动决策、机器学习和视觉通信的关注将使分析为您和您的组织服务。

Lee Schlenker 是 Pau 商学院的教授,也是 http://baieurope.com 商业分析研究所的负责人。他的 LinkedIn 资料可以在www.linkedin.com/in/leeschlenker.查看,你可以在https://twitter.com/DSign4Analytics的 Twitter 上关注我们

一份法文抄写本 ici


IDC 在 2017 年 5 月对 700 家欧洲公司进行的一项研究发现,25%的受访者不知道 GDPR,超过一半(52%)的人不确定其对组织的影响。在了解新法规的人中,20%的人还没有开始为新的要求做准备,只有 21%的人准备好了应对变化。http://bit.ly/2EfOGZa

【ii】【CNIL(2016)】,欧洲难民保护协议:职业改革

【三】施伦克尔,L. (2017)。关于数据,我们真正需要了解的是什么?,走向数据科学

【iv】丁斯莫尔,T. (2017)。GDPR 如何影响数据科学

【v】数据科学创新(2015)数据科学和欧盟隐私法规——一场风暴即将来临

医疗保健需要自己的操作系统吗?

原文:https://towardsdatascience.com/does-healthcare-need-its-own-os-82be52234716?source=collection_archive---------15-----------------------

对“全栈”数据驱动的医疗保健系统的需求

作者:Sirj Goswami,Ashok Krishnamurthi,Daanish Jamal

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

Photo by Zhen Hu on Unsplash

医疗保健行业将从处理大数据的最新技术进步中受益。然而,信息源存在于筒仓中,限制了我们解决医疗保健最复杂问题的能力。我们预计,这些数据壁垒的分解,加上机器学习和人工智能影响,将形成一个“医疗保健操作系统”的基础,在这个系统中,不同数据源的统一将推动应用程序缩小医疗保健成本和患者结果之间的差距。本文的范围将限于“医疗保健操作系统”的两个关键要素——打破数据壁垒并应用机器学习和人工智能,其他潜在的构建模块如安全和数据隐私没有涉及。

数据驱动的医疗保健影响医疗保健生态系统中的所有主要利益相关方,包括制药公司、保险公司、提供商和患者。作为一名患者,“医疗保健”是一切事物的一部分——从你吃的食物到你消费的药物,到你与之互动的供应商和保险公司。机器学习和大数据在这些垂直行业中的应用将实现“全栈”数据驱动的医疗保健系统。

数据驱动型医疗保健的促成因素

在深入研究数据驱动医疗保健的不同分支以及我们可以采取哪些不同的措施来加速采用之前,了解推动创建数据驱动医疗保健系统的技术、科学和政策的最新发展是有帮助的。以下是我们看到的一些例子:

大数据与富数据的结合。电子健康记录(EHR)的广泛采用从每个患者/提供者交互中收集的成千上万个数据点生成了庞大的数据集。除了标准的患者人口统计数据,EHR 还整合了一些关键信息,这些信息可以极大地提高模型和算法的预测准确性,如实验室值、用药历史和药物输送记录。

我们需要利用这些数据来提高患者护理的质量和效率,而不是将这些数据视为医疗服务的副产品。换句话说,让我们使用数据来预测和改进,而不是仅仅为了合规性的目的而存储它(使它不比他们替换的物理文件更好)。

结合诊断技术进步产生的独特数据源(“丰富数据”),来自 EHR 的大数据和来自诊断实验室的丰富生物标记数据最终将使我们能够提高诊断和治疗疾病的准确性。

新检测支持多维数据。测序成本的大幅下降使得收集基因数据变得更加经济实惠,实验也更加可行。此外,新的检测和分析允许研究人员将生物学观点(RNA 表达、表观遗传学、蛋白质组学)整合到更能代表我们生物学的预测模型中。

机器学习和云计算。通过利用云中几乎无限量的计算和数据存储,随着数据量和丰富度每年呈指数级增长,机器学习(以及其他定量方法)可以更容易地产生新的见解。

大数据和机器学习有着千丝万缕的联系。例如,向一个糟糕的机器学习模型投掷大量数据不会提高该模型的预测准确性。相反,没有足够数据的强大机器学习算法无法有效应用,几乎毫无用处。

被动数据生成。另一个因素是手机和智能手表等信息收集设备的普及。现在全球有 50 亿部手机在使用,其中近一半是智能手机,可以收集一系列实时医疗保健相关数据,这些数据涉及从身体活动、人口统计到睡眠模式的一切。移动设备还提供了与个人医疗保健消费者联系的最佳平台。

宏观层面推动基于价值的护理。新的基于价值的支付模式现在正基于成本、质量和结果进行激励。因为这些新的支付方式有可能颠覆医疗保健利益相关方的传统患者护理和业务模式,所以现在更加关注交付结果和展示护理价值,而不是根据所执行的测试和程序的数量从经济上激励提供者。

数据驱动的医疗保健类别

由于上面列出的发展,大数据和机器学习正在几个领域找到旧问题的新解决方案。当你阅读这份名单时,我们要求你记住采用新的 ML 技术的公司仍然需要克服传统的障碍。例如,在药物发现中,无论新分子是如何发现的(使用或不使用 ML),资产仍将不得不与相同的风险因素相抗衡。制药公司会购买这项资产吗?这种特定的资产与该类别中的其他尝试有何不同?这药有用吗?

更广泛地应用这一概念,理解技术如何影响生态系统中的每个参与者是很重要的。一个公司可能已经确定了一个痛点并开发了一个解决方案,但是他们定义了整个生态系统的反应吗?支付者、提供者和患者采用的激励措施是否一致?

药物发现。该分支将机器学习与基因组学、代谢组学和蛋白质组学相结合,通过识别将在药物开发早期成功的分子来加速药物发现的过程。抽象的层次有很多。联系药物的物理化学性质(如亲脂性、氢原子数量等。)到基因表达、疾病途径、代谢物和蛋白质标记,到细胞形态,甚至下游药物相关的不良事件。这一领域的前景对于药物开发来说是引人注目的。机器学习技术不仅为我们提供了预测最佳化合物的方法,而且我们还获得了对潜在疾病和药理学途径的更深入的生物学理解。

诊断。这个空间将机器学习与疾病标记和/或成像数据相结合,以检测疾病的发作。一些公司和研究小组致力于增强医疗从业者快速识别 CT 扫描或 MRI 图像上的感兴趣区域的能力,例如增强放射科医师快速识别乳房 x 光照片上的感兴趣区域的能力,从而潜在地减少假阳性的数量。几家公司还通过将液体活检与机器学习和基因组数据相结合,专注于早期癌症检测。虽然在这一领域还有一段路要走,但我们相信,随着来自细胞读数的其他数据源(如代谢物、蛋白质、表观遗传学)被整合到预测算法中,癌症的早期检测将更加强大。

人口管理。在这一类别中,医院利用机器学习的大数据来识别高危患者。根据患者的特征,一旦他/她离开医院,此人患后续中风或心脏病的可能性有多大?患者是否需要急性后护理提供者的额外关注以防止下游并发症?

精准医疗。在精准医疗领域,机器学习用于为患有特定疾病的特定患者确定最佳治疗和给药方案。背景应用药物基因组学(基因如何影响药物反应)以及其他相关的临床和人口统计学因素在阐明哪种药物和剂量对给定患者最有效方面有很大希望。例如,InsightRX 专注于利用患者人口统计数据、遗传数据和临床实验室数据,在护理点进行个性化治疗。像基础医学这样的公司从肿瘤中提取 DNA 序列,帮助确定哪种癌症疗法最有效。

临床试验匹配。临床试验操作人员努力将正确的患者与正确的试验相匹配。例如,一个阿尔茨海默氏症患者可能会找到 100 个关于 clinicaltrials.gov 的潜在试验,每个试验都有一个必须阅读和评估的资格标准的详尽列表。公司正在直接用自然语言处理和人工智能算法来解决这个问题,以便更有效地将患者与临床试验相匹配。从患者的记录中提取相关的临床特征,例如症状、诊断、治疗、诊断测量来创建多维向量,然后可以将该多维向量与临床试验资格标准进行匹配,以非常快速地找到适合试验的患者。

坚持和虚拟助手。大数据和机器学习还用于远程评估患者的症状,并仅在需要患者护理时向临床医生发出警报。从临床角度来看,这有可能减少不必要的医院就诊。它还可以减轻医疗专业人员的负担。从患者的角度来看,潜在的假设是,患者需要指南驱动的答案,但也需要有人帮助他们保持正轨。以患者为中心的虚拟健康助理可能是一个很好的选择,可以让患者全天候访问针对其医疗状况定制的最新信息,特别是如果他们不住在医疗保健提供商附近。

机器人辅助手术。认知机器人可以将术前病历中的信息与实时临床和手术指标相结合,以物理方式指导和增强医生的仪器精度。该技术结合了来自实际手术经验的数据,以提供新的、改进的技术和见解。这种改善可以提高患者的总体疗效。

我们开始思考数据驱动的医疗保健在下一波浪潮中会是什么样子。下一代医疗保健创业公司有可能由看似不同的利益相关者之间的数据统一来驱动吗?如前所述,EHR 数据与新检测技术的结合将推动机器学习应用。然而,以统一的方式访问这些数据仍然是一个瓶颈,如果这个问题得到解决,将推动下一代数据驱动的医疗保健应用。在没有定义结构组件的情况下,我们一直在考虑可以在医疗保健操作系统上创建的潜在应用程序。

精确加药。个体化药物治疗的未来将整合难以捉摸的数据类型,如药物依从性、饮食,甚至代谢反应,以优化治疗。精确给药,特别是在门诊环境中,从不同来源的不同数据的统一中受益,提供了患者药理学概况的完整图像。Otsuka/Proteus 合作开发 Abilify Mycyte 系统,该系统被动记录药片摄入的日期和时间,以及某些生理数据,如活动水平,标志着向整合看似不同的数据源和药物治疗的未来迈出了重要一步。

支付者遇到被动可穿戴设备。支付者有可能根据你的 Apple Watch 或 Fitbit 生成的健康数据来评估他们的保费吗?支付者的精算分析可以使用可穿戴健康数据作为输入并自动调整保费吗?联合医疗正在探索这个想法

个性化健康。中国公司 iCarbonX 正在创造一种更具雄心的医疗保健操作系统。该公司正在寻求从传统诊断设备收集数据——基因组测序、血液生物标志物、代谢物、心脏数据——以及通过“智能厕所”从微生物组测试等许多其他来源收集数据。虽然最终结果仍有待观察,但将这类信息与非传统来源(如 PatientsLikeMe 等健康网站上的论坛帖子)相关联的努力可能会证明跨部门医疗数据的价值。

展望未来

电子健康记录、诊断技术、云计算的进步以及向基于价值的医疗服务的转变降低了大数据和机器学习从根本上转变医疗保健系统的激活能量

为了改善现有的进展,我们应该考虑用不同的方式做一些事情。作为一个社区,我们需要逐渐减少我们令人愤慨的主张,并保持古怪的承诺。如果使用得当,营销是一个强有力的工具。我们需要小心,不要本末倒置,宣称尚不存在的利益。复杂性来源于用正确的数据训练模型的时间,提出正确的临床问题的时间,从科学和医学角度理解疾病的时间。

例如,当 IBM Watson 著名的 Jeopardy 亮相将人工智能推出科幻领域时,它很快成为医疗保健中机器学习应用的典范。社区希望沃森能够综合患者症状、基因序列、病理报告、医生笔记,甚至相关的期刊文章,以帮助医生进行诊断和治疗,这是一个大胆而有临床意义的目标。

然而,沃森还没有能够实现这一承诺。它最近的批评不是该公司的失败,而是源于媒体对沃森现在应该走多远过于乐观的说法。使用机器学习来提高诊断和治疗的准确性是一项艰巨的任务,这将需要时间,并且比通常认为的要复杂得多。

我们需要根据附加的临床和经济价值进行沟通,而不是通过诸如“预测”和“ROC”曲线之类的行话。此外,我们需要适当地交流统计数据,并注意我们没有滥用它来支持未经证实的说法。

我们也应该与我们使用的术语保持一致。我们都习惯于交替使用机器学习、大数据、丰富数据和人工智能等术语,这可能会造成下游混乱,并最终成为广泛采用的又一个摩擦点。

认识到机器学习和大数据最终是帮助提供指导和建议的工具至关重要。关于取代临床医生的故事已经遍布医疗保健领域,然而,医疗保健从业者决不会被取代。为了让这些工具有效地发挥作用,我们需要注意使用这些工具的关键医疗保健人员以及他们在整个患者旅程中的角色。

人类和 AI 机器在本质上是共生的。我们拥有直觉和同理心,这是高质量患者护理所必需的两个关键特征。机器可以理解大量的数据,并且(通过正确的算法和数据)在模式识别方面非常强大,使我们能够预测特定患者的未来健康状态。将直觉和同理心与精确预测的能力相结合代表了医疗保健的未来。

骑车时力量和心率是齐头并进的吗?

原文:https://towardsdatascience.com/does-power-and-heart-rate-go-hand-in-hand-when-you-ride-a-bike-37a174785f37?source=collection_archive---------10-----------------------

充分利用电表的数据分析方法。

介绍

你有功率表或者考虑买一个吗?也许你认为这样的设备是下一个收集成千上万数据却不给你任何信息的小工具?不管你的主要动机是什么,继续读下去。

在这篇短文中,我将尝试通过户外骑行期间收集的功率表和心率的数据分析来指导您。对于统计计算和图形,我使用了 R 软件,所有代码都包含在文本中,供您参考。

这种关系的理论很简单。锻炼时你付出的努力越多,你的心率就必须向你的肌肉输送更多的血液,以便输送燃料(糖原)和氧气。

并发症来自人体生理和锻炼环境。肌肉含有能量储备,可在紧急情况下立即使用。这种储存不会持续很长时间,但足以延迟心脏反应一段时间。户外环境对数据分析师来说也不是那么友好。丘陵、风或不平的道路使得骑自行车的人几乎不可能在最短的时间内保持稳定的功率输出水平。此外,大多数锻炼都设计了低功率输出和高功率输出的间隔,从而不断地来回拉动您的心率。

线性回归从 R 开始

在我们开始处理数据之前,我们需要准备一个 R 环境包,它可以很好地解释 Garmin fit 文件。如果你遇到任何问题,不要害怕在评论中提出问题。我们将同时加载所有的库,因此我们将完全覆盖这一部分。

#In order to install directly from github you have to get and use devtools
install.packages('devtools')
library(devtools)
assignInNamespace("version_info", c(devtools:::version_info, list("3.5" = list(version_min = "3.3.0", version_max = "99.99.99", path = "bin"))), "devtools")
#Library that is used to read garmin fit files is here [https://github.com/kuperov/fit](https://github.com/kuperov/fit) but it is better to use fork as this has more recent SDK.
#add CXXFLAGS=-g -std=c++11 in C:\Program Files\R\R-3.5.1\etc\i386\Makeconf
install_github("russelldb/fit")library(fit) # read fit files
library(ggplot2) # plots in R
library(TTR) # Exponential Moving Average
library(gridExtra) # Plots aggregator 
library(dplyr) #lag and leadoptions("scipen"=100, "digits"=4) #print numbers in normal notation#The part that reads exported workout file from Garmin Connect
cycling <- read.fit('2951865119.fit')

现在我们有了所有可用的数据,我们可以绘制功率和心率图。

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

#Prepare data
record <- cycling$record # make record data frame available globally
record <- record[!is.na(record$power) & !is.na(record$heart_rate) ,] # remove NA
record$time <- (record$timestamp-record$timestamp[1])/60 # Show time in minutes
record$from_start <- record$timestamp - record$timestamp[1]  # create variable seconds from start#Plot the first graph
ggplot(cycling$record, aes( x=time)) + 
  geom_line(aes(y = power, colour = "Power")) + 
  geom_line(aes(y = heart_rate, colour = "Heart Rate")) + 
  theme(axis.title.y=element_blank()) +
  ggtitle("Power and Heart Rate")

正如你可能看到的那样,这种相关性是存在的,但是我们不应该期望有什么强的相关性。首先,测得的输出功率比我们在心率中看到的噪声(或方差)多得多。第二件事是,当你停止踩踏板时,功率为零,而心率仍然保持在高水平。

让我们从基本的线性回归开始,即心率直接取决于产生的功率。

#linear regression
linearMod <- lm(heart_rate ~ power , data=record)
summary(linearMod)

在对我乘坐的数据进行快速计算后,我得到了如HRM = 105.33 + 0.1057 * PWR这样的模型。这两个参数都具有统计学意义,更重要的是,它们都有很好的解释。105 是我的基础心率,0.10是力量增长比率。调整后的 R-squared: 0.29,表明模型只在很小的百分比上解释了数据。

心率功率的高级建模

首先,让我们注意到功率比心率有更大的可变性,为了能够得到更好的解释,我们需要以某种方式重新调整它。此外,权力积累本身的内部和驱动心率在一个体积。可以用来实现它的一种方法是使用一段时间的平均值。

我们再加上一个可以反映疲劳的变量。最简单的方法是加上从健身程序开始算起的秒数。

HRM ~ moving_average(PWR, window) + time from start

我们将使用指数移动平均线而不是简单移动平均线,因为 SMA 被认为有一个被称为“吠两次”的问题。这对于耐久性数据来说尤其不方便,因为过去努力应该只有最小的影响。

现在,问题可能是最适合我们的模型的最佳窗口参数是什么。让我们把它当作一个参数来估计,我们将迭代地做 0 到 250 秒之间的窗口大小的线性回归。

iterations = 250L
variables = 5
output <- matrix(ncol=variables, nrow=(iterations))
for (i in c(1:iterations)){
  print(i)
  linearMod <- lm(heart_rate ~ EMA(power,n=i) + from_start, data=record)
  summary <- summary(linearMod)
  output[i,] <- c(i,summary$r.squared, summary$coefficients[1],summary$coefficients[2],summary$coefficients[3])
}summary.df <- data.frame(output)summary.df[summary.df$X2==max(summary.df$X2),]
window  <- summary.df[summary.df$X2==max(summary.df$X2),1] #declare variable for future useggplot(summary.df, aes(x = X1)) + 
  geom_line(aes(y = X2, colour = "R"), show.legend=F) +
  xlab("[s]") +
  theme(axis.title.y=element_blank()) +
  ggtitle("R over mean window")

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

随后的下降有明显的局部最大值,这给这种方法以信心。r 平方增加到 0.78,这是一个体面的模型拟合。自行车静息心率下降到 84,这也是更可信的值。随着功率的下降,增长率略有上升。当平均值的窗口大约为 43 秒时,模型达到最佳拟合。

最后一个值得检查的是基础 HR 和增长比率的行为。

plot1 <- ggplot(summary.df, aes(x = X1)) + 
  geom_line(aes(y = X3, colour = "Base HR"), show.legend=F) +
  xlab("[s]") + theme(axis.title.y=element_blank()) +
  ggtitle("Base HR over mean window")
plot2 <-ggplot(summary.df, aes(x = X1)) + 
  geom_line(aes(y = X4, colour = "Base HR"), show.legend=F) +
  xlab("[s]") + theme(axis.title.y=element_blank()) +
  ggtitle("Growth ratio over mean window")
grid.arrange(plot1, plot2, nrow=2)

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

您可以看到,随着窗口大小的增加,基础 HR 不断下降,并稳定在一个更小的值。

ne 可能会问引入移动平均是否足以让模型完美拟合,并质疑心率反应是否有立竿见影的效果。事实上,我们应该以类似的方式检查滞后或超前是否改进了模型。

新模型将会是这样的:

HRM ~ moving_average(lag or lead(PWR,difference), window) + time from start

估计也是基于迭代方法,但这次我们需要计算每个i的滞后和超前

iterations = 125L
variables = 5
output <- matrix(ncol=variables, nrow=(iterations*2-1))
for (i in c(1:iterations-1)){
  print(i)
  linearMod <- lm(heart_rate ~ lead(EMA(power,n=window) ,n = i)  + from_start, data=record)
  summary <- summary(linearMod)
  output[i+iterations,] <- c(i,summary$r.squared, summary$coefficients[1],summary$coefficients[2],summary$coefficients[3])
  linearMod <- lm(heart_rate ~ lag(EMA(power,n=window) ,n = i) + from_start , data=record)
  summary <- summary(linearMod)
  output[iterations-i,] <- c(-i,summary$r.squared, summary$coefficients[1],summary$coefficients[2],summary$coefficients[3])
}linearMod <- lm(heart_rate ~ EMA(power,n=window)  + from_start , data=record)
summary <- summary(linearMod)
output[iterations,] <- c(0,summary$r.squared, summary$coefficients[1],summary$coefficients[2],summary$coefficients[3])summary.df <- data.frame(output)summary.df[summary.df$X2==max(summary.df$X2),]
summary.df[summary.df$X4==max(summary.df$X4),]
summary.df[summary.df$X3==min(summary.df$X3),]ggplot(summary.df, aes(x = X1)) + 
  geom_line(aes(y = X2, colour = "R"), show.legend=F) +
  xlab("[s]") + theme(axis.title.y=element_blank()) +
  ggtitle("R with difference")

plot1 <- ggplot(summary.df, aes(x = X1)) + 
  geom_line(aes(y = X3, colour = "Base HR"), show.legend=F) +
  xlab("[s]") + theme(axis.title.y=element_blank()) +
  ggtitle("Base HR  with difference")
plot2 <-ggplot(summary.df, aes(x = X1)) + 
  geom_line(aes(y = X4, colour = "Base HR"), show.legend=F) +
  xlab("[s]") + theme(axis.title.y=element_blank()) +
  ggtitle("Growth ratio  with difference")
grid.arrange(plot1, plot2, nrow=2)

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

当没有超前或滞后时,达到模型的最佳拟合,并且基本 HR 的最小值和增长率的最大值同时达到。这是理想的,但是小的滞后或超前值也是可以接受的,因为可能会有一些设备记录时间不匹配。

另一件值得检查的事情是线性回归残差的分位数-分位数图。基本上,它告诉你没有被解释的部分是一个随机的正常噪音还是有一些隐藏的模式在里面。

linearMod <- lm(heart_rate ~ EMA(power,n=window)+ from_start   , data=record)
summary(linearMod)
plot(linearMod)

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

在完美的排列中,所有的点都应该在一条直线上。在我们的例子中,尾部没有被很好地放置,这可能暗示了模型的一些改进领域。

最后一部分是用热图交叉检查一张图上的所有数据。因此,我们将同时检查窗口大小参数和滞后或超前。

#check for moving average
iterations = 201L
variables = 6output <- matrix(ncol=variables, nrow=iterations^2-1)
for (j in c(1:iterations)){
  for (i in c(1:(iterations/2L))){
    print(iterations*(j-1)+i)
    linearMod <- lm(heart_rate ~ lead(EMA(power,n=j),n=i) + from_start  , data=record)
    summary <- summary(linearMod)
    output[iterations*(j-1)+i+iterations/2,] <- c(i,j,summary$r.squared, summary$coefficients[1],summary$coefficients[2],summary$coefficients[3])
    linearMod <- lm(heart_rate ~ lag(EMA(power,n=j),n=i) + from_start  , data=record)
    summary <- summary(linearMod)
    output[iterations*(j-1)+iterations/2-i,] <- c(-i,j,summary$r.squared, summary$coefficients[1],summary$coefficients[2],summary$coefficients[3])
  }
  linearMod <- lm(heart_rate ~ EMA(power,n=j) + from_start  , data=record)
  summary <- summary(linearMod)
  output[iterations*(j-1)+(iterations/2L),] <- c(0,j,summary$r.squared, summary$coefficients[1],summary$coefficients[2],summary$coefficients[3])
}summary.df <- data.frame(output)summary.df[summary.df$X3==max(summary.df$X3),]ggplot(summary.df, aes(x = X1,y=X2, color=X3)) +  geom_point() + scale_colour_gradientn(colours=rainbow(4)) +
  labs(x = "Lag value", y = "Mean", color ="R")ggplot(summary.df, aes(x = X1,y=X2, color=X4)) +  geom_point() + scale_colour_gradientn(colours=rainbow(4)) +
  labs(x = "Lag value", y = "Mean", color ="Base HR")

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

我想在这里展示的最后一件事是受过训练和未受过训练的运动员之间的比较。为此,我们有一组来自经常训练的高级选手和新手的数据。我们做了 5 分钟 150W 稳定负荷下的心率模拟。为了简化,不存在预热。

#Prepare data
cycling2 <- read.fit('Szosa-4x1395-98%FTP/2863955610.fit')
record2 <- cycling2$record # make record data frame available globally
record2 <- record2[!is.na(record2$power) & !is.na(record2$heart_rate) ,] # remove NA
record2$from_start <- record2$timestamp - record2$timestamp[1]  # create variable seconds from startrobert <- lm(heart_rate ~ EMA(power,n=116) + from_start, data=record2)
marek <-  lm(heart_rate ~ EMA(power,n=43) + from_start, data=record)warmUp <- rep(0,3*60)
powerPhase <- rep(150,5*60)
coolDown <- rep(0,5*60)power <- c(warmUp, powerPhase, coolDown)
from_start <- as.numeric(seq(power))experiment <- data.frame(power,from_start)
experiment$heart_rate1<-predict(robert,experiment)
experiment$heart_rate2<-predict(marek,experiment)
experiment$time <- experiment$from_start/60 # Show time in minutesggplot(experiment, aes( x=time)) + 
  geom_line(aes(y = heart_rate1, colour = "Heart Rate Advance")) + 
  geom_line(aes(y = heart_rate2, colour = "Heart Rate Novice")) + 
  theme(axis.title.y=element_blank()) +
  scale_x_continuous(limits = c(2, 12)) +
  ggtitle("Power and Heart Rate")

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

接下来呢?

  • 构建一个出色的应用程序来处理您的数据
  • 分析恢复时间,因为受过训练的运动员应该恢复得更快
  • 将厌氧效果添加到模型中

如果您发现任何不清楚的地方,请留下评论或提出问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值