TowardsDataScience-博客中文翻译-2020-一百一十八-
TowardsDataScience 博客中文翻译 2020(一百一十八)
处理倾斜数据的三大方法
真实世界的数据可能会很混乱。甚至一些学习数据集包含的属性在用于预测建模之前需要进行严格的修改。
这很好。

让我们以线性回归模型为例。你可能已经知道了这一点,但是模型对你提供的数据做了大量的假设,例如:
- 线性:假设预测值和目标变量之间的关系是线性的
- 无噪声:例如,数据中没有异常值
- 无共线性:如果您有高度相关的预测值,那么您的模型很可能会过拟合
- 正态分布:如果预测值和目标变量呈正态分布,则预测更可靠
- 缩放:这是一种基于距离的算法,所以预测器应该被缩放——就像标准缩放器一样
对于一个简单的模型来说,这已经很多了。今天我想重点谈谈第四点,那就是预测值和目标变量应该遵循高斯分布。
这并不总是可能做到的,因此你不能将任何分布转换成完美的正态分布,但这并不意味着你不应该尝试。
首先,让我们加载一个简单的数据集并施展魔法。
数据集
我将使用熟悉的波士顿房价数据集来探索一些处理扭曲数据的技巧。
没有必要下载它,因为你可以直接从 Scikit-learn 导入它。下面是所有导入和数据集加载的代码:

在执行时,将显示前几行,您应该得到和我一样的输出:

我不想探究所有的变量,因为我之前已经做过一些测试,并得出了变量CRIM具有最高偏斜的结论。下面是验证我的声明的代码:

酷毙了。现在你可以使用 Seaborn 库制作一个柱状图,旁边是 KDE 图,看看我们在处理什么:

这当然不符合正态分布。是的,如果你想知道我是如何从糟糕的默认可视化中摆脱出来的,这里有一篇文章你应该看看:
默认的 Matplotlib 样式已经过时了——但是我们可以做些什么
towardsdatascience.com](/the-last-matplotlib-tweaking-guide-youll-ever-need-dbd4374a1c1e)
好了,现在我们已经讨论过了,让我们来探索一些处理偏斜数据的方法。
1.对数变换
对数变换很可能是您应该做的第一件事,以消除预测器的偏斜。
这可以通过 Numpy 轻松完成,只需调用所需列上的log()函数。然后,您可以轻松地检查偏斜:

就这样,我们的偏斜系数从 5.2 降到了 0.4。但在下结论之前,我们还应该快速想象一下:

嗯,它肯定不是正态分布的,但比我们以前拥有的要好得多!
如您所料,对数转换不是您可以使用的唯一方法。让我们探索更多的选择。
2.平方根变换
平方根有时很有效,但有时并不是最好的选择。在这种情况下,我仍然希望转换后的分布看起来有点指数,但是由于取平方根,变量的范围会更小。
您可以通过调用sqrt()函数,使用 Numpy 应用平方根变换。代码如下:

偏斜系数从 5.2 变为 2,这仍然是一个显著的差异。然而,日志转换最终得到了更好的结果。
然而,让我们想象一下现在的一切:

分布基本相同,但是范围比预期的要小。
在宣布 log 转换为赢家之前,让我们再探索一个。
3.博克斯-考克斯变换
这是我今天要探讨的最后一个转化方法。由于我不想深究背后的数学,这里有一篇短文给对那部分感兴趣的人。
你只需要知道这只是另一种处理扭曲数据的方式。要使用它,你的数据必须是正的——所以有时会令人失望。
您可以从 Scipy 库导入它,但是检查倾斜需要将结果 Numpy 数组转换成 Pandas 系列:

哇!偏斜仅从 5.2 下降到 0.09。不过,让我们看看转换后的变量是什么样子的:

这种分布与对数变换产生的分布非常相似,但我想说的是双峰分布稍微少了一点。
在你走之前
如果处理不当,扭曲的数据会破坏预测模型的能力。
这应该是不言而喻的,但是你应该记住你对哪个属性执行了什么转换,因为在做预测的时候你必须反转一次,所以要记住这一点。
尽管如此,这三种方法应该很适合你。
你在用什么转化方法?请告诉我。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
最小化新冠肺炎对数据科学影响的三大方法(第二部分)
减轻或解释数据中新冠肺炎效应的方法。

迪米特里拍摄的照片:Unsplash
简介
在本系列的第二部分中,我们继续讨论解决由于疫情导致的数据集中潜在杂质的方法。具体来说,我们将深入研究潜在的数据替换技术,然后回顾一些特性工程方法。
如果你想了解更多关于新冠肺炎对 ML 管道可能造成的影响,请点击 这里 。本系列的第一部分涵盖了以数据为中心的方法,可以在这里 找到 。这将有助于在跳跃前进之前通过这些。
用原始预测替换数据
在本系列的第一部分中,我们讨论了用历史数据替换受新冠肺炎数据影响的数据。这可能是一个很好的选择,在这种情况下,您预测的数据有望恢复到新冠肺炎之前的水平,由于可用数据的数量,删除新冠肺炎影响的数据而不替换是不可能的,并且您认为历史数据是没有新冠肺炎会发生的情况的公平代表。

瑞秋的照片:Mashable
替换数据时要考虑的另一个选项包括用该时间段(新冠肺炎撞击前)的原始预测替换受新冠肺炎影响的数据。这可能是一个很好的选择,在这种情况下,我们会看到由于多个复杂的功能而导致的重大变化,如果用历史数据替换数据,这些变化将不会反映出来。这当然需要高度的信心,我们之前的预测将准确地反映我们在数据中看到的情况,如果没有疫情的话。
将这种替换技术应用到一个例子中,假设您预测了每周的区域卫生纸销售量,但是只有几年的数据。如果你想预测新冠肺炎危机(希望如此)过去后的未来销售,并且你发现你的模型预测被新冠肺炎显著改变,你将需要一些方法来处理受影响的数据。如果危机影响了 3-4 个月的销售,而您只有 3 年的数据,这已经影响了您 10%的数据,因此您可能不想丢弃它。如果你确信数据会反映如果没有新冠肺炎会发生什么,你可以用历史值代替数据。或者,如果您的预测在过去非常准确,您可以用以前的预测数据替换受影响的数据。当然,这是有风险的,但是只要用清晰的交流来详述这些风险,这可能是一个可行的解决方案。
过采样
根据您的建模技术,另一个潜在的选择是利用过采样。如果您试图在疫情期间将数据的影响降至最低,保留受新冠肺炎影响的数据可能是合理的,但不要替换或修改它,而是尝试通过从新冠肺炎不是影响因素的时间段进行过采样来降低其影响。这与分类技术中使用的方法类似,在分类技术中,类别不平衡,因此从代表性不足的类别中进行过采样。这也可能在相反的情况下起作用。如果您认为更新的数据比大多数历史数据更能代表未来的模式,则可以从受新冠肺炎影响的时间段进行过采样。

过采样
比方说,我们正试图预测餐馆的能源使用,并相信活动将很快恢复到 COVID 之前的水平。为预测模型创建训练数据集时,可以选择从不受新冠肺炎影响的时间段进行过采样,但将新冠肺炎数据保留为数据集的一部分。这可能会降低新冠肺炎数据对模型的影响,而不会完全移除或替换数据。这可能有所帮助的一种方式是,在新冠肺炎期间有其他影响发生(室外座位是低能效的),您不想消除这些影响,但仍然希望将这些数据的影响降至最低。
另一方面,如果您正在预测像家庭清洁用品这样的东西,并且您认为未来的数量将与我们最近几个月所看到的更相似,您可能希望从更近的数据中进行过采样。这可能是可取的情况下,你可能是建模非常嘈杂的模式,因此,模型不能很快学会信任新的模式,从而适当地影响预测。例如,如果您看到家用清洁产品的销售大幅增长,而在正常情况下,您的模型会将其视为异常并忽略不计,那么您可以考虑将这种过采样技术作为一种可能的解决方案,以帮助“说服”模型接受新趋势。
特色工程
处理数据的一个更复杂的方法是通过特征工程。本质上,我们可以创建用于解释新冠肺炎对我们数据的影响的要素。回到能源使用示例,对新冠肺炎建模的一种方法是添加一个特征来指示给定时间段是否受到新冠肺炎的影响。这可以是一个简单的标志(0/1 表示新冠肺炎时间),也可以是某种反映给定时间新冠肺炎对数据影响程度的指数,可能基于案例数量或经济关闭的程度。一个潜在的问题可能是,没有足够的新冠肺炎影响数据来完全理解这种影响,特别是对于那些已经在消除异常值方面做得很好的模型。

来源:Elexon &国家电网/ N. Godfrey
在某些应用中,我们可以通过将新冠肺炎效应与另一个对我们的预测有类似影响的特征相结合来模拟它的影响。对于我们的能源使用示例,在新冠肺炎关闭以类似方式影响行为的用例中,我们可以将疫情视为假日/夏季。这可能有助于解决模型数据有限的问题,隔离新冠肺炎效应。为了解释这一点,我们来看看英国国家电网的数据。
上图显示了 2020 年 3 月整周的电力需求。快速浏览一下就可以知道,在采取封锁措施后,电力需求下降了约 10-15%。但是上面图表中最重要的分析是随着咖啡机、暖气等的使用,早晨的“高峰”变平了。在一天中传播。如果你足够仔细地观察,你会发现工作日开始与周末非常相似(将工作日期间的蓝线与周末期间的其他线进行比较)。这表明我们可以如何将当前数据本质上建模为“周末”,同时仍然管理一个不错的预测。同样,假设需要传达给所有的利益相关者。

对于多变量模型,另一种有前途的方法是创建能够帮助模型了解此时正在发生一些不寻常的事情的特征,类似于我们对自然灾害可能做的事情。例如,以下功能可能在各种模型中证明是有益的,包括预测解决方案:
- 新冠肺炎在给定的时间/地点出现
- 地点是在家里的命令下
- 在给定时间/地点关门的零售商百分比
- 送货/路边取货的零售商百分比
- 特定地区的感染率
- 给定区域的测试率
- 特定地区的就业统计
为了使这些特性对预测有用,我们还需要对它们的未来值进行假设。我们可以使用不同的输入值来设想可能的情况,包括恢复正常。通过添加可以帮助解释此时正在发生的事情的功能,我们可能能够避免需要删除或大量修改数据的解决方案。换句话说,通过添加能够隔离新冠肺炎影响的特征,机器学习模型可能能够学习到可用于预测未来的相关信息。
关于作者
Usman Gohar 是一名数据科学家,明尼阿波利斯数据科学的共同组织者,也是一名技术演讲人。他非常热衷于最新的数据科学研究和机器学习。你可以在 LinkedIn 、 Twitter 、Medium&follow onGithub上和他联系。
Renee Ernst 是 General Mills 的高级首席数据科学家,担任一个数据科学家团队的技术经理,该团队构建用于情景规划和优化促销的模型。工作之外,她还积极参与数据科学社区,包括共同组织即将举行的minne AnalyticsWomen in Analytics and Data Science conference 等活动。你可以在 LinkedIn &上找到芮妮,在 Github 上关注。
熊猫 1.0 的三大新功能
一些新的节省时间和精力的功能
熊猫 1.0 版本发布已经有几周了,它带来了一些令人兴奋的新功能,尽管其中一些仍处于实验阶段。

这篇文章背后的主要思想是简要地探索它们,并向您展示如何升级到 Pandas 1.0,因为您可能仍在运行 0.25 版本。所以事不宜迟,让我们看看如何做到这一点。
从 0.25 升级到 1.0
如果我打开 Jupyter 笔记本并查看当前版本的熊猫图书馆,我会得到这个:

我的版本是 0.25.1,所以要升级我需要执行下面的命令(也可以通过 Jupyter 完成,不需要打开终端或命令提示符):

然而,如果您得到一些权限错误,以管理员身份运行命令行,或者如果您在 Linux 上,在命令前面加上sudo。现在让我们看看一切是否如预期的那样:

请记住,你可能看不到“1.0.1”,这取决于你何时阅读这篇文章,它可能是一个更新的版本。完成后,让我们简单讨论一下我将用来做演示的数据集,以及从哪里获得它。
使用的数据集
我决定使用 MT Cars 数据集,这是任何用户都熟悉的数据集,非常适合一些基本的数据操作。它可以从这个链接下载,或者你可以直接通过 Pandas 复制链接并阅读:

好了,现在当这一切都结束了,我可以开始写文章了!
1.降价转换
现在,作为 Pandas DataFrame 操作的结果,您可以轻松地生成减价表。不过,您还需要一个额外的库,名为tabluate:

为了演示,我决定只保留 6 缸汽车,只保留manufacturer和mpg列:

现在很容易将这个结果导出到 markdown 表。只需在陈述的末尾添加.to_markdown(),并确保用print()陈述将所有内容括起来:

现在,您可以复制该文本并将其粘贴到 markdown 单元格中(选择一个单元格,然后选择ESC — M — Enter):

瞧啊。该单元格现在包含来自您的数据的减价表:

NA 标量
Pandas 最终得到了一个标量来表示缺失值。其背后的思想是用一个标量来表示所有数据类型中一致的缺失值。到目前为止,我们有:
np.nan—用于彩车None—用于对象pd.NaT—表示日期和时间
现在我们可以用pd.NA代替上面提到的那些来表示缺失值。值得一提的是,它仍然是一个实验特性,并且可以在没有预先警告的情况下改变其行为,所以我还不会将它包含在产品代码中。
然而,这并不意味着我们可以玩弄它。要快速查看它的动作,只需在任意 Jupyter 单元格中执行pd.NA:

为了查看它在一个基本示例中是如何工作的,我将创建一系列的几个元素,并将其中一个声明为 missing,首先使用None关键字:

你可以看到None是如何毫无问题地“翻译”到NA的。您也可以通过pd.NA直接指定缺失值:

现在,从这里开始,您可以使用您的标准方法来查看一个系列是否包含缺失值:

现在差不多就是这样了。再说一次,这个特性是实验性的,所以我不建议在产品代码中使用它。
字符串数据类型
到目前为止,我们只有object数据类型来处理任何非数值的东西,这可能会有问题,原因有几个:
- 您可以将字符串和非字符串存储到一个数据类型数组中
- 没有明确的方法只提取字符串列,因为数据类型为
object的.select_dtypes()会导致第一个讨论的问题
就像pd.NA一样,这仍然被认为是实验性的,这意味着它很容易在没有警告的情况下发生变化。
让我们回头看看我们的 MT Cars 数据集,看看我们在其中存储了哪些数据类型:

我们可以看到,manufacturer很明显是一个字符串,被声明为object。对您来说,这听起来没什么大不了的,但是想象一下这样一个场景,您想要对数据集进行子集化,只保留 string 数据类型的列。在那里,您可以很容易地得到一个数字列,其中只有一个非数字的值。这是我们想要避免的问题。
幸运的是,我们可以使用.convert_dtypes()方法将潜在的对象转换成字符串:

现在,我可以更安全地基于列数据类型创建子集了:

在你走之前
最后,我只希望你能从这篇文章中得到一些有用的东西。没有一个新特性是开创性的,但这并不意味着它们不能帮助你编写更好、更统一的代码。
我很想知道熊猫背后的开发团队将会添加哪些功能,所以如果你想在它们发布后尽快了解它们,请继续关注。
感谢阅读。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
你不知道(可能)的前 3 个 Numpy 函数
不是每个操作指南都包括的
作为最受欢迎的科学计算 Python 库之一,Numpy 当然不缺乏有用和有趣的函数,值得深入探索。本文将探讨一些最有趣但鲜为人知的内容,希望能鼓励您自己进一步探索。

尼克·希利尔在 Unsplash 上拍摄的照片
作为一名数据科学家,我每天都使用 Numpy 库,主要用于在各种操作中处理数组——乘法、连接、整形、比较等。
以下是本文将涉及的功能:
isclose()intersect1d()stack()
进口方面,您只需要 Numpy:

所以事不宜迟,我们开始吧!
isclose()
有多少次你查看数据帧中的条目,看到 0 的值,然后决定过滤掉 0,却发现你的代码没有做它应该做的事情?
你的代码(某种程度上)没有问题,问题在于数字如何被四舍五入以在你的屏幕上占据更少的空间。以此为例:

变量x和y虽然非常接近,但并不相同,测试相等将导致False:

但在大多数情况下,低至这个数字可以认为是 0。问题依然存在,如何在代码中实现这一点?
幸运的是,Numpy 有一个isclose()函数可以帮助我们。它将在一个容差内测试两个数是否相等,缺省情况下是1e-8。让我们来看看实际情况:

如您所见,给定的数字在阈值内是相同的,因此函数返回True。如果出于某种原因,您想要调整阈值,以下是操作方法:

太好了,我们继续。
交叉 1d()
该函数的主要思想是将两个数组作为输入,并返回包含在两个数组中的元素。把它想成一个集合交集,但是你知道,不用把数组转换成集合,计算交集。
为了演示,让我们声明两个数组:

现在,为了查看两者中存在哪些元素,我们需要做这样的事情:

太好了!另一种方法,前面提到的那种,写起来会有点长,而且会包含更多的括号:

两个都可以,但我更喜欢第一个。
堆栈()
现在,这是我在为预测建模准备数据集时经常使用的方法——更准确地说,是在分类变量嵌入的过程中。
假设您已经嵌入了一些变量,并希望将它们放入一个矩阵形式中,其中每个变量都是一个单独的列—唯一符合逻辑的做法是沿着列轴堆叠变量。
但是我有点想太多了。
出于演示目的,我们将处理之前的相同阵列:

太好了。现在让我们使用stack()函数沿着行轴堆叠数组:

请记住,axis=0在这里是可选的,因为它是执行堆叠的默认轴,但是我已经将它指定得更明确了。
实践中更常见的例子是沿着列轴堆叠(至少在我的工作中是这样的):

在你走之前
我希望你能在作为数据分析师/科学家的日常工作中利用这三个功能——它们是很好的时间节省工具。
和往常一样,如果你有一些日常使用的附加功能,不要犹豫,在评论区分享吧。
感谢阅读。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
我是如何在梦幻超级联赛中名列前 2%的
我如何利用数据科学和运筹学取得进步,以及我本可以如何改进

来源:https://unsplash.com/photos/ObhCU6Vhoe8
经过长时间的休息,体育运动正在慢慢回归。一周前,英国政府宣布英超联赛可以在 6 月 1 日闭门回归。这让我想到了我幻想中的英超球队。我决定加入这个游戏,因为这是一个结合我的两个爱好,体育和数据科学的好方法。赛季开始时,我的目标是进入前 5%。这就是我现在站的地方。

给你,前 2%。准确的说是前 1.6%。赛季还没有结束,但是到目前为止我对结果很满意。我是这样做的,运用数据科学和运筹学。
第一部分:挑选我的初始团队
在赛季开始之前,你如何决定挑选哪些球员?一个球员的好价钱是多少?你应该得到尽可能多的超级巨星,还是得到更多的平衡阵容?考虑到所有这些可能性,在遵守 1 亿美元预算的同时,很难选出最好的 15 名球员。
经过大约 12 秒的思考,我很快意识到,这整个梦幻英超的事情就是教科书上的“背包问题”。背包问题是一个组合优化问题,你有一组物品,它们有一定的价值和体积,你想把它们放进背包里。考虑到背包容量有限,你要决定哪些物品放在包里才能实现价值最大化。这里有一个很好的插图,适合视觉学习者。

来源:https://en.wikipedia.org/wiki/Knapsack_problem
将这个问题转化为 FPL 问题,我只是想选择 15 名球员的组合(3 名守门员,5 名后卫,5 名中场球员和 3 名前锋),这将使总积分最大化,同时尊重 1 亿美元的预算。但是我如何定义下个赛季的最大积分呢?好吧,因为我不知道这些信息,我必须最大化上个赛季获得的分数,同时查看今年所有球员的成本。
现在,在一个正常的比赛周,只有我们的首发阵容会真正得分。因此,我决定自己选择尽可能便宜的替代品,并且在上一个赛季的成本类别中具有最佳的单位成本比率。选了一个守门员,两个后卫和一个中场,总共 1700 万美元,这样我的首发阵容就剩下 8300 万美元了。
然后我就可以真正地解决创造最佳首发阵容的问题了。下面是为表示这个问题而创建的模型(为了便于理解而进行了简化),其中 Xi 是玩家 i :

简而言之,我想最大化 FPL 点数的数量,同时遵守四组约束条件,即我们的球员总成本必须低于或等于 8300 万美元(约束条件 1),我们需要每个位置有正确数量的球员(约束条件 2),我们不能有超过 3 名球员来自一个团队(约束条件 3),我们只能选择一名球员一次,不能有负值(约束条件 4)。
为了解决这个问题,我使用了单纯形算法,这是线性规划中最流行的算法。这是它在 2D 的做法。

来源:https://math.stackexchange.com/
基本上,它根据约束(线)定义可行区域(蓝色),然后尝试区域边界的每个点。下面是使用 Excel 求解器通过单纯形算法获得的起始 11。是的,Excel 可以做基本的运筹学(如果有人对这方面的教程感兴趣,请告诉我)!

来源:我的 FPL 队第一场比赛的快照
从一开始就拥有一个强大的团队是至关重要的。瓦迪,马夏尔,罗伯森,范迪克每周都还在我的首发阵容里。尽管如此,这只是工作的一部分。以下是我在赛季中为确保成功所做的。
第 2 部分:季节调整和奖金的使用
预测的第一条规则很简单:预测范围越短,预测就越好。记住这一点,每个星期,我都尽可能地等待,以确定我的阵容,并决定我是否应该转会。这样,在做决定之前,我就有了所有可能的信息(尤其是关于伤病的)。
我在赛季中做的最重要的事情就是等到我有两次自由转会机会时再进行转会。如果你想转让一名球员,替换该球员的选择是有限的:必须是同一位置的球员,价值更低或相等。当你有两次转会时,你有更多可能的替代选择。更多的球员可供选择,你就有更多的机会得到你真正想要的球员。很简单的逻辑。
此外,我使用(或将使用)我的奖金使用一个简单的策略:最小化夹具难度排名(FDR)。也就是说,如果玩家不是在和一个 FDR 低的弱队比赛,你就不应该使用奖励。这也是简单的逻辑。耐心也是关键。我等到比赛第 26 周才使用我的第一笔奖金。
第 3 部分:我应该做些什么
我很快意识到,我把上个赛季看得太重,认为它是下一个赛季的最佳预测。这意味着一些在 18-19 赛季表现突出的球员(乔什·金、汤森、卡勒姆·威尔逊)总是会被算法选中,而其他几年表现不佳的球员则被遗忘(例如德·布鲁恩)。我应该考虑到至少两个赛季的数据。我可以对季节进行加权,最近的季节更重要,或者我可以简单地取一个平均值。这将消除异常,我将避免选择“一击不中的奇迹”。
最后,在疯狂的圣诞节期间,我意识到,如果至少有一个像样的替代球员,我会过得更好。轮换和伤病意味着我有几个比赛周需要替补球员上场。显然,你得到了你所付出的。在我的情况下,我从来没有得到很多。我认为有一个额外的“真正的”首发会有所帮助,也会给我更多的灵活性来根据本周的比赛调整我的阵型/阵容。
赢得 FPL 需要很大的运气,没有一个确定的方法可以表现得很好,因为像伤病、轮换和状态这些事情完全不在你的控制之内。有很多方法可以增加你的机会。就像在数据科学中一样,总是存在不确定性,没有模型或算法可以 100%准确地预测。谢天谢地,你不需要完美,你只需要打败别人!
如果你做到了这一步,那么非常感谢你的阅读!
熊猫三大功能:数据科学版
最受欢迎的数据分析库提供了什么。
毫无疑问,Pandas 是最受欢迎的数据科学库之一。它已经存在了相当长的一段时间,包括了很多节省时间和神经的功能。今天我们将探索其中的三种。

马克·巴萨拉布在 Unsplash 上的照片
如果你更喜欢视频,或者只是想巩固你的知识,请随意观看我们关于这个主题的视频。源代码包含:
准备步骤很少,因为我们只需要导入 Pandas 库和数据集:
import pandas as pd
df = pd.read_csv(‘[https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv'](https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv'))
仅此而已。事不宜迟,让我们从第一个函数开始吧!
1.应用()
apply() 函数允许您将预定义的或匿名的函数应用于特定的列。当没有一大堆你想执行的逻辑时,匿名或 lambda 函数是很棒的,因为 lambda 会很快变得很乱。
我们想从名称属性中提取标题。标题可以在第一个逗号之后,第一个点之前找到。我们只需要知道这些。
如果您选择预定义的函数,以下是解决问题的方法:
def extract_title(string):
string = string.split(‘,’)[-1]
string = string.strip()
string = string.split(‘.’)[0]
return stringtitles = df[‘Name’].apply(extract_title)
还不错,每个人都能体会到这段代码有多整洁。这肯定是一种更长的方法,但是代码不需要注释就能被其他人理解。
接下来是匿名函数方法,这是一行程序:
titles = df[‘Name’].apply(lambda x: x.split(‘,’)[-1].strip().split(‘.’)[0])
当然,这种方法更短,但是想象一下如果我们需要执行更多的分割。兰姆达斯就不是个好选择了。
下面是前几个标题的样子:

你现在可以使用这个计算栏来查看一个标题是否对生存机会有任何影响。
2.值计数()
value_counts() 的目的是统计指定属性中值的不同出现次数。这是前面提到的 apply() 函数的一个很好的下一步,这正是我们将使用它的目的。
我们可以调用片头的功能系列:
titles.value_counts()

现在您可以创建一个二进制属性,如果头衔不常见(比如 Dr、Rev、Mlle 等),则值为 1,否则为 0(Mr、Miss、Mrs ),并执行一些进一步的分析。
我喜欢看百分比,而不是原始数据。这很容易做到:
titles.value_counts(normalize=True) * 100

差不多就是这样,简单且不言自明的函数。
3.get_dummies()
get_dummies() 函数用于将分类列转换为虚拟变量— 0 或 1。这很有用,因为你不能将字符串类别输入到机器学习模型中,这些值必须是数字。
我们将在登船列执行此操作,该列有 3 个值,指示乘客在哪个港口登船。
让我们看看默认情况下会发生什么:
emb = pd.get_dummies(df[‘Embarked’])

我不得不承认,这不是最具描述性的列名。幸运的是,有一个简单的解决方法:
emb = pd.get_dummies(df[‘Embarked’], prefix=’Embarked’)

现在情况有所好转。仍然不理想,因为我们有共线性问题。我们不需要 3 列来知道乘客在哪个港口上船。看一下第一行——C 和 Q 的值都是 0,这表明乘客登上了港口 S(南安普敦)。
这个问题有一个快速解决方案:
emb = pd.get_dummies(df[‘Embarked’], prefix=’Embarked’, drop_first=True)

将 drop_first 值指定为 True 解决了共线性问题。现在,您可以将该数据框架连接到原始数据框架,并继续进行分析。
在你离开之前
这并不是熊猫图书馆的全面指南,因为网上已经有很多这样的指南了。相反,我想分享我在最初的数据清理过程之后使用的一些功能(填充缺失值和处理损坏的记录)。
我希望你已经设法从这篇文章中得到了一些有用的东西。如果你有这三个功能的其他例子,请在评论区分享。
感谢阅读。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
初学者的 3 大熊猫功能
想学习 Python 中的数据分析? 那么就没有回避熊猫了,强大的 Python 库正好可以做到这一点。

Arif Wahid 在 Unsplash 上拍摄的照片
根据官方文件:
Pandas 是一个开源的、BSD 许可的库,为 Python 编程语言提供了高性能、易于使用的数据结构和数据分析工具。[1]
你应该在几乎所有的情况下使用它——唯一的例外是当你的数据集有几个 GB 大的时候——那时,也只有那时,你才需要一个更复杂的库,比如 Dask 或 PySpark 。
对于这篇文章,我选择使用著名的泰坦尼克号数据集,主要是因为它受欢迎,非常干净,并且容易理解。您只需要导入 Pandas 库:
import pandas as pd
并从提供的 URL 加载数据集:

现在你已经准备好跟随了!
头部()和尾部()
这两个函数几乎是我所做的任何分析的第一步。你已经加载了数据集,唯一合乎逻辑的事情就是看看看起来怎么样。
您可以使用head()函数查看前 5 行,使用tail()函数查看后 5 行。
数字 5 并不是一成不变的,可以很容易地改变,但一会儿会有更多的变化。这是默认情况下的输出,没有改变参数:


正如我所承诺的,下面是如何更改希望返回的行数:

挺容易的吧? 是的,以防你想知道 Bamboolib 是什么:
学习熊猫和数据分析从未如此容易
towardsdatascience.com](/introducing-bamboolib-a-gui-for-pandas-4f6c091089e3)
值计数()
当想要获得任何分类属性的“摘要”时,该函数非常有用。例如,您希望了解每个可能的值在属性中的表现程度。
幸运的是,我们可以在Embarked属性上执行这个操作,它向我们显示了有多少乘客登上了 where ( C =瑟堡;Q =皇后镇;S =南安普顿):

但是,如果您不关心计数,而是想查看百分比中的值,该怎么办呢?没问题,只需修改normalize参数:

然而,这并没有真正输出百分比。不用担心,你唯一要做的就是把所有东西都乘以 100:

我对value_counts()函数的主要问题是,默认情况下,它不包括缺失值。这真的没什么大不了的,因为您只需再指定一个参数的值,称为dropna:

这就是我所知道的关于这个函数的全部内容。我每天都用它,真的没有再用过它。
让我们跳到最后一个。
isnull()
这是我今天要讲的最后一个初级函数。该函数将接受一个系列甚至一个数据帧对象,如果值丢失,则输出真,否则输出假。让我们更深入地探讨一下:

输出不容易处理。仅仅通过查看,你无法知道这一列中有多少缺失值。幸运的是,Python 将 False 解释为 0,将 True 解释为 1,这意味着我们可以轻松地调用sum()函数:

这就是我们想要的结果!它指出在属性Age中有 177 个丢失的值。
就像我之前说过的,你可以在整个数据帧上调用isnull()函数。如果对结果求和,您将分别获得所有列名和缺失值数量的列表:

喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
想要更多吗?
前一段时间,我发表了一些关于熊猫各种功能的文章,所以一旦这些功能成为你的第二天性,你就可以去看看:
停止重新发明轮子。说真的。
towardsdatascience.com](/3-pandas-functions-you-should-be-using-more-often-696b41e8d7ca) [## 你不知道的熊猫的三大功能(大概)
为我节省了大量时间和挫折的功能
towardsdatascience.com](/top-3-pandas-functions-you-dont-know-about-probably-5ae9e1c964c8)
参考
熊猫的三大功能我希望我能早点知道
节省时间和精力的功能——一定要了解它们。
数据科学是一个如此广阔的领域,不可能有人精通每一种语言和每一个库——在这个行业呆了这么久,我知道的就这么多。不断的学习让我在游戏中坚持下来,回头看看这篇文章中的函数将会节省大量的时间(和精力)。

照片由 Kilyan Sockalingum 在 Unsplash 上拍摄
其中一些纯粹是一个功能,但另一方面,一些是指你使用熊猫的方式,以及为什么一种方法比另一种更好。
所以让我们从第一个开始——它的效率可能会让你吃惊。
itertuples()
等等,什么?是的,这不是一个函数,它指的是使用 Pandas 的更有效的方式,因此是通过数据集迭代的更快的方式。
现在,在您在评论部分为难之前,我知道有更有效的方法来对列值求和,但是我这样做只是为了说明一点。
我们将声明一个只有一列的简单数据集,包含从 1 到 100 万的数字。方法如下:
df = pd.DataFrame(data={
'Number': range(1, 1000000)
})
下面是前几行的样子:

现在让我们用错误的方式做事。我们将声明一个变量total并将其设置为0。然后,通过使用iterrows(),我们将对数据集进行迭代,并将total增加当前行的值。此外,我们将测量时间。代码如下:
%%timetotal = 0for _, row in df.iterrows():
total += row['Number']
total**>>> Wall time: 18.7 s**
对于这个琐碎的操作,几乎需要 19 秒——但是有更好的方法。让我们现在做同样的事情,但是用iteruples代替iterrows:
%%timetotal = 0for row in df.itertuples(index=False):
total += row.Number
total**>>> Wall time: 82.1 ms**
我不会做计算,但速度的提高是显着的。下次执行循环时记住这一点。
nlargest()和 nsmallest()
就在昨天,我还在计算两个纬度/经度对之间的千米距离。这是问题的第一部分,第二部分是选择距离最小的前 N 个记录。
回车— nsmallest()。
顾名思义,nlargest()将返回 N 个最大值,而nsmallest()则正好相反。
让我们看看它的实际效果。对于实践部分,我准备了一个小数据集:
df = pd.DataFrame(data={
'Name': ['Bob', 'Mark', 'Josh', 'Anna', 'Peter', 'Dexter'],
'Points': [37, 91, 66, 42, 99, 81]
})
这是它的样子:

现在,让我们假设这个数据集不包含 6 行,而是包含 6000 行,您希望找出哪些学生表现最好,因此他们有最大的点数。一种方法是这样的:
df['Points'].nlargest(3)
不是最佳解决方案,因为它会导致以下结果:

这并不好,因为你并不清楚实际的名字。以下是改进的方法:
df.nlargest(3, columns='Points')
现在结果更加令人满意:

您可以使用几乎相同的逻辑找到 3 名表现最差的学生——使用nsmallest()函数:
df.nsmallest(3, columns='Points')
以下是输出结果:

现在让我们进行最后一个函数。
切割()
为了演示这个函数的功能,我们将使用上一节中的数据集。概括一下,这就是:
df = pd.DataFrame(data={
'Name': ['Bob', 'Mark', 'Josh', 'Anna', 'Peter', 'Dexter'],
'Points': [37, 91, 66, 42, 99, 81]
})

cut()函数背后的基本思想是将宁滨值分成个离散区间。下面是最简单的例子——我们将从Points属性创建两个 bin:
pd.cut(df['Points'], bins=2)

暂时没什么用处。但是如何声明第一个 bin 从 0 到 50,第二个 bin 从 50 到 100 呢?听起来像个计划。代码如下:
pd.cut(df['Points'], bins=[0, 50, 100])

但是,假设你想显示Fail而不是(0, 50],显示Pass而不是(50, 100]。下面是如何做到这一点:
pd.cut(df['Points'], bins=[0, 50, 100], labels=['Fail', 'Pass'])

这下好了。
在你走之前
如果你刚刚开始,这个功能将帮助你节省时间和精力。如果你不是,阅读这篇文章将帮助你巩固这些函数存在的知识——因为很容易忘记它们并从头开始编写逻辑。
但是这样做没有意义。
我希望你喜欢它。感谢阅读。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
每个数据科学家都会犯的 3 大编程错误
编程;编排
如何使用熊猫、Sklearn 和函数

本文指出了前景数据科学家最常犯的错误,并讨论了如何避免这些错误。事不宜迟,让我们直入主题吧。
熊猫的低效利用
Pandas 是数据科学家经常用来处理结构化数据的库。最常见的错误是使用“for 循环”遍历数据帧中的行。Pandas 具有内置函数,例如apply或applymap,使您能够对数据帧的所有行的选择或所有列应用函数,或者在满足条件时应用函数。然而,最理想的情况是,您可以使用效率最高的 Numpy 数组。
效率低下:
my_list=[]
for i in range(0, len(df)):
l = myfunction(df.iloc[i]['A'], df.iloc[i]['B'])
my_list.append(l)
df['newColumn'] = my_listTime:640ms
高效:
df['newColumn'] = myfunction( df['A'].values, df['B'].values)Time: 400 µs
或者给定如下数据帧:
df = pd.DataFrame([[4, 9]] * 3, columns=['A', 'B'])
**>>>** df
A B
0 4 9
1 4 9
2 4 9
计算每个元素的平方根
df.apply(np.sqrt)
**>>>** df
A B
0 2.0 3.0
1 2.0 3.0
2 2.0 3.0
来源:https://pandas . pydata . org/pandas-docs/stable/reference/API/pandas。DataFrame.apply.html
2.Sklearn 的低效使用
Sklearn (scikit-learn)是数据科学家用来训练机器学习模型的 Python 库。通常在训练一个模型之前需要转换数据,但是如何建立一个转换数据然后训练的管道呢?您可能希望自动化这一点,尤其是当您希望在交叉验证中每个文件夹都应用转换时。遗憾的是,库中最常用的函数是train_test_split。许多数据科学家只是转换数据,使用train_test_split,在一组上训练,在另一组上测试。
这听起来没那么糟糕,但是当你没有一个大的数据集时可能会特别糟糕。交叉验证对于评估模型如何对看不见的数据进行归纳非常重要。因此,一些数据科学家可能热衷于在每次验证迭代之前实现一个函数来进行转换。
Sklearn 有一个 Pipeline 对象,可以用来在交叉验证过程中转换数据和训练机器学习模型。
在下面的例子中,PCA 在逻辑回归之前应用于交叉验证的每个折叠,同时,进行网格搜索以找到模型的参数以及 PCA 的参数。
import numpy as np import matplotlib.pyplot as plt
import pandas as pd
from sklearn import datasets
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV # Define a pipeline to search for the best combination of PCA truncation
# and classifier regularization.
pca = PCA() # set the tolerance to a large value to make the example faster
logistic = LogisticRegression(max_iter=10000, tol=0.1) **pipe = Pipeline(steps=[('pca', pca), ('logistic', logistic)])**
X_digits, y_digits = datasets.load_digits(return_X_y=True)
# Parameters of pipelines can be set using ‘__’ separated parameter
names:
param_grid = {
'pca__n_components': [5, 15, 30, 45, 64],
'logistic__C': np.logspace(-4, 4, 4),
} search = GridSearchCV(pipe, param_grid, n_jobs=-1) search.fit(X_digits, y_digits) print("Best parameter (CV score=%0.3f):" % search.best_score_) print(search.best_params_)
来源:https://sci kit-learn . org/stable/tutorial/statistical _ inference/putting _ together . html
3.不使用函数
一些数据科学家不太关心他们的代码表示和格式,但是他们应该关心。与只在单个文件或笔记本中编写脚本相比,编写函数有几个好处。这不仅更容易调试,而且代码可以重用,更容易理解。这篇帖子更详细地展示了函数在数据科学中的应用,尽管我不同意作者的观点,即你不能在 Jupyter 笔记本中复制这种方法。此外,作为一名数据科学家,你应该致力于保持代码干燥。那就是不要重复自己!消除重复使代码可以被你和其他可能接触到你的代码的人重用。此外,它还有助于维护和识别错误。
例如,您可能有这样几行数据帧操作:
df.drop(columns=['A','B'],inplace=True) df['datetime']=pd.to_datetime(df['dt'])
df.dropna(inplace=True)
但是效率不高,因为每次要预处理数据帧时,都必须复制粘贴所有代码行,并根据需要编辑列名。
相反,如果有一个处理所有操作的函数,那就更好了。
processor = Preprocess(columns_to_drop, datetime_column, dropna_columns)
你可以在这里找到预处理的实现。
如果您是数据科学新手或正在准备数据科学面试,您可能也会对 3 个数据科学家最常问的 Python 面试问题感兴趣
我希望早点知道的 3 大 Python 函数
你不知道你不知道什么。
尽管 Python 是最简单的编程语言之一,但它仍然有各种各样的内置函数,这些函数不为广大读者所知——主要是因为大多数书籍或在线课程都没有涉及到它们。

然而,这并不意味着它们是不相关的。
本文的目的是向您介绍一些鲜为人知的功能,并展示如何以最简单的方式实现它们。目标读者至少了解 Python 和一般编程的基础,并致力于进一步提高他/她的技能。
这篇文章的结构如下:
- 基本设置
- 功能#1:
isinstance() - 功能#2:
hasattr() - 功能#3:
exec() - 结论
所以,事不宜迟,我们开始吧!
基本设置
现在,我们不需要导入任何东西,因为本文完全是基于 Python 的,但是我们仍然需要声明一些要使用的东西。
对于下面的大多数例子,我们将使用这个简单的类:
class Circle():
def __init__(self):
self.radius = None
现在里面什么都没有发生——这很好。我们仍然可以用它来演示这些函数是关于什么的。
好的,你在跟踪我吗?好,我们开始吧。
功能#1: isinstance()
官方文档[1]很好地解释了这个函数的含义:
如果 object 参数是 classinfo 参数或其(直接、间接或虚拟)子类的实例,则返回 True。
如果这对你来说太专业了,这里有一个更清晰的解释。假设您已经声明了一个函数,但不确定它将返回什么——例如,如果一切顺利,您需要一个浮点数,如果出错,您需要一个包含错误消息的字符串。isinstance()前来救援。
对于实用部分,我们将使用上面声明的类,并创建它的一个实例:
circle = Circle()
现在我们可以使用isinstance()来检查circle对象是否属于Circle类型:
if isinstance(circle, Circle):
print('yes')**>>> yes**
这可能是有用的信息。请记住,您还可以检查某些内容是否是某种内置类型,如字符串、列表、元组等。
函数#2: hasattr()
这个也是很有用的。用一句话来说明它的用途,我认为如果对象包含指定的属性,那么hasattr()简单地返回 True,否则返回 False。
让我们来看看实际情况。我们已经声明了一个Circle类,并给了它一些属性— radius。我们现在可以使用hasattr()来检查属性是否存在于实例中。
代码如下:
circle = Circle()if hasattr(circle, 'radius'):
print('yes')**>>> yes**
差不多就是这些了。这个函数的用例很大程度上取决于你所做的编程类型。作为一名数据科学家,我有时会在我的类中动态地创建属性,因此以某种方式检查属性是否存在是一件好事。
好吧,我们继续。
功能#3: exec()
如果您有 SQL 背景,那么您可能对动态查询构建的概念很熟悉。我们在 Python 中也有类似的东西——可能对大多数开发人员来说不太有用,但是知道有这种功能还是很好的。
与前两个函数不同,这里我们不需要我们的Circle类。我们将把两行 Python 代码放入一个多行字符串中,并对它们调用exec。
代码如下:
statement = '''a = 10; print(a + 5)'''
exec(statement)**>>> 15**
那么,这里刚刚发生了什么?
我们的语句作为 Python 代码逐行执行,尽管它实际上是一个字符串。
同样,您可能会发现这个函数不如前两个函数有用,这取决于您所做的工作类型。
结论
这就是你要的——一些我作为初学者不知道的功能,但是现在发现它们很有用。如果我早点知道它们,它们可能会节省我一些时间,或者至少让我的代码看起来更优雅,但事实就是这样。
感谢阅读,保重。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
参考资料:
[1]https://docs.python.org/3/library/functions.html#isinstance
你不知道的三大 Python 函数(可能)
更干净的代码和更少的循环?算我一个。
作为 21 世纪最流行的语言之一,Python 当然有很多有趣的功能值得深入探索和研究。今天将讨论其中的三个,每个都是从理论上和通过实际的例子。

我想介绍这些函数的主要原因是它们可以帮助你避免编写循环。在某些情况下,运行循环的成本可能很高,除此之外,这些函数还有助于提高速度。
以下是本文将涉及的功能:
map()filter()reduce()
即使你以前听说过这些功能,用更多的理论和例子来巩固你的知识也没有坏处。
所以事不宜迟,我们开始吧!
地图()
map()函数接受另一个函数作为参数,旁边是某种数组。这个想法是将一个函数(作为参数传入的那个)应用于数组中的每一项。
这很方便,有两个原因:
- 你不必写一个循环
- 它比循环快
让我们看看它的实际效果。我将声明一个名为num_func()的函数,它接受一个数字作为参数。该数字被平方并除以 2,然后返回。注意,操作是任意选择的,您可以在函数中做任何您想做的事情:

现在让我们声明一个要应用num_func()的数字数组。请注意,map()本身将返回一个地图对象,因此您需要将其转换为一个列表:

似乎该过程已成功完成。这里没有什么突破性的东西,但是尽可能避免循环是一件好事。
过滤器()
这里有另一个不错的函数可以节省您的时间——无论是在编写还是执行方面。顾名思义,这个想法是在数组中只保存满足特定条件的项目。
就像使用map()一样,我们可以预先声明函数,然后将它和可迭代列表一起传递给filter()。
让我们来看看实际情况。我已经声明了一个名为more_than_15()的函数,顾名思义,如果作为参数给出的项目大于 15:

接下来,我们声明一个数字数组,并将它们作为第二个参数传递给filter()函数:

正如所料,只有三个值满足给定的条件。同样,这里没有什么突破性的东西,但看起来比循环好得多。
减少()
现在的reduce()和前面两个有点不一样。首先,我们必须从functools模块导入它。这背后的主要思想是,它将给定的函数应用于项目数组,并将返回单个值作为结果。
最后一部分至关重要— reduce()不会返回一个项目数组,它总是返回一个值。让我们来看一张图,让这个概念具体化。

以下是在图表不是 100%清楚的情况下写出的逻辑:
- 5 与 10 相加,得到 15
- 15 与 12 相加,得到 27
- 27 与 18 相加,得到 45
- 45 与 25 相加,得到 70
70 是返回的值。从代码实现开始,让我们从functools模块导入 reduce 函数,并声明一个返回两个数之和的函数:

现在,我们可以用代码重新查看图表,并验证一切都正常工作:

现在还不要跳到注释部分——我很清楚还有其他方法来对列表项求和。这只是展示该函数如何工作的最简单的例子。
在你走之前
我希望你能在日常生活中利用这三种功能。速度的提高可能不会很大——这取决于您要处理的数据量——但是循环越少,代码看起来就越好。
如果你有一些其他的例子,不要犹豫,在评论区分享吧。
感谢阅读。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
前 3 名 Python 可视化库
我们都需要创造视觉效果来讲述我们的故事,但是我们如何创造呢?我从代码开始!

当创建不同的图时,三个 Python 可视化库是我的首选,它们是 Matplotlib 、 Bokeh 和 Plotly 。每个图书馆都有其不同和相似之处。Matplotlib 是一个静态绘图工具,而 Bokeh 和 Plotly 允许交互式的仪表板功能。因此,让我们简单介绍一下这三个库。
Matplotlib
Matplotlib 是一个 Python 库,它为用户提供了创建静态或动态可视化的能力。我通常倾向于使用 matplotlib 图来绘制任何可以保持静态的东西,比如报告或 PPT 文档中使用的视觉效果。我使用这个库中的标准图:条形图、时间序列分析的线图和热图。这个库的另一个很好的特性是它的 TeX 表达式解析器,它允许在绘图中使用数学表达式。添加这些表达式有助于格式化需要额外细节的绘图。
散景
Bokeh 是我最常使用的绘图库,因为它具有交互性。我特别喜欢的功能是它通过引入自定义 JavaScript 来扩展功能的能力,这“可以支持高级或专门的情况”,您可能会在绘图时遇到。散景允许在网页或笔记本中创建绘图、仪表盘和应用程序。我会注意到,有时我发现在笔记本中很难使用散景功能,比如按钮,但在网页中却很好用。当向最终用户提供仪表板时,过滤数据以定制绘图输出的能力是有用的。与其他绘图库相比,我最喜欢选择散景的一个用例是将其用于分类数据。我发现带抖动的分类散点图是各种仪表板的绝佳视图。我经常使用这种类型的情节,并发现它非常有益。
Plotly
我经常使用的最后一个绘图库是 Plotly,主要是为了它们的绘图功能。Plotly 提供了许多不同的方法来绘制和利用地图数据,如果您查看任何与位置相关的数据,这是非常好的。这些图对理解我基于位置的数据和向利益相关者展示变化非常有帮助。提供一个可视化的表示允许用户快速分解什么是重要的。这将使他们能够开始问更多的目标问题,例如为什么 X 比 Y 更多,或者为什么 Z 在最近几天改变了它的轨迹?如果你有任何位置数据,我建议查看 Plotly 的工具。
摘要
对于我的项目,这是我的三个常用库,用于可视化和仪表板。
- Matplotlib —通常用于静态绘图,您可能想要将其放入演示文稿、纸张或 PPT 中。
- 散景 —用于定制仪表板和交互式绘图的大型库。
- plottly—他们有各种位置数据的绘图工具,比如轨迹、热图等等。
你最喜欢或最常用的绘图工具是什么,为什么推荐它?
学习机器学习的三大资源
让我们面对事实——机器学习已经成为一个热门话题有一段时间了,这是有充分理由的——它可以帮助我们预测未来的行为,让我们的电子邮件免受垃圾邮件的困扰,并根据过去的喜好向我们推荐电影。

可能性是无穷无尽的,薪水是一流的,而且大多数时候,由于你得到的乐趣太多,感觉不像是工作。但是,如果没有先前的经验,你怎么能在合理的时间内学会机器学习呢?请继续阅读,寻找答案。
不管你的背景如何,第一步都是一样的。机器学习不仅限于数学博士。我没有数学博士学位,也不认为自己特别聪明——但我做的一件事是比我认识的任何人都努力。
如果你不愿意投入工作,那么高等学位就一文不值。
也就是说,首先,你应该对你的现状做一个可靠的客观检查。问自己以下问题:
- 我的编程技术有多好?
- 我上次做数学和统计是什么时候?
- 我愿意投入多少时间?
当您对上述问题有了答案,并且如果您认为有一两个领域需要重新审视,请参考我以前的一篇关于数据科学先决条件的文章:
查看学习线性代数、微积分、统计、概率和编程的最佳位置。
towardsdatascience.com](/the-ultimate-data-science-prerequisite-learning-list-348ce89805f9)
请注意,为了进行一些应用机器学习,你不需要成为这些领域的专家。比一般的数学家更擅长编程,比一般的程序员更擅长数学。这是黄金法则。
好了,还在这里? 好。现在,您已经准备好投入到令人惊讶、有时令人沮丧的机器学习世界中了。
1.Python 用于数据科学和机器学习训练营
这是一门在线课程,你需要花大约 22 个小时观看,可能需要 5 个小时才能完全理解。它从 Python 复习到库介绍,然后深入到机器学习算法。
我已经完成了这门课程,并认为这是了解机器学习的一个很好的方式,但也仅此而已。算法在中没有涉及太多的深度。虽然在完成课程后,你肯定能够实现它们并解决一些现实世界的问题,但你很可能不知道何时使用哪种算法以及如何调整它们(正确地)。
原因是,这门课的数学内容并不多。我觉得根本没有数学,只有各种库的 Python 实现。课程作者建议你应该在复习课程的同时复习《统计学习导论》这本书,以获得坚实的理论背景。我同意。
尽管如此,这个球场仍然是一个让你动手的好地方。
价格:古典 Udemy,售价 194.99 美元,但大多数时候你可以找到打折后只卖 $9.99 的。绝对值得投资。
您准备好开始成为数据科学家的道路了吗!这门综合课程将成为你学习的指南…
www.udemy.com](https://www.udemy.com/course/python-for-data-science-and-machine-learning-bootcamp/)
2.吴恩达在 Coursera 上的机器学习
我感觉这门课就像是入行的标准。直到今天,超过 120,0 00 名用户对该课程进行了评分,平均分数为 4.9 分(满分为 5 分)。这说明了一些问题。
这些视频的分辨率很低,但内容质量弥补了这一点。我要说这比我提供的第一个资源要深入得多,尽管吴先生说如果你不理解也不要担心,但还是要努力找出你的弱点并加以改进。
据我回忆,这些实验室使用的是一种奇怪的语言,叫做 Octave ,是 Matlab 的免费替代品。这几乎是唯一的缺点,因为今天你几乎只能用 Python 或 r 进行机器学习。
价格:观看视频讲座是免费的,但是如果你想要一个结业证书,你必须支付 100 美元。
该证书将是添加到你的 LinkedIn 个人资料中的一个奇特的东西,但在其他方面不是必要的。
机器学习是让计算机在没有明确编程的情况下行动的科学。在过去的十年里…
www.coursera.org](https://www.coursera.org/learn/machine-learning)
3.哈佛大学的 CS109A
与前两个选项不同,这个选项不是视频格式的。这是一个 GitHub 知识库,包含理论部分的 PDF 讲座和实验室的 Jupyter 笔记本。
老实说我不知道这个东西是怎么免费提供的。
它是由世界顶尖大学之一制作的全套课程,完全免费。它包含 20 多个讲座,13 个实验室,总体来说是一个开始您的旅程的好地方。老实对你说,自从我最近接触到它,我还没有完成整个作品,但是从我所报道的来看,它是一部杰作。
价格:就像我说的,是免费的,只要克隆回购就可以了。
此时您不能执行该操作。您已使用另一个标签页或窗口登录。您已在另一个选项卡中注销,或者…
github.com](https://github.com/Harvard-IACS/2019-CS109A)
在你走之前
这就是你想要的——开始你的机器学习之旅的 3 个惊人资源。这并不容易,尤其是如果你缺乏一些背景知识,需要先在这方面下功夫,但这是值得的。
如果我今天从零开始,我会从的最后一个选项——哈佛大学的一门课程——开始,它对我来说是一个全面的赢家。
这并不意味着其他两个选项是不好的,他们是惊人的。我的总体建议是:
- 如果你想对理论部分有一个高层次的概述,并花更多的时间去做一些实际的东西,那么选择第一个
- 如果你想了解全貌,不喜欢视频课程,请选择第三个
- 如果你想要一些背景知识,但也想了解模因,选择第二个
感谢阅读。保重。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
硒的三大功能让你的生活更轻松
每个人都应该知道的基本功能
在今天这样一个快节奏的世界里,有许多事情我们必须自动化以便更有生产力或效率,尽管我们有时并不真的喜欢它。
想象一下,你有一项需要花 2 个小时才能完成的任务,但是你可以制作一个工具在 30 秒内自动完成。

这就是网页抓取的目的。这是一个术语,用来从网页上获取数据,然后制作出来,这样你就不用动一根手指了!
获取数据,然后按照你想要的方式进行处理。
这就是为什么今天我想向大家展示 Selenium 的一些顶级功能,Selenium 是一个用于 Web 抓取的库。
我以前写过关于 Selenium 和 Web Scraping 的文章,所以在你开始之前,我建议你阅读这篇文章“关于 Web Scraping 的一切”,因为它的设置过程。如果你已经比较精通网络抓取,可以试试我的高级脚本,比如“如何用 Python 省钱”和“如何用 Python 制作分析工具”。
让我们直接投入进去吧!
获取()
get 命令启动一个新的浏览器,并在 C hrome Webdriver 中打开给定的 URL。它只是将字符串作为您指定的 URL,并打开它进行测试。
如果您使用的是 Selenium IDE,它类似于 open command。
示例:
driver.get(“https://google.com");
“驱动程序”是您的 Chrome Webdriver,您将在上面执行所有操作,在执行上面的命令后,它看起来像这样:

测试目的 Chrome 窗口
find_element()
当您想要访问页面上的元素时,这个函数非常重要。假设我们想要访问“Google search”按钮来执行搜索。
有许多方法可以访问元素,但是我更喜欢的方法是找到元素的 XPath。XPath 是元素在网页上的最终位置。
通过点击 F12,您将检查该页面,并获得关于您所在页面的背景信息。

通过单击选择工具,您将能够选择元素。
找到按钮后,单击右边蓝色标记的部分,复制元素的“完整 Xpath”。
self.driver.find_element_by_xpath('/html/body/div/div[4]/form/div[2]/div[1]/div[3]/center/input[1]')
这是查找特定元素的完整命令。与常规 XPath 相比,我更喜欢完整的 XPath,因为如果新会话中的元素发生变化,常规的 XPath 可能会发生变化,而下次执行脚本时,它就不起作用了。
其他 find_element 函数概述。(还有 find _ elementss)

find_element 函数的所有选项
send_keys()并单击()
我为你添加了一个额外的功能,所以我们可以通过这个例子,使它完全工作。
Send_keys 函数用于将文本输入到您通过 find_element 函数选择的字段中。
假设我们想在 google 中输入“plate”并执行搜索。我们已经有了我们的“谷歌搜索”按钮,现在我们只需要输入文本,并在点击功能的帮助下点击按钮。
google_tray = self.driver.find_element_by_xpath('/html/body/div/div[4]/form/div[2]/div[1]/div[1]/div/div[2]/input')google_tray.send_keys("plate")google_search = self.driver.find_element_by_xpath('/html/body/div/div[4]/form/div[2]/div[1]/div[3]/center/input[1]')google_search.click()
为了更加清晰,我将元素保存在各自的变量中,然后对它们执行函数。
最后你会得到这个:

临终遗言
如前所述,这不是我第一次写关于 Selenium 和 Web 抓取的文章。
如果你想了解更多关于这个话题的知识,请查看“25 个 Selenium 函数,它们将使你成为网络抓取专家”。
我还想介绍更多的功能,还会有更多的功能。为了跟上,关注我更多!
感谢阅读!
查看我的其他文章并关注我的媒体
当我发布一篇新文章时,请在 Twitter 上关注我
Python 和数据科学的 3 大 VS 代码扩展
谁不喜欢智能 IDE 呢?
IDE 太棒了。如果你不知道 IDE 是什么,它代表 集成开发环境 ,这意味着它不同于普通的文本编辑器,它支持代码编辑、林挺、语法突出显示和一系列其他很酷的东西,从长远来看,这些都将帮助你并节省你的时间。

总的来说,我对 IDE 的主要问题是——它们太重了。你的普通 IDE,比如 PyCharm ,会占用大量的磁盘空间,还会占用大量的 RAM,并且会花费更多的启动时间。甚至不要让我开始谈论 Visual Studio 。
这也是我今天要把重点转移到 Visual Studio 的更轻巧的兄弟 Visual Studio 代码 的原因。这是一个简单而轻量级的 IDE,多年前我就喜欢上了它,并且从未回头。
默认情况下,VS 代码与其他轻量级 IDE(如 Sublime 或 Atom )没有太大区别,除了更好的设计(只是个人偏好),但通过各种插件,它可以匹配更“严肃”的 IDE,在某些情况下甚至会让你花钱。
今天,我想把重点放在 3 个插件上,它们将会为你节省很多时间,同时考虑到 Python 和数据科学。在开始之前,让我们检查一下需求。
要求
开始之前,请确保安装以下设备:
- Python (我用的是 3.7.6)
- Visual Studio 代码
- VS 代码的 Python 扩展
最后一个你将不得不通过 VS 代码本身来安装,但是由于安装非常简单(只需一次点击),我不会在这里涉及它。现在我们可以进入正题了。
1.笔记本支持
我是一名数据科学家,喜欢笔记本。说真的,它们是我典型工作流程中如此重要的一部分。我很少想直接跳到代码编辑器并输入解决方案——主要是因为笔记本非常适合探索性分析,这是数据科学的一大部分。
因此,当笔记本支持在几个月前首次被引入 VS 代码时,我很高兴能尝试一下。起初,它们似乎比传统的 Jupyter 笔记本慢一点,但速度问题现在似乎得到了解决。
你不需要安装任何插件来使用笔记本,只要你有前面需求部分提到的 Python 扩展。
你需要做的就是创建一个扩展名为.ipynb的文件——我把我的文件命名为sample.ipynb
下面是所有事情的工作原理——我准备了一个简单的 GIF,而不是一堆截图(耶科学):

1.笔记本支持
这就是它的全部功能-您现在可以像在任何常规笔记本电脑环境中一样工作。不客气,玩得开心。
2.autoDocstring
从它的名字,我敢肯定你能猜到它背后的目的——它将帮助你管理文档字符串。要使用它,你需要先安装它——所以转到 VS 代码的扩展部分,键入 autoDocstring 并点击 Install 。
为了看看它对我们有什么样的魔力,我们需要创建一个 Python 文件——我把我的文件命名为main.py
我在其中声明了一个函数,它将两个数字相加并返回它们——这两个数字是由用户用函数参数的魔力指定的。
要使用autoDocstring包,首先需要在函数声明下面键入三个双引号""",然后按回车键。这里有一个简短的演示:

2.autoDocstring
现在您可以逐段完成 docstring,按下选项卡键跳到下一段。
这个扩展对你们中的许多人来说肯定不是一个令人惊叹的因素,但是它将使你的 docstrings 保持干净和一致。
3.AREPL
难道你不讨厌繁琐的控制台打印,只是找出你的变量的当前值吗?
别担心,AREPL 会帮你的。这是一个插件,它会在你每次敲击键盘上的一个字母时改变它的输出(有时会很烦人),但也会告诉你你的变量保存的值,并显示print语句的输出,而不需要你去运行程序。
起初听起来可能不多,但是相信我,如果你正在做任何探索性的工作,这是一个白天和夜晚的差别(我想你是这样的,因为你正在阅读关于数据科学的)。
要使用它,你需要像安装autoDocstring扩展一样安装它。到目前为止,我相信您已经知道如何安装扩展,所以我不会讨论这个问题。
安装完成后,创建一个虚拟 Python 文件——我已经调用了我的文件main.py,你会立即在右上角看到一个红色图标(不是关闭窗口的那个)。当你按下它时,一个窗口就会出现在屏幕的右边。
现在一切顺利吗? 好。让我们看看扩展的实际应用:

3.AREPL
您可以明白我说的扩展有点烦人是什么意思——当实际上我还没有完成语句时就显示错误。但是如果你权衡利弊,我会说利远大于弊。
在你走之前
VS 代码和 Python 都有很多可用的扩展,Python 是当今最流行的语言之一。
这篇文章并没有列出所有好的插件,但是我展示了我认为最有用的插件。如果你想看更多像这样的文章,一定要让我知道,我一定会给你发。
感谢阅读。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
* [## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)*
VSCode 中数据科学家的 4 大代码查看器
让 YAML、JSON、CSV 和 Jupyter Notebook 为你工作,而不是与你作对

动机
数据科学领域需要处理不同格式的数据和文件,如 YAML、JSON、CSV 和 Jupyter Notebook。这些格式服务于不同的目的。有很多,因为每个都有自己的优点和缺点。
您可能会在一些琐碎的任务上花费数小时,比如理解 json 文件的内容,或者确保为列表编写正确的 yaml 代码。幸运的是,有一个针对 VSCode 的方法。
如果你不知道 VSCode ,它是微软为 Windows、Linux 和 macOS 制作的免费源代码编辑器。我喜欢 VS 代码的两大优点是键盘快捷键和有用的扩展。
使用 VSCode 扩展是救命稻草。在我的上一篇文章中,我介绍了我最喜欢的两个扩展:
在这篇文章中,我将介绍 4 个用于查看不同格式文件的其他扩展。这些工具极大地促进了我作为数据科学家的工作流程。我们开始吧!
CSV 至表
CSV 文件很常见,但很难阅读。读取它们的常用方法是打开一个电子表格或使用pandas.read_csv().,但这两种方法都要求您要么打开笔记本,要么关闭 VSCode 编辑器,找到 csv 文件所在的目录并打开电子表格。
有比那更快的方法。CSV to Table 是一个扩展,可以将您的 CSV/TSV/PSV 文件转换为 ASCII 格式的表格,如下所示。

现在,您不仅可以查看格式良好的 csv 文件,还可以在表格中编辑 csv 文件!多酷啊。
要使用扩展,请将 CSV 安装到表中。键入Ctrl + Shift + P 然后选择CSV: Edit as csv.
Json 编辑器
Json 是保存数据的另一种常见格式。与 csv 相比,读取数据可能更容易,也可能不容易。当 Json 有很多嵌套对象时,它变得非常难以阅读。
如果您发现自己花了很长时间查看 json 文件,试图理解其内容,Json Editor 将是您的救命稻草。

在 Json Editor 中,您可以在一个树状结构中查看 Json 文件,如右边屏幕所示。更好的是,您可以在树视图中编辑 json 文件!
要使用该扩展,请安装 JSON 编辑器。键入Ctrl+Shift+P和JSON editor: Start JSON editor session.在设置中更改主题,如果您想设置“亮”或“暗”主题,请键入vscode-json-editor.theme。
YAML
Yaml 是一种人类可读的数据序列化语言,通常用于配置文件。Yaml 比 json 更容易阅读和编辑,但是它并不总是直观的,特别是对初学者来说,正确地编写 yaml 或判断 yaml 是表示列表、字典还是字符串。
但是幸运的是,有一个叫做 YAML 的扩展。YAML 可以做以下事情:
- 检测整个文件是否是有效的 yaml。

- 文档大纲显示(Ctrl + Shift + O)
- 自动完成(Ctrl +空格键)
- 允许格式化当前文件

有了 YAML,你可以了解文件的结构,对象的类型,并快速访问该对象!
Jupyter 观察器
Jupyter 笔记本在数据科学家中极为常见。尽管 Jupyter Notebook 对分析数据很有用,但你不能只是打开一个. ipynb 文件就期望看到它。您需要通过在终端上键入jupyter notebook来打开 jupyter 笔记本会话。
如果你想用笔记本工作一段时间,这没问题。但是,如果您只想快速分析或可视化 VSCode 中的数据,而不打开新的会话,该怎么办呢?幸运的是,有一个叫做 Python 的扩展。

如果我打算暂时使用 Jupyter 笔记本,我更喜欢经典笔记本,但如果我只想快速分析数据,我会使用这款笔记本。
要使用该扩展,只需安装微软的 Python 扩展。现在,您可以查看和编辑笔记本,而无需启动新的会话!
结论
恭喜你!您已经学习了格式化 VSCode 的 4 个扩展。能够格式化我的文件让我的生活变得简单多了!我希望你在尝试了这些扩展之后也有同样的感觉。
星这个回购如果你想检查我写的所有文章的代码。
我喜欢写一些基本的数据科学概念,并尝试不同的算法和数据科学工具。你可以在 LinkedIn 和 Twitter 上与我联系。
如果你想查看我写的所有文章的代码,请点击这里。在 Medium 上关注我,了解我的最新数据科学文章,例如:
您可以收集数据或创建自己的数据
towardsdatascience.com](/how-to-create-fake-data-with-faker-a835e5b7a9d9) [## 如何使用 HyperDash 远程监控和记录您的机器学习实验
培训需要很长时间才能完成,但你需要去洗手间休息一下…
towardsdatascience.com](/how-to-monitor-and-log-your-machine-learning-experiment-remotely-with-hyperdash-aa7106b15509) [## Datapane 简介:构建交互式报表的 Python 库
创建精美报告并与您的团队分享分析结果的简单框架
towardsdatascience.com](/introduction-to-datapane-a-python-library-to-build-interactive-reports-4593fd3cb9c8) [## 如何在一行代码中跨不同环境共享 Python 对象
为建立与他人分享你的发现的环境而感到沮丧?以下是如何让它变得更简单
towardsdatascience.com](/how-to-share-your-python-objects-across-different-environments-in-one-line-of-code-f30a25e5f50e)
四大数据仓库反模式
当数据仓库超出其核心目的时,这些曾经受人尊敬的系统会将我们的数据和项目置于风险之中。下面是四种最常见的数据仓库反模式。

照片由 Ascend.io 上的 Ascend 博客拍摄
“最好的投资是自己交易的工具。”
—本杰明·富兰克林
大量的数据、系统及其互连性持续增长,变得越来越复杂。不足为奇的是,大多数数据项目即使没有彻底失败,也会遇到严重的延迟,这通常可以追溯到我们使用的工具。针对数据生命周期的各个阶段设计了大量有效的工具,但是如果这些工具使用不当,项目往往从一开始就注定失败。
“如果你只有一把锤子,所有的东西看起来都像钉子。”
—马斯洛/吐温/佛
以数据仓库为例。数据团队通常依赖数据仓库来获得速度和便利性。这是一个熟悉的工作环境,更重要的是,它就在那里。但是,在一系列一次性的生产使用和更大、更复杂的数据转换给系统增加了负载之后,曾经轻松的工作环境可能会变得完全相反。当数据仓库超出其核心目的时,这些曾经受人尊敬的系统会将我们的数据和项目置于风险之中。
下面是四种最常见的数据仓库反模式。
用作数据湖的数据仓库
在当今的数据世界中,数据仓库和数据湖都是广泛使用的技术——有时会相互替代使用。但是不要搞错:这些技术有很大的不同。组织在交替使用这些系统时应该小心。
数据仓库的成本、性能和复杂性随着本应驻留在别处的数据的不必要增加而显著增加,例如旨在高效存储大量数据的数据湖。这些湖支持对数据进行清理、建模和提炼的灵活处理,以使数据有意义。另一方面,数据仓库存储旨在支持分析、数据应用和机器学习项目的精炼数据。
这两个系统提供相似的功能,事实上,如果使用得当,它们可以相互补充。数据湖提供了为下游用例灵活操作、探索和准备数据的能力。在这一点上,数据仓库将提取提炼后的数据,并快速提供给用户。
用作数据管道的数据仓库
数据仓库中的 ETL 非常适合结构化数据。然而,当大量快速移动的半结构化和非结构化数据加入混合数据时,这一过程开始迅速崩溃。高种类、高容量和高速度数据的爆炸已经超出了 ETL 的能力,使得数据管道成为任何现代数据架构的基本部分。数据工程团队已经发现,构建它可能极其复杂和耗时。数据管道需要大量的编码,以及不成比例的维护和优化时间。这使得许多开发人员转向数据仓库进行“最后一英里”的数据转换,而不是管道。
用这些转换使您的仓库超载很容易,但是这样做会很快导致大量数据“痛苦”。将数据和处理任务推送到仓库需要大量的计算能力,这很快就会变得昂贵。此外,这些作业会与资源争夺标准仓库查询,从而影响其他下游用户和应用程序的性能。虽然有一些工具可以通过增量缓存部分查询及其数据来减轻这种痛苦,但这些方法也带来了新一轮的数据完整性和沿袭挑战,这对当今大多数企业来说都是一个问题。
相反,许多数据团队现在已经开始卸载他们的数据仓库,并将处理转移到基于 Apache Spark 的管道中。这种转变带来了更大的规模和效率,让数据团队和 CFO 都很高兴。
用作数据科学处理引擎的数据仓库
大规模数据处理技术的当前可用性因素经常迫使数据科学家严重依赖资源和成本密集型数据仓库来实现核心数据科学功能。虽然这些是事实上的商业智能和报告系统,但重要的是数据科学家不要只局限于仓库可以提供的东西。
数据仓库保存已经结构化的数据,旨在快速回答关于已知数据的已知问题。然而,考虑到所需的成本和前期建模,仓库可能不是运行数据科学团队所需的实验和复杂分析类型的理想系统,这些团队寻求在各种数据中找到未知模式。数据科学家通常需要比在仓库中发现的大量建模的数据集更具流动性和原始上下文的系统,以便快速迭代、实验和发现这些未知以作为模型进行生产。此外,更多的数据有利于数据科学家提高准确性,这通常意味着 Apache Spark 等工具更适合更大的数据量。
数据科学最终仍然是一门科学;它是由研究、实验、测试和重复驱动的。为了实现这一点,数据科学家需要比数据仓库所能提供的更多的上下文、可伸缩性和可负担性,以便能够以业务所需的速度构建足够准确的模型。
数据仓库被用作数据开发的主要工具
传统的数据开发生命周期通常只允许在两个地方转换数据:当数据从其原始位置转移时,或者当从其最终静止位置查询数据时。然而,现代数据开发生命周期要灵活得多。正如现代软件应用程序是通过定义良好的 API 调用用多层微服务和编织令牌构建的一样,现代数据架构也越来越多地向更小、增量和迭代的阶段发展,可以很好地理解、维护和优化。
在现代数据开发生命周期中,并非所有数据都驻留在仓库中,用户被迫等待,直到数据集被配置为交付到那里。无法访问原始和中间阶段的数据会严重限制数据团队,导致迭代周期变慢。此外,访问额外数据集或功能的请求通常会导致数周的延迟,从而将项目和卫生置于风险之中。
对于高效且可预测的数据运营策略,必须使跨所有数据阶段的主动数据开发成为可能。虽然在过去,跨这些阶段维护和管理安全性、作业执行和存储是一项挑战,但新工具的出现使这一过程变得更加简单和安全,确保数据在其生命周期中的任何位置都可以访问和协作。
结论
在过去的几年中,数据仓库功能有了重大的创新。然而,这只能带我们到此为止。归根结底,无论我们将数据仓库推进和扩展到什么程度,它们都是为优化的下游使用而专门构建的。就规模、成本和灵活性而言,很难击败数据湖和数据管道,最近的创新使它们比以往任何时候都更快、更容易使用。
当今的数据世界是由强大的技术产品驱动的,但是要确保您在数据开发生命周期的每个阶段为正确的用户使用正确的工具,以获得最佳结果。
面向工程和研究的 4 大 Python 模块
面向当今工程师和研究人员的 Python 模块

在 Unsplash 上拍摄的 ThisisEngineering RAEng
Python 对于初学者来说是完美的,因为它的语法易于掌握和理解。凭借这一优势,它已经是工程和研究领域的领先编程语言。作为工程师,我们的任务是“应用科学和数学原理开发技术问题的经济解决方案”。
Python 是众多可以帮助我们完成这项任务的工具之一。我在工作中使用 Python 从技术规格表中提取信息,处理实验和测试结果,并解决数值计算。这里有一些我最喜欢的 Python 模块,每个工程师和研究人员都可以利用它们来提高日常产出。
1.数学模块
数学模块是 Python 标准库的一部分,包含工程计算中常用的数学工具和常数。需要知道角度的反正弦?一行代码就可以完成这项工作。
[math.asin(x](https://www.w3schools.com/python/ref_math_asin.asp))
记不住欧拉数,或者圆周率的第四位小数?没问题,数学模块会帮我们搞定的。
math.e **# returns 2.718281828459045**
当然,被命名为数学模块,它也能计算函数,如三角函数和对数函数。我最喜欢的另一个操作符是“_”操作符,Python 在这里返回上一次操作的值。
23.74*0.56 **# returns 13.2944**
_+0.582 **# returns 13.8764**
_/math.e **# returns 5.104842277471403**
当我们需要快速计算时,这非常方便。让我们来看一个使用数学模块中的方法从一些振动传感器读数(读数的幅度)计算均方根数据的例子。

Jorge Ramirez 在 Unsplash 上拍摄的照片

以 10 个传感器能量读数为例,我们可以通过下式求出均方根值:
**import** math
N = 6with open("data.txt") as file:
for i in range(6):
line = next(file).strip()
print(line)

list **=** [0.09539392, 1.722933545, 3.220776304, 0.291376046, 1.741062894]
n **=** len(list)
squares **=** 0
for i in range(0,n):
squares **+=** (list[i]******2)
mean **=** (squares **/** (n))
RMS **=** math.sqrt(mean)
print(RMS)# **returns** **1.8147837337772996**
2.Numpy 模块
Numpy(Numeric Python)是为科学计算而设计的 Python 模块。它有许多有用的特性,它的核心数据类型是数组。Numpy 数组是 n 维数组对象,用于表示向量和矩阵。

照片由 Antonio Garcia 在 Unsplash 拍摄
下面是一些基于来自 Kaggle 的温度传感器数据集使用 Numpy 的例子。
我们可以检查数据集的内容,即存在的列、读数的数量以及第一个/最后 10 个读数。
import numpy as np
from numpy import genfromtxt
data = genfromtxt(data.csv", delimiter=',', names = True)
print("Columns in dataset: " , data.dtype.names)Temp = data[:, 0]
print(Temp[1: 10]) # **returns** **first 10 elements**
print(Temp[-10:]) # **returns** **last 10 elements**
print(Temp.size)# **returns** **number of elements**
根据我们的应用程序,我们还可以使用 where() 方法快速过滤出温度列中读数大于 30 度的值。
index = np.where(Temp >= 30)
print(Temp[index])
简单的数据分析,如百分位值、平均值、中值、标准偏差以及数据集中最频繁出现的数据,可以使用几行代码进行计算。
在这里,我们探索水温列:
WaterTemp = data[:, 2]
tenth, ninetieth = np.nanpercentile(WaterTemp[1:], q =[10, 90])
mean, median, std = np.nanmean(WaterTemp), np.nanmedian(WaterTemp), np.nanstd(WaterTemp)values, counts = np.unique(WaterTemp, return_counts=True)
print(tenth, ninetieth)
print(mean, median, std)
print(values[np.argmax(counts)])
3.Matplotlib 模块
为了用更少的代码行生成出版物质量的数字和图形,可以使用 Matplotlib 模块,其中包含 Pyplot 模块。Pyplot 对于 2D 图特别有用,例如绘制直方图、数据集图表或直观检查模拟结果。
一个简单的 2D 图的例子:(它看起来比 Excel 图表好吧?)

传感器灵敏度的斜率。作者图片
从根本上说,我们可以自由定制我们的绘图,即:设置轴标签,调整线条和标记厚度,甚至将绘制的图形保存到高分辨率图像或 pdf 中。
Pyplot 是我最喜欢的工具之一,尤其是 subplot 方法,我可以创建多个图并将它们保存到 PDF 或 JPEG 文档中。

作为工程师,我们经常被要求做出数据驱动的决策,例如,根据 CpK 值确定被拒绝的制造零件的数量,而 Matplotlib 是一个有用的库,我们可以轻松地可视化数据趋势以进行决策。
4.SciPy 模块
SciPy(科学 PYthon)模块提供了大量的数值和科学处理算法,有助于工程师进行计算和求解方程。让我们从下面的另一个信号处理示例来看看 SciPy 的实际应用。
10 Hz 正弦波信号与 30Hz 正弦波信号叠加。我们对信号应用傅立叶变换,系数相对于频率绘制。
import scipy as sp
...
df = 1/signal_length
t = sp.arange(0, signal_length, dt)
n_t = len(t)y = sp.sin (2*pi*10*t)+ sp.sin (2*pi*30*t)
#Note that the arange and sin functions are available in numpy toof = sp.fft (y)
frequencies = df * sp.arange(0 ,(n_t -1)/2)
n_freq = len (frequencies)plt.subplot (2 ,1 ,1)
plt.plot (t ,y)
...plt.subplot (2 ,1 ,2)
plt.plot(freqs, abs(f[0: n_freq]))
...plt.show()

信号的傅立叶变换。作者图片
只需几行代码,就可以获得并可视化信号的傅立叶变换。SciPy 也提供了 NumPy 的所有功能,后者通过一整套算法扩展了前者的功能,如积分、最小化、傅立叶变换、回归、形态学、和其他应用数学技术。
如果你有兴趣了解更多关于信号处理的知识,我在这里写了另一篇关于这个主题的文章:
IBM 在 Coursera 上的“高级机器学习和信号处理”概述
towardsdatascience.com](/how-do-machine-learning-and-signal-processing-blend-4f48afbb6dce)
总结和后续步骤
你可能会问,既然有像 MATLAB、Microsoft Excel 和其他工程软件这样的工具,为什么还要使用 Python 呢?嗯,它们中的大多数都是闭源软件,使用起来可能很昂贵——尤其是当需要额外的定制工具箱和许可证时。
然而,Python 是免费的、开源的,包含许多模块和库,与付费软件一样好,甚至更好。
我们在上面的帖子中看到的只是冰山一角,但我希望它足以让任何开始使用 Python 的工程师和科学家相信 Python 在处理、处理和可视化数据集方面的强大功能。21 世纪瞬息万变,了解 Python 有朝一日对于传统的工程学科来说是必要的。
以下是的附加资源列表,用于了解上述模块的更多信息:
- 关于数学模块你需要知道的一切
- 数字参考
- Matplotlib & SciPy 引用
GitHub 上学习熊猫的四大知识库
编程;编排
对于初学者和专家来说,一些最受欢迎的关于熊猫的知识库。

你可以在 Github 找到很多熊猫!
大家都知道 Github 是什么。
如果你和我一样是新手,可能还是不敢碰。虽然我还没有真正超越git commit + git push,但我知道你可以把 Github 不仅仅作为你项目的版本控制工具。
除了任何人都可以参与的开源项目,Github 还有无数的资源可以作为学习材料。
虽然参加在线课程很好,但有时额外的练习可以帮助你更好地记住你以前学到的东西。受欢迎的网站“Codewars”和“Codekata”是每天获得额外练习的一种方式,因为你可以选择一种你喜欢的语言,并解决尽可能多的问题。
对于那些专门搜索熊猫实践的人来说,你可以从 GitHub 上的四大熊猫知识库列表中受益!每个级别都有一个资源库,无论你是刚刚开始接触熊猫,还是已经在寻求将你的技能从基础提升到高级。我已经包括了分叉最多的,作为受欢迎程度的衡量标准。
熊猫练习—所有主题(4k 叉)

熊猫 Github 库来自 guipsamora
这个存储库有 11 个不同的部分,包括从将数据放入数据框架到创建高级可视化的练习。每个文件夹都有多个数据集,每个数据集都有不同的练习。
您可以下载 IPYNB 文件,打开 Jupyter 笔记本,亲自尝试练习。每个问题下面都有空单元格,所以你可以输入你的代码,然后通过查看“Exercise_with_Solution.ipynb”文件来检查你的答案。
总共有 27 本笔记本供你翻阅,所以这绝对是一个全面的资源。即使你已经对熊猫很熟悉,也值得浏览一下“了解”部分,因为你可能会发现像.describe(include=all)和.nunique()这样你以前没见过的功能。
还有一个链接,链接到数据科学家浏览所有笔记本的视频,所以如果你更喜欢观看解决方案的演示,而不是仅仅阅读它们,你可以在这里查看。
厌倦了大量的教程,但没有找到练习的简单方法,我决定创建一个回购只是练习…
github.com](https://github.com/guipsamora/pandas_exercises)
熊猫视频—所有主题和视频(1.2k 分叉)

来自 justmarkham 的熊猫 GitHub 知识库
这个资源库包含 Jupyter 笔记本,其中包含了一个视频系列的代码,该视频系列介绍了许多不同的 Pandas 功能。作者讲述了如何使用真实数据集解决问题(已由作者发布在网上,并包含在笔记本中)。
理想情况下,你应该打开一个 Jupyter 笔记本,跟着视频走。然后,一旦您完成了视频并浏览了所有代码,您就可以使用存储库中包含的笔记本作为答案纸。笔记本中还有一些额外的脚注,可能有助于阐明某些单元格的输出。
这个视频和相关笔记本的列表非常全面,所以如果你有关于熊猫的问题,你可以在这里找到一个演示。有简单的小众问题,如“我如何对熊猫数据帧或系列进行排序”,也有广泛而复杂的问题,如“我如何使用带有 sci-kit 的熊猫学习创建 Kaggle 提交”。
Jupyter 笔记本和来自熊猫问答视频系列的数据集-just Markham/pandas-videos
github.com](https://github.com/justmarkham/pandas-videos)
100 个熊猫拼图(1k 叉子)

来自 ajcr 的熊猫 GitHub 知识库
这个资源库只有一个 Jupyter 笔记本供您下载所有练习。每个问题下面都有一个单元格,您可以在其中填写您的代码,您可以对照解决方案笔记本中的相关单元格来检查代码。
笔记本分为不同的部分,如“进口熊猫”,“数据帧基础”,“系列和日期时间索引”等。您会发现大多数问题只需几行就可以解决,所以理想情况下,您不会为一个问题编写大量代码。
还有一个很酷的“扫雷”部分,其中:
我们将制作一个数据帧,其中包含扫雷游戏所需的数据:方块的坐标、方块中是否有地雷以及相邻方块中发现的地雷数量。
它在难度上被归类为“中到难”,但是如果你已经完成了前面的练习,你应该能够通过它。我认为这是对传统数据分析的一种有趣的突破,因为它迫使你思考如何在独特的情况下操纵数据框架。
作者还指出,谜题列表并不完整,所以如果你也想为谜题列表做出贡献,你可以提交额外练习、更正和改进的请求。
受 100 个数字游戏的启发,这里有 100 个简短的谜题来测试你对熊猫力量的了解。自从熊猫…
github.com](https://github.com/ajcr/100-pandas-puzzles)
Pycon 2019 教程—中级(180 叉)

来自 justmarkham 的熊猫 GitHub 知识库
这个存储库包括一个(很长的)笔记本,上面有作者制作的“熊猫数据科学最佳实践”视频中讨论的代码。它最适合中级熊猫用户,因为它不包括熊猫基础的演练。
有八个主要部分,并不真正遵循“教程”类型的格式。相反,这本笔记本读起来就像一个实际的数据分析项目,从检查数据到清理数据,到创建初步的可视化效果,再到回答一些具体的问题,比如“平均来说,哪些职业的 TED 演讲最有趣?”。
如果您是 Python 和 Pandas 数据分析项目的新手,可能值得浏览整个视频,看看有人如何处理清理、探索和分析的不同步骤。然后,您可以将这些最佳实践应用到您自己的项目中。
本教程由凯文·马卡姆于 2019 年 5 月 2 日在 PyCon 上发表。在 YouTube 上观看完整的教程视频。的…
github.com](https://github.com/justmarkham/pycon-2019-tutorial)
我希望您发现这份流行库的汇编很有用!有很多不同的学习方法,所以如果 GitHub 上的这些资源适合你的熊猫水平和学习风格,一定要试一试。
如果您有兴趣查看一个数据分析类型的项目,我在该项目中分析了 Medium 的热门页面,以了解哪些类型的故事是流行的,您可以查看以下内容:
[## 我如何用 Python 分析 Medium 的流行页面(第 1 部分)
数据收集和处理:用 XPath 解析 HTML,处理数据,创建熊猫数据框架
medium.com](https://medium.com/better-programming/how-i-analyzed-mediums-popular-page-with-python-part-1-8b81e81ae298)
祝你的熊猫学习愉快!
2020 年要做的 4 大虚拟实习
想在这个季节有所收获吗?参加一门课程,提升自己的技能。

由 konsangjira 在 Pixabay 上拍摄的照片
由于我们都在这个疫情期间受到打击,并面临隔离,保持乐观心态,走出舒适区,在每一个可能的时刻提升自己变得非常重要。现在让我们记下在这个封锁/隔离中要做的前 4 个虚拟实习。
虚拟实习方案如下
★ 德勤科技咨询虚拟实习
这个科技咨询虚拟实习你会做什么?
- 技术战略&创新
- 优化&交付
- 云工程
在开发在线银行平台之前,应考虑哪些技术方面,提供成本、收益和考虑事项的高级概述,移动化的考虑事项,制定高级实施计划并预测成本估算,定义项目方法,进行初始市场扫描以评估和选择新的财务会计系统,评估市场以了解有哪些潜在的解决方案可满足 SectorMetric 的要求,进一步分析和解决方案演示。
对选定的供应商进行进一步分析,总结您的发现,并提交您提议的解决方案,了解云计算,为客户会议准备云计算的高级概述,云可行性评估,就向云过渡的优势、风险和注意事项向客户提供建议,云就绪性评估,进行分析并推荐哪些应用程序适合向云过渡。
通过学习本模块,您将获得实用技能:
批判性思维、行业研究、项目规划、资源管理、可行性评估、价值分析、项目交付、规划、成本估算、市场扫描研究、能力、评估、标准优先排序、成本分析、实施规划、沟通、演示技巧、研究、理解云、就绪性评估、应用程序优先排序、研究、风险评估、收益分析
该计划是自定进度的,免费的,实习结束后德勤将颁发证书。
★ GE EXPLORER 数字技术数据分析程序
你将在这个数字技术数据分析项目中做什么?
- 数据工程
- 数据可视化
1)使用数据工程结合全飞行发动机数据、零件制造数据、机场位置数据来确定每架飞机的飞行距离。
2)将您的工作与通用电气团队创建的真实模型解决方案进行比较。
3)使用数据创建基于模拟航空数据的运行图和 KPI(关键性能指标)表。
通过学习本模块,您将获得实用技能:
Postgres/SQL、数据编排&转换、批判性思维、运行图、通过可视化讲述数据、商业智能(BI)
该计划是自定进度的,免费的,实习结束后通用电气将颁发证书。
★ JP 摩根软件工程虚拟体验
在这个软件工程虚拟体验中你会做什么?
- 与股票价格数据馈送的接口
- 使用摩根大通的框架和工具
- 为交易员直观显示数据
通过学习本模块,您将获得实用技能:
金融数据、Python、Git、基本编程、React、Typescript、Web 应用、技术交流、金融分析、为开源社区做贡献
该计划是自定进度的,免费的,实习结束后,JP 摩根大通公司将颁发证书。
★ 毕马威数据分析咨询虚拟实习
毕马威的虚拟实习包括三个阶段
- 数据质量评估
- 数据洞察
- 数据展示
通过学习本模块,您将获得实用技能:
数据质量分析、分析仪表板创建、数据分析、客户细分、数据驱动演示、数据仪表板、数据可视化、演示
该计划是自定进度的,免费的,实习结束后毕马威会颁发证书。
这里有一个由毕马威数据分析虚拟实习产生的证书样本

拉胡尔·帕塔克拍摄的照片
这里是上面提到的所有虚拟实习的链接,如果感兴趣,请访问并借此机会提升自己。
你对技术职业感兴趣吗?你天生好奇,喜欢挑战现状吗?你……
www.insidesherpa.com](https://www.insidesherpa.com/virtual-internships/prototype/FqFtWwQzNxJ8Qsh5H/Technology-Consulting) [## 通用电气数字技术数据分析程序- InsideSherpa
渴望深入了解通用电气如何引领新技术时代?葛招先锋,问题…
www.insidesherpa.com](https://www.insidesherpa.com/virtual-internships/prototype/ThbphD5N5WRsd9Mxo/Digital-Technology-(Data-Analytics)-Virtual-Experience-Program) [## 摩根大通软件工程虚拟体验
我们很高兴为您提供在摩根大通探索软件工程师生活的机会,并获得有价值的…
www.insidesherpa.com](https://www.insidesherpa.com/virtual-internships/prototype/R5iK7HMxJGBgaSbvk/Technology Virtual Experience) [## 毕马威虚拟实习- InsideSherpa
评估数据质量和完整性,为分析做准备。您将从以下工作中获得实用技能…
www.insidesherpa.com](https://www.insidesherpa.com/virtual-internships/theme/m7W4GMqeT3bh9Nb2c/KPMG-Data-Analytics-Virtual-Internship)
感谢你阅读这篇文章。如果你有任何关于上述实习的问题,请通过我的 LinkedIn 简介联系我。我很乐意帮助你,☺

2020 年欧洲五大人工智能会议
我认为欧洲的机器和深度学习会议今年的阵容最有趣。

帕特里克·罗伯特·道尔在 Unsplash 上的照片
以前从未有过像现在这样多的数据科学家职位。公司要么接受人工智能,要么远离炒作。尽早发现机会是非常重要的。
如今也很难找到好的内容,只有少数会议脱颖而出。有些要么过于商业化,要么不适用于任何商业案例。前几年我有机会参加了一些会议,我经常被问到,你如何选择一个?好吧,我将提出我今年会考虑参加的五个会议!
我向你保证,在读完这篇博文后,你会对你的下一次人工智能大会有所了解。当然前提是你要参加这种会议。
2020 年 3 月 2 日,法国巴黎
在你的日历上标记这一天。我在 2018 年之前参加过一次 dot 会议,那里的设置非常棒。我同意这不是最大的会议。但是演讲者阵容无疑是不可思议的。
Numpy,SciPy,Conda 等等的创造者, 特拉维斯·奥列芬特 ,正在那边说话。这些 Python 包非常受欢迎,他是当今最迷人的数据科学家之一。除了他之外,还有其他非常有趣的演讲者。你应该看看这里的阵容。
将这一系列与巴黎的所有美好事物结合起来。毫无疑问,享受最好的早餐,然后参加一个精彩的会议。我想我没什么好说的了。去爱。
为什么不抓住机会参观旅游景点呢?比如艾菲尔铁塔、卢浮宫博物馆、蒙马特高地或凯旋门?我很有信心,当你在那里的时候,那是你最好从你的遗愿清单上划掉的事情。
Carol Willing Carol 是 Jupyter 项目指导委员会的成员,也是 JupyterHub 和 mybinder.org 的核心开发人员…
www.dotpy.io](https://www.dotpy.io/?utm_source=newsletter&utm_medium=email&utm_campaign=first-speakers)
2020 年 4 月 20 日至 23 日,英国伦敦
下一次会议提供给你的不是一天,而是四天。前两天全是培训班。
如果有机会的话,我不建议你跳过前两天的研讨会。我发现“在 AWS 上构建一个安全的、可伸缩的和事务性的数据湖”很吸引人。或者说“用 Spark 和 scikit-learn 进行大规模机器学习”怎么样。可惜你不能把自己一分为二。
最后两天你可以享受大量的会议和活动。一方面,我相信基于会议内容的会议会更好。但另一方面,有这么多不同的主题可供选择,你肯定会有两天的会议,使这次会议值得。
最后一件事。也许对公司来说,获得奥赖利年度订阅并给员工时间学习然后参加这个主要活动更便宜。当然,除非你想让你的书得到签名。
为了保持竞争力,你需要了解人工智能。而没有数据就不可能有 AI。在奥赖利地层数据和人工智能…
conferences.oreilly.com](https://conferences.oreilly.com/strata-data-ai/stai-eu)
由尼 17 日至 19 日,德国慕尼黑 ML 会议
这个会议是基于德国最大的城市之一。我去年去过那里,那是一次很棒的会议,有很好的会谈,很好的食物和很棒的停留。
这次会议最大的好处是它不仅仅是商业会谈。它有很棒的内容,这与许多其他会议不同。不幸的是,仍然没有 2020 年的时间表。大多数讲座是用英语进行的,但他们也提供一些德语讲座。
如果事先不知道日程安排,我不能保证你会玩得很开心,但这似乎是最近的一种趋势。人们似乎去参加会议和节日,却不知道会有什么人出席,所以可能只有我一个人。根据去年的会谈,这无疑是一次令人敬畏的会议。
[## 2020 年德国慕尼黑机器学习大会——机器学习创新大会
仅限 3 月 5 日:ML 免费介绍日节省 500 多€10%团队折扣了解您的数据是…
mlconference.ai](https://mlconference.ai/munich/)
9 月 19 日至 20 日,深度学习峰会,英国伦敦
通常,伦敦是一个非常受欢迎的会议举办地。他们在今年晚些时候得到了另一个非常有趣的。2018 年参加过一个复工会议。就内容而言,这是我参加过的最好的会议。
毫无疑问,如果有机会,你应该参加这个活动。即使在英国退出欧盟之后,我仍然相信去伦敦旅行是非常容易的。你可以乘优步、出租车或地铁观光。大本钟、伦敦眼、塔桥等等都值得一游。
会议有许多不同的主题:深度学习、零售和广告中的人工智能、人工智能助理,还包括一些深入的会议。有来自 DeepMind,脸书,扎兰多,优步和美国宇航局的会议。这些公司习惯于处理大量数据。
如果你想去伦敦,并且想在两天内都有很棒的会议,这很简单。在你的日历上标出 9 月 19 日和 20 日就行了。
我们创造和组织全球知名的峰会,研讨会和晚宴,汇集了人工智能领域最聪明的头脑
www.re-work.co](https://www.re-work.co/events/deep-learning-summit-london-2020)
机器学习 2020,捷克布拉格
最后但并非最不重要的是,我还包括一个欧洲最美丽的城市之一的会议。历史中心是联合国教科文组织的世界遗产。在欧洲的这个地区,你很难找到值得一去的会议。
对我来说,它可能离我住的地方有点远。但是它有很棒的扬声器。例如,谷歌的 Franç ois Chollet、微软的 Ashish Kapoor、苹果的 Vojta Jína 或戴尔的 Herman-Saffar 等人都在那里发表过演讲。这是一个相当令人印象深刻的时间表。这次会议与其他会议有一个很大的不同,它从周五一直组织到周日。
会谈将在鲁道夫宫举行。自 1885 年以来,这是一座与音乐和艺术相关的新文艺复兴建筑。它只用于突出的目的。舒适、声学和设计使它成为一个伟大的场地。还需要我多说吗?
向广泛的受众展示您在机器学习的学术研究或商业应用方面的成就…
下一步?
你在这五个提案里找到了发布会吗?
如果答案是肯定的,请让我知道你要去哪里。我还没有决定去哪里。或者如果我今年去参加这些会议。我很想听听你对是什么影响了你的选择的看法。你可以在这里发表评论,或者直接通过 LinkedIn 或 Twitter 联系我。
如果你没有找到你喜欢的会议。非常抱歉,因为我确实相信这些是今年最顶级的人工智能大会。我也故意不参加学术会议。如果你认为这个列表是错误的,请在下面留下评论。
数据科学家的五大应用
我如何跟上最新的研究?我如何记住领域中的复杂概念?在这 5 款免费应用的帮助下!

Brando 在 Unsplash 上制作品牌
我们口袋里装着功能强大的设备。我们如何使用计算能力取决于我们自己。我对尝试新的生产力应用程序持保留态度,因为效果通常与预期相反。除了电话和信息,我几乎不用手机上的任何应用程序。我甚至屏蔽了网络浏览器。然后我开始阅读生产力指南,令我惊讶的是,我发现这些应用程序真的很有用。
我与其在脸书和 Instagram 上浪费时间,不如试着开发肌肉记忆,打开 Anki。
这里有几个你可能会感兴趣的链接:
- [Labeling and Data Engineering for Conversational AI and Analytics](https://www.humanfirst.ai/)- [Data Science for Business Leaders](https://imp.i115008.net/c/2402645/880006/11298) [Course]- [Intro to Machine Learning with PyTorch](https://imp.i115008.net/c/2402645/788201/11298) [Course]- [Become a Growth Product Manager](https://imp.i115008.net/c/2402645/803127/11298) [Course]- [Deep Learning (Adaptive Computation and ML series)](https://amzn.to/3ncTG7D) [Ebook]- [Free skill tests for Data Scientists & Machine Learning Engineers](https://aigents.co/skills)
上面的一些链接是附属链接,如果你通过它们购买,我会赚取佣金。请记住,我链接课程是因为它们的质量,而不是因为我从你的购买中获得的佣金。
我如何记住领域内的复杂概念?

安基
我写抽认卡并用 Anki 定期复习。Anki 是一个使用间隔重复的程序,这使得记住事情变得容易。间隔重复是一种学习技巧,通常用抽认卡来完成。新推出的难度更高的抽认卡展示频率更高,而较老的难度较低的抽认卡展示频率较低,以利用心理间隔效应【1】。
Anki 比传统的学习方法更有效率,你可以大大减少你花在学习上的时间,或者大大增加你的学习量。任何需要在日常生活中记住事情的人都可以从 Anki 中受益。因为它是内容不可知的,并且支持图像、音频、视频和科学标记(通过 LaTeX),所以可能性是无限的。
我为我觉得难以记忆的概念制作抽认卡。例如,我觉得非常直观的正则化解释。当我需要向某人解释这个概念时,我不需要考虑类比,因为我已经有了类比。
Anki 的缺点是你需要找到一种适合你的组织抽认卡的方法。没有放之四海而皆准的模式。太多的抽认卡也会很快变得杂乱无章。所以我只把它用于最重要和最难记的概念。
边听边学

Juja Han 在 Unsplash 上的照片
当我不听乔·罗根或蒂姆·费里斯的播客时,我喜欢收听:
播客主持人用简单的方式解释复杂的想法,因为没有人会理解他们🙂当有一个我不太了解的有趣想法出现时,我会记下来,然后用谷歌搜索。
把笔记带到 21 世纪

2020 年你不能没有电子书。我用 Kindle 阅读电子书,我喜欢它的高亮显示功能。Kindle 在突出显示方面做得很好,但在浏览时用户体验很糟糕。幸运的是,有一个免费的在线服务clipping . io,可以导入集锦。除此之外,它有一个友好的用户界面和许多其他功能。在我的手机上,我通过手机浏览器访问它。
我如何跟上最新的研究?

由 Kon Karampelas 在 Unsplash 上拍摄的照片
Reddit 是一个基于人们兴趣的社区网络。
Reddit 无需介绍。虽然有许多社区可以进行建设性的对话,但这也可能是一把双刃剑。跟着浪费时间的社区走,你不会有太多收获。
我积极合作的社区包括:
- r/learn 机器学习
- r/机器学习
任何领域的重大突破都会在这些社区中被提及和讨论。
当您找到想要稍后查看的内容时

这些天我们信息过剩。每当我访问 HackerNews 或 DataTau 时,我都会发现许多我想/应该阅读的有趣文章,但是没有时间。口袋前来救援!Pocket 是一个应用程序和浏览器扩展,可以存储文章并在以后查看。
很少值得一提
对于无组织的想法
每部手机都预装了笔记应用。市场上有更强大的应用程序,如 Evernote 或 OneNote,但对我来说,它们太臃肿,带有不必要的功能。我发现苹果的笔记应用程序真的很有用,当有一个自发的想法,想到一些我应该研究的东西时,我只是做个笔记。
获得灵感
我在媒体上发现越来越多精彩的内容。从精心编写的教程(有时甚至比文档更好)到简化的解释,这些都是深入研究的良好起点。
在你走之前
在 Twitter 上关注我,在那里我定期发布关于数据科学和机器学习的消息。

康特尼·赫格尔在 Unsplash 上拍摄的照片
让你的生活更轻松的五大美味汤
一旦你进入的网络搜集和数据处理领域,你会发现有很多工具可以帮你完成这项工作。其中之一是美汤,这是一个用于从 HTML 和 XML 文件中提取数据的 python 库。它创建了数据解析树以便于获取数据。

Joshua Sortino 在 Unsplash 上的原始照片
基本过程是这样的:
获取数据,然后按照你想要的方式进行处理。
这就是为什么今天我想向你展示一些美丽的汤提供的顶级功能。
如果你也对其他库感兴趣,比如 Selenium ,这里有一些你应该看看的例子:
我以前写过关于 Selenium 和 Web 抓取的文章,所以在你开始阅读这些之前,我建议你阅读这篇文章“关于 Web 抓取的一切”,因为这是一个设置过程。如果你已经比较精通网络抓取,试试我的高级脚本,比如“如何用 Python 省钱”和“如何用 Python 制作分析工具”。
另外,为 BeautifulSoup 设置环境的一个很好的例子在文章“如何用 Python 省钱”中。
让我们直接投入进去吧!

漂亮的汤设置
在我们进入前 5 个函数之前,我们必须设置我们的环境和库,我们将使用它们来获取数据。
在终端中,您应该安装库:
*pip3 install requests*
可以使用请求,这样您就可以通过简单的 Python 库添加内容,如标题、表单数据、多部分文件和参数。它还允许您以同样的方式访问 Python 的响应数据。
sudo pip3 install beautifulsoup4
这是我们上面已经提到过的主库美汤。
另外,当您开始启动 Python 脚本时,您应该包括我们刚刚安装的库:
*import* requests*from* bs4 *import* BeautifulSoup
现在让我们继续讨论函数!

获取()
这个功能绝对是必不可少的,因为有了它,你就可以进入你想要的网页。让我展示给你看。
首先,我们必须找到一个我们想要从中抓取(获取数据)的 URL:
URL = '[https://www.amazon.de/gp/product/B0756CYWWD/ref=as_li_tl?ie=UTF8&tag=idk01e-21&camp=1638&creative=6742&linkCode=as2&creativeASIN=B0756CYWWD&linkId=868d0edc56c291dbff697d1692708240](https://www.amazon.de/gp/product/B0756CYWWD/ref=as_li_tl?ie=UTF8&tag=idk01e-21&camp=1638&creative=6742&linkCode=as2&creativeASIN=B0756CYWWD&linkId=868d0edc56c291dbff697d1692708240)'headers = {"User-agent": 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'}
我随机拿了一个亚马逊产品,通过 get 函数,我们可以访问网页上的数据。标题只是你的浏览器的一个定义。你可以在这里查看你的。
使用请求库,我们可以获得带有已定义标题的所需 URL。
之后,我们创建一个对象实例‘soup ’,我们可以用它在页面上找到我们想要的任何东西。
page = requests.get(URL, headers=headers)soup = BeautifulSoup(page.content, 'html.parser')
BeautifulSoup(,)创建一个表示解析后的 HTML 或 XML 文档的数据结构。
您将在 BeautifulSoup 对象上调用的大多数方法都继承自 PageElement 或 Tag。
在内部,这个类定义了将 HTML/XML 文档转换成数据结构时树构建器调用的基本接口。该接口抽象出了解析器之间的差异。
我们现在可以继续下一个函数,它实际上搜索我们刚刚创建的对象。

查找()
使用 find()函数,我们可以在网页中搜索任何内容。
假设我们想根据他们的 id 获得产品的标题和价格。
title = soup.find(id="productTitle").get_text()price = soup.find(id="priceblock_ourprice").get_text()
这些 Web 元素的 id 可以通过单击键盘上的 F12 或右键->“Inspect”来找到。

让我们仔细看看刚刚发生了什么!

get_text()
正如您在前面的函数中看到的,我们使用 get_text()提取新发现的元素 title 和 price 的文本部分。
但是在我们得到最终结果之前,为了得到完美的输出,我们还需要对我们的产品做一些事情。

条状()
strip()方法返回删除了前导字符和尾随字符的字符串副本(基于传递的字符串参数)。
我们使用这个函数来删除标题中的空白:

这个函数也可以用在任何其他 python 用法中,不仅仅是漂亮的 Soup,但是以我个人的经验,当操作文本元素时,它已经派上用场很多次了,这就是为什么我把它放在这个列表中。

split()
这个函数对于 Python 来说也是通用的,但是我发现它也非常有用。它将字符串分成不同的部分,我们可以使用我们想要的部分。它与分隔符和字符串结合使用。
我们使用 sep 作为价格字符串中的分隔符,并将其转换为整数(整数)。
replace()只是替换“.”带有空字符串。
sep = ','
con_price = price.split(sep, 1)[0]
converted_price = int(con_price.replace('.', ''))

以下是最终结果:

我把完整的代码放在这个要点中:
在执行之前,只需检查您的头文件。
如果您想运行它,下面是终端命令:
python3 bs_tutorial.py
我们完了!

临终遗言
如前所述,这不是我第一次写关于美丽的汤,硒和网络刮一般。我还想介绍更多的功能,还会有更多的功能。我希望你喜欢这个教程,为了跟上进度,请继续关注我!
感谢阅读!
查看我的其他文章,关注我的媒体
当我有新文章时,在 Twitter 上关注我
面向开发者的五大加密货币 API
加密数据 API 的数据科学指南

亚历山大·辛恩在 Unsplash 上的照片
加密货币行业引起了全球开发者、企业家和爱好者的兴趣。当以太坊 ERC20 令牌变得更加流行时,最热门的趋势是创建一个令牌,在 ICO 中拍卖,并在项目中作为公用设施进行交易或使用。这一新发现的财富创造机制帮助启动了大量项目,最终导致了 2017 年的大牛市。
今天,以太坊区块链的开发仍然很受欢迎;然而,使用加密货币市场数据的开发正在成为新的加密淘金热。
无论你是加密货币交易者、投机者、开发者还是对加密货币研究感兴趣的人,都有大量的 API 可供选择。幸运的是,我已经测试了几乎所有的顶级加密货币 API,结果令人惊讶。无论您是想利用实时加密数据来帮助交易、构建交易机器人、对加密货币进行学术研究,还是想学习使用加密数据进行编码,我都计划从日常开发人员的角度出发,就我开发的项目中使用的 API 以及我认为将使您长期受益的内容向您提供一个诚实的意见。
让我们来发现市场上最好的加密 API。
lunar crush——加密社交监听

lunar crush为成千上万的加密资产提供 API 端点。这是驱动他们的网络应用的同一个 API。访问超过 1 亿个收集的社交帖子,所有帖子都使用人工智能进行分类,并与独特的见解一起显示。这家专注于加密货币的公司每天收集超过 100,000 个社交帖子,其中有 20,000 个链接,他们支持 2000 多种加密货币。LunarCRUSH 被认为是最可靠的社区和社会洞察 API 之一。
LunarCRUSH 收集了超过数千种加密货币的影响者、社会影响者活动及其参与度、频率和影响的数据。这允许一些非常棒的事情,比如什么是看涨还是看跌。它还让你知道谁对机器人真正有影响力。您还可以将超过 2000 枚硬币的社交指标整合到您的 TradingView 图表中。LunarCRUSH 拥有实时加密货币警报 LunarAlerts,用于通知加密货币价格和社会指标,这有助于自动化交易决策。
LunarCRUSH API 用法
LunarCRUSH API 允许访问其公共网站上的大部分可用数据。鉴于它们为收集加密货币数据提供了最大的社交数据集,我将用多个例子来扩展这一部分。
使用 Python 开发时要使用的基本 URL 端点:
[https://api.lunarcrush.com/v2](https://lunarcrush.com/developers/docs#)
****资产端点:一个或多个资产的细节、整体度量和时间序列度量。我们将所有受支持的加密货币称为资产。
****市场终点:所有支持资产的汇总信息,包括一些指标的 5 个最近时间序列值。
****全局端点:所有受支持资产的总体聚合指标。
****供稿:一枚或多枚硬币的社交帖子、新闻和共享链接。
****警报:超出典型趋势的显著指标变化的历史时间戳记录,包括周期性的高点、低点和突然的增加或减少。
****影响者:个人影响者详细信息,包括实际帖子。
****影响者:根据关注者数量、参与度和帖子数量列出对不同资产影响最大的社交账户。
LunarCRUSH API 文档
获取比特币、以太坊和 2000 种其他替代币和区块链的实时加密货币价格和社交数据…
lunarcrush.com](https://lunarcrush.com/developers/docs)
使用 LunarCRUSH 的体验
到目前为止还不错,对吧?在测试了我能找到的几乎每一个加密数据提供者之后,LunarCRUSH API 是我最后尝试的一个。有点像隐藏的宝石,我在网上浏览教程时发现了他们,最终导致他们的 Twitter,他们在那里积极发布加密数据。虽然我曾计划把它们当作另一个 API,但是我决定更深入地研究它们所提供的东西。令我特别惊讶的是,他们提供了社交指标,如看涨和看跌情绪,以及社交网站上最有影响力的T2 的名单。
我最初的项目是使用他们的 API 收集尽可能多的社会数据,并将这些数据输入到一个聚合模型中,该模型包含 LunarCRUSH 和 Messari 和 Nomics 价格数据。我目前仍在从事这个项目,我希望在未来的某个时候开源。请随时关注这个项目。我将在本文后面详述我使用其他两个 API 的经验。**
梅萨里

Messari 为成千上万的加密资产提供 API 端点。这些端点包括交易、市场数据(VWAP)、定量指标、定性信息。这是驱动他们的网络应用的同一个 API。它们的大多数端点都没有 API 密钥,但是它们限制了它们的速率。免费层不包括再分发的权利,并要求归属和链接到他们的网站。
Messari API 用法
它们的基本 URL 是:https://data.messari.io/api,端点是版本化的(v1、v2 等。)每当引入突破性变化时。
Messari API 文档
梅萨里是领先的机构级比特币和加密市场数据、区块链数据、个人资料、新闻…
梅萨里·io](https://messari.io/api)
与梅萨里的经历
一般来说,对于那些希望构建定制解决方案的人来说,Messari 是一个很好的 API。虽然他们的网站为交易者提供了很好的信息,但使用他们的 API 进行开发可能会很有挑战性。几年前,我在加密社区受到了积极的关注,决定跟随一个名为'messari-API-exploration''的 Github 回购来碰碰运气。文档非常容易阅读,对我来说很快就能理解 API 的基础知识。从那以后,我一直使用他们的数据作为一种验证形式,用 Nomics 来构建一个聚合的加密数据中心。**
经济学

Nomics 是一个加密货币数据 API,专注于价格、加密市值、供应和空前高的数据。他们为货币 & 交易所提供蜡烛/OHLC 数据。此外,它们还提供自 2013 年 1 月以来的历史加密货币总市值。
Nomics API 是面向所有开发者的资源。对于寻找廉价或免费加密 API 的典型开发人员来说,它们的价格似乎很贵。尽管如此,它们是加密行业中备受推崇的 API。
Nomics API 用法
Nomics API 基本 url 在https://api.nomics.com/v1运行。所有请求都应该以服务器 URL 为前缀。
Nomics API 文档
** [## Nomics 的免费加密货币和比特币市场数据 API
最好的免费🚀加密货币和比特币 API。以编程方式访问当前和历史价格、市场和…
p.nomics.com](https://p.nomics.com/cryptocurrency-bitcoin-api)
经济学经验
对经济学的总体积极体验让我发现了它能提供什么。Nomics API 使用起来相当简单,但当我几年前开始构建加密应用程序时,他们的 API 对我来说有点挑战性。如果你想要货币和外汇的历史蜡烛线数据,无缝原始贸易数据,或者订单数据,那么你需要为这些服务付费。如前所述,我仍然使用 Nomics API 作为我的聚合加密数据中心的加密货币市场价格验证形式,我希望在未来开源。**
CoinMarketCap

CoinMarketCap 通常被认为是检查加密货币和代币价格的最佳去处。CoinMarketCap 最近被由赵昌鹏于 2017 年在中国创立的国际加密货币交易所币安收购。
CoinMarketCap 为个人用户和商业用户提供 API 层。免费计划对每月可以调用的 API 数量有限制。该功能对于测试来说是不错的,但是对于那些试图构建供消费者使用的应用程序的人来说,我建议使用带有更多选项的 API。
CoinMarketCap API 用法
通过 Python 使用他们的 API,所有请求都应该以他们的基本 URL [https://pro-api.coinmarketcap.com](https://pro-api.coinmarketcap.com.)为目标
CoinMarketCap API 文档
** [## 最值得信赖的加密货币市场数据 API | CoinMarketCap
一套新的强大、灵活、准确的加密货币市场数据端点。从要求苛刻的企业使用…
coinmarketcap.com](https://coinmarketcap.com/api/)
使用 CoinMarketCap 的经验
最初发现加密数据的威力时,CMC 是我接触的第一个 API。我最初尝试使用他们的数据是通过一个价格预测模型,使用他们免费的历史数据。不幸的是,在我的项目上花了几天时间后,CMC 更新了他们的网站,所以我所有的代码都不再工作,我没有耐心去开发更多的代码。从今天起,由于用户界面的变化,我的回购不再有效。你可以在这里查看我的项目。**
守宫

CoinGecko 直接提供实时定价、交易量、报价器、交易所、历史数据、硬币信息&图像、开发者&社区统计、事件、全球市场和 CoinGecko Beam 硬币&交易所状态更新的数据。
只有 21 个端点,这可能不是贸易商和企业的最佳选择。我不建议将用于这些目的。尽管 CoinGecko 是免费的,但它很可能无法满足交易者和交易所的需求。
CoinGecko API 用法
在 Python 中使用 CoinGecko API 时,您将需要使用它们的基本 URL [https://api.coingecko.com/api/v3](https://api.coingecko.com/api/v3)
CoinGecko 文档
** [## 最强大和免费的加密货币 API | CoinGecko
2020 年 4 月 23 日:向硬币/市场端点添加了 atl、atl_change_percentage 和 atl_date。2020 年 3 月 31 日:查询时…
www.coingecko.com](https://www.coingecko.com/en/api)
CoinGecko 体验
这个 API 是我开始开发项目时使用的第二个 API。我在使用 CoinGecko 时发现的挑战是缺少可用的 Python 文档。我相信 CoinGecko 有潜力成为一个免费的 API 然而,社区需要介入并为项目提供更多的文档。当我对我的项目应该使用哪种 API 进行初步研究时,简单地搜索“CoinGecko Python API”不会返回很多结果。幸运的是,我能够在 Github 上找到一个包装器,它有助于实现我的项目。我试图跟踪一个具有多种功能的 Discord 机器人的开源项目,可以在我的 Github 上查看。**
结论
加密货币市场继续冲击主流覆盖率,增加曝光率,并被大众广泛使用。我认为在行业内开发应用程序和进行分析时取得领先是非常重要的。加密数据是一种有价值的资产,可用于进行交易、进行研究实验以及为您的组织增加透明度。密码开发的未来取决于 2020 年有多少项目将继续在应用程序编程接口中创造创新功能。
有大量的加密货币数据 api 可供选择,有时会让人感到不知所措。选择最好的加密货币 API 完全取决于您的需求,尤其是取决于您计划使用哪种编程语言。大多数 API 都提供加密货币价格 API 访问,所以也许你想找到一个不仅仅是价格的 API,比如社会指标。
我希望这篇文章能帮助你决定哪个数据提供商最适合你的项目。
感谢阅读
欢迎提问、评论和建设性的批评。这是我发表的第一批文章之一。
欢迎建设性的批评和反馈。可以在 Instagram @nirholas 、 LinkedIn 、和 Twitter @nickresendez 上联系到 Nicholas Resendez,了解新文章的更新。
2021 年学习数据科学的前 5 本书
以及为什么书总的来说比在线课程要好。
仅在亚马逊[1]上就有超过 20,000 种与数据科学相关的书籍,对于新人来说,选择进入该行业的最佳方式可能是一项艰巨的任务。本文旨在解决这一问题,为您提供 5 本关于统计学、数据科学的高质量书籍,同时也提供该领域的全貌。

金伯利农民在 Unsplash 上拍摄的照片
在文章的副标题中,我提到了这样一个观点,对于学习数据科学,或者事实上,学习任何其他技术技能,书籍通常比在线课程更好。如果你是在线课程的超级粉丝,我希望你正在读这一段,还没有去评论区。
我来详细说明一下。书籍需要全神贯注才能看完,尤其是技术书籍。另一方面,对于在线课程,我发现自己一直在看视频,但并没有真正注意。此外,书本上的知识对我们大多数人来说会更好。
不要误解我的意思,在线课程对于实践性很强的东西来说很棒,但是阅读书籍是学习基础知识和理论概念的更好的解决方案——这是跳到代码之前必须的。
将两者结合起来——基础和理论的书籍,以及实践部分的在线课程将确保你在长期内掌握这两个方面。
无论如何,你是来找前五本书的,所以让我们看看哪一本是第一本。
1.数据科学家实用统计学
这本书是初学者的必读之作,因为它涵盖了数据科学所有先决概念的基本概述。不太深入,不会把你烦死。你可以学习探索性数据分析的基本概念,什么是随机抽样,如何使用回归来估计结果,关键的分类技术等等。

来源:亚马逊
我发现它对初学者来说很棒,因为它都是关于基础的,这足以更深入地研究数据科学和机器学习。由于这本书没有太多的深度(对初学者来说非常好),如果你发现自己没有理解一些更高级的概念,你将不得不寻找额外的资源。
在这里可以得到。
2.用于数据分析的 Python
如果你已经读过这个列表中的第一本书,那么这又是一个很好的读物,也是显而易见的下一步。这本书涵盖了几乎所有可能的数据分析方法,以及 T2 Python 编程语言的基础知识。

来源:亚马逊
我特别喜欢这本书的一点是,作者让你很好地了解了作为一名数据分析师/科学家你应该期待什么。总之,这本书组织得很好,读起来很愉快,它的节奏完美,一切都解释得很简单。
这里可以得到。
3.拐点
如果你刚刚读了前两本书,你可能需要从技术书籍中解脱出来。这就是这个发挥作用的地方。

来源:亚马逊
如果你已经决定涉足 IT,或者更准确地说是数据科学,那么暂时放下所有的技术工作,专注于商业视角是一件好事。
这本书总结了作者的个人经历和故事,让读者熟悉这个行业的——IT、大数据和云是如何工作的。如果你将来想在数据科学领域找份工作,了解这一切是如何联系在一起的对你有好处。
在这里可以得到。
4.Python 机器学习示例
现在,您已经了解了一些统计学、Python 编程、数据分析的基础知识,并且对您的角色以及您将与之共事的其他人的角色有了坚实的业务理解。接下来要学的逻辑就是,你已经猜到了,机器学习!

来源:亚马逊
这本书还涵盖了 Python 的基础知识。因为这部分已经在第二本书里讲过了,你可以跳过它或者再复习一遍来巩固你的知识。
此外,这本书以有趣的方式涵盖了一些机器学习的经典例子。作者分享了他在优化方面的经验和最佳实践,以及其他你可能会发现对工作有用的东西。
总的来说,这是一本好书。
你可以在这里买到。
5.使用 Scikit-Learn 和 TensorFlow 进行机器实践学习
这当然是我读过的最长的数据科学书籍之一,但是包含了惊人的信息。是最容易推荐的书籍之一。

来源:亚马逊
你不仅会深入研究机器学习,还会花大量时间在最受欢迎的库中进行深度学习——tensor flow。
在阅读和完成练习后,你会知道足够深入深度学习,开发解决现实世界问题的应用程序,但你也应该知道足够开始申请工作。
你可以在这里买到。
结论
如果你是一个初学者,通读这 5 本书(按照准确的顺序)将会花费你几个月的时间。你也可以更进一步,用在线课程补充实践部分,只是为了获得不同的观点。
如果你不能决定参加哪门额外的视频课程,这篇文章可以帮助你:
想找应用机器学习的课程?或者更理论的东西?从这里开始。
towardsdatascience.com](/top-3-resources-to-learn-machine-learning-a2adcda40fd)
感谢阅读。*
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
* [## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)*
参考
[1]https://www.amazon.com/s?k=data+science&ref = nb _ sb _ noss _ 2
能让你在 6 个月内成为人工智能/人工智能专家的前 5 门课程
你是一个试图在互联网上寻找能让你成为人工智能或人工智能领域专家的最佳在线课程的人吗?如果是的话,那么这篇短文就是给你看的!

图片来源: Pixabay
****更新如果你喜欢这篇文章,并希望更多地支持我为社区所做的贡献,请看看我的书“ 【应用机器学习可解释技术 ”,这是 GitHub 资源库,其中包含许多关于书中各个章节的实践教程:https://GitHub . com/packt publishing/Applied-Machine-Learning-explability-Techniques。如果你喜欢 GitHub 资源库中提供的教程,请在资源库中做 fork 和 star,以示你对这个项目的支持!请订购本书的 实体本 或 电子本 以示支持。
[## 应用机器学习可解释技术:使 ML 模型可解释和可信…
应用机器学习可解释技术:使 ML 模型可解释和可信赖的实践…
www.amazon.com](https://www.amazon.com/Applied-Machine-Learning-Explainability-Techniques/dp/1803246154?encoding=UTF8&pd_rd_w=Wr6SJ&content-id=amzn1.sym.716a1ed9-074f-4780-9325-0019fece3c64&pf_rd_p=716a1ed9-074f-4780-9325-0019fece3c64&pf_rd_r=6P2PM599T97MRG7NZD9J&pd_rd_wg=m4qUW&pd_rd_r=6e349d93-5ba0-4bfe-9055-905c0153fe58&linkCode=li3&tag=adib0073-20&linkId=35506e1847de5c011fc57aa66c2b1d8e&language=en_US&ref=as_li_ss_il)
每当我发表关于数据科学、机器学习或人工智能的公开会议时,我经常会收到这样的问题“我如何开始在数据科学、人工智能或人工智能领域建立职业生涯?“虽然这个问题在任何地方都很常见,但有时答案会因受众而大相径庭。对于大学生来说,答案会有所不同,对于初级专业人员来说,答案会略有不同,而对于高级或中级专业人员来说,答案又会不同。但是为了概括答案,我的常规答案是:
- 我强烈建议关注与 AI/ML 相关的在线博客和文章,并亲自实施项目以获得实践经验。我的博客网站可以是一个很好的起点:【https://aditya-bhattacharya.net/blogs/。一个知名网站上的快速在线课程也有助于基础知识的入门。
- 利用 Kaggle 解决几乎现实生活中的数据科学问题
- 在博客/文章中阐述学习内容,并在您的网站或热门网站上发布,如走向数据科学、数据驱动投资者、分析、Vidhya 或任何其他媒体出版物或个人博客网站
- 维护 GitHub 中的工作,通过分享您的代码或参加 GitHub 或 Stackoverflow 论坛与社区分享并为社区做贡献
- 通过实践和实际项目学习实际用例
- 加入数据科学协会/学习小组,积极参与他们的会议、讨论,并不断学习以在该领域成长。MUST Research 就是这样一个伟大的社区:https://must.co.in/,MUST Research 也有自己的认证计划,为开始在数据科学、ML 和 AI 领域的职业生涯量身定制:https://academy.must.co.in/,我强烈推荐。
说到这里,这些都是 DS/AI/ML 职业生涯的伟大起点。但是下一个明显的问题是,如何加速和提升到下一个水平,成为人工智能/人工智能专家?
因此,在这篇文章中,我想强调一下 5 门专业在线课程,它们可以让你成为人工智能、人工智能和数字系统领域的专家。
来自 Udacity 的人工智能纳米学位课程是为工作专业人士精心设计和定制的,旨在开发基本的人工智能直觉,并加速学习构建实际的人工智能应用程序。
[## 人工智能
纳米学位课程的先决知识这个项目需要线性代数,统计和 Python 的经验…
像 彼得·诺维格 和 巴斯蒂安·特龙 这样的人工智能专家,会对搜索、优化、规划、模式识别等相关算法给出深入的直觉。要做的作业和实际项目简直太棒了,在这门课程之后,人们实际上可以设计自己的无人驾驶汽车原型!来自行业专家的真实世界项目肯定会让所有课程参与者成为机器人人工智能领域的实用专家。
该课程通常需要 2.5 至 3 个月完成,可以很容易地做全职工作!我强烈推荐这门课程给初至中高级的专业人士。所以,如果你对机器人和人工智能感兴趣,那么你可以停止拖延,开始上这门课程!
已经认识我的许多人都知道,计算机视觉是我最感兴趣的领域之一。虽然有许多与计算机视觉相关的在线课程使用了经典方法和现代深度学习方法,但来自 Udacity 的这个纳米学位项目经过精心设计,将传统的计算机视觉方法与基于现代深度学习的新方法相结合。
[## 成为计算机视觉专家
纳米学位课程的先决知识这个项目需要与 Python,统计学,机器学习的经验…
imp.i115008.net](https://imp.i115008.net/c/2422388/788805/11298?prodsku=nd891&u=https%3A%2F%2Fwww.udacity.com%2Fcourse%2Fcomputer-vision-nanodegree--nd891&intsrc=PUI1_5678)
这门课程还提供了一种实用的动手方法,作为课程一部分的项目和作业简直令人惊叹。如果你懂 Python 或者 Matlab,还懂一点 Open-CV,并且想推进你的职业生涯,成为一名计算机视觉专家,这个课程强烈推荐给你!这门课程也需要大约 3 个月的时间来完成,但就我个人而言,除了这门课程,我没有见过任何其他关于计算机视觉的专业课程,它提供了视觉领域的深入工作知识。
上述纳米学位课程肯定会让你成为所提到的选择性领域的专家,但如果你想成为应用数据科学家,你需要在多个领域拥有行业级的专业知识,如经典机器学习、深度学习、自然语言处理、计算机视觉、无监督学习、数据可视化等。特别是对于早期的专业人员,所有主要组织都希望获得应用数据科学的全面知识。因此,由乔伊·穆斯塔菲 领导的来自 MUST 研究院的应用数据科学项目就是这样一个独特的项目,它可以指导 AI 或 DS 爱好者在 6 个月内成为专家。这个项目最好的部分是最后的顶点项目,它将指导所有的学生执行一个研究项目,甚至发表一篇研究论文。
因此,如果你对研究和实用数据科学有浓厚的兴趣,我强烈建议你参加这个课程,向行业专家学习,并开发一套全面的技能。
考虑到 Covid19 的现状,医疗保健将是未来重要的领域之一,其中 AI、DS 和 DL 将产生巨大影响,并可以显著改善医疗保健体验!来自 udacity 的这一专业化纳米学位课程可以帮助您开发一套非常适合的技能,将人工智能应用于医学成像数据、电子健康记录数据,甚至从健身带等电子设备获得的健康数据。
[## 学会在医疗保健中利用人工智能
新的!纳米学位项目以个性化服务取得成功,我们为您的每一步需求提供量身定制的服务…
imp.i115008.net](https://imp.i115008.net/c/2422388/788805/11298?prodsku=nd320&u=https%3A%2F%2Fwww.udacity.com%2Fcourse%2Fai-for-healthcare-nanodegree--nd320&intsrc=PUI1_5678)
对于人工智能专家来说,应用机器学习和深度学习模型来自动化分析医疗保健数据的过程有多么重要,我怎么强调都不为过。因此,如果你想学习如何推动人工智能改善人类健康,并在大约 3 个月内每周抽出近 15 个小时的时间,人工智能在医疗保健中的专业化纳米学位课程可以让你成为这一领域的专家。
来自 deeplearning.ai 和 coursera 的深度学习专业化课程是我参加过的最顶尖的深度学习专业化课程之一。该课程提供了关于深度学习的广泛主题的直觉,从超参数调整到卷积神经网络再到递归神经网络。
虽然,我会把这门课程推荐给刚接触深度学习的人,而不是高级深度学习相关工作的人,但我仍然会把这门课程放在我最喜欢的前五名名单中,因为它确实提供了关于深度学习的实用知识, 【吴恩达】 的教学简直太棒了,可以让你在几个月内成为深度学习专家!
****更新如果你喜欢这篇文章,并希望更多地支持我为社区所做的贡献,请看看我的书“ 【应用机器学习可解释技术 ”,这是 GitHub 资源库,其中包含许多关于书中各个章节的实践教程:https://GitHub . com/packt publishing/Applied-Machine-Learning-explability-Techniques。如果你喜欢 GitHub 资源库中提供的教程,请在资源库中做 fork 和 star,以示你对这个项目的支持!这本书现在接受预购。请订购本书的 实体本 或 电子本 以示支持。
[## 应用机器学习可解释技术:使 ML 模型可解释和可信…
应用机器学习可解释技术:使 ML 模型可解释和可信赖的实践…
www.amazon.com](https://www.amazon.com/Applied-Machine-Learning-Explainability-Techniques/dp/1803246154?encoding=UTF8&pd_rd_w=Wr6SJ&content-id=amzn1.sym.716a1ed9-074f-4780-9325-0019fece3c64&pf_rd_p=716a1ed9-074f-4780-9325-0019fece3c64&pf_rd_r=6P2PM599T97MRG7NZD9J&pd_rd_wg=m4qUW&pd_rd_r=6e349d93-5ba0-4bfe-9055-905c0153fe58&linkCode=li3&tag=adib0073-20&linkId=35506e1847de5c011fc57aa66c2b1d8e&language=en_US&ref=as_li_ss_il)
因此,这就把我们带到了本文的结尾。以上是我个人的最爱,这 5 门专业化课程其实可以让你在 6 个月内成为 AI/ML 专家。希望我能帮上忙!继续关注:https://medium.com/@adib0073以及我的网站:https://www.aditya-bhattacharya.net/更多!
2020 年任何团队的 5 大数据库文档工具
数据爱好者/工具
以及为什么你迟早需要一个。

来源:dbdocs.io
数据库可能很复杂,令人望而生畏。
作为一名开发人员(尤其是如果你来自后端团队),你有多少次被非技术团队成员或客户的电子邮件轰炸,询问字段的含义?
记录和组织数据库的元数据在这方面很重要,但这不是我们的首要任务。由于数据库复杂的性质,我们经常避免维护它,或者更糟糕的是,首先创建它。
这就是数据库文档工具派上用场的地方。除了帮助您使用预定义的格式为数据库创建详细的数据目录之外,工具对于整个团队来说也是一笔巨大的财富。
这篇博客文章将与你分享数据库文档工具的真正重要性,以及你应该用来提高你个人和团队生产力的 5 大工具。
什么是数据库文档工具?
互联网上没有具体的、被广泛接受的文档工具的定义,所以我将尝试从我自己的知识和研究中总结一下。
数据库文档工具充当数据目录,以简化的表格格式捕获数据库的所有信息。
它最常用作提供表模式的粒度细节的数据字典,或者提供数据库内部所有关系的概述的单一事实来源。

字段细节和表格引用是任何数据库文档工具最基本的元素。来源:dbdocs.io
为什么我们需要一个数据库文档工具?
文档工具有短期和长期的好处。
然而,由于大多数人只意识到其暂时的优势,而忽略了大局,他们往往把这些工具视为一个临时的解决方案。
数据库文档工具的一些更明显的短期利益是:
- 帮助开发人员快速构建当前项目的数据库结构原型
- 业务成员(销售、BA)可以轻松理解开发人员输入的具有丰富元数据的表字段的上下文和含义
然而,正是的长期利益使得数据库目录工具真正有价值:
- 工具可以帮助开发人员生成一个完整的数据库文档,作为每个人的单一事实来源。现在,数据库的知识不再局限于任何高级开发人员,而是随着他们离开公司而走出大门。它留下了。
- 当团队扩大时,共享数据 wiki 可以帮助避免未来的冲突。资深开发人员可以很容易地用一个数据源来接纳新手。
- 一些工具允许共享,外部用户可以在线访问最新版本的数据库文档。不需要手动截图或会议。这将有助于节省你的编码时间,是的,但从长远来看,也提高了企业的生产力和声誉,特别是如果你的企业是在咨询行业。
2020 年 5 大数据库文档工具
2020 用户要求 2020 设计风格 s。
没有人愿意使用那些设计风格可以追溯到 90 年代的工具。
此外,数据分析领域正变得越来越复杂。团队更加意识到构建一个可扩展的分析栈,将更多的注意力放在他们的数据仓库上。
因此,数据库的复杂性和规模都在增长,以处理大量的数据源。
因此,我们需要功能强大的工具来适应数据库的增长,但它们必须是轻量级的,设计得足够漂亮,以便为我们日益繁忙的开发人员节省时间。
下面我们列出了符合这些要求的 5 种数据库文档工具:
- dbdocs.io
- 达泰多
- ApexSQL 文档
- RedGate SQL 文档
- 图式
dbdocs.io

dbdocs.io 是一个免费的简单工具,可以为你的数据库创建基于网络的数据库文档。与大多数竞争对手不同, dbdocs.io 是最轻量级的,不需要复杂的设置。
此外,dbdocs 有自己的 DSL 语言,可以帮助开发人员快速定义和记录他们的数据库模式和结构。你可以在这里查看一个样本文档。
定价
dbdocs 正处于测试阶段,所以它是完全免费的。你可以从这里开始。
优点
- 重量轻,安装简单。通过 CLI 安装 dbdocs 的唯一要求是拥有 NodeJS 和 NPM(大多数开发人员已经拥有)。不需要连接到任何数据库。
- 使用DBML——它自己的开源 DSL 语言,一种超快速的文档数据库方式。您可以完全控制要添加到文档中的模式、关系和元数据。
- 拥有数据库结构的可视化概览以及每个表及其关系的单独视图。您可以使用带有 dbdiagram.io 的 dbdocs 来快速原型化您的数据库 ERD。
- 通过简单的链接与团队成员轻松共享文档。如果您正在使用客户端,请使用密码保护来保持文件的私密性,只有那些有密码的人才能访问。
- 轻松集成到您的工作流程中。在 git repo 中创建一个 DBML 文件,并在每次提交时更新它。
- 适用于任何操作系统。dbdocs 只需要一个简单的代码编辑器和一个 CLI 工具来生成文档(例如,Windows 和 Mac 中的终端),这意味着它可供任何用户使用!
- 即时电子邮件支持
缺点
- dbdocs.io 是一个相当新的工具,因此它缺乏某些功能,如版本控制或深度编辑功能。但是据他们的开发者说,这些功能已经在路线图上了。
- dbdocs 不允许协同编辑。目前,每个开发人员都可以使用本地 DBML 文件编辑文档,因此一个人所做的更改不会反映在另一个人的文档中。
- dbdocs 不像它的大多数竞争对手那样支持
export特性,但它很快就会可用。
达泰多

Dataedo 是一个高级数据库文档工具,包括数据字典、ERD 和业务术语表。
它将连接到一个广泛的数据源列表(即 MySQL、PostgreSQL、Oracle、Amazon Redshift……)并提取元数据,您可以向其中添加更有意义的自定义信息。
像 dbdocs 一样,Dataedo 允许开发人员用 ER 图可视化数据模型。
定价
Dataedo 有三种定价方案: Pro 、 Pro+ 和 Enterprise 。
专业版每个用户每月 39 美元(30.11 英镑),有标准的电子邮件支持和五个自定义字段。Pro+版本每个用户每月花费 79 美元(60.99 英镑),有 10 个自定义字段和优先级支持。
企业版的价格为每个用户每月 159 美元(122.74 英镑),包含 100 个定制字段,具有模式更改跟踪和业务术语表等额外功能。他们还提供定制定价计划,以防您发现当前计划不合适。
优点
- 支持大量数据源
- 易于创建的 ER 图:只需拖放数据表和数据,就可以自动检测和可视化它们之间的关系。
- 丰富的元数据:用户可以用自定义字段和丰富的文本描述数据元素,或者将表组织到不同的模块中
- 可共享性:除了 PDF 和 Excel 格式,用户可以生成一个交互式的 HTML,不需要专门的服务器
缺点
- 初创公司可能会发现定价有点高。
- 复杂的设置
- 该工具需要一个陡峭的学习曲线才能充分发挥其威力
- 仅适用于 Windows 用户
ApexSQL

来源:https://www.apexsql.com/sql-tools-doc.aspx
ApexSQL 不仅是 SQL 的强大工具,也是 SSIS、SSAS、SSRS 和 Tableau 文档的强大工具。ApexSQL 最令人印象深刻的特性就是定制。您可以使用不同的样式、自定义文本、主题和图形来完全自定义文档及其布局。
定价
ApexSQL 每个用户仅花费 699 美元。从长远来看,这听起来是一项合理的投资,但这意味着该工具仅限于一个用户使用。
优点
- 强大的定制和个性化功能
- 各种服务的支持文档
- 轻松自动化和安排文档
- 支持多种输出格式(CHM、HTML、Word、MD 和 PDF)
- 包括图形关系和数据模型图
缺点
- 仅适用于 Windows 用户
- 对于有多个用户的团队来说,想要协作地记录他们的数据库,前期成本很高
- 需要一个陡峭的学习曲线来充分利用它的力量
- 过时的设计风格
Redgate SQL 文档

来源:https://www.red-gate.com/products/sql-development/sql-doc/
Redgate SQL Doc 是一款帮助你快速自动为你的数据库生成文档的工具。您可以获得数据库模式、对象间和数据库间依赖关系的概述,以及帮助用户找到所需内容的注释。您还可以通过右键单击对象资源管理器来记录 SSMS 中的数据库。
你可以在这里查看样品。
定价
Redgate SQL Doc 适用于广泛的用途。如果您的团队有 1-4 个用户,则每个用户的费用为 385 美元(终身),包括 1 年的支持和升级。如果你的团队有 5-9 个用户,那么每个用户的花费会少一点,只有 327 美元。如果你的团队有 10-20 个用户,那就是 308 美元。对于超过 20 个用户,您可以联系团队以获得个性化报价。
优点
- 从 CLI 轻松自动化文档
- 支持多种输出格式(PDF、HTML、MS Word)
缺点
- Redgate SQL Doc 主要用于查看目的,因此其编辑能力非常有限。您不能更改表字段、类型和值,它们是任何模式的基本组件。您只能编辑描述。
- 过时的设计风格(用户界面和 UX)
- 无法创建 ER 图表
图式

SchemaSpy 是这个列表中的第二个免费工具。这是一个基于 Java、基于 CLI 的工具(需要 Java 5 或更高版本),它分析数据库模式的元数据,并以浏览器可显示的格式生成它的可视化表示
您可以在此查看文档的预览。
定价
SchemaSpy 可以免费使用。
优点
- SchemaSpy 是免费的、轻量级的。如果与具有几乎相同的特性集(除了生成实体关系图)的 RedGate SQL Doc 相比,SchemaSpy 无疑具有价格优势
- 易于设置和配置
- SchemaSpy 可以扫描并生成数据库的全面元数据(表、列、约束、关系、孤立表、异常、例程)
- 支持表注释的降价!
缺点
- 该项目已近一年未更新(最新版本 v6.1.0 发布于 2019 年 9 月 18 日)。看起来这个神奇工具的所有者不会积极支持它,所以如果你期待不断的更新和新功能,那么这个工具可能不适合你。
- SchemaSpy 编辑功能有限。它既不能向表组件添加注释,也不能直接编辑/添加当前模式的更多元数据。
- 过时的设计风格(尤其是图表)
结论
每个文档工具都是为特定的需求而设计的,所以了解第一手的业务需求是非常重要的。
如果您只想生成当前数据库的只读版本,那么 RedGate SQL Doc 和 SchemaSpy 是最佳选择。虽然 SchemaSpy 适合预算有限的团队,但 RedGate SQL Doc 可能会给您更多的保证,因为该产品仍在积极开发中。
如果您需要用更多的元数据和视觉上漂亮的 ER 图来丰富您的文档,您肯定应该选择 dbdocs.io 。它自己的语言(DBML)不需要太多的学习,比传统的 DDL 语言(如 SQL)更容易编写、阅读和维护。此外,这个工具是咨询初创公司/中小型企业的首选,因为它是免费的,具有带密码保护的可共享文档,并且可以在任何操作系统上使用。
如果您的企业很大,并且有大量的数据库文档专用预算,那么 dataedo 是 dbdocs.io 的一个可能的替代方案。它的功能比 dbdocs.io 稍多,需要更陡峭的学习曲线,这可能会成为就业的障碍。
如果您的首要任务是记录广泛的服务(和大量定制),那么 ApexSQL 是首屈一指的!与 Dataedo 类似,该工具适用于数据团队预算较大的团队,因为其前期成本和每用户定价模型较高。
原载于 2020 年 6 月 30 日https://www . holistics . io。
学习 SQL 的五大免费资源
免费学习最受欢迎的技术技能

卢克·切瑟在 Unsplash 上的照片
根据最近来自 Burning Glass 的一份报告,SQL 是 2020 年 2 月至 3 月发布的公开招聘中最受欢迎的技术技能。企业正在收集越来越多的数据,如何从这种资产中获取价值的问题正成为企业的困扰。
绝大多数企业数据仍然以行和列的形式存储在数据库中,SQL(结构化查询语言)是一种使企业能够提取、转换和加载这些数据的语言。因此,SQL 是开发任何增值数据产品的基础。
我正在为完全的初学者运行一个在线 SQL 课程。我组织的这个项目使用了现有的免费在线资源,我通过每周视频电话来指导我的学生。在这篇文章中,我想与你分享我们在学习 SQL 的过程中使用的五个最好的免费资源。
1。SQLBolt
[## SQLBolt -学习 SQL-SQL 介绍
欢迎使用 SQLBolt,这是一系列交互式课程和练习,旨在帮助您在工作中快速学习 SQL
sqlbolt.com](https://sqlbolt.com/)
SQLBolt 是一门完全免费的完全互动的入门课程。除了创建、更新和删除表之外,还涵盖了所有 SQL 基础知识,包括编写查询、过滤、连接、聚合。
在介绍完每个概念后,需要完成一些实践练习,这有助于巩固您对所涵盖主题的理解。
2.可汗学院
Khan AcademySQL 简介课程是对 SQLBolt 的一个很好的补充,因为它包含了基于视频的类似概念的内容。这提供了一些有用的背景和更深入的解释。它也包括一些实用的互动练习。
3.Pop SQL
现在免费试用。编写查询、可视化数据并共享结果。通过 URL 共享查询,并将它们组织在…
popsql.com](https://popsql.com/learn-sql)
Pop SQL 实际上是一个非常有趣的协作 SQL 查询工具。它使多个用户能够共享查询,将常用查询存储在可搜索的库中,并为分析提供可视化界面。
Pop SQL 网站还在“ Learn SQL ”部分提供了全面的 SQL 教程库。特别有用的是,这些是按数据库类型组织的,例如,Redshift 或 MySQL 特定教程。如果您想了解不同平台之间的语法差异,这很有帮助。
4.SQLcourse.com
通过提交您的信息,您同意 SQLCourse 可以通过电子邮件、电话和短信向您发送 SQLCourse 报价…
www.sqlcourse.com](http://www.sqlcourse.com/cgi-bin/interpreter.cgi?sql_cmd=select+first%2C+age from+empinfo%3B)
本课程在格式上类似于 SQLBolt。这是非常互动的大量实践练习,你可以在他们的 SQL 编辑器中完成。还有一个 sqlcourse2.com,使用相同的格式和编辑器涵盖了更高级的概念。
5.Alan Beaulieu《学习 SQL》

学习 SQL:【Amazon.co.uk
如果您想对 SQL 语言有更深入的了解,那么一本书会是您资源列表中的一个有用的补充。Alan Beaulieu的《学习 SQL》是我发现的最好的书之一,可以通过这个 PDF 免费在线阅读。
这本书提供了一些有用的语言起源和用法的背景知识,提供了查询和表设计的概述,并涵盖了一些比上面列出的课程更高级的 SQL 主题。
在当今的商业世界中,诸如 SQL 之类的较老的编程语言仍然非常受欢迎。幸运的是,SQL 是最容易学习的语言之一,正如我在授课过程中发现的那样,来自许多不同背景的人可以通过在线学习相对快速地掌握这项技能。
感谢阅读!
我每月发一份简讯,如果你想加入,请通过此链接注册。期待成为您学习旅程的一部分!
作为数据科学家需要贡献的 5 大免费工具
你必须看一看开源项目
现在有许多工具可以用于我们的数据科学项目,但是你对其中有多少真正了如指掌呢?
为了让我们使用这些工具,有些开发人员正在为开源项目做贡献,就像我今天要向你们展示的那些。
这些将会是非常受欢迎的项目,你可能甚至不知道它们是开源的。我的目标是让你对这些感兴趣,甚至可能对它们有所贡献!

作者创作的图像
朱丽亚
这个惊人的项目有超过 1000 名贡献者!
Julia 是一种用于技术计算的高级、高性能动态语言。它被用于计算机科学的许多不同领域,如数据可视化、数据科学、机器学习、并行计算等。
Julia 已经被下载了 1700 多万次,社区已经注册了 4000 多个 Julia 包供社区使用。其中包括各种数学库、数据操作工具和通用计算包。除了这些,你还可以轻松使用来自 Python 、 R 、 C/Fortran 、 C++ 和 Java 的库。

图标由桉树
Scikit 学习
这个项目有将近 2000 名贡献者!
Scikit-learn 是一个用于机器学习的 Python 模块,构建在 SciPy 之上,并根据 3 条款 BSD 许可证发布。
该项目于 2007 年由 David Cournapeau 发起,作为谷歌代码之夏项目,从那时起,许多志愿者都做出了贡献。如果你想了解贡献流程,他们有一个专为贡献流程定制的页面。他们真的很开放,每天都欢迎新的贡献者!
有许多方法可以为 scikit-learn 做出贡献,最常见的是为项目贡献代码或文档。改进文档的重要性不亚于改进库本身。如果您在文档中发现了一个错别字,或者已经做出了改进,请立即向邮件列表发送电子邮件,或者最好提交一个 GitHub pull 请求。另一种贡献的方式是报告你面临的问题,并对其他人报告的与你相关的问题竖起大拇指。
该模块用于机器学习和领域内的很多操作,如 C 分类、回归、聚类、降维、模型选择、数据预处理等。
除此之外,每个人都可以访问它,并且可以在各种上下文中重用它。

图标由 xnimrodx
阿帕奇看象人
参与 Apache 项目不仅仅是写代码,而是尽你所能让项目变得更好。有很多方法可以做出贡献!
Apache Mahout(TM)是一个分布式线性代数框架和数学表达 Scala DSL ,旨在让数学家、统计学家和数据科学家快速实现他们自己的算法。Apache Spark 是推荐的现成分布式后端或者可以扩展到其他分布式后端。
- 数学表达 Scala DSL
- 支持多个分布式后端(包括 Apache Spark)
- 用于 CPU/GPU/CUDA 加速的模块化本地解算器
贡献的方式
在 Mahout 中有很多东西,我们很乐意为文档、性能改进、更好的测试等做出贡献。最好的开始是通过查看我们的问题追踪器,看看有什么问题被报告,看看是否有你可以解决的。小的、写得好的、测试过的补丁是一个很好的尝试方法。这可能是像修改一个错别字一样简单的事情。
更重要的是,你要展示出你理解对代码进行修改的必要步骤。在这一点上,Mahout 是一只相当大的野兽,所以更改,尤其是来自非提交者的更改,需要是渐进的,而不是革命性的,因为通常很难评估一个非常大的补丁的优点。

图标由图标图标
自然语言工具包
NLTK——自然语言工具包——是一套支持自然语言处理研究和开发的开源 Python 模块、数据集和教程。
GitHub 上的 NLTK 组织有很多仓库,所以他们可以更好地管理问题和开发。最重要的是:
- nltk/nltk ,主库与代码库相关;
- nltk/nltk_data ,存储库,包含与库默认不附带的语料库、标签和其他有用数据相关的数据,可以通过
nltk.downloader下载; - nltk/nltk.github.com ,nltk 网站,提供关于图书馆、文档、nltk 书籍下载链接等信息。;
- nltk/nltk_book ,nltk 图书的源代码。

图标由贝克里斯
H2O.ai
H2O.ai 是人工智能和机器学习领域的开源领导者,其使命是为每个人实现人工智能的民主化。全球 20,000 多家组织中的数十万数据科学家正在使用行业领先的企业就绪平台。它们使每个公司都成为金融服务、保险、医疗保健、电信、零售、制药和营销领域的人工智能公司,并提供真正的价值和转变当今的业务。
贡献的方式
多年来,H2O.ai(公司)和更大的开源社区内的大量贡献者已经建立了 H2O。你可以通过回答堆栈溢出问题或者提交错误报告开始为 H2O 做贡献。

图标由桉树
熊猫探索性数据分析的 5 大功能
或者再多几个?
当谈到数据科学或数据分析时,Python 几乎总是首选语言。它的图书馆熊猫是你不能,更重要的是,不应该回避的。

马修·施瓦茨在 Unsplash 拍摄的照片
虽然 Pandas 本身并不难学,主要是因为它有不言自明的方法名,但是拥有一个备忘单仍然是值得的,尤其是如果您想快速编写代码的话。这就是为什么今天我想把重点放在我如何使用 Pandas 来做探索性数据分析上,通过向你提供我最常用的方法列表以及对这些方法的详细解释。
我不想过多地介绍,所以我将快速浏览一下所用的数据集,然后我们将进入正题。
使用的数据集
没有必要使用复杂的数据集来演示简单的想法,因此考虑到这一点,我决定使用虹膜数据集。如果您决定跟随代码,您可以在链接上找到数据集。
下面是如何导入 Pandas 库并加载到数据集中:

好了,让我们不要浪费更多的时间,看看 EDA 过程通常是什么样子,熊猫式的。
1.头部()、尾部()和样本()
我决定将这三个放在同一个桶中,因为它们背后的主要思想是相同的——那就是在不可视化的情况下查看数据的样子。
毫无疑问,我可以说这 3 种方法是我最先使用的方法之一,重点是最后一种,因为如果你处理的是顺序数据,那么head()和tail()可能会产生误导。
总之,下面是如何在我们的数据集上使用它们:



对于最后一个,不能保证你会得到相同的结果——由于随机效应——没有任何错误。
关于这三种方法没有太多要说的,使用它们来初步查看您的数据,但仅此而已。
2.描述()
如果在探索性数据分析的过程中有一件事是你反复做的,那就是为每个(或几乎每个)属性执行统计汇总。
如果没有合适的工具,这将是一个非常乏味的过程——但谢天谢地,熊猫在这里为你做繁重的工作。describe()方法将对每个数字列进行快速统计汇总,如下所示:

简而言之,这是一个熊猫数据框架,没有人强迫你保留每一个统计值。以下是如何只保留均值、中值和标准差的方法:

注意我是如何使用 transpose 操作符从列切换到行的,反之亦然。
3.nsmallest()和 nlargest()
我想这两种方法的目的是毋庸置疑的,尽管如此,它们在探索性数据分析的过程中是有价值的。
我经常在对数据集进行统计汇总后使用它们,以检查某个感兴趣的属性是否包含极端值或相当静态。
让我们看看如何找到具有最小值sepal_width的 5 个观察值:

另一方面,下面是如何找到具有最大值petal_width的 5 个元素:

差不多就是这些了——这里没什么好说的了。
4.isnull()
缺失值是数据分析的一大部分,这是毫无疑问的。不太可能在每个时间点都能得到所有的观察结果,原因可能有很多——从特定领域的原因到简单的人为错误。
因此,每个探索性数据分析过程的一部分就是测试缺失值并找出如何处理它们。
熊猫图书馆这里也有你。我们可以检查整个数据帧上的缺失值:

现在 Iris 数据集完全没有缺失值,但这并不意味着我们可以进一步探索。
由于 Python 将 True 计算为 1,将 False 计算为 0,我们可以使用sum()函数来获得一些具体的数字,而不是上面的布尔数据帧:

现在,这个看起来更舒服。如果我们想检查整个数据集中缺失值的总数,而不是特定列中缺失值的总数,没有什么可以阻止我们再次使用sum()函数:

5.值计数()
如果您正在寻找一种方法,能够告诉您一个属性的单个可能选项有多少个观察值,请不要再找了。
value_counts()方法可以为您完成所有这些工作,还可以选择计算缺失值,甚至以百分比显示结果。
现在,您不会在整个数据帧上使用该方法,而是在单个属性上使用。这里有一个例子:

这里揭示了另一个重要的思想——如果您关心简洁的输出,最好在分类属性上使用这种方法。如果你没有那么幸运,你可以参考像cut()这样的方法将连续变量转换成分类变量。
如果您的属性包含缺失值,value_counts()不会自动考虑它们-您需要指定:

类似地,有时返回百分比而不是计划整数更好——这样更容易向他人展示结果:

在你走之前
我希望这篇文章能够在 Python、Pandas 和探索性数据分析方面为您指明正确的方向。
就我个人而言,我不会在实际项目中使用更多的方法,但诀窍是事先进行适当的数据操作和转换。分析本身就变得微不足道了。
感谢阅读。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
在数据分析面试中脱颖而出的 5 大经验
我给求职者的简单建议
从 Visa 和谷歌数据访谈中吸取的教训

来源 Unsplash
哦,不,我不知道面试要准备什么
我必须为所有可能被问到的问题准备好所有可能的答案
有人要求我为申请谷歌的朋友提供推荐和模拟面试。尽管他们是非常积极的专业人士,但他们考虑改变他们在数据和技术公司的职业生涯。
但是,在面试过程中,他们变得过于紧张,没有恰当地表达自己的价值。他们觉得自己没有与面试官交流信心和联系。
听起来很熟悉?
为了帮助求职者,我很乐意列出我在回答面试问题时看到的 5 个最大的错误。
我希望这些课程能帮助你准备并成功通过数据或技术面试。
警告:这篇文章旨在根据我作为面试官/电子工程师的有限经验,强调常见错误和成功面试的建议。这些教训不是公司特有的,也不以任何方式受到任何外部议程的驱动。请点击下面的链接,获取关于技术/行为/假设特定面试的一般建议。
我在谷歌、Visa 等公司担任数据分析师/科学家的面试经历
towardsdatascience.com](/ace-your-data-analytics-interviews-ef114606c5d7)
第 1 课:确定附加值和文化契合度

来源 Unsplash
面试旨在解决你的面试官的问题
你如何解决面试官的问题?
在面试之前,你需要站在招聘经理的角度,回答以下问题:
- 增值:你给你的团队带来了什么巨大的价值和影响?
- 文化契合度:你如何与你的团队契合并有效协作?
如果你的招聘经理能回答你如何增加价值,如何融入企业文化,你就被录用了。
你可以炫耀你出色的 GPA 和所有在线课程证书。但是如果他们在这两个因素上不服气:价值观和文化。
决定很简单:拒绝。
我需要探索哪些价值观和文化?
在科技公司中,的核心价值观可能是创新和合作(团队运动胜过个人主义)。知道了这一点,你需要准备故事来证明你如何创新和合作。
你可以分享你如何单枪匹马通过谈判或每天只睡 5 个小时带来数百万美元。但这并不适合那些优先考虑协作、创新和工作生活平衡的公司。
那么,你应该如何传达附加值和文化契合度呢?
你很幸运。因为有一个符合要求的问题。
说说你自己吧
最好的消息是,这是你的面试官会问的第一个问题;一个免费的加分题。你的回答应该从如何让增加价值和融入文化开始,为面试定下基调。
第 2 课:传达附加值和文化契合度

来源( Unsplash )
这是对约翰(化名)的模拟面试示例,他是一名工作了 5 年多的专业人士。
面试官(我):说说你自己吧
受访者(不是真约翰):我是 XX 队的。我们支持客户经理。我们确保通过大型出版商向客户销售广告产品。我们的团队获得了公司最具创新性团队的奖项。
你怎么想呢?你如何评价这个答案?
哦不,它没击中目标!
反思为什么这不是一个好答案。
这个问题要求约翰回答他的背景故事。但相反,约翰更多地宣传他的团队。
反对!如果约翰只关注自己,这不是很傲慢吗?
没错,但这给招聘经理带来了怀疑:
- 约翰似乎在隐藏他团队的成就?
- 我应该雇用“约翰的团队”而不是“约翰”吗?
在我看来,最好的答案是放置熟悉的黄金因素:价值添加和文化契合。
面试官:说说你自己吧
受访者(我):
"【增值】我分析了关键的客户数据,并为 Lazada 和 Visa 部署了全球数据基础设施。我的工作使销售额增加了 XX%,部署错误减少了 XX。”
"【文化契合】我还在新加坡管理大学分析俱乐部和面向数据科学的媒体定期讲授数据分析并撰写博客,吸引了超过 50 万名全球读者"
"【结论】这表明我愿意为我的雇主创造价值,并分享我的知识,以培养我的社区并成为有效的数据分析师。我相信这证明了我可以用数据 ( 增加价值)****创造强大的解决方案,并成为您团队的优秀合作者(文化契合)
“说说你自己吧”是所有面试中最重要的问题。这会给人留下良好的第一印象,让你与其他候选人有所不同。
抢先一步,你会得到回报。
第三课:讲故事——首先关注愿望

来源 Unsplash
考虑这些行为问题。
面试官:说说你做过的项目
南希(化名):我为世界野生动物基金会(WWF)创作内容。我在社交媒体上分享了它。我也在婚礼策划初创公司工作,向客户提出建议和要求。在此之前,我毕业于 XX 大学 XX 专业。我希望在提升技能的同时挑战自我
想一想这个回答。你会以同样的方式回答这个问题吗?我们有什么方法可以做得更好吗?
注意!我们经常优先考虑“是什么”而不是“为什么”
注意关键词【什么—历史】和【为什么—渴望】。 Nancy 在历史事实(创造、分享等)上阐述了这么多,却在最后留下了一句愿望(希望、挑战)
这在我们的大部分回答中很常见。首先,像约翰一样,我们不想被视为傲慢。第二,我们更熟悉我们的历史事实,而不是我们的愿望。最后,我们可能不愿意分享我们的愿望。
讲述基本故事:人们购买[为什么]你这样做。
“你做什么人家不买;他们买你为什么这样做。你所做的只是证明你所相信的”——西蒙·西内克(从为什么开始)
为了让你的陈述更有说服力,我建议你把你的愿望放在第一位(钩子),然后才是历史事实。例如,南希可以回答:
面试官:告诉我你做过的项目
南希:
【为什么】在我的整个项目中,我都在寻求质量和保证,以确保我能够传递价值。这是我每天工作的动力,看到客户对我的高质量交付品的微笑。
【什么】为了实现这个愿望,我创建了 XX 项目,并利用 ZZ 公司的大量经验完成了 YY
同样,我相信我可以提高你们团队所渴望的高质量标准。
通过重新安排你的叙述,你给出了一个更简单、更有说服力的答案。这直接回答了面试官关于你如何从你的抱负(文化契合)的角度产生增值影响的问题。
优先考虑[为什么]让你的面试官兴奋。
第四课:提问

来源( Unsplash )
考虑以下假设性问题交流
面试官:想象一下,产品经理让你向你知道不需要的客户推销某种产品。你是怎么管理的?
约翰:我会向数据和产品经理保证,我们现在不需要向他们销售产品。这些用户可能正在挣扎,所以我们需要给他们一个信任我们的机会。当我们建立对他们的信任时,收入可能会在后期出现。
这是一个可靠的答案,但它仍然没有击中要害。为什么?
注意约翰的以下隐藏假设:
- 约翰假设他和产品经理对收入有相同的兴趣。然而,事实可能并非如此,产品经理可能会优先考虑用户获取而不是收入。
- John 认为将故事讲述的重点放在收入上会安抚有不同利益的产品经理。
- 约翰认为面试官关心收入,尽管这个问题可能要求“正确的行动”来测试道德答案,而不是信任=收入。
没有语境,他的回答看起来很强势,很教科书。
但是如果招聘经理有不同的假设,他的答案就会变成最差的答案。在我的模拟面试中,我发现这个错误发生在面试者身上。他们把问题当作表面价值,而不是问为什么这个问题首先会出现(上下文)
假设性问题基本:当有疑问时,总是提问。
不断提问,直到你清楚面试官需要你做什么。
你:“你这是什么意思?”
面试官(思考):哦,产品经理可能需要知道产品发布会的进展,你需要安抚他,但不要向我们的客户出售不必要的功能。
然后你可以问一个更具体的问题,比如:
你:产品经理的 KPI 和主要关注点是什么?
面试官:他们关注的是用户获取和反馈。
这将确保你了解自己隐藏的假设,并形成共识。
你:你可用的数据(资源)是什么?
采访者:我们有一些优先客户的反馈。他们已经报名表示有兴趣使用这些产品。
注意,通过提问,你是负责人。你倾听并理解意图。
你:根据你所说的,由于产品经理关注用户获取,我们在 XX 的现有产品已经可以流传输这些交互,我们可以简单地发布免费的测试版,首先用用户样本进行测试,而不会增加他们的财务负担。
这将有助于我们与客户建立信任,同时满足产品经理展示用户获取的需求。
就这样,在几个善意的问题中,你展示了有效的解决问题的技巧。
当有疑问时,保持冷静并提出问题
第五课:祈祷,微笑,享受!

来源( Unsplash )
如果我告诉你,有一个让自己变得冷静、有能力、有文化适应力的秘籍呢?你会兴奋地跳起来,跟着这个骗子吗?
你会的。微笑!!!
我见过面试者不笑,因为他们在真实/模拟面试中很紧张。
这是令人担忧的,因为他们的焦虑会让他们在不理解意图的情况下回答问题。他们不能充分证明自己的能力。
微笑让你和你的招聘经理友好相处。停下来整理你的想法会让你的心跳变慢。
面试官不是你的敌人
受访者忘记微笑的一个错误是因为他们紧张。这是有道理的,因为信息不对称的风险和不确定性很高。
但是面试官会帮你的。帮助你成长,了解这个角色是否适合你。所以,微笑吧!即使紧张,也要微笑!因为我们是你的朋友,不是你的敌人。
祈祷,微笑,享受!
最后的想法
我们学到了在分析中提供更好的采访的 5 条经验:
- 确定附加值和文化契合度:了解什么对你的面试官重要,以及你如何解决他们的问题。
- 传达附加值和文化契合度:了解如何将这些价值观传达给“告诉我你自己”
- 讲故事——首先关注愿望:改变叙述的顺序,迫使面试官就范。
- 提问:与面试官达成共识,利用现有数据有效解决问题。
- 祈祷,微笑,享受!永远记住,当一扇门关闭时,其他的门也会打开。
一如既往,如有任何问题,请通过 Linkedin 联系我。如果时间允许,我很乐意回答你的问题。
索利·德奥·格洛丽亚
关于作者
文森特用 ML @ Google 对抗网络滥用。文森特使用高级数据分析、机器学习和软件工程来保护 Chrome 和 Gmail 用户。
除了在谷歌的工作,Vincent 还是《走向数据科学媒体》的特约撰稿人,为全球 50 万以上的观众提供有抱负的 ML 和数据从业者的指导。
在空闲时间,文森特在佐治亚理工学院攻读硕士学位,并为铁人三项/自行车旅行进行训练。
最后,请通过 LinkedIn , Medium 或 Youtube 频道 联系文森特
如何评价我的分类模型结果
混淆矩阵、ROC-AUC、F1 得分、对数损失

来源:照片由来自 Unsplash 的 Annie Spratt 拍摄
与回归模型不同,当我们评估分类模型结果时,我们不仅要关注预测结果,还需要考虑每一类的预测概率和预测能力。
网上有很多关于分类指标选择的文章,这里我将只使用我自己的话来解释我的 5 个最重要的指标,在你评估你的分类模型之前,你应该考虑和知道。
1.混淆矩阵
2.准确度、召回率、精确度
3.F1 分数
4.接收操作特性(ROC),曲线下面积(AUC)
5.原木损失
上面的列表没有按照重要性的顺序排列。为了便于说明,我将使用一个住房数据示例来展示预测住房价格范围的分类结果。
1.混淆矩阵
什么是混淆矩阵?
从名字我们可以看出,混淆矩阵输出是一个矩阵,它相当'混淆'?不过,如果你懂逻辑的话,其实还是挺直观的。混淆矩阵是一个 2*2 的表(用于二进制分类),它是许多其他度量的基础。假设您的分类只有两类结果(1 或 0),混淆矩阵是您的预测(1 或 0)与实际值(1 或 0)的组合。

来源:作者-困惑矩阵
真阳性:正确预测阳性结果的情况
假阳性:预测结果为阳性但实际为阴性的情况
假阴性:案例然后你预测结果是阴性,但实际上是阳性
真阴性:正确预测阴性结果的情况
在这四个部分中,第一个词表示你的预测是否正确,第二个词表示你的预测值。查看您的分类模型在不同价值类别上的表现非常有用。矩阵不仅仅局限于 2*2,如果你的分类结果有 2 个以上的类别,你可以看到一个更大的矩阵。
示例
#Calculate confusion matrix
from sklearn.metrics import confusion_matrix
matrix=confusion_matrix(y_test, y_predicted,labels=['high','low'])
cm=pd.DataFrame(matrix,index=['high','low'],columns=['high','low'])
print(cm)

混淆矩阵示例
在这里,我将房价分为高和低,你可以看到不同类别的分类结果。注意,在 sklearn 包中,y 轴是真值,为什么 x 值是不同于正常约定的预测值。在这里,您只能看到绝对数字,而不能直接看到百分比指标。
2.准确度、召回率、精确度
这 3 个指标直接从混淆矩阵结果中计算得出,是基于您从混淆矩阵中看到的绝对数字的百分比指标。
精度
准确性纯粹是您总体上正确预测的案例的百分比。

来源:作者-准确性计算
准确度= (TP+TN)/(TP+TN+FP+FN)
什么时候使用准确性?
准确性是衡量整体模型表现的一个很好的标准。然而,它并没有告诉你在每个类别中的表现,因此,如果你单纯地看准确性,你可能会错过重要的信息。当不同类别中的大量案例相似或与其他指标一起使用时,最好使用。
回忆
召回衡量实际阳性病例被正确识别的百分比。

来源:作者-回忆计算
召回= TP/(TP+FN)
何时使用召回?
当的目标是获取最大数量的阳性病例时,使用召回。例如,在最近的新冠肺炎疫情中,政府希望跟踪社区中所有的感染病例。如果你建立了一个模型,根据症状来预测这个人是否感染了新冠肺炎病毒,回忆将是一个重要的衡量指标。
精度
精确测量在预测为阳性的案例中,有多少百分比是真正的阳性。

来源:作者-精确计算
精度= TP/(TP+FP)
何时使用 Precision?
当您想要非常精确地测量阳性病例时,使用 Precision。它总是与召回相冲突,因为您想要捕获的阳性案例越多,您将被归类为阳性案例的标准就越低。在新冠肺炎病例的例子中,如果您想要捕获更多的感染病例,您可能想要包括所有具有轻微症状的病例,这些症状可能只是由于普通流感引起的。
例子
#Calculate Accuracy
from sklearn.metrics import accuracy_score
accuracy_score(y_test,y_predicted)
# Accuracy is 0.88124999999999998#Calculate Recall
from sklearn.metrics import recall_score
recall_score(y_test, y_predicted)
#Recall is 0.84109589041095889#Calculate Precision
from sklearn.metrics import precision_score
precision_score(y_test, y_predicted)
# Precision is 0.84573002754820936
我们可以看到,这里的准确率略高于召回率和准确率,因为该模型在负面(低价)情况下预测得更好。
3.F1 分数
F1 成绩是多少?
考虑到精确度和召回率之间的冲突特征,F1 分数被创建为具有召回率和精确度之间的平衡度量。这是回忆和精确的调和平均值。

F1 得分公式
为什么我们需要 F1 的分数?
你可能要问:为什么我们不简单地平均精度和召回率?嗯,如果正面和负面案例的分布非常不均匀,平均值可能不能很好地代表模型性能。

在上面的例子中,只有一个真实的阳性案例,模型捕捉到了它。然而,在确定为阳性的 100 个病例中,只有 1 个是真正阳性的。因此,召回率=1,精确度=0.01。两者之间的平均值是 0.505,这显然不能很好地代表模型有多差。F1 得分= 2(10.01)/(1+0.01)=0.0198,这更好地展示了模型的表现。
例子
#calculate F1 score
from sklearn.metrics import f1_score
f1_score(y_test,y_predicted)
# F1 score is 0.84340659340659341
4.接收操作特性(ROC),曲线下面积(AUC)
AUC 是 ROC 曲线下的面积,它是两个方面的良好衡量标准:
- 该模型如何区分这两个类别(积极和消极)
- 模型对不同类别的识别有多准确(比如它是否正确地将 A 组识别为阳性)?
那么什么是 ROC 曲线呢?
这里,我们需要首先理解两个指标:
- 真实阳性率(TPR): TPR 实际上等于回忆真实阳性案例中,有多少百分比在模型中被正确捕获
- 假阳性率(NPR):这衡量在真正阴性的病例中,有多少百分比实际上是假阳性。
TPR 和 NPR 正相关。这是因为当你想在你的分类模型中捕获更多的正面案例时,不可避免地你会错误地分类其中的一些案例,并且 NPR 会增加。 ROC 曲线是对 NPR 绘制的 TPR,曲线下的面积越大,不同组之间的分离越好。
例子
#Calculate AUC
from sklearn.metrics import roc_curve, auc
fpr, tpr, treshold = roc_curve(y_test, y_score_new)
roc_auc = auc(fpr, tpr)
#auc is 0.96

来源:作者 ROC 曲线
对于 2 类(1 或 0)上的分类问题,你瞎猜的概率是 50%。当你盲目猜测类别时,蓝色虚线显示曲线 TPR 和 FPR,对于该对角线,曲线下面积(AUC)为 0.5。
曲线上的每个点代表 TPR 和 FPR 之间不同的分界点。例如,如果我不能容忍任何假阳性率(< 0.01),那么我能达到的真阳性率在 0.6 左右(见图上的绿点)。如果我把自己的标准放宽一点,只需要把 FPR 控制在 0.1 以下,那么我的 TPR 就可以达到 0.9(见图上的红点)。
阈值的选择基于不同的业务需求,通常情况下,最佳选择是最大化 TPR 和 FPR 之间的差异,在图上用橙色和蓝色虚线(见红线)之间的最大垂直距离表示。我们的预测示例具有相当好的 AUC(0.96),优化点在(0.1,0.9)左右
您可以在以下链接中找到有关 ROC-AUC 的更多信息:
什么是 ROC 曲线,我们如何解读它?
towardsdatascience.com](/deep-dive-into-roc-auc-cfdd78959ac3)
5.对数损失/二元交叉熵
日志损失函数惩罚错误分类的案例,并且对正确分类的案例缺乏信心。与 ROC-AUC 相同,它不仅考虑分类准确性或结果,还考虑分配给模型中每个病例的概率。模型越好,测井曲线损失值越低。

对数损失公式
y 是真实结果(0 或 1),p 函数是模型预测结果为 1 的概率。因此,如果实际值为 1,我们希望最大化分配给预测 1 的概率,即 p(y ),而如果实际值为 0,我们希望最大化预测 0 的概率,即 1-p(y)。这是求和符号之后我们想要最大化的部分。值在 0-1 之间的对数函数为负。因此,为了使整个值为正,函数前面有一个负号,我们需要最小化整个函数。
日志损失的可接受值是多少?

来源:作者-日志损失值曲线
对数损失值可以从 0 变化到无穷大。但是如果按照公式计算,如果只是盲目的给每种情况分配 50%,那么 log loss 函数就是 0.69。因此,您应该明确地将日志损失值保持在 0.69 以下,并根据业务需求来决定阈值。
例子
#Calculate log loss
from sklearn.metrics import log_loss
log_loss(y_test,y_score)
#log loss is 0.32241485496779987
建议
总之,不同的度量服务于不同的目的,并且可以相应地应用于不同的问题。但是,一般建议使用 ROC-AOC 或对数损失,因为它们考虑了每类预测的预测概率。尽管两种模型都能正确预测这种情况,但 90%置信度的预测模型肯定比 51%置信度的预测模型更受青睐。
如果您有兴趣知道回归模型使用什么指标,可以参考下面的链接:
缅因州 RMSE MSE 的 r 广场
towardsdatascience.com](/what-are-the-best-metrics-to-evaluate-your-regression-model-418ca481755b)
公司在数据科学方面犯的五大错误
在您迈向数据驱动的决策过程中应该避免什么
成为一家数据驱动的公司是最难实现的目标之一。这远不是一个详尽的列表,但我看到一些公司在数据科学之旅中遇到的主要问题,
- 没有定义的度量标准
- 做出错误的雇佣
- 成为流行语焦点
- 没有解决数据质量问题
- 敏捷管理的误用
简而言之,这些问题往往源于没有解决企业内部更基本的问题,只有当数据和相关问题占据中心位置时,这些问题才会变得明显。

弗兰基·查马基在 Unsplash 上拍摄的照片
没有定义的度量标准
为了正确地对收集的数据采取行动,需要知道它提供了什么样的行动,以及如何解释它们的结果。度量是以这种方式将数据置于背景中的一种手段。如果没有合适的指标,任何人都可能猜测什么输入决定什么输出,这意味着公司并不真正了解他们数据的价值。在许多情况下,这可能导致每一个新的分析问题都导致对每一个可用数据点的深入研究,这显然是不可持续的。随着新数据科学员工的加入,他们通常不具备特定领域的知识,无法独立地将数据置于特定的环境中,这些问题将被进一步放大。定义的指标应作为创建数据驱动型组织的基础,允许透明和可用的相关公司数据报告。
做出错误的雇佣
很多时候,一家公司会聘用一名数据科学家作为他们的第一个专职数据雇员。很难推测每个具体案例中的原因,但我认为这主要是因为缺乏对数据驱动型转型早期阶段真正需要什么以及哪些技能使之成为可能的理解。所需要的是具有相关业务经验的人来将业务决策与数据联系起来,这意味着具有业务分析师经验的人几乎总是更适合大多数公司。业务分析师也可能有更多的相关经验,使用像微软 Excel 这样的软件来完成他们的大部分工作并分享他们的输出,这可能比脚本或笔记本更容易获得和理解。后一点尤为重要,因为作为一家数据驱动型公司,成功需要尽可能无摩擦地利用任何此类发现。
一个相关的问题是只寻找独角兽:那些特殊的人可以独自将数据科学项目从想法交付到发布,成为某种混合的业务分析师、数据科学家和数据工程师。简而言之,这些人并不存在,这表明公司未能理解他们的需求,也未能相应地对其进行优先排序。
成为流行语焦点
对于希望成为数据驱动型企业的公司来说,沉迷于人工智能、深度学习、NLP 等流行词汇可能很有诱惑力。由于只关注头条新闻,公司往往会忽略将这些事情变成现实所需的重要基础工作。这通常表现在对复杂和雄心勃勃的项目进行优先排序,即使成功交付,也不容易在现有业务中找到自己的位置。相反,公司应该密切关注他们现有的商业决策,看看分析如何在短期内帮助这些决策。这应该导致对项目更合理的期望,能够交付真正的价值并避免数据科学幻灭。这还要求数据科学员工与现有业务流程更充分地集成,以确保他们的分析能够满足当前需求。
没有解决数据质量问题
你的分析只会和你的数据一样好,或者更简洁地说“垃圾进,垃圾出”。在畸形数据输入的情况下,这可能不是一个很难争论的问题,例如,输入字段没有被正确验证,但是数据质量问题可能以更微妙的方式表现出来。例如,为了解决不同业务涉众的独立但相关的需求,可能会引入许多近似重复的字段,这些字段并不总是能够很好地沟通。虽然从表面上看这是无害的,但这将为任何后续分析引入不必要的复杂性,如果不是完全使没有澄清的工作无效的话。与此相关,如果这些问题得不到解决,可能会导致自动化和报告变得更加困难,因为手动解决方法可能是唯一可能的解决方法。
敏捷管理的误用
数据科学本质上是探索性的和开放式的,这意味着进展和期望每天都在变化,这可能与您的软件工程经验大相径庭。这可能会导致很难定义适合典型 Scrum 方法的特定任务和可交付成果的情况,尤其是当这是第一次在公司中执行这种与数据相关的工作时。这也可能意味着,遵循日常站立、回顾和冲刺计划的典型格式可能变得没有必要,如果不是有些专横的话——尽管公司文化作为一个整体有很大的作用。不幸的是,在这种情况下,没有一个正确的答案,但是总的来说,遵循一种更宽松的 Scrum 方法,或者更接近看板的方法,可能会更有用。在许多情况下,应该将探索本身视为可交付成果,而不是任何更具体的东西。阅读一下 CRISP-DM 模型,它很好地描述了数据挖掘工作的周期性,在这里会很有用。
如需更多数据科学文章,请务必查看我的博客。
让您立即开始学习数据科学的 5 大在线课程。
以下是让我开始学习数据科学的在线课程。

数据科学仍然是 2020 年最受欢迎的专业之一。事实上,需求正在飙升,以至于数据科学技能缺口将持续扩大,因为数据奇才的供应赶不上世界各地公司的需求。
也就是说,有成千上万的学生跳入这个领域,在大学里接受这个复杂的课题,这样他们就可以跟上潮流,在这个多学科的职业生涯中有一个机会。由于像 Glassdoor 的 50 个最好的工作这样的报告连续 4 年将数据科学视为征服者,以及大量的文章和在线课程促使和影响年轻人开始努力掌握数据科学。
然而,有了互联网,一些大胆的人决定制定自己的课程或途径来学习数据科学。由于数据科学已经变得民主化,今天几乎任何人都可以学习它,即使没有受过正规教育,自学也是完全可能的。
因此,这篇文章是写给所有想学习数据科学的人,或者你一直想了解更多,但不知道从哪里开始。在本文中,我分享了让我开始学习数据科学并让我对将数据转化为见解充满热情的 5 门课程。
但是在开始学习这些课程之前,这里有一些先决条件。
- 基本的计算机科学知识
- 基本编程技能
- 好奇心
- 热情
- 决心
解决了这个问题后,看看下面的列表吧!
1.什么是数据科学— IBM

coursera.org
Coursera 是当今最好的 MOOC/在线学习平台之一,它有无数令人惊叹的课程来提升你在编程、数学、机器学习等方面的水平。
由 IBM 提供的课程“什么是数据科学”是所有数据科学爱好者的一个很好的起点,它探索了人类如何从远古时代的数据中发现见解和趋势。快进到今天,在这个时代,人工智能正在某些领域取代人类,数据呈指数级增长,数据科学可以做令人惊叹的事情。
在本课程中,您将发现什么是真正的数据科学,该领域涉及的重要主题-神经网络、Hadoop、大数据,以及如何在业务中使用数据魔法。
2.CS109——哈佛大学

哈佛大学
CS109 是一门受欢迎的数据科学初学者课程,它涵盖了数据科学的基本方面,并遵循事实上的标准大学课程。这门课最棒的部分是它是由哈佛教授的,哈佛是一所著名的大学,学费昂贵,但对每个人都是免费的。
整个课程都可以在 GitHub 上获得,视频大部分都是高清的。还有讲座幻灯片供你在学习的过程中跟随课程。也有家庭作业,如果你有兴趣做,只要按照 README.md 上的步骤做就可以了。
虽然这门课程是 2015 年的,但它仍然教授几乎所有你需要知道的数据科学知识。课程内容包括——Python、网络搜集、概率、回归、机器学习、集成、贝叶斯和聚类。最后一周还有最后一个顶点项目,用来测试你的知识以及你是否真的有建设性地学习。
3.Python 中的数据科学简介—密歇根大学

coursera.org
由美国顶级大学之一密歇根大学提供的这门课程通过 python 编程语言向学习者介绍数据科学,这在当今的数据科学领域非常突出。
您将学习 python 编程环境的基础知识,包括基本的 python 编程技术,如 lambdas、读取和操作 CSV 文件以及 Numpy 库。
整个课程都使用 Jupyter 笔记本,功能多样,非常好用。你可以熟悉科学家在日常工作中使用的流行工具数据。
简而言之,您可以学习 Python(数据科学中最流行的语言,尽管其他语言如 Golang 和 Julia 正在迎头赶上)、Numpy、Pandas 和数据清理(正如您所知,数据科学家 80 %的时间都花在这上面)
4. Kaggle 微课

Kaggle.com
这个令人惊叹的微型课程集合是每个想免费学习数据科学的人的一个令人惊叹的资源,它几乎涵盖了数据科学的每个方面,一些课程包括基础知识,如 Pandas、SQL 简介、数据可视化以及复杂的主题,如深度学习和 NLP。
他们声称,这些微型课程是学习数据科学或提高技能的“最快、最有趣”的方式。此外,这些课程教授复杂的主题,但被分解成它们的关键组成部分,因此你可以在短短几个小时内学会它们。
P.s .完成后您将获得免费证书,只需稍微提醒一下。它们是很好的动力,会推动你完成它。
5.带 TensorFlow APIs 的谷歌机器学习速成班

谷歌开发者
这门课程是互联网内容海啸中的一颗神奇宝石,每个想学习机器学习的人都应该去看看。它是由谷歌的人际关系专家教授的,他们非常擅长以一种适合完全初学者的方式分解困难的话题。
尽管在你参加这个课程之前,你应该去看看先决条件页面,确保你有能力学习机器学习。不要太激动,开始学习一些你不能理解的东西。需要线性代数和多变量微积分的数学知识。
通过这个速成课程获得算法和基本机器学习概念的实践,并通过同伴 Kaggle 竞赛获得真实世界的经验。
如果你感兴趣,谷歌开发者也有免费的 python 速成班。您还可以访问用谷歌人工智能学习,探索完整的培训资源库。
行动计划

老实说,互联网是有史以来最伟大的发明之一,但是和所有事物一样,它也有好的一面和坏的一面。你可以学习新的技能,为你的生活创造一个更好的未来,或者花几天时间看网飞的多个电视节目,当你长大后,你可能会后悔。我建议选择前者,尽管有控制地使用网飞并无大碍。
面对如此多的不确定性和混乱,真的很难集中意志力和力量去专注于你的个人项目和激情。但是保持乐观,看事情积极的一面,你会花更多的时间在家里,你甚至会和你的家人有更多的联系。
所以我希望你能利用互联网来获得对你的未来有益的技能,同时珍惜你与家人和朋友在一起的时间。记住要保持乐观,积聚学习的能量。
推荐的在线学习习惯/实践
- 活跃在论坛中。不要害怕问。提问是学习的基本步骤,表明你正在学习。
- 对于 Coursera 来说,讲座视频的底部有字幕,你可以突出显示任何你认为有见地的重要信息。这样,你就可以把它储存起来,在你需要的时候随时取用。
- Coursera 课程在讲课和作业中使用 Jupyter 笔记本,所以建议尝试使用它。确保您对快捷键和命令感到舒适,因为您将来会经常用到它们。
感谢您的阅读,并祝您在数据科学之旅中一切顺利!
下一步是什么
查看互联网上的20 大免费数据科学、ML 和 AI MOOCs 列表 以了解更多主题,如深度学习和 NLP
[## 互联网上 20 大免费数据科学、ML 和 AI MOOCs
以下是关于数据科学、机器学习、深度学习和人工智能的最佳在线课程列表
towardsdatascience.com](/top-20-free-data-science-ml-and-ai-moocs-on-the-internet-4036bd0aac12)
查看我关于数据科学的一些最好的文章!
以下是 GitHub 上一些关于数据科学的最佳资源。
towardsdatascience.com](/top-10-popular-github-repositories-to-learn-about-data-science-4acc7b99c44) [## 机器学习和数据科学的 20 大网站
这里是我列出的最好的 ML 和数据科学网站,可以提供有价值的资源和新闻。
medium.com](https://medium.com/swlh/top-20-websites-for-machine-learning-and-data-science-d0b113130068) [## 开始数据科学之旅的最佳书籍
这是你从头开始学习数据科学应该读的书。
towardsdatascience.com](/the-best-book-to-start-your-data-science-journey-f457b0994160) [## 数据科学 20 大播客
面向数据爱好者的最佳数据科学播客列表。
towardsdatascience.com](/top-20-podcasts-for-data-science-83dc9e07448e)
请阅读我的超学习数据科学系列,其中提供了大量关于有效学习的建议和技巧。
这是一个简短的指南,基于《超学习》一书,应用于数据科学
medium.com](https://medium.com/better-programming/how-to-ultralearn-data-science-part-1-92e143b7257b)
联系人
如果你想了解我的最新文章,请通过媒体关注我。
其他联系方式:
注意安全!
前 5 名开放数据科学竞赛,奖金丰厚
累计 1052950 美元。最后期限:2020 年 3 月 16 日。

上周,在庆祝中国新年的晚宴上,一位在业余时间学习数据科学的熟人问我,如何用数据来表述一个值得解决的问题,以及如何找到合适的数据集来实践他的新技能。
我们谈了一点他的兴趣和优势,即使当问题交给他时,他是一个伟大的问题解决者,但对他来说,制定正确的问题或确定什么样的挑战值得解决是复杂的。我建议,在阅读书籍和提高他为解决问题而提出正确问题的技能的同时,他可以练习解决他人问题的技能。
参加数据科学、机器学习和人工智能竞赛是练习技能的好方法,除此之外,挑战已经确定,数据已经收集,当这么多人从事同一项工作时,一旦比赛结束,你可以有几个基准进行比较,我知道有些比赛会提供现金作为奖励。耶!我和一些导师谈过,他们经常为了乐趣和额外收入而参加比赛。
为了帮助我的朋友,我整理了一份他可以练习数据技能的比赛列表,我决定发布它,希望这能帮助更多的人。如果这对你有用,请在评论中告诉我,我可以制作一个竞赛月刊来查看。
1.Google QUEST 问答标签— NPL

卡格尔
- 主持人: Kaggle / Google
- 奖金:25,000 美元的池奖
- 截止日期:2020 年 2 月 3 日
- 链接:https://www . ka ggle . com/c/Google-quest-challenge/overview/description
概述: 在这场比赛中,你将面临使用这一新数据集为问答的不同主观方面构建预测算法的挑战。这些问答配对是从近 70 个不同的网站上以“常识”的方式收集来的。我们的评分员接受的指导和培训很少,很大程度上依赖于他们对提示的主观理解。因此,每个提示都是以最直观的方式制作的,这样评分者可以简单地利用他们的常识来完成任务。通过减少我们对复杂和不透明的评级准则的依赖,我们希望增加这个数据集的重用价值。所见即所得!
证明这些主观标签可以被可靠地预测可以为这一研究领域带来新的曙光。这场比赛的结果将告诉我们未来智能问答系统的构建方式,希望有助于它们变得更像人类。
2.首席财务官预测—财务预测 Sandesh 品牌 3

顶部编码器
- 主持人: TopCoder
- 奖励:5950 美元现金奖励。
- 截止日期:2 月 8 日 09:00
- 链接:https://www.topcoder.com/challenges/30113487
概述: 该挑战的目标是为两种产品中的每一种产品,为下面概述的 6 个财务变量生成最高准确度的预测。预测的准确性必须至少比每个变量/产品的阈值目标有所提高。
该模型应适合 12 个月的预测范围,但必须可扩展到该时间段之外。
预测的准确性将在 7 个月的时间内使用私有化数据集的 MAPE 误差进行评估。
3.Deepfake 检测挑战

卡格尔
- 主持人:卡格尔
- 奖励:100 万美元的奖金
- 截止日期:2020 年 3 月 3 日
- 链接:https://www.kaggle.com/c/deepfake-detection-challenge/
概述 : AWS、脸书、微软、 合作伙伴艾氏媒体诚信指导委员会 ,以及学术界人士共同打造了 Deepfake 检测挑战赛(DFDC)。该挑战的目标是激励世界各地的研究人员建立创新的新技术,帮助检测 deepfakes 和操纵的媒体。
挑战参与者必须将他们的代码提交到黑盒环境中进行测试。接受奖项时,参与者可以选择开放或关闭他们的提交。只要遵守开源许可条款,开放提案就有资格获得挑战奖。封闭的建议将是专有的,没有资格接受奖品。无论选择哪条赛道,所有提交的作品都将以相同的方式进行评估。结果将显示在排行榜上。
PAI 指导委员会强调,需要确保所有技术工作都关注如何使基于此产生的代码和产品尽可能地为信息质量的关键一线捍卫者(如世界各地的记者和公民领袖)所用。DFDC 的结果将有助于这一努力,并建立一个强大的应对全球紧急威胁 deepfakes。
4。开放城市人工智能挑战:分割建筑物以增强抗灾能力

潜水数据
- 主机:驱动数据
- 奖励:12000 美元现金奖励。
- 截止日期:世界协调时 2020 年 3 月 16 日午夜
- 链接:https://www . driven data . org/competitions/60/building-segmentation-disaster-resilience/page/150/
概述: 本次挑战赛的目标是加速开发更加准确、相关和可用的开源人工智能模型,以支持非洲城市灾害风险管理的制图。
性能更好、使用更负责任的人工智能系统可以提供更准确、更快速、成本更低的方法来评估风险并保护生命和财产。
有两条比赛赛道:
- 语义分割轨迹 :构建模型,从跨越不同非洲城市的航空影像中识别建筑物足迹。
- 负责任的 AI 轨迹 :将伦理的镜头应用于 DRM 的 AI 系统的设计和使用。
5.孟加拉语。人工智能手写字形分类

卡格尔
- 主持人:卡格尔
- 奖励: $10,000 UDS 池奖
- 截止日期:2020 年 3 月 9 日
- 链接:https://www . ka ggle . com/c/Google-quest-challenge/overview/description
概述: 在本次比赛中,你将获得一幅手写的孟加拉语字形图像,并被要求分别对图像中的三个组成元素进行分类:字形根、元音音调符号和辅音音调符号。
通过参加比赛,您将有望加快孟加拉语手写光学字符识别的研究,并帮助实现教育资源的数字化。此外,比赛中引入的方法也将增强印度次大陆的近亲语言。
奖金:联合国千年发展目标

潜水数据
- 主机:驱动数据
- 奖励:荣耀!
- 截止日期:2020 年 3 月 27 日
- 链接:https://www . driven data . org/competitions/1/United nations-Millennium-development-goals/
概述: 自 1944 年成立以来, 世界银行 一直在收集数据,通过关注外国投资、国际贸易和资本投资来帮助其减轻贫困。世界银行通过其数据门户**向公众提供这些数据。
联合国使用每天收入超过一美元的人口比例等指标来衡量这些目标的进展。 你的任务是预测这些指标在未来一年和五年的变化 。通过揭示这些目标和其他经济指标之间的复杂关系,预测未来的进展将有助于我们理解如何实现这些目标。联合国将 2015 年定为取得显著进步的目标。根据 1972-2007 年的数据,你需要预测 2008 年和 2012 年每个目标的具体指标。
你觉得这篇文章有帮助吗?你可能想看看我的文章 【最好的免费数据科学电子书】 。
成功数据科学家的 5 大品质!
意见
找出将成功的数据科学家与其他人区分开来的独特特质

拉兹万·苏驰在 Unsplash 上的照片
数据科学是一个奇妙的研究领域,它提出了一些必要特征的要求,以在这一特定领域取得成功,并获得尽可能好的结果。
我们都听说过无数次,数据科学是就业市场的现在和未来,这在很大程度上是正确的。对于受过良好教育的数据科学和机器学习从业者来说,有大量的机会和巨大的空间。
技术技能显然是任何领域的一个重要方面,也是在任何学科实践中取得成功的一个重要要求。但是,作为一名成功的数据科学家,有哪些独特的特质呢?
在与数据科学家互动并近距离观察他们的工作方式后,我认为,我已经确定了成为一名成功的数据科学家的 5 个最重要的品质。让我们依次分析这些方面。
1.适应性和创造性
卓越的数据科学家拥有的一个非常有用的属性是通过适应现代或独特的技术来解决复杂任务的质量,以实现最佳可能的结果,以及创造性地解决工作并以较低的空间和时间复杂性完成工作,即以尽可能低的可用资源消耗高效、快速地有效完成工作。
数据科学家要解决的每项任务都有其独特的方式,这些复杂的任务有不同的解决方案,因此,即使是解决这些问题的最佳方式也会有所不同。因此,适应性是产生最佳结果的一个重要方面。
创造性、批判性和分析性思维是数据科学家最迷人的特征。对于一名成功的数据科学家来说,跳出框框思考和实施创新想法的能力是必要的。这些属性是在行业水平上表现突出的一些关键方面。
2.通讯技能
有效的互动是生活中大多数事情的关键概念,在大多数工作中也是如此。尤其是在数据科学领域,沟通技巧起着关键作用。高效地执行复杂的项目,同时有效地协调和沟通,是每个数据科学家的必备要求。
数据科学家必须具备仔细倾听主管、员工或其他任何人的指示的能力。一旦你听完了,通过激烈的、有意义的和深思熟虑的交流来传达你的陈述和想法,从而有效地处理信息和交流是至关重要的。
你还能够指导你的队友,有效地协调,并与你的队友合作完成手头的特定任务。我们将在下一节详细介绍这一部分。
3.协作团队
大多数情况下,大数据科学项目需要一群功能强大、积极有效的数据科学家以最高效率执行特定的业务风险或任务。对他们来说,通过为特定项目生产高质量的模型来为员工提供最好的服务是至关重要的。
作为一个团队一起工作是很重要的,因为需要对正在进行的项目进行一致的信息交流。因此,这项工作需要数据科学家共同努力,找出可能的最佳解决方案,提高模型准确性,并在部署期间产生高质量的结果。
4.坚持
对我来说,数据科学项目最有趣的部分是建立机器学习或深度学习模型,并确保它们完美地工作,并对此感觉良好。然后,一旦这些模型满足适当的需求,就部署它们。
然而,数据科学的很大一部分实际上是在处理手头的数据。网络上自然存在的大部分数据都是不干净的。为了提取有用的数据,必须进行大量的清理和预处理。大多数复杂的任务需要关键的分析和计算处理来获得理想的结果。持久性在每个场景中都非常重要,尤其是在数据科学领域。
即使是这个领域的专家也会犯错误,并且必须查找资料来解决某些问题。这个领域可能是唯一一个你不需要记很多东西的领域,因为你可以用谷歌来记你忘记的东西。
然而,这完全没问题,因为这只是一次学习经历,坚持下去会让你成为一名更好的数据科学家。
5.较强的决策能力
处理计算任务的复杂情况和评估各种模型产生的质量的能力在行业层面极其重要。因此,必须对解决当前复杂任务的最佳选择和最佳资源做出强有力的决策。
仅举几个简单的例子,让我们考虑一个机器学习任务,其中您能够发现支持向量机(SVM)以 97%的准确率执行特定任务,而像逻辑回归这样的机器学习算法能够以 98%的准确率执行相同的任务。数据科学家必须能够为每项特定任务确定最佳选择。
将这个例子进一步扩展到深度学习和神经网络,数据科学家能够相应地在 TensorFlow 或 Pytorch 等深度学习框架之间切换,以找到最适合手头任务的框架。
这些显然是一些简单的例子。然而,数据科学家的决策能力对于以指数方式扩展思维、产生更好的结果极其重要。
结论:

阿纳斯塔塞·马拉戈斯在 Unsplash 上拍摄的照片
这五种独特的特质和品质是数据科学家必须具备的最基本的特征,以便在各自的领域取得尽可能好的结果和大量的成功。在本文中,我们讨论了为什么这些属性很重要。
技术技能同样重要,也是一项强制性要求。基础知识和对主题的深刻理解保证了找到解决手头任务的详细方案的真正方法。然而,在我看来,这些独特的是绝对必须持续更长时间,并有长期的成功。
看看我的其他一些文章,你可能会喜欢读!
揭示数据科学的各个方面以及掌握数据科学需要学习的东西
towardsdatascience.com](/beginners-roadmap-to-master-data-science-f47c5fdab0f9) [## 模式编程面试问题解答!
用 python 解决公司面试中问的各种模式编程问题。
towardsdatascience.com](/solutions-to-interview-questions-on-pattern-programming-cb1cff41844) [## 了解 ReLU:5 分钟最受欢迎的激活功能!
5 分钟左右深度学习的整流线性单元概念理解。
towardsdatascience.com](/understanding-relu-the-most-popular-activation-function-in-5-minutes-459e3a2124f) [## 在数据科学领域取得成功的三个要做和三个不要做
我希望开始时就知道的黄金法则。深入了解如何转变为一个…
towardsdatascience.com](/3-dos-and-3-don-ts-to-become-successful-in-data-science-c49e2c293a56) [## 如何有效利用你的计算机视觉项目!
如何最好地利用你为计算机视觉构建的模型和项目,并举例说明如何更好地…
towardsdatascience.com](/how-to-effectively-utilize-your-computer-vision-projects-3a90439eb3b2)
谢谢你们坚持到最后。我希望你们喜欢阅读这篇文章。我希望你们都有美好的一天!
新型新冠肺炎冠状病毒 100 大资源
关于新冠肺炎冠状病毒的最佳 R 资源(闪亮的应用程序、R 包、代码和数据),您可以免费使用它们来分析疾病爆发

疾控中心拍摄
冠状病毒是全球严重关注的问题。随着它的扩张,关于它的网上资源也越来越多。这篇文章介绍了关于新冠肺炎病毒的最佳 R 资源的选择。
这份清单绝非详尽无遗。我不知道网上所有关于冠状病毒的 R 资源,所以如果你认为其他资源(R 包、闪亮的应用程序、R 代码、博客帖子、数据集等),请随时在评论中或通过联系我让我知道。)配得上这个榜单。
r 闪亮的应用程序和仪表盘
冠状病毒跟踪器

由 John Coene 开发的这个闪亮的应用程序基于三个数据源(约翰·霍普斯金、微信和 DXY 数据)追踪冠状病毒的传播。这个闪亮的应用程序由 shinyMobile 构建(这使得它可以在不同的屏幕尺寸上做出反应),以一种非常好的方式按时间和地区显示死亡人数、确诊人数、疑似人数和恢复人数。
该代码可在 GitHub 上获得。
{coronavirus} package冠状病毒仪表板

由[{coronavirus} package](https://www.statsandr.com/blog/top-r-resources-on-covid-19-coronavirus/#coronavirus)的作者开发的这个仪表盘提供了 2019 年新型冠状病毒新冠肺炎(2019-nCoV)疫情的概况。数据和控制面板每天都会刷新。
该代码可在 GitHub 上获得。
从这个仪表板,我创建了另一个专门针对比利时的仪表板。请随意使用 GitHub 上可用的代码来构建一个特定于您的国家的代码。在这篇文章中可以看到更多细节。
新冠肺炎全球案例

由 Christoph Schoenenberger 开发的这个闪亮的应用程序通过地图、汇总表、关键数字和图表展示了新冠肺炎疫情的最新发展。
在这篇文章中可以找到作者关于这个仪表盘的更多想法。
该代码可在 GitHub 上获得。
新冠肺炎案例的可视化

由 Nico Hahn 开发的这个闪亮的应用使用传单、plotly 和来自约翰霍普金斯大学的数据来可视化新型冠状病毒的爆发,并显示整个世界或单个国家的数据。
该代码可在 GitHub 上获得。
模拟新冠肺炎传播与医疗保健能力

由艾莉森·希尔博士开发的这个闪亮的应用使用了一个基于经典 SEIR 模型的流行病学模型来描述新冠肺炎的传播和临床进展。它包括不同的临床感染轨迹,减少传播的干预措施,以及与医疗保健能力的比较。
该代码可在 GitHub 上获得。
新冠肺炎数据可视化平台

这款闪亮应用由 Shubhram Pandey 开发,提供了全球范围内 Covid19 影响的清晰可视化,还提供了使用 Twitter 自然语言处理的情感分析。
该代码可在 GitHub 上获得。
冠状病毒 10 天预报

由空间生态和进化实验室开发的这个闪亮的应用给出了每个国家可能的冠状病毒病例数的 10 天预测,并让公民了解这种流行病的发展速度。
在这篇博文中可以看到关于该应用的详细解释以及如何阅读。该代码可在 GitHub 上获得。
冠状病毒(新冠肺炎)席卷全球

这款闪亮的应用由 Anisa Dhana 与 datascience+合作开发,通过确诊病例的可视化地图和一些关于病毒生长的图表来监控新冠肺炎在世界各地的传播。
使用的数据集来自约翰·霍普金斯大学 CSSE 分校,部分代码可以在 T21 的博客文章中找到。
新冠肺炎疫情

这款闪亮的应用显示了全球感染监测的互动地图,由thi baut Fabacher博士与斯特拉斯堡大学医院公共卫生系和斯特拉斯堡医学院生物统计和医学信息学实验室合作开发。它侧重于每个国家和特定时期的病例数在发病率和流行率方面的演变。
代码可以在 GitHub 上找到,这篇在 T2 的博客文章将详细讨论它。
比较电晕轨迹

由 André Calero Valdez 开发的这个闪亮的应用程序通过两个图表比较了确诊和死亡病例的数量以及各个国家的病例轨迹。该应用程序还允许你通过表格比较不同国家的增长率和病例数。
代码可在 GitHub 上获得。
使曲线变平

由 Tinu Schneider 开发的这个闪亮的应用程序以互动的方式展示了#FlattenTheCurve 信息背后的不同场景。
该应用基于 Michael hle 的文章构建,代码可在 GitHub 上获得。
探索新冠肺炎的传播

由约阿希姆·加森开发的这个闪亮的应用程序可以让你通过一个汇总图表可视化几个国家的确诊、恢复的病例和报告的死亡人数。
这款闪亮的应用基于以下数据:
- 约翰·霍普金斯大学 CSSE 小组研究新型冠状病毒病毒的传播
- ACAPS 政府措施数据库
- 世界银行
这篇博文进一步详细解释了这个闪亮的应用,尤其是它背后的[{tidycovid19}](https://www.statsandr.com/blog/top-r-resources-on-covid-19-coronavirus/#tidycovid19) R 包。
政府和新冠肺炎

由 Sebastian Engel-Wolf 开发的这款闪亮应用以优雅的方式呈现了以下测量结果:
- 连续指数增长的最大时间
- 感染翻倍的天数
- 今天的指数增长
- 确诊病例
- 死亡
- 人口
- 100,000 名居民的确诊病例
- 致死率
该代码可在 GitHub 上获得,这篇文章对此进行了更详细的解释。
模拟西非多哥的新冠肺炎疫情

由kankoéSallah博士开发的这个闪亮的应用程序使用 SEIR 集合人口模型和集水区之间的流动性来描述新冠肺炎病毒在国家层面的传播以及干预措施对西非多哥的影响。
新冠肺炎预测

由 Manuel Oviedo 和 Manuel Febrero(圣地亚哥德孔波斯特拉大学的 Modestya 研究小组)开发的这个闪亮的应用程序使用过去 15 天增长率的演变来预测 5 天范围内的增长率。当新数据可用时,拟合并重新估计三个函数回归模型。该应用程序还显示了按国家(来自约翰霍普金斯大学 CSSE )和西班牙地区(来自 ISCII )划分的每个地平线的累积病例和每日新病例的预期数量的交互式图表。
请参阅“关于”选项卡中的方法说明。
新冠肺炎仪表板

由 Philippe De Brouwer 开发的这个仪表盘显示了关于病毒爆发的几个关键指标(按国家或所有国家的总和),以及一些预测、世界地图和其他交互式图表。
美国医护人员死于新型冠状病毒(新冠肺炎)

由 Jonathan Gross 开发的这款闪亮应用将新闻报道的美国医护人员死于冠状病毒(新冠肺炎)的情况可视化。它每天更新,代码可在 GitHub 上获得。
比利时的新冠肺炎住院治疗

由 Jean-Michel Bodart 开发的这款仪表盘按地区和省份提供了比利时新冠肺炎相关住院治疗的发展概况。
该代码可在 GitHub 上获得。
你住在哪里很重要!

由伦斯勒数据探索和应用研究院开发的这个闪亮的应用揭示了美国各地在结果、决定因素和药物治疗(例如死亡率、测试病例、糖尿病和医院床位)方面的地区差异,特别关注纽约。
这篇博文更详细地解释了这个闪亮的应用程序,代码可以在 GitHub 上找到。
新冠肺炎加拿大数据浏览器工具

Petr Baranovskiy 从数据爱好者的博客开发的这个闪亮的应用处理加拿大政府提供的官方数据集,并显示与加拿大新型冠状病毒疫情相关的几个指标。
这篇博客文章更详细地描述了这个应用。
菲律宾新冠肺炎病例预测

由 Jamal Kay Rogers 和 Yvonne Grace Arandela 开发的这个闪亮应用提供了菲律宾新冠肺炎病例确诊阳性、死亡和康复的 5 天预测。
该应用程序还提供了 10 天的天气预报以及菲律宾每日和累计的新冠肺炎病例的图表。数据来源是约翰·霍普金斯大学系统科学与工程中心(JHU·CSSE)。
新冠肺炎病例和死亡报告数字校正器

由 Matt Maciejewski 开发的这个闪亮的应用专注于使用基于 Lachmann 等人(2020) 的参考国家,并通过总死亡数和病例数的乘法估算器,来校正少报的新冠肺炎病例数和死亡数。一旦数据可用,估计器将变成后验预测。
在这篇文章中对这款应用进行了更详细的解释,这款闪亮应用的代码可以在 GitHub 上找到。
新冠肺炎:斯皮克模式

这个闪亮的应用由来自卢森堡大学卢森堡系统生物医学中心(LCSB)、鲁汶大学和 UGent 大学的几位研究人员开发,它使用新的 SPQEIR 模型来模拟各种抑制策略(社交距离、锁定、保护等)的影响。)关于新冠肺炎的发展。
新冠肺炎预测

由卡洛斯·卡塔尼亚开发的这个闪亮的应用程序提供了不同国家(南美和一些欧洲国家)的艾滋病传播预测。该应用程序实现了对模型的推广,其中包括隔离和死亡(Peng et al. 2020)。
比利时 Covid 病例跟踪系统

由 Patrick Sciortino 开发的这款闪亮应用旨在基于一个住院病例及时 t 通知我们几天前发生的感染的想法来估计真实新冠肺炎病例的曲线。
新冠肺炎监视器

由特拉福德数据实验室开发的这个闪亮的应用可视化了英国每日确诊的冠状病毒病例和死亡人数。
它使用以下数据源:
代码可以在 GitHub 上找到。
新冠肺炎公告板

由苏伟研发的这个仪表盘显示了新冠肺炎疫情在日本的实时可视化。它主要显示各种指标,包括但不限于聚合酶链式反应测试、阳性确诊、出院和死亡,以及日本各县的趋势。还有聚类网络、日志尺度新确诊病例等多种图表供用户参考。
仪表盘就是基于这个日版(同一作者开发的)。代码可以在 GitHub 上找到。
新冠肺炎统计显示器

由 Carl sans faon 创建的这个 Wordpress 插件将 R {ggplot2}图形与 ARIMA 预测和 PHP 编码关联起来,以显示不同国家、州/省和美国城市的确诊、死亡和恢复病例的演变。
它使用来自约翰·霍普金斯大学系统科学与工程中心(CSSE)的新冠肺炎数据库的数据。这个插件可以作为一个 Wordpress 插件安装。
日冕制图仪

由 Paolo Montemurro 和 Peter Gruber 创建的 OxyLabs 提供支持,这种可视化显示了四天的平均增长指标,它清楚地显示了病毒的某个统计数据是如何随着时间的推移而演变的,过滤了噪音。
该网站每小时从几个官方数据源接收数据,并以直观和互动的方式可视化 COVID19 的历史演变。
科罗纳达什

由 Peter Laurinec 开发的这款闪亮的应用提供了各种数据挖掘和可视化技术,用于比较各国的新冠肺炎数据统计:
- 用指数平滑模型外推总确诊病例,
- 病例/死亡传播的轨迹,
- 国家数据/统计数据的多维聚类——树状图和聚类平均数表,
- 全世界的综合视图,
- 基于 DTW 距离和 SMA 预处理的国家轨迹分级聚类(+归一化),用于快速比较大量国家的新冠肺炎大小和趋势。
这篇博文更详细的解释了上面列表的最后一点。该应用程序的代码可在 GitHub 上获得。
Covidfrance

由 Guillaume presiat 开发的这款闪亮应用展示了法国住院、重症监护室、康复和死亡人数的变化(按部门)。
这篇的博文展示了这款应用程序,该应用程序的代码可以在 GitHub 上获得。
新冠肺炎对流动性的影响

由 Dimiter Toshkov 开发的这个闪亮的应用程序显示了一个国家内特定类别的地方相对于基线的移动性(访问次数和停留时间)的相对变化。基线计算为 2020 年 1 月 3 日至 2 月 6 日之间的 5 周期间一周中某一天的中值。因此,该图显示了相对于年初同一国家的情况,流动性发生了怎样的变化。
作者还为美国各州开发了一个版本。
数据来自谷歌社区移动报告。
冠状病毒分析平台

由 Khaled M Alqahtani 开发的这个闪亮的应用提供了一个强大的分析工具,包括:
- 描述性分析
- 增长率和曲线平坦化
- 累积预测
- 包含 16 种不同模型的每日案例预测
- 报纸分析
- 电视分析
数据来自约翰霍普金斯大学 CSSE 分校和一些 GDELT APIs。
新冠肺炎跟踪器

这个仪表板由阿尔斯特大学的Magda buch OLC博士开发,报告北爱尔兰地方政府辖区和爱尔兰全岛县级的病例,提供报告病例的性别和年龄分类、增长率和每 10 万人口的统计数据;它还拥有来自谷歌和苹果的每日移动数据。
关于这个仪表板的更多信息可以在这里找到。
新冠肺炎概述

由法比安·达布兰德、亚历山德拉·鲁苏、马塞尔·施雷纳和亚历山大·托马舍维奇开发的这个仪表板是科学对抗电晕项目的一部分,它提供了确诊病例、死亡人数以及各国为遏制病毒传播所采取措施的概况。
有关这个仪表板的更多信息,请参见这篇博客文章。
新冠肺炎退出战略

作为科学对抗电晕项目的一部分,这个闪亮的应用比较了几种替代退出策略,要么旨在尽可能降低感染数量(例如,接触追踪),要么旨在发展群体免疫而不超出卫生保健能力。
闪亮的应用程序基于 de Vlas 和 Coffeng (2020)开发的基于个体的随机 SEIR 模型。这篇帖子更详细地解释了这个闪亮的应用程序。
电晕病毒统计:COVID19

由Mohammed n . Alenezi博士开发的这个仪表盘为科威特、海湾合作委员会和全世界显示冠状病毒的最新信息。仪表板包含 8 个选项卡下显示的不同图和模型的集合。
Covid19 数据

这款仪表盘由 Dhafer Malouche 开发,呈现了 200 多个国家和地区的统计数据,包括对过去 60 天内生育数量 R(t)R(t)的估计和 Covid19 国家分类。
世卫组织·新冠肺炎探险家

由世界卫生组织(世卫组织)开发的这个闪亮的应用程序旨在提供全球、区域和国家层面上关于确诊病例和死亡的频繁更新的数据可视化。
新冠肺炎情景分析工具

这个仪表板由 MRC 全球传染病分析中心(伦敦帝国学院)开发,以互动图表的形式展示了许多国家随时间推移的疫情轨迹、医疗需求和 R_t & R_eff 措施。
仪表板使用了 squire R 组件以及其他组件。
r 包
{nCov2019}

[{nCov2019}](https://github.com/GuangchuangYu/nCov2019) 包让你获得冠状病毒爆发的流行病学数据。 1 该软件包提供实时统计数据,并包含历史数据。插图解释了包装的主要功能和可能性。
此外,该软件包的作者还开发了一个具有交互式图表和时间序列预测的网站,这可能有助于向公众提供信息和研究病毒如何在人口众多的国家传播。
{coronavirus}

由 Rami Krispin 开发的[{coronavirus} package](https://github.com/RamiKrispin/coronavirus)提供了 2019 年新型冠状病毒新冠肺炎(2019-nCoV)疫情的整洁格式数据集。R 包来自约翰·霍普斯金的数据集,给出了各州/省冠状病毒病例的每日汇总。该数据集包含各种变量,如不同国家和州的确诊病例、死亡和恢复情况。
更多详细信息可在此处获得,软件包数据集的csv格式可在此处获得,摘要仪表板可在此处获得。
{tidycovid19}

由约阿希姆·加森开发的[{tidycovid19}](https://github.com/joachim-gassen/tidycovid19) 软件包可以让你直接从权威渠道下载、整理和可视化新冠肺炎的相关数据(包括政府措施的数据)。它还提供了一个灵活的功能和一个附带的闪亮应用来可视化病毒的传播。
这个包可以在 GitHub 上获得,这些博客文章在这里和在这里更详细地解释了它。
来自 R 流行病联盟的 R 包

这些来自 R 流行病联盟的 R 包允许您找到专业流行病学家和专家在分析疾病爆发领域使用的最先进的工具。
{covdata}

由Kieran Healy教授发布的[{covdata}](https://kjhealy.github.io/covdata/) 包是一个 R 包,提供来自多个来源的新冠肺炎病例数据:
- 来自欧洲疾病控制中心的国家级数据
- 来自 COVID 追踪项目的美国州级数据
- 美国的州级和县级数据来自纽约时报
- 数据来自美国疾病控制中心的冠状病毒疾病 2019(新冠肺炎)——相关住院监测网络 (COVID-NET)
- 来自苹果的数据显示,自 2020 年 1 月中旬以来,城市和国家的相对移动趋势,基于其地图应用的使用情况
- 来自 Google 的数据,基于位置和活动信息,显示了自 2020 年 1 月中旬以来各个地区和国家的相对移动趋势
该代码可在 GitHub 上获得。
{covid19italy}

covid19italy R package 提供了意大利 2019 年新型冠状病毒新冠肺炎(2019-nCoV)疫情疫情的整洁格式数据集。该包包括以下三个数据集:
italy_total:国家级疫情每日摘要italy_region:区域级别爆发的每日摘要italy_province:省级别的疫情每日摘要
关于软件包数据集的更多信息,请参见本简介,本博客文章,以及本支持仪表盘。
数据来源:意大利民事保护部
{COVID19}

新冠肺炎数据中心的目标是通过收集世界范围内的精细案例数据,结合有助于更好地了解新冠肺炎的外部变量,为研究社区提供一个统一的数据中心。以米兰大学为特色,数据科学和经济学硕士并由加拿大数据价格研究所 IVADO 资助。
该软件包收集政府来源的新冠肺炎数据,包括来自牛津新冠肺炎政府回应跟踪系统的政策措施,并通过接口将数据集扩展到世界银行公开数据、谷歌移动报告、苹果移动报告和苹果移动报告。
该包在 CRAN 上可用,它是 100% 开源,欢迎外部贡献者加入。
{COVOID}

COVOID (用于 COV ID-19 O 笔源 I 感染 D 动力学项目)是一个 R 包,用于使用确定性房室模型(DCMs)对新冠肺炎和其他传染病进行建模。
它包含一个内置的闪亮的应用程序,使没有 R 编程背景的人能够轻松使用和演示关键概念,以及一个扩展的 API,用于模拟和估计同质和年龄结构的 SIR、SEIR 和扩展模型。特别是 COVOID 允许在不同的时间间隔内同时模拟特定年龄(如学校关闭)和一般干预。
该代码可在 GitHub 上获得。
{cdccovidview}

由鲍勃·鲁迪斯发布的[{cdccovidview}](https://cinc.rud.is/web/packages/cdccovidview/index.html) 软件包可以用来与美国疾病预防控制中心的新新冠肺炎追踪器 COVIDView 和 COVID-NET 一起工作。
{babsim.hospital}

由来自TH kln的几位研究人员发布的[{babsim.hospital}](https://cran.r-project.org/package=babsim.hospital) 软件包实现了一个医院资源规划问题的离散事件模拟模型。卫生部门可以使用它来预测对重症监护病床、呼吸机和人力资源的需求。
该团队还开发了一款闪亮的应用程序,可以预测新冠肺炎医院重症监护室的床位资源。该应用程序有英语和德语两种版本。
r 代码和博客帖子
用 R 分析新冠肺炎疫情数据

由蒂姆·丘奇斯撰写的这两篇文章(第一部分和第二部分)探索了可能用于分析新冠肺炎数据的工具和软件包。特别是,作者考虑了中国的疫情何时会消退,然后将分析转向日本、韩国、意大利和伊朗。他还展示了常见的累积发病率图的改进。此外,由于传染病爆发的经典 SIR(易感-感染-康复)房室模型,他提出了 R 代码来分析冠状病毒的传染性。 2
该代码可在 GitHub 上获得(第 1 部分和第 2 部分)。
第 1 部分实际上是基于来自学习机的 Holger K. von Jouanne-Diedrich 教授的另一篇更短的博客文章。阅读他的文章这里更简洁地分析了如何模拟冠状病毒的爆发并发现它的传染性。请注意,我已经根据这两位作者的文章写了一篇分析比利时的新冠肺炎的文章。
最近,蒂姆·丘奇斯发表了一系列其他有趣的文章:
- 使用由 R: 第 1 部分(此处为代码)和第 2 部分(此处为代码)的
{EpiModel}包实施的随机个体房室模型(ICMs)模拟各种公共卫生干预措施对新冠肺炎感染的本地流行传播的影响 - 利用模拟研究各种干预措施对新冠肺炎传播的影响
- 新冠肺炎流行病学与 R :在这篇博客文章中,作者使用了相对早期和部分的美国数据,将入境病例与社区病例分开,并预测了未来几周的发病人数。他还强调了几个 R 函数来分析疾病的爆发
- 我们可以“收缩”新冠肺炎曲线,而不仅仅是展平它(与 Louisa Jorm 合作)
用{tidyverse}和{ggplot2}进行新冠肺炎数据分析

【RDataMining 的赵延昌博士发表了一份关于冠状病毒{tidyverse}和{ggplot2}包的数据分析,针对中国和全球。
这两个文件都是数据清理、数据处理和跨国家或地区的确诊/治愈病例和死亡率的可视化的混合。
一段时间内新冠肺炎累计观察到的病死率

由 Peter Ellis 撰写,这篇文章聚焦于观察到的新冠肺炎病死率如何在 7 个国家随时间演变,并评论为什么比率不同(低检测率、人口年龄、医院不堪重负等)。).
代码可以在文章的末尾找到。数据来自约翰·霍普斯金,使用的是[{coronavirus} package](https://www.statsandr.com/blog/top-r-resources-on-covid-19-coronavirus/#coronavirus)。
最近,作者发表了一系列其他文章:
- 一个国家的年龄分类对新冠肺炎病死率的影响:它根据不同国家的年龄分布(基于意大利的数据)查看这些国家的估计死亡人数。数据来自 Istituto Superiore di Sanità(罗马),所有代码都显示在帖子中。
- 如何用 ggplot2 和刻度制作疯狂的福克斯新闻频道 y 轴图表:关于 COVID19,不如说是关于如何通过正确的变换重新创建一个奇异的福克斯新闻频道图,以使其刻度合适。
- 检测阳性率和疾病的实际发病率和增长:这篇博客文章着眼于几种不同的方式来解释新冠肺炎高阳性检测率给我们提供的信息,并着眼于对某一时间点有效生殖数量估计的影响。
- 调整试验阳性后德克萨斯州新冠肺炎的发病率:作者研究了德克萨斯州新冠肺炎病例的趋势,有和没有用试验阳性率的平方根乘数进行调整。
Covid 19 跟踪

由基兰·希利教授撰写的这篇文章讨论了如何利用来自欧洲疾病控制中心的新冠肺炎数据获得最佳可用死亡人数的概述。
代码可以在文章中和 GitHub 上找到。
最近,作者发表了另外三篇文章:
- A COVID Small Multiple :本文讨论如何按国家创建病例的 small-multiple 图,显示大量国家的疫情轨迹,每个 small-multiple 面板的背景也显示(灰色)其他每个国家的轨迹,以供比较。

2。苹果的 COVID 移动数据:这篇文章使用苹果的几个城市和国家的时间序列移动数据(通过[{covdata}](https://www.statsandr.com/blog/top-r-resources-on-covid-19-coronavirus/#covdata) 包)来绘制三种出行方式:驾车、公共交通和步行。该系列始于 1 月 13 日,指数为 100,因此趋势是相对于基线的。

3.新奥尔良和标准化:这篇文章回应了 Drang 博士关于数据标准化改进的一篇深思熟虑的帖子。

传染病与非线性微分方程

Fabian Dablander 发表的这篇数学密集型的博客文章解释了 SIR 和 SIRS 模型考虑的因素以及它们如何计算结果。
从疫情的角度来看,作者写道“SIRS 模型扩展了 SIR 模型,允许恢复的人口再次变得易感(因此有了额外的‘S’)。它假定易感人群与康复人群成比例增加”。
最近,作者与其他研究人员合作,发表了另一篇博文,概述了 COVID19 疫情的许多优秀可视化,并展示了他们自己的仪表板。
使用 SIR 模型对英国的新冠肺炎疫情进行建模

由托马斯·威尔丁发表的这篇博文将 SIR 模型应用于英国数据。
作为模型的进一步扩展,作者建议:
- 使用 SEIR 模型(为已感染但尚未传染的人增加一个暴露的隔间)
- 增加了一个“Q”层,因为许多人被隔离或隔离
- 考虑到被感染但由于缺乏检测而被拒绝检测的“隐藏”人群
- 今年晚些时候爆发第二波/第二次疫情的可能性(如之前的疫情,如猪流感)
数据来源:
流行病建模

由 Arthur Charpentier 发表的这一系列 3 篇博文(第一部分、第二部分、第三部分)详细介绍了 SIR 模型及其参数,以及 ODEquations 如何求解该模型并生成繁殖率。它还给出了一个模型的数学解释,该模型解释了疫情将会以多快的速度回归,尽管强度会逐渐减弱。最后,它解释了一个比 SIR 更复杂的模型,即 SEIR 模型,并用伊波拉数据进行了说明。
最近,作者发表了另一篇文章,该文章调查了美国各州接受新型冠状病毒检测的人口比例,并试图回答以下两个问题:
- 每天有多少人接受测试?
- 我们到底在测试什么?
最后但同样重要的是,这篇帖子转载了他的一篇题为“新冠肺炎疫情控制:在 ICU 可持续性下平衡检测政策和封锁干预”的科学论文。
新冠肺炎:德国的例子

由来自学习机器的 Holger K. von Jouanne-Diedrich 教授发布的这篇博文使用 SIR 模型和德国数据来估计疫情的持续时间和严重程度。
从 Morgenpost 下载数据。
最近,作者发表了其他文章:
- 美国新冠肺炎:实际感染和未来死亡的粗略计算:从 Covid19 报告的死亡数回溯,这篇文章展示了如何根据死亡率和感染期的几个假设(并承认许多未知和数据问题)来估计之前的感染数。
- 如何用 R 分析移动趋势使用匿名化和聚合的苹果向公众公开的移动数据。本文介绍了一个 R 函数,该函数以结构良好的格式返回国家和主要城市的数据,并可视化疫情导致的车辆和行人流量下降。

3.新冠肺炎:假阳性警报,展示了感染率对冠状病毒检测呈阳性的人实际呈阳性的可能性的重要性。
展平新冠肺炎曲线

由来自《理论与实践》的 Michael hle 发表的这篇博客文章讨论了为什么平坦化新冠肺炎曲线的信息是正确的,但是为什么一些用来显示效果的可视化是错误的:减少基本繁殖数不仅仅延长了爆发,它也减少了爆发的最终规模。
从疫情的角度来看,作者写道“由于卫生能力有限,延长疫情爆发的时间将确保更大比例的需要住院治疗的人能够真正得到治疗。这种方法的其他优点是赢得时间,以便找到更好的治疗方法,并有可能最终研制出疫苗”。
本文还构建了一个闪亮的应用来研究不同的场景。
在第二篇题为“有效再生产数量估算”的文章中,Michael hle 用{R0}包估算了新冠肺炎等传染病爆发期间随时间变化的有效再生产数量。他用一个模拟的疾病爆发来比较三种不同评估方法的性能。
最近,在这篇文章中,作者从统计学的角度看待传染病传播中的“超级传播”。他用基尼系数而不是通常的负二项分布的离差参数来描述子代分布的异质性。这允许我们考虑更灵活的后代分布。
扁平化 vs 收缩:#扁平化曲线的数学

由 Ben Bolker 和 Jonathan Dushoff 发布的这篇博客文章对物理距离给出了清晰的解释,并解释了物理距离如何使几种有益的结果成为可能。
该代码可在 GitHub 上获得。
#explainCovid19 挑战

由 Przemyslaw Biecek 发表的这篇博客文章概述了一个使用梯度推进来预测基于年龄、国家和性别的存活率的模型。它还显示了老年人的风险更大,并让您自己使用 modelStudio 交互式仪表盘来玩这个模型。
数据来源:
- 谷歌表单(最新数据在二月底)
- Kaggle 数据集
探索新型冠状病毒的 R 包

由 Patrick Tung 通过《走向数据科学》发表的这篇博文被翻译成英文。
数据收集自腾讯,位于https://news.qq.com/zt2020/page/feiyan.htm,其中包含冠状病毒的最新公开信息之一。
使用 R-哥伦比亚的冠状病毒模型

这篇由丹尼尔·佩纳·查维斯发布的博客文章使用了霍尔格·k·冯·朱安·迪德里奇教授的代码来模拟疫情的高度和预计的死亡人数。作者还指出,大量的其他变量需要考虑,如密度,气候和政府的反应。
数据来自 Rami Krispin 的 GitHub 。
最近,作者发表了另一篇文章比较中国和意大利的对数比例。
新冠肺炎:西班牙的案例

由来自Diarium-Statistics and R software的 Jose 撰写的这篇博文使用西班牙的数据,应用 SIR 模型,然后是三次多项式回归模型来预测感染、住院、死亡和高峰日期。
整理新的约翰霍普金斯大学新冠肺炎时间序列数据集

由 Joachim Gassen 撰写的这篇博客文章提供了处理不同国家名称和约翰霍普金斯网站上的变化的函数和代码。
最近,作者发表了一系列其他有趣的文章:
- 合并新冠肺炎数据和政府干预数据:本文分析了对新冠肺炎传播的五种干预。

2.从 PDF 数据中抓取谷歌新冠肺炎社区活动数据:这篇文章解释了如何从一个跟踪人们活动的谷歌网站中抓取数据。作者使用了{tidycovid19} R 软件包,准备对德国和其他国家进行分析。

3.新冠肺炎:探索你的可视化自由度:在这篇文章中,作者用新冠肺炎的数据展示了图形是如何以非常不同的方式交流和被操纵的。他指出,向读者传达一个“中性”的信息绝非易事,没有指导的可视化尤其容易误导读者。
- {tidycovid19}新数据和文档:最近对 {tidycovid19} 包的更新带来了测试数据、替代案例数据、一些地区数据和适当的数据文档。使用所有这些,你可以使用软件包来探索政府措施(的解除)、公民行为和新冠肺炎传播之间的联系。
5.探索和基准牛津政府反应数据:基于评估能力项目(ACAPS) 和牛津新冠肺炎政府反应追踪评估非药物干预对新冠肺炎传播影响的帖子。
比利时的新冠肺炎

基于 Tim Churches 的文章,我发表了一篇关于新冠肺炎的分析文章。在这篇文章中,我还使用了最常见的流行病学模型,SIR 模型(以其最简单的形式),来分析在没有公共卫生干预的情况下疾病的爆发。我还展示了如何计算繁殖数,并提出了一些额外的改进,可以进一步分析流行病。
该代码可在 GitHub 上获得,因此可以随意使用它作为分析您自己国家的病毒爆发的起点。
由 R 和 ggplot2 创建的 5 个图表中关于冠状病毒疾病 2019(新冠肺炎)的事实

由 Gregory Kanevsky 撰写的这篇博客文章将一些关于新冠肺炎的有用事实汇编成 5 个图表,包括量表图表,并讨论了用于创建它们的 R 和{ggplot2}技术。
新冠肺炎的传染性第一部分:数学拟合的改进

这篇客座博文由 Martijn Weterings 在学习机上撰写,描述了新冠肺炎数据与 SIR 模型的拟合,并解释了拟合方法的棘手部分以及我们如何减轻一些问题(例如,算法的早期停止或病态问题)。它非常清楚地解释了对标准模型的一些调整。
代码可在这里获得。
冠状病毒:法国空间平滑死亡和死亡动画地图

由来自 r.iresmi.net 的 Michael Ires 发布的这篇博文展示了 R 代码,展示了如何使用带有任意边界区域的核加权平滑来显示法国新冠肺炎的死亡地图。
作者还发表了另外两篇文章,内容是关于如何构建新冠肺炎在法国和欧洲的死亡动画地图。
最近,作者发表了一篇文章,其中他使用了{geogrid}包来显示法国各部门的 Covid19 发生率以及传播情况。
另一个“拉平新冠肺炎曲线”模拟…在 R

由哈维尔·费尔南德兹-洛佩兹撰写的这篇博客文章展示了 R 代码来创建静态图,然后模拟演示社交距离如何有助于“平坦化”新冠肺炎感染的曲线。
用 R 跟踪整个新泽西州的 Covid19 病例

由 Kevin Zolea 撰写的这篇博客文章展示了如何使用{gganimate}包创建一个动画时间序列地图,显示 Covid19 如何在美国新泽西州的各个县蔓延。
看着 Y A C M(又一个 COVID 模型)很有趣

由 Adrian Barnett 从 Median Watch 撰写,这篇博文中的所有模型都是基于 Alison Hill 优秀的常微分方程模型。它们是那些大量使用{MicSim}包在 r 中运行微观模拟的模型的微观模拟。
Covid19 &一些计算语料库语言学

由 Jason Timm (语言学博士)撰写的这篇博客文章分析了美国国会 535 名投票议员在第 116 届国会第二次会议期间生成的所有推文。更具体地说,作者将 COVID19 相关术语的使用视为时间和党派关系的函数。他还使用手套模型和多维标度研究了 COVID19 相关术语的概念相关性。
新冠肺炎有那么糟糕吗?是的,很可能是

由计量经济学的 Francis Smart 博士通过模拟撰写的这篇文章清楚地解释了决定 COVID19 感染和死亡的一些因素,以及不同的严重程度。
新冠肺炎潜在的长期干预策略

在这个网站上,斯坦福大学的几位教授和成员(Marissa Childs、Morgan Kain、Devin Kirk、Mallory Harris、Jacob Ritchie、Lisa Couper、Isabel Delwel、Nicole Nova、Erin Mordecai)开发了一个新冠肺炎房室模型来评估非药物干预(如社会距离)的可能结果。
该网站介绍了该问题、利用模型预测 COVID 干预策略效果的可能性(多亏了一个闪亮的应用程序)、模型细节以及对加利福尼亚州圣克拉拉县的预测。
该代码可在 GitHub 上获得。
冠状病毒时代的动画

由 Martin Henze 从 Heads or Tails 博客撰写,这篇文章描述了如何提取和准备必要的数据来制作病毒在德国随时间传播的动画,使用{gganimate}和{sf} R 包来创建动画地图视觉效果。
作者将与德国地图相关的数据集发布到 Kaggle 上,他每天都在那里维护它。此外,他发布了一个版本的 JHU 美国县级数据集,其中他添加了一些来自美国人口普查的关键人口统计信息。这个数据集也每天更新。
密西根州的新冠肺炎数据和预测

由 Nagdev Amruthnath 撰写的这篇博客文章建立并测试了一个基于密歇根州数据的指数回归模型。
美国新冠肺炎的数据可视化

这篇由丹尼尔·雷夫撰写的文章使用指数和逻辑曲线研究了新冠肺炎的增长动力。
新冠肺炎教在各国的传播

Sergey Bryl 在博客analyzecore.com中写道,这篇文章调查了病毒在国家间的传播速度。一个动画可视化和两个静态图表显示:
- 之前的阶段持续了多长时间,强度有多大
- 比较不同国家对新冠肺炎的有效性
代码可以在文章末尾找到。
美国的新冠肺炎和农村地区

由来自 Deltanomics 的 Elliot Meador 撰写的这篇博客文章聚焦于美国农村地区的新冠肺炎案例,包括在南方是否有任何一个特定的州似乎是一个例外。
Covid 死亡率:数据正确吗?

由 Sam Weiss 撰写的这篇帖子对病例数报告的准确性提出了质疑,因为它们可能无法填充正确的数据。
最近,作者发表了两篇文章(第一部分和第二部分),其中他发现并可视化了一个国家新冠肺炎病毒检测呈阳性的人数与从中国进口之间的关联。此外,他发现有些特定行业与新冠肺炎利率特别相关。
带有位置数据的新冠肺炎风险热图、Apache Arrow、马尔可夫链建模和 R Shiny

由 Filip Stachura 撰写,这篇帖子描述了 Appsilon 提交给最近疫情响应黑客马拉松的解决方案(CoronaRank)。受谷歌 PageRank 的启发,它使用 Veraset 的 Apache Parquet 格式的地理位置数据,通过马尔可夫链建模进行有效的暴露风险评估。
新冠肺炎追踪者印度尼西亚

由来自 DataWizArt 的 Dio Ariadi 撰写,这篇帖子展示了一些关于新冠肺炎病例和印尼死亡病例的地区差异的非常好的图表,每个图表都有非常整洁的集成 R 代码。
使用机器学习的新冠肺炎投影

由 Youyang Gu 开发的这个网站展示了一个直观的模型,该模型在经典传染病模型的基础上建立了机器学习技术,以预测美国、美国所有 50 个州和 60 多个国家的新冠肺炎感染和死亡人数。
代码可以在 GitHub 上找到。
新冠肺炎在比利时:结束了吗?

本文由本人与 Niko Speybroeck 教授和 Angel Rosas-Aguirre 合作撰写,展示了比利时住院人数和确诊病例数的变化(按省份和国家级别)。
文章中提供了地块的代码。
按族裔分列的新冠肺炎病例

由 Tommi Suvitaival 撰写的这篇文章调查了不同种族背景的人在一个县的人口中所占的比例。
田纳西州新冠肺炎更新

由詹姆斯·m·路德·T21 教授撰写的这份文档提供了田纳西州每日数据的摘要。作者使用了交互式地图、各种指标的七天滚动平均值和分面图表。
用起点-终点矩阵和 SEIR 模型模拟冠状病毒在城市中的爆发

由来自的的的范撰写的这篇博文展示了一个基于起点-终点矩阵和 SEIR 模型的模拟和可视化冠状病毒在大东京地区传播的分步指南。
来自同一作者的另一篇帖子关注减少人口流动在管理冠状病毒爆发方面的有效性。
新冠肺炎人口流动性——在新冠肺炎·疫情统治下,人口流动性发生了怎样的变化?

由凯尔西·e·冈萨雷斯撰写,这个可视化的作品旨在理解新冠肺炎疫情期间的种群行为。
如何在 5 分钟内构建新冠肺炎数据驱动的闪亮应用

由伊曼纽·吉多蒂撰写的本教程展示了如何使用 R 包 COVID19 : R 接口构建一个简单而完整的闪亮应用程序到新冠肺炎数据中心。
在另一篇帖子中,作者进一步详细探究了 R 包 [{COVID19}](https://www.statsandr.com/blog/top-r-resources-on-covid-19-coronavirus/#covid19)。
分析 COVID19 R 包中的数据

由 Pablo Cánovas 撰写的这篇博文探究了 COVID19 的死亡报道是否准确。
体重与新冠肺炎和流感的风险

由拉德福德·尼尔教授撰写的这篇博文着眼于流感样疾病的数据和一些初步的 Covid19 数据。作者得出结论,体重不足和严重肥胖都是严重呼吸道疾病的风险因素。
最近,作者发表了一系列其他文章:
- 新冠肺炎令人困惑的线性讨论了这样一个事实,即对于许多国家来说,总病例数或总死亡数的线性曲线首先呈指数上升,然后趋近于一条不水平的直线
- 新冠肺炎病毒、其他冠状病毒和流感的季节性:这篇文章着眼于流感和普通感冒冠状病毒季节性的证据,以及在多大程度上人们可能认为新冠肺炎也是季节性的
- 对“预测大流行后时期新型冠状病毒的传播动力学”的批评:这篇文章分析并批评了 Kissler 等人(2020)的一篇早期论文。参见第 2 部分和第 3 部分
HMD —每周数据

罗纳德·里奇曼撰写的这篇博客文章利用人类死亡率数据库及其最近开始的 13 个国家每周死亡数据的特殊时间序列,探索了目前报告的极不可能的死亡水平。
克里斯·缪尔博客上的客座博文

由 Skylar Hara 撰写的这篇博客文章研究了在夏威夷州长发布居家命令后,Covid19 的发病率是否发生了变化。

由 Ronja Steinbach 撰写的这篇博客文章收集了关于特朗普或克林顿州、少数族裔百分比和家庭收入中位数的数据,以回答以下问题:
- 2016 年大选中某州的党派归属对该州的病毒发病率有显著影响吗?
- 少数民族人口比例和中等家庭收入会影响各州的病毒发病率吗?

由香月明美·桑提亚哥撰写,这篇文章显示了美国非洲裔美国人和美国白人之间死亡率的统计差异。

Masha Rutenberg 写的这篇帖子关注的是一个国家的人口和该国确诊感染人数之间的相关性。
所有作者都是克里斯·缪尔教授的学生。
对流行病学的再认识

由 Joseph Rickert 在 R Views 中撰写的这篇博客文章追踪了有助于流行病学研究的 R 包,并显示了最近几个月五个最受欢迎的包的下载数量。
罗布·J·海曼的文章

莫纳什大学(澳大利亚)统计学教授兼计量经济学和商业统计系主任 Rob J Hyndman 发表了一系列与 Covid19 相关的文章:
- 预测新冠肺炎:这篇博客文章没有使用 R,尽管 Hyndman 教授是这方面的专家,但它确实解释了时间序列预测或其他预测方法的一些问题
- 为什么对数比率对追踪新冠肺炎有用:这篇文章展示了报告对数比例图形的好处
- 2020 年超额死亡人数:各国报告的 COVID19 死亡人数往往被低估。探究疫情对死亡率的真实影响的一个方法是看“超额死亡”——今年和往年同期死亡率之间的差异
- 季节性死亡率:这篇文章展示了如何利用人类死亡率数据库发布的每周死亡率数据来探索死亡率的季节性。由于温度和其他与天气相关的影响,死亡率被认为是季节性的
土耳其对德国:新冠肺炎

这篇文章比较了土耳其和德国控制疫情的努力,并测试了几个回归模型。
实践:如何在 R-Shiny 中构建交互式地图:以新冠肺炎仪表板为例

这篇帖子由桑萌撰写,以新冠肺炎仪表盘为例,解释了如何用 Shiny 构建一个交互式仪表盘。
在摩洛哥做新冠肺炎模特

由扎卡里亚·加萨塞撰写的这篇博文展示了摩洛哥 Covid19 病例的数据,并将 SIR 模型应用于这些数据。
最近,作者发表了另外两篇文章。第一篇文章通过使用简单但有效的时间序列分析提供了对摩洛哥新冠肺炎病例和死亡的短期预测。第二篇文章绘制疫情地图,看看哪些地区疫情最严重。
爵士与克马克和麦肯德里克的模型

由 Pierre Jacob 撰写的这篇博文主要是对广泛使用的 SIR 模型的起源的回顾。
约翰霍普金斯大学新冠肺炎数据和研究中心

由史蒂夫·米勒撰写的这些博文(part 1&part 2)展示了对约翰·霍普金斯大学公布的美国新冠肺炎每日病例/死亡数据的处理,并可视化了病例和死亡的移动平均数。
作者还发表了一篇博客文章,对美国的失业申请进行了透视。
实时估计新冠肺炎的反应时

由 Ramnath Vaidyanathan 撰写的这篇教程展示了如何估计 Rt,这是一种被称为有效繁殖数的度量,它是在 t 时刻每个感染者被感染的人数
从静态到动态时间序列:潮流之路

由 Giulia Ruggeri 撰写,这篇帖子讲述了创建新冠肺炎时间系列动画情节的必要步骤。
先睹为快:新的峰会数据工具帮助客户可视化美国受新冠肺炎病毒影响最严重的地区

由 Colby Ziegler 撰写的这篇博客文章描述了一个工具(主要在 R 中使用{leaflet}、{tidyverse}和{tigris}包构建),该工具跟踪并显示美国各县确诊的新冠肺炎病例和死亡总数,并覆盖了经认证的社区发展金融机构(CDFIs)的位置。
如何再现金融时报风格 COVID19 每日报道?

由 Peyman Kor 撰写的这篇博客文章展示了如何按国家复制英国《金融时报》的内容。
关于接触追踪应用的推文能告诉我们对公共卫生数据共享的态度是什么?

由 Holly Clarke 撰写的这两篇博文(第一部分 & 第二部分)讨论了人们对接触者追踪应用的态度,这些应用使用推文、文本分析和自然语言处理来管理新冠肺炎的传播和公共卫生的数据共享。
可视化比利时的 COVID 案例

在这篇博文中, Koen Hufkens 绘制了比利时的案例,并解决了地理空间绘制中的一个挑战。
西班牙新冠肺炎发病率环境相关性的时空分析

由安东尼奥·帕埃斯人和几位合著者撰写的这篇博客文章着眼于西班牙的天气、湿度和其他因素来创建一个 SUR 模型。
安东尼奥·帕埃斯人的另一篇文章使用谷歌社区移动报告调查了新冠肺炎在美国的发病率。
新冠肺炎分析

由 Rizami Annuar 撰写的这篇帖子比较了马来西亚和其他国家的病例和死亡数据,包括相关性。
用 R 收集所有冠状病毒相关数据的简单方法

由费德里科·里弗罗尔撰写的这篇帖子展示了如何在 r 中组合关于 Covid19 案例、新闻引用(比如中国)和经济指标的数据(对于 Python 用户,请参见本版本)。)
澳大利亚政府可以选择减缓冠状病毒的传播,但他们需要立即采取行动

由马特·考吉尔撰写的这篇博客文章显示澳大利亚早期的病例相对较少,但是文章认为澳大利亚需要紧急行动。数据来自{gtrendsR}包。
在最近的帖子中,作者使用谷歌趋势数据搜索与失业相关的关键词,追踪了 COVID19 在澳大利亚最初几个月的影响。
除了这些帖子,斯蒂芬·达克特和布伦丹·科茨还发表了一系列其他帖子:
- 澳大利亚应加入新西兰,全力消灭冠状病毒
- 新冠肺炎的杯子是半满还是半空?
- 澳洲的新冠肺炎病例仍在快速增长。我们的医院可能很快就会达到饱和
- 随着越来越多的澳大利亚人感染新冠肺炎,我们会有足够的医院床位吗?
- 新冠肺炎:我们最脆弱的工人需要更多的帮助
- 随着新冠肺炎危机的加深,很少澳大利亚人在银行有很多现金
Covid 是否将每个人死亡的相对风险提高了相似的量?更多证据

由大卫·斯皮格哈尔特(巨著《统计艺术》的作者)教授撰写,这篇帖子使用英国国家统计局的数据,研究了年龄和性别的相对死亡率。
追踪冠状病毒:构建参数化报告以分析不断变化的数据源

在这篇帖子中, Tyler Sanders 使用 Johns Hopkins 的数据构建了一个病毒仪表板,只需点击一个按钮就可以每天更新,作为如何使用 R Markdown 构建参数化报告的示例。
绘制新冠肺炎的新西兰案例

在这篇文章中,Thomas Lumley 用他自己的 choropleth 包({DHBins})和它的六边形盒子绘制了新西兰卫生局的 COVID19 病例。
用 R #新冠肺炎想象疫情

在这篇帖子,钱用 Covid19 的数据进行了多方面的探索,包括美国电影票房收入和餐厅预订量的急剧下降。
探索美国新冠肺炎病例的时间演变

由罗伯特·温克尔曼和科林·瓦尔兹撰写的这篇帖子清晰地展示了如何创作美国艾滋病传播的动画情节。
r 数据分析:新冠肺炎

发表在锐视的博客上的这一系列博文(部分 1 、 2 、 3 、 4 、 5 和 6 )解释了如何重命名和重新排序列、标准化日期(用{lubridate}包)、合并数据集、采取其他准备步骤、用{ggplot2}包绘图,最后在 R 中再现一个显示 16 的相对进度的图
所有帖子都使用了约翰霍普金斯大学的数据和该公司自己收集的数据。
GA 新冠肺炎报道

根据佐治亚州公共卫生部报告中的数据, Andrew Benesh 发布了对美国佐治亚州的病例、死亡、ICU 使用率等的每日分析。
比利时的科罗纳

发表在 bnosac.be 上的这篇帖子涵盖了对 Covid19 指数传播的早期探索,重点关注比利时和荷兰。
从推特的角度看意大利的冠状病毒

由 Kode 团队撰写的这两篇帖子(在此和在此)使用文本挖掘技术来分析意大利疫情早期的推文以及意大利总理关于 Covid19 的讲话。
使用 R 和 Tidycensus 分析新冠肺炎风险因素

由 René F. Najera 撰写的这篇文章使用美国人口普查数据来确定“过度拥挤”的地区,并从 Covid19 风险的角度来考虑这些地区。
随着时间的推移制作美国新冠肺炎热点的动画

由内森·邱晨撰写的这篇文章展示了美国新新冠肺炎病例 7 天移动平均值的动画地图。动画地图的代码可以在文章的最后直接找到。
这篇文章是他之前关于可视化阿肯色州新冠肺炎的文章的延伸。
了解康涅狄格州的 COVID19。它需要一个城镇

基于内森·邱晨的这两篇帖子,查克·鲍威尔在他的帖子中展示了如何创建康涅狄格州(按城镇)每 100,000 人中新增 COVID19 例的 7 天滚动平均值的动画地图。
数据
- 约翰霍普金斯大学 CSSE 分校的 2019 年新型冠状病毒新冠肺炎(2019-nCoV)数据仓库:该数据集被本文提到的许多资源使用,并已成为新冠肺炎建模的黄金标准
- 世界卫生组织(世卫组织)。另见他们附带的闪亮的应用
- 新冠肺炎公开研究数据集挑战赛(CORD-19) (via Kaggle)
- 新型冠状病毒 2019 数据集:新冠肺炎受影响病例的日水平信息 (via Kaggle)
- 来自欧洲疾病控制中心的新冠肺炎数据
- COVID 跟踪项目
- 整理约翰·霍普斯金新冠肺炎数据为长格式,合并部分世行数据
- 新冠肺炎数据来源简介
- esri 的新冠肺炎数据集
- beoutbreakprepared/ncov 2019:网上极少数非聚合数据集之一。这种关于确诊新冠肺炎患者的个体水平信息(包括他们的旅行史、地点、症状、报告的发病和确诊日期以及基本人口统计数据)的数据集,对于理解传染性、地理传播风险、传播途径和感染风险因素等非常重要
- 抗击新冠肺炎:所有的数据集和数据都在一个地方:这篇文章收集了许多相关的数据集和数据
- 一张谷歌表单,帮助追踪英国当地的封锁
其他资源列表或集合
有了这么多关于冠状病毒的伟大资源,其他人也收集和组织了类似的列表。 3 以下是我有幸发现的一些收藏:
- 新冠肺炎建模资源、数据和挑战由 IDEA(不仅仅是 R)
- 切廷卡亚-伦德尔矿山公司的 GitHub repo covid19-r
- 放大我在新冠肺炎信任的人:由来自simple Statistics的 Jeff Leek 撰写,这篇文章收集了值得信赖的人和专家,他们分享了关于新冠肺炎疫情的好信息
- 一些精选新冠肺炎建模资源和更多精选新冠肺炎资源由 Joseph Rickert 提供,汇集仪表板、闪亮的应用程序、博客帖子、软件包、数据集、视频和与 Covid19 疫情相关的会议记录
- CovidR 竞赛:由欧洲 R 用户会议(eRum) 发起,该竞赛是一项开源竞赛和会前活动,展示 R 围绕新冠肺炎疫情主题所做的任何工作
- 将新冠肺炎变成你学生的数据可视化练习:由丹妮拉·杜卡撰写,这篇博文介绍了各种可视化数据的方法,借鉴了几篇博文、闪亮的应用程序和仪表盘
我希望,除了我的收集,这些别人做的富豪榜,能给你足够的背景材料,让你自己去分析新冠肺炎的爆发(或者至少有一些思路)!
非英语资源
这一部分可能只对有限的几个人感兴趣,但是除了英语,还有很多其他语言的资源。请看下面按语言列出的一些例子:
日语:
德语:
- 由教授赫尔穆特·屈臣霍夫博士开发的这张冠状地图通过地图和表格展示了冠状病毒在世界、欧洲和德国的情况
西班牙语:
- GitHub 存储库,包含政府官方数据和用于提取这些数据的 R 代码,请参见此处的和此处的和
- 智利新冠肺炎:这个闪亮的应用程序显示了累计确诊的传染病病例,并提供了每个城市的估计增长率
- 这款闪亮的应用由 Que Oferton 开发,提供了 2019 年中美洲新型冠状病毒新冠肺炎疫情的概况,包括统计、预测、SIR 和 SEIR 模型。数据和控制面板每天都会刷新
法语:
- 由 Arthur Charpentier 撰写的这篇博文展示了如何使用法国死亡率数据来量化超额死亡率
感谢阅读。我希望你会发现这些关于新冠肺炎冠状病毒的资源很有用。如果我错过了,请在评论中告诉我。
特别感谢里斯·莫里森在收集和组织几篇文章方面所做的大量工作,这些工作极大地帮助了关于博客文章部分的改进。阅读他的文章(第一部分和第二部分),对收集到的所有帖子进行描述性分析。
虽然我已经仔细阅读了所有的资料,但被列入名单并不意味着我赞同这些发现。此外,一些分析、代码、仪表板、包或数据集可能已经过时,因此默认情况下,这些不应该被视为当前的发现。如果你是其中一个资源的作者,如果你看到任何不一致或者你想从这篇文章中删除它,请不要犹豫联系我。
和往常一样,如果您有与本文主题相关的问题或建议,请将其添加为评论,以便其他读者可以从讨论中受益。如果您发现了错误或 bug,可以通过在 GitHub 上提出问题来通知我。对于所有其他要求,你可以与我联系。
参考
德·弗拉斯、日本清酒和吕克·克丰。2020.“分阶段解除控制:在国家一级实现抗新冠肺炎群体免疫的实用策略。” medRxiv 。
Kissler,Stephen M .,Christine Tedijanto,Edward Goldstein,Yonatan H Grad 和 Marc Lipsitch。2020."预测 Sars-Cov-2 在大流行后时期的传播动态."理科368(6493):860–68。
彭、梁荣、吴越阳、张东延、诸葛长泾、。2020."中国新冠肺炎疫情的动力学模型分析." arXiv 预印本 arXiv:2002.06563 。
相关文章:
- 该软件包也是一个预印本的主题。 ↩
- 在 Marc Choisy 的帖子中可以看到更多关于这个流行病学模型的信息。 ↩
- 请注意,与我的列表不同,其他人的收藏可能包括使用 R. ↩ 之外的其他工具的新冠肺炎上的资源
原载于 2020 年 3 月 12 日 https://statsandr.com。
从 Python 开始会让你成为更好的数据科学家的五大理由

泰勒·弗兰塔在 Unsplash 上的照片
随着对拥有数据科学技能的人的需求激增,公司已经在寻找满足这种需求的方法。一种方法是公司走出去,招聘封装所有数据科学的人,这通常包括精通一种编码语言,可能是 Python。这是因为 Python 是数据科学中使用的一种流行的编码语言。另一种方法是观察你的公司内部,看看谁拥有这些技能,让这些人成为你的数据科学家。公司也可以看看自己的内部,找到接近他们想要的数据科学家的人,并对他们进行培训。为了加快内部数据科学人员的增长,公司有时会购买能够快速交付数据科学解决方案的商业工具。如果你发现自己属于一群准备提升技能成为公司数据科学家的人,那么这是一份适合你的列表。
来自世界各地的顶级科技公司已经开发了优秀的工具来帮助所有的数据科学,其中许多只需要很少或没有编码经验就可以开始。如果您的公司正在考虑使用数据科学工具或平台(或者已经使用了),那么您可能会想“如果不需要,我为什么还要尝试编码”,或者“我现在没有时间学习编码。”这些都是你头脑中非常自然的想法。我想做的是给你一些不这么想的理由,以及为什么我认为学习 Python 会让你成为一名更好的数据科学家。
原因 1:知道“为什么”
作为任何机器学习或分析项目的数据科学团队的一部分,你需要回答从使用什么数据到如何训练模型的所有问题。写代码对你有什么帮助?你可能会有一个更结构化的方法来设置项目步骤,因为用没有结构的代码编写解决方案是一个真正的陷阱,而有结构的思想可以让你在回答问题时不显得无所事事。使用编码语言设置模型的训练也使您接触到模型的参数和超参数,这将使您了解它们是什么以及它们如何影响算法的训练或模型的性能。将解决方案“开箱即用”时,这些主题可能不会出现
原因#2:了解陷阱并排除故障
你在高速公路上开车时用过巡航控制吗?在城市街道上平行泊车时,你会使用巡航控制吗?为什么不呢?忽略自动驾驶和自动泊车的汽车,我要说的是,有时我们使用的工具只适用于某些情况。当你想保持速度,但你仍然需要注意和转向时,巡航控制是很好的,但对于其他目的来说,它不是很好。在这里,拥有动手编程的体验就像知道如何在高速公路上驾驶的每一个细节,即使有巡航控制。如果有什么奇怪的事情发生,你可以调整。数据科学过程的某些部分最终会中断,会出现错误和其他灾难,有时事情会完全失败。不仅仅是知道如何打开巡航控制,还能让你排除故障并适应这些情况。编码有什么帮助?编写代码时,您可能会面临各种各样的错误。编码教你如何保持冷静,回溯到出错的地方,诊断并记录问题(保持透明)并修复问题。
这里最后一点:在编写代码时,了解机器在数据集操作方面可以和不可以处理什么,将有助于您理解数据科学工具可以和不可以处理什么。例如,一些计算需要在整个数据矩阵上执行。在代码中尝试这样做将会抛出某种错误,也许您可以在将来避免这个陷阱。
原因 3:知道什么是可能的
如果你决定在成为数据科学家时完全避免代码,你可能会错过商业工具中还没有的技术。你曾经想要一个机器学习模型同时对两个目标进行预测吗?在你的其他特征旁边添加一系列特征怎么样?如果你知道要搜索什么,这些是可能的,但是在你的公司提供的工具中可能不明显。询问什么是可能的问题将不可避免地将你直接引向用编码语言编写的东西。
原因 4:对工具领域的了解和欣赏
无论是特别分析还是训练深度学习模型,即使你只有编写代码完成任务的一点经验,你也会理解为什么这些工具存在,并开始欣赏它们。随着时间的推移,您将学会使用工具和技术来履行您的职责,但是拥有一点编码背景有助于您确切地了解您从中受益的是什么。例如,现代工具允许您在过滤时指定应用于数据集中某些列的条件,并保持这是您的过程的一个保存和透明的部分。这是一项常见的数据预处理任务,但是将它隐藏在代码中可能会有问题。我见过这样的例子,在团队意识到他们忘记在上游应用一个条件之前,下游流程已经被执行了。有效使用数据科学工具可以防止这种情况。
另一方面,如果你有为机器学习问题编写代码的经验,你会对自己的能力充满信心,并理解完成任务所需的技术。这可以为贵公司对数据科学工具的评估注入一些急需的现实。例如,当你了解到这项任务可以使用开源语言用十几行代码完成时,你对购买一个企业级平台来训练人工智能模型以预测单一产品的客户流失的看法将发生巨大变化。以这种方式拥有一些 Python 经验有助于您成为一个有见识的消费者。
原因 5:知道自己并不孤单
有时,为了成为一名成功的数据科学家,您觉得需要了解的信息量可能会令人望而生畏。尽管如此,有时似乎有些人让它看起来很容易。从代码开始,我会鼓励你简单地在网上搜索代码相关问题的解决方案。你会很快发现有一个全球社区在那里帮助你的旅程,你会看到许多其他人也在问类似的问题。花一点时间通过搜索关于某个特定算法的指南或文章来深入研究它。您会发现这些指南或文章大多使用 Python 来解释这一主题,因此舒适地阅读代码对您最有利。
如果你正在开始你的数据科学之旅,那么我希望这些原因已经说服你考虑编码。我还希望,如果你已经进入了使用一个流行的数据科学工具来推动价值的 5 年计划,你可以花一些时间来看看 Python,并获得更多的“实践”最后,本文并不是要阻止那些没有 Python 背景的人成为数据科学家。虽然我认为学习一点代码会让你变得更好,但这并不是说没有它你就不能成为伟大的。
使用散景的简单数据可视化技术

使用散景库快速总结 5 种最简单、最有效的交互式可视化技术
没有恰当的形象化,任何故事都是死的。只有少数已知的(但不总是来自可靠的来源)被称为“古鲁”、“圣人”、“老师”,有时是“主”,经常是“殉道者”的超人,因为能够在没有适当视觉支持的情况下讲述一个鼓舞人心的故事而获得了不朽的名声。其他人必须使用不同的支持技术来传达他们的故事。
有很多方法可以让你的故事变得有趣并吸引观众。你可以把语言和非语言的技巧结合起来使用,但是只有一样东西是真正重要的——一张好照片。一点不错,胜过千言万语!而数据科学绝对不是例外。这就是为什么我们大多数人从一开始就在学习基本的可视化库(Matplotlib、Plotly、Seaborn——这只是个开始)。
我最近偶然发现了一个叫做散景的图书馆,我非常喜欢它!它非常直观,非常简单,学习曲线非常平缓。但是从一开始,人们就开始创造很酷的交互式可视化。这篇文章是我的散景爱情故事的开始。完整的故事(包括 Jupyter 笔记本和所有文件)在我的 Github 上。

我们大多数人都见过并喜欢这样的照片,照片前面的许多明亮的颜色与一些模糊的背景结合在一起。这被称为“bokeh”(有时拼写为“boke”)——一个日语单词,意思是“模糊”。在摄影中,这是一种很受欢迎的方法,可以让照片看起来更有吸引力。它也成为了一个 Python 交互式可视化库的好名字!
让我们来看看 5 个最简单的散景可视化技术,它们代表了一个温和渐进的散景学习曲线。我在联合国开放数据源找到了一个相对较小的世界社会经济发展数据集。在其他指标中,它代表了 2000-2015 年全球传染性疾病流行率的数据,这是前新冠肺炎时代的美好时光。
单线图
对于每个熟悉 Python 基础的人来说,代码看起来非常简单。为了简单起见,我只包含了有意义的块,省略了辅助和技术部分(导入库等)。).
*#Initializing our plot with the 400x400 dimensions and standard tools (zoom, save, etc.)*p = figure(plot_width=400, plot_height=400, tools=TOOLS)*#We need to set the axis and pass the values from the dataset.
#Our horizontal axis X will be years, and our vertical axis Y will be life expectancy*x = data[data['country']=='Afghanistan']['year']
y = data[data['country']=='Afghanistan']['life expectancy']*#Initializing our glyph. Only two parameters are necessary - x and y*p.line(x, #horizontal axis
y, #vertical axis
line_alpha = .7, #line opacity
line_color = 'red', #line color
line_width = 4, #line width
line_dash = 'dashdot', #line type(dotted,dashed, etc)
legend_label='Afghanistan' #line legend
)*#Additional visualization parameters*p.xaxis.axis_label = "Year" #horizontal axis' label
p.yaxis.axis_label = "Life Expectancy" #vertical axis' label
p.legend.location = "center" #legend's location
p.xgrid.grid_line_color = 'green' #horizontal axis' color
p.xgrid.grid_line_alpha = .3 #horizontal axis opacity
p.ygrid.grid_line_color = 'blue' #vertical axis' color
p.ygrid.grid_line_alpha = .3 #vertical axis' opacity*#Finally, we want to see our visual and we need to ask Bokeh to show it to us.*show(p)
结果是:

就这么简单,而且代码注释比代码本身还要长!
同一地块上的多个依赖项
同样,编码部分非常简单直观。让我们看看 2000 年至 2015 年几个随机国家的预期寿命数据。
*#Initializing our plot*p = figure(plot_width=600, plot_height=600, tools=TOOLS)*#Horizontal axis - year*x = data[data['country']=='Afghanistan']['year']*#Vertical axis for several countries' life expectancies*y = data[data['country']=='Afghanistan']['life expectancy']
y1 = data[data['country']=='Romania']['life expectancy']
y2 = data[data['country']=='France']['life expectancy']
y3 = data[data['country']=='Japan']['life expectancy']
y4 = data[data['country']=='Chad']['life expectancy']*#Drawing our 5 curves. Each line has its own style and label*p.line(x , y,
line_alpha = .7, line_color = 'red', line_width = 4, line_dash = 'dashdot',
legend_label="Afghanistan")p.line(x , y1,
line_alpha = .7, line_color = 'green', line_width = 4, line_dash = 'dotdash',
legend_label="Romania")p.line(x , y2,
line_alpha = .7, line_color = 'blue', line_width = 4, line_dash = 'dashed',
legend_label='France')p.line(x , y3,
line_alpha = .7, line_color = 'orange', line_width = 4, line_dash = 'dotted',
legend_label='Japan')p.line(x , y4,
line_alpha = .7, line_color = 'magenta', line_width = 4,
legend_label='Chad')*#Additional visualization parameters*p.xaxis.axis_label = "Year"
p.yaxis.axis_label = "Life Expectancy"
p.legend.location = "center_right" #Choosing legend's location*#Showing the visualization*show(p)
渲染的结果是:

同样,非常简单。我们也可以为我们的情节和不同的字形选择不同的风格。散景中的字形是表示数据的可用符号(象形文字)之一。请看下面的代码,并绘制同一时间段内不同随机国家的预期寿命数据。
*#Initializing the plot*p = figure(plot_width=800, plot_height=500, #plot size
background_fill_color='lightblue', #background color
background_fill_alpha=.2, #background opacity
title = 'Life expectancy 2000-2015', #visual's title
title_location='above', #title's location
tools=TOOLS #standard tools
)*#Horizontal axis*x = data[data['country']=='Afghanistan']['year']*#Vertical axis for several countries' life expectancies*y = data[data['country']=='Brazil']['life expectancy']
y1 = data[data['country']=='India']['life expectancy']
y2 = data[data['country']=='Italy']['life expectancy']
y3 = data[data['country']=='Egypt']['life expectancy']
y4 = data[data['country']=='Cuba']['life expectancy']*#Drawing our 5 curves. Each line has its own style and label*p.diamond(x , y, size =15, fill_alpha = .5, fill_color = 'red',
line_alpha = .5, line_color = 'green', line_width = 1.5,
legend_label="Brazil")p.circle(x , y1, size =15, fill_alpha = .5, fill_color = 'green',
line_alpha = .5, line_color = 'red', line_width = 1.5,
legend_label="India")p.asterisk(x , y2, size =15, line_color = 'blue', line_width = 1.5,
legend_label="Italy")p.triangle(x , y3, size =15, fill_alpha = .5, fill_color = 'orange',
line_alpha = .5, line_color = 'blue', line_width = 1.5,
legend_label="Egypt")p.cross(x , y4, size =15, line_color = 'magenta', line_width = 2,
legend_label="Cuba")*#Additional visualization parameters*p.xaxis.axis_label = "Year"
p.yaxis.axis_label = "Life Expectancy"
p.legend.location = "top_left"*#Showing the visualization*show(p)
结果是:

简单、直观、直截了当。
聚合字段和组合绘图样式
散景功能的美妙之处在于,我们可以传递 Panda 的 groupby 结构(以及许多其他结构)作为绘图的参数。我们还可以直观地为相同的图形组合多种样式。让我们以发达国家和发展中国家的平均脊髓灰质炎发病率比较为例来说明这一点。
*#Plotting a line for developing countries by passing Pandas groupby aggregate structure
#directly to the plotting finction*p.line(
data[data['status']=='Developing'].groupby(['year']).mean()[['polio']].index,
data[data['status']=='Developing'].groupby(['year']).mean()['polio'],
line_color='blue',
line_width = 3
)*#Plotting datapoint circles for developing countries* p.circle(
data[data['status']=='Developing'].groupby(['year']).mean()[['polio']].index,
data[data['status']=='Developing'].groupby(['year']).mean()['polio'],
size = 15,
fill_color='azure',
legend_label = 'Developing countries'
)
*#Plotting a line for developed countries* p.line(
data[data['status']=='Developed'].groupby(['year']).mean()[['polio']].index,
data[data['status']=='Developed'].groupby(['year']).mean()['polio'],
line_color='red',
line_width = 3
)*#Plotting datapoint circles for developed countries
*
p.circle(
data[data['status']=='Developed'].groupby(['year']).mean()[['polio']].index,
data[data['status']=='Developed'].groupby(['year']).mean()['polio'],
size = 15,
fill_color='salmon',
legend_label = 'Developed countries'
)*#Setting the legend's location*p.legend.location = 'bottom_right'*#Showing the visualization*show(p)
我们在这里:

轻松、简单、省事。通过使用可用的散景字形、颜色和样式以及这种“超集”技术的任何可能的组合,我们可以在同一个地块上绘制无限数量的图形。
多线绘图
Bokeh 还为我们提供了减少使用多行绘图功能在同一绘图上绘制多个依赖项所需的代码量的方法。让我们以发达国家和发展中国家的麻疹综合统计数据为例,看看这是如何工作的。
多行绘图功能根据以下方案工作:
p.milti-line([x[0]:x[i]], #list of horizontal values for each curve
[y[0]:y[i]], #list of vertical values for each curve
..........., #lists of properties for the lines)
代码看起来像这样:
p.multi_line(
[data[data['status']=='Developing'].groupby(['year']).mean()[['measles']].index,
data[data['status']=='Developing'].groupby(['year']).mean()[['measles']].index],
[data[data['status']=='Developing'].groupby(['year']).mean()['measles'],
data[data['status']=='Developed'].groupby(['year']).mean()['measles']],
color=['blue','red'],
width=[3,3]
)
结果如下:

同样,简单直观。有无数种方法可以增强视觉细节。
网格图
对于许多可视化库来说,同时创建大量的图并将它们排列在网格中是一项非常艰巨的任务。不适合散景。让我们来看看几个随机国家及其历年 0-5 岁婴儿死亡率。
*#Choosing the data*y1 = data[data['country']=='Turkey']['under-five deaths']
y2 = data[data['country']=='Brazil']['under-five deaths']
y3 = data[data['country']=='Thailand']['under-five deaths']*#Creating the first plot*p1 = figure(width=250, height=250)
p1.triangle(x, y1, size=10, color="firebrick", fill_alpha=0.25)
p1.line(x,y1, color='salmon', line_width=2, legend_label='Turkey')
p1.title.text='Mortality rates for infants 0-5 years 2000-2015'*#Creating the second one*p2 = figure(width=250, height=250)
p2.square(x, y2, size=10, color="orange", fill_alpha=0.25)
p2.line(x,y2, color='pink', line_width=2, legend_label='Brazil')*#Create another one*p3 = figure(width=250, height=250)
p3.circle(x, y3, size=10, color="olive", fill_alpha=0.25)
p3.line(x,y3, color='lightgreen', line_width=2, legend_label='Thailand')*#Arranging all the plots in a gridplot*p = gridplot([[p1, None], [ p2, p3]], toolbar_location=None)*#Showing the results*show(p)
结果就在这里:

我们可以永远用散景的简单技术做实验。该软件包提供了真正无限数量的方法来创建有吸引力的和互动的视觉效果。
这个故事的下一部分将是一些散景的中间技术。
五大雪花 BI 和报告工具:详细比较
数据爱好者/工具

作者图片
随着最近席卷整个华尔街的首次公开募股,数据市场领域的每个人都在谈论雪花——一种基于云的数据仓库即服务。
随着公司急切地从传统的基于服务器的数据仓库转向现代的无服务器数据仓库(正如 Lars Kamp 在写给投资者的信中详细描述的),很有可能你的公司正在考虑采用雪花并改造互补的数据堆栈。
作为一名数据分析师/工程师,为了应对这一趋势,您着手为该数据源寻找最兼容的 BI 和报告工具。
虽然雪花已经友好地列出了所有可以互操作的 BI 工具,但是我们仅仅决定哪一个适合我们公司的数据需求是不够的。
这篇博客将为您提供五大雪花 BI 和报告工具的详细比较,希望能为您选择最适合您当前数据堆栈的工具提供一些指导。
整体主义
Holistics 是一个自助式 BI 工具,让数据分析师在雪花和许多其他 SQL 数据仓库中建模和转换数据。然后,非技术用户可以自己对 insights 进行分析,而不必再依赖分析师。

作者图片
Holistics 最著名的是其数据建模功能,它可以帮助分析师创建一个单一的事实来源,您可以在其中将业务逻辑应用于您自己的数据,并确保它是准确的、可维护的和可重用的。
你可以在他们的详细指南中学习如何将 Holistics 连接到 Snowflake。
定价
Holistics 慷慨地在你的 14 天试用期到期后提供了一个免费计划,它不是根据用户数量向你收费,而是根据查询运行次数收费。这意味着,如果你是一家预算有限的自举式创业公司,那么 Holistics 就是你的合适工具。只有当您的公司及其分析需求扩大时,它才会开始收费。
与市场上几乎所有的竞争对手相比,Holistics 每月 200 美元的起价令人印象深刻,尤其是当它的功能同样强大和丰富时。即使您的公司随着更多分析师加入数据团队而扩大规模,您也无需担心每增加一个人的成本。

作者图片
优点
- 允许您使用可定制的 SQL 查询来查询雪花数据库,并通过其缓存层快速获得结果
- 查询结果的物化视图存储回您自己的 SQL 数据库,以便立即访问和快速可视化和报告。
- 自动安排报告和仪表板,将最新数据以雪花形式直接发送到您的电子邮件收件箱。
- 高级 SQL 编辑器:版本历史,自动完成,SQL 片段,突出显示,自动格式化,查询历史,自定义高级逻辑…
- 供业务用户浏览数据并生成报告以回答特定问题的拖放式界面。
- 具有竞争力的现收现付定价模式,只能随着您公司的发展而发展。
缺点
- 虽然功能强大,但对市场而言, Holistics 是一个相当新的工具。许多高级功能仍在他们的路线图上。
- Holistics 不支持 Git 集成和版本控制,这是许多高级分析师和数据工程师更喜欢的。
- 仪表板不如其他竞争对手的交互式。目前,Holistics 仅支持按日期向下钻取和钻取到另一个仪表板。
PowerBI
PowerBI 在 BI 行业相当知名,尤其是对于采用微软生态系统的企业。它支持数量惊人的数据源,使公司能够将数据集中在一个地方。
PowerBI 有一个用户友好的界面,具有惊人的数据可视化功能,从分析电子商务指标的简单仪表板到高度复杂的仪表板,如下面的 NFL 足球分析。

将 PowerBI 连接到雪花相当简单。你可以按照这里的说明。
定价
对于拥有小型数据团队的小规模公司来说,PowerBI 定价也很有吸引力。如果你是个人,只需要在本地计算机上安装 PowerBI 来进行分析,那么你可以免费下载桌面版。然而,如果你想使用更多的 Power BI 服务,并在云上发布你的报告,你可以选择 Power BI 云服务解决方案,每个用户每月 9.99 美元。
请注意,如果您的公司担心安全性和内部部署,价格会大幅上涨到每月4,995 美元,并按年订阅。

图片来源:【https://powerbi.microsoft.com/en-us/pricing/
优点
- 支持数百个数据源,从雪花这样的云服务到 Excel 这样的离线文件
- 强大的数据可视化功能。除了基本的可视化类型之外,PowerBI 还允许高级用户从定制可视化市场中进行选择,或者使用著名的 Javascript 库创建自己的可视化
- 频繁的更新和创新。关注 PowerBI 的博客,你会看到这个团队在推动新功能和变化方面非常积极。
- PowerBI 有一个活跃的超级用户和员工社区,他们愿意深入研究您的用例来帮助您。
缺点
- PowerBI 有一个陡峭的学习曲线。数据分析师必须学习 DAX(数据分析表达式)语言,才能充分利用 PowerBI 的力量,这有时很复杂,也很死板。
- 有限的数据传输能力。如果要查看 PowerBI 报表,必须安装 PowerBI desktop 或已经安装了 PowerBI 报表服务器。这对于 Mac 用户来说很困难,因为 PowerBI 只能安装在 Windows 设备上。
检查员
最近作为谷歌云平台的一部分, Looker 是一个强大的 BI 工具,为实时数据探索和分析提供了一种创新的方法。
Looker 拥有强大的仪表板功能,可以涵盖大多数数据发现用例。然而,与 Power BI 不同,它需要一个完整的语义模型来存储所有的业务逻辑和指标,而不必向数据库表添加一个略有不同的指标的多个版本。这意味着你不能只拿着 Looker,对着数据库,然后在几分钟内得到你的可视化。它需要使用他们自己的语言 LookML 进行预先定义,这将需要相当长的时间来掌握。

图片来源:https://docs . looker . com/dashboards/creating-lookml-dashboards
要将 Looker 连接到雪花,请遵循此处的说明。
定价
Looker 不会公开发布其定价信息,因为他们会为每家公司定制。根据我与一些 Looker 用户的交谈,价格可能在每月 3000 美元到 5000 美元之间(T4),10 个用户每年订阅一次。正如我上面提到的,Looker 是为拥有成熟和专门的数据团队的公司设计的,这些公司愿意采用一种全新的建模语言,并花时间设置 Looker 以适应他们的整个数据堆栈。
优点
- Looker 完全在浏览器中运行,因此不需要桌面安装,更适合内部和外部用户之间的协作和数据传输
- Looker 完全对数据库中的数据进行操作。这意味着你直接在你的完整数据集上操作,并得到你的数据库的所有马力,无论是像 Vertica,Redshift,Bigquery 这样的 MPP 像 Impala 或 Spark 这样的基于 Hadoop 的 SQL 设置;或者像 MySQL 或 Postgres 这样的标准 RDBMS
- 自动报告— Looker 允许您为每日/每周/每月报告安排电子邮件,或者在数据出现异常时发送警报。
- Looker 集成了 GitHub,因此您可以看到对建模层所做的每个更改,并无缝地结合多个开发人员的工作
缺点
- 当采用一种新语言(LookML)时,Looker 有一个陡峭的学习曲线&面向最终用户的模型-视图方法。你肯定需要有一个内部团队,专门负责设置它,并让其余的人参与进来。
- 被锁在站台里。LookML 接管了准备可视化表格的大部分工作。从 Looker 迁移到另一个可视化工具将需要额外的工作来迁移由 LookML 定义的所有内容。
- 虽然 Looker 提供了一个很大的自定义图表库,但是很难根据您的具体需求定制可视化效果。
(舞台上由人扮的)静态画面
Tableau 以其无与伦比的可视化信息能力而闻名。该应用程序的数据可视化质量优于 Tableau 软件竞争对手提供的产品。如果你想创建具有无缝交互性的复杂仪表盘,Tableau 绝对是必备工具。
要将 Tableau 与雪花联系起来,点击此处阅读更多内容。

定价
Tableau 定价相当复杂,根据您的使用案例和团队成员数量收费。此外,Tableau 还根据用户的角色收费,创建者每月 70 美元,探索者 35 美元,查看者 12 美元。由于这个数字取决于你的业务,如果你决定购买 Tableau,你真的应该提前计划,并为额外费用的激增做好准备。

图片来源:【https://www.tableau.com/pricing/individual
优点
- 强大的可视化功能:庞大的图表库和高度交互的仪表盘
- Tableau 的友好界面允许所有经验水平的数据分析师快速开始产生引人注目的和有用的分析和可视化。
- Tableau 可以轻松处理来自各种数据源的数百万行数据,包括电子表格和 SQL 数据库。这允许用户集成不同的数据源,否则这些数据源可能很难连接。
缺点
- 像 PowerBI 一样,Tableau 不能处理太大的数据集。它会变得非常慢。如果您从多个来源导入数据,并且数据非常庞大,有时会出现延迟崩溃。
- 缺乏商业智能能力。Tableau 缺乏成熟的商业智能工具所需的功能,例如大规模报告、构建数据表和静态布局。
- Tableau Desktop 缺少清理和准备要导入 Tableau Desktop 的数据的基本功能。这是它缺少的主要特性之一,你需要 Tableau 的额外支持来添加这些东西。
元数据库
Metabase 不像 Holistics、PowerBI 或 Tableau 那样受欢迎,它是一个开源工具,旨在为非技术用户提供大数据洞察和可视化。
Metabase 最适合希望部署基于云或内部版本的各种规模的企业。您可以将元数据库用于 KPI 监控、数据库管理、错误跟踪、记录过滤、调试和查询生成器。

图片来源:https://AWS . Amazon . com/blogs/startups/analytics-is-simple-than-you-think-with-metabase/
Metabase 确实支持连接到 Snowflake,但是您可能需要考虑一些事情。
定价
自由的
优点
- Metabase 是免费和开源的。Metabase 在 GPLv3 下获得许可,其源代码可以在 GitHub 上获得,您可以使用它在您自己的服务器上进行部署和维护。
- 元数据库易于安装。
- UI 简单友好,因此只需很少的培训就能有效地使用该工具。
缺点
- 元数据库仅适用于单个 SQL 数据源。如果您有来自多个来源的数据,那么您可能想要找到另一个工具,因为它不允许您连接表数据。
- 尽管有桌面版本,Metabase 有时会出现很多错误,并且渲染结果很慢。
- 与 Tableau 相反,Metabase 在定制图表外观方面有一些限制。
- 因为它是自托管的,公司必须自己处理管理问题和应用程序更新,这可能需要大量的时间和精力。
结论
上面提到的五个工具中的任何一个都可以很好地与雪花一起工作,但并不是所有的工具都适合你的公司。
有时候,最强大、功能最丰富的工具可能不是最佳选择,因为它的价格太高,或者学习曲线太陡。
因此,如果你是一个负责寻找这种工具的分析师,一个好的建议是让你的许多同事和最终用户在免费试用期间集中使用该产品。然后,您将了解每个工具的真正瓶颈,并做出最明智的选择。
如果您需要更多的指导来选择合适的工具,您可能想要查看分析设置指南的第 4 章,该章将详细讨论如何导航商业智能工具空间。
原载于 2020 年 9 月 23 日https://www . holistics . io。
数据科学家需要掌握的五大软件工程技能
成长为数据科学家所必需的技能

在过去几年中,数据科学在许多行业的出现吸引了数百万新人才来发展他们的计算机编程和机器学习技能,并获得了一份数据科学工作。由于数据科学项目大多是在企业软件项目的框架内完成的,软件工程技能对于数据科学家来说是强制性的。在本文中,我们将讨论有抱负的数据科学家所需的核心软件工程技能:
面向对象编程
计算机编程可能是数据科学工作中最关键的部分。编程技能是数据科学家将原始数据转化为有效的分析软件用户体验所需的关键能力之一。这就是为什么数据科学家需要精通不止一种编程语言。
在数据科学家所需的计算机编程技能中,面向对象编程(OOP)占有重要地位。虽然像 Python 和 Java 这样的编程语言使得遵守主要的 OOP 原则变得如此容易,但是数据科学家需要理解与 OOP 相关的概念(比如对象、属性、方法和继承)才能在现实世界的软件项目中工作。
全栈开发
在软件项目中,数据科学家通常需要在后端交付更多的机器学习模块。雇主越来越需要数据科学家将机器学习和分析代码投入生产。数据科学家通常需要使用 Python、R、Java 和 Scala 等编程语言。他们还需要将代码与前端集成,并在大数据生产环境中部署软件模块。因此,全栈开发是数据科学家需要的最关键的软件技能之一。
数据库&大数据
对于软件项目中的数据科学家来说,使用结构化和非结构化数据库技术的能力也是必要的。这些数据库技术可以包括像 PostgreSQL 这样的 SQL 数据库或者像 MongoDB 这样的 NoSQL 数据库。数据库在任何软件系统中的应用都是如此广泛,以至于数据科学项目几乎无处可逃。还有先进的大数据技术,如 Spark 和 Hive,支持与 Hadoop 集群配合工作。
云
云计算是 2020 年大数据和人工智能行业的一个重要趋势。使用像 AWS、微软 Azure 或谷歌云这样的云环境,可以快速而直接地部署人工智能驱动的软件模块,并将它们与运营软件集成。因此,数据科学家需要收购,以在云基础设施之上开发 AI 和大数据解决方案。
DevOps
对于数据科学家来说,学习 DevOps 是必不可少的。DevOps 可用于优化与数据管道、模型训练、模型测试、模型预测和模型部署相关的软件组件的部署。确保开发运维最佳实践是生产环境中功能性大数据管道的核心,无论是内部部署还是云环境。
DevOps 广泛使用的软件项目领域之一是持续集成/持续交付(CI/CD)。如果没有使用 CI/CD 管道所需的基本知识水平,数据科学家就无法有效地与软件团队协作。与此同时,精通云计算使数据科学家更容易学习和利用云基础架构中现有的 DevOps 功能,这有助于数据科学家更快地调整他们的技能,以适应在生产环境中工作的要求。
结论
时代在变,新技术每天都在涌现。软件项目中的工作过程是不断发展的。因此,数据科学家必须适应这些新技术,以便在企业软件项目中获得更好的性能。
来自本作者的相关故事:
具有企业意识的数据科学家的职业战略
towardsdatascience.com](/working-as-a-data-science-consultant-e626669ab72b) [## 全栈数据科学家还是大数据项目的超级英雄?
数据科学就业市场的新兴需求趋势
towardsdatascience.com](/full-stack-data-scientists-or-superheroes-of-the-big-data-projects-f245ec66bb6a) [## 初级数据科学家追求的 8 条职业道路
如果你最终实现了自己的目标,成为了一家你喜欢的公司的数据科学家。您已成功登机…
towardsdatascience.com](/8-career-paths-for-junior-data-scientists-to-pursue-3e6041950e4e)
关于作者:
Pouyan R. Fard 是 Fard Consulting 的首席执行官兼首席数据科学家。Pouyan 在数据科学、人工智能和营销分析方面拥有多年的公司咨询经验,从初创公司到全球公司。他曾与制药、汽车、航空、运输、金融、保险、人力资源和销售等行业的财富 500 强公司合作。
Pouyan 也在指导活跃在大数据行业的初创公司和人才。他的热情是通过职业培训培养下一代数据科学家,并帮助他们找到数据科学领域的顶级工作机会。
Pouyan 已经完成了关于消费者决策预测建模的博士研究工作,并对开发机器学习和人工智能领域的最先进解决方案保持兴趣。
每个数据分析师都需要知道的五大 SQL 分析函数
SQL 分析函数,让您的分析技能更上一层楼
分析功能是 BI/数据分析师中用于执行复杂数据分析的最受欢迎的工具之一。这些函数对多行执行计算,并返回多行。今天,我们将讨论我认为最有用的 5 个函数,以及大量的实际例子。

帕特里克·卡尔在 Unsplash 上拍摄的照片
对于外行来说,带有分析功能的查询的相对大小可能有点吓人。别担心,我们会保护你的。这些函数大多遵循一个基本语法:
analytic_function_name([argument_list])
OVER (
[PARTITION BY partition_expression,…]
[ORDER BY sort_expression, … [ASC|DESC]])
这个语法有三个部分,即函数、划分的和排序的。让我们简要介绍一下每种方法的作用:
analytic_function_name:功能名称——如RANK()、SUM()、FIRST()等partition_expression:创建分区或窗框所依据的列/表达式sort_expression:对分区中的行进行排序所依据的列/表达式
好了,到目前为止,我们已经介绍了基础知识。对于实际部分,我们将使用存储在 PostgreSQL 数据库中的订单表:

现在让我们从实际部分开始,好吗?
AVG()和求和()
我们都在我们的GROUP BY子句中使用了聚合函数,比如SUM、AVG、MIN、MAX和COUNT。但是当这些函数用于一个ORDER BY子句时,它们可以给出运行总和、平均值、总数等。
下面的例子将使它变得更加清晰— 我们要计算每个代理在第三季度的运行平均收入和总收入:
SELECT ord_date, agent_code, AVG(ord_amount) OVER (
PARTITION BY agent_code
ORDER BY ord_date
) running_agent_avg_revenue,
SUM (ord_amount) OVER (
PARTITION BY agent_code
ORDER BY ord_date
) running_agent_total_revenue
FROM orders
WHERE ord_date BETWEEN ‘2008–07–01’ AND ‘2008–09–30’;
结果如下:

厉害!这些功能很简单,不需要额外的解释。我们继续吧。
第一个值(),最后一个值(),第 n 个值()
FIRST_VALUE()是一个分析函数,从窗口框架的第一行返回指定列的值。如果你已经理解了上一句话,LAST_VALUE()不言自明。它从最后一行获取值。
PostgreSQL 为我们提供了另一个名为NTH_VALUE(column_name, n)的函数,它从第 n 行获取值。是不是很棒?不再有复杂的自连接。
让我们来回答以下问题— 客户第一次购买后多少天进行下一次购买?
SELECT cust_code, ord_date, ord_date — FIRST_VALUE(ord_date) OVER (
PARTITION BY cust_code
ORDER BY ord_date) next_order_gap
FROM orders
ORDER BY cust_code, next_order_gap;
结果如下:

这个函数在很多情况下都是有用的。此外,很高兴知道结果可以直接从数据库中获得,所以我们不必用 Python/R 手动进行这种计算。
让我们进行下一个。
超前()和滞后()
LEAD()函数,顾名思义,从下一行取出特定列的值,并将取出的值返回当前行。在 PostgreSQL 中,LEAD()采用两个参数:
column_name必须从中提取下一个值index相对于当前行的下一行。
LAG()正好相反。它从前面的行中获取值。
让我们来回答以下问题,让这个概念更清楚一点— 代理销售订单的最后最高金额是多少?
SELECT agent_code, ord_amount, LAG(ord_amount, 1) OVER (
PARTITION BY agent_code
ORDER BY ord_amount DESC
) last_highest_amount
FROM orders
ORDER BY agent_code, ord_amount DESC;
结果如下:

上面您可以看到last_highest_amount如何清楚地显示每个代理的数据——这就是为什么代理 A001 没有结果,而其他代理的第一个值为空。
秩()和密集秩()
RANK()和DENSE_RANK()是编号功能。它们根据分区和排序将整数值赋给一行。在查找表中的第 n 个最高/最低记录时,我不能过分强调这些函数的重要性。
DENSE_RANK()和RANK()的区别在于,前者得到连续的等级,而后者是跳过一个平局后的等级。例如,使用DENSE_RANK()的排名将类似于(1,2,2,3),而使用RANK()的排名将是(1,2,2,4)。希望你明白其中的区别。
无论如何,让我们在这些函数的帮助下回答以下问题— 每个月的第二高阶值是多少?
SELECT * FROM (
SELECT ord_num, ord_date, ord_amount, DENSE_RANK() OVER(
PARTITION BY DATE_PART(‘month’, ord_date)
ORDER BY ord_amount DESC) order_rank
FROM orders
) t
WHERE order_rank = 2
ORDER BY ord_date;
结果如下:

酷!让我们进行下一个。
DIST CUME()
CUME_DIST()函数用于计算给定分区内值的累积分布。它计算分区中小于或等于当前行的行的比例。当我们必须只获取结果的前 n%时,这非常有用。
让我们用它来计算八月和九月每个订单的收入百分比:
SELECT DATE_PART(‘Month’,ord_date), agent_code, ord_amount, CUME_DIST() OVER(
PARTITION BY DATE_PART(‘Month’,ord_date)
ORDER BY ord_amount
)
FROM orders
WHERE ord_date BETWEEN ‘2008–08–01’ AND ‘2008–09–30’;
结果如下:

这不是我日常使用的功能,但很高兴知道它的存在。
在你走之前
这就是我在数据库中执行分析时使用的 5 个最常见的分析函数。对我来说,这不像用 Python 和 Pandas 做分析那么常见,但我仍然发现这有时很有用——尤其是对于仅限于 SQL 的分析师。
希望这 5 款能很好的适合你,可以随意自己多研究研究。感谢阅读。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
每个数据科学家都必须知道的 5 大统计概念
统计和数据科学的基本支柱
任何数据科学家都可以从数据集收集信息,任何优秀的数据科学家都知道,收集有用和可靠的信息需要坚实的统计基础。没有它,就不可能进行高质量的数据科学。

在 Unsplash 上由 Tachina Lee 拍摄的照片
但是统计学是一个巨大的领域!我从哪里开始?
以下是每个数据科学家都应该知道的五大统计概念:描述统计、概率分布、降维、过采样和欠采样以及贝叶斯统计。
先说最简单的。
描述统计学
你正坐在一个数据集前。你如何从高层次上描述你所拥有的东西?描述性统计是答案。你可能听说过其中的一些:表示、中位数、众数、方差、标准差 …
这些将快速识别数据集的关键要素,并为您的方法提供信息,无论任务是什么。让我们来看看一些最常见的描述性统计数据。
平均
平均值(也称为“期望值”或“平均值”)是值的总和除以值的个数。以这个例子为例:

平均值计算如下:

中位数
按升序(或降序)列出您的值。中位数是将数据分成两半的点。如果有两个中间数,则中间数是这两个数的平均值。在我们的例子中:

中位数是 4.5。
方式
众数是数据集中出现频率最高的值。在我们的例子中,模式是 3。
差异
方差衡量数据集相对于平均值的分布。要计算方差,从每个值中减去平均值。平方每个差异。最后,计算这些结果的平均值。在我们的例子中:

标准偏差
标准差衡量总体分布,通过计算方差的平方根来计算。在我们的例子中:

其他描述性统计包括偏度、峰度和四分位数。
概率分布
概率分布是一个函数,它给出了一个实验的每一个可能的结果发生的概率。如果你在描绘一个钟形曲线,你就在正确的轨道上。它一目了然地显示了随机变量的值是如何分散的。随机变量及其分布可以是离散的,也可以是连续的。
分离的
约翰是一名棒球运动员,每次球投给他时,他都有 50%的概率击中球。让我们给约翰投三次球,看看他击球多少次。以下是所有可能结果的列表:

设 X 是我们的随机变量,约翰在三次投球实验中击中的次数。约翰得到 n 个命中的概率用 P(X= n)来表示。所以,X 可以是 0,1,2,或者 3。如果上述所有八种结果的可能性相等,则我们有:

用 f 代替 P,我们就得到概率函数了!让我们用图表表示它。

从图中,我们看到约翰更有可能获得 1 或 2 次点击,而不是 0 或 3 次,因为对于那些值 X ,图更高。常见的离散分布有伯努利、二项式和泊松。
连续的
连续的情况自然地从离散的情况中产生。我们的随机变量可以是棒球在空中的时间,而不是计算击中次数。我们可以使用像 3.45 秒或 6.98457 秒这样的值,而不仅仅是一秒、两秒或三秒。
我们在谈论一组无限多的可能性。连续变量的其他例子有高度、时间和温度。常见的连续分布有正态、指数、卡方。
降维
如果你有太多的输入变量或者你的数据在计算上很难处理,你可能会转向降维。这是将高维数据投影到低维空间中的过程,但是一定要注意不要丢失原始数据集的重要特征。
例如,假设您正试图确定哪些因素最能预测您最喜爱的篮球队今晚是否会赢得比赛。你可以收集数据,如他们的胜率,他们在打谁,他们在哪里打,他们的首发前锋是谁,他晚饭吃了什么,教练穿什么颜色的鞋。
你可能会怀疑这些特征中的某些与获胜的关联比其他的更大。降维可以让我们自信地丢弃对预测没有意义的信息,同时保留最有预测价值的特征。
主成分分析(PCA) 是一种流行的方法,它通过夸大称为主成分的新特征组合的方差来工作。这些新的组合是原始数据点在一个新空间中的投影——仍然是相同的维度——其中的变化被放大了。
总的想法是,在这些新组件中,变化最小的组件可以最安全地丢弃。删除单个组件会将原始维度减少一个,删除两个组件会将原始维度减少两个,依此类推。
如果你想了解更多,这里有一整篇文章专门介绍 PCA :
以及一些低维空间的可视化。
towardsdatascience.com](/principal-component-analysis-pca-from-scratch-in-python-7f3e2a540c51)
欠采样和过采样
观察值的集合称为“样本”,集合的收集方式称为“抽样”。在需要平等表示少数类和多数类的分类情况下,欠采样或过采样可能会有用。对多数类进行欠采样或对少数类进行过采样有助于平衡不平衡的数据集。
随机过采样(或者,随机欠采样)涉及随机选择和复制少数类中的观察值(或者随机选择和删除多数类中的观察值)。
这很容易实现,但您应该小心行事:过采样会对重复的观察值进行加权,如果它们不是无偏的,这可能会严重影响结果。类似地,欠采样有删除关键观察值的风险。
对少数类进行过采样的一种方法是合成少数过采样技术(SMOTE) 。这通过创建现有观测值的新组合来创建(合成的)少数类观测值。对于少数类中的每个观察值, SMOTE 计算其 k 最近邻;也就是说,它会找到与观察值最相似的 k 个少数类观察值。
将观察结果视为向量,它通过用 0 到 1 之间的随机数对任何一个 k 最近邻进行加权,并将其添加到原始向量中,从而创建随机线性组合。
对多数类进行欠采样的一种方法是使用聚类质心。理论上类似于 SMOTE ,它用矢量组的 k 最近邻簇的质心来代替矢量组。
贝叶斯统计
谈到统计推断,有两个主要的思想流派:频率主义统计和贝叶斯统计。频繁统计让我们做有意义的工作,但也有不足之处。当你有理由相信你的数据可能不能很好地代表你期望在未来观察到的情况时,贝叶斯统计做得很好。
这允许你将你自己的知识结合到你的计算中,而不是仅仅依赖于你的样本。它还允许你在新数据进来后更新你对未来的想法。
考虑一个例子:A 队和 B 队交手 10 次,A 队赢了其中的 9 次。如果这两个队今晚比赛,我问你你认为谁会赢,你可能会说 A 队!如果我也告诉你 B 队贿赂了今晚的裁判呢?嗯,那你可能会猜 B 队会赢。
贝叶斯统计允许你将这些额外的信息整合到你的计算中,而 frequentist 统计只关注 9/10 的胜率。
贝叶斯定理是关键:

给定 E 的 H 的条件概率,写成 P( H | E ),表示给定 E 也发生(或已经发生)的情况下 H 发生的概率。在我们的例子中, H 是 B 队会赢的假设, E 是我给你的关于 B 队贿赂裁判的证据。
P( H )是常客概率,10%。P( E | H )是我告诉你的贿赂是真的概率,假设 B 队赢了。(如果今晚 B 队赢了,你会相信我跟你说的话吗?)
最后,P( E )是 B 队事实上贿赂裁判的概率。我是一个值得信赖的信息来源吗?你可以看到这种方法包含了更多的信息,而不仅仅是两队之前 10 场比赛的结果。
今天就到这里。让我们在下一部分总结一下。
在你走之前
学习这 5 个概念不会让你成为统计学或数据科学的大师,但如果你不能理解数据科学项目的基本流程,这是一个很好的起点。
如果这听起来仍然像是高级的东西,我的建议是从小处着手。以下是我和许多人投票选出的最佳统计学入门书籍:
了解数据科学最重要的支柱
towardsdatascience.com](/the-single-best-introductory-statistics-book-for-data-science-a2601ea7c0be)
我们结束了——感谢阅读。
加入我的私人邮件列表,获得更多有用的见解。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
原载于 2020 年 8 月 29 日 https://betterdatascience.com**。
在数据科学项目中取得成功必须知道的 5 件事
办公时间
有抱负的数据科学家的简单指南

2019 年 3 月,我被 NYU 大学数据科学硕士项目录取。我非常兴奋,但不确定我需要知道什么,以及将会发生什么,因为我之前没有数据科学方面的经验。我在第一年之前花了一个夏天做准备,现在我已经是最后一年了,我有一些建议给其他参加类似项目的人。即使考虑到 2020 年前所未有的情况,像这样的一篇文章也可以更好地为我的第一年做准备。
如果你觉得你在同一个地方,按照以下 5 个步骤准备你的数据科学课程。这些建议中的一些对每个人来说可能不是新闻,但对缺乏经验的人来说可能是全新的。如果你被录取了,那意味着你具备成功的条件;你现在必须投入工作!
1.复习微积分、线性代数、概率和统计。
如果你想从这篇文章中学到什么,那就是这篇。如果你像我一样,你可能在所有这些科目上都得了高分,但是你已经很多年没有碰它们了,所以你需要温习一下。概率和统计是数据科学的核心驱动力,所以要非常熟悉贝叶斯和频率统计。对于线性代数,刷新矩阵变换、乘法和特征向量/值。复习微积分,复习导数,积分,对数规则,以及这些在多元空间中的应用。所有这三个主题都出现在你的基本机器学习课上。以下是一些有助于您复习的资源:
- 曼迪·顾的《数学与统计评论》
- 每个数据科学家都应该知道 Maurizio Sluijmers 的《线性代数基础》
- 斯坦福线性代数复习
- 基础微积分复习

照片由史蒂文·格林格拍摄
2.练习你的编码技能
Python 是数据科学中最受欢迎的语言之一,因为它的内置包可以让您轻松建模。不仅用 Python 编程是必不可少的,而且能够快速解决基本的编程问题将是非常有益的,尤其是在完成实习的技术面试时。练习这类问题的最好方法是在像和 LeetCode 这样的网站上。你可能想关注的一些常见问题包括:矩阵、数组和字典。解决这些问题的一种常见方法是先过滤出容易的问题,然后再过滤出中等难度的问题。我整个夏天都在这些网站上练习,直到上课,这让我在 NYU 大学的数据科学课程中获得了优势。
另一个有用的资源是 Eric Matthes 的 Python 速成班;这是一本信息丰富的 Python 编程入门指南!
3.完成数据科学项目
实习面试的一个巨大优势是之前的数据科学经验。如果你的简历上没有任何数据科学项目,你可以花时间在数据科学竞赛网站上做一个项目,或者自己想一个项目。有些项目网站是 Kaggle 和 CodaLab 。避免常见的项目,如泰坦尼克问题;雇主见过太多次了。如果你担心你的专业水平影响你完成项目的能力,从一个你能找到指导的简单项目开始(Github,Medium 等。).然后,把你学到的东西应用到新的领域。所有的资源都可以提供帮助;你需要利用它们。
你自己想出的项目应该是你充满热情的事情;想想你的兴趣(运动、健康、新闻等)。),并创建一个解决题目内某个问题的项目。你可能需要从现有的项目中寻找灵感,但这是值得的,因为大多数雇主更喜欢自己动手的项目。这个自制的项目将展示你的激情,你可以轻松地谈论它。一旦你的简历上有了一个项目,你在课堂上和面试中都有优势。第一学期结束后,你很可能会有小组项目,并将它们添加到你的简历中,但有了这个初始项目,你将有一个良好的开端。
4.仔细阅读最佳实践
NYU 政府推荐了乔尔·格鲁的《从零开始的 T2 数据科学》,这是我第一年最有用的资源。我不知道没有它我会做什么!第一次看的时候,你可能不太懂,但是你可以参考这本书,在课堂上获得对难懂的数据科学概念的简单解释。这本书还提供了对 Github 上代码的访问,这些代码展示了数据科学概念的基本实现。我推荐阅读这本书,并在互联网上寻找其他一些简单的数据科学介绍;让你的好奇心带着你。下面是 Grus 的书的链接和其他一些帮助你开始的链接。
- 数据科学从零开始:Python 的基本原理第二版Joel Grus 著
- Ignacio Montegu 的 数据科学新手绝对入门指南
5.建立你的关系网
我从本科商学院获得的最大收获是,你和你的人脉一样好。每天花一点时间建立你的人际网络。与你期望的职业道路或公司的专业人士联系;LinkedIn 让这变得非常容易。联系这些专业人士,请求一个联系的机会,甚至是一个简短的电话。询问他们是如何走到今天这一步的,让他们谈谈自己。然后求推荐;也许你需要一个课程的建议或者一个关注的特定主题(自然语言处理,大数据等)。)成为那家公司的数据科学家。每个数据科学部门都不一样,对数据科学家有不同的定义。如果你想在他们特定的公司工作,了解他们的工作需要什么是很好的。
与专业人士联系没有坏处,在一天结束时,你已经留下了一个好印象,并有了一个新的联系。在第一学期开始前建立你的职业关系网会让你在寻找实习机会的过程中领先一步,并帮助你决定选什么课。
除了与行业专业人士建立关系网,与你的同学建立关系网也很重要。请花些时间在 LinkedIn 上找到那些简历中有你的项目的人。这些学生将很快成为你的队友、学习伙伴和支持者;和他们联系很好,因为我相信他们会很开心。
重要的是要明白,你的同龄人是你的同学,会成为你的职业人脉。这些学生毕业后会找到工作,谁知道呢,也许这将是你梦想工作的一扇门!工作前景不应该是和你的同学联系的主要原因,但这是需要记住的。
现在,您已经为您的数据科学计划做好了准备!通过将你的时间分配给上面的提示,你将为你的数据科学专业做更好的准备,并且已经是比以前更好的数据科学家。请随意评论我错过的任何其他有用的资源或主题。祝你好运!
6 大查询可视化工具

来源:沉积照片
在本文中,我们考虑六种最流行的 BigQuery 可视化工具。
让我们从好消息开始——市场上有很多数据可视化服务。有免费的在线服务、付费的离线服务、移动设备服务、桌面服务、允许协作编辑报告的服务、支持不同数据源组合的服务——营销专家(和预算)想要的一切。但是哪种服务最适合您的任务呢?
如何借助 Data Studio 可视化数据

图片由作者提供
要开始在谷歌数据工作室工作,登录你的谷歌账户,去 https://datastudio.google.com。

图片由作者提供
- 在首页左上角或右下角选择开始一个新的报告(如上图所示)。
- 要将数据从 GBQ 加载到 Data Studio,单击创建数据源按钮,并从连接器列表中选择 Google–>big query。
注意:使用 GBQ 中的数据需要一个 Google 云平台帐户。

图片由作者提供
在选择数据源时,决定应该与报表连接的项目、数据集和表。然后编辑器窗口将打开,您可以:
- 更改数据存储的周期
- 允许访问第三方可视化工具
- 编辑报告中的字段

图片由作者提供
您可以在 Data Studio 帮助中心阅读更多关于在 Data Studio 中处理数据的可能性。
现在您可以可视化您的数据。一旦您为报告选择了一个表,报告编辑器的窗口就会打开。Data Studio 编辑器的界面非常易于理解和使用。

图片由作者提供
该编辑器支持 11 种类型的可视化,包括表格和报告、图表和图形、动态排名和地图。报告可视化还有单独的元素:
- 日期范围
- 过滤
- 数据管理
- 内置元素的 URL
要向报表添加一个可视化元素,只需从下拉菜单中选择它并将其拖到工作区即可。任何元素都可以使用右侧的设置菜单进行编辑。在此菜单中,有两个选项卡,可以在其中更改显示的数据及其显示样式。
在编辑器的最新更新中,有一个深刻的图表规范。例如,现在您可以从显示的国家转到城市。但最重要的是,最新的更新带来了在一个图表中组合不同数据源的机会。

图片由作者提供
谷歌不仅准备了简单解释其工作原理的信息图表,还准备了 T2 的 YouTube 视频。
Data Studio 的一个与众不同的特性是可以在报告上进行协作。您可以使用在 Google Drive 中看到的标准共享对话框来访问报告。简单易行!

图片由作者提供
如果需要,您可以从任何报告创建模板。为此,菜单中有一个复制报告的选项。若要基于此模板创建新报表,请选择新的数据源。

图片由作者提供
Google Data Studio 的优势:
- 自由的
- 直观的界面
- 报告的协作编辑
- 逐页格式化
- 在一个报告中使用多个数据源的机会
- 如果出现错误,可以使用版本历史回滚到报告的前一个版本
Google Data Studio 的缺点:
- 缺乏广泛的数据准备工具
- 移动设备没有报告预览
Google Data Studio 使用起来极其简单。它的免费功能、与 Google 产品的集成以及 150 多个连接器足以满足中小型企业的需求。
在 OWOX BI 插件的帮助下导入数据后,在 Google Sheets 中可视化数据
您是否希望在 Google Sheets 中以表格、图表和图形的形式可视化报告,并基于 Google BigQuery 中存储的数据这样做?
如果是这样,OWOX BI BigQuery Reports 插件就是您所需要的。它允许您快速加载数据,安排报告,并将结果发送到 GBQ 中的新表。
您可以从 Chrome 网上商店获取附加组件,或者直接在 Google Sheets 中选择附加组件→获取附加组件 …:

图片由作者提供
OWOX BI BigQuery Reports 插件的优势:
- 不需要登录 Google BigQuery。
- 您的表不会变慢,所有计算都将在 GBQ 存储中进行。
- 您只需打开附加组件并创建一个新报告。就这么简单:)

图片由作者提供
在 Google Sheets 加载了选择的表之后,您就可以开始可视化数据了。例如,您可以添加一个图表:

图片由作者提供
要选择图形和图表,请打开右上角的菜单并选择第一项。在右边,将会有一个带有元素设置的菜单。可以改变图表的类型或选择数据的范围。
注意:Sheets 显示了对于特定数据集应该使用什么类型的图表的建议。
借助标准的 Google access 设置,您可以轻松共享报告。
- Google Sheets 的优势:
- 对报告访问的简单控制
- 报告的协作编辑
- 与 Excel 兼容
Google Sheets 的缺点:
- 可视化的最小集合
- 不可能统一数据源
毫无疑问,Google Sheets 已经成为 Excel 的云替代品。这个工具是移动的,在任何有网络连接的地方都可以使用。如果您不需要复杂的数据可视化,那么这个免费选项绝对适合您。
对于合并来自不同数据源的数据的问题的解决方案,有 OWOX BI 。
使用就绪连接器的 BI 系统中的可视化
功率 BI
微软的这个工具遵循分而治之的逻辑。要使用 Power BI,您需要同时设置该产品的两个版本:
- 用于创建报告的 Power BI 桌面
- 用于监控和分析报告的 Power BI 服务。此外,处理数据的机会也很有限。
注意:Power BI 不支持 Linux 或 macOS。
内置的 Google BigQuery 连接器只能在 Power BI 的桌面版中找到。第二个选择是使用来自 Simba 驱动的独立连接器。

图片由作者提供
当使用连接器时,Power BI 将请求访问您的 Google BigQuery 帐户,经过身份验证后,用户就可以开始加载数据了。

图片由作者提供
加载数据时,可以在两个连接参数之间进行选择:
- 导入—传输数据的副本;导入 Power BI Desktop 将使用的所选表和列。
- DirectQuery —创建动态连接。不复制或导入数据;要求基本数据源。
使用 DirectQuery 的优势之一是能够处理最新数据,并且数据集没有 1 GB 的限制。
DirectQuery 的缺点:
- 在编辑器中请求过于复杂的查询时出现错误
- 所有表必须来自一个数据库
- 没有基于时间的操作逻辑(日期列的处理:日、月、年)
你可以在官方文档中找到更多关于如何使用 DirectQuery 的细节。
加载数据后,我们可以进入报告编辑器。

图片由作者提供
就像在 Google Data Studio 中一样,Power BI 中带有可视元素设置的菜单在右边。您可以从几种类型的可视化效果中进行选择:
- 简单图表
- 堆叠图表
- 聚类图表
- 地图、传感器和漏斗
- 表格和矩阵
- r 脚本和 Python 脚本
您可以基于其构建可视化效果的字段列表也位于右侧。如果您不确定使用哪个图表,只需指定您想要在报告中显示的字段,Power BI 将为您选择合适的数据可视化形式。
注意:如果您添加了太多的值,服务将报告一个错误,并提供更正。
使用 Power BI,您可以直接在请求编辑器界面中准备数据(您可以使用 Change Requests 按钮访问该界面)。您可以对数据执行以下操作:
- 干净的
- 重新命名
- 删除
- 合并
在 Power BI 中有两种关联请求的方法:
- merge(association)-如果需要向表中添加一列或多列,此选项非常有用
- 添加(adding)-如果需要将一行数据添加到表中,此选项非常有用

图片由作者提供
不幸的是,要共享您创建的报告,您不仅需要该产品的两个版本(正如我们提到的),还需要一个名为 Power BI Pro 的付费服务包。
Power BI 的优势:
- 数据准备的广泛机会
- 应用的步骤允许您取消请求编辑器中的步骤
- 报告预览。可以看到移动设备的报告改编。
电源 BI 的缺点:
- 免费增值模式:仅在专业版中可以直接共享报告
- 从 GBQ 缓慢加载数据
- 不适用于 Linux 或 macOS
Power BI 与微软产品的完全集成可能是您选择该服务的决定性因素。但是,如果你不喜欢 Excel,你可以在操作的界面和执行上发现一些困难。此外,Power BI 在加载大量数据方面表现不佳。
(舞台上由人扮的)静态画面
要开始处理 Tableau 中的数据,请从服务器菜单中选择 Google BigQuery 连接器。

图片由作者提供
在打开的窗口中,选择项目、数据集和包含要在报告中可视化的数据的表格。

图片由作者提供
在下级菜单中,转到报告的第一页(表 1)。这将带您到报告编辑器。

图片由作者提供
右侧菜单中可用的元素将取决于左侧所选参数和指标的数量。除了标准类型的可视化,您还可以找到:
- 树形地图
- 散点图和包装气泡图
- 甘特图表
注意:如果您将光标放在一个元素上,Tableau 将显示它需要哪些参数和度量。
该服务还允许从菜单向报告添加一个数据源。因此,将来自不同数据库的数据结合起来是可能的。
报告可以导出(作为 PowerPoint 或 PDF)并在 Tableau Online 或 Tableau Server 中共享。
Tableau 的优势:
- 直接从菜单访问视频记录和详细说明
- 合并数据源的能力
- 许多报告的机会:可以在报告页面的基础上创建仪表板。
Tableau 的缺点:
- 使用困难的数据模型时的常见问题
Tableau 因其简单的界面和活跃的用户社区而有别于其他服务。另一个好处是支持 R 语言;但是,在使用此服务之前,需要准备好数据。
QlikView
与 Power BI 一样,在 QlikView 的云版本中,没有与 Google BigQuery 的直接连接器。
要将桌面版 QlikView 连接到 GBQ,您需要设置 ODBC 连接器包。
注意:GBQ 的访问权限仅提供给拥有 QlikView 付费许可证的用户。
当您第一次开始使用报表时,您只能选择一种可视化类型:

图片由作者提供
然后,您需要定义哪些字段将出现在这个图形或图表中。之后,可以添加第二个图形或图表,也可以继续报告。

图片由作者提供
要获得更多可视化效果,您可以从“工具”菜单中选择:
- 快速图表向导
- 时间图向导
- 统计图表向导
- 方框图向导
创建的报告可以作为附件通过电子邮件发送,或者加载到 QlikView server 上的存储库中。只有经过身份验证的用户才能访问这些报告。
QlikView 的优势:
- 互动培训和视频记录
- 内置的 ETL 函数(提取、转换、加载)
- 快速数据加载和处理
QlikView 的缺点:
- 如果没有额外的连接器,无法从 GBQ 连接数据
- 可视化的最小项目数
QlikView 是一种企业工具,其制造商也提供 QlikView sense,这是为个人用户设计的。QlikView 凭借其快速的数据处理和协作开发的可能性脱颖而出。但要成功使用,用户要有技术培训。
OWOX BI 智能数据
这个创建报表的工具是专门为不懂 SQL 的人开发的。智能数据处理来自 Google BigQuery 的数据;因此,可以在选择项目和数据集之后立即创建可视化。

图片由作者提供
使用智能数据构建报表有三种方式:
- 从常用模板库中选择一种报告类型
- 在报表生成器中构建报表,选择参数和指标
- 在搜索栏中直接请求服务

图片由作者提供
在模板库中,报告分为多个主题块。例如,关于归因的报告、关于 CRM 数据库的报告、关于 ROPO 效应的报告。
可以通过多种方式使用报告:
- 导出到 Google 工作表
- 另存为 CSV 文件
- 将 SQL 请求复制到剪贴板
还提供了轻松导出到 Google Data Studio 的功能。为此,菜单中有一个单独的按钮。

图片由作者提供
OWOX BI 智能数据的优势:
- 直接连接到 Google BigQuery 中的数据
- 符合 PCI DSS、ISO 27001 和 SOC 2.3 标准的高级数据保护
- 详细 OWOX 帮助中心
OWOX BI 智能数据的缺点:
- 用于创建报告的有限组合集
- 可视化的最小项目数
OWOX BI 的关键特性是为非技术专家构建的友好界面。构建报告不需要 SQL 知识。这个过程相当简单:输入一个请求,系统本身就会选择合适的报告。
关键要点
如何决定哪种可视化服务最适合您的报告?以下问题将帮助您选择最佳选项:
- 你打算借助报告解决哪些问题?
- 你的哪些员工会使用这项服务?
- 您希望收到多复杂的报告和图表?
- 你对可视化服务的技术要求是什么?
2020 年必读的 6 本数据科学书籍
数据科学家需要书籍就像剑需要磨刀石一样!!
前几年,公众对数据科学的热情泛滥。曾经是一个真正深奥的领域,现在成了新闻、政府问题和国际法以及我们社交媒体的常见话题。
在每个行业中,数据熟练程度正在变成一项特别需要的技能,消费者不断地将数据点输入到巨大的商业智能框架中。

无论您只是需要在数据热潮中继续接受教育,还是希望开始您的数据科学或数据熟练之旅,本文都包括一个书籍列表,可以帮助新手探索数据科学的世界。
因为你想成为一名数据科学家!
虽然许多人希望开始学习数据科学,但认识到从哪里开始是一个挑战。现在,我将带您浏览一些有帮助的最佳数据科学书籍,您可以阅读这些书籍来掌握数据科学。
排名前六的数据科学书籍:
1。《数据科学手册:来自 25 位了不起的数据科学家的建议和见解》,作者:Carl Shan、William Chen、Henry Wang 和 Max Song:
通常,最理想的获取数据的方法是直接从该领域的个人那里获取,那么与 25 位企业顶级专家交谈的更好途径是什么呢?“《数据科学手册”采访了顶级驱动数据科学家,从美国前首席数据官到知名组织的团队领导,再到正在开发自己项目的新兴数据科学家,从而提供对该行业的独特视角。

面试的决定将引导新人通过业务,提供数据生活建议、学习错误、职业发展提示和在数据科学领域占上风的技术。这本书没有深入研究该主题的技术部分,也没有试图成为一个全面的指南。或者,它提供了大量实用的建议和知识。
2.《数据科学的艺术》,作者 Roger D. Peng 和 Elizabeth Matsui :
"数据科学的艺术"投身于在任何现成的数据湖中探索和发现的行为。它以分析数据和筛选数据来找出隐藏的故事为中心。作者利用他们自己的遭遇,通过分析数据科学来指导这两位初学者和管理者。

作者参与监督数据项目本身,就像在专家环境中管理分析师一样。他们讲述了自己的经验,即什么会可靠地产生成功的结果,什么陷阱会使数据项目注定失败。
3。Python 机器学习简介:数据科学家指南——作者 Andreas Muller :
对于期待将 Python 真正应用于机器学习的 Python 初学者来说,这本书将会给他们所需要的一切。这本书的中心是向客户介绍 Python,以帮助他们构建自己的机器学习解决方案。

这本书将向您展示主流的机器学习算法,并将向您展示 scikit-learn 库的基础知识,该库在 Python 中非常有名。它不仅会教你 Python,还会教你机器学习的基础知识,目标是让你成为一名熟练的数据科学家。您将了解如何评估您的模型,并为您提供建议,让您成为一名数据科学家。
4。Python 速成班——作者 Eric Matthes :
这本书是为完全的 Python 初学者准备的。虽然 Python 比较容易学,但是很难掌握。这本书是为那些需要快速学习 Python 以便进入数据科学的人准备的。

这本书分为两个部分:第一部分通过不同的概念向你展示 Python,比如条件、循环、字典、列表等等。第二部分围绕利用 Python 构建不同的项目。
通过这本书,你不仅可以学习 Python,还可以了解如何用 Python 解决问题。同样,您还会发现在分析、可视化和 web 应用程序开发中使用的不同 Python 库。总的来说,这本书非常适合那些希望一次性学习 Python,并在真实环境中实现其知识的人。
5.数据科学家实用统计学—作者 Peter Bruce:
这本书是为没有受过适当统计培训的有抱负的数据科学家而写的。这本书消除了过量的统计数据,只给数据科学家重要的想法。

此外,这本书是为那些已经考虑了统计学的基本信息的个人。此外,这本书给出了利用 R 的统计实例。这将允许你练习必要的概念,提高你的 R 技能。这本书的结构是根据数据科学的实际应用。
6。数据科学的 r——Hadley Wickham 和 Garrett Grolemund :
这本书利用 R 来展示数据科学。它指导您成为数据科学家所需的所有技能,如数据清理、可视化、辩论,并进一步向您介绍 RStudio。它让你熟悉 R 的重要包,比如在数据科学中有用的 tidy verse。

这本书是给读过过去的书《用 R 动手编程》的个人看的。这本书是专门为数据科学家在日常工作中必须完成的任务而设计的。
它将帮助你通过 R 的软件包利用智力资源来争论和设想数据。与《用 R 编程实践》一书非常相似,这本书可以在网上公开获得。
概要:
虽然数据科学是一个非常广阔的领域。一个人必须认识到正确的资源,才能精通这个领域的广度和深度。虽然我们需要统计学作为解决数据科学问题的基本公式,但不同的编程语言和工具是基本的解决方案。
最后,我得出结论,要掌握数据科学,必须阅读上述书籍,以掌握统计学和编程。
探索你必须知道的 8 个惊人的数据科学工具!!
可视化的 6 大 Python 库:使用哪一个?
对使用哪种可视化工具感到困惑?我为你分析了每个图书馆的利弊

本指南更新了一些更深入的示例。你可以在这里找到最新版本的博客。
动机
如果您从 Python 可视化开始,您可能会被大量的库和示例所淹没:
- Matplotlib
- 海生的
- Plotly
- 散景
- 阿尔泰尔
- 薄层
如果你有一个数据帧等待可视化,你应该选择哪一个?在特定情况下,有些库可能比其他库更好。本文将展示每种方法的优缺点。到本文结束时,您应该能够区分每个库的不同特性,并且能够更容易地选择最佳库。
为此,我们将使用一个样本数据集,并使用每个库来探索它,重点关注几个特定的属性:
交互性
你希望你的可视化是交互式的吗?
一些库,如 Matplotlib,将可视化呈现为图像;因此,它们有利于解释概念(在论文、幻灯片或演示中)。
另一方面,像 Altair、Bokeh 和 Plotly 这样的库允许你创建交互式图形,用户可以自己深入其中并进行探索
语法和灵活性
每个库的语法有何不同?像 Matplotlib 这样的低级库可以让你做任何你想做的事情——但是代价是更复杂的 API。一些库比如 Altair 是非常声明性的,这使得映射到你的数据更加容易。
数据类型和可视化
您是在使用一个专门的用例,比如一个有大量数据的地理图,还是使用一个只有某个库支持的图类型?
数据
为了便于比较,我将在本文中使用我从 Github 收集的真实数据:
[## 我收集了超过 1k 的顶级机器学习 Github 配置文件,这就是我的发现
从 Github 上的顶级机器学习档案中获得见解
towardsdatascience.com](/i-scraped-more-than-1k-top-machine-learning-github-profiles-and-this-is-what-i-found-1ab4fb0c0474) 
我将使用 Datapane 嵌入来自每个库的可视化,data pane 是一个用于发布和共享 Python 报告的 Python 框架和 API。如果你想看到更多真实世界的例子,请查看数据面板图库中用户贡献的报告。
要阅读本文,您可以从这里下载 csv 文件,或者从 Datapane Blob 获取直接数据。
import datapane as dpdp.Blob.get(name='github_data', owner='khuyentran1401').download_df()
如果你想使用 Blob,记得事先用你的令牌登录到 Datapane 。这应该不到 1 分钟
Matplotlib
Matplotlib 可能是最常见的可视化数据的 Python 库。每个对数据科学感兴趣的人可能都至少使用过一次 Matplotlib。
赞成的意见
- 便于查看数据的属性
分析数据时,快速浏览一下分布可能是理想的。
例如,如果我想快速查看拥有最多追随者的前 100 名用户的分布,使用 Matplotlib 通常就足够了。
尽管 Matplotlib 的 x 轴看起来不太好,但通过查看图表,我们可以更好地了解数据的分布情况。
2。可以策划任何事情
Matplotlib 是非常通用的,这意味着它可以绘制任何类型的图形。Matplotlib 的网站在图库中包含了非常全面的文档和各种图形,这让你很容易找到你能想到的任何疯狂情节的教程。
像这样的一些文字:
骗局
Matplotlib 可以绘制任何东西,但绘制非基本的图形或调整图形以使其看起来漂亮可能会很复杂。
即使该图足以可视化分布,但如果您想向他人展示您的数据,您将需要固定 x 轴、y 轴,这需要很大的努力。这是因为 Matplotlib 有一个极其低级的接口。
要点:Matplotlib 可以绘制任何东西,但是复杂的绘图可能比其他库需要更多的代码
海生的
Seaborn 是基于 Matplotlib 的 Python 数据可视化库。它在库上提供了一个更高级的包装器,这使得它更容易使用。
赞成的意见
- 少码
为类似的情节提供了更高层次的接口。换句话说,seaborn 通常提供与 matplotlib 类似的绘图,但代码更少,设计更好。
我们使用与之前相同的数据来绘制类似的热图。
我们不用设置 x 和 y 标签就能得到更好的热图!
2.使常用地块更漂亮
许多人选择 seaborn 来绘制流行的图,如条形图、箱线图、计数图、直方图等,不仅因为它们可以用更少的代码创建,而且它们看起来更漂亮。正如我们在上面的例子中看到的,颜色看起来也比 Matplotlib 的默认颜色要好。
骗局
Seaborn 更受限制,没有 matplotlib 那样广泛的集合
外卖:Seaborn 是 Matplotlib 的更高级版本。尽管它没有 Matplotlib 那样广泛的集合,但 seaborn 用更少的代码就使流行的图,如条形图、箱线图、热图等看起来很漂亮。
Plotly
Plotly 的 Python 图形库使得创建交互式的、出版物质量的图形变得容易。它还可以创建类似 Matplotlib 和 seaborn 的图表,如折线图、散点图、面积图、条形图等。
赞成的意见
- 喜欢 R
如果您是 R 中的 plots 的粉丝,并且在切换到 Python 时错过了它的特性,Plotly 使用 Python 为您提供了同样质量的 plots!
我最喜欢的是Plotly Express,因为它让从一行 Python 代码创建伟大的情节变得非常容易,甚至更快。
2.轻松创建互动情节
Plotly 还可以轻松创建交互式剧情。互动图不仅漂亮,而且让观众更容易仔细观察每个数据点。
还记得我们之前用 matplotlib 做的柱状图吗?让我们看看 Plotly 的结果如何
用差不多相同的代码行,我们生成了一个交互图,我们可以将鼠标悬停在每个栏上,以查看该栏代表的用户和关注者数量。这意味着你的可视化的消费者可以自己探索它。
3。复杂的情节变得简单
使用 Plotly,一些通常很难创建的情节可以轻松创建。
例如,如果我们想要创建一个地图来可视化 Github 用户的位置,我们可以找到他们的纬度和经度,如这里的所示,然后使用这些数据在地图上定位用户的位置,就像这样
只需几行代码,所有用户的位置就可以漂亮地呈现在地图上。泡泡的颜色代表叉子的数量,大小代表星星的总数
要点:Plotly 非常适合用几行代码创建交互式和出版物质量的图形。
阿尔泰尔
Altair 是一个基于 vega-lite 的 Python 的声明式统计可视化库,这使得它非常适合需要大量统计转换的绘图。
赞成的意见
1。简单的可视化语法
用于创建可视化的语法很容易理解。它只需要提到数据列到编码通道之间的链接,其余的绘图是自动处理的。这听起来很抽象,但当你处理数据时,这是一件大事,它使信息可视化变得非常快速和直观。
例如,使用上面的泰坦尼克号数据,我们想计算每个班级的人数,我们只需要在 y 轴上使用count()
2。易于转换数据
Altair 还使得在创建图表时转换数据变得非常容易
例如,如果我们想找到泰坦尼克号中每种性别的平均年龄,而不是像 Plotly 那样提前进行转换,我们可以在代码中执行转换来创建图表。
这里的逻辑是用transform_aggregate()取每个性别(groupby=[‘sex’] )的年龄(mean(age))的平均值,并将平均值保存到变量mean_age)。我们把这个变量作为 y 轴。
我们还可以使用:N确保该类是一个名义数据(没有任何顺序的分类数据),或者使用 :Q确保 mean_age 是一个定量数据(数值的度量,如数字)
查看数据转换的完整列表这里
3。轻松链接情节
Altair 还允许您在图之间进行一些令人印象深刻的链接,例如使用区间选择来过滤附加直方图的内容。
例如,如果我们想要可视化在我们选择年龄和费用之间的点图表的时间间隔内每个班级的人数,我们可以这样做。
当我们拖动鼠标选择散点图中的间隔时,我们可以在下面的条形图中看到变化。当与前面的变换和计算结合使用时,这意味着您可以创建一些非常交互式的绘图,进行即时计算——甚至不需要运行 Python 服务器!
骗局
除非指定自定义样式,否则条形图等简单图表看起来不会像 seaborn 或 Plotly 那样有样式。Altair 也不推荐超过 5000 个样本的数据集,而是建议您在可视化之前聚集数据。
要点:Altair 是显示统计数据的复杂图表的理想选择。Altair 无法处理 5000 个样本以上的数据,一些简单的图表看起来不如 Plotly 或 Seaborn 的风格。
散景
Bokeh 是一个灵活的交互式可视化库,面向 web 浏览器进行表示。
赞成的意见
- Matplotlib 的交互版本
如果我们在上面的交互式可视化库中排名,Bokeh 可能会在与 Matplotlib 的相似性方面排名第一。
Matplotlib 可以创建任何图,因为它是一个低级的可视化库。散景既可以作为高级界面,也可以作为低级界面;因此,它可以创建许多 Matplotlib 创建的复杂绘图,但代码行更少,分辨率更高。
比如 Matplotlib 的圆形图
也可以使用散景以更好的分辨率和更多的实用性创建
2。图之间的链接
散景也使情节之间的联系变得非常容易。在一个图中应用的改变将被应用到具有相似变量的另一个图中。
例如,如果我们并排创建 3 个图形,并希望观察它们的关系,我们可以使用链接刷

ColumnDataSource使数据在各图之间共享。因此,当我们将变化应用于一个图时,其他图也相应地变化。
骗局
因为 Bokeh 是一个具有中级接口的库,它通常比 Matplotlib 需要更少的代码,但需要更多的代码来产生与 Seaborn、Altair 或 Plotly 相同的绘图。
例如,要使用 titanic 数据创建相同的计数图,除了需要预先转换数据之外,如果我们希望图形看起来更好,我们还需要设置条形的宽度和颜色
如果我们不增加条形图的宽度,该图将如下所示
因此,我们需要手动调整尺寸,使情节更好
如果你想用更少的代码创建一个漂亮的条形图,这可能是与其他库相比散景的缺点
导读:Bokeh 是唯一一个界面从低到高的库,可以轻松制作出既通用又优雅的图形。然而,这样做的代价是,散景通常需要更多的代码来创建与其他库质量相似的图。
薄层
leave让数据在交互式传单地图上可视化变得容易。该库有许多来自 OpenStreetMap、Mapbox 和 Stamen 的内置 tilesets
赞成的意见
- 用标记轻松创建地图
尽管 Plotly、Altair 和 Bokeh 也使我们能够创建地图,但 Folium 使用开放的街道地图,用最少的代码给你一种更接近谷歌地图的感觉
还记得我们如何使用 Plotly 创建地图来可视化 Github 用户的位置吗?我们可以用叶子让地图看起来更好
最初的位置在纽约布鲁克林。缩小以查看地图上的其他位置。通过几行代码,我们创建了一个显示用户位置的真实地图。
2。添加潜在位置
如果我们想添加其他用户的潜在位置,follow 允许用户添加标记,这很容易做到
在地图上单击以查看在您单击的地方生成的新位置。
3。插件
Folium 有很多插件可以用于你的地图——包括一个 Altair 插件。如果我们想看全球 Github 用户总星数的热图来识别哪里有总星数高的顶级 Github 用户数高怎么办?that 插件中的热图允许您这样做。
缩小以查看热图的完整图片。
外卖:Folium 允许你用几行代码创建一个交互式地图。它给你一种接近谷歌地图的体验。
结论
恭喜你!你刚刚学习了六种不同的可视化工具。我希望这篇文章能让你了解每个库做什么以及什么时候使用什么。掌握每个库的关键特性将使您在需要时更快地找到合适的库。
如果您仍然不知道使用哪个库来存储您的数据,请选择一个您认为足够好的库。如果代码太长或者图形没有你想象的那么好,就用另一个库试试吧!
在这个 Github repo 中,您可以随意使用本文的代码。
我喜欢写一些基本的数据科学概念,并尝试不同的算法和数据科学工具。你可以在 LinkedIn 和 T2 Twitter 上与我联系。
星这个回购如果你想检查我写的所有文章的代码。在 Medium 上关注我,了解我的最新数据科学文章,例如:
在 5 行简单的 Python 代码中利用您的数据分析
towardsdatascience.com](/how-to-create-interactive-and-elegant-plot-with-altair-8dd87a890f2a) [## 我收集了超过 1k 的顶级机器学习 Github 配置文件,这就是我的发现
从 Github 上的顶级机器学习档案中获得见解
towardsdatascience.com](/i-scraped-more-than-1k-top-machine-learning-github-profiles-and-this-is-what-i-found-1ab4fb0c0474) [## 如何在数据科学项目中利用 Visual Studio 代码
直到发现一种新的有效方法,我们才意识到我们是多么低效
towardsdatascience.com](/how-to-leverage-visual-studio-code-for-your-data-science-projects-7078b70a72f0) [## 如何在一行代码中跨不同环境共享 Python 对象
为建立与他人分享你的发现的环境而感到沮丧?以下是如何让它变得更简单
towardsdatascience.com](/how-to-share-your-python-objects-across-different-environments-in-one-line-of-code-f30a25e5f50e) [## 如何通过将自己置于合适的环境中来加速您的数据科学职业生涯
我感到增长数据科学技能停滞不前,直到我有了一个飞跃
towardsdatascience.com](/how-to-accelerate-your-data-science-career-by-putting-yourself-in-the-right-environment-8316f42a476c)
常春藤大学的 7 大免费人工智能课程
顶级人工智能课程精选列表。向该领域最优秀的人学习——有选择地分配你的时间、精力和注意力。

德尔菲·德拉鲁阿在 Unsplash 上拍摄的照片
这些天,感觉每周都有新的人工智能课程。面对如此庞大的工作量,我们需要对我们的时间、精力和重点进行真正的选择。一个简单而有效的策略是参加该领域最优秀人才的课程。
有效地利用你的时间,参加该领域最优秀人才的课程。
在我的数据科学家同事的帮助下,我们整理了一份来自常春藤联盟大学的 7 门顶级人工智能课程的列表。该课程必须是免费的,才能被列入清单。
我没有参加清单上的所有课程,但我得到了同事们的高度赞扬。在我的课程清单上,下一个我希望参加的是强化学习课程。
常春藤联盟是什么?
常春藤联盟由八所私立大学组成:哈佛、耶鲁、普林斯顿、布朗、达特茅斯、哥伦比亚、康奈尔和宾夕法尼亚大学。
虽然斯坦福大学和麻省理工学院显然是名校,但它们不是常春藤联盟学校,因为它们不是常春藤联盟的成员。
这里有几个你可能会感兴趣的链接:
- [Labeling and Data Engineering for Conversational AI and Analytics](https://www.humanfirst.ai/)- [Data Science for Business Leaders](https://imp.i115008.net/c/2402645/880006/11298) [Course]- [Intro to Machine Learning with PyTorch](https://imp.i115008.net/c/2402645/788201/11298) [Course]- [Become a Growth Product Manager](https://imp.i115008.net/c/2402645/803127/11298) [Course]- [Deep Learning (Adaptive Computation and ML series)](https://amzn.to/3ncTG7D) [Ebook]- [Free skill tests for Data Scientists & Machine Learning Engineers](https://aigents.co/skills)
上面的一些链接是附属链接,如果你通过它们购买,我会赚取佣金。请记住,我链接课程是因为它们的质量,而不是因为我从你的购买中获得的佣金。
如果你错过了我关于这个主题的另外两篇文章:
[## 2020 年每个数据科学家都应该阅读的 7 本免费电子书
学习一项新技能不一定要很贵。2020 年你只需要时间和付出就能学会一项新技能。
towardsdatascience.com](/7-free-ebooks-every-data-scientist-should-read-in-2020-32508ad704b7) [## 2020 年每个数据科学家都应该阅读的 7 本免费编程书籍
这些书将向你展示如何培养许多数据科学家缺乏的技能。都是免费的!
towardsdatascience.com](/7-free-programming-books-every-data-scientist-should-read-in-2020-608c00d7cf3c)
1.强化学习
大学:佐治亚理工学院
导师:查尔斯·伊斯贝尔教授

蒂姆·莫斯霍尔德在 Unsplash 上拍摄的照片
免费课程由佐治亚理工学院提供,编号为 CS 8803。关于本课程的免费课程,如果你需要,你应该选修本课程
www.udacity.com](https://www.udacity.com/course/reinforcement-learning--ud600)
强化学习是机器学习中最热门的话题之一。如果你想从理论的角度学习这门课程,你应该选这门课。
在本课程中,你将从计算机科学的角度,通过结合经典论文和最近的工作来探索自动化决策。你将研究有效的算法,如果它们存在的话,用于单代理和多代理计划,以及从经验中学习接近最优决策的方法。在课程结束时,你将复制一篇发表在《强化学习》上的论文的结果。
2.计算机视觉
大学:麻省理工学院导师:贝特霍尔德·霍恩教授

机器视觉对生成环境的符号描述的过程提供了深入的介绍…
ocw.mit.edu](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-801-machine-vision-fall-2004/)
这门麻省理工学院的课程提供了从图像生成环境符号描述的过程的深入介绍。
在讲座中,你将学习图像形成的物理学,运动视觉,以及从阴影中恢复形状。二值图像处理和滤波作为预处理步骤提出。
进一步的主题包括摄影测量,物体表示对齐,模拟超大规模集成电路和计算视觉。讨论了机器人和智能机器交互的应用。
3.机器学习的数学
大学:麻省理工学院
导师:菲利普·里戈莱特教授

照片由this engineering RAEng在 Unsplash
广义而言,机器学习是指自动识别数据中的模式。因此,这是一个…
ocw.mit.edu](https://ocw.mit.edu/courses/mathematics/18-657-mathematics-of-machine-learning-fall-2015/)
广义而言,机器学习是指自动识别数据中的模式。因此,它是新的统计和算法发展的沃土。
本课程的目的是为这些发展提供一个数学上严谨的介绍,重点是方法及其分析。

机器学习数学中涵盖的主题
4.数据科学:概率
大学:哈佛大学导师:拉斐尔·伊里扎里教授

杰斯温·托马斯在 Unsplash 上的照片
在这门课程中,我们的数据科学专业证书课程的一部分,你将学到有价值的概念…
www.edx.org](https://www.edx.org/course/data-science-probability)
在这门课程中,你将学到概率论中有价值的概念。这门课程的动机是围绕 2007-2008 年金融危机的环境。
导致这场金融危机的部分原因是金融机构出售的一些证券的风险被低估了。为了开始理解这个非常复杂的事件,我们需要理解概率的基础。
本课程将介绍一些重要的概念,如随机变量、独立性、蒙特卡罗模拟、期望值、标准误差和中心极限定理。这些统计概念是对数据进行统计测试和理解您正在分析的数据是否可能由于实验方法或偶然事件而出现的基础。
概率论是统计推断的数学基础,统计推断对于分析受偶然性影响的数据是必不可少的,因此对于数据科学家来说是必不可少的。
5.人工智能
大学:ColumbiaX
导师:Ansaf Salleb-Aouissi 博士

自动驾驶汽车、人脸识别、网络搜索、工业机器人、导弹制导、肿瘤检测有什么…
www.edx.org](https://www.edx.org/course/artificial-intelligence-ai)
自动驾驶汽车、人脸识别、网页搜索、工业机器人、导弹制导、肿瘤检测有什么共同点?
它们都是复杂的现实世界问题,正在通过智能(AI)的应用来解决。
本课程将提供对构建智能计算机系统的基本技术的广泛理解,以及对人工智能如何应用于问题的理解。
你将学习人工智能的历史、智能代理、状态空间问题表示、无信息和启发式搜索、玩游戏、逻辑代理和约束满足问题。
您将通过构建一个基本的搜索代理获得实践经验。对抗性搜索将通过创建一个游戏来探索,机器学习的介绍包括线性回归的工作。
6.机器学习
大学:哥伦比亚
导师:约翰·w·佩斯利博士

照片由 Unsplash 上的 h heyerlein 拍摄
机器学习是当今数据分析领域最激动人心的职业的基础。你会学到模型和方法…
www.edx.org](https://www.edx.org/course/machine-learning)
机器学习是当今数据分析领域最激动人心的职业的基础。您将学习模型和方法,并将它们应用到现实世界中,从识别趋势新闻话题到构建推荐引擎、给运动队排名和绘制电影僵尸的路径。
涵盖的主要观点包括:
- 概率与非概率建模
- 监督与非监督学习
主题包括分类和回归、聚类方法、序列模型、矩阵分解、主题建模和模型选择。
方法包括线性和逻辑回归、支持向量机、树分类器、boosting、最大似然和 MAP 推断、EM 算法、隐马尔可夫模型、卡尔曼滤波器、k 均值、高斯混合模型等。
7.算法,1
大学:普林斯顿
导师:凯文·韦恩,博士

由普林斯顿大学提供。本课程涵盖了每个认真的程序员需要的基本信息…
www.coursera.org](https://www.coursera.org/learn/algorithms-part1)
如果你想提高你的编程技能,这个课程是为你准备的。虽然它与机器学习没有严格的联系,但是你将会建立强大的计算机科学基础。
本课程涵盖了每个严肃的程序员需要了解的关于算法和数据结构的基本信息,重点是 Java 实现的应用和科学性能分析。
第一部分介绍了基本的数据结构、排序和搜索算法。第二部分着重于图形和字符串处理算法。
很少值得一提
机器学习教程 a
大学:斯坦福大学
导师:吴恩达教授
机器学习是让计算机在没有明确编程的情况下行动的科学。在过去的十年里…
www.coursera.org](https://www.coursera.org/learn/machine-learning)
吴恩达的 Coursera 课程是我最喜欢的机器学习课程。这是我在这个领域的第一门课。通过听本课程,您将为机器学习打下坚实的基础
本课程提供了机器学习、数据挖掘和统计模式识别的广泛介绍。该课程还将借鉴大量的案例研究和应用,以便您也可以学习如何将学习算法应用于构建智能机器人、文本理解、计算机视觉和其他领域。
扑克理论和实践简介
大学: J ohns Hopkins
导师:阿维·鲁宾教授

迪伦·克利夫顿在 Unsplash 上的照片
这个课程旨在让学生从对扑克一无所知的新手到高于平均水平的玩家…
hopkinspokercourse.com](https://hopkinspokercourse.com/)
约翰霍普金斯大学的扑克课程与机器学习并没有太大的关系,但在处理统计数据时还是有点关系的。这是一种学习数学和组合学的有趣方式。
这个间歇期课程的目的是在两周内让学生从可能对扑克一无所知的新手到高于平均水平的玩家。本课程将利用手的例子和常见扑克情况的讨论来研究游戏的基本原理。
在你走之前
在 Twitter 上关注我,在那里我定期发布关于数据科学和机器学习的消息。

照片由Courtney hedge在 Unsplash 拍摄
学习和实践数据科学的 7 大移动应用

移动应用已经成为人类生活不可或缺的一部分。大多数人只是将时间浪费在使用消息应用程序或听音乐上,但他们不知道他们可以通过使用这些应用程序来利用时间,这些应用程序可以学习和实践最新的技术和新的编码语言,从长远来看,这些技术和语言可以使人们受益。
数据科学被认为是最关键、最具趋势和高收入的行业。这是一个使用算法从收集的大量数据中提取见解的行业垂直领域。有许多应用程序可以让您在移动设备上运行 Python 脚本。虽然大部分移动应用程序可供 Android 用户使用,但只有 iOS 用户可以从一些提供免费在线教程的平台上学习。
移动应用改变了学习方式。这些应用为教育和学习领域增添了全新的体验。在开发用于实践数据科学的应用程序之前,企业应检查开发人员的技能组合,并应雇用最好的移动应用程序开发人员,他们了解什么是数据科学,并拥有移动应用程序开发方面的专业知识。

举起
一个个性化的大脑训练应用程序,以提高人的智力。这个应用程序可以让你树立信心,提高工作效率。该应用程序为用户设计了个性化的练习——每天 3 次练习,根据你在这三次练习中的表现,你将在第二天被分配一次新的练习。通常,它会根据你的薄弱环节分配练习来帮助你提高。这个应用程序分析你的表现,并会帮助你提升你的表现。

量子 python
Qpython 应用可以让你在手机上运行编程语言。你可以随时随地使用它,并开始编码。该应用程序是强烈建议初学者尝试编码和实验来学习。该应用程序仅适用于 android 设备。开发者也可以使用这款应用开发 android 应用。它是数据分析师和数据科学家最喜欢的语言。
学习 Python

学习 Python
该应用程序仅适用于 android 用户。如果有人想提高自己的技能或者从头开始学习,这是最好的平台。该应用程序提供实践课程和有相同兴趣的人的社区。它提供了不同的测验和练习,用户还可以与其他社区成员进行竞赛并从中学习。

MOOCs
数据科学家总是需要让他们了解所在领域的最新趋势和技术。通过 MOOC 应用程序,用户可以访问课程材料,并从该领域最好的教师那里获得指导。人们可以随时随地使用该应用程序。
这些类型的平台使初学者能够轻松了解数据科学领域的新技术和最新进展。

Coursera
这是一个平台,提供对世界各地许多大学和学院开发的成千上万的课程材料和不同课程的访问。只需下载应用程序,进入一个新的学习世界。

基本统计
这方面的初学者可以使用这个应用程序来掌握统计部分。通常情况下,开发人员停留在编程和开发部分,没有足够的时间研究基本的统计数据。这个应用程序将帮助您修改统计的概念,如频率分布,图形,图表和假设。统计是任何数据科学项目的基础,因此下载应用程序,并使用 play store 上的基本统计应用程序来改进您的统计。

Excel 教程
现在,您可以学习如何在移动设备上脱颖而出。该应用程序仅适用于 android 用户。该应用程序有初学者到高级用户的视频教程。该应用程序将涵盖每个主题,向您介绍 MS-Excel 的工作原理以及如何将其用于数据科学和数据分析。该应用程序将帮助您掌握 MS-Excel,您将了解一些最先进的功能,如宏、数据透视表。
结论
教育和学习领域的技术进步使得用户可以很容易地了解任何领域的最新发展。你不需要每时每刻都带着你的笔记本电脑,现在所有的东西都可以通过手机获得。
随着移动应用程序开发行业的发展,您将会看到更多的应用程序,将会增强用户体验,并将为现场教育和电子学习提供一个全新的维度。数据科学最好的一点是,我们只是触及了表面,这个行业还有很多值得探索的地方!
学习 Python 最好的 7 个 Github 库
编程;编排
流行的存储库,要么学习基础知识,要么掌握 Python

艺术由西斯卡德尔斯
条条大路通 GitHub。
你可能还记得我发表的一篇类似的文章,名为“GitHub 上学习熊猫的四大知识库”。在那里,我说我害怕使用任何超过git commit + git push的东西,因为 GitHub 很吓人。我已经取得了一点进步:现在我记得每次有新工作时点击git pull(而不是当我试图推动我的编辑并意识到我的本地存储库没有与主分支保持同步时在内部尖叫)。
这次我决定为 Python 编一个类似的学习资源列表!其中一些包含教程风格的 Jupyter 笔记本,而另一些则以广泛收集编程问题为特色。所有这些都有可能有用,这取决于你喜欢的学习方式。
如果您以前从未使用过 Python,那么您可能会从为完全初学者准备的资源库中受益。如果你已经对 Python 很熟悉了,并且想重温某个特定的主题,比如说算法,这里也有一个专门为你准备的资源库!
学习-python3 —初级到中级(1.8k 星)

Jerry-git在 GitHub 上学习 python-3
在初学者部分,这个资源库将带您浏览 19 个 Jupyter 笔记本。它涵盖了基础级别的内容,如字符串和条件,然后通过讨论类(面向对象编程的快速入门)、异常(它们是什么以及如何处理它们)以及 Python 标准库中包含的一些特性(日期时间、正则表达式等等)进行了更深入的讨论。
每个主题都有一个“笔记本”链接,它将带您进入主题介绍和一些示例代码。在你完成这些之后,有一个“练习”链接,它会带你到一个笔记本,里面有你可以填写和测试的问题样本。

然后,有一个中间的“惯用”部分。本节描述“Python 特性”,这是 Python 中的特性,在许多其他编程语言中没有。如果您已经熟悉了一种不同的语言,那么您可能希望查看本节,了解专门使用 Python 的技巧和诀窍。例如,有一节介绍了如何以不同于其他语言的方式处理 Python 中的循环。

这个存储库还有一个到方便的“最佳实践”笔记本的链接,您可以使用它来了解在创建 Python 项目时应该实现哪些实践。它涵盖了用pipenv建立一个虚拟环境和使用pytest进行(你猜对了)测试。
学习-python —初级到中级(3.9k 星级)

通过 trekhleb 在 GitHub 上学习 python
这个库也是 Python 的入门,可以带你从初学者到中级(我说的中级是指除了简单的循环和算术之外的语言的使用)。存储库不是使用笔记本,而是 Python 脚本的集合,每个脚本都是核心类别的子主题,如“操作符”、“数据类型”和“控制流”。

每个 Python 文件都展示了相关的子主题以及一个有用的链接,您可以访问该链接以获取更多信息。如果您不清楚代码是做什么的,并且需要快速回顾一些理论,这可能会很有帮助。
使用 Python 文件时,存储库中包含的两个重要功能是测试和样式检查。您可以在“如何使用这个存储库”下看到完整的细节,但是为了测试,作者在主函数的底部添加了带有assert的行,以查看该函数是否按照预期执行。如果您想对代码进行更改并查看它是否仍然正常工作,这可能会很有用。这里有关于如何使用pytest运行测试的说明。此外,为了养成遵循 Python 的主要风格指南(PEP 8)的习惯,还有进一步的说明让你在代码上运行pylint,看看 Python 文件是否符合风格指南。
你不必完整地学习这门课程,因为作者指出,你也可以把知识库当作备忘单来使用。您可以简单地找到您正在寻找的部分,查看文档,摆弄代码,然后运行测试并嵌入代码,看看它是否工作正常,是否如预期那样编写。
全速 python —初级到中级(2.6k 星级)

全速巨蟒上 GitHub 由jooventura
这个资源库的特色是有一本书,它快速浏览字符串和列表的基础知识,然后快速深入到相对更高级的主题,如“类”、“协同程序”和“异步编程”。作者写这本书时考虑到了实用的方法,用代码示例简要介绍了每个主题,然后直接跳到读者可以自己尝试的实践问题。
您可以从链接 Readme 下载 pdf/epub 文件,也可以克隆存储库并自己构建。
作者写道“获得软件工程学位的分布式计算学生在两周内熟悉了 Python,并能在第三周实现带有套接字的分布式客户机-服务器应用程序”。如果你已经有了一些使用另一种语言的软件工程经验,或者如果这不是你的第一种编程语言,使用这本书可以帮助你快速掌握 Python。
python _ reference 中级(2.3k 星)

rasbt 在 GitHub 上 python_reference
这个存储库不像以前的存储库那样是包含概念组的教程式资源。相反,这个存储库更多的是关于中级主题的不同笔记本的集合,比如“Python 中的 SQLite 数据库操作”和“通过多处理模块的并行处理”。如果您已经有了坚实的 Python 基础,这个资源可能会有助于您真正利用该语言的不同特性。与以前的存储库一样,这个存储库也包括笔记本,其中包含您可以编辑和运行的代码。

名副其实的“不那么明显的 Python 素材”笔记本(上面的片段)给出了各种 Python 和 Python 模块特性的概要,这些特性在学习绝对基础知识时可能没有学到。你永远不知道那个随机的提示什么时候会对你未来的工作有所帮助。虽然当您刚开始使用 Python 时,加深理解是很好的,但是一旦您已经学习了足够的基础知识,它可以帮助您浏览一系列不相关的技巧,例如拓宽和填补您的知识空白。
还有一些有用的非代码资源,作者链接到了这些资源,它们更像是“理论资源”。例如,作者创建了一个名为“Python 中的单元测试——为什么我们要让它成为一种习惯”的项目。

作者还链接了许多其他对学习 Python 有用的外部资源,包括论坛、书籍和现有的 Python 项目。例如,Reddit 上的 r/Python 是一个很好的地方,可以找到有用的 Python 技巧以及社区成员展示的个人项目。
python-编程-练习-从初级到高级(10.8k 星级)

Python-编程 GitHub 上的练习由 zhiwehu
这个库目前有 100 个 Python 编程练习,难度从初级到高级不等。这些问题和解决方案最初是用 Python 2 编写的,但作者后来更新了所有 100 个问题,以包括用 Python 3 编写的解决方案。

如果您已经熟悉 Python,这些问题中的一些可能看起来太简单了。我会说能够解决简单的问题是一回事,但是能够快速解决是另一回事。仔细研究所有这些问题,也许与你参加的在线课程或这里的 GitHub 资源库的资源一起,可以帮助你准备和训练解决编程练习。
如果你被卡住了,你可以在每个问题上使用“提示”行,尝试找出解决问题的方法。尽量不要对每个问题向下滚动太多,这样你就不会马上看到解决方案,因为试图找出问题解决方案的过程有助于你真正记住解决方案(而不是仅仅试图阅读和记忆解决方案)。

还有一个不同作者的“扩展版”知识库,有相同的问题和替代解决方案。在这个扩展的知识库中,作者试图展示解决一个问题的不同方法,这些方法可能比原始解决方案更有效或更“Pythonic 化”。

编码问题—中级到高级(2.6k 星)

MTrajK在 GitHub 上的编码问题
就像之前的库一样,这个库包含了你可以解决的编程和算法练习的完整列表。然而,这个存储库并没有将所有的练习都记录在一个笔记本中,而是为每个练习都准备了一个 Python 文件,其中包含了问题的描述以及解决方案。

这些问题并不是从完全初级的难度开始的,所以我建议在你已经牢固掌握了基础知识(使用函数、控制流等)之后再来回答这些问题。).
作者也写道“算法和结构与语言无关”。正因为如此,他用 Python 编写了解决方案,因为这种语言可读性很好,但是熟悉其他语言的人也应该能够使用这个库来了解如何处理算法问题。
这个库中的问题不是作者原创的,因为他明确指出它们来自 LeetCode 这样的问题解决网站。他的贡献是提供解决方案和解释,帮助人们学习如何解决这类问题。
你会发现许多问题都可以归为一个主题,所以解决这些问题的方法可能有些相似。当你在一个主题中不断练习相同类型的问题时,你会发现它们对你来说变得越来越容易解决。
除了包含算法问题和解决方案的 Python 文件之外,他还提供了一个完整的其他资源列表供您使用。对于编程问题,有许多在线课程、推荐书籍和热门网站的链接。
算法—中级到高级(82.4k 恒星)

这个存储库还提供了一组文件,向您展示如何用 Python 实现不同的算法。这些算法分为从“算术分析”到“区块链”到“数据结构”甚至更多的类别。没有太多关于如何解决每个问题的解释,因为这个库可以作为实现不同算法的解决方案指南。

有些文件确实给了你一些背景知识(和一两个帮助你开始的链接),但是在你尝试解决这些算法之前,你可能需要自己做一些研究。如果你对 Python 完全陌生,我建议你先建立你的基础知识,因为这个库实际上是为那些已经熟悉这种语言并希望加深算法知识的人准备的。
作者还为其他几种主要语言(Java、C++、C、Go、Javascript)创建了类似的“学习算法”存储库,您可以在概要文件的 pinned 存储库中查看。
GitHub 资源库包含大量有价值的学习资源,但这并不意味着你需要使用所有的资源。我的建议是首先选择一个“初级到中级”类型的存储库,并研究其中的所有学习材料。您应该通过最适合您的学习风格的存储库来工作。例如,如果你想通过可编辑的 Jupyter 笔记本来学习从基础到中级的主题,你应该尝试本文中的第一个资源库。
此外,这两个 100+ Python 问题非常适合作为解决编程问题的入门。你可以选择要么开始每天尝试几个,要么等到你有了更扎实的 Python 基础再说。这些最终可以帮助你建立一些在技术性工作面试中可能出现的编程问题的基本知识。你可以从这些网站发展到像 HackerRank 和 LeetCode 这样的网站,这些网站每天都会给你各种各样的编程问题来解决。他们还可以帮助你准备特定公司的面试,比如脸书、亚马逊和谷歌。
学习 Python(和其他任何东西)都是为了保持动力和练习。Python 并不神奇——制定一个计划,如果合适就使用其中一个库(如果不合适就使用完全不同的库),然后坚持使用它。
你能行的!
**More by me:** - [2 Easy Ways to Get Tables From a Website](/2-easy-ways-to-get-tables-from-a-website-with-pandas-b92fc835e741?source=friends_link&sk=9981ddaf0785a79be893b5a1dd3e03dd)
- [An Introduction to the Cohort Analysis With Tableau](https://medium.com/swlh/how-to-group-your-users-and-get-actionable-insights-with-a-cohort-analysis-b2b281f82f33?source=friends_link&sk=8b672c3feb79e194804f2a1c33660e19)
- [How to Quickly Create and Unpack Lists with Pandas](/how-to-quickly-create-and-unpack-lists-with-pandas-d0e78e487c75?source=friends_link&sk=32ea67b35fe90382dc719c1c78c5900c)
- [Rename Screenshots on Mac with 21 Lines of Python](/how-to-rename-screenshots-on-mac-with-21-lines-of-python-c3c2366f6eec?source=friends_link&sk=ee7e2c04f068855b5b7dfffa7e54152b)
机器学习从业者面临的 8 大挑战
开发机器学习应用程序时需要克服的主要挑战

许多人在听到机器学习(ML) 或人工智能(AI) 的风声时,会想到机器人或终结者。然而,它们不是电影中的东西,它绝不是一个尖端的梦想。已经到了。我们生活在一个使用机器学习开发大量尖端应用的环境中,尽管在开发一个从零开始到投入生产的应用的过程中,ML 从业者可能会面临某些挑战。
这些挑战是什么?我们来看看吧!
1.数据收集
数据在任何用例中都扮演着关键角色。数据科学家 60%的工作在于收集数据。对于尝试机器学习的初学者来说,他们可以很容易地从 Kaggle、UCI ML Repository 等网站找到数据。

为了实现真实的案例场景,您需要通过网络搜集或(通过像 twitter 这样的 API)收集数据,或者为了解决业务问题,您需要从客户那里获得数据(这里 ML 工程师需要与领域专家协作来收集数据)。
一旦收集了数据,我们需要构造数据并将其存储在数据库中。这需要大数据(或数据工程师)的知识,这在这里起着重要作用。
2.较少的训练数据量
一旦收集了数据,您需要验证数量是否足够用于用例(如果是时间序列数据,我们至少需要 3-5 年的数据)。
我们在做机器学习项目时做的两件重要的事情是选择学习算法和使用一些获得的数据训练模型。所以作为人类,我们自然倾向于犯错,结果事情可能会出错。在这里,错误可能是选择了错误的模型或选择了不好的数据。现在,我说的坏数据是什么意思?让我们试着去理解。

想象你的机器学习模型是一个婴儿,你打算教婴儿区分猫和狗。所以我们从指着一只猫说‘这是一只猫’开始,对一只狗做同样的事情(可能重复这个过程很多次)。现在,孩子将能够通过识别形状、颜色或任何其他特征来区分狗和猫。而就这样,宝宝变成了天才(在辨别方面)!
同样,我们用大量数据训练模型。一个孩子可能用较少数量的样本来区分动物,但一个机器学习模型需要成千上万的样本,即使是简单的问题。对于像图像分类和语音识别这样的复杂问题,可能需要数百万的数据。
因此,有一点是明确的。我们需要用足够的数据来训练一个模型。
3.非代表性训练数据
训练数据应该代表新案例,以便很好地概括,即,我们用于训练的数据应该覆盖所有已经发生和将要发生的案例。通过使用非代表性的训练集,经过训练的模型不可能做出准确的预测。
被开发来对商业问题视图中的一般化情况进行预测的系统被认为是好的机器学习模型。这将有助于模型运行良好,即使对于数据模型从未见过的数据也是如此。

如果训练样本的数量很少,我们有采样噪声这是不具有代表性的数据,同样,如果用于训练的策略有缺陷,无数的训练测试会带来采样偏差。
1936 年美国总统选举期间发生了一个调查抽样偏差的流行案例(Landon 对 Roosevelt),由文学文摘通过向大约 1000 万人发送邮件进行了一次非常大的民意调查,其中有 240 万人回答,并预测 Landon 将以很高的可信度获得 57%的选票。尽管如此,罗斯福还是以 62%的选票获胜。
这里的问题在于抽样方法,为了获得进行民意调查的地址,literal Digest使用杂志订阅、俱乐部成员名单等,这些都被那些注定要投票给共和党人(因此是 Landon)的富裕个人所利用。此外,不回答也是偏见,因为只有 25%的人回答了调查。
为了准确预测而没有任何偏差,训练数据集必须具有代表性。
4.数据质量差

照片由Jeppe Hove Jensen来自 Unsplash
在现实中,我们不直接开始训练模型,分析数据是最重要的一步。但是我们收集的数据可能还没有准备好用于训练,例如,一些样本与其他样本相比是异常的,具有异常值或缺失值。
在这些情况下,我们可以移除异常值,或者使用中值或平均值填充缺失的特征/值(以填充高度),或者简单地移除具有缺失值的属性/实例,或者使用和不使用这些实例来训练模型。
我们不希望我们的系统做出错误的预测,对吗?因此,数据质量对于获得准确的结果非常重要。数据预处理需要通过过滤缺失值,提取和重新排列模型需要的内容来完成。
5.不相关/不想要的特征

垃圾进,垃圾出
如果训练数据包含大量无关特征和足够多的相关特征,机器学习系统就不会给出预期的结果。机器学习项目成功所需的一个重要方面是选择好的特征来训练模型,也称为特征选择。
假设我们正在进行一个项目,根据我们收集的输入特征(年龄、性别、体重、身高和位置,即他/她住在哪里)来预测一个人需要锻炼的小时数。
- 在这 5 个特征中,l 位置值可能不会影响我们的输出函数。这是一个不相关的特性,我们知道没有这个特性我们可以有更好的结果。
- 此外,我们可以将两个特征结合起来产生一个更有用的特征,即特征提取。在我们的示例中,我们可以通过消除重量和高度来生成一个名为身体质量指数的特征。我们也可以在数据集上应用变换。**
- 通过收集更多数据来创建新功能也有所帮助。
6.过度拟合训练数据

照片由 Pexels 的 Victor Freitas 拍摄
假设你去了一个新城市的餐馆。你看着菜单点菜,发现费用或账单太高。你可能会忍不住说“这个城市的所有餐馆都太贵了,负担不起”。过度概括是我们经常做的事情,令人震惊的是,框架同样会陷入类似的陷阱,在人工智能中,我们称之为过度适应。**

过度拟合
这意味着模型表现良好,对训练数据集做出了可能的预测,但它没有很好地泛化。
假设您正在尝试实现一个图像分类模型,分别使用 3000、500、500、500 个训练样本对苹果、桃子、橙子和香蕉进行分类。如果我们用这些样本训练模型,系统更有可能将橙子分类为苹果,因为苹果的训练样本数量太多了。这可以称为过采样。

当模型与训练数据集的噪声相比过于不可预测时,会发生过度拟合。我们可以通过以下方式避免这种情况:
- 收集更多的训练数据。
- 选择具有较少特征的模型,与线性模型相比,更高次的多项式模型不是优选的。
- 修复数据错误,移除异常值,并减少训练集中的实例数量。
7.欠拟合训练数据
与过度拟合相反的欠拟合通常发生在模型过于简单而无法理解数据的基本结构时。就像试着穿小号的裤子。这通常发生在我们拥有较少的信息来构建一个精确的模型时,以及当我们试图用非线性信息构建或开发一个线性模型时。

欠拟合
减少拟合不足的主要选择有:
- 特征工程——为学习算法提供更好的特征。
- 从数据中去除噪声。
- 增加参数并选择强大的模型。
8.模型的离线学习和部署

照片由 Rakicevic Nenad 从 Pexels 拍摄
机器学习工程在构建应用程序时遵循以下步骤 1)数据收集 2)数据清理 3)功能工程 4)分析模式 5)训练模型和优化 6)部署。
哎呀!!我说部署了吗?是的,许多机器学习实践者可以执行所有步骤,但缺乏部署技能,由于缺乏实践和依赖性问题、对业务基础模型的理解不足、对业务问题的理解以及不稳定的模型,将他们的酷应用程序投入生产已成为最大的挑战之一。
通常,许多开发人员从 Kaggle 等网站收集数据,并开始训练模型。但在现实中,我们需要为数据收集创建一个动态变化的源。离线学习或批量学习可能不适用于这种类型的可变数据。该系统经过培训,然后投入生产,无需学习即可运行。在这里,数据可能会随着动态变化而漂移。

在线学习
总是首选建立一个管道来收集、分析、构建/训练、测试和验证任何机器学习项目的数据集,并批量训练模型。
参考文献
**** [## 使用 Scikit-Learn、Keras 和 TensorFlow 进行机器实践学习,第二版
通过最近的一系列突破,深度学习推动了整个机器学习领域。现在,甚至…
www.oreilly.com](https://www.oreilly.com/library/view/hands-on-machine-learning/9781492032632/) [## 基本统计| Coursera
理解统计学对于理解社会和行为科学的研究是必不可少的。在本课程中,您…
www.coursera.org](https://www.coursera.org/learn/basic-statistics/)
结论
如果训练集太小,或者如果数据没有被一般化、有噪声并且被不相关的特征破坏,则系统不能很好地执行。我们经历了初学者在练习机器学习时面临的一些基本挑战。
如果你有什么建议,我很乐意听听。我很快会带着另一个有趣的话题回来。在那之前,呆在家里,保持安全,继续探索!
如果您想联系,请在LinkedIn上联系我。****
如何为独立参与者赢得数据科学黑客马拉松的 8 大实用技巧

DS 黑客马拉松的项目管理部分
如果知道现在 IT 领域非常有吸引力,伟大的程序员是新的摇滚明星,没有人会感到惊讶。现代工业公司和著名咨询机构到处都在谈论数字化转型。必要的 IT 员工数量逐年增长,世界各地的公司都感到能力不足,急于填补他们在 IT 部门的空缺。为了找到摇滚明星或聪明的初学者,他们提供大量的活动,如技术聚会、会议、黑客马拉松等。
去年也不例外。它充斥着面向 It 专家的各种黑客马拉松,尤其是那些涉及数据科学领域的专家。在开始之前,我为那些不熟悉黑客马拉松的人写了一篇关于目标和机制的简短解释。
黑客马拉松(hackathon)——黑客和马拉松的合成词,其中黑客指的是计算机科学领域,马拉松告诉你这是一项长期活动。

粗略地说,这是一场 it 专家的竞赛,主要目标是通过构建原型来解决业务问题。没有人期望在你的最终解决方案中找到高度优化的代码,例如在竞争性编程中。在黑客马拉松中,展示最简单可行的产品(MVP)来满足最终用户的需求是很重要的。通常,黑客马拉松的组织者是大公司,他们追求为他们的问题找到新的解决方案,并雇佣有才华的专家。很难想起至少一个没有人力资源人员的黑客马拉松。通常情况下,他们超级友好,想聊天,并愿意邀请采访,以防你的胜利。如果你想了解他们的公司或者空缺职位,不要害怕问他们。
传统上,黑客马拉松在组织者的办公室或租用的地方进行,如酒店会议室或共同工作空间。对于那些下定决心将整个周末奉献给疯狂的编码和对真实商业问题的调查的爱好者来说,有很多激励因素已经准备好了。
初学者可以观察他们与社区的生产网络,用真实数据(而不是精炼的 Kaggle 数据)在动手任务中挑战自己,并提高他们的团队合作技能。中层工程师和分析师可以被邀请参加面试,或者在获胜的情况下获得丰厚的报酬。
黑客马拉松吸引了具有团队合作经验的团队,以及愿意在组织者支持下加入团队的个人专家。这是为那些没有团队,但想挑战自己的人写的文章。下面,你可以找到 8 个实践技巧,它们是根据我上次的黑客马拉松定义的。我以个人身份参与其中,并遵循这些建议,我的团队设法取得了胜利,但要考虑到一种尺寸并不适合所有人。
在介绍这些之前,让我给你一个关于黑客马拉松和任务的背景。黑客马拉松的赞助商是一家国际炼油公司 Sibur。竞争主要集中在数据科学领域,并寻找 IT 专家,如数据科学、项目经理、后端和前端开发人员。团队可以从两个问题中选择一个:开发一个解决方案来优化酒店优惠券的分配,或者建立一个预测模型来预测碳化催化剂在反应器中的焦化。在这两种情况下,最终的解决方案应该由两个主要部分组成:一个基于数据分析的算法和一个显示分析模型如何工作的用户友好界面。为了构建原型,真实的历史数据(在第一种情况下是匿名的)被提供给团队。此外,参与者可以采访用户和主题专家。数据集呈现在未经处理的 CSV 文件中,手工处理。xlsx 文件并需要严格的预处理。详细的黑客马拉松描述可以在这里 和获奖名单 这里 找到,不过,这些信息仅用俄语表示。
现在你已经熟悉了背景,让我们来看看帮助我们实现目标的一些建议。
网状团队井
团队组建完成后,为所有参与者组织一次线下会议或电话会议,只是为了介绍他们自己。在会议期间,询问你的队友他们的期望,并确保你们有相同的目标。有些人可能有获胜的野心,但有些人可能只是乐于参与。当你对团队的期望充满信心时,再进一步;谈谈技巧和经验。这种热身使团队合作更有成效,并有助于消除通常在新团队中出现的障碍。我们的团队由来自不同城市的参与者组成,我们无法提前见面,所以第一次见面是通过 Skype。在电话中,我们每个人都谈了一些关于我们自己,我们的期望和我们的背景。

定义优势和劣势
不要急,在申请任务之前,搞清楚你的团队擅长什么;差距是什么,如何分配项目角色。再次会面,确定你的优势和劣势,以及如何分配角色。决定哪个团队成员将扮演项目经理的角色,并能够管理团队的一致性。hackathon 项目经理是团队中最重要的人物之一,因为他/她结合了团队领导者的职责并管理高速开发。他/她负责深入理解项目的时间表、团队同步和冲突的解决。在第一次通话后的几天后,我们又见面了。第二次通话更有成效,因为队友们已经互相认识了。这有助于我们选择最适合我们团队的任务,也有助于我们更好地了解彼此。
什么适合你
通常组织者会给出几个任务供选择。拿一个每个队友都可以展示自己最好的一面的机会。竞争负载应该在所有参与者之间平均分配,否则您的团队将无法及时完成任务。每个团队成员的贡献都非常重要。最合适的任务将取决于你的团队拥有什么样的技能。这样,工作量就可以平均分配,而不会偏向一两个人。在我的案例中,我们有意识地决定支持发放酒店优惠券,尽管事实上时间序列预测对数据科学家来说更有意思。如果我们选择了第二种方法,工作量就会偏向数据科学家一边,整个团队都不会参与进来。在我们有限的时间里,这将对团队的结果产生负面影响。

谁是利益相关者,他们的热情是什么
获胜的标准并不总是由最高分来决定。通常,组织者在没有明确定义数字指标的情况下给你即兴发挥的空间(类似于真实的商业案例)。在这种情况下,试着弄清楚谁是你的利益相关者,谁是用户,什么对他们来说是重要的。也许,用户期望你的模型有最高的准确率,但也许他们会对用户友好的界面和一些令人激动的功能感到兴奋。试着和他们交谈,问这些问题。你只有 2 天的时间来了解业务问题并展示你的解决方案。所以,最好专注于有限的几个功能。
再次冲刺
黑客马拉松是一个项目,其结果应该是一个最小可行的产品。在任何项目中,团队的每个参与者都应该清楚地了解项目的步骤和他们的贡献。此外,您的团队应该尽可能同步工作。最有可能的是,你将面对队友的不平等的经验和他们的工作速度。与此同时,你可能没有一个调整良好的沟通过程。在我们的例子中,我们每小时进行两次冲刺来使它工作。每个 sprint 都有一个明确定义的范围,每两个小时后,我们会进行一次状态检查,并解决未解决的问题。
反馈是一份礼物
假设你已经见过了你的团队,大致了解了涉众和用户的期望,并且你已经形成了一定会带来胜利的原型的愿景。尽管有一个好的开始,我还是建议你向利益相关者和用户展示你的进展。制作演示时,不要浪费时间,验证假设并寻求反馈。前端部分受用户意见影响特别大也就不足为奇了。此外,保持好奇和专注,尝试找出隐藏的需求,因为这可能是你的小丑。在我们的案例中,原型的第一个版本和最终产品具有相反的商业价值。在与用户进行了几次简短的演示后,我们不仅改变了设计,还改变了业务逻辑。我们试图在每次冲刺后展示原型,并在演示过程中验证假设。

使用 Git
确保团队的所有成员都熟悉 git。提前一天设置备份和部署虚拟环境。通过电子邮件共享文件让团队合作变得难以忍受。
不要忽视公开演讲(包括回答问题)
考虑到 hackathon 并不是竞争性编程,在这里你渴望编写通用的高性能代码。在演示阶段,你实际上是在销售你的产品。最有可能的是,您将有 5-10 分钟的时间来演示您的 MVP 如何工作以及如何满足业务需求。确定你的团队中谁在公开演讲时表现更好,并能清楚地回答用户和主题专家的问题。认真对待,至少排练 3 遍。花 3 个小时与团队一起排练演示演讲。同样,对任何可能的问题进行头脑风暴。准备答案。

原型演示
多一个建议代替结论:
超越任务思考— 尝试找出问题存在的原因,也许问题就在流程中,没有必要从技术上解决。我们最终的解决方案不仅包括一个现成的原型,还包括改进业务流程的建议。这些也有助于实现目标。
黑客马拉松不仅仅是关于找到一份有趣工作的可能性。它还为初学者创造机会,通过使用真实数据来挑战自己,并与社区和专家见面。不要害怕在没有团队的情况下参与。赢不赢无所谓。你将获得可以放入简历的真实经历,并且会被 HR 注意到。如果你已经参加了黑客马拉松,并且你愿意给出建议,请分享它。
来自活动的团体照片

Sibur hack aton 的决赛选手和参赛者
Jupyter 笔记本中的 8 大魔法命令
通过学习最有用的命令来提高您的生产力

有哪些神奇的命令?
神奇命令是特殊的命令,可以帮助您运行和分析笔记本中的数据。它们添加了一个特殊的功能,这是 python 代码或 jupyter notebook 接口无法直接实现的。
在代码中很容易发现神奇的命令。如果它们在一行代码中,则按%处理;如果它们写在几行代码中,则按%%处理。
在本文中,我将列出最常用的神奇命令,并展示如何利用它们提供的功能的实际例子。
1。列出所有魔法命令。
让我们从列出所有你可以在笔记本上使用的魔法命令开始。
%lsmagic
如果您在笔记本中运行上面的行,您应该会得到一个类似于下面截图的列表。这些是您可以使用的所有命令。在本文中,我们将只讨论其中的一小部分。

2。运行一个文件。
您可以使用以下代码从 jupyter 笔记本中运行 python 文件。
%run <file name>
假设您有一个包含以下内容的文件 hello.py :
def hello_world():
print('Hello, world')hello_world()
您可以在笔记本中运行以下命令来运行该文件。
%run hello.py

3。得到一个执行时间。
您可以使用 time 命令为代码的执行计时。
%%time<your code>
让我们生成 1 000 000 个随机数,看看需要多长时间。
%%time
import random
for i in range(0, 1000000):
random.random()

4。列出所有变量。
有一个神奇的命令允许你列出当前笔记本中定义的所有变量。
%who
您可以在命令名后传递一个数据类型,以便只列出特定数据类型的变量。
为了说明这一点,让我们定义一个字符串变量和两个整型变量。
var_1 = 1
var_2 = 'hello'
var_3 = 100
现在我们可以列出所有字符串:
%who str

或所有带有以下符号的整数:
%who int

5。获取变量的详细信息。
一旦我们知道了变量名,我们就可以检查存储在特定变量名中的对象的详细信息。为了做到这一点,您可以使用以下命令。
%pinfo <variable>
让我们回到上一节中使用的三个变量的例子,以便更好地说明它。
var_1 = 1
var_2 = 'hello'
var_3 = 100
现在让我们检查 var_1。
%pinfo var_1

如您所见,您获得了关于变量的所有重要信息,如类型、字符串形式和 docstring。
让我们检查一个字符串变量。
%pinfo var_2

你得到的信息细节和 int 一样,另外还有字符串的长度。
6。获取和设置环境变量。
您可以使用以下命令获得环境变量的列表。
%env

此外,您还可以通过指定变量名及其值来设置笔记本的环境变量。
让我们添加一个名为 NEW_VAR 的新环境变量:
%env NEW_VAR=Users/konki

现在让我们检查一下它是否设置正确。您可以在%env 后面添加一个变量名,以便只检查指定的变量,而不是显示所有变量。
%env NEW_VAR

7 .。在 jupyter 笔记本中显示 matlpotlib 图形
如果您使用的是旧版本的 Jupyter 笔记本,您需要添加这一行代码,以便用 matplotlib 创建的图形可以在笔记本本身中呈现。
%matplotlib inline
在较新的版本中,不再需要这样做。设置它的代码在 Jupyter 笔记本启动时运行。
你仍然可以在其他人的代码中看到这个神奇的命令,因为不是每个人都知道这个更新。
8。加载外部文件。
您可以使用 load 命令将外部文件加载到单元格中。
%load <file_name>
如果您已经有一个定义了某些函数的 python 文件,并且需要在当前笔记本中使用它们,那么这是一个非常有用的命令。
为了进行说明,我们以文件 rectangle.py 为例,它由以下代码组成。
def calculate_area(len, height):
return len * height * 2
您可以通过执行下面的代码来加载文件内容。
%load rectangle.py
一旦你运行了这个单元,你应该得到这个单元中文件的内容。

现在只需运行加载了代码的单元格,您就可以使用在原始文件中定义的函数了。现在可以计算矩形面积了。
calculate_area(2,4)

总结
在本文中,您已经了解了 jupyter 笔记本中最常用的魔法命令。现在是你的时间了,打开笔记本,练习你在这里学到的东西。编码快乐!
原载于 about data blog . com:jupyter 笔记本中的 8 大魔法命令,2020 年 11 月 11 日。
PS:我正在 Medium 和aboutdatablog.com上撰写深入浅出地解释基本数据科学概念的文章。你可以订阅我的 邮件列表 在我每次写新文章的时候得到通知。如果你还不是中等会员,你可以在这里加入。
下面还有一些你可能喜欢的帖子
* [## 关于 jupyter 笔记本你不知道的 9 件事
用这些建议提高你的工作效率
towardsdatascience.com](/9-things-you-did-not-know-about-jupyter-notebook-d0d995a8efb3) [## 9 大 Jupyter 笔记本扩展
改进笔记本电脑功能,提高您的工作效率
towardsdatascience.com](/top-9-jupyter-notebook-extensions-7a5d30269bc8) [## 9 熊猫有效数据分析的可视化技术
学习如何使用折线图、散点图、直方图、箱线图和其他一些可视化技术
towardsdatascience.com](/9-pandas-visualizations-techniques-for-effective-data-analysis-fc17feb651db)*
每位数据科学家的 8 大技能
当我参加大学讲座时,最常被问到的问题是“我需要具备什么技能?”

回答“我需要具备什么技能”这个问题会有不同的答案,这取决于你在和谁交谈,你在看什么公司,甚至你申请的是什么工作岗位。在与大学生就这个话题进行了多次交谈后,我想坐下来讨论一下我如何看待这个问题以及在看待技能时需要考虑的 8 大领域。
1.开发一个业务问题
当你考虑在数据科学领域工作所需的技能时,一个关键领域是学习开发或理解你试图解决的业务问题。了解你将要做的工作的商业合理性以及客户将如何利用它是至关重要的。通常,我们会被一个很酷的想法所吸引,但我们会错过商业方面。如果没有客户要求这项工作,没有理由运行分析,那么你在做什么?了解如何使用这项工作,并向客户提供价值。培养这方面的技能以了解业务合理性和附加值,可以帮助您继续构建数据科学项目并向他人展示您的工作。
2.处理大数据和小数据的接收和处理
当你寻找一份数据方面的工作时,你需要知道如何接收和处理你正在处理的数据。这方面的技能可能会有所不同。假设你更倾向于数据工程。在这种情况下,您可能会发现自己正在开发数据库,创建数据源之间的关系,并为人们创建数据集市以便从您那里获取数据。您需要掌握如何创建和维护这些数据源的技能。如果您是这种情况,请重点了解不同的数据库类型,如何使用这些数据库,以及如何在数据中创建关系。
如果你正在寻找一份数据科学或数据分析师的工作,你可能会更关注如何将这些数据带入你的工作空间。需要连接数据库还是使用 API?您是否正在开发与这些数据或软件工具(如 Power BI 和 Tableau)交互的代码?你在这方面的技能可能会因你申请的职位类型而异。尽管如此,至少对如何与不同的数据源交互以及如何将这些数据接收到您的工具或环境中有一个基本的了解还是很好的。在开始分析之前,了解这些数据是如何获取的是至关重要的。
3.了解数据清理和预处理
数据清理和处理也会因工作而异。在作为数据工程师和创建数据源的第一种情况下,您的清理和预处理对于整个摄取过程来说可能更一般。您可能希望删除重复的条目,清理数据源的互连方式,并创建一个其他人可以使用的可用数据库。在这个职位上,你不需要专注于密集的数据清理技术。
我的意思是,如果您是一名科学家或分析师,正在查看数据,您可能会接收数据工程师的数据集,但仍然需要清理和预处理数据,以处理您正在做的工作。你需要一键式编码的技能,清理和处理文本数据,插补,并确保数据列是你正在做的事情的预期数据类型。理解数据清理和预处理的不同方式,并根据您的最终用例实现它们,是您在处理数据时经常需要的宝贵技能。您应该了解与您正在寻找的工作相关的数据清理和预处理的主要概念。
4.使用工具
无论您是使用 R 还是 Python 来编写模型代码,还是使用 auto-ML 工具来创建模型,您都应该了解如何使用您的工具。如果你是一名数据科学的程序员,你应该带一个笔记本或脚本,能够与代码交互、阅读、修改和运行代码。你应该解释你使用的软件包的类型,你为什么使用它们,以及在什么情况下你可以使用一个软件包与另一个。最好对您使用的编程工具有很好的理解,从语言、软件包、IDE 和笔记本到如何在生产中使用这些代码来推动行动。
不管你的工具集是什么,你都需要解释你如何使用这些工具的不同特性来获取、分析和展示你的工作。例如,让我们以一个 autoML 工具为例。如果您将该工具放在简历中,您应该了解如何接收和清理数据,配置该工具以使用您的数据集,并最终运行该工具和使用结果。当被问到时,你需要能够回答与该工具相关的问题。无论您是通过代码还是 autoML 工具创建模型,您都应该了解如何开发、调整和理解您的模型及其输出。
5.绘制可视化效果、报告和仪表板
当您开发模型并收集结果时,您将需要根据这些信息绘制不同的可视化、报告和仪表板。了解如何以一种有意义且易于阅读的方式展示您的工作,对于与他人分享您的成果至关重要。你希望可视化,用户可以拿起和驱动行动的基础上所有的信息。
例如,让我们考虑一个仪表板。如果您正在开发一个输出仪表板,结果中的哪些数据点对您的最终客户最重要?您是否会以散点图、热图或条形图的形式显示数据,为什么?绘制可视化图形并将其转化为演示文稿、报告和仪表板本身就是一项技能。它结合了对问题的业务理解、清理的数据,以及您希望某人在查看数据时采取的操作的表示。随着时间的推移,随着您适应特定客户希望看到的数据呈现方式,这一技能可以得到提高。
6.了解分析生命周期
你竭尽全力去训练一个模型或者开发一个分析工具,但是这种分析工具不会永远持续下去。你将收集更多新的数据,你将需要开发新的分析。了解您的分析的生命周期并学习如何淘汰旧的分析是一项有价值的技能。您的分析将被创建、验证、部署、修改,然后报废。最激动人心的部分是分析的创建和验证。这一部分是当你开发模型,并验证它是预测你所期望的。生命周期的剩余部分关注于如何部署该模型。它将被添加到应用程序前端还是后端?分析会推动内部价值吗?您需要它来为仪表板或报告生成结果吗?
一旦您知道将在何处部署该分析以及如何使用它,您就可以确定何时需要重新处理该分析以优化和调整结果。这种返工可能每隔几天、几周甚至几个月就会发生一次。但是返工之后就是退休。分析最终会退出,因为它不再产生有价值的结果,或者数据发生了很大变化,以至于您需要重新开始新的分析。了解在分析生命周期的每个阶段你需要做什么是至关重要的。
7.生产分析
分析生命周期的一个部分是创建一个生产就绪的分析,但是如何将您的分析转移到生产中呢?将分析应用到生产中有不同的方法,您应该至少理解一种方法,并根据需要学习其他方法。我见过的将分析引入生产的方法有:
- 训练后酸洗模型。
- 使用 OOP 创建分析,并创建一个其他人可以运行的分析库。
- 为您的分析代码和依赖项创建 Docker 容器。
当您查看创建生产就绪模型的不同选项时,请确保您首先理解了您的用例,然后设计您的代码架构来满足需求。
8.拥抱研究和发展(R&D)
作为一名数据科学家,您还会遇到许多专注于研发的项目。您需要进行批判性思考,研究不同来源的信息,并分析这些信息。我喜欢关注的 R&D 项目领域正在迅速衰落。快速失败是指在项目中快速迭代,可能会很快失败。随着这些失败的到来,你需要决定下一步将项目进行到哪里,或者放弃这个项目,另找一个。
与 R&D 工作相适应的一项软技能是,在工作中倾听和接受他人的反馈和想法。当你清理数据、开发分析、部署模型和可视化时,倾听别人对你工作的评价。我并不是说你应该采纳他们给你的每一个想法或者使用你得到的所有反馈,而是听听他们要说什么,然后决定你是否需要改变你解决问题的方法。如果你问他们一个问题,记下笔记并理解他们告诉你的内容。然后,记下所有这些笔记,确定你前进的道路。你可以使用他们的一些想法,也可以不使用,但是如果你愿意在你的项目中与他人合作,这些讨论可以带来一些令人印象深刻的结果。
最后的想法
当你在寻找数据科学领域的新工作时,要明白特定的工具、技术和技能可能因公司而异。但是,如果你能很好地掌握不同领域的技能,理解你所知道的工具,并愿意边学边做,你就能更好地准备解释你如何利用现有技能解决问题。
如果你想阅读更多,看看我下面的其他文章吧!
在从事数据科学项目时,请一位主题专家来审查您的工作可能会有所帮助。
towardsdatascience.com](/stop-wasting-your-time-and-consult-a-subject-matter-expert-f6ee9bffd0fe) [## 在数据科学中我们需要面向对象编程吗?
让我们讨论一下作为一名数据科学家转向面向对象编程的利弊。
towardsdatascience.com](/do-we-need-object-orientated-programming-in-data-science-b4a7c431644f) [## 采用现有数据科学项目的成功关键
代码本来可能不是你的,但现在是你的了。那么接下来呢?
towardsdatascience.com](/keys-to-success-when-adopting-a-pre-existing-data-science-project-9f1225fb0275) [## 利用您的一对一会议
您如何从一对一会议中获得更多价值,从而更好地了解您自己和您的工作?
medium.com](https://medium.com/the-innovation/leveraging-your-1-1-meetings-c0de2d3c8704) [## 不要太骄傲而不愿寻求帮助
如果你被一个 bug 卡住了或者感到不知所措,你可以寻求你需要的帮助。
towardsdatascience.com](/dont-be-too-proud-to-ask-for-help-76f21d16f318)
2020 年需要了解的 9 大数据科学认证
值得考虑的一些最佳数据科学认证计划

路易斯·基冈-Skillscouter.com 在 Unsplash 上的照片
MOOCs 越来越受欢迎是不可否认的事实。有证据表明,越来越多的企业将 MOOCs 用于员工培训发展。在我看来(也是我见过的招聘人员),在线认证是你在标准参考平台上超越课本知识的能力证明。
学习者利用 MOOCs 是出于个人兴趣或增强他们的工作前景和技能。然而,首要目标仍然是在当前时代获得技能的可信度或相关性。
"潜在雇主如何看待课程和证书?在我与招聘人员讨论这个问题时,我有机会说,底线是:证书让你有了一个共同的基础,你的表现和技能会得到称赞。证书展示了你磨练技能的额外努力。
为什么要参加在线认证?
- 在简历或作品集上夸耀你的技能
- 获得更好的就业机会
- 利用对其他服务的访问—职业服务、招聘实验室、评论
- 在职业道路上做出转变
说到这里,让我们来看看今年你可以完成的数据科学的 9 大在线认证!
1.IBM 数据科学专业认证
持续时间— 3 个月(灵活)
级别—初级
平台— Coursera
你得到:证书和数字徽章

图片来源:Coursera
完成此认证后,我可以向你们保证,对于希望开始其专业数据科学职业生涯的爱好者来说,这是最好的初级数据科学认证计划。
从解释什么是数据科学以及为什么它如此受欢迎,到让学习者完成 API 集成的顶点课程,我强烈建议接受这个 9 门课程的挑战!
课程
- 什么是数据科学?
- 数据科学的开源工具
- 数据科学方法论
- 用于数据科学和人工智能的 Python
- 用于数据科学的数据库和 SQL
- 使用 Python 进行数据分析
- 用 Python 实现数据可视化
- 用 Python 进行机器学习
- 应用数据科学顶点
认证不需要任何先决条件。然而,如果你希望更好地掌握学习,我建议你先完成 Python 速成课程。到了课程 6,你将开始从零开始构建项目,这是在简历中加入一些奇特项目的绝佳方式!
访问认证: 链接
2.Tableau 数据科学家|桌面专家
持续时间— 3 个月(灵活)
级别—初学者
平台— Tableau 在线学习
免费
您将获得:数字角色徽章

图片来源:Tableau 官网
Tableau 在其许多认证上提供折扣,但这一项——数据科学家学习路径是免费的。一个姐妹认证是 Tableau 数据分析师。
Tableau 数据科学家路径包括—
- Tableau 桌面入门
- 桌面 I:基础
- 桌面 II:中级
- 桌面 III:高级
- 数据准备
- 视觉分析
- 数据科学与 Tableau
- 数据科学家技能评估
Tableau 提供三种主要的付费认证—
- 桌面认证助理(600 美元)
- 桌面认证专家(250 美元)
- 服务器认证助理(250 美元)
进入认证: 链接
Tableau 桌面专家

图片来源:Tableau 官网
这个考试是为那些有基本的,基本的技能和 Tableau 桌面的理解和至少三个月的应用理解,和 Tableau 的经验。
费用= \(50 截止到 2020 年 6 月 30 日(6 月 30 日之后\) 100)
时间限制:60 分钟
问题形式:多项选择,多项回答
问题数量:30
及格分数:70%
衡量的技能
- 探索和准备数据
- 探索和分析数据
- 分享见解
- 理解 Tableau 概念
- 及时
3.HarvardX 的数据科学专业证书
持续时间— 1 年 5 个月(灵活)
级别—初级
平台— edX
费用= 441 美元

图片来源:edX
与 edX 合作的哈佛大学拥有数据科学认证,涵盖基本的 R 编程技能、概率、推理和建模等统计概念,以及使用 tidyverse、ggplot2、和 dplyr 等软件包的经验。
关于这个认证最好的部分是课程接触基础的基本工具,为实践数据科学家,如 Unix/Linux,Git 和 GitHub,和 RStudio
该认证的另一个亮点是它的真实性——课程向学习者介绍了激励现实世界的案例研究,例如——
- 世界卫生和经济趋势
- 美国犯罪率
- 2007-2008 年的金融危机
- 选举预测
- 组建一支棒球队(受 Moneyball 启发)
- 电影推荐系统。
课程
- 数据科学:R 基础
- 数据科学:可视化
- 数据科学:概率
- 数据科学:推理和建模
- 数据科学:生产力工具
- 数据科学:争论
- 数据科学:线性回归
- 数据科学:机器学习
- 数据科学:顶点
进入认证:链接
4.商业分析专业化
平台— Coursera
级别—初学者
持续时间— 6 个月(3 小时/周)

图片来源:Coursera
商业分析专业由宾夕法尼亚大学沃顿商学院开发的 Coursera 托管。它为跨市场营销、人力资源、运营和财务等商业专业的大数据分析提供了良好的基础介绍。这些课程不需要之前的分析经验。
网站上的一项统计显示,46%的学员在完成专业学习后开始了新的职业生涯,21%的学员获得了加薪或升职。
在旁听了课程并完成课程后,我可以说它确实让我们了解了作为数据分析师,我们应该并且能够如何描述、预测和告知特定业务领域的业务决策。我确信,在完成专业化后,任何学习者都将形成一种分析思维,以帮助根据数据做出比以前更好的战略决策。
课程
- 客户分析
- 人员分析
- 会计分析
- 运营分析
- 商业分析顶点
顶点课程要求学习者将四门课程的知识结合起来,并鼓励他们针对谷歌、脸书和雅虎等全球科技巨头面临的实际商业挑战做出数据驱动的决策。
进入认证: 链接
5.高级商业分析专业化
平台— Coursera
级别—中级
持续时间— 5 个月(3 小时/周)

图片来源:Coursera
高级商业分析专业托管在 Coursera 上,由科罗拉多大学博尔德分校开发。专业化融合了学术界和商界之间的细微差别,将来自两个领域的经验丰富的从业者的知识结合起来,与学习者分享现实世界的数据分析技能。
网站上的一项统计显示,50%的学习者在完成这个专业后开始了新的职业生涯!那是我们正在谈论的事情!
同样,在完成这一专业化后,我肯定我现在可以更好地起草和认识到股东的最大价值。该课程让我对使用 SQL 进行数据提取和操作有了全面的体验,并利用统计技术对不同的业务领域进行描述性、预测性和规范性分析。更重要的是,该课程有效地教授了如何解释和展示分析结果,以便做出有效的决策。
课程
- 高级业务分析顶点
- 用于决策的商业分析
- 交流业务分析结果
- 商业数据分析简介
- 预测建模和分析
访问认证: 链接
6.亚马逊 AWS 大数据认证
持续时间— 170 分钟完成考试
级别—高级
平台— AWS
费用—300 美元
类型—多项选择,多个答案

图片来源:AWS 官网
AWS 大数据认证是另一项艰难的认证,要求考生持有其中一项认证
- AWS 认证云从业者
- AWS 认证解决方案架构师助理
- AWS 认证开发人员-助理
- AWS 认证系统运行管理员—助理
该测试要求在数据分析领域至少有五年的实践经验(这对大学毕业生来说不是一个简单的挑战!)
衡量的技能
- 功能化核心 AWS 大数据服务
- 使用 AWS 设计和维护大数据
- 利用工具自动化 AWS 中的数据分析
进入认证: 链接
7.SAS 数据科学学院
持续时间—几个月到几年
成本—250 美元
级别—高级
平台— SAS 数据科学学院

图片来源:SAS 数据科学研究院
SAS 数据科学学院是学习 SAS 数据科学的著名平台之一。它提供数据监管、高级分析、人工智能和机器学习方面的课程,以推动你在数据领域的职业发展。请注意,对于初学者来说,SAS 本身是一个棘手的领域。如果你准备参加下面的考试之一,请确保你完全了解先决条件。
SAS 学院有三条基本途径
- 数据管理专家(4 门课程| 1 门考试| 5 个徽章| $ 1295/年)
- 高级分析(9 门课程| 3 门考试| 7 个徽章|$1295/年)
- 人工智能和机器学习(5 门课程| 3 门考试| 7 个徽章| $ 1295/年)
SAS 学院专注于以下概念—
- 访问、操作和转换数据
- 分析和统计基础
- 提高分析和报告的数据质量
- 探索和可视化数据
- Hadoop、Hive、Pig 和 SAS
- 机器学习
- 优化技术
- 模式检测
- 预测建模技术及其应用
- 时间数列预测法
进入认证: 链接
8.MCSE:数据管理和分析
时长— 180 分钟考试
水平—高级
平台—微软
价格—165 美元
总题— 45 至 55 道
类型—单项和多项选择题

借助微软认证解决方案专家(MCSE),您可以展示在数据库管理、SQL、构建企业级数据解决方案和利用商业智能数据方面的广泛技能。
你会学到什么?
- BI 报告
- 使用 Azure 的数据工程
- 机器学习
- SQL 2016 商务智能开发
- SQL 2016 数据库管理
- SQL 2016 数据库开发
- SQL Server 2012/2014
获得该认证需要 3 个步骤
- 与 SQL Server 2012/2014/2016 数据库管理合作,并获得针对 SQL Server 的微软认证解决方案助理。使用 Azure 获得关于数据库开发、商业智能开发、机器学习、商业智能报告或数据工程的知识
- 通过 1 门必修考试。
认证门户还包含考试准备资源 - 获得您的认证
访问认证: 链接
9.微软认证 Azure 数据科学家助理
持续时间— 180 分钟考试
级别—高级
平台—微软
价格— $165
总问题— 51
类型—单项和多项选择题(~50%问题来自 ML studio,40%来自 ML service & 10%通用数据科学问题。)

到目前为止,微软 Azure 数据科学家认证是我遇到的最薄弱的认证,因此也是我名单上的最后一个,它旨在为那些希望应用他们的数据科学和机器学习知识在 Azure 上实现和运行机器学习模型的学习者提供服务。
这个认证的好处在于,您可以通过部署模型即服务来完成考试。有什么比产品就绪项目更好的呢!?
方法很简单:参加一次考试,获得证书
衡量的技能
- 建立 Azure 机器学习工作区(30–35%)
- 在 Azure 中运行实验和训练模型(25–30%)
- 优化和管理 Azure 构建的模型(20–25%)
- 部署和使用生产就绪型模型(20–25%)

来源: K21 学院
进入认证: 链接
这就是我的博客的结尾。感谢您的阅读!我希望你喜欢这篇文章。请务必告诉我,在您今年夏天的数据科学之旅中,您期待学习或探索哪些认证?
数据帐篷快乐!
免责声明:本文表达的观点仅代表我个人,不代表严格的观点。
了解你的作者
拉什是芝加哥伊利诺伊大学的研究生。她喜欢将数据可视化,并创造有见地的故事。当她不赶着赶学校的最后期限时,她喜欢喝一杯热巧克力,写一些关于技术、UX 等的东西。
2020 年初学者的 9 大数据科学项目
新技能和加强你的投资组合的最终项目清单。

诺德伍德主题公司在 Unsplash 上拍摄的照片
随着国家一步一步地逐步开放,还有几周的“隔离期”,利用这段时间学习新技能,阅读书籍,提升自己。
虽然知识分子一直在说“这不是一场生产力竞赛”,但对于那些对数据分析、数据科学或任何与数据相关的事情感兴趣的人来说,我想让我们列出一个清单9 个在业余时间要做的数据科学项目,排名不分先后!
1.信用卡欺诈检测
预计到 2022 年,信用卡拥有者的数量将接近 12 亿。为了确保信用卡交易的安全性,监控信用卡交易是非常必要的。信用卡公司应该能够识别欺诈性的信用卡交易,这样客户就不会为他们没有购买的商品付费。
信用卡数据集包含欺诈性交易和非欺诈性交易的混合,目标是预测给定的测试交易是否是欺诈性的。
要使用的算法:
因为目标变量是明确的,所以这个问题可以用一系列机器学习算法来解决,比如—
- 逻辑回归
- 决策树
- 神经网络之类的。
R 和 Python 中的示例代码
[## 数据科学项目-在 R-data flare 中使用机器学习检测信用卡欺诈
这是 DataFlair 设计的 R 项目系列的第三部分。之前我们谈到了优步数据分析项目…
数据-天赋.培训](https://data-flair.training/blogs/data-science-machine-learning-project-credit-card-fraud-detection/) [## 信用卡欺诈检测项目
使用 Kaggle 笔记本探索和运行机器学习代码|使用信用卡欺诈检测数据
www.kaggle.com](https://www.kaggle.com/mendozav/credit-card-fraud-detection-project)
2.客户细分
客户细分是将客户群划分为多个群体的过程,这些群体在向他们推销产品的方式上具有相似性,如性别、年龄、兴趣、人口统计、经济状况、地理位置、行为模式、消费习惯等..
客户细分是无监督学习最重要的应用之一。使用聚类技术,公司可以确定几个客户群,使他们能够瞄准潜在的用户群。
公司使用聚类过程来预测或映射具有相似行为的客户群,以识别和锁定潜在用户群。
要使用的算法:
K-means 聚类和层次聚类是最常用的聚类方法。其他一些聚类算法有:
- 分割方法
- 模糊聚类
- 基于密度的聚类
- 基于模型的聚类
此外,一旦收集了数据,公司可以更深入地了解客户的偏好和需求,以发现有价值的细分市场,从而获得最大利润。这样,他们可以更有效地制定营销策略,并最大限度地降低投资风险。
R 和 Python 中的示例代码
[## 数据科学项目-在 R-data flare 中使用机器学习进行客户细分
在这个数据科学 R 项目系列中,我们将执行机器学习最重要的应用之一…
数据-天赋.培训](https://data-flair.training/blogs/r-data-science-project-customer-segmentation/) [## 客户细分
使用 Kaggle 笔记本探索和运行机器学习代码|使用来自电子商务数据的数据
www.kaggle.com](https://www.kaggle.com/fabiendaniel/customer-segmentation)
3.情感分析
情绪,定义为对一种情况或事件的看法或态度;意见是数据科学领域的一个重要话题。鉴于它在当今社交媒体时代的最大相关性以及它可以解决的大量商业问题,它已经成为该领域迄今为止最热门的话题之一。
在情感分析的帮助下,你可以发现文件、网站、社交媒体时间线等反映的观点的性质。人类应该有一系列的情绪,从快乐,悲伤,愤怒,积极或消极,沮丧,仇恨,爱,等等..
在当今时代,任何数据驱动的组织都必须从情感分析模型中吸取结果,以确定其消费者和目标客户对产品或服务的态度。
Twitter 情绪分析是一个必须一直运行的模型。一些情报机构执行情感分析以
要使用的算法:
- 朴素贝叶斯
- 决策树
- 包装 Tidytext
R 和 Python 中的示例代码
[## 顶级数据科学项目——R-Data flare 中的情感分析项目
今天,我们开始我们的 R 系列项目,第一个是情感分析。因此,在本文中,我们将…
数据-天赋.培训](https://data-flair.training/blogs/data-science-r-sentiment-analysis-project/) [## (教程)简化 Python 中的情感分析
机器学习的前景已经在各种各样的领域显示出许多惊人的结果。自然语言…
www.datacamp.com](https://www.datacamp.com/community/tutorials/simplifying-sentiment-analysis-python)
4.语音情感识别
在人类所能做的活动中,很多都是由语言和与场景、产品或经历相关的情感所控制的。
SER 是语音情感识别的首字母缩写,可能是今年夏天要做的一个引人注目的数据科学项目。它试图从语音(声音样本)中感知人类的情感。此外,为了观察人类情感,不同的声音文件被用作数据集。SER 本质上关注于从音频记录中提取情感的特征提取。
在用 Python 做项目的时候,你也可以在用于分析音乐和音频的包 Librosa、上积累知识。
Vox 名人数据集可以是执行语音情感识别的良好起点。
要使用的算法:
- 卷积神经网络(CNN)
- 递归神经网络(RNN)
- 神经网络
- 高斯混合模型(GMM)
- 支持向量机(SVM)
Python 中的示例代码
[## Python 迷你项目——用 librosa 进行语音情感识别
语音情感识别,有史以来最好的 python 迷你项目。最好的例子可以在呼叫中心看到。如果…
数据-天赋.培训](https://data-flair.training/blogs/python-mini-project-speech-emotion-recognition/) [## 一起打造更好的软件
GitHub 是人们构建软件的地方。超过 5000 万人使用 GitHub 来发现、分享和贡献超过…
github.com](https://github.com/topics/speech-emotion-recognition)
5.预测分析
预测分析的目的是预测未来的未知事件。
它包括从预测建模、机器学习和数据挖掘的各种统计技术,分析当前和历史事实以识别风险和机会。
例题 :
- 贷款预测数据:预测贷款是否会获得批准
- 预测暖通空调需求:将天气预报与建筑系统相结合
- 客户关系管理
- 临床决策支持系统
- 客户和员工保留率:流失率
- 项目风险管理
R 和 Python 中的示例代码
[## RPubs
编辑描述
rpubs.com](https://rpubs.com/ankit2106/277447) [## 房屋贷款预测
使用 Kaggle 笔记本电脑探索和运行机器学习代码|使用来自房屋贷款的数据
www.kaggle.com](https://www.kaggle.com/sazid28/home-loan-prediction/notebook)
6.时间序列分析和建模
时间序列是按时间顺序索引、列出或绘制的一系列数据点。
时间序列是数据科学中最常用的技术之一,在天气预报、销售预测、年度趋势分析、跟踪预测、网站流量、竞争地位等方面有着广泛的应用。
商业公司一次又一次地研究时间序列数据来分析未来的数字。
通过时间序列分析,我们可以了解每小时观看的广告、每天的游戏内货币支出、产品趋势的变化、等。
R 和 Python 中的示例代码
概述时间序列分析和时间序列建模是强有力的预测工具
www.analyticsvidhya.com](https://www.analyticsvidhya.com/blog/2015/12/complete-tutorial-time-series-modeling/) [## 话题 9。第一部分。Python 中的时间序列分析
使用 Kaggle 笔记本探索和运行机器学习代码|使用来自 mlcourse.ai 的数据
www.kaggle.com](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python)
7.回归分析
回归分析的目的是根据历史数据预测结果。
回归分析是一种稳健的统计检验,允许检查两个或多个感兴趣的变量之间的关系。虽然回归分析有很多种类型,但核心都是检查一个或多个自变量对目标(因变量)的影响。
例子 :
- 沃尔玛销售数据:预测一家商店的销售额
- 波士顿住房数据:预测业主自住房屋的中值
- 葡萄酒质量预测:预测葡萄酒的质量
- 黑色星期五销售预测:预测一个家庭的购买量
要使用的算法:
取决于目标变量的性质:数字还是分类
- 购物车-因素目标
- 决策树—因素目标
- 线性回归—数字目标
- 逻辑回归—因素目标
8.推荐系统
推荐系统是一个平台,它使用过滤过程,并根据用户的偏好和喜好为其提供各种内容。
推荐系统将关于用户的信息作为输入,并使用机器学习模型从参数评估中返回推荐。从亚马逊到 Zappos,推荐系统无处不在;数据科学家需要了解的典型机器学习算法。
例如,网飞向您推荐与您的浏览历史相似的电影或节目,或者与您有相似浏览经历的其他用户过去看过的电影或节目。
有两种类型的推荐系统
- 基于内容的推荐系统:根据用户提供的数据提供推荐。基于该数据,生成用户简档,然后使用该简档向用户提出建议。随着用户提供更多的输入或对推荐采取行动,引擎变得越来越准确。
- 协同过滤推荐:提供关于可能具有相似观看历史或偏好的其他用户的推荐。
R 和 Python 中的示例代码
[## 机器学习项目-R-Data flare 中的数据科学电影推荐系统项目
你有没有上过像网飞、亚马逊 Prime、Voot 这样的在线流媒体平台?我看了一部电影,过了一会儿…
数据-天赋.培训](https://data-flair.training/blogs/data-science-r-movie-recommendation/) [## Python 教程中的推荐系统
推荐系统是当今数据科学最流行的应用之一。它们被用来预测…
www.datacamp.com](https://www.datacamp.com/community/tutorials/recommender-systems-python)
9.探索性数据分析
探索性数据分析(EDA)实际上是数据分析过程的第一步。在这里,你要弄清楚你所拥有的数据,弄清楚你想问什么问题,如何框定它们,最好地操纵它以得到需要的答案。
EDA 使用可视化和定量的方法,在现有数据中展示了模式、趋势、异常值、意外结果等的广泛外观。有大量的项目可以通过探索性数据分析来完成。在这里,我列出了供参考或作为一个很好的起点。
示例:
感谢您的阅读!我希望你喜欢这篇文章。请务必告诉我,在你的数据科学之旅中,你希望在这个夏天学习或做什么项目?
快乐数据 Tenting!
免责声明:本文表达的观点仅代表我个人,不代表严格的观点。
了解你的作者
拉什是芝加哥伊利诺伊大学的研究生。她喜欢将数据可视化,并创造有见地的故事。当她不赶着赶学校的最后期限时,她喜欢喝一杯热巧克力,写一些关于技术、UX 等的东西。
9 大 Jupyter 笔记本扩展
改进笔记本电脑功能,提高您的工作效率

图片由 Syaibatul Hamdi 来自 Pixabay
简介
Jupyter Notebook 可能是数据科学家最常用的工具。它允许在一个文档中混合代码、文本和检查输出。
这在其他一些编程 ide 中是不可能的。然而,Jupyter 笔记本的普通版本并不完美。
在本文中,我们将向您展示如何通过安装一些有用的扩展来稍微改善它。
什么是 Jupyter 笔记本扩展?
Jupyter 笔记本扩展是在后台运行并扩展笔记本功能的 JavaScript 代码。一个扩展将负责一个特定的特性,并且可以根据需要安装或删除。
启用扩展
为了开始使用扩展,您需要通过运行 pip 命令来安装功能:
pip install jupyter_contrib_nbextensionspip install jupyter_nbextensions_configuratorjupyter contrib nbextension install
现在,您已经完成了该操作,可以启动 Jupyter 笔记本并转到 Nbextension 选项卡。

我现在要分享我最喜欢的扩展,所以一定要检查它们的盒子并试用它们。
拼写检查器
这个扩展是 markdown 代码的拼写检查器。它只会突出拼写错误的单词。

目录
这个扩展向笔记本添加了一个目录。可以通过下面屏幕截图中以红色突出显示的按钮来激活和停用它。

您可以单击目录中的任何标题,然后您将被带到笔记本的相应部分。
当您使用包含大量内容的笔记本电脑时,这是一个非常好的功能。
可折叠标题
这是另一个帮助你浏览笔记本的扩展。
一旦您安装了它,您将能够折叠或展开标题下的部分,切换出现在标题文本旁边的右侧。

自动编程 8
这是一个帮助你根据 PEP 8 标准格式化你的代码的扩展。它将删除不需要的空格,或者在需要时添加空行,或者应用 PEP8 中概述的任何其他格式。
为了安装,您必须安装 autopep8 库。您可以通过运行以下命令来实现:
pip install autopep8
现在,为了使用它,您需要选择需要格式化的单元格,并单击菜单中的锤子按钮。

因此,应用格式后,上面单元格中的代码将如下所示。

请注意,等号周围的空格在参数 figsize=(15,10)中被删除。
此外,在 for 循环中“I”变量之前偶然出现的额外空格也被删除。
执行时间
这个扩展允许您计时运行一个单元需要多长时间,并通知您最近一次执行的时间。信息显示在每个单元格的下方。

这是一个非常有用的功能。在重新运行细胞之前,你知道需要多长时间。
这将帮助您避免在不需要的情况下重新运行需要很长时间执行的单元。
切换所有行号
这是一个非常简单的扩展,允许你使用面板菜单中的一个按钮来打开和关闭代码单元格中的行号。

可变督察
启用后,可以通过选择面板菜单中标记为红色的按钮来使用该扩展(在下面的屏幕截图上)。
一旦您选择了它,您将看到关于您在当前名称空间中的所有变量的信息。您将能够看到变量的名称、类型、大小、形状和值。

隐藏代码
这个扩展允许你隐藏笔记本中的所有代码,这样你就可以只关注输出。
为了隐藏和恢复代码,您可以使用面板中的眼睛按钮。

跳过追溯
这个扩展允许您在代码中抛出错误时跳过回溯。它显示的不是完整的回溯,而是错误名称和简短的错误描述。
这就是没有扩展的 Jupyter 的正常误差。

这就是跳过追溯扩展的样子。

它允许您快速确定错误的原因,如果回溯时间很长,它尤其有用。
它还允许您扩展回溯并查看整个版本。
总结
我已经使用这些扩展有一段时间了,有些是绝对的救星。
试用它们,设置它们真的不需要很多时间,它们肯定会让你的笔记本更实用,提高你的工作效率。
此外,如果你想学习一些更高级的扩展,请查看这篇文章。这是你现在正在阅读的文章的后续。
安装这些 jupyter 笔记本扩展来提高您的工作效率。
towardsdatascience.com](/jupyter-notebook-extensions-part-2-55fdb2c38348)
原载于 about data blog . com:9 大 Jupyter 笔记本扩展,2020 年 6 月 24 日。
PS:我正在 Medium 和上撰写深入浅出地解释基本数据科学概念的文章。你可以订阅我的* 邮件列表 *每次我写新文章都会收到通知。如果你还不是中等会员,你可以在这里加入。**
下面是一些你可能会喜欢的帖子
学习如何使用折线图、散点图、直方图、箱线图和其他一些可视化技术
towardsdatascience.com](/9-pandas-visualizations-techniques-for-effective-data-analysis-fc17feb651db) [## python 中的 lambda 函数是什么,为什么你现在就应该开始使用它们
初学者在 python 和 pandas 中开始使用 lambda 函数的快速指南。
towardsdatascience.com](/what-are-lambda-functions-in-python-and-why-you-should-start-using-them-right-now-75ab85655dc6) [## Jupyter 笔记本自动完成
数据科学家的最佳生产力工具,如果您还没有使用它,您应该使用它…
towardsdatascience.com](/jupyter-notebook-autocompletion-f291008c66c)**
VSCode 中面向数据科学家的 9 大键盘快捷键
用这 9 个键盘快捷键提高你的编码速度

动机
作为一名数据科学家,你可能会发现自己在电脑和键盘上花了很多时间。如果建筑工人有他的电动工具,数据科学家有他们的键盘作为他们的随身工具。如果你能找到一种方法来更有效地使用你的工具,你将为自己节省很多时间。这就是为什么我是键盘快捷键的忠实粉丝。
如果你不经常使用键盘快捷键,是时候换一个了。掌握键盘快捷键可能需要一点时间,但是一旦你掌握了它们,你会发现自己不用鼠标就能更快地编码。如果你用键盘快捷键每天节省 30 分钟,你就可以每周有 3.5 小时!
VSCode 是我最喜欢的 IDE,因为它有用的键盘快捷键和扩展。我介绍了对 视图代码 和 的一些扩展,其中包含了 Python的最佳实践,但我还没有深入研究键盘快捷键。
VSCode 中有许多键盘快捷键,它们可能会让你不知所措。在本文中,我将缩小范围,只列出我最常用的 9 个键盘快捷键。
如果你觉得要记的东西太多,就把这些键盘快捷键写在一张小纸上,当你学习这些键盘快捷键时,把它作为一个提醒。即使你能从这篇文章中学到 1 个键盘快捷键,那也已经比不使用任何键盘快捷键帮助你更快地编码了。
基本编辑
****注:本节列出的快捷键可用于不同的编辑器,如 Medium 或 Word。
将选择扩展到下一个或上一个单词
使用 Shift + Ctrl +左/右扩展选择到下一个或上一个单词比使用鼠标选择特定文本或使用 Shift +左扩展选择到下一个或上一个字符更快。
对于 Mac 用户: Option + Shift +左/右

选择从当前光标到行尾或行首的单词
如果你想选择从当前光标到行尾的单词,你可以使用 Shift + Ctrl + Left/Right 来扩展选择到下一个或上一个单词,就像上面提到的,但是有一个更快的方法。
使用下面的 Shift + End 将选择从当前光标扩展到行尾。

要将选择从当前光标扩展到行首,使用 Shift + Home 。

虚拟代码快捷方式
删除该行而不突出显示整行
如果你一直通过高亮显示整行来删除该行,然后键入 Backspace,有一种比这更快的方法。只需键入 Ctrl + X 。现在整行都删了!
对于 Mac 用户: Command + Shift + K

缩进/突出行
当然,您可以使用 Tab 来缩进一行,但是如果您想要突出一行呢?这时候 Ctrl +左/右就变得得心应手了。
只需选择您想要缩进或突出的行,然后键入 Ctrl +左/右。
对于 Mac 用户: Command + Left/Right

加注释
如果您一次手工注释掉每一行,那么是时候向上切换了。使用 Ctrl + / 注释掉和取消注释您突出显示的代码。
对于 Mac 用户:命令+ /****

立刻改变相似的单词
当您想要更改变量的名称时,您可能想要一次更改所有变量,而不是手动更改每个变量。突出显示您想要更改的变量,然后键入 Ctrl + Shift + L 来一次选择相似的变量。
对于 Mac 用户: Command + Fn + F2

在上方或下方插入光标
你有没有想过像下面这样在光标上方或下方固定几行?一个快速的方法是使用 Shift + Alt + Up/Down。
对于 Mac 用户: Command + Option + Shift +上/下

在选定的每一行的末尾插入光标
如果您想从行尾开始一次修改几行代码,突出显示您想修改的代码行,并使用 Shift + Alt + I
对于 Mac 用户: Option + Shift + I

向上或向下移动线条
要上下移动该行,不要复制整行,删除该行,最后粘贴到另一个位置,如果新位置不远,使用 Alt + Up/Down 代替。
对于 Mac 用户:选项+向上/向下****

结论
恭喜你!您刚刚在普通编辑器和 VSCode 中学习了 9 个键盘快捷键!一旦你掌握了这些键盘快捷键,你会看到你的手指在键盘上飞舞。你不仅可以更快地编码,还会发现它很有趣!
特别感谢帕特里克·达席尔瓦为 Mac 用户提供键盘快捷键。
我喜欢写一些基本的数据科学概念,并尝试不同的算法和数据科学工具。你可以在 LinkedIn 和 Twitter 上和我联系。
星这个回购如果你想检查我写的所有文章的代码。在 Medium 上关注我,了解我的最新数据科学文章,例如:
** [## 我收集了超过 1k 的顶级机器学习 Github 配置文件,这就是我的发现
从 Github 上的顶级机器学习档案中获得见解
towardsdatascience.com](/i-scraped-more-than-1k-top-machine-learning-github-profiles-and-this-is-what-i-found-1ab4fb0c0474) [## 可视化的 6 大 Python 库:使用哪一个?
对使用哪种可视化工具感到困惑?我为你分析了每个图书馆的利弊
towardsdatascience.com](/top-6-python-libraries-for-visualization-which-one-to-use-fe43381cd658) [## Hydra.cc 简介:配置数据科学项目的强大框架
尝试不同的参数和模型,而无需花费数小时来修改代码!
towardsdatascience.com](/introduction-to-hydra-cc-a-powerful-framework-to-configure-your-data-science-projects-ed65713a53c6) [## 模式介绍:验证数据的 Python 库
验证您的数据变得更加复杂!
towardsdatascience.com](/introduction-to-schema-a-python-libary-to-validate-your-data-c6d99e06d56a)**
2020 年数据科学的 9 大语言
在 256 种编程语言中,要知道哪一种是用于数据科学的!

很长一段时间以来,数据科学一直是一件大事。在当今快速发展的技术世界中,当人类倾向于生成大量数据时,我们知道如何分析、处理和使用这些数据来获得更深刻的商业见解是至关重要的。
关于数据科学的Python vs R已经说得够多了,但是我在这里不讨论它。我们需要他们两个,仅此而已。我为数据科学创建了一个 10 大编程语言的列表,你可以在 2020 年学习,同时还有一些时间回到户外😐
根据语言的受欢迎程度、Github 提及次数、利弊以及它们与 2020 年数据科学的相关性,这些语言被列入了名单。
1.计算机编程语言
你需要的只是 Python。Python 就是你需要的全部。

来源: Python 软件基础
关于为什么 Python 是数据科学的语言,我可以写几十个故事。
由于其多功能性,数据科学家可以使用 Python 解决几乎所有与数据科学过程相关的问题。
为什么是 Python?
Python 面向对象的特性有助于数据科学家以更好的稳定性、模块化和代码可读性来执行任务。虽然数据科学只是多样化的 Python 生态系统的一小部分,但 Python 拥有丰富的专业深度学习和其他机器学习库以及流行的工具,如 scikit-learn、Keras 和 TensorFlow。毫无疑问,Python 使数据科学家能够开发出可以直接插入生产系统的复杂数据模型。
根据 Python 开发者的调查结果,84%的受访者将 Python 作为他们的主要语言,而 16%的受访者将 Python 作为他们的第二语言。
Python 中的数据
对于 数据采集 ,Python 支持 CSV、JSON、SQL 表,以及美汤的 web 报废。
数据分析 库为 Python,熊猫是你能得到的最好的数据探索。熊猫被组织成数据框架,可以轻松地过滤、分类和显示数据。
对于 , 的数据建模
- NumPy —数值模拟分析
- 科学计算和计算
- sci kit-learn-访问众多强大的机器学习算法。它还提供了一个直观的界面,允许数据科学家利用机器学习的所有功能,而不需要太多的复杂性
对于 数据可视化 ,matplotlib、plot.ly、nbconvert 将 Python 文件转换为 HTML 文档,拼出漂亮的图形和仪表盘,帮助数据科学家用力量和美感表达研究结果。
2.稀有

来源: R 基金会
r 是一个开源工具,允许数据科学家跨平台使用许多操作系统。统计是这项技术的核心优势。r 不仅仅是一种语言,而是一个完整的生态系统来执行统计计算。它有助于执行数据处理、数学建模、数据可视化等操作。
R 中的数据
r 支持 Excel,CSV,text 文件,Minitab 或 SPSS 文件格式,用 Rvest 进行 web 报废,以及此类文件格式用于 数据采集。
r 是为了对大型数据集进行统计和数值分析而构建的,因此,有大量的操作可用于【数据探索】—排序数据、转置表、创建图表、生成频率表、采样数据、概率分布、合并数据、变量转换等等。探索 dplyr,tidyr 以获得最佳结果。
r 是一个适合科学可视化的健壮环境,它有许多专门为 数据可视化 的结果提供图形显示的软件包。我们可以使用图形模块获得基本图形、图表和绘图。可视化也可以保存为图像格式,如 jpg。,或单独的 pdf。ggplot2 是高级图的福音,例如具有回归线的复杂散点图。
R vs Python
对于数据科学来说,Python 和 R 之间的争论永无止境,但是我们作为数据科学家需要明白,虽然两者都有优点,但也有缺点。
大多数程序员认为这种或那种编程语言是他们的“首选”。比方说,R 用户有时渴望 Python 语言内置的面向对象特性。类似地,一些 Python 用户梦想在 r 中获得大范围的统计分布。这意味着很有可能在一个项目中结合这两种领先的技术来获得一组独特的互补函数。
3.斯卡拉

Scala 是面向对象和函数式编程在一种简洁的高级语言中的结合。这种语言最初是为 Java 虚拟机(JVM)而构建的,Scala 的优势之一是它使与 Java 代码的交互变得非常容易。
为什么选择 Scala?
学习 Scala 进行数据科学研究的主要原因之一可以归功于 Apache Spark。Scala 与 Apache Spark 结合使用来处理大数据量(大数据),这对数据科学家来说是非常宝贵的。
许多构建在 Hadoop 之上的高性能数据科学框架通常是用 Scala 或 Java 编写和使用的。在这些环境中使用 Scala 的原因是因为它的快速并发支持。由于 Scala 运行在 JVM 上,所以当它与 Hadoop 配对时几乎是显而易见的。
为什么不是 Scala?
Scala 唯一的缺点是它的学习曲线。此外,社区并不广泛,因此,在出现错误的情况下,自己寻找问题的答案变得很乏味。
当数据量足以实现技术的全部潜力时,Scala 非常适合项目。
4.斯堪的纳维亚航空公司

来源: SAS 品牌标识
SAS —统计分析系统
就像 R 一样,SAS 是为高级数据分析和复杂统计操作而开发的工具。它是一个闭源的专有工具,提供了各种各样的统计功能来执行复杂的建模。由于其高可靠性,SAS 主要由大型组织和专业人员使用。
为什么选择 SAS?
请注意,SAS 不是最适合初学者和独立数据科学爱好者的工具,因为 SAS 是为满足高级业务需求而定制的。然而,如果你打算将数据科学作为你的职业,那么拥有 SAS 的操作知识是一个很好的实践。
SAS 擅长通过 SAS Base 执行统计建模 SAS Base 是运行 SAS 环境的主要编程语言。
为什么不是 SAS?
虽然 SAS 已经成为企业分析领域无可争议的市场领导者,但要将其功能与 Python 或 R 进行比较,SAS 似乎很难对数据进行建模和可视化。学习曲线很复杂,通常被预算庞大的大公司使用。
SAS 为数据科学家提供多种认证计划。他们中的一些人:
SAS 数据科学学院提供数据管理,高级分析,人工智能和机器学习的课程,所以你…
www.sas.com](https://www.sas.com/en_us/training/academy-data-science.html) [## SAS 程序员专业证书| Coursera
用 SAS 证书开始你的职业生涯。掌握 SAS 基础程序员认证所需的技能。基础…
www.coursera.org](https://www.coursera.org/professional-certificates/sas-programming)
5.朱莉娅

来源:GitHubViralBShah
Julia 语言处理数据的速度比 Python、JavaScript、Matlab、R 快,性能上略逊于 Go、Lua、Fortran、c,数值分析是技术的强项,但 Julia 也能很好地应对通用编程。
为什么是朱莉娅?
Julia 比其他脚本语言更快,允许数据科学家快速开发 Python/MATLAB/R,同时生成快速的代码。
有了 Julia 数据生态系统,多维数据加载就变得很快。它并行执行聚合、连接和预处理操作。Julia 包括各种数学库、数据操作工具和通用计算包。除此之外,与 Python、R、C/Fortran、C++和 Java 的库集成也非常容易。
为什么不是朱莉娅?
由于 Julia 不是一个完全成熟的工具,所以社区仍然很窄。在查找错误或故障时,有限的选项或解决方案可能会成为障碍。行业专家非常希望,当 Julia 变得更加成熟时,它将能够与 Python 和 R 充分竞争。
6.a MATLAB

来源:MathWorks Logo—MATLAB&Simulink
MATLAB 是第一个用于数据科学的工具。我在 2017 年开始学习数据科学,吴恩达在 Coursera 上开设了机器学习课程,他在课堂上使用了 Octave。与此同时,我在本科班学习 MATLAB,在 Coursera 班练习 MATLAB。
我知道 MATLAB 是执行深奥数学运算的最佳编程语言。虽然数据科学也与数学有关,但它使这项技术成为数学建模、图像处理和数据分析的强大工具。
为什么是 MATLAB?
它拥有一个庞大的数学函数库,用于线性代数、统计、傅立叶分析、滤波、优化、数值积分和求解常微分方程。MATLAB 提供了用于可视化数据的内置图形和用于创建自定义绘图的工具。
为什么不是 MATLAB?
现在,数据科学家很少使用 MATLAB,尽管他们说它非常适合数学和建模。随着 R 和 Python 在数据科学领域的出现,MATLAB 一直在走下坡路。鉴于高昂的许可费用,它在学术界也更受欢迎。
数据科学使用的语言很大程度上取决于您正在解决的问题。如果您的问题需要复杂的数学计算,没有比 MATLAB 更好的起点了,至少对于最初的数据探索和初步结果来说是这样。
6.b 八度

来源:【Octave.org GNU
它是 MATLAB 的主要替代品。总的来说,这两种技术没有非常根本的区别,只是一些小的例外。和 MATLAB 一样,如果需要强大的算术计算,Octave 可以用在数据量相对较小的项目中。
7.Java 语言(一种计算机语言,尤用于创建网站)

来源: Java —徽标下载
Java 可能是用于编程和商业开发的最古老的面向对象语言之一。Hive、Spark 和 Hadoop 等大多数知名大数据工具都是用 Java 编写的。Java 有大量我们可能不知道的用于数据科学的库和工具,比如 Weka、Java-ML、MLlib 和 Deeplearning4j。
为什么是 Java?
对于数据科学来说,Java 可能肯定不是一种显而易见的语言,但由于运行在 Java 虚拟机(JVM)上的 Hadoop 等数据科学框架,它是数据科学的顶级编程语言之一。
Hadoop 是一个流行的数据科学框架,用于管理大数据应用程序的数据处理和存储。鉴于其一次处理无限任务的能力,Hadoop 支持存储和处理大量数据。
总之,如果您想享受 Hadoop 框架的功能,Java 是最好的数据科学编程语言之一。
8.Perl 语言

来源: PNGWing
Perl 是由两种高级、通用、解释型、动态编程语言组成的家族。Perl 能够更有效地处理数据查询,因为该语言依赖于轻量级数组,这不需要程序员太多的关注。
为什么是 Perl?
由于其作为通用脚本语言的多功能性,它与 Python 有很多共同之处,是一种动态类型的脚本语言。Perl 在生物信息学、金融和统计分析等定量领域都有应用。
随着 Perl 5 的发布,处理大型数据集的能力比以前的版本好得多。它正在成为 Perl 6 的“大数据精简版”。波音、西门子和更多的财富 500 强公司已经准备好为数据科学积极尝试 Perl。
Perl 通过编排大规模的数据插入和查询,用简单、可维护的体系结构映射或减少万亿字节的数据。对于 Perl 6,计划是提供一个模块化、可插拔的架构,具有大数据管理的灵活性和可定制性。
为什么不是 Perl?
Perl 不是一种语言,学习它本身就能让你成为一名高效的数据科学家。它不够快,语法也不友好。由于它是一种相对冷门的语言,社区对数据科学的支持一直较少。值得一提的是,“Perl 开发人员”社区正在变得越来越富裕。总的来说,还没有将 Perl 开发成数据科学语言的动力。
9.哈斯克尔

Haskell 是一种通用的、静态类型的、带有类型推断的纯函数式编程语言。
为什么是哈斯克尔?
Haskell 拥有强大的金融代码基础,而 Haskell 可以轻松地与 Excel 交互进行计算。它对数学概念的编码很有好处。更一般地说,Haskell 擅长于抽象,所以数据科学从 Haskell 的一致抽象中获益,就像其他数学或软件工具一样多。
Haskell 还可以用 HaskellR 直接对 R 中的值进行操作。
Haskell 拥有 D ataHaskell ,这是一个开源资源,通过利用 Haskell 编程语言来进行可靠且可重复的数据科学和机器学习开发。Haskell 中的数据科学社区肯定会随着 DataHaskell 的发展而发展。请务必在这里查看!
Target 的首席人工智能科学家说“Haskell 更富表现力,更快,更安全。Haskell 传统上没有被用于数据科学,因此库的选择是有限的。Haskell 对数学有一种亲切感,但最终它的类型系统和数学性对特定领域的业务代码帮助最大。
为什么不是哈斯克尔?
Haskell 有一个作为数据科学语言的应用程序,然而,像 Python 或 r 一样,仅仅了解 Haskell 是不够的。Haskell 在数据科学能力方面不够健壮。学习曲线本质上是困难和耗时的。
感谢您的阅读!我希望你喜欢这篇文章。请务必让我知道您一直在使用哪种语言,以及您希望在这个夏天的数据科学之旅中发现哪种语言?
快乐数据 Tenting!
免责声明:本文表达的观点仅代表我个人,不代表严格的观点。
了解你的作者
拉什是芝加哥伊利诺伊大学的研究生。她喜欢将数据可视化,并创造有见地的故事。当她不赶着赶学校的最后期限时,她喜欢喝一杯热巧克力,写一些关于技术、UX 等的东西。*
Python 和 R 中数据可视化的 9 大库
为你的下一个项目选择正确的数据 viz 库...

在当今快速发展的世界中,技术正以前所未有的速度发展,大数据正迅速走进人们的生活。虽然人们可能有获得数据的方法,但当涉及到用它得出见解或结论时,存在一个令人挠头的问题,因为数据太多了。
正如他们所说,一张图片胜过千言万语,高管和非技术决策者严重依赖并偏好可视化和信息图表来理解潜在的业务见解,并向利益相关方传达/推介。数据驱动的决策正在走向顶端,我们需要确保对艺术工具保持乐观。
话虽如此,本周我还是整理了我使用过、发现过或听说过的最棒的库,这些库提供了很好的数据可视化和额外的好处!让我们来了解一下这些库,,排名不分先后。
1.matplotlib
OG Python 库,用数据创造故事。SciPy 堆栈中的另一个库 Matplotlib 主要绘制 2D 图形。
什么时候使用?Matplotlib 是 Python 的典型绘图库,它提供了一个面向对象的 API,用于将绘图嵌入到项目文件或应用程序中。我发现 Matplotlib 与嵌入 Python 编程语言的 MATLAB 非常相似。
你能用 Matplotlib 做什么?
直方图,条形图,散点图,面积图到饼图,Matplotlib 可以描绘各种各样的 2D 可视化。使用 Matplotlib,只需一点努力和可视化功能,您就可以创建任何可视化效果:
- 线形图
- 散点图
- 面积图
- 条形图和直方图
- 饼图
- 树干图
- 等高线图
- 颤动图
- 光谱图
Matplotlib 还通过 Matplotlib 简化了标签、网格、图例和其他一些格式化实体。基本上能画的都画了!
作者:约翰·d·亨特
了解更多:matplotlib.org
2.海生的
当你阅读 Seaborn 的官方文档时,它被定义为基于 Matplotlib 的数据可视化库,为绘制有吸引力和信息量大的统计图形提供了高级接口。简单来说, seaborn 是 Matplotlib 的扩展,具有高级特性。
那么,Matplotlib 和 Seaborn 有什么区别呢?
Matplotlib 用于基本绘图;条形图、饼图、线图、散点图等等,而 seaborn 提供了各种高级可视化模式,具有更少的复杂性和语法。
你能用 Seaborn 做什么?
- 确定多个变量之间的关系(相关性)
- 观察聚合统计的分类变量
- 分析单变量或双变量分布,并在不同的数据子集之间进行比较
- 绘制因变量的线性回归模型
- 提供高级抽象、多绘图网格
创作人:迈克尔·瓦斯科姆,可用模式
哪里了解更多:http://web . Stanford . edu/~ mwaskom/software/seaborn/index . html
3.Plotly
Plotly 又是一个 Python 的图形绘制库。用户可以导入、复制、粘贴或流式传输要分析和可视化的数据。
Python 中的每个数据 viz 库互不相同,同时在一些特性上也有重叠。就可用的 viz 范围而言,Plotly 与 matplotlib 有许多重叠,就高级功能而言,plotly 与 seaborn 有许多重叠。
何时使用 Plotly?
如果您想要创建和显示图形、更新图形、悬停在文本上查看详细信息,您可以使用 Plotly。Plotly 还有一个额外的功能,就是把数据发送到云服务器。真有意思!
你能用 Plotly 做什么?
Plotly 图形库提供了大量可供绘制的图形:
- 基本图表: 折线图、饼图、散点图、气泡图、圆点图、甘特图、旭日图、树形图、填充区域图
- 统计和 Seaborn 风格 :误差、方框、直方图、面和格子图、树形图、小提琴图、趋势线
- 科学图表: 等高线、三元图、对数图、箭图、地毯图、雷达图、风玫瑰图和极坐标图
- 财务图表
- 地图
- 支线剧情
- 转换
- Jupyter Widgets 交互
想想可视化和 Plotly 可以做到这一点!
创建者: Plotly ,可用模式
哪里了解更多:https://plot.ly/python/
4.散景
另一个来自 Python 家族的例子,我想称之为交互式数据可视化库——Bokeh 允许用简单的命令快速构建复杂的统计图。
散景受欢迎的原因和它在我的列表中的位置是因为散景使数据在视觉上有吸引力,迫使人们关注可视化的特定区域。Bokeh 还可以很好地与 D3.js 配合使用,为非常大的数据集或流数据集创建高交互性的交互式可视化。
有趣的事实:【Bokeh(也叫“boke”)这个词来自日语,翻译过来就是模糊。
你能用散景做什么?
- 优雅、简洁的多功能图形结构
- 在大型或实时数据集上扩展高性能交互性
- 快速轻松地创建交互式绘图、仪表板和数据应用程序
- 利用 HTML、笔记本或服务器输出
- 将散景可视化集成到 Flask 和 Django 应用程序或其他库中编写的可视化,如 matplotlib、seaborn、ggplot。
创建者:【http://bokeh.pydata.org/en/latest/】连续统分析
哪里了解更多:
5.geoplotlib

Choropleth ( 安德里亚·卡顿 )
geoplotlib,主要用于创建地图和绘制地理数据的工具箱可用于创建各种地图类型,如柱状图、热图或点密度图。因为大多数 Python 数据可视化库不提供地图,所以最好有一个专门用于它们的库,而不要从 Tableau 中查找外部的 viz。
我最喜欢的一个特性是色图——将真实值转换成颜色。
我不知道你能用 geoplotlib 做什么,因为它本质上是一个地图绘制库。
创建者:【https://github.com/andrea-cuttone/geoplotlib】安德里亚·卡通
了解更多信息
6.D3.js
说到数据可视化,怎么能不谈 D3 。js,SVG 矢量图形的主流工具!有了 SVG,无论你放大到多深,图形看起来都不会像素化——这是最畅销的报告。
D3.js 为数据向导提供了各种图形。D3 是一个将信息加载到浏览器中并基于数据元素生成报告的框架。D3.js 并没有建议一种特定类型的图形,而是建议一种如何创建可视化的方法(根据我的最佳理解)。
用 D3.js 可以做什么?
- 分布图—小提琴图、密度图、直方图、箱线图、脊线图
- 相关性—散点图、热图、相关图、气泡图、密度图
- 排名—条形图、蜘蛛图、词云、平行图、棒棒糖图、圆形图
- 整体的一部分—树状图、甜甜圈、饼图、树状图、圆形包装
- 演变-折线图、面积图、堆积面积图、流图
- 地图-地图、choropleth、十六进制框、图表、连接
- 流量—弦图、桑基图、弧图
- 动画片
D3.js 提供了广泛的可视化,更多的可视化可以在这里探索。
7.ggplot2
r 丰富的生态系统有许多著名的制作漂亮图形的软件包,但是最流行和最常用的可视化软件包之一是 ggplot2 。
ggplot2 是 R 编程语言的 Grammar of Graphics 的 Python 实现,用于构建分层的、定制的地块。我没有发现 Tidyverse 的 ggplot2 有 seaborn 那样广泛的绘图集合,但是对于 R 来说,ggplot2 制作了最健壮的数据 viz 库(至少就我的经验而言)。如果了解更多,欢迎在评论中补充!
你能用 ggplot2 做什么?
Plotly 图形库提供了大量可供绘制的图形:
- 基本图表: 线条、轮廓、密度、抖动、条形、点、栅格、多边形、平铺、地毯、饼图、散点、气泡
- 统计图 :箱线图、直方图、小提琴图、带状图、分位数图
- 动画图表
- 边缘图表
创建者:http://ggplot.yhathq.com/t18】去哪里了解更多:t20】
8.Plotly for R
Plotly 在 R 中也可用,R 中的 Plotly 使用 plotly.js 库作为基础创建基于 web 的交互式绘图。这里的优点是它可以构建等高线图、蜡烛图、地图和 3D 图表,这些是使用 r 中的大多数包无法创建的。Plotly 还提供了一个与图表互动的机会,改变它们的比例,并指出必要的记录——将它展示给高管看。该库还支持图形悬停,有点类似于 Tableau。此外,在 knitr、R Markdown 或 Shiny 应用程序中添加 Plotly 也很容易。
你能用 R 中的 Plotly 做什么?
- 等值线图表
- 蜡烛图
- 3D 散点图(就像吴恩达的 Coursera ML class :p 中的那个)
9.臀的
pygal 也是一个创建 SVG 图形/图表的 Python 模块。我没有使用过 Pygal,但我认为它是一个高度可定制的低代码模块,但也非常简单。
像 Bokeh 和 Plotly 一样,pygal 也提供可以嵌入网络浏览器的交互式绘图。它们之间的关键区别在于它能够将图表输出为 SVG。只要您在处理较小的数据集,SVG 就能很好地满足您的需求。然而,当处理具有成千上万个数据点的大型数据集时,问题就来了,它们在渲染时会有困难,速度会变得很慢。
你能拿 pygal 怎么办?
- 曲线图
- 条形图
- 饼图
- 地图
- 定制图表
创建者:弗洛里安·穆尼尔
了解更多:http://www.pygal.org/en/latest/index.html
这就是我的博客的结尾。感谢您的阅读!我希望这有所帮助。一定要让我知道你使用过或者正在寻找学习或者探索的图书馆。如果你有更多的库,欢迎在评论中提出来!
免责声明:本文表达的观点仅代表我个人,不代表严格的观点。
了解你的作者
拉什是芝加哥伊利诺伊大学的研究生。她喜欢将数据可视化,并创造有见地的故事。当她不赶着赶学校的最后期限时,她喜欢喝一杯热巧克力,写一些关于技术、UX 等的东西。
值得关注的顶级人工智能奖学金项目
最佳人工智能实习指南。
我明白找到一份实习工作有多难,因为我经历过。尤其是发生了这么多事。今天,我们将谈论一个最好的实习项目,它专注于机器学习和数据科学。参加这些项目不仅会让你从该领域的大多数候选人中脱颖而出,还会让你获得前所未有的学习经验。
系好安全带,你的实习搜索将会有一个新的视角。
1。谷歌人工智能常驻计划

照片由 Rajeshwar Bachu 在 Unsplash 拍摄
谈到最佳实习,不谈谷歌毫无意义。谷歌是所有计算机科学专业人士和学生的梦想。
顾名思义,Google AI residency program 是一项为期 18 个月的 AI 研究计划,目标是支持下一代 AI 研究人员。所有被选中的候选人都有机会接受谷歌科学家和研究人员的指导,并与 alphabet 的团队合作。
开放申请:2021 年秋季项目。
更多信息此处
2。脸书人工智能居留项目

另一个高薪和知名的程序来自社交媒体巨头脸书的人工智能部门。候选人将学习如何在深度学习中进行研究,发表研究成果,并将学习将学术文献转化为实用代码。
具有 ML 相关专业背景,并在 ICML、ICLR、CVPR、ICCV、ACL、EMNLP 等杂志上发表过研究论文者优先考虑。
开放申请:2021 年秋季项目
更多信息点击此处
3。优步人工智能居留项目

说到鼓励创新的酷科技公司,优步无疑是出了名的。作为全球最大的打车服务之一,在该公司应用 ML 和数据科学的前景非常广阔。
这也是一个为期一年的项目,面向寻求在机器学习研究领域推进职业生涯的个人。
被选中的居民将参与一切事情,从开发新的机器学习算法到训练大规模模型,以改善数百万用户的用户体验。推荐申请的候选人具有“在机器学习或深度学习算法方面的经验,并表现出对相同内容的热情。如果你对 ML 感到兴奋,向我们展示你迄今为止所做的一切!”优步
开放申请:2021 年秋季项目
更多信息此处
4。微软人工智能常驻计划

微软于 2015 年启动了这项计划,这是另一家在人工智能研究领域领先的公司,将为候选人提供机会,在医疗保健、科学发现、生产力和游戏等一系列领域学习和部署人工智能技术和解决方案。这个项目也是一年。资格要求包括定量领域的学位,从计算机科学、物理学到经济学、人机交互和计算生物学。其他要求包括在编程和深度学习框架方面有很强的背景。
开放申请:2021 年秋季项目
更多信息此处
5。开放 AI 学者计划
当谈到人工智能的研究时,不谈论 OpenAI 会超级奇怪。
Elon Musk 的创意公司 OpenAI 负责创建开源人工智能,也是深度学习算法 GPT 的创造者。这种算法非常先进,它可以自己生成图像、文本和编写代码。让这家公司加入你的人工智能投资组合,肯定会为你在这个领域打开多扇大门。
该计划为您提供 10 个月的深度学习研究经验,并提供额外津贴,如参加 ML 会议的全额工资和津贴。
候选人必须具备以下条件才有资格参加该计划:
2 年以上软件工程经验
强大的数学背景
通过项目或经历表现出对 ML 的兴趣。
开放申请:2021 年秋季项目
更多信息点击此处
6。 IBM 人工智能派驻计划

最后但同样重要的是,IBM 的人工智能计划也是最雄心勃勃的 12 个月人工智能计划之一。他的项目旨在创造和研究人工智能的新方法,以提高应对重大技术和现实世界挑战的能力。居民将与研究科学家密切合作,建立新的人工智能技术,并在顶级研究期刊上发表他们的工作。
开放申请:2021 年秋季项目
更多信息这里
这些不是世界上唯一的人工智能程序,但它们肯定是最好的程序之一,因为它们由在机器学习和人工智能方面拥有惊人经验的人指导。
祝所有致力于推进人工智能的人一切顺利
2020 年企业的顶级人工智能平台
请通过提到的人工智能平台,看看哪一个适合您的需求。

“从长远来看,人工智能和自动化将会取代人类的目标感。”
——马特·贝拉米
多年来,企业一直手动处理他们的运营和分析,导致劳动力成本和文书工作增加,同时交付次优结果。现代时代的目标是通过引入人工智能来改变这一切。
人工智能领域的创新和改进已经产生了一些解决复杂得难以理解的问题的最聪明的解决方案。企业已经开始投资这些智能解决方案,不仅要减少流程中花费的时间和精力,还要彻底检查整个流程,以增强人工智能。通过采用人工智能,企业可以毫不费力地实现大部分运营的自动化,从而专注于做出更好的决策。
顶级人工智能平台
人工智能平台通过提供众多好处使企业能够实现其最大效率,例如接管冗余任务、为更好的决策提供更深入的数据洞察、提供高效的数据管理能力等等。
随着企业不断寻找提高产量的方法,人工智能平台对他们来说是天赐之物。最近在人工智能和机器学习方面的创新不仅让组织能够根据不断增长的需求扩展业务,还为他们提供了这样做所急需的洞察力。
通过这篇文章,我们希望揭示 10 个最出色的人工智能平台,这些平台正在为企业提供智能能力。
● 谷歌云 AI 平台
将你的机器学习项目投入生产
- 网站——https://cloud.google.com/ai-platform/
- 最佳特性 —帮助训练、分析和调整您的模型
Google 为企业提供广泛的服务,使他们能够从云中执行他们的操作,例如通过预配置的工具、数据存储服务、管理工具、一些同类最佳的安全功能等更顺畅地迁移到他们的平台。
谷歌云人工智能平台包括上述所有内容,同时提供额外的好处,例如,使用 AutoML 在谷歌的顶级基础设施上培训、部署和管理各种人工智能模型的选项,以及访问若干服务和 API,如机器学习加速器、深度学习、翻译、视觉 API、自然语言处理、视频分析。
有了这些工具,您的开发人员和数据科学家可以有效地为您的企业创建人工智能驱动的解决方案并进行协作,这些解决方案可以无缝地部署在内部或云上。
其他一些功能—
- 基于云的机器学习
- 垃圾邮件检测
- 客户情绪分析
●张量流
- 网站——https://www.tensorflow.org/
- 功能 —机器学习
- 支持的操作系统/语言/平台— 桌面、集群、移动、边缘设备、CPU、GPU、&TPU。
- 最佳功能— 适用于从初学者到专家的所有人。
- 免费试用 —可用
- 起价 —免费版
由谷歌大脑背后的团队开发的 TensorFlow 为每个人提供了机器学习能力。TensorFlow 可用于各种环境,如 JavaScript、移动、物联网和生产,允许开发人员、研究人员和数据科学家正面处理跨各种平台的复杂机器学习问题。
凭借其广泛而胜任的工具、库和 API 集合,所有技能水平的企业都可以开发一些最强大的机器学习模型,为实验和分析带来新的机会。有了 TensorFlow,企业不仅获得了提供更好体验的专业知识,还提高了效率。
其他一些功能—
- 深度灵活性
- 真正的便携性
- 自动微分
如果你是新手,那就去看看这个 TensorFlow 入门在线课程。
点击这里查看顶级谷歌人工智能工具—
使用谷歌人工智能中心将想法变为现实
towardsdatascience.com](/top-google-ai-tools-for-everyone-60346ab7e08)
● IBM 沃森工作室(加上 IBM 沃森机器学习工作室)
- 【https://www.ibm.com/cloud/watson-studio】网站 — 网站
- 最佳特性 —它能从小数据中学到很多东西
- 免费试用 —可用
- 起价 —免费版
在机器学习行业的顶级玩家中,Watson 是 IBM 的产品,可以结束您企业的人工智能和机器学习需求。Watson Studio 通过覆盖各个方面,在部署和处理您的定制机器学习模型的所有阶段提供全方位的解决方案,例如定义项目目标、数据准备、选择正确的工具、模型训练和部署。
笔记本电脑提供与团队成员的无缝协作,同时提供跨多个项目轻松访问您的数据。借助 Watson Studio,数据科学家和分析师可以访问来自 IBM 的世界级工具集,用于管理流动数据、众多项目、视觉识别、自然语言处理、通过 AutoAI 实现模型生命周期自动化等等。
其他一些特性—
- 查看您的数据
- 优化您的数据
- 深度学习集成
“有人称之为人工智能,但事实是这项技术将增强我们的能力。因此,我认为我们应该增强我们的智能,而不是人工智能。”
—IBM 执行董事长 Ginni Rome tty
●亚马逊人工智能服务
轻松为应用添加智能
网站——https://aws.amazon.com/machine-learning/
在人工智能和云计算行业的主要参与者中,亚马逊有一个广泛的服务列表,企业不仅可以利用它来更好地了解他们的客户,还可以简化他们的大量日常任务。
亚马逊人工智能提供的一些服务包括获得个性化推荐,从文档的物理副本中提取数据,使用机器学习生成预测,用户身份验证,翻译服务等等。有了这些服务,您可以确保获得高级分析并做出更好的决策。
● 微软 Azure(加上微软机器学习工作室)
- 网站——https://azure . Microsoft . com/en-us/services/machine-learning/
- 功能 —机器学习
- 支持的操作系统/语言/平台— 基于浏览器
- 最佳特性 —模型将作为 web 服务进行部署
- 免费试用 —可用
- 起价 —免费版
Azure 是一套人工智能驱动的高效工具,使企业能够以具有成本效益的解决方案在全球范围内运营。有了 Microsoft Azure,组织可以访问一系列详尽的服务,包括云计算、物联网、迁移选项、远程访问的虚拟桌面、开发人员工具、增强的安全性等等。
在Azure Machine Learning Studio的帮助下,数据科学家和开发人员可以在与团队合作的同时快速开发、训练和部署机器学习模型。对合格工具的支持是提高效率的主要贡献因素,允许更好的创新,使 Azure 成为构建和部署更智能的机器学习模型的最佳平台之一。
● H2O
- 网站【https://www.h2o.ai/】——网站
- 功能 —机器学习
- 支持的操作系统/语言/平台— 分布式内存编程
- 最佳特性— 包括 AutoML 功能
- 免费试用 — 21 天
- 起始价格 —联系供应商
H2O 是另一个人工智能平台,致力于通过让企业获得这些服务,让企业意识到人工智能和机器学习的众多好处。凭借其开源工具,H2O 为市场中的主要行业提供支持,如医疗保健、金融、电信、零售、营销、制药和其他几个行业。
通过提供详细的分析和预测,像 H2O 这样的人工智能平台可以最大限度地降低企业的市场风险,从而提高利润。凭借其可扩展的机器学习能力,它可以为高级分析、欺诈分析和个性化营销提供无缝的数据接收、模型训练和部署。
网站主页
www.h2o.ai](https://www.h2o.ai/community/home)
● 印孚瑟斯 Nia
- 网站——https://www.edgeverve.com/artificial-intelligence/nia/
- 功能 —机器学习聊天机器人
- 支持的操作系统/语言/平台— 支持的设备:Windows、Mac、&基于网络
- 最佳特性——更深入的洞察有助于更好的分析和预测
- 免费试用 —不可用
- 起始价格 —联系供应商
Infosys Nia 是一个人工智能平台,它利用机器学习和人工智能技术的力量来提供智能和高效的统一体验。通过取代他们的第一代人工智能平台 Infosys Mana ,Infosys Nia 在一个屋檐下捆绑了许多单独可用的服务。
Infosys Nia 旨在提供简单且经济高效的解决方案,为更好的分析和预测、自动化功能、根本原因分析、更轻松的迁移、数据管理等提供更深入的见解,从而更好地了解客户行为。来自任何人工智能平台的其他标准工具和服务,如自然语言处理、光学字符识别、流程自动化等,也预装在 Infosys Nia 中。
● 销售力量爱因斯坦
- 网站——https://www.salesforce.com/products/einstein/overview/
- 功能 — CRM 系统
- 支持的操作系统/语言/平台— 基于云
- 最佳特性 —无需管理模型和数据准备
- 免费试用 — 30 天
- 起始价格 —联系供应商
Salesforce 是数千家企业使用的领先 CRM 平台之一,是其运营的关键部分,可以控制一切。Salesforce Einstein 是一项创新的集成人工智能服务,可帮助 Salesforce 为其客户提供更智能的分析,同时实现工作流程自动化。
被称为人工智能驱动的 CRM,Einstein 旨在向用户提供更好的客户洞察,而不让他们担心初始设置。只需将客户数据添加到 CRM 中,Einstein 就会自动为数据选择最佳模型,并开始为您提供客户洞察,让您离将潜在客户转变为客户更近一步。
● 威普罗·霍姆斯
- 网站——https://www.wipro.com/holmes/
- 免费试用 —不可用
- 起始价格 —联系供应商
Holmes 是 Wipro 的人工智能平台,旨在提高效率、速度和体验。通过提供一系列解决方案,如认知过程自动化、自然语言处理、自学、高级分析、预测系统等,Holmes 可以毫不费力地满足各种规模的企业,使其在竞争中保持领先地位。
Holmes 还可以用于简化开发、网络、远程操作、虚拟助理、安全和云操作的几个关键领域,通过提供问题的即时解决方案,确保始终保持最佳效率。借助 Holmes 的端到端智能解决方案,企业可以为客户提供无减速的世界级体验,感受高度个性化。
其他一些功能—
- 视觉计算应用
- 机器人和无人机
- 数字虚拟代理
●雨鸟
- 【https://rainbird.ai/】网站 — 网站
- 免费试用 —不可用
- 起始价格 —联系供应商
如果你正在寻找一个考虑所有正确方面的决策系统,雨鸟可能是你的正确工具。由于其人工智能驱动的决策能力与视觉模型相结合,Rain Bird 使像您这样的企业在瞬间做出决策成为可能。
它适用于根据决策运行的关键场景和业务,如金融机构、欺诈防护服务等。Rain Bird 让您将每一点信息拼凑在一起,创建一个稳健的模型,作为您决策系统的基础,让您全面了解所有可能的结果。
其他一些特性—
- 可视化用户界面
- 智能数据导入
- 自然语言处理
结论
人工智能平台对于步入现代时代的企业至关重要。它们提供的优势,如无障碍迁移、模型构建、培训和部署、更深入的分析、自动化、预测、强大的数据管理功能以及许多其他优势,足以吸引人们采用它们。我们提到了一些顶级的人工智能平台,并解释了它们使您的业务更好、更智能的几种方式,以便您的业务与您一起增长。如果你很想在你的业务中采用这些救命的好处,我们建议通过提到的人工智能平台来看看哪一个适合你的需求。
注: 为了消除各种各样的问题,我想提醒你一个事实,这篇文章仅代表我想分享的个人观点,你有权不同意它。
更多有趣的阅读—
我希望这篇文章对你有用!以下是一些有趣的读物,希望你也喜欢
[## 2020 年你必须使用的最好的 Python IDEs 和代码编辑器
具有显著特性的顶级 Python IDEs 和代码编辑器
towardsdatascience.com](/best-python-ides-and-code-editors-you-must-use-in-2020-2303a53db24) [## 2020 年必读的机器学习书籍
看看吧,你为什么要读它们?
towardsdatascience.com](/machine-learning-books-you-must-read-in-2020-d6e0620b34d7) [## 数据科学家的最佳数据科学工具
数据科学工具,使任务可以实现
towardsdatascience.com](/best-data-science-tools-for-data-scientists-75be64144a88) [## 2020 年人工智能工程师的顶级编程语言
从几种编程语言中,人工智能工程师和科学家可以挑选出适合他们需要的语言
towardsdatascience.com](/top-programming-languages-for-ai-engineers-in-2020-33a9f16a80b0) [## 机器学习和深度学习的最佳 Python 库
现代机器学习模型和项目的 Python 库
towardsdatascience.com](/best-python-libraries-for-machine-learning-and-deep-learning-b0bd40c7e8c)
关于作者
克莱尔丁。是Digitalogy—的内容制作者和营销人员,这是一个技术采购和定制匹配市场,根据全球各地的特定需求,将人们与预先筛选的&顶尖开发人员和设计师联系起来。在 Linkedin , Twitter , Instagram 上连接 Digitalogy 。
顶级编码算法—广度优先搜索
让我们直接进入主题。
伪码
procedure BFS(G, start_v) is
let Q be a queue
label start_v as discovered
Q.enqueue(start_v)
while Q is not empty do
v := Q.dequeue()
if v is the goal then
return v
for all edges from v to w in G.adjacentEdges(v) do
if w is not labeled as discovered then
label w as discovered
w.parent := v
Q.enqueue(w)
广度优先搜索的实现使用队列和,而循环与其表亲相比,深度优先搜索使用递归,记住这一点,我相信,至少可以在你的编码面试中帮助你建立结构。
履行
想想最基本的任务:

找到从 0 到 6 的所有路径。
请注意 1 和 4 的双向箭头,这意味着如果我们在搜索过程中没有跟踪被访问的节点,路径会向后走。
这里有几点需要注意:
- 注意队列包含 2 个元素,当前节点和当前路径。根据你遇到的问题,可以是深度或者其他。
queue.pop(0)确保我们总是考虑队列中的第一个元素,这使得它是广度优先的。- 如果我们碰到一个没有子节点的离开节点,那么我们继续下一个
if curr_node not in self.graph.keys():
continue
if child not in curr_path检查我们是否在后退,避免了两次访问一个节点。curr_path.copy()一定要去,否则不同孩子的路会被缠住。
编码问题
让我们看看如何灵活应用它。
给定一棵二叉树,求其最小深度。最小深度是从根节点向下到最近的叶节点的最短路径上的节点数。
注: 叶子是没有子代的节
3
/ \
9 20
/ \
15 7
返回其最小深度= 2。(这是 leetcode 的一个问题)
这里的主要变化是,根据问题的要求,我们的道路被深度所取代。
现在问题来了,如果我们想要最大深度呢?去试试吧。
顶级编码算法—深度优先搜索
所有可以被格式化为树形结构的编码问题都很可能通过广度优先搜索或深度优先搜索来解决。与使用堆栈实现的广度优先搜索不同,深度优先搜索采用分而治之的方法,使用递归实现。
伪码
输入:一个图 G 和 G 的一个顶点 v
输出:从 v 可达的所有顶点被标记为已发现
**procedure** DFS(*G*, *v*) **is**
label *v* as discovered
**for all** edges from *v* to *w that are* **in** *G*.adjacentEdges(*v*) **do**
**if** vertex *w* is not labeled as discovered **then**
recursively call DFS(*G*, *w*)(from [wiki](https://en.wikipedia.org/wiki/Depth-first_search))
(注意,只有当顶点 w 未被访问时,我们才继续,这避免了图或树中的循环)
之所以可以用递归来解决问题,是因为一个大问题可以分成多个子问题,每个子问题遵循相同的逻辑和结构。例如,在这里如果我们想在一个树形结构中找到从 A 点到 B 点的路径,你可以把这个过程总结为一个重复的公式:
path = current_path + DFS(sub_tree)
例子
考虑下面的问题,

找到从点 0 到点 6 的所有路径。
请注意,图中有一个循环(双箭头)(1 和 4)。
节点连接存储在字典中。递归在到达终点或叶节点时停止。
这给出了结果:
find solution path [0, 1, 4, 6]
find solution path [0, 2, 5, 6]
find solution path [0, 2, 5, 4, 6]
变化
考虑以下问题:
Given a n-ary tree, find its maximum depth.The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.Input: root = [1,null,3,2,4,null,5,6]
Output: 3

为了将问题分成子问题,它遵循以下公式
max_depth = 1 + max(max_depth(child_1), max_depth(child_2), ...)
解决办法
(结帐代码此处)
使用 NLP 的冠状病毒研究主题:2020 年 5 月
当你意识到在如此短的时间内发生了如此多的学术工作时,这是令人难以置信的。在这里,我使用最新的预印本深入到一些 LDA 主题建模中。
三月份,当我第一次试着给所有提交给 SSRN 的新型冠状病毒(新冠肺炎)预印文章做主题模型时,只有 75 篇论文,现在仅仅两个月后,这个数字已经膨胀到 346 篇。我非常有兴趣看看这些论文讨论的主题中是否有新的模式。

2020 年 5 月冠状病毒热门话题。作者插图
之前,我仔细阅读了爱思唯尔冠状病毒中心网页上列出的每一份预印提交材料,然后将标题和主要发现复制并粘贴到一个电子表格中,以运行我的 Gensim LDA 建模脚本。
随着新学术论文的激增,我简直跟不上了,现在我有了一个 web scraper 脚本和一些正则表达式来提取特定的部分,如结论和发现,以摄取所有有趣的内容。


二月和五月最显著的术语。患者无疑正在成为一个更加突出的术语,现在有一小部分论文关注中国
我看到过语义学者有一个跨出版商的新冠肺炎学术数据库,但是看起来不怎么样。上次我检查了他们的索引,包括奇怪的无关内容,如细菌性肺炎和抗生素疗法。我也不确定它是否包含预印材料。


模型困惑和主题一致性提供了一种方便的方法来判断一个给定的主题模型有多好。作者截图
在任何情况下,就像上次一样,我采用了最新的学术预印内容,在 LDA 主题模型脚本上运行它,并为 346 篇论文确定了 75 个主题,一致性为 0.5602。
这里有一些非常令人兴奋的东西,从预测隔离何时解除到学校关闭给医护人员带来的精神压力,所以让我们开始吧。
记住这篇文章绝不是科学评论,而是我想分享的一个小实验。小心阅读预印本,因为所做的声明未经证实。
8 个主导主题
1.ACE2 受体与免疫
话题关键词:细胞,cd,ace,kirp,表达,阳性,ucec,免疫,减少,突出
具有主题的文档百分比: 54%
ACE2 是新型冠状病毒进入细胞的受体。有很多关于 ACE2 表达水平和疾病严重程度的研究。下面最具代表性的论文专门研究了 ACE2 与新型冠状病毒感染后子宫内膜癌(UCEC)和肾乳头状细胞癌(KIRP)的免疫浸润和进展的相关性。
最具代表性的论文:UCEC 新型冠状病毒感染后,与免疫浸润相关的 ACE2 异常表达可能加重病情进展,KIRP
2.新冠肺炎(新型冠状病毒)和其他呼吸道病毒
主题关键词:感染、病毒、患者、高、组、流感、诊断、计数、白细胞、呼吸道合胞病毒
带有主题的文档百分比: 38%
其他呼吸道病毒也会引起与新冠肺炎相似的症状。这使得初步诊断非常具有挑战性。本文较有代表性地总结了发热门诊患者的病原体构成,并分析了不同呼吸道病毒感染的特点。
最具代表性论文:2019 年北京新型冠状病毒暴发期间呼吸道病毒感染特征。
3.试图预测隔离何时解除
话题关键词:比率,场景,湖北,每日,数字,3 月,直接,大约,韩国,韩国
带有主题的文档百分比: 38%
有大量的数据挖掘正在发生,以建立模型来预测疫情的全球趋势,这将有望使我们更好地分配国际医疗资源,并指导检疫策略。
最具代表性的论文: 利用状态转移矩阵模型,通过中国的经验趋势,预测新冠肺炎在全球主要疫区的发展
4.我们不可能跟踪所有的临床试验
话题关键词:治疗,研究,试验,中国,阶段,医学,干预,表现,初步,女人
带有主题的文档百分比: 36%
冠状病毒疾病治疗 2019(新冠肺炎)有很多临床试验;然而,人们对新冠肺炎的临床试验缺乏系统的了解。与这一主题相关的论文认为,现有的新冠肺炎患者数量不足以支持已经开始的数百项临床试验。缺乏多中心、随机、双盲、安慰剂对照试验的设计。
最具代表性的论文: 聚焦新冠肺炎治疗:对 ClinicalTrials.gov 和 ChiCTR 注册的 226 项试验的综合分析
5.学校关闭给医护人员带来了巨大的压力
话题关键词:医疗保健,提供,护理,家庭,参数,学校,医疗,关闭,领先,衰落
带有主题的文档百分比: 33%
有学龄儿童的医疗工作者发现自己处于在工作和在家陪孩子之间做出选择的境地。封锁期间儿童保育的费用和机会进一步加剧了这一问题。
最具代表性的论文: 新冠肺炎学校关闭对美国医疗劳动力和净死亡率的影响
6.唾液可能有助于诊断新冠肺炎
主题关键词:研究,高,阶段,条件,唾液,患者,检测,演示,危重,病毒
带主题的文档百分比: 36%
越来越多的研究发现,危重患者唾液阳性检出率高达 75% (3/4)。唾液可能是危重病人诊断标本的新来源。
最具代表性论文: 新冠肺炎患者唾液中 2019-nCov 的检测及口腔症状表征
7.出院后幸存者的心理健康
话题关键词:出院、感染、关联、幸存者、医院、帖子、担忧、家庭、范围、复发
带主题的文档百分比: 34%
人们越来越关注新冠肺炎感染后幸存的患者的精神健康,并担心残留的呼吸道症状。这篇有代表性的论文发现,大约 10%的新冠肺炎幸存者会出现焦虑或抑郁,因为他们出院后会出现残留的呼吸道症状,担心复发和传染给他人。
最具代表性的论文: 中国武汉新冠肺炎幸存者心理健康状况:一项描述性研究
8.预测 COVID 患者的死亡率
话题关键词:模型、预测、指标、得分、早期、预测、回归、准确、比率、群组
带有主题的文档百分比: 28%
许多论文试图预测哪些患者最有严重感染的风险,以便更早地提供干预。这往往涉及临床特征的分析。尽管如此,一些研究显示,临终病人和出院病人的主要症状没有差异,但生命体征和实验室检查结果有所不同。
最具代表性的论文: 预测老年新冠肺炎患者死亡风险的临床特征
结论
这是令人愉快的拉出来的 LDA,并看到事情如何改变了这几个月。与我上次尝试相比,主题的数量变得更加广泛,但有几个真正开始脱颖而出,如围绕 ACE2 受体和严重性预测模型的研究。
我们离决策的结果越远,就越容易保持我们当前的观点,而不是更新它们。—伟大的心智模型

文字,文字无处不在。作者插图
完整免责声明:我是爱思唯尔的产品经理。这篇博客文章和分析是作者自己的创作,不代表爱思唯尔的想法和观点。
GitHub 回购
使用 python 脚本的 GitHub Repo 输入数据和输出:
[## raudashl/coronvavirus _ preprint _ research _ NLP
这个脚本对冠状病毒的最新学术预印本进行主题建模,看看是否有任何不寻常的…
github.com](https://github.com/Raudaschl/coronvavirus_preprint_research_nlp)
想要更多吗?
如果您喜欢这篇文章,请务必查看我在二月份发表的上一篇主题模型文章
受到所有公开的新冠肺炎印刷前研究的启发,我想应用一些数据科学…
towardsdatascience.com](/summarising-the-latest-research-on-coronavirus-with-nlp-and-topic-modelling-28b867ad9860)
文献学
- 上面列出的所有预印本都是我在 2020 年 5 月 1 日从爱思唯尔新型冠状病毒信息中心收集的,我又从 SSRN 下载的。
- 冠状病毒:最新信息和建议。gov . uk .https://www . gov . uk/guidance/Wuhan-novel-coronavirus-information-for-public2020 出版。2020 年 5 月 1 日访问。
帮助您在 2020 年成长的顶级数据科学书籍
这些书将帮助你成为一名数据科学专家。

很多人问我关于如何开始他们的数据科学之旅的问题。除了在线课程之外,我建议阅读相关书籍。但是,问题是可用的资源太多了。因此,很难判断从哪本书开始。近年来,我浏览了许多书籍,下面是我的清单,应该能帮助你走向数据科学专业人士的道路。
从零开始的数据科学:Python 的基本原则

从零开始的数据科学 是从数据科学开始的完美书籍,因为它教会你在实践中开始数据科学所需了解的几乎所有基础知识。它包含一个 python 速成班,深入解释了推进您的数据科学之旅所需了解的常见算法和技术。我喜欢这本书,因为它不仅教你如何使用某些库,还解释了幕后发生的事情。这在数据科学家的教育中经常被忽略。每个声称自己是数据科学家的人都应该至少自己编写过一次 k 近邻算法。这就是为什么这本书是初学者的完美开端。
使用 Scikit-Learn、Keras 和 TensorFlow 进行机器实践学习

在你学会了基础知识之后,是时候在实践中使用你的一些技能了这是你将在 Aurélien Géron 的 动手机器学习书 中学到的。这本书旨在用最少的理论和大量的实际实现示例和练习来构建生产就绪的机器学习驱动的系统。与从头开始的数据科学书不同,您将学习如何使用两个生产就绪的 python 框架 Scikit-Learn 和 Tensorflow。这本书带你一路从线性回归到深度神经网络和强化学习。我认为这是每个数据科学家的必备书籍,应该成为每个办公室书架的一部分。
用于数据分析的 Python

Wes McKinney(熊猫的创造者)写的 用于数据分析的 Python可能是 Python 中数据科学领域阅读量最大的书。它教你如何使用 pandas,numpy 最常用的 python 中数据转换和汇总的库。通过这本书,您可以轻松地开始学习基于 python 的数据分析。数据争论是每个数据科学家日常工作的重要组成部分,本书帮助你建立更好的数据管道。
深度学习(自适应计算和机器学习系列)

最后但并非最不重要的是,我必须推荐人工智能圣经臭名昭著的深度学习书籍它给你正确介绍了深度学习的基础知识:前馈神经网络,卷积神经网络(CNN),序列模型和递归神经网络(RNN)。这本书是对该主题的理论介绍,但如果你想了解过去几年中最具突破性的技术变革背后的理论和原则,这是一本好书。最棒的是:这里有免费的在线版本。
永远坚持学习
尤其是在像我们这样一个不断变化的行业,永不停止学习是非常重要的。我认为书籍是深入一个新话题的非常好的方式。我倾向于一个月读一本书,让自己跟上时代。欢迎大家给我一些推荐!
未来的顶级数据科学职业—第二部分
您以前可能没有探索过的数据科学用例...

当我在 7 月份写博客的第一部分时,我确实想到了其他需要公布的数据科学职业道路。看到人们在这个特殊的博客上发表意见,并分享对许多其他职业的看法,我感到不知所措:零售、教育等等。
好了,现在我终于要写一篇关于未来顶级数据科学职业的第 2 部分了。
在当今快速发展的技术世界中,当人类倾向于生成大量数据时,分析数据是必不可少的。ata 现在是商业的前沿,或者我可以说它已经成为工业的燃料。
有各种各样的行业,如银行、金融、制造、运输、电子商务、教育等。我们听说过使用数据科学。在这篇文章中,我列出了 9 个随着数据科学和相关领域的兴起而转变的数据科学职业。我们将看到数据科学如何彻底改变企业感知数据的方式,并激发您对未来的展望。
1.电子商务/零售
电子商务就是向顾客提出建议,引诱他们购买他们可能根本不需要的东西,并让他们后悔刚刚支付的费用。我说的对还是不对?😛
任何一个电子商务网站,肯定都有推荐系统。如果你正在为亚马逊、Wish、Instagram 或任何销售产品的应用程序/网站面试,推荐系统项目肯定可以成为你面试的一个话题。电子商务中数据科学的其他使用案例:
- 从社交媒体、用户评级、评论和产品评论中分析客户情绪
- 预测客户的终身价值:客户终身价值是客户在整个客户-业务关系中为公司带来的利润的总价值。
- 使用数据模型管理库存
- 改善客户服务
- 通过定制优惠留住客户
- 电子商务的主要优化规则:何时提供什么样的报价,持续多长时间
- 欺诈检测:支付集成需要欺诈检测和风险管理
- 菜篮子分析:你可能也喜欢,人们也买了
2.教育
- 根据学习参数预测班上学生的成绩。如果该模型为学生生成了低的 GPA,则该模型可以触发对学生和教师的警告,指示该学生必须更加努力才能达到期望的分数
- 基于人工智能的评估虚拟面试平台,模拟真实的面对面面试。它可以用来自动评估候选人的身体语言
- 类似的技术也可以用在网络课堂上,用来检查教室里谁在集中注意力,谁没有,谁在假装
- 预测模型有助于使用数据分析评估学生辍学的风险,进而有助于采取预防措施
- 招生
- 创新课程
- 监控学生的社交情感技能
佛罗里达大学一直在使用一个平台来提取学生数据,并使用它来监控和预测学生的表现。
亚利桑那州立大学(ASU)数学系采用了一种叫做“适应性学习”的系统来提高学生的成绩。他们的系统收集关于学生的信息,如分数、强项、弱点,甚至测量犹豫的时刻。
3.政府
好吧,哪个数据科学家在他们的旅程中从未遇到过著名的臭名昭著的“芝加哥犯罪数据集”?
2020 年的政府将意识到,不仅仅是在线,而是使用数据来有效开展地理工作的重要性。
- 联邦住房管理局(FHA)利用数据科学来预测索赔率、违约率和还款率
- 美国食品药品监督管理局(FDA)使用大数据技术来分解和了解食源性疾病的模式
- 疾病控制中心(CDC)通过社交媒体进行实时情绪分析,以跟踪疾病的传播或从社交媒体行为中跟踪自杀倾向的早期迹象
- 美国国土安全部(DHS)拥有大量数据:用于分析的最佳开源数据集之一。该机构使用包括互操作性在内的大数据战略来整合和比较来自各个安全机构的数据,以预测或识别对国家的潜在威胁。
- 政府使用分析算法和人工智能解决方案来识别不再注册、放弃交易、不承担法律责任和税收的企业。
- 街头犯罪分析:指纹,DNA 样本,弹道分析
- 网络攻击
- 应急响应:实时分析
4.军事情报
谁说数据只能用于商业盈利?
我的梦想是在军队中担任情报分析员。无论我的梦想实现与否,我都希望每个人都知道数据在情报机构中的重要性,以及数据科学如何帮助实现目标。
数据收集在军队显然不是问题。每天都从部署在陆地、海洋、空中和太空的情报、监视和侦察设备中的传感器收集大量数据。
- 军事后勤利用大数据,使用来自国防部、联邦调查局、中央情报局和其他机构的汇总数据来预测简易爆炸装置(IED)的位置
- 通过信号情报、全动态视频、照片、非结构化文本和社交媒体进行数据分析,可以识别异常情况或需要关注的问题
- 自杀式爆炸和简易爆炸装置放置的模式和相关性
- 监控部队的健康状况
- 检测和跟踪移动的车辆和步兵
- 确定接受特殊培训的人员
- 雷达社交媒体的任何出书的活动煽动恐怖主义,文化,暴乱
- 爆炸后特征分析
5.社会化媒体
当我们谈论社交媒体中的数据科学时,它不仅仅是一些谷歌分析术语,而是导致用户粘在社交媒体上的一系列因素。
普通人在社交媒体上至少花费 2.4 小时。当 38 亿人使用社交媒体(超过世界人口的一半)时,我们了解数据科学如何管理社交媒体世界是至关重要的。一些使用案例:
- 个性化营销
- 客户情绪分析:客户态度、参与环境、通过社交解决的服务问题数量
- 市场优化:活动收入、转化率、内容表现、渠道表现、发布时间影响、最活跃参与者
- 创收:按渠道划分的销售线索和销售额、按渠道划分的产品收入、社交收入与直接收入、搜索排名和流量、客户终身价值、交易规模和频率
- 社交媒体上的内容分发
- 收集和分析客户见解
- 用于跟踪参与度的媒体内容分析
Instagram 如何运用数据科学?
- 定向广告:就像 IG 通过评估用户的搜索偏好和参与度来了解我们到底想要什么一样,Instagram 可以向那些希望接触特定客户群、并可能对接收特定营销信息最感兴趣的公司出售广告
- 打击网络欺凌,删除攻击性评论(他们最好这么做)
- 过滤垃圾邮件或机器人账户(这是“有影响力的人”经常失去追随者的原因)
- 增强用户体验
当 Instagram 将其提要从按时间倒序改为显示他们认为用户会喜欢和分享的帖子时,机器学习算法被用来帮助对信息进行排序,并随着时间的推移更好地了解对每个用户来说最有价值和最相关的内容,以创建个性化提要[ 福布斯文章
6.旅行
在人类生活的快节奏世界中,找到时间去售票处并计划好旅行是一个很大的要求。多亏了这项技术,我们现在不仅可以在线订票,还可以找到为我们的旅行策划的最佳交易,找到最低的价格和除航空里程之外的忠诚度积分。以下是旅游业使用数据科学的一些方式。
- 推荐引擎:99%的成功产品都有推荐引擎。Booking.com 为您的下一次旅行提供了您可能喜欢的替代目的地。在 Expedia 上搜索飞往伦敦的航班时,会为您的旅行提供几个住宿选择。
- 机票和酒店价格预测:谷歌航班跟踪。如果感恩节前一周飞往夏威夷的机票价格通常低于平均水平,你会被要求等待,并在临近感恩节的时候预订机票。
- 智能旅行助手:扩展客户体验的聊天机器人
- 航空公司利用数据科学优化航线
- 营销:通过为 MVC(最有价值的客户)量身定制产品来提高忠诚度
- 社交媒体上的情感分析
- 入住体验:伦敦 Radisson Blu Edwardian 酒店使用一个名为 Edward 的聊天机器人,拉斯维加斯 Hotel Cosmopolitan 有一个名为 Rose 的机器人,可以回答客人的任何问题,并全天候提供帮助
- 客户体验:雅高酒店使用 TIBCO Spotfire 来衡量客户满意度、反馈以及提高客户参与度的方法
7.运输
从无人驾驶汽车到数据驱动的路线调整,数据科学正在上路。大公司正在实施数据科学算法来优化路线,以节省数千加仑的汽油。交通领域数据科学的一些使用案例如下:
不间断电源
我正在阅读一篇学校项目的文章,从中我了解到 UPS 如何使用数据科学来优化从投递到交付的包裹运输。他们有一个网络规划工具,在 AI/ML 上运行,用于高效的供应链和包装路线。随着数据科学在优化包裹路线中的应用,UPS 计划到 2020 年底节省 1 亿到 2 亿美元。
优步吃饭
Uber Eats 一直是利用数据科学革新食品配送的先锋。Uber Eats 的数据科学家依靠机器学习、高级统计建模和工作人员气象学家来优化每个可能变量的交付流程,这些变量包括风暴、假日热潮、城市交通、烹饪时间等。
亚马孙
亚马逊一直是任何数据科学用例的基础。随着使用机器人快速交付其 Prine 1 天交付或使用数据科学提高履行中心生产力的出现,亚马逊已经做到了这一点。
这就是我的博客的结尾。感谢您的阅读!我希望你喜欢这篇文章。请务必告诉我,在您的数据科学之旅中,您期待探索哪些职业?
数据帐篷快乐!
免责声明:本文表达的观点仅代表我个人,不代表严格的观点。
了解你的作者
拉什是芝加哥伊利诺伊大学的研究生。她喜欢将数据可视化,并创造有见地的故事。当她不赶着赶学校的最后期限时,她喜欢喝一杯热巧克力,写一些关于技术、UX 等的东西。
顶级数据科学面试问题和答案
了解数据科学访谈中的最新问题趋势

Amy Hirschi 在 Unsplash 上的照片
我们正在进入一个数据可能比软件更重要的新世界。
—蒂姆·奥莱利
数据科学行业的繁荣推动了对熟练数据科学家的需求。随着越来越多的人开始选择数据科学作为他们的职业选择来满足这一不断增长的需求,对这些人进行数据科学基础教育和培训的需求也在增加。
由于领域的巨大性质,有抱负的数据科学家经常发现自己在准备面试时被难住了。为了应对这样的挑战,我们准备了一份面试中常见问题的清单,这会让你知道从哪里开始。
顶级数据科学面试问题和答案
在本节中,您将找到一份详尽的数据科学面试问题列表,涵盖了各种核心概念、框架和应用。如果你想从事数据科学方面的职业,我们建议你浏览一下这个列表,因为你可能会遇到大多数这样的问题。如果你是一名有经验的专业人士,了解面试中的最新问题总是一个好主意,以防万一你打算换公司。
1.什么是数据科学?
数据科学涉及 使用众多科学工具 、算法和流程,通过使用机器学习、数据分析和统计来处理结构化和非结构化数据,以更好地理解数据并找到其中隐藏的模式。
2.解释数据科学和数据分析的区别?
数据科学是一个总括术语,包括数据分析。数据科学侧重于数据探索,而数据分析主要侧重于从数据中获得可操作的见解。
3.请解释数据清理在数据分析中的作用。
数据清理非常重要,因为:
- 它有助于将数据转换为数据分析师和数据科学家可以理解和管理的格式
- 提高模型的效率
- 帮助为模型准备数据
- 有助于数据可视化
目标是将数据转化为信息,将信息转化为洞察力。卡莉·菲奥莉娜
4.区分单变量、双变量和多变量分析。
单变量分析由单个变量组成,是最简单的分析形式,双变量分析包括两个变量,通常用于因果关系,多变量分析涉及三个或更多数据,用于更复杂的数据。
5.数据建模与数据库设计有何不同?
数据建模包括设计数据库的概念模型,如 ERD ,它通过数据建模技术得到进一步改进,而数据库设计包括通过使用定义的模型创建数据库的详细结构,包括代码。
6.你对线性回归有什么理解?
线性回归帮助我们找到数据集中两个或多个变量之间的线性关系,通常是自变量和因变量。线性回归对于发现不相关数据可能导致不准确结果的混杂因素至关重要。
7.线性模型的缺点是什么?
一些缺点是:
- 线性模型的假设在某些应用中可能不成立,例如线性关系、很少或没有多重共线性、没有自相关、多元正态性和没有同异方差
- 线性模型不适合离散或二元结果
- 过度拟合的问题
- 不可能改变模型的灵活性
8.你对逻辑回归有什么理解?
也称为 logit 模型,逻辑回归是一种分类算法,它使用一组独立变量,通过将变量放入 Logit 函数来预测二元结果,如否/是或 0/1。
9.机器学习的类型有哪些?
- 监督学习
- 无监督学习
- 强化学习
更多阅读—
看看吧,你为什么要读它们?
towardsdatascience.com](/machine-learning-books-you-must-read-in-2020-d6e0620b34d7)
10.数据中的有监督和无监督学习是什么意思?
监督学习算法使用带标签的训练数据集来训练机器进行准确的预测,而无监督学习算法使用无标签/原始数据,允许机器进行学习并提供见解。
11.机器学习和深度学习有什么区别?
机器学习涉及算法的创建和使用,这些算法帮助系统从输入数据和过去的经验中学习,以获得更好的预测,而深度学习是机器学习的进化,它使用了称为人工神经网络的附加算法层。
12.说出各种类型的深度学习框架
- 张量流
- Pytorch
- 克拉斯
- 咖啡
- 链条机
- Mx 网络
13.什么是根本原因分析?
根本原因分析是一种广泛使用的问题解决技术,旨在通过使用一些步骤来防止问题发生,从而深入到导致问题的基本过程。
14.Python 和 R——对于文本分析,你更喜欢哪一个?
在 Python 和 R 之间,Python 是文本分析的更好选择,因为它有 Pandas 库,而且它的执行速度比 R 更快,提供的分析也更好。
更多阅读—
最近更新由克莱尔 d。人工智能创新的加速增长已经导致几个…
blog.digitalogy.co](https://blog.digitalogy.co/r-for-data-science/) [## Python vs. Node。JS:哪个最适合你的项目?
使用一组预定义的因素对 Python 和 Node.js 进行详细比较
towardsdatascience.com](/python-vs-node-js-which-one-is-best-for-your-project-e98f2c63f020)
15.说出数据科学的五大 Python 库?
- 张量流
- NumPy
- SciPy
- 熊猫
- Matplotlib
更多阅读—
现代机器学习模型和项目的 Python 库
towardsdatascience.com](/best-python-libraries-for-machine-learning-and-deep-learning-b0bd40c7e8c)
16.什么是偏见?
偏差是模型中损害其准确性的错误或偏差,由不准确的采样和估计引起。高偏差导致模型拟合不足。
17。说出采样过程中可能出现的三种偏差—
这些类型的偏差发生在取样过程中—
- 选择偏差
- 覆盖偏差不足
- 生存偏差
18.什么是选择偏差?选择偏差的各种类型是什么?
当研究人员决定使用哪些数据而不是随机选取数据时,就会出现选择偏差。选择偏差会导致数据集无法准确代表总体。各种类型有:
- 采样偏差:由非随机数据采样引起
- 时间间隔:当试验提前终止时发生,因为它们可能已经到达方差最大的变量
- 数据:在丢弃不良数据或显著的野值/异常值数据时,以及在采用单独的数据集来支持结论时出现
- 流失:由于参与者的定期减少,导致参与者的流失或测试无法完成
19.请解释梯度下降。
梯度下降是一种优化算法,用于找到最小化成本函数的函数系数。通过尝试不同的系数值,我们可以对它们进行评估,并轻松找到最低成本。
20.说出不同类型的分类算法?
- 逻辑回归
- 决策树
- 随机森林
- 支持向量机
- 最近邻
- 被砍伐的树木
- 神经网络
21.什么是随机森林?
随机森林是一种执行分类和回归任务的机器学习方法,由大量决策树组成,这些决策树一起工作以实现降维、离群值和处理缺失值。
该算法如何工作以及为什么如此有效
towardsdatascience.com](/understanding-random-forest-58381e0602d2)
22.你对决策树的理解是什么?
作为一种监督算法,决策树类似于树状图形,通常用于分类和回归任务。用于将数据分成更小的块,决策树由节点或叶节点和边组成,其中每个节点代表一个决策,而分支或边代表可能的结果。
23.什么是混淆矩阵?
混淆矩阵计算分类模型的性能,其中行表示预测类中的实例,列表示实际类中的实例。之所以这么叫,是因为它有助于检查系统是否混淆了这两个类。
当我们得到数据,经过数据清洗,预处理和争论,我们做的第一步是把它提供给一个…
towardsdatascience.com](/understanding-confusion-matrix-a9ad42dcfd62)
24.什么是星型模式?
星型模式是一种常见的数据集市模式,由一个或多个中央事实表和几个维度表组成。事实表通常保存用于数据查找的维度表的外键,而维度表保存具有大量属性的记录。
25.解释人工神经网络?
人工神经网络模仿人脑,是人工神经元、连接、权重和传播函数的集合,它们一起工作,允许机器从示例和经验中学习。
你深度学习的第一步
towardsdatascience.com](/introduction-to-artificial-neural-networks-ann-1aea15775ef9)
26.A/B 测试的目的是什么?
也称为分割测试,这种测试技术将变量分割成两个变量 A & B,两个版本彼此略有不同。记录用户对版本的反应,以确定最有效的版本,然后最终确定。
27.解释验证集和测试集的区别?
验证集是用于微调模型超参数的数据样本,而测试集包含用于无偏测试和评估模型最终性能的数据。
28.什么是推荐系统?
推荐系统是信息过滤系统的一部分,它预测用户是否喜欢某个项目。
几种主要推荐算法综述。
towardsdatascience.com](/introduction-to-recommender-systems-6c66cf15ada)
29.什么是协同过滤?
协同过滤是推荐系统通常使用的一种数据过滤技术,使用若干数据源、代理和其他协同源来识别有用的模式和信息,以简化用户的自动预测过程。
"我们正在离开信息时代,进入推荐时代."
towardsdatascience.com](/intro-to-recommender-system-collaborative-filtering-64a238194a26)
30.什么是整群抽样?
整群抽样是一种抽样技术,通过将目标区域划分成多个群来使用,当人口分布在一个大的区域内或简单的随机抽样不可能适用时使用。在整群抽样中,每个抽样单位都是由单个元素组成的群。
31.什么是交叉验证?
交叉验证是一种模型评估技术,其中一部分样本数据仅保留用于测试目的,其余样本数据用于训练模型。
用一张简单的图片解释交叉验证。这里显示的方法是 k-fold 交叉验证,其中数据被分割…
www.datasciencecentral.com](https://www.datasciencecentral.com/profiles/blogs/cross-validation-in-one-picture)
32.关于统计数据,P 值意味着什么?
在假设检验中,P 值帮助您确定结果的显著性,允许您接受或拒绝零假设。较小的 p 值,即≤ 0.05 意味着您应该拒绝零假设,p 值> 0.05 意味着您不应该拒绝零假设,而接近 0.05 的 p 值是边际值,可能向两个方向发展。
33.什么是计算图?
计算图是有向图,其中节点被称为操作或变量。每个变量/操作可以将它们的输出发送到另一个变量/操作。
结论
数据科学的领域正在迅速扩大,越来越多的公司开始使用数据科学提供的多种技术和优势,为行业中的熟练专业人员腾出了空间。这是一个广阔的领域,需要一个人跟上行业的最新创新。我们有超过 25 个问题,旨在涵盖候选人在数据科学面试中遇到的一些最常见的问题,涵盖初学者友好的主题,以及从中级水平选择的一些问题。我们希望这篇文章能让你很好地理解这些问题,并帮助你准备面试。祝你好运!
注: 为了消除各种各样的问题,我想提醒你一个事实,这篇文章仅代表我想分享的个人观点,你有权不同意它。
更多有趣的阅读—
我希望这篇文章对你有用!以下是一些有趣的读物,希望你也喜欢
从几种编程语言中,人工智能工程师和科学家可以挑选出适合他们需要的语言
towardsdatascience.com](/top-programming-languages-for-ai-engineers-in-2020-33a9f16a80b0) [## 2020 年你必须使用的最好的 Python IDEs 和代码编辑器
具有显著特性的顶级 Python IDEs 和代码编辑器
towardsdatascience.com](/best-python-ides-and-code-editors-you-must-use-in-2020-2303a53db24) [## 面向所有人的顶级谷歌人工智能工具
使用谷歌人工智能中心将想法变为现实
towardsdatascience.com](/top-google-ai-tools-for-everyone-60346ab7e08) [## 用于自然语言处理的 Python 库
用于自然语言处理的流行 python 库概述
towardsdatascience.com](/python-libraries-for-natural-language-processing-be0e5a35dd64)
关于作者
Claire D .是 Digitalogy 的内容制作人和营销人员,Digitalogy 是一个技术采购和定制匹配市场,根据全球各地的特定需求,将人们与预先筛选的顶级开发人员和设计师联系起来。在 Linkedin 、 Twitter 、 Instagram 上与 Digitalogy 连线。
招聘公司正在寻找的顶尖数据科学技能
对来自美国和欧洲的 100 份入门级数据科学职位发布的分析

来自 Pexels 的 ThisIsEngineering 摄影
我收到了很多问题,关于获得数据科学工作和成为数据科学家需要学习哪些相关技能。我的经典回答是“学习 Python 或者 R 以及一些常用的用于数据分析的 Python 框架”。这种方法对我来说很有意义,因为我就是这么做的。
我知道对有抱负的数据科学家的一个流行建议是查看招聘信息并调查要求。我认为这是一个很好的主意,可以让你更好地了解要学习的硬技能。酪我还知道,这些招聘信息很多时候是由人力资源人员准备的,他们自己并不真正理解这些要求,只是写下他们公司的专家告诉他们的话。如果有些人使用网上找到的招聘模板,我不会感到惊讶。
为了满足我的好奇心并了解公司对数据科学职位的要求,我主动从互联网上查看了招聘信息。我在 LinkedIn 上挑选了 100 份来自美国和欧洲的招聘信息。都是入门级的,都是讲英语的公司。例如,对于德国,我跳过了德语的工作列表等。在这篇文章中,我将与你分享我的成果。我将展示哪些技能最常出现,并告诉你我对这些需求如何反映现实的看法。也就是说,不要忘记对你在网上读到的所有东西都持保留态度,并考虑它如何适合你的具体情况。
首先,我将需求分成 9 组。我称之为技能类型:
- 背景(数学、统计学、计算机科学和机器学习)
- 教育(硕士、博士、硕士或博士)
- 语言(Python,Scala,Java,R,C++,Julia)
- 数据库(SQL、Kafka、NoSQL)
- 大数据相关技术(Spark、Hadoop、MapReduce)
- 业务工具(Excel、PowerPoint、Word)
- 可视化工具(Dash、D3、Tableau、Qlikview、PowerBI、ggplot)
- Python 框架(Pandas、Scikit-learn、TensorFlow、Keras)
除了要求之外,我还查看了帖子中提到的常见学科:机器学习、深度学习、分析、自然语言处理、计算机视觉、机器人技术,以了解这些帖子的本质。
先说要求。这是一个图表,显示了在 100 次招聘中,某一类型的要求被提及的总次数。

与其他类型的需求相比,教育和编程语言需求是最常被提及的。我们在这张图表中看到的有趣的事情是,与所有其他硬技能或特定工具(如框架和库)相比,软技能非常重要。这真的把成为一个好的沟通者的重要性放在了正确的位置上。特别是对于那些对自己的技术能力没有 100%信心的人来说,强调你的软技能可能是你在竞争中领先的动力。
下面是划分为特定技能的所有需求类型。

特定技能显示的类型的出现
教育

对于教育要求,我统计了申请硕士学位、申请博士学位和申请硕士或博士学位的时间。没有要求博士学位的招聘信息。无论如何,为一个初级职位申请博士学位是很可笑的。
正如你所看到的,93 份工作清单要求计算机科学、统计学或数学相关领域的硕士学位,其中 29 份说博士学位也是可以接受的。).但是如果你没有这些学位,也没有理由失去希望。这些工作列表中的许多都将这一要求描述为必须具备或有利条件。基本上,这些公司在招聘员工时,会检查他们是否符合传统要求,如计算机科学硕士学位,以尽量降低风险。说到底,他们寻找的是能带来最大价值的人。让他们相信你的价值取决于你自己。
语言

语言是我最喜欢谈论的事情,因为围绕它们有很多争议。不足为奇的是,Python 是所有列表中 86%的一部分。乍一看,这似乎不够高,但在给出语言要求的情况下,这一比例高达 96.63%。所以我们可以说,如果你必须学习一门编程语言,那就学 Python 吧。不服气?让我们看看其他编程语言。
在很多工作列表中,r 并没有像我想象的那样被提及。只有 16 次提及,几乎和 C++一样低,c++是一种我没想到会在数据科学招聘中出现的编程语言。Julia 是我最近听说的一种编程语言,在 100 个招聘信息中只被提到 3 次。我想我们可以说它仍然是一门正在崛起的语言,还有很长的路要走。最后,Scala 和 Java 似乎在争夺第二的位置,但它们远没有 Python 那么受欢迎。
Python 似乎是数据科学的首选语言。为了更好地理解这一点,让我们来看一个不同的图表,其中包含给出的每个语言需求实例。在这里我们可以看到几乎所有的应用程序都需要 Python。而且每次把另一种语言作为需求给出,Python 也是有的。Python 丢掉了麦克风

背景

谈到一个人应该接受的背景培训,在 100 份工作清单中有 77 份提到了这一点,统计学背景似乎是非常理想的,紧随其后的是计算机科学和数学。这可能对你来说很可怕,因为在这些领域没有什么可以获得学位的,至少不会很快。我应该提醒你的是,在大多数的工作列表中,背景培训被标记为必须具备的。正如我之前所说,如果你的目标是进入这个你没有合适背景的新工作领域,你需要不要失去希望,用其他技能来弥补。
软技能

正如我在以前的帖子中提到的,软技能是申请数据科学职位时最重要的技能之一。75 %的工作清单提到了软技能。75 篇帖子中有 90.67%提到沟通是一项重要的技能。是的,沟通是一个模糊的词,但你可以在这里阅读对数据科学家来说意味着什么。
语言技能——确切地说是英语——与表达技能和对细节的关注一起出现在这些列表中。最好调整这些求职信来强调你的软技能,并给出几个你如何在项目中使用它们的例子。
其他技能

看看框架和常用的库,我们看到 TensorFlow 是其中最受欢迎的。尤其是与只被提及 3 次的同类产品 Keras 相比。这并不奇怪,如果你正在研究要使用的神经网络/深度学习框架,记住这一点是件好事。
不过,有一件事确实让我感到惊讶,那就是熊猫和 scikit-learn 很少被提及。可能的原因是像 Pandas 和 Scikit-learn 这样极其常见的库被认为是理所当然的。公司可能会假设,作为一名入门级的数据科学家,你知道如何处理和操纵数据,并实现基本的机器学习算法。

SQL 似乎是其中最重要的,在提到数据库技术的 62 次中被提到 59 次。相比之下,NoSQL 被提及 5 次,卡夫卡被提及 9 次。

网上有帖子声称,如果你不处理大数据,你应该也不能称自己为数据科学家。老实说,我很想把这些发现发给那些帖子的作者。根据我和我的许多同事的经验,很多时候,你不会处理非常大量的数据。你有适量的数据,并且你尽你所知,尽你所能使用它。因此,大数据工具总共只被提到 37 次也就不足为奇了,其中 28 次包括 Spark 和 23 次 Hadoop,它们都是处理大数据的工具。他们大多是一起被提及的。这些工作列表中没有提到 MapReduce。

我从有抱负的数据科学家那里得到关于学习 git、Linux 或云解决方案的问题。我总是说,就我目前所见,对 Linux 技能的需求取决于公司。这一点在这里也很明显,因为只有 6 份工作列表提到了这一点。
然而,云仍在被越来越广泛地采用,我认为说你可以在云上工作绝对是一个优势。然而,很多时候,在云上处理部署和集成工具的人是数据工程师,而不是数据科学家。
另一方面,我认为知道如何使用 git,至少是简单的拉和推,以及版本控制的想法,对任何你将在团队中工作的工作都有好处。事实上,即使你独自工作,你也应该使用版本控制。这些年来,我看过一些大型电视剧,仅仅是因为版本控制被忽视了。我建议你不要把提到 git 的频率当回事,学习一下它的基本原理。我相信你未来的团队领导会非常高兴知道你已经知道如何使用它。

有许多可视化工具和库。Dash 和 Tableau 似乎是更受雇主欢迎的。Matplotlib、D3、Qlikview、PowerBI 和 ggplot 显然没有被视为 98%的职位列表中的重要要求。
我想说你可能会在做个人项目甚至是 Kaggle 比赛的时候学会如何使用 Matplotlib。老实说,这是我最常用的方法。
说到 Tableau、QlikView、PowerBI 这样的软件,我想很多数据科学家都在犹豫要不要用。主要是因为你可以很容易地用代码可视化你需要看到的东西。我可以看到,对于严肃的会议和重要的演示,这些软件解决方案准备的更专业的外观和复杂的可视化会有所帮助。
长话短说,我可能不会花太多时间学习如何制作漂亮的可视化,除非你的目标是视觉密集型的数据科学。

令人惊讶的是,即使当我们说到数据科学时,我们总是想到编码,excel 也是一个经常提到的需求。我偶尔会用它来完成简单的任务,比如检查数据是否如我所期望的那样,或者在不启动我的编码环境的情况下根据列对数据进行排序。我真的不知道这些公司认为你会如何使用 Excel,也不知道他们希望你有多深的 Excel 知识。我会说,只要你知道如何编码,你的 Excel 技能将不是超级必要的。
为了完整起见,我查看了其他办公工具被提及的次数。微软 Word 被提及 6 次,PowerPoint 0 次。我想公司终于克服了将微软办公工具列为需求的困扰。
这些工作属于哪个学科?

分析是被提及次数最多的学科,有 74 次。机器学习紧跟分析。这并不奇怪,因为数据分析和机器学习是数据科学的核心。
100 个例子中只有 22 个提到了深度学习。这表明它远不是数据科学中的主导学科,但肯定有大量公司使用深度学习开发应用程序。自然语言处理、计算机视觉和机器人技术分别被提及 4、3 和 1 次。根据这些数字,我们可以得出结论,除非你的目标是那特定的 2%,否则你需要在专注于更高级的主题之前,先整理好基本的数据分析和机器学习技能。
当学习一个新的职业时,最重要的事情之一是保持自己的积极性,并明确你的优先事项。我希望这篇文章能帮助你了解公司通常在寻找什么,这样你就能更清楚地决定下一步要做什么。
👉对数据科学领域以及如何开始学习感到困惑? 免费参加数据科学入门迷你课程 !
顶级数据科学工具和语言
意见
您应该使用哪一种,为什么?

托德·夸肯布什在Unsplash【1】上的照片。
目录
- 介绍
- Python、R、SAS 和 SQL
- Matplotlib,Seaborn,tqdm
- sklearn、NumPy 和熊猫
- Jupyter nbextensions
- Tableau 和谷歌数据工作室
- 摘要
- 参考
介绍
本文的目标是给出顶级数据科学工具和语言的概述。我要么是在其他人中最常使用这些工具,要么是和经常使用它们的人一起工作过。有几个独特的工具是非常有益的,不是每个人都知道,另外,我将在稍后讨论。我将为我的例子给出一些用例,这样你就能明白为什么这些工具和语言如此有价值。我以前写过一些关于这些工具和语言的文章,所以在本文中,我将添加更多的信息和新的信息。
如果您想了解更多关于 Data Scientist 的顶级工具和语言,以及为什么应该使用它们,请继续阅读。
Python、R、SAS 和 SQL

我使用 Python 最多,其次是 R 和 SAS 编程。尤其是在学术环境中,我已经使用了 R 和 sa。我还发现它们在我最初的数据科学角色中有一些很好的用途。对于 SQL,出于数据分析和数据科学的目的,我在几乎每个角色中都使用过它。
计算机编程语言
对于每个角色,我看到越来越多的数据科学家使用 Python。我认为这种增长和专注于一种特定语言的原因是这种语言在业务中是可扩展的,同时也倾向于更多的合作机会。
例如,当我使用 Python 时,我更有可能不仅能与其他数据科学家合作,还能与机器学习和软件工程师合作。
如果我要使用 R 和 SAS,我很可能不得不重构我的代码,以便它可以被业务中已经存在的软件过程和系统解释和吸收。当然,每个公司都是不同的,有些公司在他们的堆栈中更喜欢 R 或 SAS 而不是 Python。同样需要注意的是,在我的大多数面试中,面试官更喜欢 Python 代码。
稀有
当我第一次在学术和研究环境中实践数据科学时,我发现这种语言的用处最大。然而,当我在 R 专业工作时,我从它对统计和测试的关注中受益匪浅。如果你想进行显著性测试、独特的可视化和 A/B 测试,那么 R 可能是首选。
斯堪的纳维亚航空公司
我在 SAS 上的经历与 r 类似。我在进行实验和显著性测试时受益于 SAS。它也有一些令人难以置信的独特和强大的可视化汇总统计数据,如 Q-Q 图,残差,直方图,和库克的 d。
结构化查询语言
SQL 被数据分析师、数据科学家、商业智能分析师、软件工程师和数据工程师广泛使用。为了您的数据科学事业,我强烈建议您对它有一个基本的了解。它与 Python 的相似之处在于,它是一种跨职能的方法,为您的业务传达指标。
Matplotlib,Seaborn,tqdm

对于 Python 中的可视化工具,我用得最多的就是这些。Matplotlib 和 seaborn 携手并进,而 tqdm 是一种通过显示进度条来描述代码循环的简单方法。
Matplotlib
Matplotlib【4】是一个有用的工具和流行的库,用于从数据中创建有益的可视化,甚至可以是交互式的。我通常在开发图表、绘图和直方图以进行快速分析时使用这个库。有时你需要为你自己创建可视化,而不是为其他人,比如利益相关者,所以像 Tableau 这样更复杂的工具在这些情况下是不必要的。
海生的
如果我想创建更具视觉吸引力的图形,我会使用 Seaborn。这个库有更多的选项,您可以用更多的统计数据来描述您的数据。Seaborn 制作的图形还让我想起了一些 SAS 图形,这些图形是在调用某些函数时自动创建的,比如回归模型的诊断图。
tqdm
如果你和我一样好奇并且痴迷于检查你的 Python 循环的状态, tqdm [6]也适合你。你可以直观地看到你的进度的实时更新,这样你就可以知道在它完成之前你还有多少时间,并且可以让你知道你可以花多长时间专注于其他事情。
sklearn、NumPy 和熊猫

这些工具被广泛使用是有原因的。对于使用 Python 的数据科学家来说,它们是必不可少的。
sklearn
对于简单而强大的机器学习来说,sk learn【8】是一条可行之路——也称为 scikit-learn。以下是 sklearn 的一些亮点:
- 分类
- 回归
- 聚类
- 尺寸缩小
- 型号选择
- 预处理
NumPy
NumPy【9】使用起来也很简单,可以用于数据帧计算,这是很多数据科学分析的基础。
NumPy 的常见功能包括但不限于:
- 阵列
- 分度
- 切片
- 复印
- 迭代
- 拆分
- 排序
熊猫
我想说,大多数数据科学家使用 pandas,因为它是在项目开始时对数据进行数据分析的地方,而最重要的部分是你可以开发 pandas 数据框架。这些数据帧被其他几个库接收,因此您可以更容易地对它们执行机器学习算法。
熊猫【10】的一些有用部分包括但不限于:
merginggroupingreshapinghead/tailcalculationsdescriptive statistics
Jupyter nbextensions

Alexis Antonio 在Unsplash【11】上拍摄的照片
如果你经常使用 Jupyter 笔记本,你可以添加nb 扩展【12】让你的笔记本更有条理。在您的 Jupyter 笔记本中,您可以使用以下代码添加 n 扩展:
!pip install jupyter_contrib_nbextensions!jupyter contrib nbextension install

nb 扩展选项卡。作者截图[13]。
这是当你重启你的内核/退出你的终端并在你的终端中重新输入 jupyter notebook 来重新启动它后,你的笔记本看起来会是什么样子。上面的截图显示了所有可能的扩展,你可以通过点击它们来添加。您还需要退出笔记本,然后重新打开它以查看所应用的更改。我推荐编辑器中的代码折叠和代码折叠。下面是我的笔记本在 codefolding 扩展之前的样子:

在代码折叠之前。作者截图[14]。
如你所见,这个函数看起来很正常,但是下图是应用了代码折叠之后的图像。

已应用代码折叠。作者截图[15]。
但是点击这些箭头之后会发生什么呢?他们破坏了功能。现在想象一下,你有一个很长的函数或字典,有几百行,你必须上下滚动,看着你自己的笔记本会有压力。这个代码折叠扩展肯定会给你的笔记本一个更整洁的外观。下面是该函数折叠后的样子:

折叠功能。作者截图[16]。
我希望这个工具是独一无二的。我知道有些人可能会过度讨论其他工具,但总有一些新来的数据科学家可能从未听说过这些工具。但对我来说,这个特殊的工具对我来说是新的,即使在 Jupyter Notebook 中编码多年之后。
Tableau 和谷歌数据工作室
Tableau【17】也是一个众所周知的工具,然而,一些数据科学家可能只使用定制编码来创建他们的可视化。Google Data Studio【18】不太常用,但它甚至比 Tableau 更容易使用,而且是免费的。
(舞台上由人扮的)静态画面
这个工具对于数据分析师和产品经理来说非常有用。对于想要执行非常可视化的探索性数据分析,以及创建显示您的数据科学模型指标的仪表板的数据科学家来说,它也是有益的。
谷歌数据工作室
Google Data Studio 易于使用,您可以从连接数据源开始,无论是来自实时 SQL 平台还是 CSV 文件。这里有一些我以前制作的图表,可以作为你可能用自己的数据创建的例子。我用的数据是哑数据。这里有五个你可以想象的例子:

谷歌数据工作室。作者截图[19]。
Google Data Studio 包括许多方法,无论是在模型之前还是之后,您都可以可视化您的数据。
这是另一组你也可以制作的可视化效果:

谷歌数据工作室。作者截图[20]。
使用该工具的另一个很棒的特性是,您可以通过滚动图表和图形,以及点击仪表板中的下拉菜单来使其具有交互性。这些仪表板也易于共享和保存。作为一名数据科学家,当与利益相关者共享您的仪表板时,这将被证明是有益的,因为他们以后会自己使用它们。
摘要
我们讨论了数据科学家的一些顶级工具和语言。如果你目前已经在使用它们或者它们对你来说是全新的,我希望你已经学到了一些新的东西。此外,我还包括了一些更独特或更少为人知的工具,如 tqdm、Jupyter nbextensions 和 Google Data Studio。
作为一名数据科学家,您会遇到各种项目,这些项目需要大量的工具和语言。关键是你要学会一些,并成为其他方面的专家。你的工具包将使你从其他数据科学家中脱颖而出,并使你成为更具竞争力的面试申请者和更具合作精神的员工。
总结一下,这里是数据科学家的顶级工具和语言:
Python, R, SAS, and SQLMatplotlib, Seaborn, tqdmsklearn, NumPy, and pandasJupyter nbextensionsTableau and Google Data Studio
感谢您的阅读!我感谢你的时间。欢迎在下面发表评论,并就您作为数据科学家或机器学习工程师所使用的常用工具和语言展开讨论。请参见参考资料,获取这些数据科学工具文档的快速链接。
参考
[1]由托德·夸肯布什在 Unsplash 上拍摄的照片,(2014)
[2]照片由 Katy Wilkens 在 Unsplash 上拍摄,(2017)
[3]照片由 M. B. M. 在Unsplash(2018)上拍摄
[4]Matplotlib2002–2012 John Hunter、Darren Dale、Eric Firing、Michael Droettboom 和 Matplotlib 开发团队;2012–2020 Matplotlib 开发团队。
[6]卡斯珀·达·科斯塔-路易斯@卡斯珀德尔, tqdm ,(2015–2020)
[7]照片由戴安娜·帕克豪斯在Unsplash(2018)上拍摄
[8] scikit-learn, scikit-learn ,(2020)
[9]2019 年至 2020 年
[10]熊猫开发小组。,熊猫,(2008–2020)
[11] Jupyter Contrib 团队。jupyter _ contrib _ nb extensions(2015–2018)
[12]Alexis Antonio 在 Unsplash 上拍摄的照片,(2018)
[13] M.Przybyla,nbextensions 截屏,(2020 年)
[14] M.Przybyla,在代码折叠截屏之前,(2020 年)
[15] M.Przybyla,代码折叠应用截屏,(2020 年)
[16] M.Przybyla,折叠功能截图,(2020)
[17] TABLEAU SOFTWARE,LLC,一家 SALESFORCE 公司,TABLEAU,(2003 年至 2020 年)
[18]谷歌,谷歌数据工作室,(2020)
[19]谷歌数据工作室截屏作者,(2020)
[20]谷歌数据工作室。作者截图,(2020)
熊猫 1.0 的主要特性

您今天就可以开始使用的新改进
注:熊猫 1.0.0rc 发布于 1 月 9 日。之前的版本是 0.25
Pandas 的第一个新的主要版本包含了许多优秀的特性,包括更好的数据帧自动摘要、更多的输出格式、新的数据类型,甚至还有一个新的文档站点。
完整的发行说明可以在新的文档网站上获得,但是我认为一个不太技术性的概述也会有所帮助。
要使用新版本,你可以使用pip轻松升级熊猫。在写这篇文章的时候,Pandas 1.0 仍然是一个发布候选版本,这意味着安装它需要明确指定它的版本。
pip install --upgrade pandas==1.0.0rc0
当然,升级可能会破坏您的一些代码,因为这是一个主要版本,所以您应该小心!
这个版本的 Pandas 也放弃了对 Python 2 的支持。使用熊猫 1.0+至少需要 Python 3.6+,所以要确保你的pip和python使用的是正确的版本。
$ pip --version
pip 19.3.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)$ python --version
Python 3.7.5
你可以确认一切工作正常,熊猫使用的是正确的版本。
>>> import pandas as pd
>>> pd.__version__
1.0.0rc0
使用 DataFrame.info 实现更好的自动汇总
我最喜欢的新特性是改进的DataFrame.info方法。它现在使用一种可读性更强的格式,使您的数据探索过程更加容易。
>>> df = pd.DataFrame({
...: 'A': [1,2,3],
...: 'B': ["goodbye", "cruel", "world"],
...: 'C': [False, True, False]
...:})
>>> df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 A 3 non-null int64
1 B 3 non-null object
2 C 3 non-null object
dtypes: int64(1), object(2)
memory usage: 200.0+ bytes
降价表的输出格式
我下一个最喜欢的特性是用新的DataFrame.to_markdown方法将数据帧导出到 markdown 表的能力。
>>> df.to_markdown()
| | A | B | C |
|---:|----:|:--------|:------|
| 0 | 1 | goodbye | False |
| 1 | 2 | cruel | True |
| 2 | 3 | world | False |
这使得通过 github gists 在 Medium 等地方显示表格变得更加容易。
布尔和字符串的新数据类型
Pandas1.0 还为布尔和字符串引入了实验性的数据类型。
由于这些变化是实验性的,数据类型的 API 可能会稍有变化,所以您应该小心使用它们。但是 Pandas 建议在任何有意义的地方使用这些数据类型,未来的版本将提高特定类型操作的性能,如正则表达式匹配。
默认情况下,Pandas 不会自动将您的数据强制转换成这些类型。但是如果你明确告诉熊猫这样做,你仍然可以使用它们。
>>> B = pd.Series(["goodbye", "cruel", "world"], dtype="string")
>>> C = pd.Series([False, True, False], dtype="bool")
>>> df.B = B, df.C = C
>>> df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 A 3 non-null int64
1 B 3 non-null string
2 C 3 non-null bool
dtypes: int64(1), object(1), string(1)
memory usage: 200.0+ bytes
注意Dtype列现在如何反映新的类型string和bool。
新的 string dtype 最有用的好处是,您现在可以从 DataFrame 中只选择字符串列。这使得只对数据集的文本组件构建分析变得更快。
df.select_dtypes("string")
以前,只能通过显式使用名称来选择字符串类型列。
更多新类型的文档可在这里获得。
感谢阅读!如果您觉得这有用或有趣,我还写了其他 Python 和数据科学技巧,请关注我,获取更多类似本文的文章。
Python 的对象序列化库简介
towardsdatascience.com](/how-to-reuse-your-python-models-without-retraining-them-39cd685659a5)
面向所有人的顶级谷歌人工智能工具
使用谷歌人工智能中心将想法变为现实

谷歌人工智能将人工智能的好处带给每个人(来源)
“我们希望使用人工智能来增强人们的能力,使我们能够完成更多的工作,并让我们花更多的时间进行创造性的努力。”
——杰夫·迪恩,谷歌高级研究员
称谷歌只是一个搜索巨头是一种保守的说法,因为它从一个单纯的搜索引擎成长为几个关键 it 领域创新的驱动力是如此之快。在过去的几年里,谷歌已经在几乎所有的数字领域扎下了根,无论是智能手机、平板电脑、笔记本电脑等消费电子产品,还是 Android 和 Chrome OS 等底层软件,或者是谷歌人工智能支持的智能软件。
谷歌一直在智能软件行业积极创新。凭借其在搜索和分析方面的专业知识,多年来获得的数据帮助谷歌创造了各种工具,如 TensorFlow 、 ML Kit 、 Cloud AI 以及其他许多工具,试图了解人工智能的能力。
谷歌人工智能专注于将人工智能的好处带给每个人。
接下来的章节将更加详细地介绍谷歌如何将其工具套件针对特定的用户群体,如开发人员、研究人员和组织,以及他们如何从谷歌的人工智能工具中受益。
面向开发者
随着越来越多的开发人员投身于人工智能领域,看到了它的潜力,谷歌通过提供几个强大的工具来满足他们的动态需求,例如:
●张量流
革命来了!欢迎使用 TensorFlow 2.0。
TensorFlow 是谷歌向世界提供的端到端开源深度学习库,利用机器学习来改善其各种产品提供的服务。使用 TensorFlow 的工具和库套件,开发人员可以建立高度精确和定义良好的机器学习模型。
TensorFlow 可以在各种设备上提供平滑的模型构建和灵活的部署,使创建和部署复杂的人工智能模型变得轻而易举。有了强大的社区支持,无论你是新手还是有经验的人,都有大量的想法让你开始。
这里让我们看一些样品。
准备好参加【2020 年 TensorFlow 开发峰会
为 2020 年 TensorFlow 开发峰会做好准备(来源
● ML 套件
ML Kit 将谷歌的机器学习专业知识以一个强大且易于使用的包的形式带给移动开发者(来源)。
ML Kit 是一个移动专用 SDK ,目前可用于 Android & iOS,以利用谷歌的机器学习到你的移动应用程序中的好处,并准备它们来解决现实世界的问题。 ML 套件可以帮助你在底层机器学习技术驱动的任务中取得成功,比如:
● 语言识别
将文本传递给 ML 工具包- >获取文本中检测到的语言
这支持超过 100 种语言,包括印地语,阿拉伯语,中文和更多!
在此找到支持语言的完整列表:
[## ML 工具包语言标识:支持的语言| Firebase
编辑描述
firebase.google.com](https://firebase.google.com/docs/ml-kit/langid-support)
● 文本识别
点击图片->获取图片中的文本

ML Kit 提取图片中出现的任何文本( source )
● 图像扫描和贴标
点击图片->获取图片中的对象列表
● 人脸识别
点击图片->获取图片中的所有面
可以在 ML 工具包中检测人脸(来源)
● 智能回复
将消息传递到 ML 工具包->获得 3 个智能回复

ML 套件为您提供 3 个智能回复
● 条形码扫描

ML 套件支持从条形码中扫描和提取信息(来源)
点击图片->从扫描的条形码/二维码获取信息
● 与 TensorFlow Lite 的定制模型集成
借助适用于各种用例的设备上或云实施的现成 API,您可以轻松地将 ML 模型应用于您的数据,并通过与 TensorFlow Lite 的自定义集成选项来跟踪应用的性能。

此选项允许您将 TensorFlow Lite 模型添加到 ML 工具包中并使用它们(源)
●谷歌开源

Google 开源把开源的所有价值带给 Google,把 Google 的所有资源都给开源(来源)
由于每天都有更新更好的软件被开发出来,所以需要不断地将它提升到一个新的水平。一旦开发人员开始创建只开放源代码的代码,那么社区就可以积极参与并帮助改进和扩展它。有了免费的代码,开发人员可以通过访问其存储库来修改和扩展代码,通常在这个过程中解决复杂的问题。
每日秀(来源)
谷歌承诺通过鼓励开发者向任何对其背后想法感兴趣的人公开他们的代码来团结开发者。谷歌提供了大量免费和开源项目 ,比如:
● ClusterFuzz,在过去两年里,它在几个项目中发现了超过 11000 个漏洞。
●auto slip,智能重构视频以适应现代设备。
● Blockly,通过拖放代码块提供简单的编码,甚至可以用来创建业务逻辑。
● 公平性指标
谷歌在其开源倡议中提供了公平指标。它是一种工具,提供量化机器学习系统中公平性的指标。由 TensorFlow 提供支持,目的是消除机器学习系统的任何偏见,同时提高其公平性,减少影响系统和组织的不公平偏见。由于能够随着需求的增长而扩展,谷歌在设计时考虑到了各种业务。

使用公平性指标来可视化公平性评估的指标(来源)。
●合作实验室

开始用 Google Colaboratory 编写 Python(来源)
Colaboratory 或 Colab ,简而言之,是 Python 的在线代码编辑器和编译器。你可以把它想象成 Google Docs,但对于 Python 来说,它是由 Google Drive 等提供的存储能力支持的。它相对易于使用,消除了在多个用户之间共享配置的麻烦,简化了协作流程。它还提供了远程处理您的代码的能力,并提供了为代码片段的详细解释创建降价的选项。
想了解更多关于 Google Colab 的信息,请观看视频
开始使用谷歌合作实验室(来源
为研究人员
在进入一个新的研究领域时,广泛的研究是绝对必要的。利用现有模型生成的全面而丰富的数据集,并向用户公开,Google 通过提供以下工具简化了获取这些数据集的过程:
● 谷歌数据集
对于每一个机器学习模型,根本的问题是用正确的数据训练它。Google Datasets 通过提供数据集来解决这个问题。
谷歌数据集是由谷歌管理的数据集集合,通过分析研究人员的广泛兴趣定期更新。
谷歌提供了相当广泛的数据集类别,包括图像、转录的音频、视频和文本。针对具有不同使用案例的各种用户,每个类别都有数据集的详细介绍,并带有下载链接以便于访问。
一旦用户下载数据集并在数据集上训练他们的模型,他们就可以为现实世界的场景准备他们的模型。可以通过谷歌数据集搜索来搜索更多的数据集。
● 谷歌数据集搜索
随着互联网上的每个模型生成其数据集,谷歌通过提供搜索功能,帮助简化了与互联网上的其他用户共享数据集的过程。就像它在网上搜索任何东西的搜索服务一样,谷歌的数据集搜索缩小了你要寻找的数据集的搜索范围。从那里开始,您可以了解更多关于数据集的信息,并得到它。
数据为王,谷歌知道这一点
以下是您需要了解的关于世界上最大的数据仓库的信息
towardsdatascience.com](/google-just-published-25-million-free-datasets-d83940e24284)
● 众包
谷歌的另一项举措是通过向用户提供有趣的挑战来提高其数据集的准确性,要求他们识别各种类别的图像,如绘画、字母、报纸、插图等等。
从这些类别中,贡献者可以从提供的选择中识别和标记图片,以改善谷歌的服务。如果你有这种竞争精神,一旦你开始做出贡献,你将被授予一个有趣的徽章和里程碑。
通过 Google Crowdsource(source)改进你的产品
Google Crowdsource 不仅处理图像,还处理各种其他部分,比如:
-手写识别
-面部表情
-翻译
-翻译验证
-图像标题
-图像标签验证
为组织
通过密切监控市场,谷歌可以确定其服务如何将企业的潜在里程碑转变为已实现的目标。谷歌为企业提供工具,通过采用人工智能和人工智能的专业知识,可以简化他们的工作流程,达到新的高度。从精确的数据集、定制模型、高性能云服务等等,谷歌可以为各种规模的企业提供很多东西。
一些组织已经受益于谷歌的人工智能工具,例如【Lyft】马克斯·凯尔森易贝 和 两个适马 等等。组织可以从以下谷歌人工智能工具中受益:
● 云 TPU

TPU·V2(来源:谷歌云平台博客)
随着所有的数字运算,机器学习需要一个高性能的系统。正因为如此,谷歌建立了它的 TPU ,这是张量处理单元的缩写,它就是为这个服务的。通过为企业提供所需的能力,而无需任何内部设置,云 TPU 使企业能够通过降低硬件成本为客户提供最佳服务。
企业可以确定他们首选的云 TPU,从要求较低的任务到要求最高的任务,并从以下提供的选项中选择一个:
●云 TPU v2
●云 TPU v3
●云 TPU v2 吊舱
●云 TPU v3 Pod
● 云 AI
云人工智能使你能够将机器学习能力应用到你的业务中,以便它随时准备迎接新的挑战。使用云人工智能,企业可以使用谷歌提供的现有模型,或者根据自己的喜好定制一个模型。
Umdlibrary Yes GIF 作者凯瑟琳·马丁图书馆
云人工智能分为三个部分。云人工智能包括—
-人工智能中枢
提供了一个现成的人工智能组件的集合,并提供了在模型上共享和实验的选项。
- 人工智能积木
允许开发人员将对话、视觉、语言、结构化数据和云自动化功能添加到他们的应用程序中。
- AI 平台
人工智能平台通过人工智能平台笔记本、深度学习容器、数据标签服务、持续评估、人工智能平台培训等多种服务,使数据科学家、工程师和开发人员能够快速将他们的想法转化为部署。
有趣的阅读—
[## 谷歌云人工智能从云视觉 API 中移除性别标签,以避免偏见
谷歌云人工智能正在用它的云视觉 API 移除给图像中的人贴上“男人”或“女人”标签的能力
venturebeat.com](https://venturebeat.com/2020/02/20/google-cloud-ai-removes-gender-labels-from-cloud-vision-api-to-avoid-bias/)
3。云汽车
Cloud AutoM L 被 Disney 、 Imagia 、 Meredith 等热门品牌使用,可以轻松训练定制机器学习模型,生成高质量的训练数据。通过与大量其他谷歌服务的完全集成,以及从一个服务到另一个服务的无缝转移过程,您的企业可以通过最大化您的产出来实现其全部潜力。
现在就在人工智能前沿会议上获取门票,聆听这位演讲者的演讲。
medium.com](https://medium.com/aifrontiers/an-unassuming-genius-the-man-behind-google-brains-automl-4ddc801f3e9b)
开始使用 AutoML( 来源)
结论
人工智能出现的时间相对较短,但随着时间的推移,我们发现的进步和应用是惊人的。看看人工智能的好处,企业可以通过早期采用人工智能和机器学习并进行试验来获得优势。
谷歌一直在这一领域不断创新,为包括开发人员、研究人员和企业在内的各种用户提供了多种工具,如 ML Kit 、 TensorFlow 、 Fire Indicators 等。通过鼓励使用其云人工智能工具,谷歌正试图推动人工智能和人工智能在现实世界中的存在。
其目的是为用户提供评估、协作、改进和部署其定制的机器学习模型的精确方法,以提高生产力和改善服务。
更多资源
hacker noon——TensorFlow 死了,tensor flow 万岁!
颤振社区— [颤振+MLKit = ❤](http://Flutter +MLKit = ❤)
走向数据科学——Google Colab 入门
数据科学中心—https://www . datascience Central . com/profiles/blogs/top-8-Google-ai-tools
谷歌人工智能——https://ai.google/
关于作者
克莱尔 D 。是Digitalogy—的内容制作者和营销人员,这是一个技术采购和定制匹配市场,根据全球各地的特定需求,将人们与预先筛选的&顶尖开发人员和设计师联系起来。在LinkedinTwitterinsta gram上连接 Digitalogy 。
用于聚类的顶级机器学习算法
如何找到数据的底层结构

聚类是一种对一组数据点进行分组的方法,将相似的数据点分组在一起。因此,聚类算法寻找数据点之间的相似或相异之处。聚类是一种无监督的学习方法,因此没有与数据点相关联的标签。聚类算法试图找到数据的底层结构。
有不同的方法和算法来执行聚类任务,这些任务可以分为三个子类别:
- 基于分区的聚类
- 层次聚类
- 基于密度的聚类
所有这些方法都旨在将数据分组到簇中。他们使用的方法略有不同。我将用每种方法的通用算法详细解释每种方法。在开始这个话题之前,我想指出聚类和分类之间的区别。
聚类 vs 分类
- 分类任务中的观察值(或数据点)有标签。根据一些测量值对每个观察值进行分类。分类算法试图对观测值的测量值(特征)和它们的指定类别之间的关系进行建模。然后,模型预测新观察的类别。
- 聚类中的观察值(或数据点)没有标签。我们希望该模型能够在数据集中找到结构,以便可以将相似的观察结果分组到聚类中。我们基本上要求模型标记观察值。
基于分区的聚类

Shashank Sahay 在 Unsplash 上拍摄的照片
基于分区的聚类技术试图根据应用于数据点的距离度量来创建数据分区。这种方法最常见的算法是 k 均值聚类。
k-均值聚类旨在将数据划分为 k 个聚类,使得同一聚类中的数据点相似,而不同聚类中的数据点相距较远。
两点的相似性由它们之间的距离决定。
测量距离的方法有很多。欧几里德距离(p = 2 的闵可夫斯基距离)是最常用的距离度量之一。
K-means 聚类试图最小化一个类内的距离,最大化不同类之间的距离。K-means 算法不能确定聚类数。我们需要在创建 KMeans 对象时定义它,这可能是一项具有挑战性的任务。
K-means 是一个迭代过程。它建立在期望最大化算法的基础上。确定集群数量后,它通过执行以下步骤来工作:
- 为每个簇随机选择质心(簇的中心)。
- 计算所有数据点到质心的距离。
- 将数据点分配给最近的聚类。
- 通过取聚类中所有数据点的平均值,找到每个聚类的新质心。
- 重复步骤 2、3 和 4,直到所有点收敛并且聚类中心停止移动。
注意:初始质心是随机选择的,这可能会导致最终的聚类有些不同。为了解决这个问题,scikit learn 提供了 n_init 参数。k-means 算法以不同的初始质心运行“n_init”次,并且最终结果将根据 n_init 次连续运行来确定。
优点:
- 容易理解
- 相对较快
- 可扩展用于大型数据集
- 能够以一种聪明的方式选择初始质心的位置,从而加速收敛
- 保证收敛
缺点:
- 集群的数量必须预先确定。K-means 算法无法猜测数据中存在多少个聚类。确定集群的数量可能是一项具有挑战性的任务。
- 只能画线性边界。如果数据中存在非线性结构来分隔组,k-means 将不是一个好的选择。
- 随着样本数量的增加而变慢,因为在每一步,k-means 算法都会访问所有数据点并计算距离。另一种方法是使用数据点的子集来更新质心的位置(即 sk learn . cluster . minibatchkmeans)
- 对异常值敏感
层次聚类

塞缪尔·查伦在 Unsplash 上拍摄的照片
这种方法通过构建集群的层次结构来工作。分层聚类意味着通过迭代分组或分离数据点来创建聚类树。有两种类型的分层聚类:
- 凝聚聚类
- 分裂聚类
分层聚类的优点之一是我们不必指定聚类的数量(但是我们可以)。

聚集聚类是一种自下而上的方法。每个数据点首先被假定为一个单独的聚类。然后迭代地组合相似的聚类。让我们看一个例子来解释清楚这个概念。
我们有一个由 9 个样本组成的数据集。我选择与这些样本相关的数字来演示相似性的概念。在每次迭代(或级别)中,最接近的数字(即样本)被组合在一起。如下图所示,我们从 9 个集群开始。最接近的在第一级被组合,然后我们有 7 个集群。与蓝线相交的黑线的数量代表簇的数量。

树突图
上图称为树状图,这是一个表示基于树的方法的图表。在层次聚类中,树状图用于可视化聚类之间的关系。
随着我们往上走,随着更多样本的合并,聚类的数量会减少。在级别 6 之后,所有样本被合并到一个大的聚类下。
层次聚类的优点之一是我们不必预先指定聚类的数量。但是,将所有数据点合并到一个聚类中是不明智的。我们应该在某个时候停止组合集群。Scikit-learn 为此提供了两个选项:
- 达到一定数量的簇后停止( n_clusters )
- 设置联动的阈值(距离 _ 阈值)。如果两个聚类之间的距离超过阈值,这些聚类将不会被合并。
分裂聚类在现实生活中并不常用,所以我将简单地提一下。一个简单而清晰的解释是,分裂性聚集与聚集性聚集相反。我们从一个包含所有数据点的巨大集群开始。然后数据点被分成不同的簇。这是一种自上而下的方法。
如果基础数据具有某种层次结构,分层聚类是有用的,并且会给出更好的结果。
分层聚类的一些常见用例:
- 遗传或其他生物数据可以用来创建一个树状图,以代表突变或进化水平。种系发生树用于展示基于相似性和差异性的进化关系。
- 层次聚类也用于对文本文档进行分组。
- 层次聚类的另一个常见用例是社交网络分析。
- 层次聚类也用于离群点检测。
优点
- 不需要预先指定集群的数量。必须为 k-means 算法指定聚类数。
- 借助于树状图,它很容易实现和解释。
- 总是生成相同的聚类。k-均值聚类可能会产生不同的聚类,这取决于质心(聚类的中心)是如何初始化的。
缺点
- 与 k-means 相比,这是一种较慢的算法。分层聚类需要很长时间来运行,尤其是对于大型数据集。
基于密度的聚类

基于分区和层次聚类技术对于正常形状的聚类非常有效。然而,当涉及到任意形状的聚类或检测异常值时,基于密度的技术更有效。
请考虑以下数字:



这些图中的数据点以任意形状分组或者包含异常值。基于密度的聚类算法在发现高密度区域和离群点方面非常有效。对于某些任务来说,检测异常值是非常重要的,例如异常检测。这种方法最常用的算法之一是 DBSCAN。
DBSCAN 代表den sity-basspartialcillumination ofaanoise。它能够找到任意形状的聚类和带有噪声的聚类(即异常值)。
DBSCAN 背后的主要思想是,如果一个点靠近来自该簇的许多点,则该点属于该簇。
DBSCAN 有两个关键参数:
- eps :指定邻域的距离。如果两点之间的距离小于或等于 eps,则认为这两点是相邻的。
- minPts: 定义一个聚类的最小数据点数。
基于这两个参数,点被分类为核心点、边界点或异常点:
- 核心点:如果一个点在其半径为 eps 的周围区域内至少有 minPts 个数的点(包括该点本身),则该点为核心点。
- 边界点:如果一个点可以从一个核心点到达,并且其周围区域内的点数少于 minPts,那么这个点就是边界点。
- 离群点:如果一个点不是核心点并且从任何核心点都不可达,那么这个点就是离群点。
这些观点可以用形象化来更好地解释。下图摘自维基百科:

在这种情况下,minPts 是 4。红色点是核心点,因为在其半径为 eps 的周围区域内至少有4 个点。该区域在图中用圆圈表示。黄色点是边界点,因为它们可以从核心点到达,并且其邻域内的点少于 4 个。可到达意味着在核心点的周围区域。点 B 和 C 在其邻域内(即以 eps 为半径的周围区域)有两个点(包括点本身)。最后,N 是一个异常值,因为它不是一个核心点,不能从核心点到达。
我们已经学习了参数和不同类型点的定义。现在我们可以谈谈算法是如何工作的。这其实很简单:
- 确定 minPts 和 eps。
- 随机选择一个起始点,使用半径 eps 确定其邻域。如果邻域中至少有 minPts 个数的点,则将该点标记为核心点,并开始形成聚类。如果不是,则该点被标记为噪声。一旦聚类形成开始(假设聚类 A),初始点邻域内的所有点都成为聚类 A 的一部分。如果这些新点也是核心点,则它们邻域内的点也被添加到聚类 A 中。
注意:被标记为噪声的点可以被重新访问,并且是聚类的一部分。
- 下一步是在前面步骤中没有访问过的点中随机选择另一个点。然后同样的程序适用。
- 当所有点都被访问时,该过程结束。
使用 k-means 算法中的距离测量方法来确定点之间的距离。最常用的方法是欧氏距离。
通过应用这些步骤,DBSCAN 算法能够找到高密度区域并将它们从低密度区域中分离出来。
一个集群包括相邻的核心点(即彼此可到达的)以及这些核心点的所有边界点。形成集群的必要条件是至少有一个核心点。尽管可能性很小,但我们可能有一个只有一个核心点及其边界点的集群。
优点:
- 不需要预先指定簇的数量。
- 适用于任意形状的集群。
- DBSCAN 对异常值是鲁棒的,并且能够检测异常值。
缺点:
- 在某些情况下,确定适当的邻域距离(eps)并不容易,这需要领域知识。
- 如果集群在集群内密度方面差异很大,那么 DBSCAN 就不太适合定义集群。聚类的特征由 eps-minPts 参数的组合来定义。因为我们将一个 eps-minPts 组合传递给该算法,所以它不能很好地推广到具有很大不同密度的聚类。
感谢阅读。如果您有任何反馈,请告诉我。
参考文献
SaaS 公司的顶级指标
商业量化是成功的关键

艾萨克·史密斯在 Unsplash 上拍摄的照片
“当衡量绩效时,绩效就会提高。当性能得到测量和反馈时,改进的速度就会加快。”
-皮尔逊定律
在过去的几十年里,aaS 公司在市场上变得越来越普遍。仅在 2018 年,全球就有大约 11000 家 SaaS 公司(Crunchbase)。虽然 2018 年 SaaS 的预计收入为 800 亿美元(Gartner),但 2018 年 SaaS 的实际收入超过 1200 亿美元(IDC 全球)!这些收入的很大一部分也流向了一些大公司,比如谷歌、Adobe、Slack 和微软。
SaaS 公司如何在快速增长的市场中保持竞争力?虽然可能有很多方法,但向内看是一种非常有效的方法。
公司可以使用许多 SaaS 指标来衡量他们的增长,但今天我将重点关注我认为最相关的指标:
- 客户流失
- 收入流失
- 客户终身价值(LTV)
- 客户获取成本(CAC)
- CAC:LTV 比率
- 恢复 CAC 的月数
客户流失
客户流失率是衡量一段时间内失去多少业务的指标。客户流失有助于公司更好地了解客户保持率,并找出产品和/或公司的痛点。

客户流失
作为一般基准,5–7%的年流失率是一个很好的目标(大约每月 0.4–0.6%)。当然,这一指标取决于公司的许多方面。如果你公司的主要客户群是企业级客户,你会希望有一个低流失率,因为每个客户的离开都会对你的底线产生重大影响。另一方面,如果您有许多合同期较短或遇到现金流问题的小型企业客户,那么更高的客户流失率可能是可以接受的。
每月经常性收入(MRR)流失
每月经常性收入流失通常与客户流失一起衡量。如果你有 100 个客户,失去了 5 个,那就是 5%的客户流失率,但是你怎么知道每个客户的流失实际上给公司造成了多少损失呢?这就是收入流失发挥作用的地方。
重要的是要注意到你可以因为各种原因(向上销售/向下销售、折扣、信用、用途变化等)在不失去或获得任何客户的情况下获得巨大的收入流失。).另外,将现有客户的收入流失与新客户分开来衡量也很有用。通过这种方式,确定新的收入/损失来自哪里变得更加容易。
看着 MRR 搅动,公式如下:

每月经常性收入流失
您也可以调整年度经常性收入(ARR)和季度经常性收入(QRR)的公式。这个公式给出了一段时间内从现有客户那里获得/损失的收入的百分比。如果流失率为负,这意味着我们的 MRR 自期初以来实际上增加了。
对于基准,我使用了 Baremetrics 开放基准群组分析页面,基准取决于每账户平均收入(ARPA)。从 Baremetrics 的调查结果来看,一个好的 MRR 流失率范围是 8-10%。
客户终身价值(LTV)
从之前的客户流失开始:

客户生命周期
我们现在知道了客户的生命周期。例如,如果月流失率为 5%,客户寿命将为 1/0.05,即 20 个月。
下一步是计算寿命值,即:

终身价值
其中 ARPA 是每个账户的平均收入。结合上面的客户生命周期,我们也可以这样来看公式:

终身价值——客户流失
更准确的版本是使用 MRR 流失来代替:

终身价值——MRR 流失
这个值让我们大致了解每个客户给我们公司带来了多少价值。一般来说,LTV 高并无大碍,但是 LTV:CAC 比率(稍后解释)为 SaaS 公司提供了一个明确的基准。
客户获取成本(CAC)

客户获取成本
顾名思义, CAC 是衡量获得一个客户需要多少成本的指标。它考虑了广告、员工工资、团队会议、产品维护等等。
如果你花 1000 美元获得 100 个新客户,那么 CAC 就是 10 美元。这个 CAC 好吗?这取决于客户带来了多少价值,我们将在接下来进一步探讨这一点。
LTV:CAC 比率

LTV 与 CAC 比率
LTV:资本成本比率是 SaaS 公司最重要的比率之一。它回答了这样一个问题:我们每花一美元去获得一个客户,我们能得到多少收入作为回报?
LTV 与 CAC 的理想比例是 3:1 。如果你的比例是 1:1,那就是你花钱太多的迹象。另一方面,10:1 的比率乍一看似乎不错,但这也可能表明你没有花足够的钱来获得客户,从而限制了你的市场份额。
恢复 CAC 的月数

恢复 CAC 的月数
这个指标帮助我们找出在获得一个新客户后需要多长时间才能达到收支平衡。通常,的目标是在获得客户后的 12 个月内收回 CAC。更多成功的公司能够在更短的时间内做到这一点。
想象一下,我们的第一个客户以 12,000 美元的价格从我们这里购买了一份年度订阅,但它在 CAC 中花费了 8000 美元。现金流大概是这样的:

8 个月后,我们终于可以从我们的第一个客户那里看到一些利润了!如果我们将客户增加到 2 或 3 个,同时将 CAC 保持在 8000 美元,我们将看到我们的增长呈指数增长!对于拥有 SaaS 产品的初创公司,负现金流在早期就被预期,这些公司必须保持强劲,因为他们努力增加他们的客户群。
我知道还有许多其他 SaaS 指标公司可以用来提高绩效,但这是我觉得在 SaaS 最普遍的一些。
我希望这些信息有助于澄清一些重要的 SaaS 指标。非常感谢你阅读这篇博客,希望你继续关注下一篇!
2020 年最佳 NLP 读物
这是我个人为自然语言处理推荐的书籍列表,供实践者和理论家参考

作者图片
迄今为止,有很多关于自然语言处理的书籍可供你学习。然而,为自己选择合适的书可能会令人生畏,因为书实在太多了!这篇文章提供了我个人推荐的补充你的 NLP 学习的顶级书籍列表。我把清单分成了实践和理论书籍,这取决于你是实践者还是研究者。
练习册
1.实用自然语言处理:构建真实世界自然语言处理系统的综合指南
作者索姆亚·瓦贾拉、菩萨、阿努杰·古普塔、哈什特·苏拉纳(2020 年 6 月 17 日出版)
评分:⭐⭐⭐⭐

这本书概述了如何为你自己的问题建立一个真实的 NLP 系统。它将指导您逐步构建一个专为您的用例定制的高性能、高效的 NLP 设置。这本书涵盖了各种 NLP 任务的广泛范围,不同的 NLP 和深度学习方法,如何根据您自己的特定设置微调模型,不同方法的评估,软件实施和部署,以及来自领先研究人员的最佳实践。
2.使用 PyTorch 进行自然语言处理:使用深度学习构建智能语言应用
作者德利普·拉奥,布莱恩·麦克马汉(2019 年 2 月 19 日出版)
评分:⭐⭐⭐⭐

这本书是一本实用指南,教你如何使用流行的 Pytorch 库构建 NLP 应用程序。这是一本方便的书,它将教你:计算图和监督学习范式,Pytorch 的基础知识,传统的 NLP 方法,神经网络的基础,单词嵌入,句子预测,序列到序列模型,以及构建生产系统的设计模式。对于那些喜欢从实际例子中学习并希望使用 Pytorch 进行开发的人来说,这是一本很棒的书。
3.自然语言处理实践:用 Python 理解、分析和生成文本
由霍布森巷、汉尼斯哈普克、科尔霍华德(2019 年 4 月 14 日出版)
评分:⭐⭐⭐⭐⭐

这本书假设对深度学习和 Python 技能有初步的理解。它教你如何使用 Python 库(如 Keras、Tensorflow、gensim 和 sci-kit learn)解决现代有趣的 NLP 问题。这本书涵盖的内容从基础到更深的自然语言处理概念:字预处理,字表示,感知器,CNN,RNN,LSTM,序列到序列模型和注意力,命名实体识别,问答,对话系统,最后优化自然语言处理系统。
4.针对拥有 fastai 和 PyTorch 的程序员的深度学习:没有博士学位的 ai 应用
由杰瑞米·霍华德、西尔万·古格(2020 年 8 月 4 日出版)
评分:⭐⭐⭐⭐⭐

这本书的作者展示了没有人工智能博士学位如何实现深度学习,这是业内普遍认为的一种误解。使用流行的框架 fast.ai,这一切都是可能的,该框架旨在将 NLP 的生产和研究转化为几行代码。这本书向您展示了如何真正快速地建立和训练深度学习模型,使用最佳实践方法,提高准确性和速度,并将您的模型部署为 web 应用程序。对于没有多少深度学习或 NLP 背景,但知道一些 Python 基础知识的人来说,这是一本完美的书。
理论书籍
1.自然语言处理中的神经网络方法
作者约夫·戈德堡,格雷姆·赫斯特(2017 年 4 月 17 日出版)
评分:⭐⭐⭐⭐

这是我最喜欢的关于 NLP 的理论书,非常全面。它侧重于 NLP 的神经网络模型背后的概念,并显示它们如何成功地解决 NLP 问题。本书的前半部分涵盖了监督学习、前馈神经网络、处理文本数据的基础知识、分布式单词表示和计算图抽象。本书的后半部分介绍了更具体的模型架构,这些架构构成了当今许多最先进方法的基础:CNN、RNN、LSTM、基于世代的模型和注意力模型。
2.自然语言处理中的深度学习
由邓丽、刘阳(发布于 2018 年 5 月 23 日)
评分:⭐⭐⭐⭐

这本书主要面向想要了解 NLP 最新发展水平(截止到 2018 年年中)的高级学生、博士后研究人员和行业研究人员。这本书回顾了各种 NLP 任务中的最新方法:语音识别、对话系统、问题回答、机器翻译、情感分析、自然语言生成等。
3.自然语言处理和语音识别的深度学习
由乌代·卡马斯、刘醇逸、詹姆斯·惠特克(2020 年 8 月 14 日出版)
评分:⭐⭐⭐⭐⭐

这本书解释了 NLP 深度学习背后的概念。分为机器学习、NLP、语音介绍三个板块;深度学习基础;以及先进的文本和语音深度学习技术。第一部分介绍了基本的机器学习和自然语言处理理论。第二部分讲授 NLP 的基本概念,包括单词嵌入、CNN、RNN 和语音识别模型。最后一节讨论了自然语言处理中的前沿研究,如注意机制、记忆增强网络、多任务学习、强化学习、领域适应等。
4.自然语言处理简介
作者雅各布·爱森斯坦(2019 年 10 月 1 日出版)
评分:⭐⭐⭐⭐

这本书是针对高级本科生和研究生,学术研究人员和 NLP 软件工程师。它提供了一个经典算法的综合研究,也是在当前时代使用的当代技术。这本书分为四个部分。第一部分介绍基本的机器学习,第二部分教授文本的结构化表示。第三部分探讨了不同的单词表示,而最后一部分涵盖了三个基本的 NLP 应用:信息提取、机器翻译和文本生成。
结束语
在这篇文章之后,我希望你现在能对现有的顶级书籍有一个更广阔的视角!😄,如果这是你的预期目标,我希望你在一天结束的时候脑子里有一本书
为了您的方便,这是书单:
练习册
- 实用自然语言处理:构建真实世界自然语言处理系统综合指南
- 使用 PyTorch 进行自然语言处理:使用深度学习构建智能语言应用
- 自然语言处理在行动:用 Python 理解、分析、生成文本
- fastai 和 PyTorch 的程序员深度学习:没有博士学位的 ai 应用
理论书籍
(注意:这篇文章包含所讨论书籍的链接)
如果你喜欢我的工作,你也可以看看我以前在顶级 NLP 图书馆 2020 上的帖子!
AllenNLP,Fast.ai,Spacy,NLTK,TorchText,Huggingface,Gensim,OpenNMT,ParlAI,DeepPavlov
towardsdatascience.com](/top-nlp-libraries-to-use-2020-4f700cdb841f)
2020 年将使用的顶级 NLP 库
AllenNLP,Fairseq,Fast.ai,Spacy,NLTK,TorchText,Huggingface,Gensim,OpenNMT,ParlAI,DeepPavlov

涉及
自然语言处理
自然语言处理已成为 2020 年深度学习中最受研究的领域之一,这主要是因为它越来越受欢迎,未来有潜力,并支持各种各样的应用程序。
如果你以前玩过深度学习,你可能知道常规的深度学习框架,如 Tensorflow 、 Keras 和 Pytorch 。假设你知道这些基本框架,本教程致力于用其他有用的 NLP 库简要指导你,你可以在 2020 年学习和使用。根据您想做的事情,您可能会去掉一些您感兴趣或不知道存在的工具的名称!
总体框架
艾伦 LP

AllenNLP 标志(来源)
- 知名度:⭐⭐⭐⭐
- 官方网站:https://allennlp.org/
- github:https://github.com/allenai/allennlp
- 说明:AllenNLP 是 NLP 深度学习的通用框架,由世界著名的 Allen Institute for AI 实验室建立。它包含最先进的参考模型,您可以快速开始实施。它还支持各种各样的任务和数据集,因此无需担心。它还包括许多很酷的演示,你可以看看你是否想学习和使用这个框架!
公平序列

Fairseq 徽标(来源)
- 知名度:⭐⭐⭐⭐
- 官方网站:https://fairseq.readthedocs.io/en/latest
- github:https://github.com/pytorch/fairseq
- 说明:Fairseq 是由脸书人工智能研究院开发的一个流行的自然语言处理框架。它是一个用于机器翻译、文本摘要、语言建模、文本生成和其他任务的序列建模工具包。它包含经典模型的内置实现,如 CNN、LSTMs,甚至是具有自我关注功能的基本变形金刚。它的 CLI 支持也非常方便。我有时会使用 Fairseq 来训练基线,以便与我自己的模型进行比较,我敢打赌,许多研究人员也是出于同样的目的使用它的!
Fast.ai
- 知名度:⭐⭐⭐⭐
- 官方网站:【http://docs.fast.ai/
- github:https://github.com/fastai/fastai
- 解释:Fast.ai 旨在通过其免费的在线课程和易于使用的软件库,让没有技术背景的人也可以进行深度学习。事实上,它的联合创始人杰瑞米·霍华德刚刚出版了(2020 年 8 月)一本全新的书,名为fastai 和 PyTorch 的程序员的深度学习:没有博士学位的人工智能应用,它的标题非常简单明了。在 Fast.ai 库中,他们有一个指定的文本部分,用于任何与 NLP 相关的内容。对于 NLP 数据预处理、模型构建、训练和评估,它们具有超高级别的抽象和简单的实现。我真的推荐 Fast.ai 给任何一个重实践轻理论,想快速解决一个问题的人。
预处理
空间
- 知名度:⭐⭐⭐⭐⭐
- 官方网站:https://spacy.io/
- github:https://github.com/explosion/spaCy
- 说明:Spacy 是最流行的文本预处理库,也是你能找到的最方便的库。它包含许多易于使用的功能,如标记化、词性标注、命名实体识别等等。它还支持 59+语言和几个预训练的词向量,你可以让你快速入门!
NLTK
- 知名度:⭐⭐⭐⭐⭐
- 官方网站:https://www.nltk.org/
- github:https://github.com/nltk/nltk
- 说明:类似于 Spacy,它是现代 NLP 的另一个流行的预处理库。它的功能范围从标记化、词干化、标注到解析和语义推理。就个人而言,NLTK 是我最喜欢的预处理库,因为我喜欢 NLTK 的简单性。它能快速完成任务。
火炬报
- 知名度:⭐⭐⭐⭐
- 官方网站:https://torchtext.readthedocs.io/en/latest/
- github:【https://github.com/pytorch/text
- 说明:TorchText 得到 Pytorch 的官方支持,因此越来越受欢迎。它包含方便的数据处理实用程序,可以在将它们输入深度学习框架之前批量处理和准备它们。在我的训练、验证和测试数据集中,我经常使用 TorchText 来进行标记化、vocab 构造和创建迭代器,这些都可以在以后由数据加载器使用。它真的是一个方便的工具,用几行简单的代码就能帮你处理所有繁重的工作。您还可以轻松地对数据集使用预先训练的单词嵌入,如 Word2Vec 或 FastText。通过查看我的 BERT 文本分类使用 Pytorch 文章,你可以看到我是如何使用 TorchText 的。
变形金刚(电影名)
拥抱脸

Huggingface 的变形金刚 Logo ( 来源)
- 知名度:⭐⭐⭐⭐⭐
- 官方网站:https://huggingface.co/
- github:https://github.com/huggingface/transformers
- 说明:这是最受欢迎的库,实现了各种各样的变形金刚,从伯特和 GPT-2 到巴特和改革者。我每天都在使用它,根据我自己的经验,它们的代码可读性和文档非常清晰。在他们的官方 github repo 中,他们甚至按照不同的任务来组织他们的 python 脚本,比如语言建模、文本生成、问题回答、多项选择等。它们有内置的脚本来运行这些任务的基线转换器,所以使用它们真的很方便!
具体任务
根西姆
- 知名度:⭐⭐⭐
- 官方网站:https://radimrehurek.com/gensim/
- github:https://github.com/RaRe-Technologies/gensim
- 任务:主题建模,文本摘要,语义相似度
- 解释:Gensim 是一个高端的行业级软件,用于特定文本的主题建模。它非常健壮、独立于平台并且可伸缩。我在一家人工智能初创公司实习时使用过它,我们想判断两篇报纸文章之间的语义相似性。有一个非常简单的函数调用,允许您这样做并返回它们的相似性得分,因此非常方便!
OpenNMT
- 知名度:⭐⭐⭐
- 官方网站:【https://opennmt.net/
- github:【https://github.com/OpenNMT/OpenNMT-py
- 任务:机器翻译
- 说明:对于机器翻译和序列学习任务,OpenNMT 是一个方便而强大的工具。它包含高度可配置的模型和训练程序,使它成为一个非常简单的使用框架。我有同事推荐使用 OpenNMT 来完成不同种类的序列学习任务,因为它是开源的并且简单。
帕莱

ParlAI 标志(来源)
- 知名度:⭐⭐⭐
- 官方网站:https://parl.ai/
- github:https://github.com/facebookresearch/ParlAI
- 任务:面向任务的对话、闲聊对话、视觉问答
- 说明:ParlAI 是脸书的#1 框架,用于共享、训练和测试不同类型对话任务的对话模型。它为支持各种参考模型、预训练模型、数据集等提供了一体化环境。与列表中的大多数其他工具不同,ParlAI 需要一定程度的编码和机器学习专业知识,如果你想自己定制东西的话。换句话说,使用起来有点复杂,但如果你喜欢对话,这仍然是一个很好的工具。
DeepPavlov

DeepPavlov 标志(来源)
- 知名度:⭐⭐⭐
- 官方网站:http://deeppavlov.ai/
- github:https://github.com/deepmipt/DeepPavlov
- 任务:面向任务的对话,闲聊对话
- 解释:作为 ParlAI 的替代,我认为 DeepPavlov 更适合应用和部署,而不是研究,尽管你仍然可以使用 DeepPavlov 进行大量的定制。我认为帕尔莱之于迪普帕洛夫就像皮托尔之于张量流。DeepPavlov 是一个主要用于聊天机器人和虚拟助手开发的框架,因为它提供了生产就绪和行业级对话代理所需的所有环境工具。我曾经在一次黑客马拉松中使用过它,将一个对话代理微调到餐馆领域(这样用户可以查看菜单并点他们想要的食物),最终结果非常棒!
2021 年人工智能工程师的顶级编程语言
从几种编程语言中,人工智能工程师和科学家可以选择适合他们项目需求的正确语言

图片由 Pixabay 提供
人工智能 现在已经成为我们日常生活中不可或缺的一部分,它在数百种独特的使用案例和情况中提供了所有的好处,更不用说它让我们的事情变得多么简单和容易了。
随着近年来的推动,人工智能已经走过了漫长的道路,帮助企业成长并实现其全部潜力。如果没有底层编程语言的核心改进,人工智能的这些进步是不可能的。
随着人工智能的蓬勃发展,随着编程语言的进步,对高效熟练的程序员和工程师的需求也在飙升。虽然有很多编程语言可以让你开始开发人工智能,但没有一种编程语言是人工智能编程的一站式解决方案,因为各种目标要求每个项目都有特定的方法。
我们将讨论下面列出的一些最受欢迎的方法,让您自己做决定——
● Python
Python 是你能读懂的最强大的语言。
——保罗·杜布瓦

通过 Unsplash 进行 Python 编程
开发于 1991 年,, Python 一直是一项民意调查,表明超过 57%的开发者更有可能选择 Python 而非 C++ 作为他们开发人工智能解决方案的编程语言。Python 简单易学,让程序员和数据科学家更容易进入人工智能开发的世界。
Python 是程序员需要多大自由的一个实验。太多的自由,没人能读懂别人的代码;太少,表现力受到威胁。
——吉多·范·罗苏姆
使用 Python,你不仅可以获得优秀的 社区支持和大量的库,还可以享受编程语言提供的灵活性。您可能从 Python 中受益最大的一些功能是平台独立性和深度学习和机器学习的广泛框架。
编写 Python 代码的乐趣应该在于看到短小、简洁、易读的类,这些类用少量清晰的代码表达了大量的动作——而不是让读者厌烦得要死的大量琐碎代码。
吉多·范·罗苏姆
Python 代码片段示例:

Python 代码片段示例(源代码)
一些最受欢迎的图书馆是-
● TensorFlow ,用于机器学习工作负载和处理数据集
● scikit-learn ,用于训练机器学习模型
● PyTorch ,用于计算机视觉和自然语言处理
● Keras ,作为高度复杂的数学计算和操作的代码接口
● SparkMLlib ,像 Apache Spark 的机器学习库,用算法和实用程序之类的工具让机器学习对每个人来说都很容易
● MXNet ,作为 Apache 的另一个用于简化深度学习工作流的库
● Theano ,作为定义、优化和评估数学表达式的库
● Pybrain ,强大的机器学习算法
此外,根据 GitHub repositories 的贡献,Python 已经超过 Java,成为第二大流行语言。事实上,Stack Overflow 称之为“ 发展最快的 ”主要编程语言。"

来源:十月
面向初学者的 Python 课程—
[## 面向初学者的 3 门免费 Python 课程:2020 版
如果你正在寻找可以用来扩展你的 Python 知识的最好的免费 Python 课程,你已经来到…
hackernoon.com](https://hackernoon.com/3-free-python-courses-for-beginners-2020-edition-j7c23y3u) [## Python 训练营:学习 Python 编程和代码培训
这是 Udemy 上最全面、最直接的 Python 编程语言课程!你是否…
● Java
Java 被认为是世界上最好的编程语言之一,过去 20 年的使用证明了这一点。
凭借其的高度用户友好性、的灵活性和平台独立性,Java 已经被用于以各种方式开发人工智能,继续阅读了解其中的一些:
●tensor flow
tensor flow 支持的编程语言列表还包括带有 API 的 Java。这种支持不像其他完全支持的语言那样功能丰富,但它确实存在,并且正在快速改进。
● 深度 Java 库
由亚马逊打造,使用 Java 创建和部署深度学习能力。
●kube flow
kube flow 有助于在 Kubernetes 上轻松部署和管理机器学习堆栈,提供随时可用的 ML 解决方案。
● OpenNLP
Apache 的 OpenNLP 是一个自然语言处理的机器学习工具。
● Java 机器学习库
Java-ML 为开发者提供了几种机器学习算法。
● 欧米诺
欧米诺使得在欧米诺 GUI 的帮助下使用 Java 开源框架设计神经网络成为可能。
如果 Java 有真正的垃圾收集,大多数程序会在执行时删除自己。罗伯特·休厄尔
Java 代码片段示例:

Java 代码片段示例(源代码)
面向初学者的 Java 课程—
[## 供初学者在线学习的 5 大 Java 编程课程——最好的
如果你是计算机科学专业的毕业生,或者想学习 Java 并且正在寻找一些很棒的资源,例如…
javarevisited.blogspot.com](https://javarevisited.blogspot.com/2018/05/top-5-java-courses-for-beginners-to-learn-online.html)
● R
R 由罗斯伊哈卡和罗伯特绅士创造,第一个版本于 1995 年推出。目前由 R 开发核心小组维护,R 是 S 编程语言的实现,并帮助开发统计软件和数据分析。
让 R 非常适合开发人员进行人工智能编程的品质是:
●R 擅长处理庞大数字的基本特性,使它比 Python 更有优势,因为 Python 有着相对粗糙的 NumPy 包。
●使用 R,您可以处理各种编程范例,如函数式编程、向量计算和面向对象编程。
一些可用于 R 的 AI 编程包有:
● Gmodels 提供了一组用于模型拟合的工具
● Tm,作为文本挖掘应用的框架
● RODBC 作为 R 的 ODBC 接口
● OneR,用于实现一个规则机器学习分类算法,对机器学习模型有用
在数据挖掘者和统计学家中广泛使用,R 提供的特性有:
●扩展其功能的各种库和包
●积极支持的社区
●能够与 C、C++和 Fortran 协同工作
●几个软件包有助于扩展功能
●支持制作高质量的图表
有趣的事情—— 新冠肺炎互动地图制作使用 R
●序言
逻辑编程的简称,Prolog 最早出现在 1972 。它是开发人工智能,特别是自然语言处理的令人兴奋的工具。Prolog 最适合创建聊天机器人, ELIZA 是第一个用 Prolog 创建的聊天机器人。

第一个成功的聊天机器人(来源)
要理解 Prolog,您必须熟悉指导 Prolog 工作的一些基本术语,下面将简要介绍这些术语:
●事实定义了正确的陈述
●规则定义语句,但带有附加条件
●目标根据知识库定义提交的陈述所处的位置
●询问定义了如何使你的陈述真实,以及对事实和规则的最终分析
Prolog 提供了两种实现人工智能的方法,这两种方法已经实践了很长时间,并在数据科学家和研究人员中广为人知:
●符号方法包括基于规则的专家系统、定理证明、基于约束的方法。
●统计方法包括神经网络、数据挖掘、机器学习和其他几种方法。
●口齿不清

Lisp 代码创建一个 n 输入 m 单位一层感知器(源)
列表处理的简称,是仅次于 Fortran 的第二古老的编程语言。被称为人工智能的创始人之一,Lisp 是由约翰·麦卡锡在 1958 年创造的。
Lisp 是一种做你被告知不可能做的事情的语言。
肯特·皮特曼
作为一种实用的程序数学符号,Lisp 很快成为开发人员选择的人工智能编程语言。以下是 Lisp 的一些特性,这些特性使它成为机器学习人工智能项目的最佳选择之一:
●快速原型制作
●动态对象创建
●垃圾收集
●灵活性
随着其他竞争编程语言的重大改进,Lisp 特有的几个特性也进入了其他语言。在某个时间点涉及 Lisp 的一些著名项目是 Reddit 和 HackerNews 。
以 Lisp 为例,你知道它是世界上最美的语言——至少在 Haskell 出现之前是这样。
——拉里·沃尔
●哈斯克尔
Haskell 于 1990 年定义,并以著名数学家哈斯凯尔·布鲁克斯·加里的名字命名,它是一种纯函数静态类型的编程语言,配有惰性评估和更短的代码。
它被认为是一种非常安全的编程语言,因为它在处理错误方面提供了更多的灵活性,因为与其他编程语言相比,Haskell 很少出现错误。即使真的发生了,大多数非语法错误也是在编译时而不是运行时被发现的。Haskell 提供的一些特性是:
●强大的抽象能力
●内置内存管理
●代码可重用性
●易于理解
SQL、Lisp 和 Haskell 是我见过的花在思考上的时间比打字多的编程语言。菲利普·格林斯本
它的特性有助于提高程序员的生产率。Haskell 与其他编程语言非常相似,只是被一个小群体的开发人员使用。抛开挑战不谈,随着越来越多的开发人员社区采用 Haskell,Haskell 可以证明与其他竞争对手的 AI 语言一样好。
Matthew Butler 编码 GIF
●朱丽娅
Julia 是一种高性能的通用动态编程语言,适合创建几乎任何应用程序,但非常适合数值分析和计算科学。与 Julia 一起工作的各种工具有:
Vim 和 Emacs 等热门编辑器
Juno、Visual Studio 等 ide

茱莉亚源代码组织(来源)
Julia 提供的一些功能使其成为人工智能编程、机器学习、统计和数据建模的一个值得注意的选择,这些功能包括:
●动态类型系统
●内置软件包管理器
●能够进行并行和分布式计算
●宏和元编程能力
●支持多次派单
●直接支持 C 函数
Julia 旨在消除其他编程语言的弱点,也可用于机器学习应用程序,与 T ensorFlow.jl 、 MLBase.jl 、 MXNet.jl 等工具集成,这些工具利用了 Julia 提供的可伸缩性。
谷歌趋势— Julia 兴趣随时间变化

谷歌趋势(来源)
JuliaCon 2019 集锦(来源)
结论
有几种人工智能编程语言可供选择,人工智能工程师和科学家可以选择适合他们项目需求的正确语言。每一种人工智能编程语言都有其优点和缺点。随着对这些语言的定期改进,用不了多久,人工智能的开发就会变得比今天更加舒适,这样更多的人就可以加入到这一创新浪潮中来。杰出的社区支持让新人的生活变得更好,社区对几个包和扩展的贡献让每个人的生活更轻松。
类似的文章—
我希望这篇文章对你有用!如果您有兴趣了解更多信息,以下是附加资源:—
针对求职者和新开发人员的顶级编程语言的深入分析和排名
towardsdatascience.com](/top-10-in-demand-programming-languages-to-learn-in-2020-4462eb7d8d3e) [## 2020 年十大商业编程语言
正是硬件和软件的结合促成了技术的大部分进步。顶级编程…
codeburst.io](https://codeburst.io/10-top-programming-languages-in-2019-for-developers-a2921798d652) [## 2020 年人工智能工程师最喜欢的 5 种编程语言
全球近 14%的劳动力或 3.75 亿人可能会因人工智能和自动化而失业。迈出一步…
www.datasciencecentral.com](https://www.datasciencecentral.com/profiles/blogs/5-most-preferred-programming-languages-for-ai-engineers-in-2020) [## 2020 年要学习的 7 种编程语言和框架
给热情的程序员的精选推荐
medium.com](https://medium.com/swlh/the-7-programming-languages-frameworks-to-learn-in-2020-6f9ac923ec5d)
关于作者
克莱尔 D 。在digital ogy—是一个内容制作者和营销人员,这是一个技术采购和定制匹配市场,根据全球各地的特定需求,将人们与预先筛选的&顶尖开发人员和设计师联系起来。连接 数字学 上 领英 , 推特 ,insta gram。
2020 年数据科学的顶级编程语言
您应该选择哪种编程语言来开始您的数据科学之旅?

"学习一门新编程语言的唯一方法是用它来写程序."
——丹尼斯·里奇
一门编程语言是任何开发者的超能力。每隔一段时间,就会出现一种新的编程语言或对现有语言的更新,试图提供更快、更优化的结果。开发人员经常会发现自己被各种各样的编程语言所困扰,决定为他们的下一个项目选择哪一种。
所有的编程语言都不相似,在许多情况下,适用于一个项目或一个需求的语言可能不适用于另一个项目或需求。数据科学就是这样一个趋势领域,对效率和高性能结果的需求正在飞速增长。本文将介绍少数顶级编程语言。
在为您的数据科学职业道路选择最佳编程语言时,您需要考虑什么
现在,在我们跳到涵盖一些顶级数据科学编程语言的部分之前,下面提到了一些您应该问自己的问题:
●手头的任务到底是什么?
●数据科学能在哪些方面帮到你?
●你对已经掌握的编程语言的熟练程度如何?
●你准备好让你的知识更上一层楼了吗?
●您的组织在多大程度上使用数据科学?
●你有兴趣学习高级数据科学吗?
把这个也念出来—
从几种编程语言中,人工智能工程师和科学家可以挑选出适合他们需要的语言
towardsdatascience.com](/top-programming-languages-for-ai-engineers-in-2020-33a9f16a80b0)
2020 年数据科学的顶级编程语言
既然你已经回答了上面的问题,让我们进入下一部分。从现在开始,我们希望将您的注意力吸引到数据科学中一些最常用的编程语言上。您可能已经熟悉一些流行的编程语言,而有些可能对您来说是全新的。
1. Python

来源— Python
Python 在 数据科学顶级工具 中占有重要地位,并且通常是一系列领域任务的首选,如机器学习、深度学习、人工智能等等。它是面向对象的,易于使用,并且由于其代码可读性高,对开发人员非常友好。
Python 庞大的生态系统包含丰富的库和各种用途的实现,这使它成为一个真正的多面选择。Python 提供的其他一些重要的突出特性包括:
● 支持强大的数据科学库,如 Keras、Scikit-Learn、matplotlib、TensorFlow 等
● 非常适合完成数据收集、分析、建模和可视化等任务
● 支持多种文件导出和共享选项
● 有一个强大的社区来获得支持
编写 Python 代码的乐趣应该在于看到短小、简洁、易读的类,这些类用少量清晰的代码表达了大量的动作——而不是让读者厌烦得要死的大量琐碎代码。
吉多·范·罗苏姆
PYPL 编程语言的流行程度—

PYPL 流行的编程语言(来源)
Python 库—
面向数据科学的流行 Python 库概述
towardsdatascience.com](/top-python-libraries-for-data-science-c226dc74999b) [## 机器学习和深度学习的最佳 Python 库
现代机器学习模型和项目的 Python 库
towardsdatascience.com](/best-python-libraries-for-machine-learning-and-deep-learning-b0bd40c7e8c) [## 用于自然语言处理的 Python 库
用于自然语言处理的流行 python 库概述
towardsdatascience.com](/python-libraries-for-natural-language-processing-be0e5a35dd64)
面向数据科学的 Python 初学者课程
2.Java Script 语言

源代码— JavaScript
JavaScript:不要用我不好的部分来评价我,学习好的部分并坚持下去!
埃里克·弗里曼
多范例和事件驱动的脚本语言 JavaScript 是 web 开发的顶级编程语言之一。使用 JavaScript,开发人员可以创建丰富的交互式网页,正是 JavaScript 的这一特性使得它成为创建漂亮的可视化效果的绝佳选择。
JavaScript 在数据科学中的其他用途包括管理异步任务和处理实时数据。支持 JavaScript 的几个令人信服的理由是:
● 允许为数据分析创建可视化
● 支持各种现代机器学习库,例如 TensorFlow.js、Keras.js 和 ConvNetJs 等
● 更易学易用
面向数据科学的顶级 JavaScript 库
- D3.js:
Github 链接: 了解更多 D3.js
- Tensorflow.js:
Github 链接: 了解更多 TensorFlow.js
- Brain.js
Github 链接: 了解更多 Brain.js
- Machinelearn.js
Github 链接: 了解更多 Machinelearn.js
- Math.js:
Github 链接: 了解更多 Math.js
JavaScript 语言随着时间的推移—
根据 GitHub 库的贡献,JavaScript 是最流行的语言

来源: Octoverse
3.Java 语言(一种计算机语言,尤用于创建网站)

源代码— Java
一次编写,随处运行
编程语言 Java 可能看起来很老,但是不要让这愚弄了你。它长期以来被一些顶级企业用于安全企业开发,作为他们首选的开发堆栈。为了迎合数据科学领域的蓬勃发展,Java 提供了诸如 Hadoop、Spark、Hive、Scala 和 Fink 等工具。
Java 虚拟机是开发人员在企业环境中为分布式系统、数据分析和机器学习编写代码的流行选择。Java 提供的其他主要优势包括:
● 为快速应用开发提供了几个 ide
● 用于数据分析、深度学习、自然语言处理、数据挖掘等任务
● 轻松扩展,从头构建复杂应用
● 能够更快地交付成果
如果 Java 有真正的垃圾收集,大多数程序会在执行时删除自己。
—罗伯特·休厄尔
完全初学者 Java 教程—
[## 免费 Java 教程—免费 Java 教程—完全初学者学习 Java
在作为软件开发人员和承包商为包括 CSC 在内的许多公司工作了 14 年后…
www.udemy.com](https://www.udemy.com/course/java-tutorial/)
4. R

来源— R 基金会
R 是一个开源软件环境,主要用于处理数据科学中的统计和图形方面的事情。时间序列分析、聚类、统计测试、线性和非线性建模只是 r。
像 RStudio 和 Jupyter 这样的第三方接口使得与 R 一起工作变得更加容易。R 提供了出色的可扩展性,通常允许其他编程语言在 R 中修改数据对象而没有太多麻烦,这要归功于其强大的面向对象特性。编程语言 R 的关键要点是:
● 提供高效的数据处理和额外的数据分析工具
● 为创建用于数据分析的优秀图表提供了大量选项
● 允许用健壮的社区构建的包来扩展核心功能
● 包括一个活跃的贡献者社区
最近更新由克莱尔 d。人工智能创新的加速增长已经导致几个…
blog.digitalogy.co](https://blog.digitalogy.co/r-for-data-science/)
5. C/C++
C 是 T2 最早的编程语言之一,大多数较新的语言使用 C/C++作为它们的代码库,例如 r。使用 C/C++需要对编程的基础有很强的理解。
尽管由于 C/C++的低级本质,对于数据科学初学者来说,它是编程语言中较为复杂的一面,但它正越来越多地被用于构建可用于数据科学的工具。
以 TensorFlow 为例,它的核心是用 C++写的,其余部分是用 Python 写的。但这还不是全部,C 语言确实有一些优点,如下所述:
● 当底层算法也用 C 语言编写时,能够提供更快、更好的优化结果
● 由于其高效的本质,比其他编程语言相对更快
Google Trends — C/C++兴趣随时间变化

Google trends C/C++( 来源)
6.结构化查询语言

来源— SQL
作为一名程序员,我相信你一定在生活中的某个时候使用过 SQL 。SQL 不仅仅是把你和你的数据库连接起来,它还有一个非常重要的目的,那就是,它只需要几个查询就能从大量的数据中为你提供事实和统计数据。
对于简化数据科学中的各种任务(如数据预处理)来说,提高 SQL 重要性的一些功能有:
●SQL 的非过程化特性让您专注于“是什么”,而不是“为什么”
与编程语言和数据库管理系统集成得很好
● 帮助您连接到您的数据以更好地理解它
● 允许更顺畅地管理大量数据
根据 Stackoverflow,最流行的技术—

来源— Stackoverflow 调查
7. MATLAB

来源: MathWorks 日志 o
MATLAB 主要是一个数学计算环境,设计用于执行高级数值计算,并带有各种工具,可以帮助您执行操作,如矩阵操作,数据和函数绘制等等。
有了 MATLAB,你可以轻松解决最棘手的数学和统计问题。它在学术界被广泛用于讲授线性代数和数值分析。MATLAB 的主要优点包括:
● 允许执行算法和创建用户界面
● 带有强大的数学函数集合
● 提供用于创建自定义数据图和可视化的内置图形
● 实现无缝可扩展性
随着近年来数据科学的发展,我们看到了数据科学工具的发展。r 和…
www.datasciencecentral.com](https://www.datasciencecentral.com/profiles/blogs/matlab-for-data-science)
8.斯卡拉

来源:Scala 编程语言
Scala 是一种高级编程语言,运行在 Java 虚拟机上,可以让使用 Java 变得更加容易。Scala 可以和 Spark 一起有效地处理大量孤立的数据。底层并发支持使得 Scala 成为构建高性能数据科学框架的完美选择,比如 Hadoop 。Scala 的主要产品包括:
● 稳定、多才多艺,在某些情况下可以相对更快地交付结果
● 提供了超过 175000 个扩展 Scala 功能的库
● 支持各种 ide,比如 IntelliJ IDEA,VS Code,Vim,Atom,Sublime Text,甚至在你的浏览器中
● 提供强大的社区支持
阅读 Scala 面试问题—
[## 2020 年前 27 个 Scala 面试问题和答案,适用于初学者和有经验者
主页>大数据> 2020 年参加 scala 的初学者和有经验者的前 27 个 Scala 面试问题和答案…
www.upgrad.com](https://www.upgrad.com/blog/scala-interview-questions-answers/)
9.朱丽亚

来源——Julialang.org
技术计算的新方法
Julia 是一种动态类型的多用途编程语言,但却是数值分析和计算科学分析的合适选择。虽然是高级编程语言,但如果需要,Julia 也可以用作低级编程。
Julia 已经被一些知名企业用于各种任务,包括时间序列分析、风险分析,甚至太空任务规划。Julia 的其他显著特征包括:
● 专注于提供高性能
● 对包管理器的内置支持
● 提供数据可视化、多维数据集上的操作以及用于深度学习的强大工具
● 支持并行和分布式计算
茱莉亚课程—
由开普敦大学提供。这四个模块的课程向用户介绍作为第一语言的朱莉娅。朱莉娅是一个…
www.coursera.org](https://www.coursera.org/learn/julia-programming)
10.SAS

来源— 统计分析系统
统计分析系统 的简称,SAS 是专门为商业智能、预测分析、高级分析而构建的工业级软件环境。
SAS 还允许用户挖掘、更改和管理来自各种来源的数据,其唯一目的是进行高级统计分析。
软件环境被分解成提供上述功能的工具集。其中一些涉及演示,一些涉及数据管理,一些涉及质量控制,还有一些涉及代码编辑器、项目管理器、网格计算管理器等特性。
在这里学习 SAS—
借助在线课程和教材,快速轻松地学习情景应用程序。向 SAS 学院索取免费资料…
www.sas.com](https://www.sas.com/en_us/learn/academic-programs/resources/free-sas-e-learning.html)
2020 年最佳虚拟 SAS 全球论坛—
更多用于数据科学的编程语言—
哈斯克尔
● 雨燕
● 八度
● Perl
● 口齿不清
结论
在整篇文章中,我们介绍了一些用于数据科学的顶级编程语言。每种语言都有自己的优点,与其他语言相比,它们通常能提供更好更快的结果。 数据科学的领域极其广阔 并且经常需要一套不同的工具来完成不同的任务。
用一种以上的编程语言武装自己可以保证帮助你在处理数据时克服独特的挑战。如果你是一名初露头角的数据科学家,你应该从上面提到的编程语言开始,因为它们是目前最受欢迎的语言。
注: 为了消除各种各样的问题,我想提醒你一个事实,这篇文章仅代表我想分享的个人观点,你有权不同意它。
更多有趣的阅读—
我希望这篇文章对你有用!下面是一些有趣的读物,希望你也喜欢
使用谷歌人工智能中心将想法变为现实
towardsdatascience.com](/top-google-ai-tools-for-everyone-60346ab7e08) [## 2020 年必读的机器学习书籍
看看吧,你为什么要读它们?
towardsdatascience.com](/machine-learning-books-you-must-read-in-2020-d6e0620b34d7) [## 2020 年你必须使用的最好的 Python IDEs 和代码编辑器
具有显著特性的顶级 Python IDEs 和代码编辑器
towardsdatascience.com](/best-python-ides-and-code-editors-you-must-use-in-2020-2303a53db24) [## Python vs. Node。JS:哪个最适合你的项目?
使用一组预定义的因素对 Python 和 Node.js 进行详细比较
towardsdatascience.com](/python-vs-node-js-which-one-is-best-for-your-project-e98f2c63f020) [## 2020 年必读的数据科学书籍
看看吧,你为什么要读它们?
towardsdatascience.com](/data-science-books-you-must-read-in-2020-1f30daace1cb)
关于作者
克莱尔 D 。在digital ogy—是一个内容制作者和营销人员。这是一个技术采购和定制匹配市场,根据全球各地的特定需求,将人们与预先筛选的&顶尖开发人员和设计师联系起来。连接DigitalogyonLinkedinTwitterinsta gram。**
面向数据科学的顶级 Python 库
面向数据科学的流行 Python 库概述

在 Unsplash 上由 Hitesh Choudhary 拍摄的照片
“Python 从一开始就是 Google 的重要组成部分,并且随着系统的成长和发展而保持不变。如今,数十名谷歌工程师使用 Python,我们正在寻找更多掌握这种语言的人。”
Python 一直是一种非常有价值的编程语言,不仅用于应用程序开发,还用于帮助数据科学家和研究人员找到复杂的计算和数学问题的解决方案。编程语言所提供的多功能性使得它可以毫不费力地用于各种领域。****
Python 成为数据科学家的理想选择是因为它易于使用和调试。但是称 Python 为数据科学的首选编程语言是不公平的,如果不提及它的各种库和包的集合的话。
面向数据科学的顶级 Python 库
Python 的武器库中有很多包,确切地说是超过 25.5 万个。这些包的用例分布在大量不同的领域。由于我们的话题是数据科学,我们希望您关注一些被广大受众广泛使用的顶级 Python 库,包括数据科学家、研究人员、分析师和许多其他人。****
1.张量流****
核心任务:构建深度学习模型
由谷歌、提供的tensor flow是开发和训练机器学习模型的优秀工具,可用于移动、物联网等许多平台。它可以处理各种任务,如对象识别、语音识别等。
凭借 TensorFlow 的灵活架构,开发人员可以根据需求的增长轻松扩展硬件,其中包含的协作支持使其他团队成员的参与变得轻而易举。TensorFlow 提供的主要优势包括:
● 有助于更顺利地建立模型
● 包括从构思到最终部署的工具
● 提供强大的研究资源
● 拥有一流的社区支持
● 以谷歌照片、语音搜索等几款热门谷歌产品为后盾
TensorFlow 教程——https://www.tensorflow.org/tutorials/
有张量流的责任 AI—
为什么是 Tensorflow?
也看看这个—
使用谷歌人工智能中心将想法变为现实
towardsdatascience.com](/top-google-ai-tools-for-everyone-60346ab7e08)
2.PyTorch
从研究到生产
核心任务:开发和训练深度学习模型
由脸书人工智能研究实验室为机器学习开发的 PyTorch 主要用于与计算机视觉和自然语言处理相关的任务。
如果你发现自己正在寻找一种既快速又高效、能在分布式环境中工作并且毫不费力地扩展的生产就绪型机器学习工具,PyTorch 可能是你的正确选择。

基本 PyTorch 工作流程(来源)
开源 Python 库 PyTorch 提供的主要特性有:
● 支持张量计算,由强大的 GPU 加速提供动力,支持多维数组的高性能运算
● 省时的自动区分方法叫做亲笔签名
● 构建高度优化神经网络的专用模块
欢迎来到 Pytorch 教程——https://pytorch.org/tutorials/
Pytorch 资源—https://pytorch.org/resources/
PyTorch 可以为深度学习程序员提供很多东西
towardsdatascience.com](/reasons-to-choose-pytorch-for-deep-learning-c087e031eaca)
3.克拉斯
简单。灵活。强大。
核心任务:构建深度学习模型
Keras 旨在通过提供最优化的解决方案和 API来简化甚至加速深度神经网络的实验。这个开源 Python 库利用了另一个名为 TensorFlow 的强大库的几个好处,并提供了一组构建块来简化深度神经网络的构建。Keras 的一些关键要点是:
● 通过图形处理单元(GPU)和张量处理单元(TPU)无缝支持分布式训练
● 在浏览器、移动设备和嵌入式设备上部署多样化的部署能力
● 允许更快的模型迭代和部署
Keras 学习资源—https://keras.io/getting_started/learning_resources/
Keras 教程—https://elitedata science . com/Keras-Tutorial-deep-learning-in-python
【Keras 入门—
4.熊猫
该名称源自术语“面板数据”,这是一个计量经济学术语,指的是包含同一个人在多个时间段的观察结果的数据集。
—维基百科
最新版本: 1.1.0
核心任务:数据处理和分析
开源库 熊猫为 Python 增加了高超的数据操作和分析能力,使其易于使用、灵活且快速。使用 pandas,您可以对数字数据和时间序列执行诸如争论、操作和可视化任务等任务。Pandas 具有几个内置功能,例如:
● 提供一个 DataFrame 对象,用于数据的操作和索引
● 用于读写内存数据结构和各种文件格式的工具套件
● 数据集的有效合并和连接
● 数据集的灵活重组
● 智能对齐数据并处理缺失值,以更好地组织数据
谷歌趋势——随着时间的推移熊猫的兴趣

谷歌趋势熊猫(来源)
熊猫资源【https://www.fullstackpython.com/pandas.html ——
现代机器学习模型和项目的 Python 库
towardsdatascience.com](/best-python-libraries-for-machine-learning-and-deep-learning-b0bd40c7e8c)
5. Scikit-Learn
核心任务:建模
Scikit-learn 是一个开源 Python 库,用 Python、Cython、C 和 C++编写。scikit-learn 构建在 NumPy、SciPy 和 matplotlib 之上,提供了一系列用于高效数据分析的工具。Scikit-Learn 可用于各种问题,包括回归、分类、聚类、降维、模型选择、预处理等。使 scikit-learn 成为更好选择的功能有:
● 支持支持向量机、随机森林、梯度提升、K 均值等多种方法
● 为线性代数、数组运算等多种运算提供优化的性能
● 社区驱动项目
Github:https://github.com/scikit-learn/scikit-learn
【https://scikit-learn.org/stable/tutorial/index.html】Scikit-学习教程—
学习 Scikit-学习-
[## Scikit-Learn (Python):数据科学家的 6 个有用技巧
使用 scikit-learn (sklearn)改进 Python 中的机器学习模型的技巧
levelup.gitconnected.com](https://levelup.gitconnected.com/scikit-learn-python-6-useful-tricks-for-data-scientists-1a0a502a6aa3)
6.Plotly
Plotly 是另一个有用的开源的基于浏览器的 Python 图形绘制库,提供了超过 30 种可视化,涵盖科学、3D、统计、金融等等。plotly 库可以更容易地查看 Jupyter 笔记本中令人印象深刻的图形和图表,HTML 文件,甚至可以通过 Chart Studio Cloud 在线托管。Plotly 提供的一些主要好处是:
● 提供广泛的协作能力
● 提供各种共享和导出图表的选项
● 与 IPython 很好地集成在一起进行交互
● 活跃的开发者和贡献者社区之家
Github—https://github.com/plotly/plotly.py
社区——https://community.plotly.com/
谷歌趋势——随着时间的推移,人们的兴趣越来越浓厚

谷歌趋势 Plotly( 来源)
7.NumPy
核心任务:数据清理和操作
NumPy 是一个强大的开源 Python 库,用于处理 n 维数组,并提供了一套广泛的数值运算工具,以实现增强的性能和更快的执行时间。NumPy 正被用于广泛的领域,如科学计算、数据科学、机器学习、数据可视化、数据分析等。NumPy 的关键要点是:
● 提供了一系列标准以及高级的数组操作
● 支持广泛的平台、环境和硬件
● 可理解的语法
● 数百名活跃用户组成的支持社区为项目做出了贡献
[## 2020 年你必须使用的最好的 Python IDEs 和代码编辑器
具有显著特性的顶级 Python IDEs 和代码编辑器
towardsdatascience.com](/best-python-ides-and-code-editors-you-must-use-in-2020-2303a53db24)
8.NLTK
核心任务:文本处理
NLTK 简称自然语言工具包是一个开源的自然语言处理库和工具集合。自然语言工具包的简称,该库为任何使用自然语言的人提供了超过 50 种语言资源。这包括用于分类、标记、词干、解析、标记化和其他相关任务的工具,适用于学生、研究人员、分析人员和教育工作者。
该图书馆看到了它在各种研究领域的用途,包括人工智能、语言学、数据科学、机器学习等等。NLTK 的主要优势包括:
● 在教授计算语言学的教育机构和使用自然语言的工作场所中非常有名
● Python 让自然语言处理变得更加容易
● 它附带了全面的文档、一本介绍性的书和一些 API 来充分利用这个库
资源—
用于自然语言处理的流行 python 库概述
towardsdatascience.com](/python-libraries-for-natural-language-processing-be0e5a35dd64)
9. SciPy
SciPy 是一个面向数据科学的多领域开源 Python 库,涵盖科学、数学和工程。构成 SciPy 生态系统的核心组件是 NumPy、SciPy 库、Matplotlib、IPython、SymPy 和 Pandas,这使得它可以在上述领域中有效地使用。
作为一个用户友好的库,开发人员可以很容易地从 SciPy 提供的各种好处中受益,例如:
● 出色支持广泛的构建模块和操作,包括高性能计算和质量保证
● 带有大量内置函数和子程序,让你快速入门
● 支持代数、微积分、微分方程、
● 支持数据优化、整合、插值和修改
SciPy 2020 机械学习讲座现已上线—
10. Matplotlib — 使用 Python 进行可视化
最新版本— 3.3.0:
Matplotlib 是 Python 工具库中著名的开源图形绘制库。在执行数学任务时,Matplotlib 与 NumPy 配合得很好。它通过其强大的 API 提供无缝嵌入选项,将 matplotlib 生成的图形集成到其他应用程序中。matplotlib 的一些突出特性包括:
● 各种各样的静态、动画和交互式图形和图表可供选择
● 支持可视化定制和导出
● 允许额外的工具包,包括第三方工具包,以扩展 matplotlib 提供的核心功能
● 活跃的开发人员组成的强大社区定期为项目做出贡献
Matplotlib 教程—https://matplotlib.org/tutorials/index.html
Google Trends — Matplotlib 利息随时间变化

谷歌趋势 Matplotlib( 来源)
11.Seaborn-S统计数据可视化
Seaborn 是 Python 中用于可视化的一个开源库,它基于 matplotlib,并在 matplotlib 生成的图形和图表上提供了一个额外的定制层。该库通过对数据帧和数组进行操作并执行相关映射,努力为数据的独特表示提供显著的信息统计可视化。seaborn 提供的许多功能包括:
● 带有丰富的可视化集合
● 通过提供工具和内置主题对图表进行严格控制
● 能够构建高级抽象来创建复杂的可视化
● 分析变量间关系的 API
Seaborn 官方教程—
[## seaborn 官方教程- seaborn 0.10.1 文档
编辑描述
seaborn.pydata.org](https://seaborn.pydata.org/tutorial.html)
12.统计模型
Statsmodels 是一个开源的统计驱动模块,它为许多可用于统计分析和数据探索的统计模型提供了各种类和函数。该模块涵盖了大量的模型,从线性回归,离散模型,时间序列分析,生存分析,以及许多其他杂项模型。stats 模型的一些主要特性包括:
● 提供强大的统计分析、测试和模型估计能力
● 模型的各种测试,如拟合优度、正态性等
● 支持附加模型,如鲁棒线性模型、混合线性模型、
● 非参数统计
结论
Python 生态系统有大量的库可以帮助你完成各种各样的任务,而且效率也是最优的。在整篇文章中,我们讨论了十几个高性能的顶级 Python 库,涵盖了广泛的领域,包括数据科学,甚至机器学习和深度学习。当然,Python 生态系统比上面提到的库要广泛得多,它还涵盖了几个满足特定需求的库。我们敦促我们的访问者和开发者看看这些,并探索更新和更新的库的生态系统,如果你正在寻找一些特定的东西,因为更新的库经常出现。
注: 为了消除各种各样的问题,我想提醒你一个事实,这篇文章仅代表我想分享的个人观点,你有权不同意它。
更多有趣的阅读—
我希望这篇文章对你有用!下面是一些有趣的读物,希望你也喜欢
数据科学工具,使任务可以实现
towardsdatascience.com](/best-data-science-tools-for-data-scientists-75be64144a88) [## 2020 年必读的机器学习书籍
看看吧,你为什么要读它们?
towardsdatascience.com](/machine-learning-books-you-must-read-in-2020-d6e0620b34d7) [## Python vs. Node。JS:哪个最适合你的项目?
使用一组预定义的因素对 Python 和 Node.js 进行详细比较
towardsdatascience.com](/python-vs-node-js-which-one-is-best-for-your-project-e98f2c63f020) [## 2020 年必读的数据科学书籍
看看吧,你为什么要读它们?
towardsdatascience.com](/data-science-books-you-must-read-in-2020-1f30daace1cb) [## 10 家使用 Python 的世界级公司
Python 正被 IT 界的一些巨头积极使用
towardsdatascience.com](/10-world-class-companies-using-python-26cde24919a8)
关于作者
克莱尔 D 。在digital ogy—是一个内容制作者和营销人员。这是一个技术采购和定制匹配市场,根据全球各地的特定需求,将人们与预先筛选的&顶尖开发人员和设计师联系起来。连接DigitalogyonLinkedinTwitterinsta gram。******
数据科学的顶级 R 库
面向数据科学的流行 R 库概述

照片由来自 Pexels 的 Markus Spiske 拍摄
数据科学是让数据变得有用的学科
当我们谈论数据科学的顶级编程语言时,我们经常发现 Python 是最适合这个话题的。当然,对于大多数以数据科学为中心的任务来说,Python 无疑是一个极好的选择,但是还有另一种专门为数据科学提供卓越的数字处理能力的编程语言,那就是 r .
除了提供强大的统计计算之外,R 还提供了大量资源丰富的库,准确地说超过了 16000 个,满足了数据科学家、数据挖掘者和统计学家的需求。此外,在本文中,我们将介绍一些顶尖的数据科学 R 库。
最近更新由克莱尔 d。人工智能创新的加速增长已经导致几个…
blog.digitalogy.co](https://blog.digitalogy.co/r-for-data-science/)****
数据科学最佳 R 库
r 在数据挖掘者和统计学家中非常受欢迎,部分原因是 r 自带的广泛的库,这些工具和函数能够在很大程度上简化统计任务,使得诸如数据操作、可视化、网页抓取、机器学习等任务变得轻而易举。下面简要介绍了一些库:
1. dplyr
dplyr 包,也称为数据操作的语法,本质上提供了数据操作常用的工具和函数,包括以下函数:
- filter(): 根据标准过滤您的数据
- mutate(): 添加新变量,作为现有变量的函数
- select(): 根据名称选择变量
- summary():帮助汇总来自多个值的数据
- arrange(): 用于重新排列行的顺序
- 此外,您可以使用 group_by()函数,它可以返回根据需求分组的结果。如果您热衷于检查 dplyr 包,您可以从tidy verse中获得它,或者使用命令“install.packages("dplyr ")直接安装该包。****
2.tidyr
tidyr 是tidy verse生态系统中的核心包之一,顾名思义就是用来收拾杂乱的数据。现在,如果你想知道什么是整洁的数据,让我为你澄清一下。一个整齐的数据表示每一列都是变量,每一行都是观测值,每一个单元格都是奇异值。
根据 tidyr 的说法,整理数据是一种存储将在整个 tidyverse 中使用的数据的方式,可以帮助您节省时间并提高分析效率。你可以从 tidyverse 或者通过下面的命令“install.packages("tidyr ")”来获得这个包。
使用谷歌人工智能中心将想法变为现实
towardsdatascience.com](/top-google-ai-tools-for-everyone-60346ab7e08)
3. ggplot2
ggplot2 是用于数据可视化的顶级 R 库之一,并被全球成千上万的用户积极用于创建引人注目的图表、图形和绘图。这种流行背后的原因是 ggplot2 是为了简化可视化过程而创建的,它从开发人员那里获取最少的输入,例如要可视化的数据、样式和要使用的原语,而将其余的留给库。
结果是一个图表,可以毫不费力地呈现复杂的统计数据,实现即时可视化。如果你想给你的图表增加更多的可定制性,你可以使用像RStudio 这样的 ide 来进行更精细的控制。你可以通过 tidyverse 集合或者通过命令“install.packages("ggplot2 ")”使用独立库来获得 ggplot2。
阅读 R 文档,了解 ggplot2 功能-
一个基于“图形语法”的“声明式”创建图形的系统。你提供数据,告诉…
www.rdocumentation.org](https://www.rdocumentation.org/packages/ggplot2/versions/3.1.0)
4.润滑剂
对于数据科学来说,R 是一种优秀的编程语言,但是在某些领域,R 可能感觉不够完善。其中一个领域是日期和时间的处理。对于任何大量使用 R 中的日期和时间的人来说,可能会发现它的内置功能很麻烦。
为了克服这一点,我们有一个方便的包叫做lubridate。这个包不仅处理 R 中的标准日期和时间,还提供了额外的增强功能,如时间段、夏令时、闰日、支持各种时区、快速时间解析和许多辅助功能。如果你的项目需要处理时间和日期,你可以从 tidyverse 获得 lubridate 包,或者用“install . packages(" lubridate ")”命令安装这个包。****
阅读此处的文档:
功能与日期时间和时间跨度:快速和用户友好的日期时间数据解析,提取和…
www.rdocumentation.org](https://www.rdocumentation.org/packages/lubridate/versions/1.7.4)
5.格子木架
点阵 是另一个优雅而又强大的数据可视化库专注于多元数据。这个库的特别之处在于,除了处理常规可视化,lattice 还准备好了对非标准情况和需求的支持。由于是 R 的格子图形的实际实现,它允许你创建格子图形,甚至提供选项来根据你的需求调整图形。lattice 默认自带 R,但是有一个 lattice 的高级版本叫做 latticeExtra ,如果你想扩展 lattice 提供的核心特性,这个版本可能会派上用场。
6.最低贷款利率(minimum lending rate)
R(mlr) 中的机器学习,是一个在 2013 发布,并在 2019 更新为 mlr3 的库,拥有更新的技术,更好的架构,以及核心设计。到目前为止,该库提供了一个框架来处理几种分类、回归、支持向量机和许多其他机器学习活动。
mlr3 面向机器学习从业者和研究人员,方便各种 机器学习算法 的基准测试和部署,没有太多麻烦。对于那些希望扩展甚至组合现有学习者并微调任务最佳技术的人来说,mlr3 是一个完美的选择。可以使用命令“install.packages("mlr3 ")”安装 mlr3。
这里提到了广泛的功能—
[## mlr 包| R 文档
接口到大量的分类和回归技术,包括机器可读的参数…
www.rdocumentation.org](https://www.rdocumentation.org/packages/mlr/versions/2.13)
7.插入符号
分类和回归训练的简称, caret 库提供了几个函数,针对棘手的回归和分类问题优化模型训练的过程。caret 附带了几个额外的工具和功能,用于数据分割、变量重要性估计、特征选择、预处理等任务。使用 caret,您还可以测量模型的性能,甚至可以根据您的需求使用各种参数(如 tuneLength 或 tuneGrid)来微调模型行为。这个包本身很容易使用,并且只加载必要的组件。这个库可以用命令“install.packages("caret ")”来安装。****
用一组预定义的因素详细比较 Python 和 R
towardsdatascience.com](/python-vs-and-r-for-data-science-4a32580846a4)
8.埃斯奎塞
esquisse 本身并不是一个库,而是强大的数据可视化库 ggplot2 的一个 addin。您可能想知道为什么在 ggplot2 中需要这个,让我来为您解释一下。ggplot2 已经足够智能了,但是如果您需要一个额外的可视化层,esquisse 是正确的选择。esquisse 允许您简单地拖放所需的数据,选择所需的定制选项,这样您就有了一个在短时间内构建的定制图,并准备好导出到您选择的应用程序。使用 esquisse,您可以创建可视化效果,如条形图、直方图、散点图、sf 对象。您可以使用“install.packages("esquisse ")”将 esquisse 添加到您的环境。
9.闪亮的
闪亮的 是来自 RStudio 的一个 web 应用框架,它允许开发者在最少的 web 开发背景下使用 R 创建交互式 web 应用。有了 shiny,你可以构建网页、交互式可视化、仪表盘,甚至在 R 文档上嵌入小部件。shiny 还可以很容易地用 CSS 主题、JavaScript 动作和 htmlwidgets 进行扩展,以增加定制。它附带了许多吸引人的内置小部件,用于呈现 R 对象的绘图、表格和输出,无论你在 shiny 中编写什么,都可以即时生效,消除了那些烦人的频繁页面刷新。如果你对这些特性感兴趣并想尝试一下,你可以使用命令“install.packages("shiny ")”来让自己变得闪亮。****
10.滚轮
如果你正在寻找一个工具来从网站上抓取数据并且也是以一种可理解的格式,不用再找了, Rcrawler 是你的正确选择。借助 Rcrawler 强大的网页抓取、数据抓取、数据挖掘能力,不仅可以抓取网站、抓取数据,还可以分析任何网站的网络结构,包括其内部和外部超链接。如果你想知道为什么不使用 rvest 的话,Rcrawler 包是 rvest 的升级版,因为它可以遍历网站上的所有页面并提取数据,这在试图从一个来源一次性收集所有信息时非常有用。这个包可以用命令“install.packages("Rcrawler ")”来安装。
11. DT
DT 包 充当了 JavaScript 库的包装器,称为 DataTables ,对于 R. DT,你可以将 R 矩阵中的数据转换成 HTML 页面上的交互表格,方便数据的搜索、排序和过滤。这个包的工作原理是让主函数(即 datatable()函数)为 R 对象创建一个 HTML 小部件。DT 允许通过“options”参数进行进一步的微调,甚至对表进行一些额外的定制,所有这些都不需要深入编码。可以使用命令“install.packages("DT ")”来安装 DT 包。
12.阴谋地
如果你想创造出抢尽风头的交互式可视化效果, plotly 将是你的完美选择。使用 plotly,您可以从各种图表和图形中创建令人惊叹的、值得出版的可视化效果,如散点图和折线图、条形图、饼图、直方图、热图、等高线图、时间序列,只要您能想到,Plotly 都能做到。plotly 可视化构建在 plotly.js 库之上,也可以通过 Dash 在 web 应用程序中显示,在 Jupyter 笔记本中显示,或者保存为 HTML 文件。如果您有兴趣试用这个包,您可以使用命令“install.packages("plotly ")”来安装它。
其他值得 R 库—
- 生物导体
- 针织工
- 看门人
- 随机森林
- e1071
- stringr
- 数据表
- RMarkdown
- Rvest
结论
在整篇文章中,我们介绍了一些涵盖常见数据科学任务的顶级 R 库,如可视化、语法、机器学习模型训练和优化。我们知道这并不是一个详尽的列表,也绝不是 R 拥有的庞大的图书馆生态系统的全部。CRAN 是所有东西的储存库,它有数千个同样强大和足智多谋的库,可以满足您的特定需求,提供详细的信息和文档,如果您需要找到一个库,我们强烈建议您尝试一下 CRAN。
注: 为了消除各种各样的问题,我想提醒你一个事实,这篇文章仅代表我想分享的个人观点,你有权不同意它。如果我错过了任何重要的库,请在评论区告诉我。
更多有趣的阅读—
我希望这篇文章对你有用!下面是一些有趣的读物,希望你也会喜欢
现代机器学习模型和项目的 Python 库
towardsdatascience.com](/best-python-libraries-for-machine-learning-and-deep-learning-b0bd40c7e8c) [## 2020 年必读的数据科学书籍
看看吧,你为什么要读它们?
towardsdatascience.com](/data-science-books-you-must-read-in-2020-1f30daace1cb) [## 数据科学家的最佳数据科学工具
数据科学工具,使任务可以实现
towardsdatascience.com](/best-data-science-tools-for-data-scientists-75be64144a88) [## 面向数据科学的顶级 Python 库
面向数据科学的流行 Python 库概述
towardsdatascience.com](/top-python-libraries-for-data-science-c226dc74999b) [## 2020 年你必须使用的最好的 Python IDEs 和代码编辑器
具有显著特性的顶级 Python IDEs 和代码编辑器
towardsdatascience.com](/best-python-ides-and-code-editors-you-must-use-in-2020-2303a53db24)
关于作者
克莱尔 D 。在digital ogy—是一个内容制作者和营销人员。这是一个技术采购和定制匹配市场,根据全球各地的特定需求,将人们与预先筛选的&顶尖开发人员和设计师联系起来。连接DigitalogyonLinkedinTwitterinsta gram。******
数据科学最佳 R 库和包
你可能想知道。

隔离第 10 天:清理我的笔记本电脑文件时,我发现了几个月前我设计的封面图片,但一直没有机会完成这个故事。所以,我想自我隔离让你除了完成未竟的事业之外别无选择。😛
我们经常在 Python 中遇到顶级的数据科学库或包,但我们错过的是,有更多的流行编程语言已知可以与它们的支持者和反对者一起执行不同的数据科学任务。数据科学的一种流行语言是 R;数据科学领域中一个众所周知且越来越受欢迎的工具。
虽然我们知道数据科学中最常用的 Python 库,但这里我根据我的经验,为数据科学家和工程师准备了一些最有用的 R 库。有些你会知道,有些你会去探索。
r 是一个主要为统计计算设计的软件环境。**界面和结构非常适合与算法和数据建模相关的任务。拥有 100 多个库,R 已经成为最发达的库系统之一,可以计算成千上万个包来解决各种各样的问题。
在开发统计软件和数据分析的统计学家和数据挖掘者中很流行,也存在一个关于 R 过时或它与 Python 的比较的持续争论。Python 和 R 是两种不同的编程语言,处理不同的应用程序,因此,从技术上来说,这两种语言不应该进行比较。
然而,这里我们从不同的数据科学操作开始,如数据操作、可视化、竞争研究和机器学习。
数据操作
dplyr
dplyr 提供了子集化、汇总、重新排列和连接数据集的基本功能。dplyr 是我们快速数据操作的首选包。dplyr 的主要操作功能是过滤、选择、排列、变异和汇总(分组)
数据表
data.table 是 data.frames 的增强版本,基本上是对 r 中的数据进行排序。使用data.table,可以执行数据操作,如子集、组、更新、连接等。都有内在的联系。将这些相关的操作放在一起可以加快操作速度
readr
读取矩形文本数据(readr)提供了一种快速友好的方法来读取矩形数据,如 csv(逗号分隔值)、tsv(制表符分隔值)、delim(分隔值)和 fwf(固定宽度文件)。它被设计成灵活地解析在野外发现的多种类型的数据,同时当数据意外改变时仍然完全失败。readr 是核心 tidyverse 的一部分,所以安装 tidyverse 应该也可以。
tidyr
tidyr 确实使 R 数据变得整洁。一个整洁的数据是很重要的,因为确保这一点,你将花费更少的时间与工具斗争,更多的时间在你的分析上。此包提供了使用聚集和扩散功能将数据转换为整齐格式来更改数据集布局的工具
stringr
tidy verse 家族的另一个有用的成员, stringr 包提供了一套全面的函数,用于轻松处理正则表达式和字符串。
润滑剂
使跨持续时间、期间、间隔处理日期和时间更容易的工具。获得 lubridate 的最简单方法是不要安装整个 tidyverse,或者只安装 lubridate。
数据可视化
ggplot2
r 的 rich ecosytem 有许多著名的制作漂亮图形的软件包,但最流行和常用的可视化软件包之一是 ggplot2。它让您使用图形的语法来构建分层的、可定制的图。
ggvis
使用图形语法构建的基于 web 的交互式图形的实现。将利润丰厚的 react 编程融入数据操作的语法中。使用 ggvis 很容易构建用于探索性数据分析的交互式图形。
它在视觉表现上不同于 ggplot2。每个交互式 ggvis 绘图必须连接到正在运行的 R 会话;作为 ggplots 的静态图不需要运行 R 会话即可查看。(用 ggplot 和 ggvis 检查vega)
rgl
rgl 是一个 3D 图形包,可生成实时交互式 3D 绘图。它允许交互式旋转,缩放图形和选择区域。rgl 包还包括一个名为 R3D 的通用 3D 接口。它包含高级图形命令,大致模仿经典 R 图形,但在三维空间中工作。
html 小部件
用 R 构建交互式(基于 javascript)可视化的一种更快更有效的方法是通过 htmlwidgets。实现 htmlwidgets 的包有传单(地图)、dygraphs(时间序列)、DT(表格)、diagrammeR(图表)、network3D(网络图)、threeJS (3D 散点图和地球仪)。
格子木架
lattice 是一个附加包,作为 r 的 Trellis graphics 的实现。它是一个强大而优雅的高级数据可视化系统,侧重于多元数据。
(Trellis Graphics 是由 Rick Becker、Bill Cleveland 等人在贝尔实验室开发的数据可视化框架,扩展了 Bill Cleveland 在 1993 年出版的著作可视化数据中提出的观点)**
机器学习
最低贷款利率(minimum lending rate)
mlr 是 R 中流行的机器学习包,它将数据接口到大量的分类和回归技术。mlr 到分机也可以处理
- 生存分析、聚类和一般的、特定示例的成本敏感学习
- 通用重采样,包括交叉验证、引导和二次采样
- 用现代优化技术调整超参数,用于单目标和多目标问题
- 用于特征选择的过滤器和包装器方法
- 使用机器学习中常见的附加操作扩展基本学习器,还允许简单的嵌套重采样
随机森林
一旦我们将数据训练分为训练集和测试集,由randomForest包提供的随机森林分类器就可以用来构建一个有 n 棵树的随机森林。(注意:与scikit-learn不同,我们不需要显式调用fit方法来训练我们的模型)。在 R 中,默认情况下,随机森林中决策树的数量是 500,用作每次分裂潜在候选的特征的数量是 3。
脱字号
caret包(简称为 C 分类 A 和REgressionTraining)是一组试图简化创建预测模型过程的函数。该包包含用于以下目的的工具:
- 数据分割
- 数据预处理
- 特征选择
- 使用重采样的模型调整
- 可变重要性估计(
importance = 1)
e1071
该软件包广泛用于实现聚类、傅立叶变换、朴素贝叶斯、SVM* 和其他类型的杂项机器学习相关功能。*
视频高密光盘
分类数据的可视化工具和测试
glmnet
交叉验证的套索和弹性网回归方法
试用tree, maptree, mlbench, ipred, MASS 进行更多的机器学习操作。
关于有用的 R 包的快速列表的 R 官方文档的精彩资源可以在这里找到。
感谢您的阅读!我希望你喜欢这篇文章。请告诉我,在您的数据科学之旅中,您使用过或期待学习或探索过哪些包或库?
数据帐篷快乐!
免责声明:本文表达的观点仅代表我个人,不代表严格的观点。
了解你的作者
拉什是芝加哥伊利诺伊大学的研究生。她喜欢将数据可视化,并创造有见地的故事。她是用户体验分析师和顾问、技术演讲者和博客作者。
使用 Python 中的 Plotly Express 进行顶级 Spotify 歌曲数据探索
以 Spotify 歌曲数据为例,与 plotly express 取得联系,进行数据探索和可视化。

艾萨克·史密斯在 Unsplash 上拍摄的照片
数据可视化是数据科学的重要方面之一。它既可用于数据探索,也可用于交流分析结果。在数据浏览过程中,可视化可以揭示数据中隐藏的信息。用图表展示你的项目成果是交流你的发现的一个很好的方式。
Python 中有许多数据可视化库可供选择。一个这样的库被 plotly 表示。
Plotly Express 是 Plotly 的一个易于使用的高级界面,它处理“整齐”的数据并生成易于样式化的图形— Plotly
在本文中,我们将使用 plotly express 库探索和可视化来自 Kaggle 的 Spotify 热门歌曲数据集。
导入库
首先,我们需要使用 pip 或 conda 将 plotly 安装到我们的环境中。您可以在 plotly 网站上查看安装该库的完整文档。 Plotly Express 库与 Plotly 库合二为一。
有关静态图像导出的详细信息,请参阅 Python 中的静态图像导出。扩展地理支持有些 plotly.py…
plot.ly](https://plot.ly/python/getting-started/)
一旦安装了库,我们可以将库导入到我们的笔记本中。
import pandas as pd
import numpy as np
import plotly.express as px
数据准备
在本文中,我们使用了 Kaggle 的顶级 Spotify 音乐数据集。为了得到这个数据集,我们可以在这里下载数据集。这个数据集由世界上最受欢迎的 Spotify 歌曲和 2010 年至 2019 年的另外 13 个变量组成。但是,我们将只使用 2015 年开始的数据子集。
# Import Dataset
rawfile = './top10s.csv'#use encoder to avoid utf-8 error
df = pd.read_csv(rawfile,encoding = "ISO-8859-1")#remove id column
df = df.iloc[:,1:15]
df = df.loc[df['year']>=2015]# get 5 year data only
display(df.head())
print('Data frame shape: {}'.format(df.shape))

视觉探索
让我们用 plotly express 创建一个基本的可视化。首先,我们将使用一个条形图来查看在公告牌中出现频率最高的 5 个流派。
famous_genres = df['top genre'].value_counts().head(5).to_frame().reset_index()
famous_genres.columns = ['genre','Count']
famous_genres_list = list(famous_genres['genre'])# Visualize
px.bar(famous_genres,
x = 'genre',
y = 'Count',
title = 'Top 5 Genres',
template = 'plotly_white')

从 2015 年到 2019 年,舞蹈流行音乐是 Spotify billboard 中出现频率更高的流派。
其次,假设我们想知道这些流派每年的平均受欢迎程度。我们可以创建一个折线图来观察这个趋势。
top_5_genre = famous_genres_list
df_top = df.loc[df['top genre'].isin(top_5_genre)]group_by_genre = df_top.groupby(["year","top genre"]).mean().sort_values('year').reset_index()px.line(group_by_genre,
x = 'year',
y ='pop',
line_group = 'top genre',
title = 'Top Genres Average Popularity',
template = 'plotly_white',
color = 'top genre')

通过查看图表,即使流行舞曲风格的歌曲在公告牌上出现的频率最高,它的平均受欢迎程度仍然低于其他五大风格。但是,它总是逐年持续增长。
接下来,我们来看看这一时期最著名的艺术家是谁。我们将用柱形图来回答这个问题。
# Prepare data
famous_artist = df['artist'].value_counts().head(5).to_frame().reset_index()
famous_artist.columns = ['artist','Count']# Visualize
px.bar(famous_artist.sort_values('Count'),
x = 'Count',
y = 'artist',
title = 'Top 5 Artist',
template = 'plotly_white',
orientation = 'h')

与其他人相比,这五位艺术家贡献了 Spotify 中最热门的歌曲。
要看他们唱的每首歌的人气分布,可以用框图。
# Average Popularity of a particular genre over the yearstop_5_artist = famous_artist_list
df_top_artist = df.loc[df['artist'].isin(top_5_artist)]px.box(df_top_artist,
x = 'artist',
y = 'pop',
hover_name = 'title',
title = 'Artist Songs Popularity Distribution',
template = 'plotly_white',
points = 'all')

在其他歌曲中,《魔力红的回忆》最受欢迎。然而,这五位歌手的歌曲受欢迎程度的平均中位数在 70 到 80 之间。
这些歌曲中的每一首都有一个参数,如每分钟节拍数、能量、可跳舞性、响度、可爱度、长度等。我们可以通过制作流行度与每分钟节拍的散点图来检查一个变量与另一个变量之间的相关性。
px.scatter(df_top,
x = 'pop',
y = 'bpm',
color = 'top genre')

我们还可以制作一个散点图,以散点图的形式查看所有变量的相关性。
cols = df_top_artist.select_dtypes(include=['float', 'int']).columns.tolist()[1:]px.scatter_matrix(df_top_artist,
dimensions = cols,width=1400 ,height=1200, color = df_top_artist['top genre'])

最后的想法
通过数据探索,我们知道流行舞蹈是在 billboard 中出现最多的类型。即使这种类型没有显示出最高的人气得分,但从 2015 年到 2019 年,这种类型的人气不断增加。另一方面,最著名的艺术家是贾斯汀比伯。他在广告牌上出现了 12 次。然后最受欢迎的歌曲是《魔力红的回忆》。
使用 plotly express 进行可视化非常简单,尤其是当我们使用 panda 数据框时。我们只需要调用我们想要的图表,选择数据框,选择列,然后配置可定制的项目或让它使用默认值。通过这样做,我们将在一次函数调用中得到我们需要的图表。
参考
Plotly Express 是一个新的高级 Python 可视化库:它是 Plotly.py 的包装器,公开了一个简单的…
medium.com](https://medium.com/plotly/introducing-plotly-express-808df010143d) [## Plotly Express
每行代表一朵花。https://en.wikipedia.org/wiki/Iris_flower_data_set 用 150 英镑返回一个“熊猫. DataFrame”
plot.ly](https://plot.ly/python/plotly-express/)
2020 年你应该知道的 SQL 面试问题
如果你准备从事任何与数据相关的工作,你应该知道的问题

图片由皮克斯拜的 Gerd Altmann 提供
大多数与数据相关的工作需要你了解 SQL,你不应该让 SQL 面试问题成为你找不到工作的理由。尤其是在查询方面,它学起来很快,你应该确保你已经准备好回答一些最常见的与 SQL 相关的面试问题。
就这样,我给你一个 SQL 相关的面试问答列表。尽情享受吧!
注:如果你不知道如何用 SQL 查询,你可以在五分钟内学会 SQL这里 。
什么是 SQL?
SQL 代表结构化查询语言。根据 Wikipedia,SQL 是一种特定于领域的语言,用于编程,设计用于管理关系数据库管理系统中的数据,或用于关系数据流管理系统中的流处理[1]。
什么是主键?
主键是唯一标识表中每一行的一列(或一组列)。通常,ID 列就是为此目的而创建的。
什么是子句?
SQL 子句是 SQL 语句中定义明确的部分,通常用于根据预定义的条件过滤结果,但情况并非总是如此。例如,ORDER BY 是一个子句,但不筛选结果。
五个主要子句是 TOP 子句、WHERE 子句、ORDER BY 子句、GROUP BY 子句和 HAVING 子句。
WHERE 和 HAVING 子句的区别是什么?
WHERE 和 HAVING 都用于筛选表以满足您设置的条件。当它们与 GROUP BY 子句一起使用时,两者之间的区别就显现出来了。WHERE 子句用于在分组之前(GROUP BY 子句之前)过滤行,HAVING 用于在分组之后过滤行。
什么是不同类型的连接,并解释每一种?

来自 SQL-Join 的图像
有四种不同类型的连接:
- 内部联接:返回在两个表中都有匹配值的记录
- 左连接:从左表返回所有的记录,从右表返回匹配的记录
- 右连接:返回右表中的所有记录和左表中与匹配的记录
- 完全连接:当左表或右表中有匹配项时,返回所有记录
UNION 和 JOIN 的区别是什么?
两者都用于将一个或多个表中的数据合并成一个结果。区别在于 JOIN 语句将不同表的列组合成一个结果,而 UNION 语句将不同表的行组合成一个结果。
DELETE 和 TRUNCATE 语句有什么区别?
DELETE 用于从表中删除一行或多行。使用 delete 语句后,可以回滚数据。
TRUNCATE 用于删除表中的所有行,并且数据在执行后不能回滚。
什么是视图?
视图也是一个表——它是对另一个表或多个表的查询的一个存储结果集,用户可以像对任何其他表一样对其进行查询。
什么是子查询,子查询有哪两种类型?
子查询(也称为内部查询或嵌套查询)是另一个 SQL 查询中的查询,用于返回将在主查询中作为条件使用的数据,以进一步限制要检索的数据[2]。
有两种类型的子查询:
- 相关子查询:相关子查询不能独立于外部查询进行评估,因为子查询使用父语句的值。
- 不相关子查询:不相关子查询可视为独立查询,子查询的输出在主查询中被替代。
你可以在这里了解更多。
聚合函数和标量函数有什么区别?为每一个给出一些例子
一个集合函数对多个值执行操作以返回一个值。聚合函数通常与 GROUP BY 和 HAVING 子句一起使用。聚合函数的一些示例包括:
- AVG() —计算一组值的平均值。
- COUNT() —统计特定表格或视图中的记录总数。
- MIN() —计算值集合的最小值。
- MAX() —计算值集合的最大值。
- SUM() —计算值集合的总和。
- FIRST() —获取值集合中的第一个元素。
- LAST() —获取值集合中的最后一个元素。
一个标量函数基于输入值返回单个值。标量函数的一些示例包括:
- LEN() —计算给定字段(列)的总长度。
- UCASE() —将字符串值的集合转换为大写字符。
- LCASE() —将字符串值的集合转换为小写字符。
- CONCAT() —连接两个或多个字符串。
- ROUND() —计算数值字段的舍入整数值(或小数点值)。
SQL 和 MySQL 有什么区别?
重申一下,SQL 是一种管理、检索和操作结构化数据库的特定领域语言。MySQL 是一个关系数据库管理系统,就像 Oracle 一样。
TLDR: SQL 是一种语言,而 MySQL 是一种数据库。
感谢阅读!
如果你喜欢我的工作,想支持我…
- 支持我的最好方式是在媒体上关注我这里。
- 在 Twitter 这里成为第一批关注我的人之一。我会在这里发布很多更新和有趣的东西!
- 此外,成为第一批订阅我的新 YouTube 频道 这里!
- 在 LinkedIn 上关注我这里。
- 在我的邮箱列表 这里报名。
- 看看我的网站,terenceshin.com。
相关文章
帮助您发展 SQL 技能,在任何面试中胜出
towardsdatascience.com](/5-common-sql-interview-problems-for-data-scientists-1bfa02d8bae6) [## 2020 年 20 分钟数据科学速成班
帮助你在顶尖科技公司找到工作的终极资源
towardsdatascience.com](/20-minute-data-science-crash-course-for-2020-8670ad4f727a) [## 超过 100 个数据科学家面试问题和答案!
来自亚马逊、谷歌、脸书、微软等公司的面试问题!
towardsdatascience.com](/over-100-data-scientist-interview-questions-and-answers-c5a66186769a)
参考
[1]https://en.wikipedia.org/wiki/SQL
https://www.tutorialspoint.com/sql/sql-sub-queries.htm
每个数据科学家都应该加入的顶级子编辑
10 个子编辑如果你是数据科学、机器学习、深度学习或人工智能爱好者,你必须加入 Reddit。

如果你是一名数据科学家,你必须加入 T2 的 Reddit。
作为一名数据科学、机器学习、深度学习和人工智能爱好者,很难及时了解所有新的出版物、研究、教程和工具,尤其是围绕数据科学、人工智能和机器学习的所有宣传。
当然,在这里的 媒体 上,有很多人分享故事和交流想法,也有一些伟大的媒体出版物,如面向数据科学的分析 Vidhya 以及更多(2020 年最佳数据科学出版物),但在本文中,我将谈论 Reddit 。
Reddit 无需介绍,它已经成为几乎任何主题的一站式阅读平台,每天几乎有4000 万 搜索,每月超过4.3 亿活跃用户超过120 万不同的社区/子社区。
关于 Reddit 的完整统计: 109 个可笑的 Reddit 统计&2020 年要知道的事实
对于那些不知道 subreddit 是什么的人来说, Subreddit ,简单来说就是代表了Reddit 上基于主题的群组/社区,由想要发布/讨论与该主题相关的新闻或故事的用户组成。
所以有了这些数据和事实,Reddit 是一个大社区,一个极好的知识来源和资源来源,也是一个保持 DS、ML 和 AI 新闻更新的好方法。
现在让我为您列出,每个数据科学、ML、DL 和 AI 爱好者必须关注和加入的顶级子网站:
r/数据科学
用户数量:213917
一个由数据科学从业者和专业人士组成的有用社区,他们分享想法、建议、项目、讨论工具并建立联系。
r/datascience:数据科学从业者和专业人士讨论和辩论数据科学职业生涯的地方…
www.reddit.com](https://www.reddit.com/r/datascience/)*
r/机器学习
用户数量:100.215 万
Reddit 上最古老的机器学习社区之一。包含分类为讨论、新闻、研究和项目的各种帖子。
它用于发布以下主题的故事:机器学习、数据挖掘、分析、预测统计、学习理论、模式识别。
r/机器学习:
www.reddit.com](https://www.reddit.com/r/MachineLearning/)*
r/learn 机器学习
用户数量:148009
一个致力于学习机器学习的活跃社区,用户在这里分享技巧、窍门、概念,甚至帮助实现机器学习。
r/learnmachinelearning:一个专门学习机器学习的子编辑器
www.reddit.com](https://www.reddit.com/r/learnmachinelearning/)*
语言技术
用户数量:20855 人
这个 subreddit 是一个关于自然语言处理(NLP)的讨论和新闻社区。由于这个利基领域在过去几年中加快了步伐,因此值得关注以了解更多关于自然语言处理(NLP)的信息。
*[## r/语言技术
自然语言处理是计算机科学、人工智能和计算语言学的一个领域
www.reddit.com](https://www.reddit.com/r/LanguageTechnology/)*
r/深度学习
用户数量:47,208
如果你刚刚开始进入深度学习领域,或者前段时间你已经有了一些使用人工神经网络的经验,你会在这个子编辑中找到深度学习的概念、理解和实现它们的资源、研究论文…
r/深度学习:
www.reddit.com](https://www.reddit.com/r/deeplearning/)*
r/数据集
用户数量:107811
在这里,您可以分享、讨论和查找用于数据挖掘、分析和知识发现的数据集
你也可以寻求技巧或建议来改进,并拥有一个与手头问题相关的好的数据集。
r/datasets:一个共享、查找和讨论数据集的地方。
www.reddit.com](https://www.reddit.com/r/datasets/)*
r/可视化
用户数量:55636 人
数据可视化对于数据科学家来说非常重要,是需要培养的最有用的专业技能之一。重要的是使用正确的图表,使用标签,并能够使数据易于理解。
所以这个子编辑是关于信息可视化和图形、图表、地图等设计的主题,所以你会发现关于数据可视化的指南、教程和讨论主题。
r/visualization:针对与信息可视化和图形、图表、地图等设计相关的主题。
www.reddit.com](https://www.reddit.com/r/visualization/)*
r/dataisbeautiful
用户数量:14421454
另一个 subreddit,对我来说,它是最适合数据可视化的一个,不仅因为它比 r/visualization 有更多的订阅者,而且它提供了大量关于数据可视化表示的讨论:图形、图表、地图等等。
r/dataisbeautiful:一个分享和讨论数据可视化表示的地方:图形、图表、地图等。
www.reddit.com](https://www.reddit.com/r/dataisbeautiful/)*
r/learnpython
用户数量:339,352
Python 在很短的时间内已经成为最受欢迎和最重要的编程语言,它有一套丰富的库和工具,可以让数据科学家轻松完成任务,并且它有一个巨大的社区基础,开发人员和数据科学家可以在这里提出他们的问题并回答其他人的问题。
所以这个 subreddit 的初学者可以浏览各种线程,了解 Python 的来龙去脉。另一方面,一个更有经验的程序员可以通过另一个叫做 r/Python 的子编辑器来更深入地研究这种语言。
*[## r/learnpython
r/learnpython: Subreddit,用于发布问题和询问关于 python 代码的一般建议。
www.reddit.com](https://www.reddit.com/r/learnpython/)*
r/rstats
用户数量:37066 人
R 是一个重要的工具,被数据挖掘者和统计学家广泛用于数据分析,它是一种编程语言,为您提供了一个分析、处理、转换和可视化信息的密集环境,因此您应该加入 R 故事、问题和新闻的子编辑…
r/rstat:
www.reddit.com](https://www.reddit.com/r/rstats/)*
如果你喜欢这篇文章,并且你也是 Reddit 的粉丝,请在下面的评论中告诉我们你对你最喜欢的 subreddits 的建议,并与你的朋友分享。
还有,一定要在 Twitter ,insta gram,在Linkedin或者 直接发邮件给我 获取更多有趣的话题。
感谢阅读。
关于 dstack.ai 要知道的七件事
dstack.ai:协作!!创造!!交流!!
你有没有想过数据科学家到底是如何合作的?最好的协作平台应该是什么?

介绍
大多数数据分析师和他们的团队没有有效的协作实践。事实上,数据科学家之间的大多数现有协作流程都是有机发展的,并没有遵循系统化的方法。如果我们遵循某些专门为此目的而设计的实践或工具,我们可以做得更好,并提高生产率。
今年年初,当我的团队开始抱怨协作效率不高时,我意识到是时候寻找一个设计良好的平台来解决这个问题了。令我高兴的是,我发现了
涉及开发的数据科学家协作工具在市场上非常活跃,尤其是在团队环境中,如竞争团体和创业公司。另一方面 dstack.ai 并不要求我们具备开发、CSS、部署技能。使用 dstack.ai,我们可以在几分钟内构建一个仪表板,而不是需要几天时间并需要维护的 Dash 或 Shiny 。
另一个要点是,协作工具大多是特定的,没有一个工具能为企业环境提供完整的解决方案,因为它们有非常特定的用例,例如, Dash 只支持 Python 编程语言,而 Shiny 只支持 R 编程语言。那么,如果个人和初创企业使用多种语言工作,他们会选择什么呢?首选来自 dstack.ai
dstack . ai是其中一个人性化、快速、免费的数据科学协作平台。在我们深入探讨 的细节之前,dstack.ai 让我们快速对比一下下面这三款工具。

Dash Vs 闪亮 Vs dstack.ai
看一下上面的表格,人们可以很容易地说,dstack.ai 将在这个领域占据有利位置。
现在让我们来讨论选择dstack . ai作为我们数据团队首要工具的十大理由。****
- 轻松协作
与任何人、任何地方协作是dstack.ai 背后的基本思想。协作至关重要且富有成效,因为它使数据科学家能够解决比单个问题更大的问题。它还通过促进共享上下文来减少依赖性。
dstack.ai 是一个高效的协作工具,有助于数据分析师和分布式团队在数据探索和结果交付期间有效工作。
通过创建一个堆栈,协作可以变得非常容易和有用。栈只不过是一个你想与他人分享的可视化输出。我为我的团队创建了一个受试者工作特征曲线下面积(ROC-AUC)堆栈,如下图所示,并与大家分享。就是这么简单!!

我使用 dstack.ai 的第一个堆栈
2。更少的时间
有没有人不想更快地完成自己的工作?如果我们的团队使用的是 dstack.ai ,我们可以在将近 30%的时间内完成可视化报告的构建并获得利益相关者的反馈。这大大节省了工时。
正如dstack.ai不需要开发、CSS 和部署的技术技能,有了 d stack . ai 我们可以在几分钟内构建一个仪表板。即使一个非技术人员也能轻松做到。
这是可能的,因为有了 dstack.ai 我们的数据科学团队可以在更短的时间内发送他们的数据结果并交换反馈,因为系统已经设置好了,您只需将它用于您的数据。
3。省力
我再次想知道是否有人愿意为同样的产出付出更多的努力?换句话说,给定一个结果,我们总是想要优化,并最小化所需的努力,以获得一个有效的系统。
有了 dstack.ai ,我们的数据科学团队可以提高他们的数据结果,并以更少的工作量与利益相关方交换反馈。例如,如果您必须使用 markdown 和 latex 创建一份报告,它可以在几分钟内完成。示例在下面的截图中。

4。交互式仪表盘
仪表板是构建迷人的交互式报告的一种行之有效的方法。为了构建一个仪表板,我们只需要使用 Python 或 R 应用程序编程接口来推送我们的数据可视化报告。
一旦有了可视化效果,只需点击几下就可以将它们组合到一个仪表板中,这是一项非常简单的任务!!

使用 dstack.ai 的交互式仪表板
你可以点击查看这个仪表盘的实况。
5。数据集管理
数据科学项目的关键要素之一是数据集的高效协作。dstack.ai 提供了简单的接口和服务来上传和管理数据集。我们还可以管理数据集的修订,并在工作团队中共享这些数据集。
如前所述,将数据集和可视化上传到 dstack.ai 对于 Python 和 R 都是可用的。这些数据集可以在 Jupyter 笔记本和应用程序中的 Python 和 R 脚本中使用。
我们可以向 dstack.ai 推送(上传)和从 dstack . ai 拉取(下载)数据集。
将数据集推送到 dstack.ai
从 dstack.ai 中提取数据集
使用 dstack.ai 创建帐户后,我们可以使用在设置中找到的安全令牌发布数据。
6。共享数据报告
使用dstack . ai时,共享数据报告非常简单且用户友好。在 dstack.ai 上发布的所有报告和数据集都遵循为注册个人资料指定的隐私设置。
默认情况下,提交给dstack . ai的数据或可视化是公共的。但是,我们也可以通过更改单个数据集和可视化的隐私设置来使它们成为私有的。如果需要,我们也可以只与选定的用户共享它们。我们还可以通过电子邮件邀请合作者加入我们的可视化、数据集或仪表板。
dstack . ai用户界面支持 bot 手机和电脑浏览器。数据报告可通过手机友好型网络应用程序访问。
如果需要,我们甚至可以与非技术用户共享发布的链接,以便他或她可以使用 web 浏览器查看和访问 dstack.ai 托管的前端应用程序上的发布堆栈。
7。Python 和 R
dstack.ai 值得称赞的一个方面是它同时支持 Python 和 R。如果你将它与其他工具如 Shiny 和 Dash 进行比较,你会发现 Shiny 是一个 R 包,用于使用 R 构建交互式 web 应用程序,另一方面 Dash 是一个用于创建 web 应用程序的开源 Python 库。
出色的数据科学面试技巧

我已经参加了几年的面试,你将在这里看到的是我在聪明和有才华的人身上看到的最大错误。这些都是应聘者错过的事情,因为他们忘记了思考面试官在寻找什么。
基本要素——几乎在每一次面试中,候选人都需要在这三个方面获得足够的分数:善于合作,显示出他们了解技术知识,并有动力解决所提出的问题。以下是我实现这一目标的实用技巧:
- 提前思考,提前准备好要谈论的话题。这可能是学校里的一个项目,可能是你独自完成的,也可能是你以前工作单位的一个项目。你不需要很多,如果你对细节很熟悉,一两个就够了。了解所有技术术语——您使用了什么损失函数、其他指标、超参数优化等。这样做的理由是,你会想在面试时间尽可能多地谈论你熟悉的东西。多次练习面试的这一部分意味着它会变得更容易,因为我们认为这是面试的开始,也有助于缓和面试中的兴奋或紧张情绪。
- 清晰地展示你的作品。人们认为,如果他们用花哨模糊的概念或时髦的词语来描述自己的工作,他们会被视为聪明(或许还很神秘?).在现实中,无法清楚地提出你试图解决的问题,以及解决方案背后的基本想法意味着这个候选人将很难与 DS 部门内外的同事沟通。记住——你也将被测试解释和分享你的想法的能力。如果你来自一个“利基”领域(比如说,一个你的面试官一无所知的生物学博士),这可能会特别困难。
从简单描述任务的输入数据和输出开始,让面试官知道并理解全部细节。你甚至可以有条不紊地停下来,问他们是否有问题。我再怎么强调这一点也不为过——这对你在面试中取得成功至关重要。仅在此之后,继续讨论解决方案和设计考虑事项。在我最好的面试中,我们谈论选择某个模型的原因,出现的问题,测试解决方案的方式等等。这区分了真正理解材料并知道他们在谈论什么的候选人和仅仅下载并运行软件包的候选人。确保你已经准备好回答这样的“设计”问题。 - 提及你使用过的具体技术,尤其是在工作描述中。不要仅仅因为你已经在简历中写了一些东西,就相信面试官会记得。如果你的经验是在 X,而公司与 X 合作,那么培训时间会立即缩短。这些都是简单的要点,你不想错过。
- 对公司表现出真正的兴趣。对雇主来说,最糟糕的情况是不要错过潜在的优秀候选人。最糟糕的情况是招聘人员,投入大量资源进行入职和培训,结果却让他在中短时间内离开。因此,除了寻找有潜力的聪明人,面试官还在寻找一个更重要的信号,那就是与公司和项目的联系。一个候选人表现出真正的动机和兴趣,以真正的奉献精神来解决问题,这比一个有更多经验但没有明显激情的候选人更好。
- 查看该公司的工程/DS 材料。没错,这些并不总是可用的,但如今许多公司都有工程博客,参加会议,录制会议演讲,并使这些材料易于在线获取。你为什么要花时间这样做呢?在某些情况下,如果面试包括一个技术问题,它将围绕公司已经在做的东西,阅读/观看材料就像是瞥见了正确的答案。即使这没有发生,分享你看过的材料也会让你在面试官面前赢得一些轻松的分数(见第四点)。最重要的是,它会让你了解你是否愿意和这个团队一起工作,以及你是否参与这个项目。
- 如果你缺乏经验,想想能给你加分的事情。像 Kaggle 比赛,你对阅读报纸的热爱,你订阅的有趣网站/邮件列表,或者公开回购的承诺等事情通常会在面试的流动和兴奋中被错过或忘记,但它们也非常重要。为了避免面试后忘记谈论什么的糟糕感觉,确保你记得(或写下)你的额外课程是什么,然后用“你还有其他问题吗?”做个记号来提醒自己,在面试结束前,你还有一些事情要谈。
就是这样。像所有其他类型的面试一样(不仅仅是 DS 面试),记住要友好——人们不仅仅是在寻找一个交付代码的人,他们还想找一个愿意与之共度相当长时间的人。
如果你还有其他建议,欢迎在下面添加!
祝你好运!

2020 年图形机器学习的主要趋势

2020 年刚刚开始,但我们已经可以在最新的研究论文中看到图机器学习(GML)的趋势。以下是我对 2020 年 GML 将面临的重要问题的看法,以及对这些论文的讨论。
介绍
本文的目标不是介绍 GML 的基本概念,如图形神经网络(GNNs),而是展示我们在顶级科学会议上可以看到的前沿研究。首先,我把作品提交给了 ICLR 2020,这是 GML 最负盛名的提交作品的会议之一。在之前的帖子中,我已经描述了这个领域的一些快速统计数据,但这里有一个简短的版本:
在 GML 有 150 篇投稿,三分之一的论文被接受。这相当于所有被接受论文的大约 10%。
我阅读了大部分 GML 的论文,以下是我列出的 2020 年趋势:
- 对 GNN 的理论理解更加扎实;
- GNN 新酷应用;
- 知识图谱变得更受欢迎;
- 图嵌入的新框架。
让我们来看看这些趋势。
1.对 GNN 的理论理解更加扎实
我特别兴奋地看到这一趋势,因为它表明 GML 地区正在成熟,以前的启发式方法正在被新的理论解决方案所取代。关于图形神经网络还有很多需要理解的地方,但是关于 GNNs 如何工作已经有了相当多的重要结果。
我先说我最喜欢的: 神经网络学不到的图形:深度 vs 宽度 作者 Andreas Loukas。本文在技术简单性、高度的实际影响和深远的理论见解之间取得了惊人的平衡。
它表明,节点嵌入的维数(网络的宽度,
w)乘以层数(网络的深度,d)应该与图的大小n,即dw = O(n)成比例,如果我们希望 GNN 能够计算出流行的图问题(如循环检测、直径估计、顶点覆盖等)的解决方案。).
因此,GNN 的许多当前实现无法实现这一条件,因为层的数量(在许多实现中约为 2–5)和嵌入的维度(约为 100–1000)与图的大小相比不够大。另一方面,在当前的环境下,更大的网络太令人望而却步,这提出了一个问题,即我们应该如何设计高效的 GNNs 这是我们需要在未来解决的问题。很有说服力的是,这篇论文也从 80 年代的分布式计算模型中得到启发,表明 gnn 本质上做同样的事情。里面有更多的结果,所以我建议看一看。
同样,另外两篇论文,乌诺&铃木和巴塞洛等人,研究了 GNNs 的力量。第一个, 图神经网络指数级地失去对节点分类的表达能力 ,表明:
在某些权重条件下,当层数增加时,除了节点度数和连通分量(由拉普拉斯谱确定)之外,GCNs 不能学习任何东西。
这个结果是众所周知的性质的推广,即 Markov 过程收敛到唯一的平衡点,其中收敛速度由转移矩阵的特征值决定。
在第二篇论文 图神经网络的逻辑表达能力 中,作者展示了 GNNs 和它们可以捕获的节点分类器类型之间的联系。我们已经知道,一些 GNNs 和同构的 WL 测试一样强大,即两个节点被 WL 着色为相同当且仅当它们被 GNNs 分类为相同。但是 GNN 能捕捉到其他分类功能吗?例如,想象一个布尔函数,当且仅当一个图有一个孤立的顶点时,它将 true 赋给所有的节点。GNNs 能抓住这个逻辑吗?直觉上不会,因为 GNN 是一种消息传递机制,如果图的一部分和另一部分(两个相连的组件)之间没有链接,则两者之间不会传递消息。因此,一个简单的解决方案是在邻域聚合后添加一个读出操作,这样当每个节点更新所有要素时,它就拥有了图中所有其他节点的信息。
其他理论方面的工作包括侯等人对的图信息使用的测量以及 Srinivasan & Ribeiro 的基于角色和基于距离的节点嵌入的等价性。
2.GNN 的新酷应用
看到 GNNs 如何应用于现实世界的任务也很棒。今年有一些应用程序可以修复 Javascript 中的错误、玩游戏、回答类似智商的测试、优化 TensorFlow 计算图、分子生成和对话系统中的问题生成。
在 HOPPITY:学习图变换来检测和修复程序中的 bugDinella 等人提出了 一种在 Javascript 代码中同时检测和修复 bug 的方法。代码被转换成抽象语法树,然后通过 GNN 预处理以获得代码嵌入。其思想是给定一个处于初始状态的图,通过多轮图编辑操作符(添加或删除节点,替换节点值或类型)来修改它。为了理解图中的哪些节点应该被修改,他们采用了指针网络,该指针网络采用图嵌入和迄今为止的编辑历史,并选择节点。然后,使用 LSTM 网络执行修复,该网络也采用图形嵌入和编辑的上下文。作者在 GitHub 的提交上验证了这种方法,显示了对其他不太通用的基线的显著提升。精神上类似魏等人的工作 LambdaNet:使用图神经网络的概率类型推断 研究如何为 Python 或 TypeScript 等语言推断变量的类型。作者提出了一种类型依赖超图,它包含作为节点的程序变量以及它们之间的关系,例如逻辑(例如布尔类型)或上下文(例如相似的变量名)约束。然后,首先训练 GNN 模型,以产生图的变量和可能类型的嵌入,然后使用这些嵌入来预测具有最高可能性的类型。在实验中,LambdaNet 在标准变量类型(例如 boolean)和用户定义的类型上都有较高的性能。
王等人 的一篇论文用多重图网络 进行抽象图推理,展示了如何在类智商测验 (瑞文递进矩阵(RPM)和图三段论(DS))中用 GNNs 进行推理。在 RPM 任务中,为矩阵的每一行组成一个图,对于该图,通过前馈模型获得边缘嵌入,随后是图摘要。由于最后一行有 8 个可能的答案,因此创建了 8 个不同的图表,每个图表都与前两行连接在一起,以获得 ResNet 模型对 IQ 分数的预测。

DeepMind 的一篇论文 增强遗传算法学习优化计算图 提出一种 RL 算法优化张量流计算图的代价。图通过标准的消息传递 GNN 进行处理,产生与图中每个节点的调度优先级相对应的离散嵌入。这些嵌入被送入遗传算法 BRKGA,该算法决定每个节点的设备放置和调度。该模型被训练以优化所获得的张量流图的实际计算成本。

**“用于优化计算图的增强型遗传算法学习”作者 Paliwal 等人
其他有趣的应用包括史等人的分子生成、江等人的游戏、陈等人的对话系统
3.知识图表变得更加流行
今年有不少关于知识图推理的论文。本质上,知识图是一种表示事实的结构化方式。与一般的图不同,在知识图中,节点和边实际上有一些含义,如演员的名字或电影中的表演(见下图)。知识图上的一个常见问题是回答复杂的查询,如“2000 年前史蒂文·斯皮尔伯格的哪些电影获得了奥斯卡奖?”,可以翻译成一个逻辑查询∨ { Win(Oscar, V) ∧ Directed(Spielberg, V) ∧ ProducedBefore(2000, V) }。

知识图示例。(来源:尼克尔等人)
在论文 Query2box:使用盒子嵌入对向量空间中的知识图进行推理 中,任等人提出将查询嵌入到潜在空间中,而不是作为单个点,而是作为矩形盒子。该方法允许执行自然交集操作,即合取∧,因为它产生新的矩形框。然而,对并集(即析取∨)建模并不那么简单,因为它可能会导致非重叠区域。此外,为了精确地对任何具有嵌入的查询建模,由 VC 维测量的嵌入之间的距离函数的复杂度应该与图中实体的数量成比例。相反,有一个很好的技巧可以将析取查询替换为 DNF 形式,其中联合只发生在计算图的末尾,这有效地简化了每个子查询的简单距离计算。

任等 【查询 2 框:利用框嵌入对向量空间中的知识图进行推理】
在类似的主题中,Wang 等人在标题为 “知识图中数值规则的可微分学习” 的论文中提出了一种处理数值实体和规则的方法。例如,对于一个引用知识图,您可以有一个规则influences(Y,X) ← colleagueOf(Z,Y) ∧ supervisorOf(Z,X) ∧ hasCitation>(Y,Z),该规则指出,通常情况下,学生X受到他们的主管Z的同事Y的影响,该同事引用的次数更多。该规则右侧的每个关系可以表示为矩阵,并且寻找缺失链接的过程可以表述为关系与实体向量的连续矩阵乘法,该过程称为规则学习。由于矩阵的构造方式,神经方法只能使用分类规则,如colleagueOf(Z,Y)。作者的贡献是以一种新的方式有效地使用数字规则,如hasCitation>(Y,Z)和求反运算符,通过表明在现实中没有必要显式地物化这样的矩阵,这大大减少了运行时间。
另一个在机器学习领域更频繁出现的主题是对现有模型的重新评估,以及它们在公平环境中的表现。像这样的论文 可以教老狗新把戏!Ruffinelli 等人的关于训练知识图嵌入 的研究表明,新模型的性能通常取决于实验训练的“次要”细节,例如损失函数、正则化子和采样方案的形式。在一项大型消融研究中,作者观察到,旧方法(如重新标度模型)仅通过适当调整超参数就可以实现 SOTA 性能。****
在这个领域还有许多其他有趣的作品。 Allen 等人基于单词嵌入的最新见解,了解更多关于关系和实体的学习表征的潜在空间。 Asai et al. 展示了一个模型如何在回答给定查询的维基百科图上检索推理路径。塔巴科夫&科斯塔贝罗触及了图嵌入模型的概率校准这个重要话题。他们表明,通过用 sigmoid 函数变换逻辑来获得概率的流行嵌入模型 TransE 和 ComplEx 校准得很差,即要么低估要么高估事实的存在。他们的方法依赖于生成被破坏的三元组作为负数,这些负数被已知的方法使用,例如 Platt 标度和保序回归来校准概率。
4.图嵌入的新框架
图形嵌入是图形机器学习的一个长期话题,今年有了关于我们应该如何学习图形表示的新观点。
Deng 等人在工作 GraphZoom:一种用于精确和可扩展图嵌入的多级谱方法 中提出了一种在节点分类问题中改进任何无监督嵌入方法的运行时间和准确性的方法。总体思想是首先将原始图缩减为更小的图,这样可以快速计算节点嵌入,然后恢复原始图的嵌入。开始时,基于属性相似性,用对应于节点的 k 个最近邻居之间的链接的附加边来扩充原始图。然后,对图进行粗化:通过局部谱方法将每个节点投影到一个低维空间,并聚集成簇。任何无监督的图嵌入方法,如 DeepWalk 或 Deep Graph Infomax,都可以用来获得小图上的节点嵌入。在最后一步中,所获得的节点嵌入(其本质上代表聚类的嵌入)用平滑算子迭代地广播回来,以防止不同的节点具有相同的嵌入。在实验中,GraphZoom 框架比 node2vec 和 DeepWalk 方法实现了惊人的 40 倍加速,准确率提高了 10%。

“GraphZoom:一种用于精确和可扩展图形嵌入的多级谱方法”,作者邓等人
一些论文已经仔细研究了图分类问题的先前结果。Errica 等人对用于图形分类的图形神经网络 的公平比较有助于对关于该问题的 GNN 模型的公平重新评估,表明,不利用图形拓扑的简单基线(即,它在聚集节点特征上工作)的性能与 SOTA GNNs 相当。这一令人惊讶的现象显然在 2015 年由奥尔洛娃等人发表过,但并未获得大量读者。这项工作的一个很好的结果是在流行的数据集上的公平的 SOTA 结果和 PyTorch-Geometric 中的方便的代码库来运行未来论文的模型比较。在我们的工作 理解图数据集中的同构偏差 ,中,我们还发现,在常用的数据集如 MUTAG 或 IMDB 中,许多图具有同构副本,即使考虑节点属性。此外,在这些同构图中,许多具有不同的目标标签,这自然为分类器引入了标签噪声。** 这表明使用网络的所有可用元信息(例如节点或边属性)对于模型的更好性能的重要性。另一部作品 强大的图形神经网络有必要吗?陈等人对图分类 的剖析表明,如果用其线性对应物(包括邻居的度和传播的图属性)替换非线性邻域聚合函数,则模型的性能不会降低,这与先前的陈述一致,即许多图数据集对于分类来说是微不足道的,并且提出了对于该任务的适当验证框架的问题。**
结论
随着顶级会议的提交率不断增长,我们可以预计 2020 年 GML 领域将出现许多有趣的结果。我们已经可以看到这个领域的转变,从深度学习在图上的启发式应用到更合理的方法和关于图模型范围的基本问题。GNNs 找到了自己的位置,成为许多可以用图来表达的实际问题的有效解决方案,但我希望总体而言,GML 只是触及了我们在图论和机器学习的交叉点上所能实现的表面,我们应该继续关注即将到来的结果。
P.S .我会继续写关于图机器学习的内容,所以如果你有兴趣,可以在 medium 上关注我或者订阅我的 电报频道 或者 我的 twitter 。
美国顶尖计算机科学学院
基于个人和轶事经验的思考
在这篇文章中,你会发现如果你想获得计算机科学学位,什么学校是最好的选择。
这篇文章的视频版本,如果你更喜欢看而不是读:)
现在,我是一个奇怪的例子,因为在我的一生中,我赢得了在世界上一些最好的大学直接学习或工作的机会。在我的一生中,我跳过了许多学校,包括麻省理工学院、牛津大学、哥伦比亚大学、帝国理工学院、加州理工学院、斯坦福大学和伯克利大学。
因此,根据我的经验,我决定在 2020 年创建一个计算机科学的顶级学校,这样,那些希望获得计算机科学学位的人就可以知道哪些学校值得关注。
我想承认,这是基于我的个人观点,我相信 T2 还有许多其他优秀的计算机科学学校,我不会在这篇文章中提及,因为我没有直接的经验。在下面所有的例子中,我或者学习过,或者工作过,或者和参加过或者帮助教授过提到的课程和项目的人是好朋友。
常春藤联盟
所以我们从常春藤联盟开始吧。常春藤联盟由 8 所学校组成:布朗大学、哥伦比亚大学、康奈尔大学、达特茅斯大学、哈佛大学、普林斯顿大学、宾夕法尼亚大学和耶鲁大学。

常春藤盟校校花,感谢火炬
一般来说,这些学校拥有“最好”的声誉,你通常会发现它们在《美国新闻》、《福布斯》和《商业内幕》上占据了前 10 名“最好的大学”。
根据我朋友的观点,所有这些学校都有很好的计算机科学学位。其中,我认为最好的是哈佛和哥伦比亚之间的决胜局。就时间安排的灵活性而言,布朗大学是最宽松的,而宾夕法尼亚大学和康奈尔大学可以说是“联盟”中规模最大的大学。耶鲁和普林斯顿都有小得多的、紧密团结的社区,与“更大、更大的城市”有些隔离
哥伦比亚大学
哥伦比亚坐落在纽约市的中心,有着曼哈顿的脉搏,有着大城市生活的起伏。

哥伦比亚大学,晨边校区。从东北方向鸟瞰
我只在其中两所大学——哥伦比亚大学和哈佛大学——上过课或学过。这两所学校都有高度结构化的计算机科学项目,我曾与这两所大学的一些极其聪明、敏锐、勤奋的本科生、研究生和教师一起工作过。
随着时间的推移,我观察到,哥伦比亚大学和哈佛大学的特定 CS 课程拥有如此强大的追随者,以至于它们创建了拥有自己内部规范和文化的完整社区。
哈佛的顶级课程是 CS50,由魅力非凡的大卫·马兰教授。据我所知,CS50 让学生们体验了 C、Python、带有 CSS 和 HTML 的 Javascript 以及 SQL。就定制你在哈佛的 CS 教育而言,它非常灵活,可以选择探索独特的“思维和行为轨迹”,以及探索联合浓度。
瑞茜·威瑟斯彭身着《律政俏佳人》,承蒙吉菲
在哥伦比亚大学,计算机科学课程与其他院系紧密结合。大约有 7 个不同的专业,从“智能系统”到“机器人”我注意到,哥伦比亚大学的一门突出的课程给了本科生一个很好的优势,那就是他们可以接触到 C 和 C++。“J”教授曾经教过这门课,作为一项强制性要求,我记得我的许多本科朋友和学生告诉我这门课很残酷。然而,几年后,在工作中,他们对 C、C++和 UNIX shell 脚本的接触使他们受益匪浅。
所以,如果你正在寻找一个计算机科学学位,考虑一下,虽然所有的常春藤联盟学校都可以给你一个坚实可靠的计算机科学教育;首选是哈佛和哥伦比亚。
现在让我们来谈谈在美国提供世界级计算机科学教育的非常春藤联盟的学校。
斯坦福

斯坦福大学,承蒙帕洛阿尔托每日邮报
斯坦福坐落在硅谷的中心,提供了充足的行业学术机会。他们在理论、人机交互、人工智能方面做了很多创新性的研究。他们目前有 17 位诺贝尔奖获得者在校园里教学。我曾经在黄工程与科学中心(以英伟达 CEO 的名字命名)的地下室工作过,我会告诉你——斯坦福大学的拼搏精神很强。
我见过学生在地下室工作到深夜,大约 8-15 名学生挤在巨大的桌子周围,助教不知疲倦地回答他们的所有问题。当我想象 CS 的协作精神时,我总是想象旁观者斯坦福学生所展示的团队精神。从和我一起去麻省理工学院并继续在斯坦福大学攻读硕士学位的朋友那里,一个突出的关键因素是观察到的幸福水平。
有些人可能会将此归因于这样一个事实,即大多数斯坦福计算机科学课程(这肯定不是全部,还有一些很难的课程),大约有 30-50%的学生可以得到 a。这对于我的一个朋友来说是一个巨大的冲击,他也和我一起去了麻省理工学院,因为曲线肯定不是 T2 那么宽。并不是说分数是成为一名优秀工程师的超级准确的指标(他们真的不是),但不必为拥有优秀的 GPA 而紧张的压力一定是一种解脱,是其他不那么宽容的机构欢迎的替代选择。
伯克利
现在我们来讨论一下伯克利。相对于提到的其他学校,伯克利是顶尖的公立学校之一,也是一个更实惠的选择。如果你来自加州,并且预算有限,那么伯克利是一个很好的选择。

伯克利校园,由 brainchildvn 拍摄,在 Flickr 上发布
我个人在伯克利从事区块链工作,有几个朋友在那里学习计算机科学和机器人技术。众所周知,课堂上的空间竞争非常激烈,但这是大多数公立大学的领域。
我记得带着 Denero 的 CS 61A 改变了我朋友群中几个人的生活,为那些在 18 岁之前或开始上大学之前从未编程或编写软件的人打下了坚实的基础。同样,CS 61B,数据结构将是为软件工程面试的技术部分做准备的最重要的课程之一。所以如果你不怕大班,你有竞争力,你又缺钱,那么伯克利是一个极好的选择。
加州理工学院
许多人会认为加州理工学院是西海岸最难的学校之一。这是美国最小的大学之一,每班大约有 200 名学生。他们通常也被视为我们在麻省理工学院的竞争对手。他们的核心课程很激进——所有学生都被要求学习量子力学。
自主系统中心是加州理工学院发起的一项新举措,一些令人难以置信的教师致力于开发机器人探险家、守护者、变形金刚和运输工具。声音科幻?你打赌!我非常自信地说,由于加州理工学院的惊人工作,我们今天对科幻小说的看法将成为明天的科学现实。如果你想有一个挑战,有机会与教师进行充分的一对一指导和交流,并希望距离 La-La Land 半小时的路程,那么就去加州理工学院吧。
卡耐基梅隆大学
最后一所是卡内基梅隆大学。现在,这所学校特别引人入胜,因为它在计算机科学和戏剧方面都名列前茅。这所学校的学生很投入,充满激情,他们对挑战并不陌生。我在这里的一些同事和朋友已经成为不可思议的技术领袖、导演和知识产权律师,他们碰巧在这个过程中制造了一两个英特尔奔腾芯片。在这一类别的学校中,CMU 的录取率最高,2019 年约为 17%。
现在,从我自己被学院本身所影响的角度来看,我认为对计算机科学来说最好的大学是…
麻省理工学院
1056 位教授。90 位诺贝尔奖获得者。59 位国家科学奖章获得者。75 名麦克阿瑟研究员。上午 15 图灵奖获得者。

麻省理工学院的猎豹,由 IEEE 提供
麻省理工学院是美国最难进的学校之一。麻省理工学院的大多数学生学习到深夜,我们遵循努力工作,尽情玩乐的哲学。
麻省理工学院的计算机科学课程,我们称之为“课程 6 ”,过去是,现在可能仍然是,最受欢迎和最常见的三大专业之一。因为你正在和世界上其他一些最聪明的人一起学习,这种经历会让你很快变得谦卑。
人们带着各种各样的经验参加课程 6。当我旁听一些课程时,我的左边会有一位国际化学奥林匹克冠军,还有一位在开始大一/大一之前已经在亚马逊实习过的软件工程师。
麻省理工学院改变生活和范式的最“有价值”的课程是 6.006——算法导论。从我的经验来看,麻省理工学院的课程比其他大学更偏重理论。我认为这是因为该部门强调,如果我们能学会如何学习,如果我们理解了基本原则,我们就能真正解决任何问题,或构建任何应用程序。
在这门课中,你通常必须理解算法背后的基本理论或证明,并且能够用 Python 实现它。麻省理工学院也有在群体中设置 p 的文化。团队合作是必不可少的,深夜,发光二极管的屏幕,以及注意力、压力和心流水平的波动都等同于这种体验。如果你有关于麻省理工学院的其他问题,我很乐意与你分享更多。

众所周知的消防水管,位于麻省理工学院斯塔塔中心(麻省理工学院斯隆)32 号楼
好吧,你可能认为麻省理工学院是最好的学校之一,事实也的确如此。然而,我也想说…在你来这里之前要三思。虽然你将是最聪明的人之一,并从最鼓舞人心和最敏锐的教授那里学习,但我们这里没有分数膨胀。
你会喝消防水管里的水。你还必须为最大的挑战做好准备(技术上和精神上)。自我将被粉碎,你对自己知道和不知道的东西的理解将被戏剧性地改写。这没关系。正是通过不断的自我创造和自我毁灭,人类获得了内在的力量。
另外,我想强调的是,在美国之外还有很多很棒的学校。例如,我也曾在滑铁卢大学、牛津大学和伦敦帝国理工学院学习和工作。那里的学生和他们的美国同学一样有动力,有动力,也一样聪明。
我没有在这里包括对他们的评估,只是因为课程、项目结构和时间表与我们在地球的这一边有很大的不同。这些录取系统与我们在美国的完全不同,但是对于愿意在国外生活的学生来说,有很多很好的选择。我很高兴向你们每个人解释其中的区别,如果你想了解更多美国以外的国际选择,请随时联系我!
TOP2VEC:主题建模的新方式
几年前,从成千上万没有标注的自由文本文档中提取主题/话题/概念是非常困难的。最好和简单的方法是让一些人坐下来,浏览每篇文章,理解和注释主题。事实上,这很费时间,而且容易受到我们人类主观感知的影响。
尽管在过去已经进行了许多尝试,使用像 pLSA 这样的简单算法来处理这种无监督学习问题并提取主题,但是 LDA 彻底改变了该领域,它通过在主题-单词和文档-主题分布之前添加 Dirichlet 来实现这一奇迹。多年来,LDA 曾经是主题建模问题最受欢迎的算法。然而,这些模型的目标是找到可以用来以最小的误差重新创建原始文档的主题。
这两种算法都落后的几个领域:
- 假设主题的数量是已知的,理想情况下是未知的,并且成为模型的超参数,以获得更好的连贯性和迷惑性
- 删除停用词是必要的,否则主题词分布将会受到停用词的高度污染
- 致力于文档的 BOW(单词包)表示,忽略语义。像词汇化、词干化这样的预处理步骤可能有助于但无助于理解边和边的意思相同
那么,Top2Vec 是如何工作的呢??让我们一层一层地解码,并尝试在高层次上构建它的框架
在幕后,Top2Vec 利用 Doc2vec 首先生成一个语义空间(语义空间是一个空间空间,其中向量之间的距离是语义相似性的指标)。
如果你关注 NLP 研究,那么你一定读过 doc2vec 算法,它是对 word2vec 的高级修改,用于创建文档/句子/段落嵌入。与 word2vec 不同,doc2vec 还在训练阶段将段落向量(可以将其视为正在学习的另一个单词向量)与单词向量结合在一起。和 word2vec 一样,do2vec 也有两种训练方式:
- 具有分布式存储器(DM)段落向量:给定段落向量和上下文向量,预测目标单词
- 分布式单词包(DBOW):给定段落向量,预测上下文单词
由于更好的性能和模型的简单性,Top2Vec 使用了 Doc2Vec 的 DBOW 版本。
这个由单词和文档向量组成的语义空间是主题的连续表示,不像 LDA,主题是从离散空间中采样的。现在以这个共同嵌入的单词和文档语义空间为例,文档高度集中的密集区域可以被认为具有相似的主题,并且可以由附近的嵌入单词来最好地表示。

图一。(来源于[1])]具有文档(紫色气泡)和单词(绿色气泡)的联合嵌入的语义空间的图示
为了找到文档向量的密集区域来识别主题向量,首先想到的选择是利用一些基于密度的聚类算法(HDBSCAN 似乎是理想的)。但是直接使用这些算法的问题是,我们处理的不是二维空间,而是它的多维稀疏空间和维数灾难。所以要克服这个问题,可以先进行降维,然后用 HDBSCAN 进行聚类。为了降低文档向量的维数,使用了一致流形逼近和投影降维(UMAP ),因为它在保持局部和全局结构方面是很好的。

图二。(来源于[1])识别文档密集区域
因此,UMAP 和 HDBSCAN 帮助我们识别文档密集的聚类,主题向量可以简单地计算为这些聚类的质心。

图三。(来源于[1])密集文档聚类的质心是主题向量
因为我们已经在单个语义空间中联合训练了文档和词向量。因此,一旦我们确定了主题向量,就很容易找到附近最能代表该主题的词向量,因此我们可以获得每个主题的词分布。这样,我们就可以为 body 中的每个文档生成主题
由于 Top2Vec 给了我们一个语义空间中主题的连续表示,这也允许我们将主题的数量减少到任何期望的数量。这是通过取最小主题的主题向量和它的最近主题向量的加权算术平均值来完成的,每个主题向量都根据它们的主题大小来加权。每次合并后,都会重新计算每个主题的主题大小(即主题所属文档的数量)
在使用 Top2Vec 之前我们需要去掉停用词吗?
不,因为这样的停用词将出现在几乎所有的文档中,因此它们将与所有主题等距,而不会作为离任何主题最近的词出现。
这篇论文的作者也为这个模型提供了开源的 API(【https://github.com/ddangelov/Top2Vec】T2),并且只需要很少的编码工作就可以很好地完成。我不会进入这一部分,让你来做实验
参考资料:
[1]https://arxiv.org/pdf/2008.09470.pdf
[2]https://arxiv.org/pdf/1405.4053.pdf
主题建模文章与 NMF
抽取主题是发现文本之间潜在关系的一种很好的无监督数据挖掘技术。有许多不同的方法,最流行的可能是 LDA,但我将集中讨论 NMF。我在这方面取得了更大的成功,而且它通常比 LDA 更具可扩展性。
本文介绍了如何:
- 为主题建模准备文本
- 从文章中提取主题
- 总结这些主题
- 自动查找用于模型的最佳主题数量
- 在所有主题中找到质量最高的主题
- 预测一篇新文章的主题
和往常一样,所有代码和数据都可以在我的 GitHub 页面的存储库中找到。

数据
我用的是 CNN 的'商业'栏目的全文文章。文章出现在 2020 年 3 月下旬到 2020 年 4 月上旬的那个页面,被刮了。每天早上 8 点运行一次刮刀,刮刀包含在存储库中。“商业”页面上的文章关注几个不同的主题,包括投资、银行、成功、视频游戏、科技、市场等。
让我们做一些快速的探索性数据分析来熟悉数据。共 301 篇,平均字数 732 字,标准差 363 字。这是前五行。


就字数的分布而言,它有点偏正,但总体而言,它是一个非常正常的分布,第 25 百分位为 473 个单词,第 75 百分位为 966 个单词。大约有 4 个异常值(高于第 75 百分位 1.5 倍),最长的文章有 2.5K 个单词。

以下是对文本进行处理后,所有文章中出现频率最高的 20 个词。“公司”、“商业”、“人”、“工作”和“冠状病毒”是前 5 名,考虑到页面的焦点和数据被抓取的时间框架,这是有道理的。

NMF
非负矩阵分解(NMF)是一种无监督的技术,因此没有模型将被训练的主题的标签。它的工作方式是,NMF 将高维向量分解(或因式分解)成一个低维表示。这些低维向量是非负的,这也意味着它们的系数是非负的。
利用原始矩阵(A),NMF 会给你两个矩阵(W 和 H)。w 是它找到的主题,H 是这些主题的系数(权重)。换句话说,A 是按词排序的文章(原创),H 是按主题排序的文章,W 是按词排序的主题。
因此,假设有 301 篇文章、5000 个单词和 30 个主题,我们将得到以下 3 个矩阵:
A = tfidf_vectorizer.transform(texts)
W = nmf.components_
H = nmf.transform(A)A = 301 x 5000
W = 30 x 5000
H = 301 x 30
NMF 将修改 W 和 H 的初始值,使得乘积接近 A,直到逼近误差收敛或者达到最大迭代次数。
在我们的例子中,高维向量将是 tf-idf 权重,但它实际上可以是任何东西,包括单词向量或简单的单词原始计数。
文本处理
这是该过程中最关键的步骤之一。俗话说,“垃圾进来,垃圾出去”。当处理文本作为我们的特征时,尝试减少独特的单词(即特征)的数量是非常关键的,因为会有很多。这是我们对太多特性的第一次防御。
抓取的数据真的很干净(CNN 拥有好的 html,但并不总是如此)。你应该总是手动浏览文本,并确保没有错误的 html 或换行符等。这肯定会出现并伤害模特。
下面是我正在使用的函数:

这是我在文章开始时使用的默认设置(在这种情况下效果很好),但我建议将它修改为您自己的数据集。例如,我在一些数据集中添加了特定的停用词,如“cnn”和“ad ”,所以你应该经常浏览并查找类似的内容。这些是经常出现的词,很可能不会增加模型解释主题的能力。
以下是处理前后的文本示例:
- 在新体制下,“广州变成广州,天津变成天津。”最重要的是,报纸现在将把中国的首都称为北京,而不是北京。对一些美国出版物来说,这一步走得太远了。大约在这个时候,芝加哥论坛报在一篇关于拼音的文章中说,虽然它将对大多数汉字采用拼音,但一些名字已经“根深蒂固”
- 新州变成广州天津变成天津进口报纸西班牙语参考国首都北京北京大步远美国公众文章拼音时代芝加哥论坛报采用中文单词变得根深蒂固
特征创建、选择和更多缩减
既然文本已经被处理了,我们可以用它来创建特征,把它们变成数字。有几种不同的方法可以做到这一点,但总的来说,我发现从文本中创建 tf-idf 权重工作得很好,并且在计算上不是很昂贵(即运行速度快)。
你可以在这里阅读更多关于 tf-idf 的内容。一些其他的文本特征创建技术有单词袋和单词向量,所以你可以随意探索这两种技术。
对于特征选择,我们将“min_df”设置为 3,这将告诉模型忽略出现在少于 3 篇文章中的单词。我们将“max_df”设置为. 85,这将告诉模型忽略出现在超过 85%的文章中的单词。这将帮助我们消除对模型没有积极贡献的单词。
经过处理后,我们有 9K 多一点的唯一单词,因此我们将设置 max_features,以便只包括文章中词频最高的 5K 个单词,以便进一步减少特征。
除了单个单词的 tf-idf 权重,我们还可以为 n-grams (二元模型、三元模型等)创建 tf-idf 权重。).为此,我们将 n_gram 的范围设置为(1,2 ),它将包括一元和二元。
我们还需要使用一个预处理程序来连接标记化的单词,因为默认情况下模型会标记化所有内容。
texts = df['processed_text']tfidf_vectorizer = TfidfVectorizer(
min_df=3,
max_df=0.85,
max_features=5000,
ngram_range=(1, 2),
preprocessor=' '.join
)tfidf = tfidf_vectorizer.fit_transform(texts)
现在我们有了这些特性,我们可以创建一个主题模型。👍
人工主题建模
首先是一个主题模型的例子,我们手动选择主题的数量。之后我将展示如何自动选择最佳数量的主题。艰难的工作已经完成,所以我们需要做的就是运行模型。
nmf = NMF(
n_components=20,
init='nndsvd'
).fit(tfidf)
唯一需要的参数是组件的数量,即我们想要的主题数量。这是整个主题建模过程中最关键的一步,将极大地影响你最终主题的好坏。现在,我们将它设置为 20,稍后我们将使用一致性分数来自动选择最佳数量的主题。
我还用“nndsvd”初始化了模型,它最适合我们这里的稀疏数据。其他一切我们将保留为默认的工作良好。但是,可以随意试验不同的参数。
连贯性得分
为了评估主题的最佳数量,我们可以使用连贯性分数。解释它是如何计算的超出了本文的范围,但一般来说,它测量的是一个主题中单词之间的相对距离。这里的是关于如何在 gensim 中实现它的原文。
有几种不同类型的连贯性评分,其中最受欢迎的是 c_v 和 u_mass 。 c_v 更精确,而 u_mass 更快。我将在这里使用 c_v ,范围从 0 到 1,1 是完全一致的主题。
我喜欢 sklearn 的 NMF 实现,因为它可以使用 tf-idf 权重,我发现这比 gensim 的实现只能使用的原始字数更好(据我所知)。然而,sklearn 的 NMF 实现没有一致性分数,我还没有找到如何使用 c_v 手动计算的示例(有这个使用 TC-W2V )。如果有人知道一个例子,请让我知道!
因此,我们将使用 gensim 获得具有一致性分数的最佳主题数量,然后将该数量的主题用于 NMF 的 sklearn 实现。
自动选择最佳数量的主题
显然,有一种自动选择最佳主题数量的方法是非常关键的,尤其是如果这将进入生产阶段。使用一致性分数,我们可以针对不同数量的主题运行模型,然后使用具有最高一致性分数的主题。这当然不是完美的,但它通常工作得很好。
对于要尝试的主题数量,我选择了 5 到 75 的范围,步长为 5。这只是来自一些试验和错误,文章的数量和文章的平均长度。每个数据集都是不同的,所以你必须手动运行几次来找出你想要搜索的主题号的范围。运行太多的主题会花费很长时间,特别是如果你有很多文章,所以要意识到这一点。
我不打算详细介绍我在这里使用的 NMF 模型的所有参数,但它们确实会影响每个主题的总体得分,所以再次强调,找到适合您数据集的良好参数。你也可以网格搜索不同的参数,但这显然是相当昂贵的计算。
模型运行后,我们可以通过主题直观地检查一致性分数

30 是返回最高一致性分数(. 435)的主题数量,之后它下降得相当快。总的来说,这是一个不错的分数,但我不太关心实际价值。真正的考验是你自己浏览主题,确保它们对文章有意义。
10 topics 在一致性得分(. 432)方面紧随其后,因此您可以看到,它也可以通过一组不同的参数来选择。所以,就像我说的,这不是一个完美的解决方案,因为这是一个相当广泛的范围,但从图表中可以明显看出,10 到 40 个主题将产生良好的结果。也就是说,你可能想要平均前 5 个主题数,取前 5 个中的中间主题数,等等。现在我们只要 30 英镑。
总结主题
另一个挑战是总结主题。这里最好的解决方案是让一个人浏览文本并手动创建主题。这显然不太理想。另一种选择是使用每个主题中得分最高的单词,然后将这些单词映射回特性名称。我用的是前 8 个词。看起来是这样的:

我们可以通过索引将这些主题映射回文章。

比较主题的质量
对于一些主题,发现的潜在因素将很好地接近文本,而对于一些主题,它们可能不是。我们可以计算每篇文章和主题的残差,以判断主题有多好。
残差是数据的观测值和预测值之间的差异。残差为 0 意味着主题与文章的正文非常接近,所以越低越好。
为了计算残差,可以采用 tf-idf 权重(A)的 Frobenius 范数减去主题(H)和主题(W)的系数的点积。然后我们可以得到每个主题的平均残差,看看哪个主题的平均残差最小。
# Get the residuals for each document
r = np.zeros(A.shape[0])for row in range(A.shape[0]):
r[row] = np.linalg.norm(A[row, :] - H[row, :].dot(W), 'fro')# Add the residuals to the df
df_topics['resid'] = r

主题#9 具有最低的残差,因此意味着主题最接近文本,而主题#18 具有最高的残差。
主题#9 的摘要是“insta cart worker shopper custom order gig company”,有 5 篇文章属于该主题。

文章链接:
- 工人称零工公司在冠状病毒爆发期间做得“非常少”
- Instacart 在计划的工人罢工前做出更多改变
- Instacart 购物者计划在疫情罢工
- 这就是为什么亚马逊和 Instacart 的工人在你最需要他们的时候罢工
- 随着食品杂货配送需求激增,Instacart 计划再雇佣 30 万名工人
这是一个非常连贯的话题,所有的文章都是关于 instacart 和 gig workers 的。我们自动创建的摘要也很好地解释了主题本身。
现在我们来看看最糟糕的话题(#18)。总结就是“鸡蛋销售零售价格复活节产品鞋市场”。这个主题总共有 16 篇文章,所以我们只关注残差最高的前 5 篇。

文章链接:
- 鳄鱼向医护人员捐赠鞋子
- 想买金币还是金条?祝你找到任何
- 罗斯对海洋塑料垃圾有了新想法:手袋
- 你真的每个月都需要新衣服吗?订阅盒新鲜感已经消失
- 美国人正在为他们的宠物抢购食物
如你所见,这些文章到处都是。一般来说,它们大多是关于零售产品和购物的(除了关于黄金的文章),crocs 的文章是关于鞋子的,但没有一篇文章与复活节或鸡蛋有关。他们仍然联系在一起,尽管相当松散。
预测新文章的主题
一旦你符合这个模型,你可以给它一篇新文章,让它预测主题。你只需要通过之前安装在原始文章上的 tf-idf 和 NMF 模型来转换新的文本。注意,我在这里只是调用了 transform,而不是 fit 或 fit transform。
# Transform the new data with the fitted models
tfidf_new = tfidf_vectorizer.transform(new_texts)
X_new = nmf.transform(tfidf_new)# Get the top predicted topic
predicted_topics = [np.argsort(each)[::-1][0] for each in X_new]# Add to the df
df_new['pred_topic_num'] = predicted_topics
在我收集了初始集并随机选择了 5 篇文章后,我继续刮文章。所以这些以前从未被模型看到过。总的来说,它在预测主题方面做得很好。

- 美国为这种没有方向盘或踏板的自动驾驶汽车扫清道路 -主题:太阳能计算技术 spacex energi power ibm vehicl
- 如何在这场危机中远程管理一个团队 -主题:工作家庭办公室儿童办公桌人员学校
- 国会将失业援助扩展到临时工。但是他们很难访问它 -主题:优步工人雇佣自治的自由司机
- 斯特尔特:联邦政府对疫情的反应是 9/11 级别的失败 -主题:川普福克斯新闻简报汉尼提·怀特·豪斯总统
- 全球缺货,任天堂暂停任天堂 Switch 对日出货 -主题:游戏 xbox 视频播放图文 nbc olymp doom
自然语言处理中的主题建模
重点是潜在的狄利克雷分配

在自然语言处理中,术语主题是指“组合在一起”的一组单词。这是想到这个话题时想到的词。拿体育来说。一些这样的词是运动员、足球和体育场。
主题模型是自动发现文档集合中出现的主题的模型。然后,可以使用经过训练的模型来辨别这些主题中的哪些出现在新文档中。该模型还可以挑选出文档的哪些部分涵盖了哪些主题。
想想维基百科。它有数百万份文档,涵盖了数十万个主题。如果这些都能被自动发现岂不是很棒?以及哪些文档涵盖了哪些主题的更精细的地图。对于那些试图探索维基百科的人来说,这些将是有用的辅助工具。
我们还可以发现新出现的主题,因为有关于它们的文档。在一些环境中(如新闻),新的文档不断产生,并且新近性很重要,这将有助于我们发现趋势主题。
这篇文章涵盖了一个统计上强大且广泛使用的方法来解决这个问题。
潜在狄利克雷分配
这种方法包括建立主题和文档的显式统计模型。
主题被建模为一组固定单词(词典)的概率分布。这就形式化了“提到这个话题时想到的一组词”。文档被建模为一组固定主题的概率分布。这揭示了文档涵盖的主题。
学习的目的是从文档语料库中发现各种主题的良好单词分布,以及各种文档中的良好主题比例。主题的数量是这种学习的一个参数。
生成单据
在这个阶段,它将有助于描述如何从学习到的模型生成合成文档。这将揭示这个模型如何运作的关键方面,我们还没有深入研究。
首先,我们将选择本文档将涵盖的主题。一种方法是首先从我们的语料库中随机选取一个文档,然后将新文档的主题比例设置为种子文档的主题比例。
接下来,我们将设置文档长度,称之为 n 。
接下来,我们将重复下面的 n 次:
sample a topic from the document’s topic proportions
sample a word from the chosen topic’s words-distribution
这将发出一系列的 n 个字。这些单词将会被标注上它们所来自的主题。
生成的文档是乱码。从混合话题中抽取的一袋单词。这不是问题——它不是用来阅读的。它确实揭示了哪些词是由哪些话题产生的,这可能是有见地的。
举例
**Lexicon**: {athlete, football, soccer, tennis, computer, smartphone, laptop, printer,Intel, Apple, Google}
**Num Topics** : 3
**Topic 1**: {athlete, football, soccer, tennis}
**Topic 2**: {computer, smartphone, laptop, printer}
**Topic 3**: {Intel, Apple, Google}
**Topic proportions in a document**: { 2 ⇒ 70%, 3 ⇒ 30% }
在上面,我们已经用一组单词描述了一个主题。我们将此解释为:集合中的所有单词都是等概率的;词典中剩余的单词概率为零。
让我们看一个 4 个字的生成文档。
Topic: 2 3 2 2
Word: laptop Intel smartphone computer
主题 3 在本文中的比例(25%)接近其在抽样分布中的比例(30%)。
学习
像往常一样,这是事情变得特别有趣的地方。
首先,让我们提醒自己学习的目的。它是从文档语料库中发现各种主题的单词分布,以及各种文档中的主题比例。简而言之,哪些词描述了哪些主题,哪些主题包含在哪些文档中。
我们将要描述的算法被广泛使用。这也不难理解。这是吉布斯采样的一种形式。
该算法的工作原理是,首先以某种方式将主题分配给语料库中的各种单词,然后迭代地改进这些分配。在其操作期间,该算法跟踪当前分配的某些统计数据。这些统计数据有助于算法的后续学习。当算法终止时,很容易从最终的主题分配中“读出”每个主题的单词分布和每个文档的主题比例。
让我们从描述上一段提到的统计数据开始。它们采用两个计数矩阵的形式:topic_word 和 doc_topic。两者都是从语料库中单词的当前主题分配中得到的。topic_word( t , w )统计单词 w 出现 topic t 的次数。doc_topic( d , t )统计主题 t 在文档 d 中出现的次数。
让我们看一个数字例子,以确保我们得到了正确的。下面我们看到一个两个文档的语料库,以及对其单词的主题分配。词典是 A,B,c。
Doc 1’s words: A B A C A Doc 2’s words: B C C B
Doc 1’s topics: 1 1 1 2 2 Doc 2’s topics: 2 2 2 2
实际上,让我们先利用这个机会思考一下我们看到的一些特性。在文档 1 中,注意 A 有时被分配给主题 1,有时被分配给主题 2。如果单词 A 在两个题目中出现的概率都很高,这就说得通了。在文档 2 中,请注意 B 始终被分配给主题 2。如果文档 2 仅涵盖主题 2,并且 B 在主题 2 的分布中具有正概率,则这似乎是合理的。
好,现在来看两个计数矩阵。
**topic_word**: **doc_topic**:
*A B C 1 2*
*1* 2 1 0 *d1* 3 2
*2* 1 2 **3** *d2* 0 **4**
我们加粗了一些有点醒目的条目。也许 doc2 更喜欢主题 2。可能题目 2 更喜欢 c 字。
好了,开始讲解学习吧。第一步是用随机抽样的主题标注语料库中的单词。这听起来很容易。实际上还有更多。与其硬编码这种随机抽样,不如抽取合适的先验分布。这给了我们一个潜在的强大机制来注入领域知识或来自外部文本分析的结果。
这种基于先验的机制工作如下。首先,我们复制前面介绍的两个矩阵。分别叫它们 prior_topic_word 和 prior_doc_topic。如前所述,这些矩阵中的条目是计数。这些计数捕捉了我们先前的信念。
这些先验矩阵影响主题的初始分配。随着学习的进展,这种影响会逐渐减少,尽管不会为零。
我们如何准确地从这些计数中抽取最初分配的题目?首先,我们计算
P(w | t)= prior _ topic _ word(t,w)/sum _ w'(prior _ topic _ word(t,w ')
P(t | d)= prior _ doc _ topic(t,d)/sum_t' (prior_doc_topic(t ',d)
P ( w | t )只是题目 t 的赋值的分数,其单词为 w 。P(t|d)只是文档 d 中指定题目为 t 的单词的零头。
接下来,我们从这些作业中抽取样本。更具体地说,我们从分子为P(w|t)P(t|d)的分布中抽取文档 d 中单词 w 的主题。
这可以这样理解。P(w|t)P(t|d)正是我们生成模型中文档 d 中生成单词 w 的概率。作为 t 的一个函数,它记录了在此过程中使用 t 的可能性。
现在让我们讨论在两个先前的矩阵中设置这些计数的值。对于我们在这里的目的,我们所关心的是没有一个主题比另一个更好。这种偏好是不必要的偏见。我们可以通过将每个矩阵中的所有计数设置为相同的正数来实现这一点。1 是最简单的选择。奥卡姆剃刀推理。
prior_topic_word(*t*,*w*)=1 for every topic *t* and word *w*
prior_doc_topic(*d*,*t*)=1 for every document *d* and topic *t*
好的,所以题目分配将会从这些计数中抽样,并且是均匀随机的。
在这个初始任务之后,我们将重复做以下事情,希望改进这个任务,因此,我们的模型从中学习到了:
1\. Pick a word *w* from a document *d* in the corpus
2\. Sample a topic *t*’ from the distribution whose numerator is
*Q*(*w|t*)*Q*(*t*|*d*)
3\. Set *w*’s topic in *d* to *t*’.
什么是 Q ( w|t )?这是我们目前认为的从话题 t 中产生单词 w 的可能性。其实好的Q(w|t)的价值观才是我们所追求的。这些将形成最终的特定主题单词分布。
在开始学习之前,我们将先前对这种分布的信念捕获到P(w|t)中。随着学习的进行,P(w|t)开始被修正为后验信念Q(w|t)。
Q(t|d)的解释也差不多。我们之前对每个文档的主题比例的看法分为P(t|d)。随着学习的进行,这些被修改成Q(t|d)。
Q(w|t)和Q(t|d)是如何计算的?在学习过程中的任何时候,考虑将主题分配给语料库中的各种单词。根据这个主题分配,我们可以计算 topic_word 和 doc_topic 矩阵中的计数。接下来,我们执行以下操作
posterior_topic_word = topic_word + prior_topic_word
posterior_doc_topic = doc_topic + prior_doc_topic
注意'+'是矩阵加法。从计数矩阵的后验版本中,我们可以计算出Q(w|t)和Q(t|d)。正如我们从之前的版本中计算出P(w|t)和P(t|d)。
一些直觉
我们如何知道这个迭代过程实际上改进了主题分配?我们不会给出证明。取而代之的是一些直觉。
首先注意,可以通过将语料库中所有出现的单词 w 乘以各种Q(w|t)Q(t|d)项,来获得语料库中单词的主题分配的总体质量。这里 d 表示 w 出现的文档,而 t 表示分配给该事件的主题。
接下来,我们将揭示分数函数具有某些可取的特征。
该得分函数有利于主题特异性
我们所说的“话题特异性”是指 Q ( w | t )只集中在几个话题上。这是那些与特定主题紧密相关的单词的期望属性。我们来细说一下。考虑一个多样化的语料库,如维基百科。假设我们的目标是发现它所涵盖的各种各样的主题。考虑一下单词 cat 。它的主题特异性很高,也就是说,它只唤起这些主题中的几个。理应如此。因此,分数函数偏向于支持主题特异性是一件好事。
也就是说,不是每个单词都应该是特定主题的。例如中的。稍后我们将讨论在这种情况下抵消主题特异性的独立机制。首先,我们来解释一下主题特异性偏差。我们称特定主题的单词为信息型。
考虑在语料库中同一个单词 w 出现 1 次 n 让 T 1 和 T 2 成为这些 n 事件的两个不同的主题分配。在 T 1 中的所有主题都是不同的。称这个集合为{ 1 、 2 、 3 、…、 n }。 T 2 里的所有题目都一样,最大化Q(w|T)的那个。把这个题目叫做 tmax 。 T 1 在Q(w|T)下的可能性是Q(w|1Q(w|2)…Q( *T 2 在 Q 下的可能性( w | t )是q(w|tmax)^n。当 w 信息丰富且 n 不太小时,TT*2 的可能性会远远高于 T 1。
这一分析可以总结为
The score function encourages informative words to stay on topic
该得分函数有利于文档特异性
我们所说的“文档特异性”是指文档只涵盖几个主题。文件往往是具体的。问题是分数函数(以及随之而来的学习算法)是否利用了这种趋势来做得更好。答案是肯定的。如下所述。
考虑一个有 n 个单词的文档 d。让 T 1 和 T 2 作为两个不同的题目分配给它的单词。 T 1 中的所有主题都是截然不同的。称这个集合为{ 1 , 2 , 3 ,…, n }。 T 2 中的所有题目都一样,这次是 d 中比例最高的一个。称之为 tmax 。 T 1 在Q(T|d)下的可能性是Q(1|dQ(2 |d)…**Q(n|d)。 T 2 在q(t|d)下的可能性是q(tmax|d)^n。显然,T2 可以高得多,尤其是对于大型文档。
这一分析可以总结为
The score function encourages documents to stay on topic
这些影响有时会相互竞争!
考虑一个特别常见的词: the 。合理假设它出现在几乎所有文档中。主题一致性倾向于为所有这些事件分配相同的主题。文件特异性抗议,因为这将迫使所有这些文件涵盖这一个主题。
让我们想象一下这可能会如何发展。主题一致性可能会让这些词失去吸引力。他们被分配的话题可能只是“随波逐流”,以邻居中任何话题的身份出现。当然,这些作业的可能性的主题一致性组件可能会减少。另一方面,文档特异性部分将会增加。
更多关于学习算法
我们已经看到分数函数有好的偏向。这只有在学习算法很好地利用它们的情况下才有帮助。所以让我们更深入地讨论一下算法。
我们首先注意到,该算法通过局部优化全局主题分配质量分数来工作。仅这一点就表明它正在关注偏见。
接下来,我们将在一个简单的例子中进行一两次迭代。这将帮助读者更好地感受它的“局部优化”行为。这比一些人想象的更加微妙。
例子
我们将词典设置为{A,B}。我们的语料库将有两个文档,AAA (d1)和 BBB (d2)。(虽然这些听起来可能很傻,但这个练习将会很有教育意义。)我们的目标是给语料库添加两个主题。
让我们将所有先前的计数设置为 0.0000001。它仍然会产生均匀随机的初始赋值,尽管简化了我们的数值计算。
假设下面是最初的任务
d1 d2
AAA BBB
121 122
从该作业中学到的模型是
Q(A|1) = ⅔ , Q(B|1) = ⅓ // these sum to 1
Q(A|2) = ⅓ , Q(B|2) = ⅔ // these sum to 1
Q(1|d1) = ⅔ , Q(2|d1)= ⅓ // these sum to 1
Q(1|d2) = ⅓, Q(2|d2) = ⅔ // these sum to 1
现在想象从 d 1 中选取一个单词,并重新采样它的主题。(我们本可以选择 d 2,但理由是相似的。)有三种可能的结果:121 → 121,121 → 1 1 1,121 → 12 2 或 2 21。第三种方法实际上就是我们开始的地方:交换主题名称并重新排列顺序。所以第一个和第三个结果实际上让我们回到了同样的状态。所以我们放大第二个:121 → 111。这种转变的概率是正的。(事实上相当高,因为从 2 → 1 的转换提高了主题可能性分量和文档可能性分量。)因此,如果我们一直重复这个过程,在某一点上,所有 d1 将被分配相同的主题 t (=1 或 2)。
接下来,我们从这个赋值 t 到 d 1 重新估计模型的各种参数。Q(t|d1)现在是 1。Q (A| t )很可能比我们开始这个过程时的 Q (A|1)要高。我们已经达到了一种难以摆脱的“快乐状态”。
变体
现在让我们看看这个算法的一些变体。这些包括修改下面的步骤 2。
1\. Pick a word *w* from a document *d* in the corpus
2\. **Sample a topic *t*’ from the distribution whose numerator is
*Q*(*w|t*)*Q*(*t*|*d*)**
3\. Set *w*’s topic in *d* to *t*’.
我们可以将步骤 2 替换为“将 t' 设置为最大化Q(w | t)Q(t|d)的主题”。这被称为最大似然估计。在我们的设置中,这产生了一个贪婪的算法。
这种变体因其简单性而吸引人,并且可能收敛得更快。然而,它更容易陷入次优的局部最优。
我们的下一个变体引入了一个称为温度的参数,它可以被改变以跨越从吉布斯采样器到贪婪算法的行为范围。这就是这种算法的吸引力所在。不过,这确实提出了一个新问题:如何设定温度。
撇开温度不谈,让我们看看它是如何工作的。考虑单词 w ,其当前主题 t 正被考虑重新分配。对于我们评估的每个主题
delta(t’) = — [ log *Q*(*w*|*t*’)*Q*(*t*’|*d*) — log *Q*(*w*|*t*)*Q*(*t*|*d*) ]
我们不会在这里解释为什么日志。我们将注意到,delta(t’)小于 0 对应于在这种情况下t’比 t 更适合。从 t 到 t’的转换可以被视为减少能量(或下坡)的移动。
接下来会发生什么?我们会定性描述。所以现在我们知道了 delta( t ')对于 t '的各个值,包括 t 。根据这些增量值,该算法定义了主题上的合适的概率分布。这种分布由温度参数化。
在高温下,甚至允许“上坡移动”,即移动到 delta 值为正的主题。这样的移动,虽然在当前的主题分配上是倒退的,但是可以帮助逃脱局部能量最小值。
在低温下,分布倾向于δ值为负的移动。在零度的极端情况下,这会产生贪婪的行为。
更丰富的前科
到目前为止,我们已经将 prior counts 设置为 1。这里我们考虑更丰富的设定。
之前我们注意到,某些单词最好是特定于主题的。我们能找到这样的单词并把它们的主题特异性偏好记录到先前的计数中吗?这可以加快后续的学习。
这里有一个明智的方法。首先,我们将所有先前的计数设置为 1。接下来,对于每个单词 w,我们将计算 n - n ( w )。这里 n 是语料库中的文档总数, n ( w )是单词 w 出现的文档数。把n-n(w)看成是 w 的某种“逆文档频率”。接下来,我们将对每个单词分别进行以下操作。我们将从众多话题中随机挑选一个话题。我们会把n-n(w)加到前面的 count word_topic( t , w )。
这个想法是把不常见的单词映射到特定的主题。由于主题选择是随机的,不同的单词可能会映射到不同的主题。
这个先验是否过于偏颇?我们可以很容易地软化它,如果我们觉得是这样的话。有很多可能性。一种是将n-n(w)替换为log n-log n(w)。第二种方法是在放大一个单词的先前计数时,对多个主题(尽管不是很多)进行采样。
其他建模增强
改进模型还需要考虑哪些方面?首先,让我们阐明它的假设:
1\. The topics a document covers are sampled independently. They
are not checked for compatibility.
2\. Word proximity in a document is not considered.
3\. The hierarchical structure among topics is not modeled.
让我们分别说一说。主题兼容性可能很重要。一份文件更有可能涵盖科技公司 & 电脑而不是科技公司 & 体育。单词的接近度也很重要。重复出现在彼此附近的两个单词比相隔几千个单词出现的更有可能出现在同一个主题上。主题层次结构更好地模拟了文档。一种常见的写作模式是让文档涵盖一个广泛的主题及其各种子主题。
下面我们描述如何解决这些问题。在某些用例中,放松可能会提高模型的准确性,尽管可能会增加模型的复杂性或可学性。他们也提供了注入领域知识的机会。此外,在某些方面甚至有助于学习!
具体如何进行很大程度上取决于用例。
主题兼容性
这涉及到添加一个马尔可夫模型。它的状态就是主题。它的转换模型语料库中的主题之间的兼容性。
在对文档中的单词主题进行采样时,如何使用这个模型?我们需要适当延长 Q ( t | d )。这个扩展最简单的描述是想象从中抽取主题。
这种抽样可以被看作是在马尔可夫模型上的随机行走,可能偶尔会重新开始。我们首先从Q(t|d)中选择一个主题。接下来,我们执行以下操作。大多数情况下,我们从这个话题的状态开始走一个转换,其概率在那个转换上。偶尔我们会从Q(t|d)重新采样,即跳转到新的话题。
这种随机游走诱导出一种新的分布,称之为Q'(t|d,M)它同时受到马尔可夫模型 M 和Q(t|d)的影响。马尔可夫模型是一个语料库级的结构。使用Q(t|d)将其行为定制为文档 d 。
马尔可夫模型的参数是如何学习的?这个比较好解释。到目前为止,我们的学习算法已经在为语料库文档中的单个单词分配主题的层面上工作。马尔可夫模型的参数完全由这种分配决定。
具体来说,对于文档中每一对主题分配的 s 、 t ,我们对弧 s → t 和 t → s 进行递增计数,除非 s 等于 t ,在这种情况下只递增一次。
因此,随着主题分配的改进,主题兼容性模型的参数也随之改进。两者协同作用。
让我们从更广的范围来看待这种协同作用。随着我们看到越来越多的关于相同两个主题的文档,马尔可夫模型开始了解到这些主题是兼容的。这种改进的学习导致其他地方的主题分配的改进。
字的接近度
这可以通过适当延长Q(w|t来合并。具体来说,让 t 的选择不仅受到 w 的影响,也受到 w 附近的词的影响。
让我们把这个正式化。设W(d)=W(-d),…, w ,…, w (+ d )表示以 w 为中心的长度为 2 d +1 的单词序列。这里 d 是一个非负整数。接下来,我们将Q(W|t)扩展为Q(W(d)|t)。
从学习的角度来看,这是否使我们的模型变得复杂了?有了合适的假设,幸运的是没有。我们假设 W ( d )中的字在给定 t 的情况下是条件独立的。在这种假设下,我们得到
*Q*(*W*(*d*)|*t*) = *Q*(*w*(-*d*)|*t*)*…**Q*(*w*|*t*)*…*Q(*w*(+*d*)|*t*)
涉及 t 的 RHS 术语都是和以前一样的形式。所以学习不需要改变!
尽管有这样的假设,我们还是得到了使用上下文的好处。其中最主要的是,分配给中心词 w 的主题可以更准确地确定,因为现在我们有了更多的上下文。另一个有用的特征,尤其是在学习的早期,是我们得到了一些话题的连续性。当我们一次滑动窗口 W ( d )一个单词时,分配的主题不太可能改变,因为上下文没有太大变化。相比于 W (0)。
主题层次
这是一个高级话题。我们的报道是局部的。
这里是关键的观察。比较两个主题的单词分布有助于评估一个主题是否是另一个主题的后代。后代的关键字将倾向于成为祖先关键字的子集。
使用这个概念,我们可以在学习过程中的任何时候学习主题的层次结构。即使是一个粗略的学习层次也比没有强。
正如我们为主题兼容性所做的那样,我们可以扩展我们的Q(t|d)模型,以将所学的层次结构考虑在内。就像这里一样,描述这个扩展最简单的方法是想象一个特定文档的采样主题。
这种抽样是在层次结构上随机进行的,可能偶尔会重新开始。我们首先从Q(t|d)中选择一个主题。接下来,我们执行以下操作。很多时候我们从这个话题走到一个孩子身上。偶尔我们会从Q(t|d)重新取样,也就是跳到层次结构中其他地方的主题。
这种随机游走导致了一种新的分布,称之为 Q '( t | d ,H),它同时受到主题层次 H 和 Q ( t | d )的影响。主题层次结构是一个语料库级别的结构。使用Q(t|d)将其行为定制为文档 d。
提高可读性的增强功能
文档的可读性不是 LDA 的主要目标。尽管如此,建模框架提供了注入改进它的机制的机会。所以让我们利用这一点。
让我们从提出问题开始。
1\. Topic continuity is not maintained. Neighboring words can jump
from topic to topic.
2\. Topic coherence is not maintained. A topic spews out its words
independently.
话题连续性
我们可以通过添加一个具有两种状态的马尔可夫模型来保持话题的连续性:继续和切换。继续继续当前话题,切换切换到新话题。从延续到自身的弧应该有很大概率。从开关到继续的弧应该有接近 1 的概率,因为我们几乎肯定想要继续跟随开关。
这个模型上的概率很容易从主题作业中学习到。埋在其中的是继续和切换事件。这种学习与主题任务的学习相吻合,相互受益。
在文档中利用词的邻近性也有助于保持主题的连续性。我们选择涵盖本节方法的原因是,它比单词邻近法更容易实现。
这也有利于学习
除了可读性之外,注入主题连续性机制也有可能提高所学作业的质量。实际上,它充当了平滑正则化器,不支持离群值。
这里有一个例子,是我们之前使用的一个例子的扩展。考虑单词,我们假设它出现在语料库的几乎所有文档中。之前我们解释了为什么我们希望分配给和的特定事件的主题能够在它的邻居中“随波逐流”。主题连续性机制为这种偏好增加了更多权重,因为它明确倾向于“随波逐流”。
话题连贯性
我们可以通过放松单词袋假设来保持话题的连贯性。相反,使用一阶马尔可夫模型来模拟当前单词对下一个单词的影响。每个主题都有自己的马尔可夫模型。
每个主题的马尔可夫模型很容易从语料库中的当前主题分配中(重新)学习。
延伸阅读
大卫·布雷。概率主题模型。ACM 的通信。2012 年http://www.cs.columbia.edu/~blei/papers/Blei2012.pdf
大卫·布雷,吴恩达,迈克尔·乔丹。潜在狄利克雷分配。JMLR (3) 2003 年第 993-1022 页。
汤姆·格里菲斯。潜在狄利克雷分配生成模型中的吉布斯抽样。https://people . cs . umass . edu/~ wallach/courses/S11/cmpsci 791 ss/readings/griffiths 02 Gibbs . pdf
基于 PyCaret 的 Power BI 主题建模

Power BI 中的 NLP 仪表板
在我们的上一篇文章中,我们展示了如何通过将 Power BI 与 PyCaret 集成来实现聚类分析,从而允许分析师和数据科学家在他们的报告和仪表板中添加一层机器学习,而无需任何额外的许可成本。
在这篇文章中,我们将看到如何使用 PyCaret 在 Power BI 中实现主题建模。如果你以前没有听说过 PyCaret,请阅读这个公告以了解更多信息。
本教程的学习目标
- 什么是自然语言处理?
- 什么是主题建模?
- 在 Power BI 中训练和实现一个潜在的 Dirichlet 分配模型。
- 在仪表板中分析结果和可视化信息。
开始之前
如果您以前使用过 Python,很可能您的计算机上已经安装了 Anaconda 发行版。如果没有,点击这里下载 Python 3.7 或更高版本的 Anaconda 发行版。

https://www.anaconda.com/products/individual
设置环境
在我们开始在 Power BI 中使用 PyCaret 的机器学习功能之前,我们必须创建一个虚拟环境并安装 pycaret。这是一个四步的过程:
✅ 步骤 1——创建一个 anaconda 环境
从开始菜单打开 Anaconda 提示符并执行以下代码:
conda create --name **powerbi** python=3.7
“power bi”是我们选择的环境名称。你可以保留任何你喜欢的名字。
✅ 第二步—安装 PyCaret
在 Anaconda 提示符下执行以下代码:
pip install **pycaret**
安装可能需要 15-20 分钟。如果您在安装时遇到问题,请查看我们的 GitHub 页面,了解已知问题和解决方案。
✅t24】第三步——在 Power BI 中设置 Python 目录
创建的虚拟环境必须与 Power BI 链接。这可以使用 Power BI Desktop 中的全局设置来完成(文件→选项→全局→ Python 脚本)。默认情况下,Anaconda 环境安装在以下位置:
C:\Users\ 用户名 \Anaconda3\envs\

文件→选项→全局→ Python 脚本
✅步骤 4 —安装语言模型
为了执行 NLP 任务,您必须通过在 Anaconda 提示符下执行以下代码来下载语言模型。
首先在 Anaconda 提示符下激活 conda 环境:
conda activate **powerbi**
下载英语语言模型:
python -m spacy download en_core_web_sm
python -m textblob.download_corpora

python -m 空间下载

python-m text blob . download _ 语料库
什么是自然语言处理?
自然语言处理(NLP)是计算机科学和人工智能的一个子领域,涉及计算机和人类语言之间的交互。特别是,NLP 涵盖了关于如何编程计算机来处理和分析大量自然语言数据的广泛技术。
NLP 驱动的软件在日常生活中以各种方式帮助我们,很可能你已经在不知不觉中使用了它。一些例子是:
- 个人助理 : Siri,Cortana,Alexa。
- 自动完成:在搜索引擎中(例如:谷歌、必应、百度、雅虎)。
- 拼写检查:几乎无处不在,在你的浏览器,你的 IDE ( 比如: Visual Studio),桌面应用(比如:微软 Word)。
- 机器翻译:谷歌翻译。
- 文档摘要软件:文本压缩器,自动摘要器。

来源:https://clevertap.com/blog/natural-language-processing
主题建模是一种用于在文本数据中发现抽象主题的统计模型。这是 NLP 中的许多实际应用之一。
什么是主题建模?
主题模型是一种属于无监督机器学习的统计模型,用于发现文本数据中的抽象主题。主题建模的目标是在一组文档中自动发现主题。
主题建模的一些常见用例有:
- 通过将文档分类成主题来总结大量文本数据(这个想法与聚类非常相似)。
- 探索性数据分析了解客户反馈表、亚马逊评论、调查结果等数据。
- 特征工程为监督机器学习实验(如分类或回归)创建特征
有几种算法用于主题建模。一些常见的是潜在狄利克雷分配(LDA),潜在语义分析(LSA),和非负矩阵分解(NMF)。每种算法都有自己的数学细节,这将不会在本教程中介绍。我们将使用 PyCaret 的 NLP 模块在 Power BI 中实现一个潜在的 Dirichlet 分配(LDA)模型。
如果你有兴趣学习 LDA 算法的技术细节,可以阅读这篇论文。

来源:https://springer plus . springer open . com/articles/10.1186/s 40064-016-3252-8
主题建模的文本预处理
为了从主题建模中获得有意义的结果,必须在将文本数据馈送给算法之前对其进行处理。这在几乎所有的 NLP 任务中都很常见。在处理结构化数据(行和列中的数据)时,文本的预处理不同于机器学习中经常使用的经典预处理技术。
PyCaret 通过应用超过 15 种技术自动预处理文本数据,如停用词去除、标记化、词条化、二元/三元模型提取等。如果您想了解 PyCaret 中所有可用的文本预处理特性的更多信息,单击此处。
设置业务环境
Kiva 是一个国际非营利组织,于 2005 年在旧金山成立。它的使命是扩大金融服务不足的社区,以帮助他们蓬勃发展。

在本教程中,我们将使用来自 Kiva 的开放数据集,其中包含 6,818 个已批准贷款申请人的贷款信息。数据集包括贷款金额、国家、性别等信息,以及借款人提交的申请中的一些文本数据。

样本数据点
我们的目标是分析' en '列中的文本数据,以找到抽象主题,然后使用它们来评估某些主题(或某些类型的贷款)对违约率的影响。
👉我们开始吧
现在,您已经设置了 Anaconda 环境,理解了主题建模,并且有了本教程的业务上下文,让我们开始吧。
1.检索数据
第一步是将数据集导入 Power BI Desktop。您可以使用 web 连接器加载数据。(Power BI 桌面→获取数据→来自 Web)。

Power BI 桌面→获取数据→其他→ Web
链接到 csv 文件:
https://raw . githubusercontent . com/py caret/py caret/master/datasets/kiva . CSV
2.模特培训
为了在 Power BI 中训练主题模型,我们必须在 Power Query Editor 中执行 Python 脚本(Power Query Editor→Transform→Run Python script)。将以下代码作为 Python 脚本运行:
from **pycaret.nlp** import *
dataset = **get_topics**(dataset, text='en')

超级查询编辑器(转换→运行 python 脚本)
PyCaret 中有 5 个现成的主题模型。

默认情况下,PyCaret 使用 4 个主题训练一个潜在狄利克雷分配(LDA) 模型。默认值可以很容易地更改:
- 要更改模型类型,使用 get_topics() 中的 模型 参数。
- 要更改主题数量,使用 num_topics 参数。
参见包含 6 个主题的非负矩阵分解模型的示例代码。
from **pycaret.nlp** import *
dataset = **get_topics**(dataset, text='en', model='nmf', num_topics=6)
输出:

主题建模结果(执行 Python 代码后)

最终输出(点击表格后)
包含主题权重的新列被附加到原始数据集。下面是应用查询后 Power BI 的最终输出。

Power BI Desktop 中的结果(应用查询后)
3.仪表盘
一旦您在 Power BI 中有了主题权重,以下是一个如何在 dashboard 中可视化它以生成见解的示例:

仪表板的摘要页面

仪表板的详细信息页面
你可以从我们的 GitHub 下载 PBIX 文件和数据集。
如果您想了解更多关于使用 PyCaret 在 Jupyter 笔记本中实现主题建模的信息,请观看这个 2 分钟的视频教程:
使用 PyCaret 在 Jupyter 笔记本中进行主题建模
如果你有兴趣学习更多关于主题建模的知识,你也可以查看我们为初学者准备的 NLP 101 笔记本教程。
关注我们的 LinkedIn 并订阅我们的 Youtube 频道,了解更多关于 PyCaret 的信息。
重要链接
用户指南/文档
GitHub 资源库 安装 PyCaret
笔记本教程
贡献于 PyCaret
想了解某个特定模块?
从第一个版本 1.0.0 开始,PyCaret 有以下模块可供使用。点击下面的链接,查看 Python 中的文档和工作示例。
另请参见:
笔记本中的 PyCaret 入门教程:
你愿意投稿吗?
PyCaret 是一个开源项目。欢迎每个人都来投稿。如果您愿意投稿,请随意处理未决问题。dev-1.0.1 分支上的单元测试接受拉请求。
如果你喜欢 PyCaret,请给我们 GitHub 回购的⭐️。
中:https://medium.com/@moez_62905/
领英:【https://www.linkedin.com/in/profile-moez/
推特:【https://twitter.com/moezpycaretorg1
电影微博的主题建模——电影销售预测
使用主题建模和时间序列预测分析了社交媒体对电影销售的影响
供稿人:小酒窝·辛哈尼亚、郭尔强、袁丽莎、袁建业·李、杰夫·内尔

Github
【https://github.com/chikorita5/movie-hype
简介
分析师使用不同的社交媒体平台来收集、分析和预测人们的行为。如今,脸书和推特拥有最多的信息。复仇者联盟端游即将上映的时候,人们在推特上疯了。发行后,它获得了有史以来最高的销量。除了这部电影由漫威电影宇宙制作,有小罗伯特·唐尼、克里斯·埃文斯等演员出演,这部电影的成功很大程度上也是普通大众在网上制造的轰动效应。研究表明,除了预算、明星影响力、类型和其他电影特有的因素之外,上映前在互联网上的知名度和反馈也是决定电影首映周末票房收入的重要因素。但是没人知道这两者是什么关系。twitter 上有很多与电影相关的标签和推文。哪些推文和话题真正让人们去看和喜欢一部电影并不像听起来那么容易理解。也就是说,预测电影销售的因素有很大的商业价值,因为它可以帮助营销和公关团队根据特定人群的兴趣来确定提高销售的策略。这就是为什么我们决定建立一个模型来确定电影成功的因素,并在此基础上得出一些重要的见解。
数据收集
我们使用 Twitter API 来访问推文。为了获得相关的推文,我们使用了特定的标签。比如电影《爱尔兰人》,我们用了#TheIrishman。一开始,当我们下载推文时,大多数推文的内容都显示“…”。由于旧的 140 个字符的限制,API 自动忽略超过 140 个字符的单词。因此,我们使用“全文”方法来获取完整的文本。使用这种方法,我们获得了所有相关的数据,但是我们仍然不能从历史中收集完整的数据,因为 twitter API 不允许检索超过 7 天的数据。
数据预处理
在将每部电影的日期和推文内容保存到 CSV 文件后,我们使用 NLTK 库清理文本,删除停用词和无意义的词,如“this”、“here”、“I”等。我们还使用词汇化将单词转换成它们的原始格式。最后,我们构建了 N-gram,这样具有相关意义的重要短语就不会被分割成单个无意义的单词。
题目模型分析
主题模型分析是在一组文档中识别主题的无监督过程。我们使用了潜在的狄利克雷分配(LDA)算法,该算法将一个单词包作为一定比例的主题集合。然后,它“重新安排文档内的主题分布和主题内的关键词分布,以获得主题-关键词分布的良好组合”。主题是典型代表的主导关键词的集合,仅仅通过查看关键词,我们就可以确定主题是关于什么的。
人们认为,人们写的每一篇文章,无论是推特还是研究论文,都是由主题和话题组成的。我们想知道人们在推特上谈论一部电影时到底在谈论什么。例如,一个人可能会发微博说她有多崇拜电影《玛琳菲森》中的安吉丽娜·朱莉,但其他人可能会发微博说特效或音乐如何让他们爱上这部电影。通过进行主题模型分析,目的是找出哪些关键词与每部电影高度相关。本质上,人们谈论的这些特定话题可能会影响电影的销售。
我们使用来自八部电影的干净文本作为输入,并期望在模型中看到 8 个主题,每部电影一个,但我们的结果令人惊讶。许多主题相互重叠,这意味着一些电影分享了一个相似的主题。因为我们的数据集来自战争、历史、动画、爱情等混合类型的电影。有些可能有相同类型的相似主题与之相关,许多关键字是多余的。其他一些关键字与输出主题完全不相关。因此,我们决定减少话题的数量。

图 1 -重叠主题
只有 4 个主题(图 2),我们成功地将每个主题分成一个独特的主题。通过选择某个主题,我们还可以知道哪些关键词与电影最相关。

图 2-主题 4 主要与电影《恶魔》和电影推文中使用的关键词有关
预测
在我们通过主题模型获得相关主题和关联关键词后,我们使用 R 库‘gtrends’收集每个主题中某些关键词的 google 趋势。例如,安吉丽娜·朱莉的谷歌趋势与《玛丽莲·梦露》的销量高度相关(图 3)。我们找到了与电影销售趋势相似的关键词,并使用这些关键词作为我们的 ARIMA 模型的约束。
在构建 ARIMA 模型之前,我们使用 ts()方法将所有变量转换成 R 中的时间序列对象。为了建立一个更好的模型,我们将销售时间序列设为平稳。我们成功地从票房网站上收集了所有电影 30 天的销售额。预测超过 30 天的数据对电影行业毫无用处,因为大多数电影在影院上映的时间只有 2-3 个月。因此,我们使用 12 天的数据作为训练集来构建模型,并预测第 3 周的销售额。为了预测电影《玛琳菲森》的销量,我们使用了关键词“安吉丽娜·朱莉”和“迪士尼”。通过使用这种方法,该模型被证明是相当准确的。

图 3-关键字“安吉丽娜·朱莉”的时间序列图和销售额非常相似

图 4 -预测总销售额-红色:预测,黑色:实际
不幸的是,这个预测模型并不是对所有的电影都非常准确。但是我们仍然可以从主题模型中获得一些见解。因为我们已经知道了每部电影的主题,我们可以很容易地说出哪些关键词是流行的,为什么。例如,从下图可以得出结论,在电影玩火的推文中,“bts”被提到了这么多次。因为 BTS 的音乐出现在电影《T2》的《玩火 T3》中。所有这些见解可以为电影的公关团队提供很好的建议,以提高其流行趋势。

图 5 -主题建模结果
结论&建议
我们的模型非常准确地预测了 Maleficent 的销量。不幸的是,由于我们的模型和电影行业本身的限制,用相同的变量和约束来预测一切是不可能的。然而,我们认为每部电影的相关关键词仍然是决定电影受欢迎程度的一个很好的指标。关键词也是电影受欢迎程度的良好标识。比如从电影中途最相关的关键词——‘老兵’和‘历史’,可以说喜欢战争片的人都喜欢这部电影。制作公司可以利用这些见解将他们的促销活动集中在这些主题上,以吸引最相关的观众到影院,并增加电影销售。
参考文献
PyCaret 上的主题建模
数据科学/ Python NLP 片段
PyCaret 自然语言处理模块初学者指南。

Gabriel Gurrola 在 Unsplash 上拍摄的照片
我记得不久前和我老板的老板的一次简短谈话。他说,如果公司里有人从零开始开发人脸识别工具,他不会感到惊讶,因为,我引用他的话,“你猜怎么着?有一个 API 可以做到这一点。”然后他继续说做已经做过的事情而不是仅仅使用它是徒劳的。
这让我深入了解了一名高管是如何思考的。这并不是说他们不关心项目的酷,而是说到底,他们最关心的是项目如何为企业增加价值,更重要的是,项目能多快完成。
在现实世界中,构建原型所需的时间很重要。我们从数据到见解的速度越快,我们就会变得越好。这些帮助我们保持敏捷。
这让我想到了 PyCaret。
PyCaret 是一个开源的,用 Python 编写的低代码机器学习库,允许您在几秒钟内从准备数据到在您选择的笔记本环境中部署模型。
Pycaret 基本上是一些最流行的机器学习库和框架 scikit-learn 和 spaCy 的包装器。以下是 PyCaret 可以做的事情:
- 分类
- 回归
- 使聚集
- 异常检测
- 自然语言处理
- 关联规则挖掘
如果您有兴趣了解传统的 NLP 方法与 PyCaret 的 NLP 模块之间的区别,请查看 Prateek Baghel 的文章:
传统教学法与 PyCaret 教学法的对比分析
towardsdatascience.com](/nlp-classification-in-python-pycaret-approach-vs-the-traditional-approach-602d38d29f06)
自然语言处理
在短短几行代码中,PyCaret 使自然语言处理变得如此简单,几乎是犯罪。与大多数其他模块一样,PyCaret 的 NLP 模块 streamlined pipeline 将从数据到洞察的时间缩短了一半以上。
例如,只有一行,它自动执行文本处理,具有自定义停用词的能力。再添加一两行代码,您就有了一个语言模型。还有另一行,它给你一个适当格式的 plotly 图。最后,添加另一行可以让您选择评估模型。你甚至可以用一行代码来调整模型。
与其告诉你 PyCaret 的所有精彩特性,不如我们做一点展示和讲述会更好。
管道
在这篇文章中,我们将创建一个 NLP 管道,包括以下 6 个步骤:
- 获取数据
- 设置环境
- 创建模型
- 分配模型
- 绘制模型
- 评估模型
我们将对该管道进行端到端的演示,并简要解释相关的功能及其参数。
让我们开始吧。
家政
让我们从安装 PyCaret 开始。如果这是您第一次安装它,只需在您的终端中键入以下内容:
pip install pycaret
但是,如果您有以前安装的 PyCaret 版本,可以使用以下命令进行升级:
pip install —-upgrade pycaret
注意:PyCaret 是一个很大的库,所以下载和安装需要几分钟时间。
我们还需要下载英语语言模型,因为它不包含在 PyCaret 安装中。
python -m spacy download en_core_web_sm
python -m textblob.download_corpora
接下来,让我们启动 Jupyter 笔记本并导入 PyCaret 的 NLP 模块:
导入pycaret.nlp会自动设置您的环境,只执行 NLP 任务。
获取数据
在设置之前,我们需要首先决定如何接收数据。将数据放入管道有两种方法。一种是使用 Pandas 数据框架,另一种是使用简单的文本数据列表。
传递数据帧
上面,我们只是将数据加载到一个数据帧中。
传递列表
上面,我们正在打开文件'list.txt'并读取它。我们将结果列表分配到lines中。
抽样
在本实验的其余部分,我们将只使用 dataframe 将文本数据传递给 NLP 模块的setup()函数。为了方便起见,我们将对数据帧进行采样,只选择一千条推文。
让我们快速浏览一下带有df.head()和df.shape的数据帧。

设置环境
在下面的代码行中,我们将通过调用setup()函数来初始化设置,并将其分配给nlp。
通过data和target,我们告诉 PyCaret 我们想要使用df的'text'列中的值。此外,我们将session_id设置为任意的数字493,这样我们可以一遍又一遍地重复实验,并得到相同的结果。最后,我们添加了custom_stopwords,这样 PyCaret 将在分析中排除指定的单词列表。
注意,如果我们想使用一个列表,我们可以用lines替换df并去掉target = ‘text’,因为一个列表没有 PyCaret 指向的列!
下面是nlp的输出:

上面的输出表确认了我们的会话 id、文档数量(行或记录)和词汇表大小。它还会显示我们是否使用了自定义停用词。
创建模型
下面,我们将通过调用create_model()函数创建模型,并将其分配给lda。该函数已经知道使用我们在setup()中指定的数据集。在我们的例子中,PyCaret 知道我们想要基于df中的'text'创建一个模型。
在上一行中,注意 w param 使用了'lda'作为参数。LDA 代表潜在的狄利克雷分配。我们可以很容易地选择其他类型的模型。
以下是 PyCaret 目前支持的型号列表:
- “lda”:潜在的狄利克雷分配
- 潜在语义索引
- “hdp”:分层狄利克雷过程
- rp ':随机投影
- “nmf”:非负矩阵分解
我鼓励你研究以上模型之间的区别,首先,看看 Lettier 的关于 LDA 的令人敬畏的指南。
在我们开始之前,我做了一个工具(这是源代码),可以在你的浏览器中运行 LDA(非常简洁)。是…
medium.com](https://medium.com/@lettier/how-does-lda-work-ill-explain-using-emoji-108abf40fa7d)
我们使用的下一个参数是num_topics = 6。这告诉 PyCaret 在结果中使用从 0 到 5 的六个主题。如果没有设置 num_topic,缺省值为 4。最后,我们设置multi_core告诉 PyCaret 使用所有可用的 CPU 进行并行处理。这节省了大量的计算时间。
分配模型
通过调用assign_model(),我们将标记我们的数据,这样我们将获得一个数据帧(基于我们的原始数据帧:df),其中包含以下信息的附加列:
- 每个主题的主题百分比值
- 主导话题
- 主导主题的百分比值
让我们来看看df_lda。


绘制模型
调用plot_model()函数将会给我们一些关于频率、分布、极性等等的可视化。plot_model()函数有三个参数:模型、情节和主题数量。model指示 PyCaret 使用什么模型,并且前面必须有一个create_model()函数。topic_num指定可视化将基于哪个主题编号(从 0 到 5)。
PyCarets 提供了各种各样的情节。生成的图形类型将取决于plot参数。以下是当前可用的可视化列表:
- '频率':单词标记频率(默认)
- “分布”:单词分布图
- “二元模型”:二元模型频率图
- “三元模型”:三元模型频率图
- “情绪”:情绪极性图
- “词性”:词频
- “tsne”:t-SNE(3d)维度图
- “主题模型”:主题模型(pyLDAvis)
- “主题分布”:主题推断分布
- “单词云”:单词云
- “umap”:UMAP 维度图









评估模型
评估模型包括调用evaluate_model()函数。它只需要一个参数:要使用的模型。在我们的例子中,存储的模型是在前面的步骤中用create_model()函数创建的lda。
该函数返回用于绘图的可视化用户界面。

瞧,我们完成了!
结论
使用 PyCaret 的 NLP 模块,我们能够在短短几行代码中快速地从获取数据到评估模型。我们讨论了每个步骤中涉及的函数,并检查了这些函数的参数。
感谢您的阅读!PyCaret 的 NLP 模块有更多的特性,我鼓励你阅读他们的文档来进一步熟悉这个模块,甚至整个库!
在下一篇文章中,我将继续探索 PyCaret 的功能。
如果你想了解更多关于我从懒鬼到数据科学家的旅程,请查看下面的文章:
我的无学位数据科学之旅。
towardsdatascience.com](/from-slacker-to-data-scientist-b4f34aa10ea1)
敬请期待!
你可以通过推特或 T2【LinkedIn】联系我。
[1] PyCaret。(2020 年 6 月 4 日)。为什么 PyCaret 。https://pycaret.org/
主题建模与 LDA 和 Quora 问题

图片来源:Unsplash
潜在狄利克雷分配,非负矩阵分解
Quora 用来给问题分配主题的算法是专有的,所以我们不知道他们是如何做到的。然而,这并不妨碍我们用自己的方式去尝试。
- 问题描述
Quora 有所有这些未标记的现有问题,他们需要对它们进行分类,以适应机器学习管道的下一步。
- 识别问题
这是一个无监督的学习问题,我们在 Quora 问题中发现了各种各样的主题。
- 目标
我们的目标是确定主题的数量,并确定每个主题的主题。此外,我测试了我的模型是否可以预测任何新问题的主题。
- 方法
将一个 LDA 和一个 NMF 模型应用到 Quora 问题数据集上,确定主题数量和每个主题的主题。
我已经在 Github 上加载了一个更小的样本数据集,可以随意使用。

来源:Quora
这是这个话题的一个例子,以及它在 Quora 网站上的样子。
数据预处理
启动. py

在文本预处理之前,问题看起来是这样的:
prior_preprocessing.py

图 1
文本预处理期间我们要做什么:
- 小写字母
- 删除停用字词、括号、标点和数字
- 使用空间然后移除“-PRON-”的词条解释。
在文本预处理过程中我们不打算做什么:
- 堵塞物
词干删除一个单词中的最后几个字符,往往会导致不正确的意思和拼写错误,或者使单词无法识别,例如:business → busi,busy → busi,situation → situ。
我们应该尽量不要做太多的文本预处理,因为大多数问题都很短,删除更多的单词有失去意义的风险。
text _ 预处理 _lda.py
电子设计自动化(Electronic Design Automation)
探究问题一般有多长。
问题 _ 长度. py

图 2
关于什么问题。
word_cloud.py

图 3
Unigrams
unigram.py

图 4
二元组
bigram.py

图 5
三元组
三元模型. py

图 6
观察结果 :
- 很多问题都在问“开始的有用技巧……”(我想是开始一份新的职业或新的工作?)
- 很多问题都是关于学习的好方法。
- 很多问题都是询问短期商务旅客的酒店推荐。
- 许多人在询问好邻居或坏邻居。假设他们想搬到一个新的地方?
- 有些人在考虑写传记。
- 似乎有一些重复的问题,例如:短期商务旅客的酒店。检测重复的问题会很有趣,这是另一个时间的主题。
主题建模
- 做主题建模,我们需要的输入是:文档-术语矩阵。单词的顺序不重要。所以,我们称之为“词汇袋”。
- 我们既可以使用 scikit-learn 也可以使用 Gensim 库,该技术被称为“潜在狄利克雷分配”,简称“LDA”。
- 输出是数据中所有问题的主题数量以及每个主题的主题。
让我们更深入地研究文档术语矩阵到底是什么。假设我们总共有三个问题:
1).足球运动员如何保持安全?
2).最讨厌的 NFL 足球队是哪支?
3).谁是最伟大的政治领袖?
这三个问题的文档术语矩阵是:

表 1
每行是一个问题(或文档),每列是一个术语(或单词),如果该文档不包含该术语,我们标记“0”,如果该文档包含该术语一次,我们标记“1”,如果该文档包含该术语两次,我们标记“2”,依此类推。
潜在狄利克雷分配
潜伏 意为隐藏, 狄利克雷 是一种概率分布类型。 潜在的狄利克雷分配 意味着我们试图找到所有的概率分布,它们是隐藏的。
让我们继续我们的例子。我们有四个问题。作为人类,我们确切地知道每个问题是关于什么的。

图 7
第一个问题是关于足球,第三个问题是关于政治,第四个问题是关于政治和足球。当我们将这 4 个问题与 LDA 相匹配时,它会给我们这样的反馈:

图 8
第一个问题是话题 A 的 100%,第三个问题是话题 B 的 100%,最后一个问题是话题 A 和话题 B 的拆分,解读它们是我们人类的工作。
话题 A 中“足球”一词权重最高,其次是“NFL”,再次是“球员”。所以我们可以推断这个话题是关于体育的。
“政治”一词在 B 题中权重最高,其次是“领袖”,再次是“世界”。所以我们可以推断这个话题是关于政治的。如下图所示:
- 话题 A : 40%足球,30% NFL,10%球员……体育**
- 题目 B : 30%政治,20%领袖,10%世界… 政治
然后我们回到原来的问题,下面是题目!

图 9
再深入一点,每个问题都是话题的混合,每个话题都是文字的混合。

图 10
严格来说 :
- 一个问题就是一个话题的概率分布,每个话题就是一个词的概率分布。
- LDA 所做的是,当你用所有这些问题来匹配它时,它会尽力找到最佳的主题组合和最佳的单词组合。
LDA 工作步骤 :
- 我们希望 LDA 学习每个问题中的主题组合以及每个主题中的单词组合。
- 选择我们认为在整个问题数据集中有多少个主题(例如:num_topics = 2)。
- 将每个问题中的每个单词随机分配给两个主题中的一个(例如:上述问题中的单词“足球”被随机分配给类似政治的主题 B)
- 仔细阅读每个问题中的每个单词及其主题。看看 1)该主题在问题中出现的频率,以及 2)该单词在整个主题中出现的频率。根据这些信息,给单词分配一个新的主题(例如:看起来“足球”在主题 B 中不常出现,所以单词“足球”可能应该分配给主题 A)。
- 经历多次这样的迭代。最终,这些主题将开始变得有意义,我们可以解释它们并赋予它们主题。
幸运的是,我们只需要给 LDA 输入,LDA 会为我们做所有这些脏活。

图 11
LDA 关于 983,801 个 Quora 问题
- 我们收到了 983,801 个 Quora 问题。
- 我们希望在整个问题集合中发现隐藏或潜在的主题(例如,技术、政治、科学、体育),并尝试按主题对它们进行分类。
- 选择主题数量(更多主题—更精细)
比如体育,当我们有很多话题的时候,可能会有足球(topic1)、网球(topic2)、曲棍球(topic3)等等。如果我们减少话题的数量,在某个时候,这些与体育相关的话题会自行消失,变成一个话题。像任何无监督学习一样,没有衡量标准,这个比那个好。我们基本上必须为我们自己的用例进行选择。
- 使用各种近似方案运行 LDA,使用不同的方案运行多次,以查看哪种方案最适合特定的用例。
带有 Gensim 的 LDA
我先试了一下 Gensim,有 20 个话题,还有…

图 12
一个好的主题模型很少或者没有重叠,这里绝对不是这样。让我们试试 Scikit-Learn。
带 Scikit 的 LDA 学习
vec_lda.py

图 13
我保留了 LDA 找到的每个主题中出现频率最高的前 20 个单词。这里我们展示的是部分表格:
显示 _ 主题. py

表 2
然后查看每个主题中的热门词汇,手动为每个主题分配主题。这需要一些领域的专业知识和创造力,主要是,我只是用了前 3 或 4 个词作为主题。
topic_theme.py
以下是主题-关键字分配的部分表格。

表 3
要将某个问题归类到某个特定的主题,一个合乎逻辑的方法就是看哪个主题对那个问题的贡献最大,然后分配给它。在下面的过程中,我们将在一系列的数据操作后,为每个问题分配最具主导性的主题。下面的一些代码是从这个教程中借来的。
分配 _ 主题. py

表 4
从上表中可以看出,问题 2、3 和 8 都被分配给了主题 18。让我们目测一下它们是否有意义。

图 14
我们在左边有这 3 个问题,它们被分配给右边的主题,以及该主题中的每个关键词。
我完全同意第一个和第二个问题的作业,不确定第三个问题,可能是因为“穿着谦虚”和“性格”这两个词?
做预测
更准确地说,也许我们应该说一个新问题将如何分配给这 20 个主题中的一个。
我去了 Quora.com的,取了几个流行的问题来测试我们的模型。同样,下面的代码是从这个教程中借来的。
第一个测试问题是“ 你在生活中学到的最重要的经验是什么,你是什么时候学到的 ?”
预测 _ 话题. py

图 15
我们的 LDA 模型能够找到这个新问题中的主题组合,以及每个主题中的单词组合。这个新问题已经被分配到题目中了,题目中最重要的关键词有“ 工作、学习、研究 ”等等,而这个题目的主题是“ 工作/学习/技能提升 ”。我同意。
第二个测试问题是“ 就像拉里·佩奇和谢尔盖·布林用一个更好的搜索引擎取代了他们的现任一样,两个计算机科学博士生创造一个取代谷歌的搜索引擎的可能性有多大?谷歌对这种可能性 有多脆弱?”

图 16
用同样的方法,这个新问题被分配到以“ 国家、学生、计算机、科学 ”等为顶级关键词的题目中。对于这个新问题,“计算机”和“项目”这两个词的权重最高。而题目的主题是“ 学生/互联网/计算机/科学/科研 ”。我也同意。
非负矩阵分解(NMF)
- 一系列线性代数算法,用于识别以非负矩阵表示的数据中的潜在结构。
- NMF 可以应用于主题建模,其中输入是术语-文档矩阵,通常是 TF-IDF 标准化的。
- 输入:术语-文档矩阵,主题数量。
- 输出:原始的 n 个单词乘以 k 个主题以及 m 个原始文档乘以相同的 k 个主题的两个非负矩阵。
- 基本上我们准备用线性代数进行话题建模。

如上所示,我们将术语-文档矩阵分解为两个矩阵,第一个矩阵包含每个主题和其中的术语,第二个矩阵包含每个文档和其中的主题。
再用我们的足球和政治举例:

图 17
左边是 3 个问题,右边是这 3 个问题的术语文档矩阵。我们选择 k=2 个话题。

图 18
经过分解,我们得到了两个非负矩阵,一个由 k 个主题组成,另一个由 m 个原始文档组成。
文本预处理部分与 LDA 模型相似,我只为 NMF 模型保留了名词,只是为了看看是否有什么不同。
我们可以看到,与 LDA 模型相比,每个关键词在每个主题中是如何分配的,主题是如何组织的。
nmf_topic.py

表 5
比如一个题目,通过查看每个题目中的所有关键词,除了都以“ph”开头之外,我似乎找不到彼此之间有什么关系。所以,我把“单词从 ph 开始”作为这个题目的主题。
进行预测
使用同样的问题,我们将会看到 NMF 模型如何将它分配到这 20 个主题中的一个。
问题 1:“你人生中学到的最重要的一课是什么,是什么时候学到的?”**

图 19
问题 1 已分配到以“ 人生、变化、瞬间、意义、经历 ”等为顶级关键词的题目,该题目主题为“ 人生/经历/爱情/目的 ”。我同意!
问题 2:“就像拉里·佩奇和谢尔盖·布林用一个更好的搜索引擎推翻了他们的现任一样,两个计算机科学博士生创造一个推翻谷歌的搜索引擎的可能性有多大?谷歌在这种可能性面前有多脆弱?”**

图 20
问题 2 已经被分配到具有类似于“ 学校、学生、学院、大学、工程 ”等顶部关键词的主题,并且该主题的主题是“ 学校/学生/学院/大学 ”。我找不到更好的方法。
这个帖子的 Jupyter 笔记本可以在这里找到,在这里找到。享受这周剩下的时光。
参考资料:
* [## LDA -如何网格搜索最佳主题模型?(带有 python 中的示例)
Python 的 Scikit Learn 提供了一个方便的接口,用于使用潜在的 Dirichlet 等算法进行主题建模。
www.machinelearningplus.com](https://www.machinelearningplus.com/nlp/topic-modeling-python-sklearn-examples/)
https://learning . oreilly . com/videos/oreilly-strata-data/9781492050681/9781492050681-video 328137
http://www.cs.columbia.edu/~blei/papers/Blei2012.pdf*
纽约时报文章评论部分的主题建模

使用潜在狄利克雷分配(LDA)和非负矩阵分解(NMF)主题建模方法
每次我读《纽约时报》的文章,我通常喜欢通读一些评论,以便对一个故事有更好的看法。然而,有时有成千上万的评论,我没有时间通读它们,我想知道主要讨论点的要点。
建立一个快速的主题建模脚本可以帮助我抓住人们在文章评论部分讨论的关键主题的要点。
注意:在本教程中,我们将使用潜在狄利克雷分配(LDA)和非负矩阵分解(NMF)方法。我不会深入解释它是如何工作的,因为有许多关于 medium 的优秀文章在讨论这个问题。严格来说,这是一个编程教程,可以帮助您快速设置主题建模代码。
步骤 1:收集意见
我将分析这篇纽约时报文章的评论部分。
我上周发表了一篇关于如何从《纽约时报》的一篇文章中收集评论的中型文章。在继续本教程之前,请先遵循该教程。
[## 如何从《纽约时报》的任何一篇文章中收集对熊猫数据框架的评论
《纽约时报》( NYT)最精彩的部分是他们对文章积极且高度节制的评论部分。
towardsdatascience.com](/how-to-collect-comments-from-any-new-york-times-article-to-a-pandas-dataframe-a595ec6a1ddf)
第二步:设置事物
#Importing Required Plugins
import pandas as pd
import numpy as np#load csv file to Pandas Dataframe
df = pd.read_csv('nyt_comments.csv', index_col = 0)
如果你按照我的教程从这个中型职位,你的数据帧应该看起来像这样。

保存 NYT 评论的数据帧示例
步骤 3:预处理文本数据。
对于主题建模,我们使用的数据类型是文本数据,它需要某种形式的预处理,以使结果更加清晰。
在预处理阶段,通常:
- 将所有单词设为小写
- 删除标点符号
- 删除停用词(and、the 等。)
- 把单词还原成它们的词根形式,这叫做词干化。
注意:我在下面的脚本中使用了 SnowballStemmer,但是你可以使用任何其他的词干分析器。
步骤 4:使用 Sklearn 的 tfidf 矢量器将我们的文本数据转换成词频逆文档矩阵
TF–IDF 值与单词在文档中出现的次数成比例增加,并由语料库中包含该单词的文档数抵消,这有助于调整某些单词通常更频繁出现的事实。——维基百科
注意:您可以在我们的 TfidfVectorizer 上将 min_df 设置为您喜欢的任何值,但是我选择了 0.05,因为它似乎对我的数据运行很有效。
步骤 5:使用 LDA 进行主题建模

LDA 模型生成的 15 个主题的输出。
在这篇文章的评论部分,我们可以清楚地发现一些有趣的话题。
然而,我想知道如果我们采用前 25 个单词而不是前 15 个,我们是否可以获得更多一点的上下文。

输出前 25 个单词的 15 个主题
就我们对各种主题的理解而言,这要好得多。
我们可以采取的另一个步骤是增加或减少我们的模型搜索的主题数量,而不仅仅是增加热门词的显示。
这就是我们需要创造性思维的地方,在分析我们模型结果的输入中。
但是,让我们快速了解一下当我们将生成的主题数量减少到 10 个时会发生什么。

LDA 模型的 10 个主题的输出。
看起来生成的主题越少,在文章评论部分区分不同主题的效果就越好。
然而,有些主题并不真正有意义,或者它告诉我们同样的事情。这可能是因为这些评论已经在讨论一篇特定的文章,可以确定的主题可能有限,并且许多相同的词被重复使用。
步骤 6:用 pyLDAvis 插件可视化 LDA 模型生成的主题
pyLDAvis 插件生成了一个交互式的图,在我看来,这让我更容易分析生成的各种主题以及我的 LDA 模型的表现。

pyLDAvis 的互动情节
第七步:用 NMF 进行主题建模
老实说,设置并没有完全不同,完全一样。但是,这个算法会吐出不同的结果。

NMF 模型的 5 个主题的输出。
进一步减少主题的数量似乎可以更好地区分评论中讨论的各种主题。
注意:不幸的是,您不能使用 pyLDAvis 插件来可视化 NMF 模型的主题。
好了,这就是你如何建立一个主题建模的快速脚本,以确定 NYT 文章评论部分的各种讨论主题。
用 BERT 进行主题建模

图片由作者提供。
利用 BERT 和 TF-IDF 创建易于解释的主题。
当一个产品负责人来找我做一些基于 NLP 的分析时,我通常会被问到以下问题:
“在这些文档中可以经常找到哪个主题?”
由于没有任何类别或标签,我被迫寻找无监督的技术来提取这些主题,即主题建模。
虽然主题模型如 LDA 和 NMF 已经被证明是很好的起点,但我总是觉得通过超参数调整来创建有意义的主题需要相当大的努力。
此外,我想使用基于 transformer 的模型,如 BERT ,因为它们在过去几年的各种 NLP 任务中显示了惊人的结果。预训练模型特别有用,因为它们应该包含更准确的单词和句子的表示。
几周前,我看到了这个名为 Top2Vec *的伟大项目,它利用文档和单词嵌入来创建易于解释的主题。我开始查看代码来概括 Top2Vec,以便它可以用于预先训练的 transformer 模型。
Doc2Vec 的最大优点是,得到的文档和单词嵌入共同嵌入在同一个空间中,这使得文档嵌入可以由邻近的单词嵌入来表示。不幸的是,这被证明是困难的,因为 BERT 嵌入是基于令牌的,不一定占用相同的空间**。
相反,我决定想出一个不同的算法,可以使用伯特和🤗变压器嵌入。结果是 BERTopic,一种使用最先进的嵌入技术生成主题的算法。
这篇文章的主题不是 BERTopic 的使用,而是一个关于如何使用 BERT 创建你自己的主题模型的教程。
论文 *:安杰洛夫 D. (2020)。 Top2Vec:主题的分布式表示。 arXiv 预印本 arXiv:2008.09470 。
注意* *:虽然你可以让它们占据相同的空间,但是由于 BERT 的上下文特性,单词嵌入的结果大小相当大。此外,生成的句子或文档嵌入有可能会降低质量。
1.数据和数据包
对于这个例子,我们使用著名的20 Newsgroups数据集,它包含大约 18000 篇关于 20 个主题的新闻组帖子。使用 Scikit-Learn,我们可以快速下载和准备数据:
如果你想加速训练,你可以选择子集train,因为它会减少你提取的文章数量。
注意:如果你想在段落层次而不是在整个文档上应用主题建模,我建议在创建嵌入之前分割你的数据。
2.嵌入
我们要做的第一步是将文档转换成数字数据。我们使用 BERT 来实现这个目的,因为它基于单词的上下文提取不同的嵌入。不仅如此,还有许多预训练的模型可供使用。
如何为文档生成 BERT 嵌入取决于您。然而,我更喜欢使用sentence-transformers包,因为最终的嵌入已经证明是高质量的,并且通常对于文档级的嵌入工作得很好。
在生成文档嵌入之前,用pip install sentence-transformers安装包。如果你在安装这个包时遇到问题,那么首先安装 Pytorch 是值得的。
然后,运行以下代码将文档转换为 512 维向量:
我们使用 Distilbert ,因为它在速度和性能之间提供了一个很好的平衡。包装中有几款多语言型号供您使用。
注意:由于 transformer 型号有令牌限制,您在输入大型文档时可能会遇到一些错误。在这种情况下,您可以考虑将文档分成段落。
3.使聚集
我们希望确保具有相似主题的文档被聚集在一起,以便我们可以在这些集群中找到主题。在这样做之前,我们首先需要降低嵌入的维数,因为许多聚类算法处理高维数据的能力很差。
UMAP
在为数不多的降维算法中, UMAP 可以说是性能最好的,因为它在较低的维度中保留了高维局部结构的重要部分。
在我们降低文档嵌入的维度之前,安装带有pip install umap-learn的包。我们将维数减少到 5,同时保持局部邻域的大小为 15。您可以使用这些值来优化您的主题创建。请注意,过低的维度会导致信息丢失,而过高的维度会导致较差的聚类结果。
HDBSAN
在将文档嵌入的维数减少到 5 后,我们可以用 HDBSCAN 对文档进行聚类。HDBSCAN 是一种基于密度的算法,非常适合 UMAP,因为 UMAP 即使在低维空间中也保留了大量的局部结构。此外,HDBSCAN 不会将数据点强制归类,因为它认为它们是异常值。
用pip install hdbscan安装软件包,然后创建集群:
太好了!我们现在已经将相似的文档聚集在一起,这些文档应该代表它们所包含的主题。为了可视化得到的聚类,我们可以进一步将维数减少到 2,并将异常值可视化为灰点:

通过将判决嵌入减少到二维空间来可视化主题。图片由作者提供。
由于生成的主题数量众多(约 55 个),很难直观显示各个集群。然而,我们可以看到,即使在二维空间中,一些局部结构仍然存在。
注意:如果你使用的聚类算法可以处理高维数据,比如基于余弦的 k-Means,你可以跳过降维步骤。
4.话题创作
我们想从我们生成的聚类中知道的是,是什么使一个聚类基于它们的内容而不同于另一个?
我们如何从集群文档中获取主题?
为了解决这个问题,我想到了 TF-IDF 的一个基于类的变体( c-TF-IDF ),它允许我提取每组文档与其他文档相比的独特之处。
该方法背后的直觉如下。当您像往常一样对一组文档应用 TF-IDF 时,您基本上是在比较文档之间单词的重要性。
如果我们将单个类别(例如,一个集群)中的所有文档视为单个文档然后应用 TF-IDF 会怎么样?每个类别的结果将是一个非常长的文档,并且产生的 TF-IDF 分数将展示主题中的重要单词。
c-TF-IDF
为了创建这个基于类的 TF-IDF 分数,我们需要首先为每个文档集群创建一个文档:
然后,我们应用基于类的 TF-IDF:

基于类的 TF-IDF,通过连接类内的文档来实现。图片由作者提供。
其中为每个类别**i**提取每个单词**t**的频率并除以单词总数**w**。这个动作可以看作是对课堂上常用词的一种正则化形式。接下来,未连接的文档总数**m**除以所有类别中单词**t**的总频率**n**。
现在,我们对一个聚类中的每个单词都有一个单独的重要性值,它可以用来创建主题。如果我们在每个聚类中取前 10 个最重要的单词,那么我们将得到一个聚类的良好表示,从而得到一个主题。
主题表征
为了创建主题表示,我们根据每个主题的 c-TF-IDF 得分,选取前 20 个单词。分数越高,越能代表其主题,因为分数是信息密度的代表。
我们可以使用topic_sizes来查看某些主题出现的频率:

图片由作者提供。
主题名-1指的是没有分配任何主题的所有文档。HDBSCAN 的优点在于,并非所有文档都被强制指向某个集群。如果找不到聚类,那么它就是一个离群值。
我们可以看到,主题 7、43、12 和 41 是我们可以创建的最大集群。要查看属于这些主题的单词,我们可以简单地使用字典top_n_words来访问这些主题:

图片由作者提供。
看看最大的四个主题,我会说这些似乎很好地代表了容易解释的主题!
我可以把体育、计算机、太空和宗教看作是从数据中提取出来的清晰的主题。
5.话题缩减
根据数据集的不同,您可能会获得数百个已创建的主题!您可以调整 HDBSCAN 的参数,以便通过其min_cluster_size参数获得更少的主题,但是它不允许您指定集群的确切数量。
Top2Vec 使用的一个巧妙技巧是通过合并彼此最相似的主题向量来减少主题的数量。
我们可以使用类似的技术,通过比较主题间的 c-TF-IDF 向量,合并最相似的向量,最后重新计算c-TF-IDF 向量来更新我们主题的表示:
上面,我们把最不常见的话题和最相似的话题合并。通过重复这 19 次,我们将主题数量从 56 减少到 36 !
注:我们可以跳过这条流水线的重算部分,以加快话题缩减步骤。然而,重新计算 c-TF-IDF 向量更准确,因为这将更好地表示新生成的主题内容。你可以尝试这样做,例如,每 n 步更新一次,这样既能加快进程,又能保持良好的主题表现。
提示:您可以使用本文描述的方法(或者简单地使用 BERTopic )来创建句子级嵌入。这样做的主要优点是可以查看单个文档中主题的分布。
感谢您的阅读!
如果你像我一样,对人工智能、数据科学或心理学充满热情,请随时在 LinkedIn 上添加我,或者在 Twitter 上关注我。
本文中的所有示例和代码都可以在这里找到:
BERTopic 是一种主题建模技术,它利用 BERT 嵌入和 c-TF-IDF 来创建密集的集群,从而允许…
github.com](https://github.com/MaartenGr/BERTopic)
使用潜在狄利克雷分配(LDA)的主题建模教程
这是一本实用指南,包含经过实践检验的 Python 代码。找到人们在推特上谈论的内容。

来源:杰夫·克拉克的在线推特话题浏览器生成的图片
对内容好奇?感觉迷失在无数的帖子、推文、评论、文章、页面、文档中?寻找人们写的东西?你并不孤单。
在本教程中,我提供了一个实用的指南,其中包含经过实践检验的 Python 代码,用于发现文本或文档集合中出现的抽象主题。
我们将对一组推文应用潜在狄利克雷分配(LDA ),并将它们分成主题。我们开始吧!
推特数据
我们将处理来自@realDonaldTrump 推特账户的推文。该数据集包含该账户自 2009 年 5 月 4 日以来的所有推文。
数据集来自 http://www.trumptwitterarchive.com/archive。下面是原始档案的摘录。

数据预处理
对文本进行预处理是很重要的,因为语言在各个层面都是模糊的:词汇、短语、语义。我们将推文全部小写,并删除了的停用词。它们是常用词,不会给推文增加重要意义。以下是自然语言工具包(NLTK)中的停用词示例。

鉴于推文的性质,我们要小心使用标点符号和术语,如 RT (用于转发推文)和 VIA (用于提及原作者),它们不在默认的英语停用词表中。我们还想删除推文末尾的网址。
我们也标记我们的推文。记号化器的工作原理类似于正则表达式,用于将 tweets 分成单词列表。下面我们提供了预处理推文的完整代码。

一袋单词
当我们对文本分类感兴趣时,根据主题分类,我们通常不想看单词的顺序模式。相反,我们会将文本表示为一个单词包,就好像它是一组无序的单词,同时忽略它们在文本中的原始位置,只保留它们的频率。你可以在我们下面的文章中了解更多关于自然语言处理的知识。
理解书面单词:温习 Word2vec、GloVe、TF-IDF、单词袋、N-grams、1-hot 编码…
towardsdatascience.com](/representing-text-in-natural-language-processing-1eead30e57d8)
最常见的单词及其计数如下。

寻找主题的数量
潜在狄利克雷分配(LDA) 是从词袋计数到更低维度的主题空间的概率变换。推文被视为主题的分布。反过来,主题由词汇表中所有单词的分布来表示。但是我们不知道语料库中出现的主题数量以及属于每个主题的 tweets。使用 LDA,我们希望将 tweets 到主题的分配视为一个随机变量,它是根据手头的数据估计的。

来源:马克·格利克曼(哈佛大学 IACS 分校)
为 LDA 寻找合适数量的主题是一门艺术。主题连贯技术通常比困惑技术更受青睐。对于连贯性,我们通过测量高得分单词之间的语义相似度来量化主题的连贯性。这就引出了更人性化的话题。该技术选择每个主题中出现频率最高的单词。然后,它计算并汇总每个单词的所有成对得分(UMass ),以计算特定主题的一致性得分。
下面,我们将一系列用不同数量的主题训练的模型的每个主题的平均一致性分数可视化。平均分稳定的主题数量,是我们正在寻找的最佳点。因此,我们对主题数量的最佳猜测是 6 个左右。我们应该考虑到,通常情况下,包含非常短的文档(在我们的例子中是 tweets)的语料库比包含较长文档的语料库更难应用于连贯模型。

运行 LDA
现在,我们可以使用通过上述分析找到的最优值对文本运行 LDA。LDA 是一种生成方法,其中对于每个主题,模型模拟单词出现的概率以及主题在文档中的概率。每个主题的前 10 个单词如下所示。

虽然题目的合理性值得怀疑,但我们可以看到下面有意义的匹配。主题 0 涉及中国、朝鲜和美国领导人之间的会晤。话题 1 似乎与联邦调查局对俄罗斯干涉上届总统选举的调查有关。话题 4 好像是关于边境安全和修建边境墙的。
结论
我们展示了统计建模如何帮助发现人们在推特上谈论什么。本文提供的代码可以推广到许多其他任务,旨在发现文档集合中出现的抽象主题。
一些参考资料:
D.布莱,阿宁和乔丹。潜在狄利克雷分配。机器学习研究杂志,3:993–1022,2003 年 1 月。d .布雷和 j .拉弗蒂。主题模型。编辑,文本挖掘:理论与应用。泰勒和弗朗西斯,2009 年。
B .陈,x .陈,andW。邢。学习分析和知识会议的“Twitter 考古学”。《第五届学习分析和知识国际会议论文集》(第 340-349 页)。纽约州纽约市,2015 年。
感谢您的阅读。期待您的反馈或问题。
亚马逊评论的自然语言处理主题建模
Python 在潜在狄利克雷分配中的应用

来源: Arfa Adam ,Via: Shutterstock
主题建模是另一种流行的文本分析技术。主题建模的最终目标是在评论中找到主题,并发现隐藏的主题。语料库中的每个文档将由至少一个主题组成,如果不是多个主题的话。
在这一部分,我将介绍潜在狄利克雷分配(LDA) 的结果,这是众多主题建模技术之一。这是一种无监督的分类方法。当我们有一个大的文本,不知道从哪里开始,那么我们可以应用主题建模,可以看到什么样的群体正在出现。LDA 是专门为文本数据设计的。
要使用主题建模技术,您需要提供:
- 文档术语矩阵
- 您希望算法选取的主题数。
在主题建模中,我会创建不同的模型并进行比较。最终我会选择最有意义的话题模型。
如何使用潜在狄利克雷分配(LDA)?
在这里,我不会涉及 LDA 的数学基础。我将只讨论如何解释 LDA 主题建模的结果。
在 LDA 主题建模过程中,我们创建了许多不同的主题组。作为研究人员,我们是决定输出中组数的人。然而,我们不知道什么是最佳组数。因此,我们将获得不同数量的组。然后,我们检查和比较主题模型,并决定哪个主题模型更有意义,最有意义,在模型中有最清晰的区别。然后在所有的题目组中选出最有意义的组(模型)。
必须注意的是,LDA 的性质是主观的。对于选择最有意义的话题组,不同的人可能会得出不同的结论。我们正在寻找最合理的主题组。来自不同背景、不同领域专业知识的人可能不会在大多数合理的主题组上达成一致。
LDA 是一种无监督聚类方法。当我们在谈论无监督聚类方法时,我们需要提到 K-Means 聚类。K-Means 聚类是最著名的无监督聚类方法之一。它在很多情况下都非常实用和有用,并且已经用于文本挖掘很多年了。与 K-means 聚类(其中每个单词只能属于一个聚类(硬聚类))相反,LDA 允许“模糊”成员资格(软聚类)。软集群允许集群之间重叠,而在硬集群中,集群是互斥的。这是什么意思?在 LDA 中,一个单词可以属于多个组,而这在 K-Means 聚类中是不可能的。在 LDA 中,这种权衡使得更容易找到单词之间的相似之处。然而,这种软聚类使得很难获得不同的组,因为相同的单词可能出现在不同的组中。在我们进一步的分析中,我们将会遇到这个缺点。
一旦应用了主题建模技术,研究人员作为人的工作就是解释结果,看看每个主题中的单词组合是否有意义。如果它们没有意义,我们可以尝试改变主题的数量、文档术语矩阵中的术语、模型参数,甚至尝试不同的模型。
数据准备
关于我使用的数据的简要信息:本研究使用的数据是从 Kaggle 下载的。是斯坦福网络分析项目上传的。原始数据来自 J. McAuley 和 J. Leskovec (2013)对“从业余爱好者到行家:通过在线评论对用户专业知识的演变建模”的研究。这个数据集由来自亚马逊的美食评论组成。该数据包括了从 1999 年到 2012 年的所有 568,454 篇评论。评论包括产品和用户信息、评级和纯文本评论。
在这项研究中,我将关注亚马逊上的“好评”。我将“好评”定义为拥有 4 星或 5 星客户评价(满分 5 分)的评价。换句话说,如果一个亚马逊评论是 4 星或 5 星,在这项研究中它被称为“好评论”。1、2、3 星的评论被贴上‘差评’的标签。
数据准备是一个关键的部分,因为如果我们不能正确地准备数据,我们就不能进行主题建模。在这里,我不会深究细节,因为数据准备不是本次研究的重点。然而,准备花一些时间在这里,以防你有问题。如果您调整我在这里为您自己的数据集提供的代码,我希望您不会有任何问题。
一个编辑和警告 : 如果你想复制这项工作,请在我的 Github 上的 Colab 笔记本 中跟随/仔细检查,因为这里有几个丢失的变量/定义会阻止这个过程。
让我们从检查数据的列数和行数开始:
df.shape
(392384,19)-我的数据集有 392,384 条评论。
对于许多家用电脑来说,如此多的评论是很难处理的。因此,我将只使用 10,000 条评论。不幸的是,如果没有超级计算机,我们就无法使用所有的评论。
#Taking only first 10000 Good Reviews from the dataset.
df_good_reviews= df.loc[df.Good_reviews ==1][0:10000]
现在,数据准备的下一步是计数矢量器:
# Create document-term matrix
from sklearn.feature_extraction import text
from sklearn.feature_extraction.text import CountVectorizercv = CountVectorizer()
data_cv = cv.fit_transform(df_good_reviews.Text)
data_cv.shape

计数后数据的形状矢量器
提取数据以创建术语-文档矩阵
# Pickle it
import pickle
pickle.dump(cv, open("cv_stop.pkl", "wb"))
data_stop.to_pickle("dtm_stop.pkl") #saving the pickled datadata = pd.read_pickle('dtm_stop.pkl')
data
酸洗数据后,我们获得了一个广泛的字典:

现在,是时候创建术语文档矩阵了。该术语-文档矩阵数据将用于生成主题建模。这就是为什么它对这项研究至关重要。
# One of the required inputs is a term-document matrix
tdm = data.transpose()
tdm.head()

创建术语-文档矩阵后的数据
# We're going to put the term-document matrix into a new gensim format, from df --> sparse matrix --> gensim corpussparse_counts = scipy.sparse.csr_matrix(tdm)
corpus = matutils.Sparse2Corpus(sparse_counts)# Gensim also requires dictionary of the all terms and their respective location in the term-document matrixcv = pickle.load(open("cv_stop.pkl", "rb"))
id2word = dict((v, k) for k, v in cv.vocabulary_.items())
让我们开始创建主题模型吧!
使用 LDA 构建主题模型
有许多方法可以创建主题模型。通过根据特定标准过滤文本,我们可以获得不同的主题组。在本研究中,我们将使用以下方法创建主题模型:
- 所有文本数据
- 仅文本中的名词
- 只有名词和形容词
主题建模—尝试 1(使用所有复习数据)
作为开始,我们正在利用我们所有的评论。在此过程中不应用文本过滤。
lda = models.LdaModel(corpus=corpus, id2word=id2word, num_topics=2, passes=10)
lda.print_topics()
发现了两组话题:
[(0,' 0.020* "咖啡"+ 0.011* "喜欢"+ 0.010* "茶"+ 0.010* "味道"+ 0.009* "好"+ 0.009* "味道"+ 0.007* "一个"+ 0.007* "很棒"+ 0.006* "用"+ 0.006* "杯子"'),
(1,' 0.010* "很棒"+ 0.009* "喜欢"+ 0.009* "好"+ 0.007* "爱"+ 0.007* "美食"+ 0.007* "一个"+ 0.007* "产品"+ 0.005* "味道"+ 0.005* "得到"+ 0.005* "亚马逊" ')]
我将如何处理这个结果?此时,我们可以检查这两个主题组,并检查它们是否是不同的组。我们不期望一组中的所有单词都必须相关。我们在寻找话题组的总趋势。考虑到以上两个群体,很难在那里看到一个清晰的截然不同的群体。这是我的看法。如果你认为实际上有两个离散的群体,并且你能证明它是正当的,那么你是安全的。
记住,我说过 LDA 是一个软聚类模型。在这里,我们看到“like”这个词在两组中都出现了。这是正常的,因为在软聚类模型中,一个单词可以同时出现在不同的组中。
我们不需要强迫自己给上述模型赋予意义。我们可以继续前进。让我们创建更多的主题模型。
与 2 主题模型相似,我们将创建 3 个和 4 个小组。
# LDA for num_topics = 3
lda = models.LdaModel(corpus=corpus, id2word=id2word, num_topics=3, passes=10)
lda.print_topics()# LDA for num_topics = 4
lda = models.LdaModel(corpus=corpus, id2word=id2word, num_topics=4, passes=10)
lda.print_topics()
所有结果见表 1(下表)。此时,我们应该检查这些组,并尝试找到最有意义的组。通过查看表 1,可以说“用 2 个主题建模”最有意义。第一组是关于饮料,第二组是关于反应。随意得出和我不同的结论!目前,这将停留在这里,不会进一步,因为我们将创建 6 个以上的主题模型。得到所有结果后,我可以更仔细地检查输出。在产生进一步的主题模型后,我们将重新考虑表 1。

表 1:使用所有文本数据的主题建模
主题建模—尝试 2(仅名词):在此步骤中,通过使用 LDA 方法,仅名词将用于创建主题。同样,我们的目的是发现评论中隐藏的模式。现在,我们只是试图用不同的标准来探索。
与上一步类似,我们将使用 2、3 和 4 个主题组运行 LDA。
import nltk
from nltk.corpus import stopwords
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')
import string
from nltk import word_tokenize, pos_tag
让我们创建一个从一串文本中提取名词的函数:
from nltk import word_tokenize, pos_tagdef nouns(text):
'''Given a string of text, tokenize the text and pull out only the nouns.'''
is_noun = lambda pos: pos[:2] == 'NN'
tokenized = word_tokenize(text)
all_nouns = [word for (word, pos) in pos_tag(tokenized) if is_noun(pos)]
return ' '.join(all_nouns)#if this code doesn't work on you, it's probably indentaion mistake coming from Medium writing format.
让我们将这个定义的名词函数应用到我们的亚马逊评论文本数据:
data_nouns = pd.DataFrame(df_good_reviews.Text.apply(nouns))
data_nouns

仅使用名词创建新的文档术语矩阵:
from sklearn.feature_extraction import text
from sklearn.feature_extraction.text import CountVectorizer# Re-add the additional stop words since we are recreating the document-term matrixadd_stop_words = ['like', 'im', 'know', 'just', 'dont', 'thats', 'right', 'people','youre', 'got', 'gonna', 'time', 'think', 'yeah', 'said']stop_words = text.ENGLISH_STOP_WORDS.union(add_stop_words) # Recreate a document-term matrix with only nouns
cvn = CountVectorizer(stop_words=stop_words)
data_cvn = cvn.fit_transform(data_nouns.Text)data_dtmn = pd.DataFrame(data_cvn.toarray(), columns=cvn.get_feature_names())data_dtmn.index = data_nouns.index
data_dtmn
创建 gensim 语料库:
corpusn=matutils.Sparse2Corpus(scipy.sparse.csr_matrix(data_dtmn.transpose()))# Create the vocabulary dictionaryid2wordn = dict((v, k) for k, v in cvn.vocabulary_.items())
⚫:让我们从两个话题开始
ldan = models.LdaModel(corpus=corpusn, num_topics=2, id2word=id2wordn, passes=10)ldan.print_topics()
带 3 个主题的⚫ LDA
ldan = models.LdaModel(corpus=corpusn, num_topics=3, id2word=id2wordn, passes=10)ldan.print_topics()
⚫ LDA 有 4 个主题
ldan = models.LdaModel(corpus=corpusn, num_topics=4, id2word=id2wordn, passes=10)ldan.print_topics()
表 2 是仅使用名词的 LDA 主题建模尝试的输出。在这一点上,我们再次需要简要地检查主题,并试图找到一个具有不同主题组的模型。同样,仍然不需要花费太多时间,因为我们仍然会产生更多的主题模型。

表 2:仅使用名词的主题建模
对我来说,有三组的主题模型是有意义的。它有这些组:
- 宠物物品
- 饼干和小吃
- 饮料
人和人能得出不同的结论是完全正常的。
主题建模——尝试 3(名词和形容词):在此步骤中,通过使用 LDA 方法,仅使用名词和形容词来创建主题。
让我们为此准备数据:
from nltk.corpus import stopwords
import nltk
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')
import string
from nltk import word_tokenize, pos_tag
让我们定义一个只给出名词或形容词的函数:
def nouns_adj(text):
'''Given a string of text, tokenize the text and pull out only the nouns and adjectives.''' is_noun_adj = lambda pos: pos[:2] == 'NN' or pos[:2] == 'JJ'
tokenized = word_tokenize(text)
nouns_adj = [word for (word, pos) in pos_tag(tokenized) if is_noun_adj(pos)]
return ' '.join(nouns_adj)#if this code doesn't work on you, it's probably indentaion mistake coming from Medium writing format.
让我们用名词/形容词过滤器检查亚马逊评论数据:
data_nouns_adj = pd.DataFrame(df_good_reviews.Text.apply(nouns_adj))
data_nouns_adj

我们可以看到,这里只有名词和形容词。现在,我们将要求 LDA 通过使用我们数据集的过滤版本来创建主题。
让我们为 LDA 准备数据:
# Create a new document-term matrix using only nouns and adjectives, also remove common words with max_df
cvna = CountVectorizer(max_df=.8) #, max_df is used for removing data values that appear too frequently, also known as "corpus-specific stop words".
# For example, max_df=.8 means "It ignores terms that appear in more than 80% of the documents". data_cvna = cvna.fit_transform(data_nouns_adj.Text)
data_dtmna = pd.DataFrame(data_cvna.toarray(), columns=cvna.get_feature_names())data_dtmna.index = data_nouns_adj.index
data_dtmna
创建 gensim 语料库:
corpusna=matutils.Sparse2Corpus(scipy.sparse.csr_matrix(data_dtmna.transpose()))# Create the vocabulary dictionary
id2wordna = dict((v, k) for k, v in cvna.vocabulary_.items())
我们现在可以管理 LDA 了。
⚫:让我们从两个话题开始
ldana = models.LdaModel(corpus=corpusna, num_topics=2, id2word=id2wordna, passes=10)
ldana.print_topics()
⚫:让我们试试 3 个话题
ldana = models.LdaModel(corpus=corpusna, num_topics=3, id2word=id2wordna, passes=10)
ldana.print_topics()
⚫:让我们试试 4 个话题
ldana = models.LdaModel(corpus=corpusna, num_topics=4, id2word=id2wordna, passes=10)
ldana.print_topics()
表 3 是仅使用名词或形容词的 LDA 主题建模尝试的输出。在这一点上,我们再次需要检查主题,并检查是否有任何主题组有意义。

表 3:仅使用名词和形容词的主题建模
评估结果
现在,在最后阶段,必须一起评估表 1、表 2 和表 3。总之,我们创建了 9 个主题模型。在这一点上,我们需要问自己,哪一组更有意义?’。现在,是时候关注和检查主题了。哪些群体有意义?如果没有有意义的组,我们需要返回数据进行数据清洗,更改参数,或者使用不同的过滤器和模型。这是一个递归过程。
在 9 个主题模型中,只有名词,3 主题组对我来说最有意义(表 4)。我在这里看到了三个不同的类别:(1)宠物用品,(2)饼干和小吃,以及(3)饮料。再一次,另一个人可以找到更有意义的不同主题模型是完全正常的。

表 4:最有意义的话题-名词只有三个话题
请记住,这个数据集只包含食品评论。所以,看到这些群体与食物有关是很正常的。
所以,让我们把它拉下来,再进行一些迭代,得到更多微调的主题。3 主题(只有名词)对我来说是最有意义的模型。因此,我将通过将迭代次数从 10 次增加到 80 次来进一步微调这个主题模型。
# Fine-tuned LDA with topics = 3ldan = models.LdaModel(corpus=corpusn, num_topics=3, id2word=id2wordn, passes=80)ldan.print_topics()

表 5:带有微调参数的最终主题模型
在上表中,我们看到与表 4 相似的组,只是顺序不同。通过使用 LDA 方法考虑主题分析的所有步骤,可以得出结论,优秀的亚马逊评论可以分为三个主要主题:(1)饮料,(2)宠物用品,以及(3)饼干和小吃。
最后,我们需要记住,为了理解哪个主题组更有意义,我们可能需要领域专业知识。作为一名研究人员,我们有责任证明我们选择的课题组是正确的。只要能自圆其说,我们可以决定任何一个主题组作为最终的主题模型。
感谢您的阅读!开心分析!
*特别感谢我的朋友Bibor Szabo在撰写本文时提供了宝贵的反馈和建议。
注:关于本次学习的 Python 代码,可以查看我的 GitHub 文件夹 。本研究中使用的所有脚本都可以在 Github 文件夹中找到。此外,这个主题建模研究是更大项目的一部分。你可以查看我以前的帖子进行 数据清理 和 情绪分析如果你有兴趣看前面的步骤。
研究生院面试的主题建模
利用数据科学来了解你感兴趣的院系的研究领域。

图一。我感兴趣的教师中无人监督检测的子主题的代表词云。
本文是正在进行的关于在研究生院面试过程中利用数据科学的系列文章的一部分。查看上一期 社交网络分析 ,期待更多。
欢迎回来。在第 1 部分中,我们探索了社交网络分析,同时初步探索了每位教授感兴趣的主题,我们还探讨了更深入分析的可能性,包括主题建模,以获得研究人员之间更深层次的联系(如果您还没有阅读第 1 部分,请立即阅读!).在本次会议中,我们将使用基本上相同的数据,因此,通过第 1 部分的运动,至少让数据争论可能是一个好主意。
由于我们一直在准备,我们已经建立了一个更强的认识,我们的兴趣和他们的职业生涯有多少是在合作中巩固的,并分享了对彼此的尊重。今天,我们将通过更深入地挖掘现有数据来进一步了解这一点,看看我们是否可以收集到任何额外的信息,甚至了解我们自己的研究兴趣。
与第 1 部分一样,我们将主要使用 Python,包括以下模块和一些新模块:
- 学术,通过谷歌学术收集数据。
- 熊猫和 Numpy,进行基础数据角力和操作。
- Networkx 和 Matplotlib,用于绘图和数据表示。
- Python-docx,用于自动化文档构造。
- Sci-kit Learn (sklearn),用于无监督机器学习。
- spaCy,用于自然语言处理。
其中一些可能包含在 Python 的典型安装中,也可能不包含在其中,因此我建议您参考它们各自的网站/文档以获得专门的帮助。
第 0 部分:增加我们之前的数据
在第 1 部分第 3 节中,我们从每位教师的出版历史中提取数据,并制作了一个直方图,记录了他们感兴趣的主要主题的信息。

图二。宾夕法尼亚州立大学 Charles Geier 博士的出版物标题词频直方图。
然而,我们可以重新制作这个图像来捕捉更多的信息,特别是关于每个单词在一段时间内的用法分布。要做到这一点,我们必须重新审视我们的数据收集,这一次,提取关于他们的出版日期的额外信息。这方面的代码如下。
import pandas as pd
import matplotlib.pyplot as plt
from stop_words import get_stop_wordsexcs = get_stop_words('en')
table = pd.read_csv("FoIScholarData.csv")
def valuef(x):
return worddict[x]
newcol = []
for i in range(len(table)):
search_query = scholarly.search_author(table.Name[i])
author = next(search_query).fill()
pubs = scholars[i].publications
worddict = {}
for pub in pubs:
if not ('year' in pub.bib):
continue
j = pub.bib['title']
words = j.lower().split(' ')
for k in words:
if k in worddict.keys():
worddict[k] += [pub.bib['year']]
else:
worddict[k] = [pub.bib['year']]
values = []
topics = []
for j in worddict:
if len(worddict[j]) > 2:
if not (j in excs):
values += [len(worddict[j])]
topics += [j]
width = 0.3
topics.sort(key=valuef)
values.sort()
newcol += [topics]
newcol2 += [values]
newcol3 += [worddict]table['topics'] = newcoltable['topics'] = nnewcol
table['tcounts'] = nnewcol2
table['tyears'] = nnewcol3
*export_csv = table.to_csv (r'C:\Users\Masters-PC\Desktop\ProfNetworks\FoIScholarData.csv', index = None, header=True, encoding='utf-16') #Don't forget to add '.csv' at the end of the path
第一部分:探索研究兴趣的时间演变。
现在,我们的单词计数对字典不是只有一个列,而是有 3 个列来携带每个实例的信息,允许以时态栅格图的形式更动态地表示数据。这背后的想法是,即使在作者最常用的词中,在他们的职业生涯中也可能有直方图中没有捕捉到的转变。要为每个研究人员生成图像,代码如下:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from matplotlib.ticker import AutoMinorLocator
# Set the random seed for data generationnp.random.seed(2)
# Create rows of random data with 50 data points simulating rows of trainstable = pd.read_csv("FoIScholarData.csv", encoding = 'utf-16')
for i in range(0,len(table)):
times = eval(table.tyears[i])
words = eval(table.topics[i])
values = eval(table.tcounts[i])
neuralData = np.random.random([8, 50])
# Set different colors for each word
colorCodes = np.array([[0, 0, 0],
[1, 0, 0],
[0, 1, 0],
[0, 0, 1],
[1, 1, 0],
[1, 0, 1],
[0, 1, 1],
[1, 0, 1]])
# Set spike colors for each word
lineSize = [0.4, 0.3, 0.2, 0.8, 0.5, 0.6, 0.7, 0.9]
def addition(x,y):
z = []
if len(x) == len(y):
for i in range(len(x)):
z += [x[i]+y[i]]
return z
else:
print('Wrong sizes')
return 'Wrong Sizes'
plt.figure()
for j in range(max([-8,-len(words)]),0):
plt.plot(addition(times[words[j]], 0.5*np.random.random(len(times[words[j]]))),
addition([j]*len(times[words[j]]),0.5*np.random.random(len(times[words[j]]))),
color = colorCodes[abs(j+1)], marker = 'o', linestyle='', alpha=0.3)
#plot.eventplot(neuralData, color=colorCodes, linelengths = lineSize)
# Provide the title for the spike raster plot
wordsgraphed = []
for j in range(max([-8,-len(words)]),0):
wordsgraphed += [words[j]+'('+str(values[j])+')']
#wordsgraphed += ['']
plt.title('Distribution of Word Title usage for ' + table.Name[i])
plt.xlabel('Time (years)')
plt.ylabel('Word')
plt.yticks(np.arange(max([-8,-len(words)]), 0), wordsgraphed, rotation = 0)
tup = plt.xlim()
plt.xlim([np.floor(tup[0]),np.ceil(tup[1])])
plt.xticks(np.arange(np.floor(tup[0]),np.ceil(tup[1])+1,3))
plt.gcf().subplots_adjust(left=0.28)
minor_locator = AutoMinorLocator(2)
plt.gca().yaxis.set_minor_locator(minor_locator)
plt.grid(which='minor',axis='y')
# Display the spike raster plot
plt.show()
plt.savefig(str(table.Name[i]) + "_WF2.png") # save as png
plt.close() # display
结果应该如下所示:

图三。宾夕法尼亚州立大学 Charles Geier 博士的出版物标题的 Word 时态栅格。
我已经将包含的字数减少到 8 个,但是你可以随意修改,但是我想强调你可以从这个情节中获得的新信息。因此,举例来说,如果我们看看吸烟,似乎盖尔博士对该领域的兴趣相对较新,所有的出版物都是从 2014 年开始的,这似乎也与对刺激的直接处理的兴趣下降相吻合。这都是探索性的,例如我们可以在开发中看到,干旱期是常见的,并不一定是完全放弃的信号,但允许我们梳理和询问关于教师对其研究项目的计划的更深层次的问题。
第 2 节:构建出版物标题的主题模型。
对于主事件,我们将进入使用非负矩阵分解(NMF)的无监督主题建模。按照惯例,我们认为主题是描述特定工作的离散单词或短语,因此,例如,我们可能认为新闻中可能出现的主题是犯罪和商业。然而,当我们做主题建模时,输出更准确地被认为是单词集合,立体地典型地出现在属于该主题的文章中。然后,从那些词中,我们可以推断出它可能所指的一个话题集;假设我们从两个主题模型中获得了以下输出:
0: murder victim arrested search
1: revenue investment returns innovation
我们现在有两个主题 0 和 1 以及对该主题最重要的单词。有了这些词汇,我们或许可以将第一个主题分配给crime,而第二个主题可能是business。最后的决定很大程度上是任意的。所以,让我们开始吧。
第 2a 节。用于主题建模的数据重新格式化
首先,sci-kit learn 和 spaCy 的结构非常适合处理文本文件,因此我们将通过为每个作者及其出版物创建一系列新的目录结构,将我们的数据重新整理成这种格式。
import pandas as pd
import oscur = os.getcwd()
table = pd.read_csv("FoIScholarData.csv", encoding='utf-16')outdir = cur + '\\Publications\\TitleOnly'
if not os.path.exists(outdir):
os.mkdir(outdir)for i in range(len(table)):
if not os.path.exists(outdir):
os.mkdir(outdir+'/'+table.Name[i])
os.chdir(outdir+'/'+table.Name[i])
pubs = eval(table.publications[i])
for j in range(len(pubs)):
file1 = open(str(j)+".txt","a", encoding='utf-16')
file1.write(pubs[j])
file1.close()
请注意这一步,因为我们可能会重新访问它,使这些文本文件也包含摘要,因为这可能会更强大。我们将不得不重新审视我们的数据收集流程并收集额外的数据,因此我们目前不会这样做,但在后续工作中可能会这样做。最后,我们使用 spaCy 构建要分析的数据框架,将适当的数据加载到其中。
from sklearn.datasets import load_files
import pandas as pd
import spacy
import os
os.chdir('C:/Users/Masters-PC/Desktop/ProfNetworks')
nlp = spacy.load("en_core_web_sm", disable=['parser', 'ner'])random_state = 0DATA_DIR = "C:/Users/Masters-PC/Desktop/ProfNetworks/Publications/TitleOnly"
data = load_files(DATA_DIR, encoding="utf-8", decode_error="replace", random_state=random_state)
df = pd.DataFrame(list(zip(data['data'], data['target'])), columns=['text', 'label'])def only_nouns(texts):
output = []
for doc in nlp.pipe(texts):
noun_text = " ".join(token.lemma_ for token in doc if token.pos_ == 'NOUN')
output.append(noun_text)
return outputdf['text'] = only_nouns(df['text'])df.head()
第 2b 节。模型构建
因此,我们做的第一件事是利用带有TfidfVectorizer的词频分解从我们的文本文件中提取感兴趣的特征,然后用NMF进行实际的主题建模。我们将任意选择 5 作为要生成的主题的数量。像 coherence 这样的特定指标可以帮助您确定特定数据集的正确主题数量,但是讨论它们的使用可能超出了本文的范围。
# number of topics to extract
n_topics = 5from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
vec = TfidfVectorizer(max_features=5000, stop_words="english", max_df=0.95, min_df=2)
features = vec.fit_transform(df.text)from sklearn.decomposition import NMF
cls = NMF(n_components=n_topics, random_state=random_state)
cls.fit(features)
有了这些,我们将打印出一些最重要的术语,看看它们可能是关于什么的。
# list of unique words found by the vectorizer
feature_names = vec.get_feature_names()# number of most influencing words to display per topic
n_top_words = 5for i, topic_vec in enumerate(cls.components_):
print(i, end=' ')
for fid in topic_vec.argsort()[-1:-n_top_words-1:-1]:
print(feature_names[fid], end=' ')
print()
对于我感兴趣的部分,输出如下所示:
0 network dynamic analysis datum activity
1 brain interface stimulation machine control
2 cortex representation memory motor learning
3 model response theory mouse imitation
4 neuron response property behavior spiking
另一个,也许是更具知识性的可视化数据的方法是制作每个数据的文字云。
from wordcloud import WordCloud
import math as m
import random
import matplotlib.pyplot as plt
import copy
from matplotlib.pyplot import figurefor j in range(n_topics):
lst = []
comps = copy.deepcopy(cls.components_[j])
comps.sort()
comps = list(comps)
bomps = copy.deepcopy(cls.components_[j])
bomps = bomps*2000/max(bomps)
for k in range(len(feature_names)):
if len(comps)-comps.index(cls.components_[j][k]) < 50:
lst += [feature_names[k]]*m.ceil(bomps[k])
random.shuffle(lst)
text = str(lst)
text = text.replace("'", '')
text = text.replace(",", '')
text = text[1:-1]
figure(num=None, figsize=(16*4, 12*4), dpi=400, facecolor='w', edgecolor='k')
wordcloud = WordCloud(max_font_size=50, max_words=100, background_color="white",collocations=False).generate(text)
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()
plt.title('WordCloud for hypothetical topic #' + str(j))
plt.savefig('Topic#' +str(j)+ "_WC.png") # save as png
plt.close() # display
这将产生图像,如我们的特色图像和以下 3 个主题:



图 4。我感兴趣的院系中对应于主题 0、1 和 4 的无监督检测到的子主题的代表性词云。副主题 2 可以在文章的专题图片中看到。
从这里开始,我决定使用以下主题标签:
1\. Network Dynamics
2\. Brain Machine Interfaces
3\. Cortical Representation
4\. Cognition
5\. Neurophysiology
第 2c 节。为主题分配插入作者出版历史。
现在,有了这些标签,我们实际上可以回过头来插入每个作者的出版历史,看看他们的出版物通常会分类成什么主题。就代码而言,这实际上非常简单。
newcol = []
for i in range(len(table)):
newcol += [cls.transform(vec.transform(eval(table.publications[i]))).argsort(axis=1)[:,-1]]
table['pubcats'] = newcol
export_csv = table.to_csv (r'C:\Users\Masters-PC\Desktop\ProfNetworks\FoIScholarData.csv', index = None, header=True, encoding = 'utf-16') table = pd.read_csv("FoIScholarData.csv", encoding = 'utf-16')
for i in range(len(table)):
topics = ['Network dynamics', 'Brain-Computer Interface', 'Cortical Processing', 'Cognition', 'Spike-train Analysis']
pubcats = eval(table.pubcats[i].replace('\n', '').replace(' ', ','))
values = [pubcats.count(j) for j in range(5)]
width = 0.5
plt.bar(topics, values, width, color='b')
plt.xticks(rotation = -15)
plt.gcf().subplots_adjust(bottom=0.22)
plt.title('Area of Emphasis (Topic Modelling) for ' + str(table.Name[i]))
plt.savefig(str(table.Name[i]) + "_TM.png") # save as png
这将为您提供一个新列,包含每个出版物的每个类别,以及一个如下所示的输出图:

图 5。华盛顿大学艾德丽安& # 183;费尔豪尔出版史的主题建模。
这将非常多变的工作,所以请不要弄脏你的手,并考虑修改你的模型的效用。例如,在我的例子中,我降低了一个出版物被归类为皮层处理的概率,通过将它的组成部分乘以因子 8,这对我来说似乎相当有效。
第 3 部分:更新合作者图表以反映感兴趣的主题。
在我们可以传递给 NetworkX 图形绘制函数的变量中,有一个选项可以改变每个节点的形状,以反映它的一个属性。在我们之前为图形绘制编写的任何循环中,我们可以添加以下用粗体书写的代码。
**shapes = ['s','o', 'd', 'p', 'h']**
for i in range(len(G.nodes())):
** pubcats = eval(table.pubcats[list(table.Name).index(list(G.nodes())[i])].replace('\n', '').replace(' ', ','))
counts = []
for j in range(5):
counts += [pubcats.count(j)]
shape = shapes[counts.index(max(counts))]**
nx.draw_networkx_nodes(G, pos, nodelist=[list(G.nodes())[i]],**node_shape=shape**,node_size=table.hindex[list(table.Name).index(list(G.nodes())[i])]*19,node_color=viridis(list(domains).index(table.Domain[list(table.Name).index(list(G.nodes())[i])])), **options)
我们定义的形状列表将节点分别做成正方形、圆形、菱形、五边形和六边形。 pubcats 变量只是解释我们在数据上生成的 pubcats 列,而 counts 和 shape 变量只是确定最终选择教员节点形状时最常见的发布主题类别。这可以针对每个教职员工子图和我们的整体循环可视化进行,结果应该类似于下图。

第 4 部分:更新您的个性化报告以纳入变更。
在第 1 部分中,我们制作了一份关于我们教授的数据的简明摘要,开始编辑笔记,并对文献进行更直接的搜索,以选择采访过程中作为我们审查的一部分。有了这些新图像,我们可以更新代码来反映这些新信息。只需替换第 1 部分第 5 节中的代码:
document.add_picture(table.Name[qt]+"_WF.png", width=Inches(5))
通过这段简短的代码:
newp = document.add_paragraph('')
nrun = newp.add_run()
#p.add_run('\n'+'Topics ' + str(table.topics[qt])[1:-1])
if os.path.exists(table.Name[qt]+"_WF2.png"):
nrun.add_picture(table.Name[qt]+"_WF2.png", width=Inches(3.4))
else:
nrun.add_picture(table.Name[qt]+"_WF.png", width=Inches(3.4))
nrun.add_picture(table.Name[qt]+"_TM.png", width=Inches(3.4))
记住还要用第 3 部分中描述的代码修改教员子图的生成,结果应该如下所示:


图 6。UCSF 的 Loren Frank 博士和加州大学伯克利分校的 Jack Gallant 博士的输出文档示例。
这些修改确实使表格内容更加丰富,并且有助于做笔记和选择问题。就我个人而言,我已经能够简明扼要地总结一个院系兴趣随时间的变化,他们特定的认同领域,以及他们合作的跨学科动态。
第 5 部分:创建摘要页面
我们在前面部分没有讨论的东西实际上是总结了我们所有机构的信息。我还没有以编程方式开发出一个 python-docx 代码来输出我满意的文档,但是我可以分享一个我手动创建的文档来分享我的想法,也许你们可以想出自己的想法。

图 7。手动构建的摘要页面,包含分析过程概述的主要输出。注意:这些数据是虚构的,并没有准确反映我的老师或感兴趣的学校。
本文的目的是简明扼要地总结您理解其余图表所需的大部分信息,并提供您感兴趣的机构的高水平概述。随着面试季的全面展开,我祝你好运!
类别树中的主题建模
LDA 和 NMF 的数字组合与 W2V 级联,将 1M+多语言记录分类到 275 节点、5 级深度类别树中。
—这个解决方案在全印AI Hackathon*中排名一万+ 第四,自动化多标签分类,在 Techgig 的 Code Gladiators 2020 中。*
个人备注:
当我得知以 1 分之差获得黑客马拉松前 3 名时,我的心情很复杂。虽然在决赛队伍中排名第四有点令人放心,尽管我独自参加,但一个充满激情的团队伙伴的空缺相当令人不安。

黑客马拉松的挑战是用元信息对 100 多万篇多语言文章进行高精度的分类。元信息表示隐藏在 URL 文本序列中的类别树信息以及每篇文章的标题。您可以浏览一下下面的输入数据集。

上述文章将根据文章主题分类到一个类别层次中。例如,“莫迪访华”被归类为“Politics^International ”,而“科罗纳票数创历史新高”被归类为“Health^Pandemic".”
由于上述数据集非常庞大,人工标注文章需要付出巨大的努力。我们的目标是尽可能减少手工劳动。因此,我们的目标是在上述数据集上进行主题建模。
主题建模 vs 分类
- 主题建模是一种‘无监督’ML 技术,用于将文档分类为不同的主题 s.
- 主题分类是一种‘监督’ML 技术,它消耗人工标记的数据,以在以后做出预测。
因此,很明显,我们需要做主题建模,因为输入的文章没有事先标记。但是主题建模不能保证准确的结果,尽管它很快,因为不需要培训。
因此,我们需要替代分类方法,并将它们安排为级联回退,同时改进主题建模结果。
解决方案的完整源代码可以在找到 这里 。
级联回退管道
- 主要方法:使用描述的类别树分类器
关联节点类别中出现的单词的单词向量&文章描述,使用 Google Word2Vec 模型计算。这个模型是在 Google News 数据集上进行预训练的,这个数据集类似于我们需要分类的输入数据。
2.回退 1:基于 URL 的类别树分类器
文件夹的顺序,从左到右体现了与文章相关的类别层次结构。例如,以下网址应归类为“新闻/政治/BJP 政治”。如果“方法 1”的置信度值低于阈值,则触发回退 1。
3.回退 2: LDA-NMF 组合模型
潜在狄利克雷分配(LDA) 是主题建模的经典解决方案。但在实践中,它给出了很大比例的错误分类。因此,非负矩阵分解(NMF) 也被使用,并在数值上与 LDA 结合,与多类二进制化器一起改进结果。
4.回退 3:使用描述的类别树分类器
如果上述所有方法都失败了,那么你可以将文章标记为“未分类”,或者将“主要方法”的输出作为最后的退路。
你也可以看看这个博客底部的“改进”标题,了解替代 fallback 4 的进一步的 Fallback 策略。
解决方案架构

文章、URL 和 LDA-NMF 分类器被合并
在解决方案实现之前,让我们构建输入类别树。
构建类别树
下面以 csv 文件的形式给出了对文档进行分类的类别树。

父子节点由^分隔
我们可以使用任何 python 数据结构来表示类别树。 AnyTree 包用于创建、操纵&遍历类别树输入。
上面的代码从输入的 cat_tree.csv 文件生成了树结构。

类别树
类别树结构可以使用 graphviz 可视化。

类别树描述
非英语文章可以很容易地翻译成“英语”使用谷歌 API。为了节省时间,请识别非英语行,并只将它们提供给下面的函数。
正在加载 Google Word2Vec 模型
谷歌的预训练模型包括 300 万个单词和短语的词汇向量,他们从谷歌新闻数据集中训练了大约 1000 亿个单词。向量长度为 300 个特征,训练数据集类似于我们的输入数据集。
主逻辑:类别树 Classn 使用描述
首先,我们将“长描述”中的单词与节点相关联以找到类别。

实现了一种深度算法,即搜索与文章描述中每个词相关的类别树节点的 GoogleNews 向量。多词分类得到智能处理不会提高相似度分数。该功能是解决方案的核心。
对类别树进行广度优先相关遍历以找出基于 Word2Vec 相似度的最佳类别树分配。
上面的代码足够复杂,可以通过分析文章中的每个单词(与节点类别中的单词相关联)来生成丰富的类别树。

为了组合不同算法的结果,我们需要计算每篇文章的分类置信度。因此,将(id、树、置信度)信息保存到 CSV 文件中。
使用基于列表中数值分布的数学公式计算置信度得分。该公式计算最高相似性值和第二高相似性值之间的差异,因为当前 2 个值接近时,它表示不明确。
调整类别树
具有不同含义的词的多词类别被组合成相似含义的词,使得词向量距离度量不会出错。例如,在单词向量中,“教育”与“金融”相似,因此被重命名为意思相似的单词“学校教育”。
后备 1:基于 URL 的类别树分类器
没有单一的信息可能足以对一篇文章进行适当的分类。首先,我们使用 URL 链接中嵌入的树信息来查找类别。

文章 ID 和相应的 URL
上面的代码将生成一个对应于每篇文章的 cat-tree 和置信度得分。请注意,当链接中没有足够的信息时,置信度为 0。

回退 2: LDA-NMF 组合模型
LDA 是一个概率生成过程,而 NMF 是一个线性代数方法将文档分类到不同的主题。
任何文档都被认为有与之相关联的潜在混合主题。类似地,主题被认为是可能产生的术语的混合。因此,我们需要计算两组概率分布参数。
- 给定一个文档 d 的主题 z 的概率: P (z | d)
2.给定题目 z 的条件 t 的概率: P ( t | z)
由此,的概率文档 d 的 生成 的术语 t,
P (t | d) =所有主题的前两个概率的乘积之和。
如果有 10 个主题,那么参数数量= 500 个文档 x 10 个主题+ 10 个主题 x 1000 个单词= 15K 个参数。(优于 500 *1000)
这种矩阵分解的概念叫做潜在狄利克雷分配。

BoW 模型(左)到 LDA 模型(右)
LDA 首先为每篇文章挑选一些主题,并为每个主题挑选一些词,这两者都用多项式分布表示。

贝塔分布:红色部分大概率,蓝色部分小概率。
LDA 模型有一个巨大的优势,它也给了我们一堆话题。该算法只会抛出一些主题,我们可能需要手动对它们进行更有意义的分组。
然而,由于无人监管,无论是 LDA 还是 NMF 都无法单独获得好的结果。因此,实施了 LDA 和 NMF 输出矩阵归一化后的数值组合,以计算出最大可能主题。
进行预处理后,在“文章描述”上应用计数矢量器和 TF-IDF-矢量器计算文档-术语矩阵(DTM)分别馈入 LDA 和 NMF。
LDA 计算
根据每个聚类中的前 20 个单词手动标记主题,如下所示。

LDA 的输出是大小为文章数*主题数的矩阵。每个单元格包含一篇文章属于一个主题的概率。
我们还可以使用 NMF 将 DTM 分解成两个矩阵,如下图,这在概念上与 LDA 模型类似,只是这里我们使用线性代数而不是概率模型。

NMF 的输出也是一个大小为文章数主题数的矩阵,解释保持不变。因此,我们可以在 y 轴上组合 LDA 和 NMF 的输出矩阵,以得到一百万 40 列。(输入= 1M 行。话题 LDA 和 NMF 各 20 个)
取每一行的 argmax(),找出 LDA 和 NMF 最可能的预测
注意:记得在矩阵串联之前做归一化。
组合模型产生更好的分类结果如下。

错误分类的置信度得分较低
唯一的缺点是这会导致第一级分类,而不是树形层次结构。所以是这个原因,我决定把它作为第二个退路。
理想情况下,应使用分级 LDA,并将其作为解决方案管道中文章分类器之后的第一个备用分类器。文章分类器仍然应该是主要逻辑,因为 Hierarchical-LDA 产生随机类别的词簇,这些词簇可能与我们想要的类别树不同。
合并描述、URL 和 LDA-NMF 分类器
文章描述分类器和 URL 分类器通过 LDA-NMF 组合模型合并成一个流水线,作为基于相应置信度得分的级联回退。
描述分类器被赋予了很大的权重,因为 LDA-NMF 只给出了类别(而不是类别树),而 URL 通常不包含所需的信息。如果 3 种方法都失败,则将其标记为“未分类”或使用文章分类器的结果,尽管不明确。
免责声明:由于上述解决方案是在 24 小时黑客马拉松中编写的,代码可能并不完美。它可以通过使用下面提到的方法进行改进,并且还需要对代码中的超参数进行更多的调整。
改进
- h-LDA:Hierarchical-LDA按照主题的层次结构对文档进行分组,并与 LDA-NMF 输出相结合[1]。
2。知识图:文章文本的知识图会生成单词的层次关系,类似于类别树。此信息可用于将文章映射到类别树。

- Guided LDA: 我们也可以使用 Guided LDA 为歧义类别设置一些种子词,当没有足够的文档来区分时。种子词将引导模型围绕这些类别收敛。
解决方案的完整源代码可以在这里找到。
参考文献
问题:组织广场支持中心文章
medium.com](https://medium.com/square-corner-blog/inferring-label-hierarchies-with-hlda-2093d0413337) [## 主题建模与 LDA 和 Quora 问题
潜在狄利克雷分配,非负矩阵分解
towardsdatascience.com](/topic-modeling-quora-questions-with-lda-nmf-aff8dce5e1dd) [## joewandy/hlda
层次潜在狄利克雷分配(hLDA)解决了从数据中学习主题层次的问题。的…
github.com](https://github.com/joewandy/hlda) [## 自然语言处理在线课程
新的!纳米学位课程必备知识该课程要求具备 Python,统计学,机器…
www.udacity.com](https://www.udacity.com/course/natural-language-processing-nanodegree--nd892)**
torch points 3d——点云深度学习的统一框架
点云深度学习变得简单
这是与Thomas Chaton和Loic Landrieu的联合出版物。
github:https://github.com/nicolas-chaulet/torch-points3d
随着越来越便宜的激光雷达传感器和更高效的摄影测量算法的出现,3D 点云数据比以往任何时候都更容易获取。深度学习社区已经接受了这一趋势,开发了新的网络架构来对 3D 数据执行各种任务。大量的可能性(数据布局、数据扩充、卷积策略等)使得找到最适合您的数据或问题的方法非常耗时。

使用 KPConv 获得的语义分段输出
我们的框架 Torch Points3D 被开发成点云数据的Torch vision:一个灵活且可扩展的框架,适用于研究基于点云的机器视觉的研究人员和工程师。想知道 KPConv 在点云注册方面表现如何吗?或者 PointNet++ 用随机采样代替 RandLa-Net 中建议的最远点采样进行物体检测?有了 Torch Points3D,您现在只需几行代码就可以尝试多种最先进的主干模型。
在快速回顾了点云的特性后,我们将介绍 Torch Points3D 的以下方面:
- 点云数据的优化数据布局
- 许多学术数据集的本地集成
- 快速和稳健的数据处理和数据扩充
- 针对一系列稀疏和基于点的架构测试了卷积核
- 用于访问数据集、数据转换和预配置模型的易于使用的 API
我们提供具有有用功能的训练脚本,例如模型检查点、登录 Tensorboard 和重量和偏差,使用脸书 Hydra 轻松配置超参数,等等。您也可以将我们的核心组件用于您最喜欢的训练框架,例如 PyTorchLightning 。
我们希望你喜欢阅读!我们欢迎您的反馈和贡献。

火炬点 3D 系统图,数据流以红色突出显示
点云为什么这么特别?
围绕 3D 稀疏点云的挑战在研究文献中有广泛描述,我们将仅提及 3D 点云和 2D 图像之间的一些关键差异:
- 每个点云可以有不同数量的点,即使它们具有相同的空间分辨率。这使得点云比图像更难构成均匀的批次。
- 激光雷达传感器捕捉三维世界中的表面,因此数据本质上是稀疏的。另一方面,照相机产生密集的采集。
- 在同一个点云中,点的密度各不相同,因此一些点可能有许多近邻来获得精确的几何信息,而其他点可能是孤立的。
- 点云在它们的点的索引的重新索引下是不变的,而像素的索引固有地链接到它们的坐标。这意味着用于处理点云的处理技术也必须是排列不变的。
点云数据和数据布局
有两种方法可以组装不同的批次。第一种是通过子采样和过采样使批中的所有元素大小相同,并在新的批维度中整理它们(就像整理图像一样)。我们将这种方法称为密集批处理。或者,您可以直接比较点维度中的样本,并跟踪每个样本中的点数。我们将这种方法称为打包批处理。
官方实现 PointNet++和 Relation-Shape CNN 以及类似的架构都使用密集批处理。除了实现简单之外,它的主要好处是可以利用与经典 2D 卷积相关的硬件优化。缺点是一些样本可能有许多重复点,而另一些样本被严重欠采样,丢弃了信息。每个样本的点数必须仔细选择。另一方面,KPConv 或 Minkowski Engine 等更新的模型使用打包批处理,这样就不需要对批处理中的元素进行采样,在某些情况下还可以显著降低内存需求。好消息是我们支持这两种数据格式,我们的数据加载器可以很容易地从一种格式切换到另一种格式。

对于相同的两个点云(红色和蓝色),左侧为密集批排序,右侧为打包批排序。
支持的核心数据集
该框架提供了对社区广泛使用的几个数据集的简单访问。目前,我们支持以下数据集:
要在您自己的框架内使用 Torch Points3D 数据集,您只需编写:
>>> dataset = ShapeNet("data_folder", split="train")
>>> dataset[0]
Data(pos=[5023, 3], x=[5023, 3], y=[5023])
我们所有的数据集都生成了数据对象,这是保存点的位置和特征的张量的简单结构 data.pos 和 data.x (它们实际上是 PyTorch 几何数据对象)。这里位置是原始 3D 位置,而 x 是每个点的法向量。在训练期间,数据对象还包含标签 y 以及特定模型或任务可能需要的任何其他信息。
数据处理流水线
数据处理管道是任何深度学习模型的关键组件。PyTorch Geometric 已经提供了许多有用的变换函数,我们已经用额外的 3D 特性丰富了这些函数;你可以在这个链接找到名单。除了这种大范围的数据转换,我们还添加了助手来直接从 yaml 配置文件实例化数据管道。这使得数据扩充成为一个透明的过程,这反过来又提高了可重复性,并使现有模型的调整更加容易。典型的配置文件如下所示:
data:
class: shapenet.ShapeNetDataset
task: segmentation
dataroot: data
normal: True # Use normal vectors as features
first_subsampling: 0.02 # Grid size of the input data
information
pre_transforms: # Offline transforms
- transform: NormalizeScale
- transform: GridSampling
params:
size: ${data.first_subsampling}
train_transforms: # Data augmentation pipeline
- transform: RandomNoise
params:
sigma: 0.01
clip: 0.05
- transform: RandomScaleAnisotropic
params:
scales: [0.9,1.1]
卷积核
大多数基于点的卷积网络借用了通用编码器/解码器的思想(或仅编码器)。编码器在密集的点云上操作,随着我们越深入,在每一层或每一组层之后,密集的点云被迭代地抽取。点本身支持特征向量,从一层到下一层通常需要两步:
- 向下采样点云;
- 对于下采样点云中的每个点,基于其在先前点云中的邻居的特征来计算特征向量。
简而言之,网络越深,点就越少,但相关的要素就越丰富。

点云的典型编码过程。每盏灯代表来自给定层的点云,红色球体突出显示来自前一层的哪些点用于构建新的特征向量(图像来源:Hugues Thomas)。
我们的框架支持三种可互换的采样策略:随机采样、最远点采样和网格采样。对于邻居搜索,大多数网络使用具有固定半径或 k 近邻的邻居。

KPConv 模式中不同层次的网格采样。
Torch Points3D 是在模块化的理念下创建的。我们为各种模型的卷积核补充了采样策略和邻居搜索算法,作为独立模块,可以包含在您自己的架构中。截至目前,以下模块可用:
- Pointnet++
- 关系-形状 CNN
- KPConv
- 闵可夫斯基引擎(通过官方 python 包)
例如,可以创建一个步进 KPConv 卷积模块,如下所示:
>>> import torch_points3d.modules.KPConv.blocks as kpconv_modules
>>> kpconv_layer = kpconv_modules.SimpleBlock(
down_conv_nn = [64,128],
grid_size=0.1,
prev_grid_size=0.05
)>>> kpconv_layer
SimpleBlock(
GridSampling(grid_size=0.1),
RadiusNeighbourFinder(radius=0.125),
(kp_conv): KPConvLayer(InF: 64, OutF: 128, kernel_pts: 15, radius: 0.0),
(bn): BatchNorm1d(128, eps=1e-05, momentum=0.02),
(activation): LeakyReLU(negative_slope=0.1)
)
我们的框架负责处理所有的细节。例如,它为卷积核和对应于该步进卷积的栅格采样操作符设置适当的参数。
那些核心卷积方案都已经在语义分割任务上得到验证,并且已经与各自的作者密切合作再现了已发表的结果。我们计划在新的卷积方案发布后继续添加。
应用程序接口
我们已经开始通过一个易于使用的 API 来公开框架的一部分。目前,该 API 支持:
- 用于点云数据扩充的常见数据转换
- 用于分段任务的通用数据集,具有批量整理功能和强大的指标跟踪器
- 用于 KPConv、Pointnet++和 Relation-Shape CNN 的基于 Unet 架构的主干模型

请参考https://torch-points 3d . readthedocs . io获取 API 的最新文档,或者看看我们可以在 colab 上运行的示例笔记本:
- 用关系形状分类 3D 物体 CNN
- 使用 KPConv 分割对象的部分
最后的话
Torch Points3D 是一个不断发展的框架,每天都会添加新功能,即将推出的一些功能包括:
- 集成更新的架构,如RandLa-Net;
- 集成更多任务,如点云配准、实例分割、图元拟合、离群点去除、点云完成等;
- 通过我们的模型 API 可以直接访问预先训练的模型。
我们还要衷心感谢所有参与该项目的人,特别是来自欧洲富士通实验室的 Sofiane Horache 、 Hugues Thomas 、 Tristan Heywood 和 R & D 团队。
参考
模型
数据集
ScanNet:室内场景的丰富注释 3D 重建
外部库
Torch:从特征到模型的语音数字识别

詹姆斯·奥尔在 Unsplash 上拍摄的照片
探索从语音数据中提取的特征,以及基于这些特征构建模型的不同方法。
语音数字数据集是 Tensorflow 语音命令数据集的子集,包括除数字 0-9 之外的其他录音。这里,我们只关注识别说出的数字。
数据集可以按如下方式下载。
辐条数字特征提取. ipynb
辐条数字特征提取. ipynb
评估指标
数字录音的子集相当平衡,每类大约有 2300 个样本。因此,准确性是评估模型性能的一个很好的方法。准确性是正确预测数与预测总数的比较。对于不平衡的数据集,这不是一个很好的性能测量方法,因为多数类的个体精度可能会盖过少数类。
循环学习率
在训练模型时,学习率逐渐降低以微调训练。为了提高学习率效率,可以应用循环学习率过程。这里,学习率在各时期的最小值和最大值之间波动,而不是单调下降。
初始训练率对模型的性能至关重要,低训练率可防止在训练开始时停滞不前,随后的波动会抑制局部最小值和平台值。
可以使用优化器实例来监控每个时期中使用的学习率。
该项目有三种方法对记录进行分类:
- 使用五个提取特征的逻辑回归— 76.19%的准确率。
- CNN 使用 Mel 光谱图—准确率 95.81%。
通过改变时期的数量和训练速率来重复训练模型。隐藏层的数量和每个层中的节点也是不同的。这里描述了每种方法的最佳架构和超参数。由于训练验证分割中的随机性,在重新训练时精度可能略有不同。
该项目的源代码是这里。
有五个。ipynb 文件:
- 特征提取-提取三种方法使用的必要 CSV 文件和特征。
- 要素可视化-为每个类中的两个示例绘制要素。
- 五个特征——使用五个提取的特征实现逻辑回归。
- 使用 Mel 谱图实现 CNN。
1.使用五个提取特征的逻辑回归
特征
提取的特征包括:
- 梅尔频率倒谱系数(MFCC)—构成声音频谱表示的系数,基于根据人类听觉系统响应(梅尔标度)间隔的频带。
- 色度 —与 12 个不同的音高等级相关。
- 梅尔谱图的平均值 —基于梅尔标度的谱图。
- 光谱对比度 —表示光谱的质心。
- Tonnetz —代表色调空间。
这些特征是大小为(20)、(12)、(128)、(7)和(6)的 NumPy 数组。这些被连接以形成大小为(173)的特征数组。标签被附加到数组的头部,并写入每个记录的 CSV 文件。
spoke ndigit-feature-extraction . ipynb
模型
线性回归模型总共有 1 个输入层、2 个隐藏层和 1 个 ReLu 激活的输出层。
Spokendigit —五个功能。ipynb
火车
Spokendigit —五个功能。ipynb
Spokendigit —五个功能。ipynb
Spokendigit —五个功能。ipynb
该模型在 CPU 上训练约 3 分钟,准确率为 76.19%。
验证损失图
最终验证损失从最小值开始增加很大程度。
验证准确度图
每个时期的最后学习率图
2.CNN 使用梅尔光谱图图像。
特征
该模型使用记录的 Mel 谱图图像。梅尔频谱图是频率被转换成梅尔标度的频谱图。从记录中提取特征并存储在驱动器中。这花了 4.5 个多小时。
spoke ndigit-feature-extraction . ipynb
模型
CNN.ipynb
火车
CNN.ipynb
CNN.ipynb
CNN.ipynb
该模型在 Colab GPU 上训练约 5 小时,准确率为 95.81%。
高精度再次归因于 Mel 标度。
验证损失图
验证准确度图
每个时期的最后学习率图
参考
- https://musicinformationretrieval.com/
- https://github . com/jurgenarias/Portfolio/tree/master/Voice % 20 分类/代码
- https://arxiv.org/abs/1506.01186
- https://en.wikipedia.org/wiki/Mel-frequency_cepstrum
Jupyter 笔记本中的简单文本注释
如何使用 tortus 注释工具

作者图片
在任何情感分析项目的核心都是一组良好的标记数据。预先标记的数据集可以在互联网上的各种网站上找到。但是…
- 如果你想出了一个自定义数据集没有标签怎么办?
- 如果您必须在继续您的项目之前提供这些标签该怎么办?
- 如果你不愿意付钱给外包贴标任务怎么办?
最近,我在为一个情感分析项目从 Twitter 流媒体 API 中检索文本数据时,就遇到了这个问题。我很快发现,如果没有好的工具,自己注释数据将是一项痛苦的任务。这是制作 tortus 背后的灵感,这是一个让在 Jupyter 笔记本中标记你的文本数据变得容易的工具!
开始安装扭转器并启用适当的扩展。
$ pip install tortus
$ jupyter nbextension enable --py widgetsnbextension
打开 Jupyter 笔记本后,将你的数据读入熊猫数据框。
import pandas as pd
movie_reviews = pd.read_csv('movie_reviews.csv')
导入包并创建一个 Tortus 的实例。
from tortus import Tortustortus = Tortus(df, text, num_records=10, id_column=None, annotations=None, random=True, labels=['Positve', 'Negative', 'Neutral'])
必需的参数:
- df :一个包含需要注释的文本的数据帧。这将是你之前读到的熊猫的数据帧。
- 文本:包含要注释的文本的列的名称。这应该是一个字符串。
可选参数:
- num_records :一次 tortus 会话中要注释的记录数。这必须是一个整数,默认为
10条记录。 - id_column :包含文本的 ID 的列的名称。如果您的数据框中没有这样的列,请保留默认设置为
None。给定的 ID 将成为原始数据帧的索引。如果您稍后需要连接数据集,这可能会有所帮助。 - 注解:带有先前在该工具中创建的注解的数据帧。它将拥有在后续注释中使用的正确列。当调用
annotate方法防止重复时,该数据帧中的记录将被排除。如果该数据集没有以前的注释,默认设置为None。 - 随机:决定记录是随机加载还是顺序加载到注释小部件中。默认设置为
True。 - 标签:标注标签列表。标签必须是字符串。默认为
[‘Positive', ‘Negative', ‘Neutral']。
使用annotate方法访问注释小部件。
tortus.annotate()

诉讼侵权法
注释完成后,可以将它们存储到一个变量中,以后可以访问这些变量进行分析。
annotations = tortus.annotations
如果您需要将来的注释,请将此数据帧作为参数传递给 tortus 的后续实例。
这就结束了这篇关于如何使用 tortus 轻松地给你的文本数据添加标签的简短教程。
要转到 PyPI 上的包,点击此处。
要查看完整的源代码,点击这里。
如果您觉得这个包对您的批注任务有帮助,或者您有问题或改进建议,请随时通过 LinkedIn 与我联系,并分享您的反馈。
扔一些数据给你的巫师

摄影:卡特林·弗默斯/网飞
一篇分析《巫师》中不同角色及其说法的文章,并通过 Seaborn 将结果可视化
大约一个月前,我读了一篇关于可视化“布鲁克林九九”试播集脚本的好文章(感谢 Melody Zap 的精彩阅读)。现在,我最近狂看了《巫师》第一季,我想做一些类似的事情。我有兴趣找到以下问题的答案:
- 谁说的话最多?
- 一旦他/她有机会说话,谁平均用的词最多?
- 有多少单词被认为是停用词(它们没有任何意义)?
- 根据人物所说的,他们有多积极/中立/消极?
- 杰洛特第二常用的词是什么,假设“嗯”显然是第一个?
不得不提的是我只看过网飞系列和我不熟悉原著 书系列 也不熟悉其他衍生品(桌游、电脑游戏、卡牌游戏等等)。
底层代码
在我看来,没有必要为这种分析重新发明轮子,因此我使用 Melody Zap Github repo 作为起点。存储库本身可以在下面找到:
对布鲁克林九九数据(布鲁克林九九…
github.com](https://github.com/melozap/Brooklyn-99-Pilot-Analysis)
显然,我必须对 CSV 文件和 Jupyter 笔记本进行一些调整。如果你有兴趣找到我的代码版本,请访问我的 Github 库。
对《巫师》的前五集进行文本分析和情感分析,非常感谢 melozap
github.com](https://github.com/markusrenepae/witcher-analysis)
数据

CSV 文件的前 11 行(已审查)
为了这个分析,我使用了前五集的脚本,这些脚本是在 这里 找到的。它们都存储在一个 CSV 文件中,其中第一列代表一个字符,第二列是这个特定字符所说的文本行。因为这个脚本包含了大量的注释,我删除了所有放在方括号中的内容。
生成的文件包含 1479 行文本,在我看来,这是一个很大的工作量。一旦我得到了第 6、7 和 8 集的数据,我会很乐意更新这篇文章。
现在我们已经准备好进行分析了
谁说的最多?
在执行 Jupyter 笔记本中的脚本之前,我对结果有一些假设:
- 杰洛特有最多的台词,但说的话却不多,因为一般来说,他的台词都很短。
- 贾斯克尔话很多。他每集的字数(他不是每集都出现)一定是最高的。
- Yennefer 是从第 2 集进化到第 8 集(好吧,我们的数据到第 5 集)。因此,我相信她的每行字数在开始时较低,在接近结尾时较高。
我们开始吧!在我们的数据集中,哪个角色的线最多?

这个结果是有道理的,因为杰洛特只是每集出现的两个角色之一(另一个是希里)。
哪些人物总共使用了最多的词语?

在上图中,杰洛特使用了最多的单词,但差别没有上图那么显著。因此,我们可以说,平均来说,他的线很短。
在前五集里,杰洛特一共出现了五集,叶妮弗出现了四次,贾斯基尔出现了三次。因此,我们已经可以看到,贾斯基尔每集说的话最多(大约 800 个),而杰洛特每集只用了大约 540 个词,叶妮弗每集还少 500 个词。我们过会儿将回到它。
在我们的数据集中,哪些角色平均使用最多的单词?

这里,在图中,我们用蜡烛表示平均值和相应的标准偏差。不出所料,贾斯基尔确实平均使用了最多的单词。这主要是因为第二集结尾那首朗朗上口的“扔硬币给你的巫师”的缘故。贾斯基尔在三行中使用了 312 个单词。
其他主要角色(杰洛特、叶妮弗、希里)每行使用大约 10 个单词。
最常见的单词
现在我们知道了一些关于单词和行数的分布,我们现在可以找出最流行的单词。我不会去分析这个系列中的每个角色,但是我会给出一些关于杰洛特、贾斯基尔、叶内费尔和希里的见解。




结果不言而喻——杰洛特第二受欢迎的词是“想要”、“一”和“杀死”。最受欢迎的,显然是“嗯”。
所有人物中最流行的词是什么?

清理文本
首先,你注意到最流行的单词中没有语法冠词吗?这是因为对整个脚本应用了清理过滤器:
def clean(text):
text = word_tokenize(text)
text = [word.lower() for word in text]
punct = str.maketrans('', '', string.punctuation)
text = [word.translate(punct) for word in text]
text = [word for word in text if word.isalpha()]
text = [word for word in text if not word in stopwords]
return " ".join(text)
该函数执行以下操作:
- 文本被标记化,或者简单地说——对于每一行,我们创建一个列表,其中单词是它的元素。
- 所有单词都是小写的。
- 标点符号被删除。
- 字母数字单词被删除(在我们的例子中,这不会有任何影响)。
- 停用词(大多是不提供任何意义的语法文章)被删除。
这造成了巨大的差异。再来看看平均谁用的词最多。

好像用了 clean 功能后差不多 50%用过的字都丢了。
情感分析
前五集整体情绪如何?

不同人物说出来的台词里的情是什么?

可以看出,中性情绪占主导,除了 Jaskier。他比其他角色更积极,这在系列中是显而易见的。
Yennefer 真的进化了吗?
Yennefer 一开始是一只害羞的“小猪”,我的一个假设是她的每行字数随着时间的推移而增加。

事实证明,这个假设是正确的。我们可以看到的另一件事是,最受关注的杰洛特在五集里的每行字数几乎相同。
摘要
《巫师》第一季非常棒,它为接下来的几季树立了很大的期望。更棒的是制作假设并用简单的代码检查它们的过程。写这篇文章帮助我理解了 Seaborn 可视化工具,希望不久我就能使用它。
我要再次感谢 Melody Zap 编写了如此不可思议的项目,并允许我使用她的 Github 库来构建我的项目版本。
如果你想在这篇文章中看到一些额外的东西,或者有一些真正重要的东西不见了,让我知道。我希望我拿到最后三集的剧本后能尽快更新这篇文章。
资源
- Melody Zap Github 资源库:https://github.com/melozap/Brooklyn-99-Pilot-Analysis
- 抄本粉丝:https://transcripts.fandom.com/wiki/The_Witcher
- 我自己的这个项目的 Github 库:https://github.com/markusrenepae/witcher-analysis
边缘无触摸显示界面
启用边缘 HCI:多线程手势&采用 Intel OpenVINO AI 模型的信息亭声音控制。眼睛使眼色&嘴巴方面用数值模式**
个人注: 获得 大奖 在 【深度学习超级英雄挑战赛】 与 Intel 为这个项目举办的 Hackster.io。尽管奖金高达 1000 美元&的英特尔 Movidius NCS 2 棒,但在一连串的差点失手之后,终于击中靶心,这给人以安慰。当然,隧道的尽头有光:)
**大赛链接:https://www.hackster.io/contests/DLSuperheroes

互动公共信息亭现在被广泛使用。银行(自动取款机)、机场(登记)、政府(电子政务)、零售(产品目录)、医疗保健(预约)、学校(出勤)、企业(注册)、活动(信息)等等。随着企业转向信息亭以提供更好的服务,所有公共设备的免触摸交互已经成为减缓无处不在的 电晕病毒传播的必要条件。
手势或语音导航似乎可以解决上述问题,但是这种设备在分析这种输入时会受到资源的限制。*你有没有注意到你的手机语音助手,无论是 Siri 还是 GAssist,在手机离线时都会放弃?当你在偏远的道路上行驶时,你的语音车载信息娱乐系统无法响应。即使是传统的计算机也无法同时运行多个人工智能模型。*
在你的设备上完成这一切不是很好吗?想象一个可以从卧床不起的病人那里获取视觉或声音提示的床边辅助设备。随着英特尔 OpenVINO 的出现,这成为可能。它通过进行硬件意识优化,从边缘实现并加速深度学习推理。 OpenVINO 支持 CPU、iGPU、VPU、FPGA 和 GNAs。如果你想尝试一下,树莓派和英特尔 Movidius NCS 2 将是你的最佳选择。
在这篇博客中,我们将尝试构建一个人机交互(HCI)模块 ,它智能地协调 5 个并发运行的 AI 模型,一个给另一个喂食。用于面部检测、头部姿态估计、面部标志计算和凝视角度估计的 AI 模型识别手势控制输入并触发映射的动作。部署一个子线程来运行离线语音识别,该子线程与父进程通信以基于用户话语给出并行控制命令,从而辅助和增强手势控制。
博客摘要和项目进展
如果你喜欢这个项目,请竖起大拇指 这里
解决方案源代码可以在这里找到。
架构图
下面解释了体系结构图中的每个组件。

作者图片
控制模式
系统中定义了 4 种控制模式,用于确定用户输入的模式。我们可以使用手势在控制模式之间切换。
- 控制模式 0:无控制
手势和声音导航关闭 - 控制模式 1:注视角度控制
鼠标随眼睛注视角度移动(更快) - 控制模式 2:头部姿态控制 鼠标随着头部方向的改变而移动(较慢)
- 控制模式 3:声音控制 鼠标根据用户说话向 4 个方向滑动并打字
校准步骤
为了将 3D 凝视取向角度转换为 2D 屏幕尺寸,系统必须知道与屏幕对角相对应的偏航和俯仰角度。给定对角的这两个角度,我们可以在屏幕上为中间(偏航、俯仰)角度插入(x,y)位置。
因此,当应用程序启动时,将提示用户查看屏幕的对角。这样的校准步骤需要将凝视角度的变化映射到屏幕的尺寸和形状,以便“凝视模式”正常运行。
没有校准,系统也可以运行,尽管牺牲了通用性。为了演示,当系统处于“头部姿态”模式时,头部方向的相对变化被用作移动鼠标指针的度量。
控制器的功能是用目光和头部移动鼠标
手势检测管道
在输入视频流上执行四个预训练的 OpenVINO 模型,一个馈送到另一个,以检测 a)面部位置 b)头部姿态 c)面部标志和 d)凝视角度。
a)面部检测:使用了具有高效深度方向卷积的修剪过的 MobileNet 骨干网。该模型输出图像中面部的(x,y)坐标,该坐标作为输入被馈送到步骤(b)和(c)
b)头部姿态估计:模型 输出头部的偏航角、俯仰角和滚转角,将面部图像作为步骤(a)的输入

笛卡尔坐标系中偏航角、俯仰角和滚转角的可视化
c)面部标志:一个自定义 CNN 用于估计 35 个面部标志。

图片由提供
如上所述,该模型将来自步骤(a)的裁剪的面部图像作为输入,并计算面部标志。识别面部手势需要这样一张详细的地图,尽管的计算需求是 地标回归模型 的两倍(0.042 对 0.021 GFlops),后者仅给出 5 个面部地标。
d)视线估计:自定义类 VGG CNN进行视线方向估计。
该网络采用 3 个输入:左眼图像、右眼图像和三个头部姿态角度—(偏航、俯仰和滚动) —并输出笛卡尔坐标系中的 3d 凝视矢量。

视线注视向量的可视化
后处理模型输出
为了将一个模型的输出作为输入提供给另一个模型,需要对每个模型的返回值进行解码和后处理。
例如,为了确定凝视角度,头部方向需要与来自凝视模型的矢量输出进行数字组合,如下所示。
类似地,面部标志模型返回输入图像大小的比率。因此,我们需要将输出乘以图像宽度和高度来计算 35 个地标的(x,y)坐标。
需要处理从地标模型返回的输出面部点
虽然面部标志和凝视估计模型的输出可以如上容易地进行后处理,但是头部姿势估计模型输出的转换稍微复杂一些。
欧拉角到旋转矩阵
注意"头部姿态估计"模型仅输出姿态,即头部的偏航、俯仰和滚动角。为了获得相应的方向向量,我们需要使用姿态来计算旋转矩阵。
i) 偏航 是 α 绕 z 轴的逆时针旋转。旋转矩阵由下式给出:

ii) 俯仰 是 β 绕 y 轴逆时针旋转。旋转矩阵由下式给出:

iii) Roll 是γ绕 x 轴逆时针旋转。旋转矩阵由下式给出

我们可以沿着三个轴一个接一个地旋转,以任何方向放置 3D 物体。因此,要计算方向向量,需要将上述 3 个矩阵相乘。

眨眼检测
到目前为止,我们已经使用头部和凝视来控制鼠标指针。但是要使用 kiosk,你还需要触发事件,比如‘左键单击’,‘右键单击’,‘滚动’,‘拖动’等等。
为此,需要将一组预定义的手势映射到每个事件,并从视觉输入中识别。两个事件可以映射到左眼和右眼的“眨眼”事件,但是它们需要被识别为“眨眼”。
你可以很容易地注意到,当眼睛睁开时,**的白色像素数量会突然增加,而当眼睛闭上时,则会减少。我们可以通过计算白色像素来区分睁眼和闭眼。

眨眼检测
但在现实世界中,上述逻辑并不可靠,因为白色像素值本身可以变化。我们总是可以使用深度学习或 ML 技术来分类,但是为了提高效率,建议使用数值解决方案,尤其是当您为边缘设备编码时。
让我们看看如何通过 4 个步骤用数字信号来检测眨眼!****
- 计算 0–255 范围内的像素频率(直方图)
2。计算直方图中非零像素的分布。当一只眼睛闭上时,价差会突然下降,反之亦然。
3。尝试在上述信号的尾端拟合一条反 s 形曲线。
4.如果发现拟合成功,则确认拟合曲线的“下降”形状,并声明为“眨眼”事件。(无曲线拟合=眼睛没有眨眼)**
算法解释:
如果以上步骤不清楚,那么看看当睁开的眼睛闭上时,直方图分布图是如何下降的。

图 1 左眼眨眼时的直方图分布
给定上述信号,你可以想象当眼睛睁开几秒钟时,曲线会变成“S”形。这可以使用 sigmoid 函数进行数学参数化* 。*****

但是由于我们需要检测上面所示的“眨眼”事件,曲线的形状将采用反 s 形函数的形式。要绕 x 轴翻转 sigmoid 函数,找到 f(-x)**

反 s 形函数
使用任何在线函数可视化工具来绘制上述函数并改变参数,以查看反向“S”形状如何变化(以适应上述*T21【图直方图分布 )*****

因此,如果通过参数曲线拟合算法在直方图分布曲线的末端发现任何相似的形状,那么我们可以称之为‘眨眼’。曲线拟合算法试图解决一个非线性最小二乘问题。****

反 s 形曲线拟合:左眼和右眼眨眼
注:计算上述内容的有效方法可以是,
- 考虑非零直方图分布中“n”个最近值的条带。
- 计算带材前端和尾端“k”值的中值&标准值。****
- 如果中值>阈值和两个标准<阈值不同,则检测眨眼事件,因为它很可能是一个反 s 形。**
或者,我们也可以使用下面的算法来寻找眨眼。
- 取直方图分布值的的第一个微分****
- 在第一个微分值中找到峰值,以找到突然峰值****
- 寻找信号的反射和寻找峰值寻找突然下降**
- 如果在上述两个步骤中都发现峰值,则*闪烁*******
- 如果只在反射中发现峰值,那么它是眨眼事件。
上述方法比曲线拟合更有效,但可能导致许多假阳性,因为峰值检测并不总是可靠的,尤其是在低光下。中间道路方法将使用中间值和标准偏差来估计曲线的形状。
口长宽比(MAR)
在这篇经典的面部标志论文中,眼睛纵横比(耳朵)被计算出来以确定眨眼。


眼睛闭上时,耳值会下降。
我们不能使用上面的公式来确定眼睛姿态,因为我们的模型没有估计这样密集的地标图。然而,受 EAR 的启发,我们可以基于从 OpenVINO 模型获得的可用 4 个地标来计算 MAR* ,如下。***

高效标记公式
两个手势事件可以使用 MAR:
- 如果标记了>阈值,那么人就是微笑****
- 如果标记了<阈值,那么这个人正在打哈欠****
我们可以自由地附加两个与这两个手势相对应的命令。
线程和进程线程通信
为了增强控制,我们还可以启用基于声音的导航,以及手势控制。然而,系统在分析来自输入视频流的图像帧时,需要连续监控用户话语 以识别命令。**
因此,在不同的线程中运行语音识别模型并让子线程与父进程通信自然是明智的。子线程将识别移动鼠标或在屏幕上书写的语音命令,使用 Python 中的共享队列数据结构将其传递给父线程(如下所示)。**
父进程将运行所有上述 AI 模型和手势识别所需的计算,以启用头部和凝视控制模式。因此,可以并行地获取手势和声音控制命令,但是为了可用性,在这个项目中,我们选择在控制模式 3 中单独获取声音命令。
语音识别
为了解码声波,我们使用 OpenVINO 特征提取和解码器库,接收并转录来自麦克风的音频。我们已经使用了这里提到的语音库在边缘上运行语音识别,不上线。**
由于识别模型是以牺牲准确性为代价进行优化的,因此需要进行一些调整来识别口头命令。首先,我们限制命令词汇,只说‘上’,‘下’,‘左’&,‘右’。其次,命令词的相似发音同义词被存储在字典中以找到最佳匹配。例如,“右”命令可以被识别为“写”。**
这个函数是这样编写的,命令和同义词可以很容易地扩展。为了启用用户输入,还启用了语音写入功能。这使得用户能够输入字母和数字。如* : PNR 号。***
线程从相似声音“同义词”中识别命令,并插入到 STT 队列中
手势控制和鼠标导航
手势控制命令配置如下。但是,您可以轻松地更改手势命令映射。

手势映射可以随意修改
使用 pyautogui 库控制鼠标指针。move()、moveTo()、click()、drag()、scroll()、write()等函数用于触发上述手势对应的事件。
粘性特征及优化
眼睛的凝视或头部的姿势至少会持续改变一点,即使是无意的。此类自然动作不应被视为命令,否则鼠标指针会变得抖动。因此,我们引入了一个“粘性”参数,在该参数范围内,运动被忽略。这大大增加了手势控制的稳定性和可用性。**
最后, 英特尔 VTune 评测器用于查找热点并优化应用代码。一个 shell 脚本 vtune_script.sh 被提供给 VTune GUI,它使用合适的参数启动项目。
结论
项目展示了英特尔 OpenVINO 顺序和并行处理多个边缘人工智能模型的能力。许多控制输入也用于证明灵活性。但是要部署定制解决方案,你可以选择你认为合适的控件。**
例如,凝视控制对于大屏幕可能是理想的,而头部姿势控制对于笔记本电脑屏幕可能是理想的。无论哪种方式,声音控制都有助于接受自定义表单条目或语音命令。手势-动作映射也可以修改。然而,你可以理解的一点是,在边缘上链接多个硬件优化的人工智能模型的可能性,加上高效的数值计算来解决有趣的问题。
解决方案源代码可以在这里找到。
如果您有任何疑问或建议,您可以联系我* 这里***
如果你喜欢这个项目,请竖起大拇指 这里
参考文献
[1] 英特尔 OpenVINO 官方文档:https://docs.openvinotoolkit.org
[2] 英特尔 Edge AI for IoT Nanodegree 由 Udacity 提供。灵感来自期末课程项目。https://classroom.udacity.com/nanodegrees/nd131****
[3] 布拉格捷克技术大学电子工程系 Tereza Soukupova 和 Jan Cech 使用面部标志进行实时眨眼检测。
Python Itertools 之旅
让我们探索两个伟大的 Python 库——ITER tools 和 more_itertools,看看如何利用它们进行数据处理…

特雷弗·科尔在 Unsplash 上拍摄的照片
有很多很棒的 Python 库,但大多数都无法与内置的itertools和more-itertools相提并论。当涉及到在 Python 中处理/迭代一些数据时,这两个库实际上是整个厨房水池。然而,乍一看,这些库中的函数似乎并不那么有用,所以让我们来看看(在我看来)最有趣的函数,包括如何充分利用它们的例子!
压缩
当涉及到过滤序列时,您有相当多的选项,其中之一是compress,它采用 iterable 和 boolean 选择器,并输出 iterable 的项目,其中选择器中对应的元素是True。
我们可以使用它将一个序列的过滤结果应用到另一个序列,就像上面的例子一样,我们创建了一个日期列表,其中对应的计数大于 3。
积聚
顾名思义——我们将使用这个函数来累加一些(二元)函数的结果。这方面的例子可以是运行最大值或阶乘:
如果您不关心中间结果,您可以使用functools.reduce(在其他语言中称为fold),它只保留最终值,并且内存效率更高。
循环
这个函数采用 iterable 并从中创建无限循环。例如,在游戏中,玩家轮流游戏,这是很有用的。你可以用cycle做的另一件很酷的事情是创建简单的无限旋转器:
三通
来自itertools模块的最后一个是tee,这个函数从一个迭代器创建多个迭代器,这允许我们记住发生了什么。例如来自 itertools recipes (还有more_itertools)的pairwise函数,它从输入 iterable 返回成对的值(当前值和前一个值):
每当您需要指向同一数据流的多个单独指针时,这个函数就非常方便。不过在使用它的时候要小心,因为它在内存方面的开销非常大。同样需要注意的是,在对原始 iterable 使用了tee之后,不应该再使用它,因为它会弄乱(无意中推进)那些新的tee对象。
更多 _itertools
现在,让我们仔细看看more_itertools图书馆提供了什么,因为有许多有趣的功能,你可能没有听说过。
划分
从more_itertools开始的第一个是divide。顾名思义,它将 iterable 分成若干个子 iterable。正如你在下面的例子中看到的,子元素的长度可能不一样,因为它取决于被划分的元素的数量和子元素的数量。
划分
使用这个函数,我们也将划分我们的 iterable,但是这次使用一个谓词:
在上面的第一个例子中,我们使用简单的 lambda 函数将日期列表分为最近的和旧的。对于第二个例子,我们基于扩展名对文件进行分区,同样使用 lambda 函数,该函数将文件名分为名称和扩展名,并检查扩展名是否在允许的列表中。
连续组
如果您需要查找连续的数字、日期、字母、布尔或任何其他可排序的对象,那么您可能会发现consecutive_groups很方便:
在这个例子中,我们有一个日期列表,其中一些日期是连续的。为了能够将这些日期传递给consecutive_groups函数,我们首先必须将它们转换成序数。然后使用列表理解,我们迭代由consecutive_groups创建的连续序数日期组,并使用map和fromordinal函数将它们转换回datetime.datetime。
副作用
假设您需要在迭代条目列表时产生副作用。这种副作用可能是,例如,写入日志、写入文件或类似于以下示例中计数发生的事件数:
我们声明了一个简单的函数,它将在每次被调用时递增一个计数器。然后,这个函数和名为events的非特定 iterable 一起传递给side_effect。稍后当事件迭代器被使用时,它将为每一项调用increment_num_events,给我们最终的事件计数。
倒塌
这是另一个名为flatten的more_itertools函数的更强大版本。collapse允许你展平多层嵌套。它还允许您指定基本类型,以便您可以在剩余一层列表/元组的情况下停止扁平化。此功能的一个用例是展平熊猫。以下是一些更通用的例子:
第一个通过折叠os.walk返回的可重复项来生成文件和目录路径的列表。在第二种方法中,我们采用嵌套列表形式的树数据结构,并将其折叠以获得所述树的所有节点的平面列表。
拆分 _at
回到拆分数据。split_at函数根据谓词将 iterable 拆分成列表。这类似于字符串的基本split,但是这里我们用 iterable 代替字符串,用谓词函数代替分隔符:
上面,我们使用行列表来模拟文本文件。该“文本文件”包含带有-------------的行,用作分隔符。这就是我们用来把这些行分割成独立列表的谓词。
水桶
如果您需要根据某种条件将 iterable 分成多个桶,那么bucket就是您要找的。它通过使用键函数拆分输入可迭代对象来创建子可迭代对象:
这里我们展示了如何基于条目类型存储 iterable。我们首先声明几种类型的形状,并创建它们的列表。当我们用上面的键函数调用这个列表上的bucket时,我们创建了一个桶对象。这个对象像内置的Python一样支持查找。此外,正如您所看到的,整个 bucket 对象中的每一项都是一个生成器,因此我们需要对它调用list来实际获取其中的值。
Map_reduce
对于所有数据科学人士来说,这个库中最有趣的函数可能就是map_reduce。我不打算详细说明 MapReduce 如何工作,因为这不是本文的目的,已经有很多关于它的文章了。我要给你展示的是如何使用它:
这个 MapReduce 实现允许我们指定 3 个函数: key 函数(用于分类), value 函数(用于转换),最后 reduce 函数(用于缩减)。这些函数中的一些可以省略,以产生 MapReduce 过程中的中间步骤,如上所示。
一起排序\
如果您处理的是数据的电子表格,那么很有可能您需要按某一列对其进行排序。这对于sort_together来说是一个简单的任务。它允许我们指定根据哪一列对数据进行排序:
该函数的输入是可迭代对象(列)和key_list的列表,它告诉sort_together使用哪些可迭代对象进行排序以及优先级。在上述示例中,首先按出生日期对“表格”进行排序,然后按在列更新的进行排序。
可寻找的
我们都喜欢迭代器,但是在 Python 中你应该一直小心使用它们,因为它们的一个特性是它们消耗提供的 iterable。感谢seekable,他们不必如此:
seekable是一个将 iterable 封装在一个对象中的函数,使得在迭代器中来回遍历成为可能,甚至在一些元素被消耗之后。在这个例子中,你可以看到我们在遍历了整个迭代器后得到了StopIteration异常,但是我们可以返回并继续处理它。
过滤 _ 例外
让我们看看下面的场景:您收到了混合数据,其中包含文本和数字,并且都是字符串形式。然而,您只想处理数字(浮点数/整数):
filter_except通过将 iterable 的元素传递给提供的函数(float)并检查它是否抛出错误(TypeError, ValueError)来过滤输入 iterable 的项目,只保留通过检查的元素。
每个都是唯一的
unique_to_each是more_itertools库中比较晦涩的函数之一。它接受一堆 iterables 并从每个 iterables 中返回元素,这些元素不在另一个 iterables 中。最好看看例子:

在这里,我们使用邻接表(实际上是dict)来定义图数据结构。然后,我们将每个节点的邻居作为一个集合传递给unique_to_each。它输出的是一个节点列表,如果相应的节点被删除,这些节点将被隔离。
数字 _ 范围
这种方法有很多用例,因为需要迭代一系列非整数值是很常见的:
numeric_range的好处在于它的行为方式与基本的range相同。您可以像上面的例子一样指定start、stop和step参数,这里我们首先使用1.7和3.5之间的小数,步长为0.3,然后使用2020/2/10和2020/2/15之间的日期,步长为 2 天。
制作 _ 装饰
最后但同样重要的是,make_decorator使我们能够使用其他 itertools 作为装饰器,从而修改其他函数的输出,产生迭代器:
这个例子使用了map_except函数并从中创建了 decorator。这个装饰器将使用被装饰函数的结果作为它的第二个参数(result_index=1)。在我们的例子中,修饰函数是read_file,它模拟读取某个文件的数据,并输出一个可能是也可能不是浮点数的字符串列表。然而,输出首先被传递给 decorator,它映射并过滤掉所有不需要的项目,只给我们留下浮动。
结论
我希望你在这篇文章中学到了一些新的东西,因为如果你经常处理大量的数据,那么itertools和more_itertools可以让你的生活变得更加容易。然而,使用这些库和函数需要一些练习才能有效。所以,如果你认为你可以利用这篇文章中展示的一些东西,那么就去检查一下 itertools recipes 或者强迫自己尽可能多地使用这些东西,以适应它。😉
本文最初发布于martinheinz . dev
迈向数据科学博士
想升学?这里有一些情报!
我在澳大利亚开始高等教育已经有一年半多了。我选择的大学是澳大利亚国立大学(ANU)。在我写这篇文章的时候,它在 2020 年泰晤士大学排名中排名第 50 位。除了大学的排名之外,在选择大学的过程中还有许多其他的考虑因素。此外,在申请奖学金进行更高层次的研究之前、期间和之后,人们可能会想到的事情很少。所以我决定分享我的经历,也许有一天会发现这很有用。所以给你提个醒。如果你诚实地尝试,这并不难!

去哪里学习?
对于任何想在毕业后学习的人来说,这是一个关键的决定。我在选择国家时的几个主要考虑因素是:
- 研究和资助:我对生物信息学研究感兴趣。澳大利亚似乎是一个注重基因研究和相关领域研究的国家。几乎在所有情况下,博士研究都由学费、生活费(津贴)和某些职业发展津贴(会议出席和实验室设备)资助。
- 生活条件:津贴可以涵盖所有开支,不必强调覆盖工作时间以补偿房租和其他费用。
- 课程时长:通常大部分澳洲博士需要 3 到 4 年的时间。此外,我没有要求进行硕士学位,因为我做了一个荣誉学位的重要研究部分。毕竟,我不想再花 5 年多的时间学习。
- 入学要求:澳洲——雅思(ANU,工科综合 6+分)或者托福。美国和其他一些目的地——GRE(请阅读各个大学的要求)。
数据科学博士有哪些选择?
数据科学是一个广阔的领域,也是目前最具趋势的领域之一。在数据科学中,来自计算机科学和统计学等领域的知识被用来分析数据和了解关于数据的有趣的事情。因此,数学、统计学和计算机科学将是潜在博士生涯中有待发现的核心知识领域。
攻读数据科学博士学位可能意味着你将在生物学、医学、经济学、金融、农业和工程等领域开展研究,但不限于这些领域。随着生成和存储数据的方法的发展,所有这些领域都产生了大量的数据,创造了大量的研究机会。尽管是特定领域,数据科学博士学位将涉及基于收集的数据进行方法开发。然而,任何博士学位的最终目标都是通过创新方法等对人类知识做出贡献。总之,可以得出结论,在更高的抽象层次上,任何专业都有一个涉及数据驱动创新的点。
怎么找主管?
找到一个多产的工作人员来监督你永远是第一步。当我在寻找导师时,我找了蒙纳士大学、T2 大学、ANU 大学和 T4 大学。如果你知道什么可能是你感兴趣的领域(因为这是很难立刻定义的事情),找到一个主管总是很容易的。重要的事情先来!访问大学网站或者谷歌“莫纳什大学/ANU 大学/尤尼梅尔大学/UNSW 大学/QUT 大学的导师”或者任何你喜欢的大学。您可能会发现以下链接很有用。
- https://findanexpert.unimelb.edu.au/大学
- https://researchers.anu.edu.au/
- 莫纳什:https://www.monash.edu/research/our-researchers/find
- https://research.unsw.edu.au/finding-supervisor
- https://www.qut.edu.au/research/our-experts
如何接近主管?
这是你在开始学习之前可能要做的最困难和最困惑的事情之一。为了使事情变得简单,让我们如下缩小这一步。
最初的联系方式是大多数时候(如果不是总是)通过电子邮件。确保你的邮件给人留下好印象!这里有一个样本!
尊敬的教授姓名,
我是你的名字,来自你的机构。我于去年 12 月完成了计算机科学与工程的学士学位,我期待着获得博士学位的合适机会。我对在研究领域进行高等研究感兴趣,并且我看到了你在研究领域作为一名多产研究员的简介。
我读过你在研究领域的研究工作。延伸表达你的兴趣领域,提及一些你潜在的主管感兴趣的工作。我想问一下你是否愿意指导一个关于研究领域或相关领域的项目,或者对一个你想让博士生参与的项目有什么想法。
添加一个小句子,提及你最后一年的荣誉项目、一两篇重要出版物以及你目前的状态
提及你的学术地位(GPA/排名),让你看起来很有能力,以及你的一些主要成就
我感谢你宝贵的时间。期待一个有利的答复。
为了方便读者,我留下了我的简历和成绩单的链接。然而,你可能会注意到我的成绩单是不完整的(不是官方的)。因为不一定要这样。只要你能在以后的日子里公开一份原始拷贝,你就可以如实地展示你目前的状态。简历应该是学术风格的,并确保对于一个忙碌的人来说是简单易懂的。让一切都变得短暂而甜蜜!

我想到分享这个信息,因为它在开始时令人困惑。如果你对澳洲研究不感兴趣,跳过这一步。万事如意!与你的朋友分享。
干杯!
走向数据的万维网

照片由格雷格·拉科齐在Unsplash——https://unsplash.com/@grakozy拍摄
使用软件历史上最成功、可扩展的模式来解决数据科学和分析中最糟糕的问题。
数据,数据,无处不在…
…洋溢着 巨大的 潜能 价值 对于科学、商业和社会的发现。
不幸的是,对于价值发现/提取目的而言,大多数收集的数据的实际效用大大降低——就像喝咸海水一样,成本/收益是净损失。这是为什么?
- 收集的数据遭受极端变化——在编码格式、访问方法和定制的特定领域模式方面。即使有可能将整个数据源重新格式化和重组为标准的、与 SQL 兼容的表,仍然存在连接和解密大量不同的表/列模式的不可能任务。
- 收集的数据遭受内容 的不完整性——我说的不仅仅是缺失值。数据代表了什么?为什么要收集这些数据?设计/目的是什么?数据是从谁那里收集的,为谁收集的?存在哪些偏见或特殊情况?典型地,关于数据源的缺失信息被存储在领域专家的大脑中——也就是人类。这些人很少与他们拥有或曾经拥有的数据源在同一个地方。
各种数据来源
一片纯净、复杂的雪花,
迅速融化。
旧软件不能处理新的数据类型
所有的软件在发货的那一天就变旧了。
为价值发现/提取而构建的软件和算法被设计为在以显式格式或模式构建的源数据上运行。
因此任何软件的适用范围仅限于符合严格输入要求的数据源。有时,只需要重命名一个字段,算法或软件工具就会立即燃烧起来——或者更糟——产生无错的损坏工件(恐怖表情)。
例如,在数据科学中,已经投入了很多努力来将数据源转换成单个表(即一个 数据帧 ),其中一列表示要预测的类或结果,而其他列表示特征。因此,许多机器学习算法可以利用数据帧作为输入结构。
你通常无法让算法适应数据,所以你只能让数据适应算法或者换句话说 — 如果你不能加入他们(在你的算法中),击败他们(屈服)。**
对于像我自己一样有经验的人来说,很明显转换大量数据集以适应软件或算法一点也不容易。管理模式转换的复杂性(或者, ETL )是耗时的,充满了双输决策,并且经常丢失信息。
每次出现重要的新数据格式/模式时,升级或改造软件也不是一件容易的事情。即使对于一个假设的零技术债务的系统来说,开发每个新的 ETL 组件的增量成本也太高了。
它不可扩展。
这就是我们今天所处的位置——在一个充满不同的孤岛、模式、SQL 和单一数据湖的反乌托邦世界中,大多数收集到的数据源被随意隔离在一旁。
这就是 无用数据问题 。有些事情需要改变。
万维网设计模式
在过去的 50 年中,很难考虑有什么技术创新比环球网对世界的影响更大。
考虑一下世界上市值最高的公司,或者试着花几个小时不去查看社交媒体、工作邮件或谷歌搜索。互联网在我们的生活中无处不在。
【网络版】 软件正在吞噬世界。
这对于如上所述的无用数据问题意味着什么?*让我们来关注推动互联网革命的万维网设计模式的五个关键组成部分:*
- 网络服务器(例如 Apache)
- 网络客户端/浏览器(如 Netscape)
- 超文本传送协议
- HTML/JavaScript/CSS
- URL(例如 IP 地址和 DNS)
如果你有一个网络服务器,你可以向任何一个有网络客户端/浏览器的人提供你自己的 特定领域的内容——而不仅仅是那些明确构建来连接到你的服务器或解释内容的客户端。**
您可以在瞬间将您的应用扩展到数百万用户。
如果你有一个网络客户端/浏览器,你可以连接到任何公共网络服务器——而不仅仅是那些专门为响应你的客户端而构建的服务器。
你可以在一瞬间访问和使用数百万个网站中的任何一个。
Web 客户端通过一种通用语言与 Web 服务器通信: HTTP 。HTTP 有许多方法允许客户端向任何服务器发出请求。常见的 HTTP 请求格式是通用的——GET、POST、headers、authentication、SSL 等。
那么,在不了解任何领域的情况下,web 客户端如何从 web 服务器获取信息呢?带有用 HTML 和/或 JavaScript 实现的回调模式。
在从 web 客户端到 web 服务器的初始通用 HTTP 请求之后,来自服务器的响应不仅提供定义页面外观和工作方式的 HTML/JavaScript/CSS,对服务器(或其他 web 服务器)的特定回调** 也嵌入在响应中。
例如<一个 href="https://tag.bio" >,或者一个AJAX表达式。**
由 web 服务器提供的内容来恰当地传递有效的 HTML 和 JavaScript 代码,以便客户端呈现页面并进行回调——否则你会在浏览器中看到破碎的页面和链接。
因此,特定领域功能的负担落在 web 服务器的开发人员身上,而不是每个客户端和每个用户。这是可扩展的,因为特定领域的功能只需要实现一次,就可以用于多种用途。**
最后,万维网模式需要一个通用的寻址系统,这样当你在你的网络客户端键入一个 URL(例如 https://tag.bio),,)客户端将知道互联网路径以与正确的网络服务器通信。互联网地址的全球注册处 IP 系统和互联网地址的域名映射全球注册处 DNS 对此起到了促进作用。
能否利用 WWW 设计模式解决 无用数据问题 ?
数据网格体系结构

2019 年,ThoughtWorks 的 Zhamak Dehghani 发表了一篇励志文章,介绍了数据网格作为无用数据问题的拟议解决方案。从文章的摘要来看:
基于数据湖架构的数据平台有一些常见的故障模式,会导致大规模的承诺无法兑现。为了解决这些故障模式,我们需要从湖的集中式范例或其前身数据仓库中转移出来。我们需要转向一种借鉴现代分布式架构的范式:将领域视为首要关注点,应用平台思维来创建自助式数据基础架构,并将数据视为一种产品。
文章很长,技术密集,令人瞠目结舌。数据网格打破了围绕数据湖的最先进的思维,消除了将所有数据放在一个地方并将所有数据转换成单一模式的必要性(这是一个巨大、耗时、价值递减的棘手问题)。
数据网格的总体思想是数据源可以——也应该——留在原处。数据源应该由最了解该领域的人开发和部署为模块化的、独立的数据产品。这些人将能够最有效和高效地围绕他们的数据源开发有用的内容和功能。**
那听起来像什么? 万维网服务器 。该死的。
走向收集数据的万维网
让我们将 WWW 设计模式与数据网格架构结合起来,看看兔子洞能走多远。
以下是我们需要的(与上面列出的 5 个 WWW 组件直接匹配):
- 一个服务器应用程序— **一个数据产品* —它可以包装任何给定的数据源/模式而不改变它。该数据产品将配备一个 API,它可以与任何客户端进行通用的通信,而且还支持特定于域的请求和响应——以及对附加服务器功能的回调——而不会暴露源数据模式。保持客户端独立于源数据模式对于该模式的可伸缩性至关重要,因为如果源数据模式要改变——这种情况经常发生— 只有数据产品需要调整,而不是每个 gall-dang 客户端应用程序。***
- 一个客户端应用程序,即**一个数据门户 ,它可以与任何数据产品进行通用*通信,以了解它可以执行什么功能以及如何执行这些功能。数据门户应该能够将服务器响应处理为报告、可视化、训练有素的机器学习模型、原始数据切片,并将所有服务器响应存储为 有用的数据工件 以实现可再现性。*****
- 一个通用通信协议,方便任何数据门户和任何单个数据产品之间的一般通信。**
- 一个通用查询模式,它使每个数据产品能够提供一个带有回调功能的数据门户,以调用特定领域的、无模式的查询和算法。**
- 一个全球数据产品注册和寻址系统,以便数据门户可以找到并利用一个或多个数据产品中的功能。**
为什么它很重要
简而言之,万维网模式是一种创新的、可扩展的设计,用于最大限度地发现和提取组织内和世界各地收集的数据的价值。
一些主要优势:
- 数据产品发布者可以专注于他们自己的数据源* 和他们以及他们的同行最了解的算法,并即时发布他们的数据产品,以便从他们的组织内部或者从世界上的任何地方访问。***
- 数据门户用户可以在他们的组织内——或世界上的任何地方——快速找到和利用数据源,并使用域原生功能,而不必适应复杂的数据源模式。数据门户通过捕获有用的数据工件,支持数据研究和协作的可再现性。**
- ****适应数据模式变化或向模式中添加新数据源的负担只落在一个技术组件上——数据产品。
- ****在数据源上实现有用算法的负担主要落在最了解数据的数据产品发布者身上。值得注意的是,这可能不足以满足所有数据用例。另一种选择是,数据门户客户端调用数据产品的下载方法,提取原始数据或转换后的数据,然后执行外部算法。
模块化、领域驱动的设计——可扩展且有用!
数据门户对数据产品的要求
- 你有什么样的数据?最后一次更新是什么时候?
- 你们提供什么方法?
- 对于给定的方法,有哪些参数?
- 对于方法参数,有效的值集/范围是什么?
- 对于给定的方法,响应的模式/编码是什么?
- 请使用这些参数运行此方法。
- RESTful 和异步的、基于令牌的轮询(用于长期运行的方法)。
假设和考虑
- 数据门户不知道每个数据产品背后的显式数据模式。它只通过上面列出的问题来了解数据产品。这允许数据产品适应数据模式的变化,而不破坏每个 API 客户端。
- 正如 Data Mesh 文章中所发表的那样— 数据产品应该是不可变的。因此,客户端状态/会话必须由补充组件来维护。如果数据门户或算法调用数据产品中的数据转换,它应该产生/部署新的数据产品。
- 当数据产品包含大数据时,算法应该在数据产品中运行。当数据产品包含少量数据时,提取数据供外部使用更为可行。****
- 由于商业秘密或安全性/合规性的原因,许多数据集受到限制 —用户认证和授权是必须的。但是,如果在数据产品应用程序之外管理安全模型,数据产品本身会更加灵活,也就是说,数据产品应该不知道单个用户。
- 数据产品应该支持执行从数据门户或通过 API 提交的远程代码吗?这是一个强大的选项,但它带来了巨大的安全风险,这在过去一直困扰着 WWW 小心行事。
- ****数据、算法/方法和通信协议的版本必须明确,并由每个数据产品和数据门户管理。没有版本控制就没有可复制性。
- 来自数据产品的算法/方法响应应该在数据门户中产生 有用的数据工件(udat)。UDATs 应该包含定义其来源的出处编码,以便能够可靠地解释和复制它们。****
- 全球数据产品注册管理机构以及数据产品本身应遵守 公平原则 。
这会产生什么影响?需要检验哪些假设?请在下方留言评论。
对于我们自己的这个模式的实现,请访问 Tag.bio 。
如果你已经读到这里,但还没有阅读 ThoughtWorks 的数据网格文章,请现在就阅读。
亿万亿,
闪闪发光的星星和它们的秘密;卡尔梦见,“我必须知道!”
迈向语音转文本的 ImageNet 时代
结合现有的想法和技术,向实用的 STT 迈进
原载于 2020 年 3 月 28 日https://the gradient . pub。所有的引用和参考文献都保留在原来的文章中。Medium 也没有任何方便的目录特性,所以我也将保留原始链接。在适当的地方,我会提供文章原文部分的链接。我还提供了更多最新基准的链接。
语音转文本(STT),也称为自动语音识别(ASR),有着悠久的历史,并在过去十年中取得了惊人的进展。目前,人们通常认为,只有像谷歌、脸书或百度(或地方政府支持的俄语垄断企业)这样的大公司才能提供可部署的“野外”解决方案。这是由于几个原因:
- 论文中通常使用的高计算要求设置了人为的高准入门槛;
- 由于不同的词汇、说话者和压缩伪像,需要大量数据的语音;
- 一种放弃实际的解决方案而倾向于不切实际的、先进的解决方案的心态(SOTA)。
在这篇文章中,我们描述了我们通过以下方式在全球和俄语领域缓解这些问题的努力:
- 介绍在 CC-NC-BY 许可下发布的多样化的 20,000 小时开放 STT 数据集;
- 证明仅使用两个消费级和广泛可用的 GPU 就可以实现有竞争力的结果;
- 提供了大量的设计模式,为广大研究人员和从业者进入语音领域提供了民主化的入口。
介绍
随着计算机视觉的成功和民主化(所谓的“ImageNet moment”,即减少硬件要求、上市时间和生产可部署产品的最小数据集大小),合乎逻辑的是希望机器学习(ML)的其他分支也将效仿。唯一的问题是,什么时候会发生,发生的必要条件是什么?
在我们看来,给定 ML 子场中的图像网时刻在以下情况下到达:
- 解决 95%的标准“有用”任务所需的架构和模型构建块作为标准和经过测试的开源框架模块广泛可用;
- 大多数受欢迎的型号都有预先训练的重量;
- 解决了从使用预训练模型的标准任务到不同日常任务的知识转移;
- 与之前在论文中报告的计算需求(在 STT 为 100-1000 GPU 天)相比,为日常任务训练模型所需的计算非常少(例如,在 STT 为 1-10 GPU 天);
- 用于预训练大型模型的计算机可供小型独立公司和研究小组使用;
如果满足上述条件,人们就能以合理的成本开发新的有用的应用。民主化也发生了——人们不再需要依赖谷歌这样的大公司作为行业内唯一的真理来源。
我将在整篇文章中提到“有用性”。从广义上讲,我们坚信,当某样东西为整个社会带来非零和的结果,并且没有彻底的输家时,它就是有用的。这意味着大多数人或多或少都从这件事情中受益,而不仅仅是少数特权阶层。此外,考虑到一些有用的东西,至少应该没有对某个种族或收入群体的负面歧视。例如,如果“完美的”自动驾驶汽车大规模部署,一些工作将不得不演变,但总体而言,这项技术将是“有用的”。如果大规模部署“完美”的人脸检测,它可能会加剧更多的问题,而不是解决更多的问题。这是非常主观的,所以要有所保留。
这件作品将描述我们对 STT 的影像网络时刻的追求,这一时刻至今尚未找到,尤其是在俄语的语境中。我们的主要目标是在有限的计算预算下尽可能快地构建和部署有用的模型,并分享我们的成果,以便其他人可以基于我们的发现,这样我们就可以共同实现 STT 的 ImageNet 时刻。
这不是一篇传统的同行评议的研究论文,而是一篇总结,总结了我们结合现有的思想和技术,朝着有用和实用的 STT 前进的务实尝试。
我们决定以这种形式分享它,而不是在会议上或 arxiv 上以论文的形式,这样我们的发现就能被尽可能多的人获得。虽然确保技术正确性的同行评审当然是有用的,但由于使用了大量现有的想法和我们提供的经验结果,我们对我们的主张很有信心。我们将单独撰写一篇文章,解释为什么我们认为当前同行评审和公司支持的研究不是社会整体进步的最快途径;简而言之,虽然这些有缺陷的系统长期有效,但在短期内有更快的方法来取得进展。
简而言之——这里介绍的想法在生产中确实有效,并且已经过域外验证。更重要的是,它们中的大多数都很实际,不需要昂贵的硬件或大量代码。我们欢迎反馈和批评—aveysov@gmail.com
相关工作及启示
在我们的实验中,我们选择了以下技术:
- 用于声学建模的前馈神经网络(主要是具有挤压和激励和变压器块的分组 1D 卷积);
- 连接主义者时态分类loss(CTC loss);
- 由作为建模单元的字素(即字母表字母)组成的复合记号(与音素相对);
- 使用预训练语言模型(LM)作为解码器的波束搜索。
有很多方法可以接近 STT。讨论它们的缺点和优点超出了这里的范围。本文中的所有内容都是关于主要使用字素(即字母)和神经网络的端到端方法。
简而言之,为了训练端到端的字形模型,您只需要许多带有相应转录的小音频文件,即 file.wav 和 transcription.txt。您还可以使用 CTC loss,这减轻了对时间对齐注释的要求(否则,您将需要自己提供对齐表或在您的网络中学习对齐)。CTC 损失的一种常见替代方法是标准分类交叉熵损失,但它本身训练缓慢,通常与 CTC 损失一起使用。
选择这个“堆栈”有几个原因:
- 可扩展性。您可以通过添加 GPU 来扩展您计算机;
- 面向未来。如果一个新的神经网络模块成为主流,它可以在几天内集成和测试。迁移到另一个框架也很容易;
- 简单。也就是说,使用 Python 和 PyTorch,你可以专注于实验,而不是解决遗留的限制;
- 灵活性。在 Python 中构建适当的代码,你可以在几天内测试新的特性(例如,扬声器二进制化);
- 通过在解码器中不使用注意力,也不使用音素或递归神经网络,我们实现了更快的收敛,并且需要对我们的模型进行更少的维护;
打开语音转文本(俄语)
我们所知道的所有公开可用的监督英语数据集都小于 1000 小时,并且具有非常有限的可变性。一篇开创性的 STT 论文提出,你需要至少 10,000 小时的注释来建立一个合适的 STT 系统。1,000 小时也是一个好的开始,但是考虑到泛化能力的差距(将在下面讨论),您需要大约 10,000 小时的不同领域的数据。
典型的学术数据集有以下缺点:
- 太理想了。在工作室录制的,或者与真实世界的应用相比太干净;
- 领域太窄。STT 的难度遵循这个简单的公式:噪音水平词汇量说话人数量;
- 大多只会英语。虽然像 Common Voice 这样的项目在某种程度上缓解了这种限制,但是你不能可靠地找到大量除了德语和英语之外的语言的数据。此外,普通语音可能比语音到文本更适合于说话人识别任务,因为它们的文本不是非常多样化;
- 不同的压缩。Wav 文件几乎没有压缩失真,因此不能代表以不同方式压缩的真实声音字节;
由于这些缺点,大约 6 个月前,我们决定收集并分享一个前所未有的俄语口语语料库。我们最初的目标是 10,000 小时。据我们所知,这甚至在英语中也是前所未有的。我们已经看到尝试做类似我们的工作,但是尽管有政府资助,他们的数据集并不公开。
最近,我们发布了数据集的 1.0 测试版。它包括以下领域:

我们的数据收集流程如下:
- 收集一些数据,然后使用试探法进行清理;
- 训练一些模型,并使用这些模型进一步清理数据;
- 收集更多数据,并使用对齐功能将抄本与音频对齐;
- 训练更好的模型,并使用这些模型进一步清理数据;
- 收集更多数据,手动标注部分数据;
- 重复所有步骤。
你可以在这里找到我们的语料库,你可以在这里找到支持我们的数据集。
虽然这已经很可观了,但我们还没有完成。我们的短期计划是:
- 做一些内务,多清理数据,清理一些遗留代码;
- 迁移到。ogg 以便在保持质量的同时最小化数据存储空间;
- 增加几个新领域(法庭对话、医学讲座和研讨会、诗歌)。
PS。我们做了所有这些,我们的数据集甚至出现在 azure 数据集上,现在我们计划发布 3 种新语言的预训练模型:英语/德语/西班牙语。
制作一个很棒的演讲文本模型

要建立一个伟大的 STT 模式,它需要以下特征:
- 快速推断;
- 参数高效;
- 易于维护和改进;
- 不需要大量的计算训练,2 x 1080Ti 或更少的机器应该足够了;
我们将这些作为我们的目标,并在下面描述我们是如何实现它们的。
传统上,模型是通过在几个
固定的“理想”不可见的验证数据集上进行基准测试来选择的。在前面的章节中,我们
解释了如果您考虑到真实世界的使用情况,并且唯一可用的数据集是学术数据集,那么这为什么是次优的。给定有限的
资源来适当地比较模型,您需要一个完全不同的
方法,我们在本节中介绍。还要记住,当您处理真实的野外数据时,没有“理想的”验证数据集,您需要分别对每个域进行验证。
通常当在一些公共数据集(例如
ImageNet)上报告一些结果时,研究人员据称使用不同的
超参数从头开始运行完整的实验,直到收敛。此外,一个好的做法
是运行所谓的烧蚀测试,即通过
比较有和没有这些特征的模型的性能来测试
模型的附加特征是否实际有用的实验。
在现实生活中,从业者无法负担得起
从零开始运行成百上千个实验直到
收敛,或者构建一些花哨的强化学习代码来
控制实验的奢侈。此外,文献中过度参数化方法的优势
和面向企业的工具包的可用性
阻碍了研究人员深入优化他们的管道。当你
探索硬件选项时,在专业或云领域
会偏向昂贵且不切实际的解决方案。
阅读 此处 更多了解我们的型号选择方法。
取得的总体进展

最初,我们从 PyTorch 中的深度演讲 2 开始。原始 Deep Speech 2 模型基于速度较慢的 deep LSTM 或 GRU 循环网络。上图展示了我们能够添加到原始管道中的优化。更具体地说,我们能够在不影响模型性能的情况下做到以下几点:
- 将模型尺寸缩小 5 倍左右;
- 将其收敛速度提高 5-10 倍;
- 小型(25M-35M 参数)最终模型可以在 2x1080 Ti GPUs 上训练,而不是 4 个;
- 大型号仍然需要 4x1080 Ti,但与小型号相比,最终 CER 稍低(低 1-1.5 个百分点)。
上面的图表只有卷积模型,我们发现它比递归模型快得多。我们开始了获得这些结果的过程,如下所示:
- 使用 Deep Speech 2 的现有实现;
- 在 LibriSpeech 上运行一些实验,我们注意到 RNN 模型与其卷积模型相比通常非常慢;
- 添加了一个普通的 Wav2Letter 启发的模型,实际上对于俄语来说参数化不足,所以我们增加了模型大小;
- 注意到这个模型还可以,但是训练非常慢,所以我们试图优化训练时间。
因此,我们随后探索了以下改进方法:
- 想法 1 —模型步幅
- 想法 2——紧凑的正则化网络
- 想法 3 —使用字节对编码
- 想法 4 —更好的编码器
- 想法 5——平衡容量——永远不再使用 4 个 GPU
- 想法 6——稳定不同领域的培训,平衡推广
- 想法 7——制作一个非常快速的解码器
请跟随此 链接 详细了解这些想法。
模型基准和推广差距
在现实生活中,如果模型在一个领域上被训练,那么在另一个领域上将会有显著的泛化差距。但是一开始就存在泛化差距吗?如果有,那么域之间的主要区别是什么?你能训练一个模型在许多合理的领域里工作得很好,并且有不错的信噪比吗?
有一个概括的差距,你甚至可以推断出哪些 ASR 系统是在哪些领域被训练的。此外,根据上面的想法,你可以训练一个即使在未知领域也能正常运行的模型。
根据我们的观察,这些是导致领域之间泛化差距的主要差异:
- 整体噪音水平;
- 词汇和发音;
- 用于压缩音频的编解码器或硬件;

显然现在这个图表已经很老了,你可以在 silero.ai 上找到更多最新的俄语指标
该基准测试包括声学模型和语言模型。声学模型在 GPU 上运行,结果累加,然后在多个 CPU 上运行语言模型后处理;
有关更详细的基准测试、生产使用和基准测试分析的一些想法,请点击 这里 。有关最新的基准测试,请点击此处的(俄语)。
进一步工作
以下是我们测试过的一些想法(其中一些甚至可行),但我们最终认为,它们的复杂性并不能证明它们所提供的好处:
- 摆脱渐变剪辑。渐变裁剪需要 25%到 40%的批处理时间。我们尝试了各种方法来摆脱它,但无法做到不遭受收敛速度的严重下降;
- 亚当,诺沃格勒和其他新的和有前途的优化。根据我们的经验,他们只处理简单的非语音相关领域或玩具数据集;
- 序列间解码器,双重监控。这些想法行得通。使用分类交叉熵损失而不是 CTC 的基于注意力的解码器是出了名的慢启动者(你将语音解码添加到已经繁重的对齐任务中)。混合网络并没有表现得更好来证明它们的复杂性。这可能只是意味着混合网络需要大量的参数微调;
- 基于音素和音素增强的方法。虽然这些帮助我们调整了一些过度参数化的模型(100-150M 参数),但它们被证明对较小的模型不是很有用。令人惊讶的是,谷歌的一项广泛的标记化研究得出了类似的结果;
- 宽度逐渐增加的网络。计算机视觉中的一种常见设计模式,到目前为止,这种网络比具有相同网络宽度的网络收敛得更差;
- 空闲块的使用。乍一看,这并不奏效,但也许需要更多的时间才能奏效;
- 尝试任何类型的可调滤波器,而不是 STFT。我们尝试了可调 STFT 滤波器和 SincNet 滤波器的各种实现,但是在大多数情况下,我们甚至不能用这样的滤波器稳定模型的训练;
- 训练一个不同步幅的金字塔形模型。我们在这方面没有取得任何进展;
- 使用模型提取和量化来加速推理。当我们在 PyTorch 中尝试原生量化时,它仍处于测试阶段,而且还不支持我们的模块;
- 添加补充目标,如扬声器双音化或噪音消除。噪音消除工程,但它被证明是更多的审美用途;
作者简介
Alexander Veysov 是 Silero 的一名数据科学家,Silero 是一家开发 NLP / Speech / CV 产品的小公司,他也是《开放 STT》——可能是最大的公开俄语口语语料库——的作者。Silero 最近推出了自己的俄罗斯 STT 发动机。此前,他曾在一家总部位于莫斯科的风险投资公司和 Ponominalu.ru 工作,后者是一家被 MTS(俄罗斯主要电信公司)收购的票务初创公司。他在莫斯科国立国际关系大学(MGIMO)获得了经济学学士和硕士学位。可以在 电报 (@snakers41)关注他的频道。
致谢
感谢《渐变》杂志的安德烈·库连科夫和雅各布·安德森对这篇文章的贡献。
引用
学术语境或书籍中的归属,请将本著作引用为
Alexander Veysov,“迈向语音转文本的 ImageNet 时刻”,The Gradient,2020。
BibTeX 引文
**@ article { vey SOV 2020 towardimagenetstt,
author = {Veysov,Alexander},
title = { Toward ' s an ImageNet Moment for Speech-to-Text },
journal = {The Gradient},
year = {2020},
how published = { \ URL {https://The Gradient . pub/Toward-an-ImageNet-Moment-for-Speech-to
对恢复的新冠肺炎病例进行更好的估计
呼吁在我们的公共话语中多一点贝叶斯思维
TL;DR——在过去的两周里,关于新冠肺炎抗体的初步血清学检测结果已经公布了很多。最早的例子之一是斯坦福大学一份广为流传的研究草案。该研究的作者估计圣克拉拉县(加利福尼亚州)3300 名受试者中的抗体可能流行率为 1.5%,尽管他们也接受了将真实流行率置于 1.11 至 1.97%范围内的不确定性(95%的置信度)。本文解释了如何考虑处理不确定性和观察数据的众所周知的统计和机器学习概念,特别是贝叶斯定理,将更现实地估计真实患病率位于 0.2%至 2.1%的更大范围内(95%可信)。正如其他科学家所批评的那样,如果最初就能发现如此大的误差,斯坦福大学研究的作者对不确定性的更仔细考虑可能会避免该研究最初发现的过度耸人听闻。

我可以想象,在我们这个以 COVID 为中心的新世界中,每个人都找到了自己收集、筛选和解释数据、新闻以及关于正在发生的事情和地点的信息的方式。对我来说,我一直着迷于世界各地正在发生的数据科学和建模,以了解这种病毒的性质及其对公共卫生和经济的影响。除此之外,我一直对一种“新常态”的出现非常着迷(如果不是一点点担心的话),这种“新常态”指的是学术界产生的关键科学研究如何影响政策。我们已经很快到达了这样一个点,几个而不是一个未经审查的流行病学模拟研究和测试结果的预印本已经成为重大新闻标题和政策决定的驱动力,对国家经济和公共卫生战略产生了重大影响。当然,这并非没有充分的理由。这场危机要求我们根据现有的最佳数据、分析和专家做出紧急、直接的决策。做出关键决定的时间窗口,如选择是否以及何时触发留在家中的订单,与大多数典型的学术期刊审查流程不一致。未来几年,我们是否在这场危机开始时观察到了正确的数据,听取了正确的声音(澄清一下,我不是其中之一),将会引发很多争论。这篇文章更侧重于我们现在才开始关注的一组特定数据:新冠肺炎抗体的血清学检测。
在过去的两周里,血清学检测已经成为新冠肺炎数据收集工作的新领域。获取这些数据似乎对回答我们未来面临的重要问题至关重要:在过去几个月里,我们漏诊了多少轻度或无症状的新冠肺炎病例?我们离所谓的“群体免疫”还有多远?我们应该考虑给那些体内检测出抗体的人发放“免疫护照”吗?
这可能部分是由于我们的兴趣(或不耐烦?)为了尽快回答这些问题,斯坦福大学的 Bendavid 等人在 4 月初发表的一项研究以其惊人的结果迅速引起了媒体和公众的注意。如果你不熟悉它,你可以阅读最初的研究,或者可能阅读一些立即涉及它的文章。该研究的作者对加利福尼亚州圣克拉拉县的 3300 名成人样本进行了血清学测试。他们发现 3300 名受试者中有 50 人新冠肺炎抗体检测呈阳性。当这一结果被外推以反映圣克拉拉县的全部人口时,作者估计,在过去几个月中感染新冠肺炎的真实人数可能比迄今为止诊断的人数高“50 至 80 倍”。
尽管斯坦福大学研究的披露令人震惊,更不用说头条新闻了,但没过多久,一群科学家就(理所当然地)对斯坦福大学论文的作者如何解释他们的结果并得出结论进行了抨击。对这项研究最值得注意的批评来自哥伦比亚大学的 Andrew Gelman 教授,这位统计学家非常忠实地撰写了关于现代统计数据分析方法的教科书。(原谅我,常客们,把“贝叶斯”等同于“现代”。请不要让这个毁了你的一天。)。
这篇文章表明,如果在斯坦福大学的研究中透明地进行,关注处理不确定性的贝叶斯方法将如何揭示一个更广泛的,最终不那么耸人听闻的关于圣克拉拉县新冠肺炎抗体流行的结论。明确地说,这篇文章的目标读者不是统计学家或流行病学家,我怀疑他们在大学里学过这些方法。相反,本文是为对不确定性分析和贝叶斯定理感兴趣,但又迫切需要真实用例的应用科学家、科学记者或精通数学的读者而写的。本文采用的方法摘自学术参考文献[2–4]。
第一部分:用于描述诊断测试准确性的变量
当我们对普通人群进行血清学检测时,我们可能会直觉地认为产生阳性结果的检测百分比可能等于(或足够接近)受检人群中抗体的流行率。毕竟,如果我们的测试不是高度准确的,我们为什么要继续花钱测试我们的人口呢?
这是斯坦福大学研究中提出的一个问题的关键。事实证明,该研究中应用的测试误差——虽然看起来很小——却大到足以对该研究的总体建议的可信度产生怀疑,即圣克拉拉县的实际新冠肺炎感染人数实际上比官方检测的数字高出“50-80 倍”。
为了说明原因,我们首先引入两个关键变量,这两个变量告知任何疾病的诊断测试,或者被任何疾病的诊断测试告知:该疾病在抽样人群中的患病率,以及首先检测为该疾病阳性的概率。
首先,让我们想象一下,我们有 100 个人,我们绝对肯定地知道其中 36 人有新冠肺炎抗体。在这种情况下,我们可以计算出患病率为 36/100 = 0.36 = 36%。我们也可以用概率来重写这个变量, p ,因为我们可以假设在这 100 个人口中,任何随机选择的个体都有 36/100 的机会拥有新冠肺炎抗体。所以,如果我们代表一个拥有 V+ 抗体的个体,那么我们可以把患病率称为 p(V+) = 36/100 = 0.36。
我们要介绍的第二个变量是抗体检测阳性的概率, p(T+) 。如果在上述 100 个个体的群体中,发现 30 个使用特定的测试试剂盒实际测试抗体呈阳性,那么我们可以进行初步估计,即 p(T+) = 30/100 = 0.30。
在这个特定的场景中,我们已经可以看到这里有一个错误。检测呈阳性的概率低于实际拥有新冠肺炎病毒抗体的概率。具体来说,看起来这个测试很容易产生假阴性。然而,我们必须考虑到这可能不是测试的唯一错误(因此我们估计 p(T+) 的方法也可能不太正确)。让我们看看下面这个由 11 个人组成的随机测试样本的例子:

在总共 11 个样本中,有 8 个实际阳性病例,只有 7 个样本检测为阳性。在这 7 个阳性测试中,2 个是假阴性的结果,因此只有 5 个阳性与实际阳性病例相匹配。另外两个实际案例导致假阴性测试。因此,在逐个样本的基础上,诊断测试可以正确地识别阳性病例,可以正确地识别阴性病例,或者它可能错误地对已知的阳性病例产生阴性结果,或者它可能错误地对已知的阴性病例产生阳性结果。在任何类型的诊断测试中,后两种错误的程度可以分别通过测试的灵敏度 和特异性来确定。
灵敏度 确定了诊断测试在检测病例时的准确性,这些病例将通过所谓的“金标准”进行识别,即 100%准确的参考诊断。在上表中,我们看到八分之五的真阳性病例也检测为阳性。如果这是我们得到的确定测试灵敏度的唯一数据,我们估计为 5/8 = 0.625 = 62.5%。
特异性确定诊断测试在检测已知阴性病例时的准确性。对于新冠肺炎血清学检测,这将意味着成功地识别出那些(尚未)在其系统中具有相关量抗体的个体。在上表中,每三个实际阴性病例中只有一个测试结果也是阴性。因此,特异性估计为 1/3=0.333=33.3%。这是一个非常可怕的测试!)
在我们的数学公式中,我们将敏感性和特异性表示为两个术语,分别为 p (𝑇+|𝑉+)和 p (𝑇−|𝑉−)。
敏感度, p (𝑇+|𝑉+),被认为是对已知阳性病例𝑉+的任意测试将产生阳性测试结果𝑇+.的概率同样地,
特异性, p (𝑇−|𝑉−),是对一个已知未感染病例——𝑉−——的任意测试将产生一个阴性结果——𝑇−.的概率(对于那些以前没有见过这种类型的符号的读者来说,当你看到“ | ”符号时,想到“given”这个词会有所帮助)。
第二部分:根据已知的特异性和敏感性估计患病率
在这一点上,我们知道,如果抗体检测不是 100%准确,检测人群中新冠肺炎抗体的流行率很可能与抗体检测呈阳性的病例数不同。这里有一个错误,这个错误(至少)归因于测试的灵敏度和特异性。那么我们如何在这些不同的参数和疾病流行率之间建立清晰的数学联系呢,𝑉+?
“全概率法则”的“美”就在于此。我试图用几句话来解释这一点,可能对这篇文章(或统计科学)不公平,但还是来了。如果我们对一个随机的人群进行抽样,以确定任何样本检测出𝑇+新冠肺炎病毒阳性的概率,我们知道每个检测出阳性的人只能有两种身体状况:他们要么拥有𝑉+病毒的抗体,要么没有𝑉−.病毒的抗体全概率法则允许我们以这两种表现的组成概率之和的形式来估计 p(𝑇+),例如:

使用“全概率”规则非常有用,因为我们现在开始看到我们引入的一些变量之间建立的数学关系,如敏感度, p (𝑇+|𝑉+)和患病率, p (𝑉+).为了让数学看起来简单一点,从现在开始,我们将对𝑆𝑒使用敏感性术语 p (𝑇+|𝑉+),对𝑃𝑣.使用流行性术语 p (𝑉+)我们现在有:

我们可以进一步清理。不拥有抗体的概率𝑝(𝑉−)一定与拥有抗体的概率𝑃𝑣.有关如果 10 个人中有 9 个人有抗体,𝑃𝑣=9/10=0.9,那么通过推论,10 个人中只有 1 个人一定没有抗体,𝑝(𝑉−)=1/10=0.1.因此我们可以假设𝑝(𝑉−)=1−𝑃𝑣.误报的概率,𝑝(𝑇+|𝑉−),可以遵循类似的规则,如
𝑝(𝑇+|𝑉−)=1−𝑝(𝑇−|𝑉−).我们已经引入了最后一项作为特异性,如果我们现在把这一项和𝑆𝑝联系起来,我们可以把这个关系写成𝑝(𝑇+|𝑉−)=1−𝑆𝑝.
最后,我们现在能够将𝑝(𝑇+方程提炼为仅测试的灵敏度、特异性和患病率的函数:

如果我们的目的是对患病率进行估计,我们也可以重新排列等式:

最后,我们似乎可以仅仅从这个等式中梳理出斯坦福/圣克拉拉研究的验证。在下面的要点中,给定斯坦福研究中陈述的 Sp 和 Se 的确定性值,并假设 p (𝑇+) = 50/3330,我对抗体 Pv 的患病率进行点估计。
我已经从本文的内容中排除了上面的例子,因为它离题太远,最终不适用于我们正在评估的现实世界的问题。当且仅当我们绝对确定地知道 Se 和 Sp 时,我们才能接受使用上述等式的 Pv 的点估计。不幸的是,我们不能,正如斯坦福研究的作者也不能。甚至诊断测试的报告错误也可能有错误。
第三部分:当血清学试验的敏感性和特异性不确定时,估计患病率
为什么我们不能 100%确定诊断试验的特异性和敏感性的真实值,这可能有几个原因。例如,尽管我们尽了最大努力,我们可能永远无法将测试的诊断性能与本身 100%准确的“黄金标准”测试进行比较。在 Andrew Gelman 对斯坦福研究的评论中,他讨论了该研究的作者在估计他们测试的特异性和敏感性的误差时所采用的令人困惑的方法。
尽管如此,我们仍然可以证明斯坦福研究结论所面临的核心问题,即使我们从表面价值上考虑该研究自己对敏感性和特异性不确定性的估计。虽然作者对 Se 的总体估计为 80.3%,但他们认为 Se 的真实值可能在 72.1%至 87%的更大范围内(95%的置信度)。作者同样估计他们的测试的真实的 Sp 在 98.3 到 99.9%的范围内(95%的置信度)。
尝试以概率分布的形式来描述这些误差是有帮助的,这给了我们一种𝑆𝑒=0.721 与𝑆𝑒=0.803.相比的可能性有多大的感觉文献[2,3]中通常使用贝塔分布来表示𝑆𝑒和𝑆𝑝的估计误差,因此我将通过数值拟合分布来估计𝑆𝑒和𝑆𝑝贝塔分布的关键参数,使得每个分布的 95 %置信区间等于斯坦福研究中提供的𝑆𝑒和𝑆𝑝的 95 %置信区间的界限。
from scipy import stats
from scipy.optimize import differential_evolution
from scipy.stats import beta
import numpy as np# This code is a lazy solver, from a human’s perspective.
# It uses a a fairly raw evolutionary algorithm to search for
# the values of Beta distribution parameters ‘alpha’ and ‘beta’
# that characterise the assumed prior distributions for
# sensitivity (Se) and specificity (Sp). Could this be done
# analytically? Of course it could, but I’m lazy.alpha = 0.05 # This tells the solver that we’re
# providing it with input values
# that correspond with the 95% CI of estimates,
# where alpha = 1 — CI.# Confidence intervals of estimated uncertainty in
# sensitivity and specificity as reported from
# Stanford / Santa Clara Study (April 17, 2020 pre-print)Se_lower_95 = 0.721
Se_upper_95 = 0.87
Sp_lower_95 = 0.983
Sp_upper_95 = 0.999# Establish and run the solver for Beta probability distributions that fit to prior estimates of Se and Spdef results_Se(x):
lower_est,upper_est = beta.ppf(alpha / 2, a=x[0], b=x[1]),
beta.ppf(1 — alpha / 2, a=x[0], b=x[1]) return ((Se_lower_95-lower_est)**2 +
(Se_upper_95-upper_est)**2)**0.5def results_Sp(x):
lower_est,upper_est = beta.ppf(alpha / 2, a=x[0], b=x[1]),
beta.ppf(1 — alpha / 2, a=x[0], b=x[1]) return ((Sp_lower_95-lower_est)**2 +
(Sp_upper_95-upper_est)**2)**0.5res_Se = differential_evolution(results_Se,
tol = 0.0000001,
bounds=((0.00001,3000),
(0.00001,3000)))res_Sp = differential_evolution(results_Sp,
tol=0.0000001,
bounds=((0.00001,3000)
(0.00001,3000)))# Extract estimates for alpha and betas of
# Beta distributions for Se and Spalphas = [res_Se.x[0],res_Sp.x[0]]
betas = [res_Se.x[1],res_Sp.x[1]]
定义了 Beta 分布的关键参数后,我们可以绘制这些分布,并将其与源数据进行比较。

成功。我们的贝塔分布的特征(众数和置信区间)与研究数据非常匹配。我们现在还应该考虑如何描述我们对𝑃𝑣.的初始估计的概率分布的特征虽然本文的目的是对𝑃𝑣进行修正估计,但在后面的方法中,我们也要对这个参数进行初始估计,这一点很重要。
我在想,一个保守的,尽管普遍不了解情况的估计是,𝑃𝑣可能在 0%到 3%的范围内。然而,因为我对𝑃𝑣更有可能是 0%还是 1.5%还是 2%还是 3%没有什么初步概念,所以我将假设𝑃𝑣是这些数字中的任何一个的可能性相等,或者介于两者之间。这需要均匀的概率分布:

现在,要以一种既能让不熟悉贝叶斯统计的人满意,又能让熟悉贝叶斯统计的人满意的方式来解释剩余的过程变得越来越困难了。提前道歉。让我们再来看看我们的临界方程:

利用这个等式,我们可以从对𝑆𝑒、𝑆𝑝和𝑝(𝑇+的预测中推断出对𝑃𝑣的预测,但在所有这些中,哪里有空间根据我们从真实世界测试中获得的对𝑇+的实际观察来校准、调整或修正我们的预测呢?最后,这里进入贝叶斯定理,它为我们提供了一种将模型预测的估计概率与现场观察到真实事件的概率联系起来的方法。贝叶斯定理认为:

如果我们让阳性检验率的预测值𝑝(𝑇+ =𝑃𝑡,𝑛和𝑘分别代表样本总体的大小和返回阳性检验的数量,那么我们可以将贝叶斯定理应用于我们的问题,如下所示:

到目前为止,我们已经介绍了解决上述方程所需的所有项,除了可能性,𝑇+|𝑃𝑡).的𝑝(observations 惯例是对这种类型的情况使用二项分布。二项式分布表示在给定模型的情况下,从𝑛样本中观察到𝑘病例的概率,在我们的情况下,该分布变为:

我知道这个理论已经让人精疲力尽了,但我知道我无法在一篇短文中做出恰当的解释。好消息是我们已经走到了尽头。我们现在有了一个全面的、可解决的模型,可以通过以下步骤来执行:
- 我们可以从𝑆𝑝.𝑆𝑒的初始(先验)概率分布中随机抽取值和𝑃𝑣,并得出对𝑃𝑡的估计
- 我们可以将我们对𝑃𝑡的估计与观察到的记录(即𝑛=3300).的𝑘=50 病例检测呈阳性)进行比较这使我们能够评估我们对𝑆𝑒、𝑆𝑝和𝑃𝑣的估计是否会产生对𝑃𝑡的估计,而这种估计是否有数据支持。
- 我们可以重复步骤(1)和(2)很多次(成千上万次),以确定𝑆𝑒、𝑆𝑝和𝑃𝑣的哪个值更有可能出现(假设𝑝(observing 𝑘在𝑛测试了|𝑃𝑡)
- 我们可以整理在步骤 3 中发现的所有新的估计值 Se 、 Sp 和 Pv ,并规定这些参数的一组更新的(也称为后验)概率分布
从第 1 步到第 4 步的整个过程被称为贝叶斯推理,但是解释我们如何通过计算实现这些步骤需要更多的信息和知识,这是我所能提供的(或花费的时间)。我将开门见山地说 PyMC3 是一个伟大的 Python 库,用于解决利用蒙特卡罗马尔可夫链(MCMC)方法的概率数学问题,例如贝叶斯推理。
在下面的代码中,我们使用 PyMC3 来推断𝑆𝑒、𝑆𝑣和𝑃𝑣的更新(后验)估计值,这是基于我们对一项单一诊断测试的了解,其中 3300 名个体中有 50 名检测出新冠肺炎抗体阳性。求解器的结果,在 PyMC3 中称为“踪迹”,是一组对𝑆𝑒、𝑆𝑝和𝑃𝑣.的可能真值的修订估计
import pymc3 as pmk = 50 # Number of individuals that were observed to test positive
n = 3300 # Size of population testedp_true = k/nmodel = pm.Model()
with model: Se = pm.Beta(‘Se’,alpha=alphas[0],beta=betas[0])
Sp = pm.Beta(‘Sp’,alpha=alphas[1],beta=betas[1])
Pv = pm.Uniform(‘Prevalence’,lower=0,upper=0.03) Pt = ((Se*Pv+(1-Sp)*(1-Pv)))
y_obs = pm.Binomial( ‘y_obs’, p=Pt, n=n, observed=k) trace = pm.sample(12000, chains=2, tune=2000, target_accept=0.95)
贝叶斯推理过程的结果返回了我们对𝑆𝑒、𝑆𝑝和𝑃𝑣在概率分布方面的先验和后验估计的比较。

这些结果带来了这个相对简单过程的重大发现。因为我们只评估一种测试和一种诊断,所以很少有信息表明该测试的敏感性和特异性与该研究作者最初定义的有任何不同。然而,我们确实看到𝑃𝑣的后验分布已经围绕一系列新的值联合起来。我们的后验估计显示,不仅与我们的初始估计值 Pv (例如,0 至 0.03%,100% CI)相比,而且与斯坦福研究的估计值(例如,1.11 至 1.97%,95% CI)相比,患病率有相当显著的修正。最后的评估是,基于一项单一的真实世界测试的结果,该测试从 3300 个观察到的阳性中返回了 50 个,真实的流行率必须在至少 0.2%和 2.1%的范围内(95%可信区间)。为了与原始研究进行比较,我们可以再生成一个图:

结论
这就是了。使用适当的统计推断,特别是在贝叶斯规则和机器学习技术的帮助下解决贝叶斯推断的问题,我们通过适当考虑所用血清学检测试剂盒的规定误差和误差的误差,对斯坦福/圣克拉拉研究中采样的 3,300 名受试者的抗体流行率进行了新的估计。虽然最有可能的患病率是 1.3%,但我们发现该值位于 0.2%和 2.1%之间的任何地方的概率肯定是 95%。这似乎使任何声称新冠肺炎抗体在圣克拉拉县人口中的患病率比预期高“50-80 倍”的说法有点可疑…至少在没有更多数据的情况下不会。
Andrew Gelman 和其他人一样,已经解决了斯坦福研究中的这个关键问题,而不需要像我在这篇文章中所做的那样深入研究建模的细节。根据这位专家和其他专家的解释,如果某项检测的特异性很低,假阳性的检出率等于或高于阳性检测结果的观察率,那么几乎所有的阳性检测都有可能是假阳性,而不是对抗体携带者的真实鉴定。对于我们预计新冠肺炎抗体流行率仍然较低的地区(显然包括我的家乡不列颠哥伦比亚省温哥华),我们最终需要特异性非常高的血清学检测,以区分真阳性和假阳性。
在写这篇文章的过程中,斯坦福研究的作者们在 4 月 30 日发布了他们工作的修订版,很大程度上解决了他们第一次提交的一些问题。他们现在包括:1)将贝叶斯推断应用于他们对 Pv、和的估计,锐化他们基于额外的参考测试数据对灵敏度和特异性的估计。在他们提交修改后的一天后, Andrew Gelman 贡献了一份对这份修改过的作品的贝叶斯分析,使用了一种比我在这篇文章中更彻底的方法。尽管他发现斯坦福团队对不确定性的新评估有待改进,但他展示了使用贝叶斯定理的不确定性分析可以(或应该)应用于他们工作的更充分程度。我的最后一个例子是不同分析的总结:1)斯坦福研究的第一个版本的结果(2020 年 4 月 17 日预印),2)我在本文中概述的患病率估计,3)修订的斯坦福研究的结果(2020 年 4 月 30 日重新提交),4)我根据这些修订的结果对患病率的估计,以及 5) Andrew Gelman 最近根据这些修订的数据对患病率的估计。

最后,当我们试图衡量新冠肺炎危机的程度(以及我们为摆脱危机所做的决定)时,适当的不确定性量化方法,也许是贝叶斯方法,应该是最重要的吗?我不得不相信,它们就在我们医疗保健和疾病控制当局模糊的走廊里,但偶尔大声喊出来提醒一下也无妨——尤其是对我们试图理解事物的一线科学记者来说。
我将通过回答常见问题中几个问题来结束本文:
在一篇中等水平的文章中解决这些问题是不是有点矫枉过正?
是的,很可能。
做这个很难吗?
不,我的意思不是吹捧我自己对这方面的知识。
我是否使用了最先进的程序来使用贝叶斯定理评估诊断测试的不确定性?
这个我没法完整回答。我的方法是合理的,但有更彻底的方法来考虑诊断测试中的不确定性(因此,为什么 Gelman 的方法-更彻底-显示了基于 2020 年 4 月 30 日重新提交的估计值的更大不确定性)。我的结果在多大程度上是可靠的,取决于我们对可用数据的掌握程度以及对诊断测试错误的理解程度。布兰斯克姆等人【2】和恩诺埃等人【3】的作品,我觉得还是相关的入门。
我看了你的简历。一个建筑与风景园林学院的教授写这样的文章干什么?
是的,完全公开,我的职业是建筑工程师——不是流行病学家、统计学家或数学家。然而,像许多应用科学领域的学者一样,我职业生涯中越来越多的部分都专注于使用数据和机器学习的新方法来解决现实世界的设计和决策问题。在我的直接工作领域,这通常是关于我们如何设计和运行健康、舒适、理想的碳中和的建筑。我的博士生导师是,我称之为,贝叶斯主义者;首批建筑科学家之一,在预测建筑能源需求或建筑占用趋势时,使用贝叶斯定理和“新颖”统计技术来评估不确定性。虽然我只能试着追随她的脚步,但当我想到,在开始攻读博士学位的十年后,我现在在自己的研究小组中对贝叶斯定理保持着浓厚的兴趣,这让我感到振奋。
参考文献
[1] Gelman,a .,Carlin,J. B .,Stern,H. S .,Dunson,D. B .,Vehtari,a .,和 Rubin,D. B. (2013 年)。贝叶斯数据分析。CRC 出版社。
[2]刘易斯,F. I .,&托格森,P. R. (2012 年)。在缺乏金标准诊断的情况下估计人类和动物疾病流行的指南。流行病学的新兴主题,9(1),9。
[3] Branscum,A. J .,Gardner,I. A .,& Johnson,W. O. (2005 年)。通过贝叶斯建模评估诊断试验的敏感性和特异性。预防兽医学,68(2–4),145–163。
[4]恩诺埃,c .,乔吉亚迪斯,M. P .,&约翰逊,W. O. (2000 年)。当真正的疾病状态未知时,对诊断试验和疾病流行的敏感性和特异性的估计。预防兽医学,45(1–2),61–81。
走向终结不公正:深度学习可以阻止警察暴行上升的 3 种方式
深度学习可能会解开一个世纪以来的不公正、暴力和种族偏见。

【S】顶了一下,掉在了地上!我也要拍了!”你心脏的每一块肌肉都紧张起来,你的头脑中涌出一股肾上腺素。遵从你自己模糊的——但又绝对自信的——生存本能, 你倒在地上 。一群警察包围着你,把你包围在一个无法逃脱的圈子里,手里拿着晃来晃去的手铐、手枪、泰瑟枪和棍棒。当你坐起来,双手被手铐铐住,试图自我恢复时,领头的副警长未经深思熟虑就把你推到铺着碎石的人行道上,并怒吼道:
“趴在地上别动!你在拒捕!”
你看着旁观者倾斜的、同情的眼睛,他们手里拿着耳机和相机,故意避开这个事件。最后,你认出了夹在芝加哥警察局警官背心上的一排警察身体摄像机,并让自己放心:“好了,冷静下来……有 客观的 , 权威的 , 无可辩驳的 证据表明,缺乏可能的原因和过度的暴力被录了下来。”当你淤青的脖子、胳膊肘和手腕像扭曲的布娃娃一样躺在人行道上时,你试图回忆起你的情况的起源和故事。你是一个 26 岁的黑人,沉浸在芝加哥市中心区的低收入地带,在下午 6:00 漫步回到你的公寓,直到一对警察冲向你,权威地喊道,“站住,不许动!必要的话我会开枪打!”在过去的六年里,你在芝加哥的市中心地区艰难跋涉,你会听到同样的话在退化的小巷、隐藏的毒品交易热点和简陋的市中心公寓中回荡。不过,这次他们是冲着你来的。

当我告诉你这个的时候,不要惊慌——你已经被种族侧写了。 等一下……蜂拥而至的警察人体摄像机和附近的行人实时发布事件的片段应该足以解放你并谴责这些警察,对吗?不幸的是,成百上千起累积的、系统性的、出于种族动机的警察暴力事件被推入了执法调查的黑箱程序。换句话说,一个又一个的视频证据文件(证明被提交审查)是由警察部门自己主观执行的,存在大量妨碍调查过程的交叉干扰偏见(例如,当地政治/党派关联、执法机构的自身利益以及主要视频调查人员的个人偏见)。
尽管我们可以争辩说客观的道德和伦理标准是存在的,即使是在像美国这样一个政治分层和两极分化的环境中,仍然有总是阻碍违反这些标准的人类偏见、条件和本性。然而,更重要的是,警察暴力受害者的人口统计常常留下创伤后的创伤,不管正义、盘问和执法调查是否完成。虽然警察部门已经国有化并部署了既得的人体摄像机,并为种族貌相和预防性过度暴力进行了培训,但还没有实时监控警察暴力事件的技术。此外,非常少的自动化或半自动工具与身体摄像机共存,这些工具可以客观地解析和识别相应音频记录上的情绪和偏见。
在过去十年中,移动规模、低内存深度卷积神经网络(DCNNs)和自然语言处理(NLP)实现的出现为从大数据分区中半监督和非监督提取视觉文本意义铺平了道路。换句话说,视觉算法(监督/半监督 CNN 模型)和语言识别/序列算法(RNNs 和 LSTM 网络)适用于包括实时音频-语音识别、人类活动识别以及从文本字符串中提取意图和情感的语义在内的任务,这使得研究人员能够在大型语言和视觉数据集内以很少的计算能力推导和分析客观和新颖的模式。尽管 NLP 和计算机视觉研究任务经常与计算生物学、生物医学诊断和一系列企业应用相关联,但深度学习尚未触及其中最大的怪物——【人类不公正】。根据 2017 年警察暴力报告,在任何给定或预选的一年,巴西有近 4224 人死于警察暴行,美国有 1147 人,德国有 11 人。各州之间甚至存在更多的种族和社会经济差异(你可以自己研究)。

在美国,警察暴力事件已经成为缺乏一致的可能原因的种族指控事件,经常在未解决的过度暴力案件中达到高潮。尽管警方的人体摄像头属于内部调查人员的职权范围,但能够客观分析人体摄像头捕捉到的语音和视频数据的框架却少之又少。然而,实时深度学习语言和视觉模型的使用对于在给定事件 期间和之后监控警察暴行 可能是至关重要的。无论是使用深度前馈网络(DNNs)来理解和预测攻击性身体行为的发生,还是集成实时情绪分析算法来对暴力言论进行分类,深度学习(DL)都可以改变我们如何为警察暴力的全球危机带来正义。
1。)使用深度卷积递归架构来检测暴力行为

deepconvltm(Ordonez 和 Roggen,2016 年)

通过检测学习辨别运动特征(Bertasius 等人,2018 年)
人类活动识别(HAR)架构的兴起为研究人员提供了一个多参数的镜头,通过使用加速度和惯性测量的输入变量来分类简单的视觉行为(例如,行走、跑步、开门等)。最终,卷积神经网络(CNN)能够在切片窗口中方便地分析和分解这些测量,以识别、概括和定位图像中的动作。CNN 在 HAR 问题上的应用通常利用开放数据集,如 Otago 练习程序,从加速度计数据中提取和采样特征。相应的运动数据被解释为具有非常高的空间和时间分辨率的多变量时间序列数据。诸如奥塔哥锻炼计划和其他开放访问的 HAR 数据集的数据集使用相对于时间的相对高分辨率的传感器数据,并且 CNN 几乎完全适合于分割该数据用于模式识别和识别。

学习识别以自我为中心的视频中的动作(Bek,2014)
虽然递归神经网络(RNNs)最近在 HAR 任务中获得了牵引力(由于其时间特性),但当通过其网络提取特征样本时,CNN 引入了更高程度的精度和局部性。CNN 实现了相对于发生时间(即动作或行为的发生时间)的平移不变性。换句话说,平移不变性使 CNN 能够精确定位行为类别(例如,行走、坐着、跑步等),而不管运动中的变化(平移)。你可以将不变性概念化旋转、平移或移动写在纸上的数字‘2’。无论旋转或改变位置,它作为数字“2”的身份将保持不变。类似地,通过平移不变的 CNN 处理的时间数据可以连续基于传感器数据跨时间分类和区分动作,而不管给定的动作是否在运动。最终,这种平移不变性机制使 CNN 能够以精确的逐帧速率有效地在时间上映射行为。

谐波网络:深度平移和旋转等变(沃拉尔等人,2017 年)
在论文《 利用 3D 卷积神经网络对监控视频中的 3D 运动长方体进行人体动作识别 》中,Arunnehru 等人操纵了 KTH 视频数据集,涵盖了人体挥手、鼓掌、奔跑、拳击、行走、慢跑等六种动作。这些连续的动作由 25 个不同的人在四个不同的场景中进行注释、对应和执行,包括穿着不同服装和不同比例(即摄像机放大和视频比例)的室内和室外设置。与仅从空间维度计算特征图的 2D CNN 相比,3D 卷积神经网络可以通过将多个连续/连接的帧堆叠在一起来同时捕获空间和时间维度。通过利用时间分量,可以经由 3D CNN 对视频上的运动进行分类。然而,在等式的另一边,递归神经网络(RNN)仍然是从原始感觉-时间/序列数据中提取特征的关键角色:RNN 将保留在原始传感器数据集上,如 WISDM 储存库,该储存库提供包括慢跑、坐着、站着和行走(上楼和下楼)在内的活动,而不是用时间维度来查看视觉信息。对于纯粹基于传感器的数据,当使用三个轴上的加速度和角速度等变量时,RNNs 在精度和验证准确度方面都超过了。

**现在是有趣的部分——将 3D CNNs 或 RNNs 应用于疑似警察暴行或扣押/搜查案件中的可疑行为分类。更具体地说,操纵 3D CNNs 和 rnn 的潜力,通过测量和可视化警察采取的姿势、加速度/角速度的突然跳动以及房屋中的一般运动来识别边缘攻击行为。可以设计和预训练组合的 CNN/RNN 模型架构来检测侵略性的执法行为。与检测可疑活动的人类活动识别项目类似,类似的算法可以部署在城市街道摄像头和警察身体摄像头上,以客观地识别相应警察的攻击行为。

2.)实时语音识别和情感分析来检测言语攻击

用于声音情感识别的独立于语言和分类器的特征分析研究(Noroozi 等人,2018 年)
虽然计算机视觉模型可能是最臭名昭著的深度学习驱动的算法,用于实时检测、特征采样和识别可疑和攻击性行为(在空间视觉层面上),但最近机器学习在人机交互(HCI)和 NLP 应用中的兴起已被证明在更微妙的维度上分析攻击性时至关重要——人类语言和语音。通常,大规模的 NLP 框架和架构(例如谷歌人工智能的 BERT 语言模型)已经适应人类文本的静态分类。换句话说,研究人员通常将这些语言模型用于监督/半监督,包括输入文本样本并等待处理后的输出。然而,用于声音和文本情感检测的实时、自主情感分析架构的应用在最近 1-2 年才刚刚起步。对于涉及种族貌相、违反扣押和搜查的可能原因以及对受害者的贬损性语言的高风险案件,基于实时语音的模型对于客观地分解官员的意图和升级为攻击行为可能至关重要。
最终,存在两种不同的方法来从原始语音数据中上下文地提取情绪和情感:1 .2)通过 CNN 声谱图特征提取和采样从原始音频波形中理解情感。)组合两个模型:将音频转录成文本的语音识别架构,随后是对结果文本执行分类的 RNN 情感分类算法。也许,最吸引人的声音情感分析方法是通过具有深度 CNN 架构的原始音频波形分析(第一种方法)。通过系统地捕获被称为 Mel 频率倒谱系数的独特声音特征,并将结果特征输入 CNN 模型,我们可以描绘和区分样本声音的广泛数据集之间的情感阈值。Tripathi 等人在论文“ 使用语音特征和转录的基于深度学习的情感识别系统 ”中探索了深度 CNN 从语音特征/转录中分解和识别情感的能力。该论文考虑了使用从原始音频数据集导出的语音转录+相应的语音特征(声谱图和 MFCC),这些都为深度神经网络创建了必要的特征熔炉。

CNN 使用的音频和图像特征(Singh,2018)
在 任何 语音意图/情感识别任务中,Mel 频率倒谱系数(MFCCs)操作可能将最重要的特征样本输入到深度神经网络中。通过使用提取的 MFCC 特征,我们可以过滤掉失真的背景噪声,并定位音频记录中重要的特定声音特征。MFCCs 的功能是 Mel 标度,将纯音的感知频率/音高与其实际测量频率相关联。MFCC 由 39 个特征组成,小到足以“迫使”神经网络学习和区分语音音频信息中的特征。在相应的论文中,Tripathi 等人实现了深度 CNN,以跨他们的声音数据集在语义上映射高级和低级特征关系,从而准确地识别情绪。

使用语音特征和转录的基于深度学习的情感识别系统(Tripathi 等人,2019 年)
为了从每个录音样本中精确提取完整的声音特征,必须从数据集中的每个样本中捕获声谱图(音频波形随时间变化的全频率特征轮廓)(USC 的交互式情感运动捕获)。该论文有效地采用最大图像宽度为 256 个窗口的结果谱图输入。他们将每个音频文件的持续时间固定/调整为 6 秒,覆盖了 75%的相关数据集。仅通过原始音频输入,他们的模型 4A 在基准 USC 数据集上达到了 73.6%的准确率。
3.用自然语言处理和拓扑学习固定法律判决

基于拓扑学习的法律判决预测(钟等。
最后,在法律领域打击警察暴行的斗争中,也许最大的游戏规则改变者之一正在我们说话的时候发展——NLP 和拓扑学习预测法庭判决和结果。在论文“”中,钟等人有效地采用了一种拓扑学习框架来理解法庭案件子任务之间的依赖关系,包括相关法律条文、案件事实等。最终,钟利用这些子任务之间的联系,根据案件的背景和参数,基本上生成了最终判决。通过使用事实编码器卷积神经网络(CNN),他们能够将输入文本(例如,案件事实、案件背景等)消化到查找层、卷积层和汇集层。在根据真实的法庭数据进行验证后,他们获得了以下混淆矩阵,范围从几个月的处罚到死刑/终身监禁。

基于拓扑学习的法律判决预测(钟等,2018)
对于种族定性和警察暴行的法庭案件,尤其是在保守倾向的地区,拓扑学习可以被整合以发现更客观的法庭命令和结果。虽然许多法院法官遵守司法约束(即限制偏见和行使自己的权力),但人类的偏见在潜意识层面上泛滥成灾。拓扑学习框架理论上可以消除偏差,当训练伦理规范和准备数据集。
结论和伦理含义
随着以人为中心的视觉和文本深度学习框架的迅速崛起,猖獗的种族定性和警察暴力事件可以得到更公平的分析,就最客观的正义决策途径咨询执法部门和地区法院。无论是实施人类活动识别算法来识别攻击性的警察行为,分析言语虐待的实时语音识别,还是判断法庭结果的拓扑学习系统,深度学习都可能彻底改变我们如何简化实现正义的过程。尽管深度学习的集成呈现出初步的前景,但预处理数据中的偏差仍然存在,并且很可能继续存在。在深度学习和法律正义系统之间打结之前,算法必须经过伦理审查,否则我们最终会处于比开始更不公正的位置。******
参考
用于多模式可穿戴活动识别的深度卷积和 LSTM 递归神经网络
通过检测学习辨别运动特征(Bertasius 等人,2018 年)
学习识别以自我为中心的视频中的动作(Bek,2014)
谐波网络:深度平移和旋转等变(沃拉尔等人,2017 年)
使用语音特征和转录的基于深度学习的情感识别系统(Tripathi 等人,2019 年)
基于拓扑学习的法律判决预测(钟等,2018)
面向可解释人工智能的特征空间探索🚀

安迪·凯利在 Unsplash 上的照片
基于大量数据训练的神经网络导致了难以置信的技术飞跃,几乎影响了我们生活的每一个部分。
这些进步是有代价的——即数据模型的可解释性和可解释性。与操作的复杂性相对应,为输入“选择”给定输出的标准变得相当神秘,导致一些人将神经网络称为“黑盒”方法。
深度神经网络工作得如此神奇,因为它们学习数据的有效表示,并且它们被有意地限制为捕捉数据中复杂的非线性模式。识别非线性模式的代价相当于失去视觉,只是为了获得更微妙的声音感知。在学习这些表示的过程中,神经网络的每一层中的特征在训练期间改变,并且随着不同的网络架构/数据集以不同的方式改变。这让我们想到了几个与深度学习相关的研究问题:
- 我们如何理解与这些变化相关的模型性能?
- 我们如何确定每层的最佳单元数量?
- 我们如何定量描述网络中的变化分布?
我们试图在最近的论文“训练期间的特征空间饱和”中回答这些问题,该论文现已在 arXiv 上发布。通过在训练期间将主成分分析(PCA)应用于每一层中学习到的表示,我们可以确定解释这种差异所需的层大小或维度数量,从而逼近内在维度。通过一种类似于信息瓶颈方法[1]、SVCCA [2]和彩票假设[3]的方法,我们试图通过训练来识别网络上的动态分布。
层特征空间的固有维度
为了回答需要多个维度来解释层特征差异的问题,我们看一下自动编码器。

派进去,派出来。自动编码器学习将数据压缩成特征向量,并且对于理解所学习的表示的动态是有用的。
自动编码器学习数据集的紧凑表示。它们对于识别神经网络压缩的限制以及整个模型训练中特征/表示的动态非常有用。
PCA 的输出是对应于数据相关性的各种方向(特征向量)和特征值。在这种情况下,我们的输入是在整个训练过程中根据图层表示计算的特征协方差矩阵。该矩阵捕获与特征独立性和相关性程度相关的一些动态。换句话说,某些神经元响应与层中的其他神经元一致或独立的程度。我们称这个投影为层特征空间。

阈值处理仅解释了最终全连接层的方差投影。
通过选择不同的阈值来投影特征(通过特征值的累积和计算),我们能够比较图像的重建,在这种情况下,是一片饼。我们把这个阈值称为 delta (δ ) ,它的范围是解释方差所需的方向的 0 到 100%。因此,对于 100%的增量,我们期望输入的近乎完美的重构——没有一个被排除。
在我们的实验中,超过 99%的阈值,特征在特征向量上的投影会留下几乎无法辨认的图像。大部分结构丢失,表明模型执行需要绝大多数特征子空间维度。这种方法允许我们比较由网络学习的特征空间,并且理解网络已经学习数据的最佳压缩的程度。
饱和度为模型训练提供了一个窗口
我们把解释层特征的方差所需的特征向量比例称为饱和度。每层具有介于 0 和 1 之间的饱和指数,指示层特征子空间的固有维度。这使我们能够在深度神经网络中比较各层的饱和度。此外,我们比较了 Alain】和 Ben gio【4】的探测分类器方法,显示了每层输出执行分类任务的相对能力。
我们观察到饱和度反映了推理过程是如何分布的。当饱和度较高时,图层的特征以复杂和非线性的方式变化,对应于探测分类器精度的相对较高的增益。接近最后一层时,层精度的边际增加会减少,大多数情况下饱和度也会减少。因此,饱和度是最佳网络深度的指标,因为冗余层会以尾模式使饱和度向零收敛,如本文所述。
输入分辨力
输入分辨率是神经网络架构中需要平衡的三个方面之一(包括深度和宽度)[5]。

与网络深度收益递减相关的饱和“尾巴”。探头性能仅在高饱和部分有所提高。饱和度的计算速度比探头精度快几个数量级。

饱和度“驼峰”与层的重要性有关。高分辨率数据的分类需要更复杂、非线性的特征空间分离,因此需要更高的饱和度。
在 arXiv 文章中阅读更多相关内容,或者在 GitHub 上下载用于生成图的代码(delve Python 库)。
“训练期间特征空间饱和”,【https://arxiv.org/pdf/2006.08679.pdf
Delve 是一个用于可视化深度学习模型训练的 Python 包。如果你需要一个轻量级的 PyTorch 或者…
github.com](https://github.com/delve-team/delve)
感谢合著者 Mats L. Richter ,Wolf Byttner, Anders Arpteg ,以及 Mikael Huss 。非常感谢卡尔·托姆梅、阿格林·希尔姆基尔、拉斯穆斯·迪德里克森、理查德·锡格河、亚历克西斯·德拉科普洛斯、萨兰·N·苏布拉曼尼扬、皮奥特·米格达和乌尔夫·克鲁姆纳克在撰写本文期间提供的宝贵反馈。
如果您在研究中使用这项工作,请注明:
[@misc](http://twitter.com/misc){shenk2020feature,
title={Feature Space Saturation during Training},
author={Justin Shenk and Mats L. Richter and Wolf Byttner and Anders Arpteg and Mikael Huss},
year={2020},
eprint={2006.08679},
archivePrefix={arXiv},
primaryClass={cs.LG}
}
参考
[1]信息瓶颈法,https://en.wikipedia.org/wiki/Information_bottleneck_method
[2] SVCCA,https://medium . com/@ maddyschiappa/SVCCA-summary-e 83 a 53 f 7 DD 68
[3]彩票假说,https://towards data science . com/breaking-down-the-Lottery-Ticket-Hypothesis-ca 1c 053 B3 e 58
[4]概率分类器,“使用线性概率分类器理解中间层”,https://arxiv.org/abs/1610.01644
[5] EfficientNet,https://towards data science . com/efficient net-scaling-of-convolutionary-neural-networks-done-right-3 FDE 32 AEF 8 ff
面向可解释的图形神经网络
GNN 解释方法的新进展

拉斐尔·比斯卡尔迪在 Unsplash 上拍摄的照片
目录
- 什么是图卷积网络
- GNNs 可解释性的当前挑战
- 第一次尝试:可视化节点激活
- 重用卷积神经网络的方法
- 模型不可知的方法:GNNExplainer
- 关于我
- 参考
序
这是一个稍微高级一点的教程,假设有图形神经网络的基础知识和一点计算化学。如果你想为这篇文章做准备,我在下面列出了一些有用的文章:
什么是图形神经网络

图一。图像卷积和图形卷积。【来源】
卷积神经网络(CNN)和图神经网络(GNNs)的主要区别是什么?
简单来说就是输入数据。
您可能还记得,CNN 所需的输入是一个固定大小的向量或矩阵。然而,某些类型的数据自然是用图表来表示的;分子、引用网络或社交媒体连接网络可以表示为图形数据。在过去,当 GNNs 不流行时,图形数据通常以这样一种方式转换,即它可以作为输入直接提供给 CNN。例如,分子结构仍然被转换成固定大小的指纹,其中每一位指示某一分子亚结构是否存在[1]。这是一个将分子数据插入 CNN 的好方法,但是它不会导致信息丢失吗?

图二。通过从 NH 原子对中选取不同的分子亚结构将分子映射到位指纹,这些亚结构由不同的半径范围(h=0,h=1,…)定义。 [来源]
GNNs 利用图形数据,摆脱了数据预处理步骤,充分利用了数据中包含的信息。现在,有许多不同的 GNN 架构,其背后的理论变得非常复杂。然而,GNNs 可以分为两类:空间和光谱方法。空间方法更直观,因为它将汇集和卷积操作(如在 CNN 中)重新定义到图形域。频谱方法从一个稍微不同的角度处理这个问题,因为它专注于使用傅立叶变换处理被定义为图形网络的信号。
如果你想了解更多,可以看看 Thomas Kipf 写的博客文章,这是对 GCNs 的深入介绍。另一篇有趣的文章是“MoleculeNet:分子机器学习的基准” [2],它很好地介绍了 GNNs,并描述了流行的 GNN 架构。
GNNs 可解释性的当前问题
在写作的时候,我一方面可以数出对 GNN 解释方法有贡献的论文。然而,这是一个非常重要的话题,最近变得越来越流行。
GNNs 比标准神经网络更晚流行。虽然在这个领域有很多有趣的研究,但它仍然不太成熟。GNNs 的库和工具仍处于“实验阶段”,我们现在真正需要的是让更多的人使用它来发现 bugs 错误,并转向生产就绪模型。
嗯,创建生产就绪模型的一种方法是更好地理解它们做出的预测。这可以用不同的解释方法来完成。我们已经看到了许多有趣的可解释方法应用于 CNN,如梯度属性,显著图,或类激活映射。那么为什么不在 gnn 中重用它们呢?

图 3。与神经网络和其他机器学习模型一起使用的流行解释方法及其属性【来源】
事实上,这就是目前正在发生的事情。最初用于 CNN 的可解释方法正在被重新设计并应用于 GNNs。虽然不再需要重新发明轮子,但我们仍然需要通过重新定义数学运算来调整这些方法,使它们适用于图形数据。这里的主要问题是,关于这一主题的研究相当新,第一份出版物出现在 2019 年。然而,随着时间的推移,它变得越来越流行,很少有有趣的解释方法可以用于 GNN 模型。
在这篇文章中,我们将看看新颖的图形解释方法,看看它们如何应用于 GNN 模型。
第一次尝试:可视化节点激活

图 4。 左图: 具有 3 个堆叠层的神经图指纹模型的计算图的可视化,这是 Duvenaud 等人提出的架构,在这里,节点代表原子,边代表原子键。右:更详细的图,包括每个操作中使用的焊接信息【来源】
Duvenaud 等人在 2015 年发表了关于 GNNs 解释技术的开创性工作[3]。这篇论文的主要贡献是一个新颖的神经图指纹模型,但他们也为这种架构创建了一种解释方法。该模型背后的主要思想是创建可区分的指纹,这些指纹是直接从图形数据本身创建的。为了实现这一点,作者必须重新定义图形的池化和平滑操作。这些操作然后被用来创建一个单一的层。
这些层被堆叠 n 次以生成矢量输出,如图 4 所示(左图)。图层深度还对应于相邻结点的半径,结点要素是从这些半径收集和汇集的(在这种情况下为 sum 函数)。这是因为,对于每一层,池操作从相邻节点收集信息,类似于图 1。对于更深的层,池操作的传播从更远的邻域延伸到节点。与普通指纹相反,这种方法是可区分的,允许反向传播以类似于 CNN 的方式更新其权重。
除了 GNN 模型,他们还创建了一种简单的方法来可视化节点激活及其相邻节点。不幸的是,论文中没有很好地解释这一点,有必要看看它们的代码实现来理解底层机制。然而,他们在分子数据上运行它来预测溶解度,它突出了对溶解度预测具有高预测能力的分子的一部分。

图 5。论文作者在溶解度数据集上测试了他们的模型,以突出影响溶解度的部分分子。通过他们的解释方法,他们能够确定使分子更易溶解的分子亚结构(例如 R-OH 基团)和使其更难溶解的分子亚结构(例如非极性重复环结构)。【来源】
具体是怎么运作的?为了计算节点激活,我们需要做以下计算。对于每个分子,让我们通过每一层向前传递数据,就像在典型的 CNN 网络中对图像所做的那样。然后,我们用一个 softmax() 函数提取每个层对每个指纹比特的贡献。然后,我们能够将一个节点(原子)与其周围对特定指纹位贡献最大的邻居(取决于层深度)相关联。
这种方法相对直接,但是没有很好的文档记录。在这篇论文中所做的最初工作是很有希望的,随后是将 CNN 解释方法转换到图形领域的更精细的尝试。
如果想了解更多,可以看看他们的论文、代码库,或者我在本期 Github 底部的方法详解。
重用卷积神经网络的方法
敏感分析、类激活映射或激发反向传播是已经成功应用于 CNN 的解释技术的例子。目前致力于可解释的 GNNs 的工作试图将这种方法转换到图的领域。围绕这一领域的大部分工作已经在[4]和[5]中完成。
我将为您提供这些方法的直观解释,并简要讨论这些方法的结果,而不是集中在这些论文中已经完成的这些方法的数学解释上。
概括 CNN 的解释方法
为了重用 CNN 的解释方法,让我们考虑 CNN 的输入数据,它是一个图像,是一个格子状的图形。图 6 说明了这个想法。

图 6。一幅图像可以概括为一个格子状的图形。红十字只显示了一小部分可以用图形表示的图像。每个像素可以被认为是节点 V ,其具有 3 个特征(RGB 值)并且通过边 E 连接到相邻像素。
如果我们记住图像的图形一般化,我们可以说 CNN 解释方法不太关注边缘(像素之间的连接),而是关注节点(像素值)。这里的问题是图数据在边中包含了很多有用的信息[4]。我们真正寻找的是一种概括 CNN 解释技术的方法,以允许节点之间的任意连接,而不是像格子一样的顺序。
有哪些方法转化到了图域?
到目前为止,文献中已经提出了以下解释方法:
- 敏感性分析[4]
- 导向反向传播[4]
- 分层相关性传播[4]
- 基于梯度的热图[5]
- 类别激活图(CAM)〔5〕
- 梯度加权类激活映射(Grad-CAM) [5]
- 激发反向传播[5]
请注意,[4]和[5]的作者没有提供这些方法的开源实现,所以还不可能使用它们。
模型不可知的方法:GNNExplainer
别担心,实际上有一个你可以使用的 GNN 解释工具!
GNNExplainer 是一个与模型无关的开源 GNNs 解释方法!它也是非常通用的,因为它可以应用于节点分类、图分类和边缘预测。这是第一次尝试创建一种特定于图形的解释方法,由斯坦福大学的研究人员发表[6]。
它是如何工作的?
作者声称,重用以前应用于 CNN 的解释方法是一种糟糕的方法,因为它们没有包含关系信息,而关系信息是图形数据的本质。此外,基于梯度的方法对于离散输入工作得不是特别好,这对于 GNNs 来说经常是这种情况(例如,邻接矩阵是二元矩阵)。
为了克服这些问题,他们创造了一种模型不可知的方法,找到了一个以最显著的方式影响 GNNs 预测的输入数据的子图。更具体地说,选择子图来最大化与模型预测的互信息。下图显示了 GNNExplainer 如何处理由体育活动组成的图表数据的示例。

图 7。图表数据说明了不同的体育活动。目标是解释中心节点的预测,下一个体育活动。对于红色图形, Vi 被预测为篮球。GNNExplainer 能够选择一个子图来最大化预测的互信息。在这种情况下,它从图表中提取了一个有用的信息——当某人在过去玩球类游戏时,选择篮球作为下一项体育活动的可能性很高。【来源】
作者提出的一个非常重要的假设是 GNN 模型的公式。该模型的架构或多或少可以是任意的,但它需要实现 3 个关键计算:
- 两个相邻节点之间的神经信息计算
- 来自节点邻居的消息聚合
- 聚合消息和节点表示的非线性转换
这些所需的计算多少有些限制,但是大多数现代 GNN 架构无论如何都是基于消息传递架构的[6]。
GNNExplainer 的数学定义和优化框架的描述就在本文中。但是,我不会告诉您(和我自己)太多的细节,而是向您展示一些使用 GNNExplainer 可以获得的有趣结果。
实践中的 GNNExplainer
为了比较结果,他们使用了 3 种不同的解释方法:gnnexplaner、基于梯度的方法(GRAD) 和图形注意力模型(GAT) 。上一节提到了毕业生,但 GAT 模型需要一点解释。这是另一种 GNN 架构,它学习边的注意力权重,这将帮助我们确定图网络中的哪些边对于节点分类实际上是重要的[6]。这可以用作另一种解释技术,但是它只适用于这个特定的模型,并且它不解释节点特性,这与 GNNExplainer 相反。
让我们先来看看应用于合成数据集的解释方法的性能。图 8 显示了在两个不同数据集上运行的实验。
BA-Shapes 数据集基于bara basi-Albert(BA)*graph,这是一种图形网络,我们可以通过改变它的一些参数来自由调整大小。在这个基础图上,我们将附加一些小的房屋结构图(图案),如图 8 所示。这个房屋结构有 3 个不同的节点标签:顶部、中间和底部。这些节点标签只是表示节点在房子中的位置。因此,对于一个类似房子的节点,我们有 1 个顶部节点、2 个中间节点和 2 个底部节点。还有一个额外的标签,表明该节点不属于类似房子的图形结构。总的来说,我们有 4 个标签和一个由 300 个节点和 80 个房子状结构组成的 BA 图,这些节点和结构被添加到 BA 图中的随机节点。我们还通过添加 0.1N 的随机边缘来增加一点随机性。*
BA-Community 是两个 BA-Shapes 数据集的并集,因此总共有 8 个不同的标签(每个 BA-Shapes 数据集 4 个标签)和两倍多的节点。
让我们看看结果。

图 8。目标是为红色节点的预测提供一个解释。解释方法被设置为找到最准确地解释结果的 5 节点子图(标记为绿色)。【来源】
结果似乎很有希望。GNNExplainer 似乎用最准确的方式解释了结果,因为选择的子图与地面真相相同。Grad 和 Att 方法未能提供类似的解释。
该实验也在真实数据集上运行,如图 9 所示。这次的任务是对整个图网络进行分类,而不是对单个节点进行分类。
Mutag 是一个由分子组成的数据集,这些分子根据对某种细菌的诱变作用进行分类。数据集有许多不同的标签。它包含 4337 个分子图。
Reddit-Binary 是一个数据集,表示 Reddit 中的在线讨论线程。在这个图形网络中,用户被表示为节点,而边表示对另一个用户的评论的响应。根据用户交互的类型,有两种可能的标签。它可以是问答或在线讨论互动。总的来说,它包含了 2000 个图表。

图 9。GNNExplainer 运行图表分类任务。对于 Mutag 数据集,颜色表示节点特征(原子)。对于 Reddit-Binary 来说,任务是对图形是否是在线讨论进行分类。【来源】
对于 Mutag 数据集,GNNExplainer 可正确识别已知具有致突变性的化学基团(如 NO2、NH2)。GNNExplainer 还解释了被归类为 Reddit-Binary 数据集在线讨论的井图。这种类型的交互通常可以用树状模式来表示(看看基本事实)。
关于我
我即将从南安普顿大学毕业,学习电子工程,是 IT 创新中心的研究助理。在我的业余时间,你可以发现我摆弄数据或者调试我的深度学习模型(我发誓这很有效!).我也喜欢徒步旅行:)
以下是我的社交媒体资料,如果你想了解我的最新文章:
参考
【1】重访分子哈希指纹https://chembioinfo . WordPress . com/2011/10/30/重访-分子哈希指纹/
【2】MoleculeNet:分子机器学习的基准https://arxiv.org/abs/1703.00564
【3】用于学习分子指纹的图上卷积网络https://arxiv.org/abs/1509.09292
代码库:https://github . com/HIPS/neural-fingerprint/blob/master/examples/visualization . py
【4】图卷积网络的可解释技术https://arxiv.org/pdf/1905.13686.pdf
【5】图卷积神经网络的可解释方法http://open access . the CVF . com/content _ CVPR _ 2019/papers/Pope _ explability _ Methods _ for _ Graph _ 卷积 _ 神经网络 _CVPR_2019_paper.pdf
【6】gnnexplaner:为图形神经网络生成解释https://cs . Stanford . edu/people/jure/pubs/gnnexplaner-neur IPS 19 . pdf
代码库:https://github.com/RexYing/gnn-model-explainer
走向机器学习——K 近邻(KNN)
根据油耗和发动机大小对汽车进行简单的 K 近邻(KNN)分类。

纳亚尼·特谢拉在 Unsplash 上的照片
介绍
机器学习(ML)是当今一个非常流行的术语。我认为在网上过一天,不符合条件是不可能的。和我之前的许多人一样,我敢打赌,和我之后的许多人一样,不久前我在这个有趣的领域开始了我的旅程。
关于这个主题,有许多写得很好、很好的在线资源。我不是想发明新的轮子,我只是想分享我的观点,或者说我在学习密歇根大学的热门在线课程 Python 中的应用机器学习时的想法。另外,我的目标是强调 K 最近邻法(KNN)的一些关键见解,我希望对初学者(比如我)有所帮助😊)从这种流行的机器学习方法入手的时候。
为了让事情更有趣一点,我使用了来自 Udacity 的燃油经济性数据集。
简而言之,KNN
KNN 算法是一种监督最大似然算法,常用于分类和回归应用。KNN 分类器是基于实例(记忆)的分类器,这意味着它们依赖于类别(输入)之间的相似特征,以便预测新的(独立的)输入或数据点的类别。一般来说,我们需要一个训练数据集,在这里我们的模型被训练来预测,我们在一个独立的数据集上评估模型性能,以检查准确性。
KKN 到底是如何运作的?好吧,假设我们有一个需要分类的数据集(数组)。查看下图。

来源:作者
然后,在位置(50,40)添加一个新的数据点(棕色)。我们检查距离该新点最近的 K 个点(“邻居”)。我们假设 K = 5。所以我们需要找到离新条目最近的 5 个点(棕色点)。

来源:作者
如果选择 5,则根据欧几里德距离找到 5 个最近的点(浅紫色线),我们可以看到 5 个点中有 4 个是红色的,因此我们的棕色点被分类到“红色”角。
K=5 表示带有异常值的噪声模型和可能的错误标记数据(低 K=1 或 K=2)之间的平衡,或导致拟合不足的大 K,因此基本上,结果不太详细,或在最坏的情况下,所有东西都变成一个类。正确的 K 取决于数据集。大多数情况下,K 是一个奇数,以避免随机决策,如果一个点距离两个已知类的距离相等。
足够的理论让我们开始实践吧!😊
Python 实现
读取和检查数据
首先我们将导入依赖项,在这种情况下,我们需要 numpy、pandas、matplotlib 和 scikit-learn。
我们还需要一些数据。在这个例子中,使用了来自 Udacity 的流行的汽车燃油经济性数据集。这是一个包含 3929 辆汽车基本信息的数据集,比如品牌、型号、年份、变速器类型、车型、汽缸数量、油耗、二氧化碳排放量等。
在这里,我将举例说明如何使用 KNN 算法,根据气缸数量、排量、综合油耗和二氧化碳排放量,将未知车辆类别的汽车分类到适当的类别。

我们检查 VClass 列的唯一值,以获取数据集中的所有车辆类。我们有 5 节课。此外,我们创建了一个新列,其中包含用于绘图的类标签。

由于我们的模型需要首先被训练,我们将把数据分成训练和测试数据(稍后用于评估)。为此,我们使用 scikit-learn 库中的 train_test_split 函数。
对于大型数据集(3929 个条目),我们不需要担心训练和/或测试规模。因此,函数的 test_size 参数为 None (=0.25),这意味着测试集包含 25%的数据。
检查数据总是好的做法。为此,使用了特征对图。

训练数据集的配对图
可以观察到一些有趣的模式。即随着气缸数量的增加,排量和 CO2 输出增加,而平均每加仑里程减少。此外,更大的燃料消耗会产生更多的二氧化碳。
观察数据的另一个好方法是 3D 绘图。这里,二氧化碳、气缸数和排量分别绘制在 x、y 和 z 轴上。

3D 图—二氧化碳与气缸和排量的关系
同样,我们可以观察到,气缸多、排量大的汽车往往会产生更多的二氧化碳。尽管如此,一些 4 缸或 6 缸的小型汽车也会产生大量的二氧化碳(可能是大功率输出的运动型汽车)。但总的来说,发动机越大,产生的二氧化碳就越多。
建立和测试模型
首先,我们需要选择 K 个最近邻的数量。如前所述,对于这个例子,选择 KNN= 5 。
然后对模型进行训练,显示精度。
模型的精度为 0.4933 。理论上看起来不太好。但是对于我测试过的两辆车,这个模型给出了很好的预测。


福特嘉年华是“小型车”,宝马 M5 是“大型车”。
精度随 K 不同而变化吗?
在这里,我们将检查是否改变最近邻 K 的数量可以改变我们的模型的准确性。为此,我们编写了一个简单的 for 循环。此外,random_state 被改变,这导致不同的训练/测试分离组合。

随机状态= 11
对于这个数据集和这个训练/测试分割,较大的 K 值导致较小的准确性。不同的训练/测试分割可能会产生不同的结果。

随机状态= 44
有趣的是观察到训练集#44 产生更大的最大和最小准确度。
不同的训练/测试比率会改变模型的准确性吗?
最后但并非最不重要的是,我们将检查是否改变列车测试分割率可以增加我们的模型的准确性。首先,我们生成可能训练/测试比率的列表 t。同样,K 设置为 5。然后创建一个循环,其中对于每个可能的 t 比率,运行 200 次模拟,并计算每个模拟的精度。然后计算每个比率 500 次运行的平均准确度,并绘制成散点图,以观察性能。

随机状态= 11

随机状态= 44
从图中可以看出,精度随着训练样本量的减少而降低。改变 random_state 在这里似乎没有影响,这是有意义的,因为我们对每个训练/测试比率运行 500 次模拟,然后计算平均精度。
结论
这里给出了一个 KNN 分类器在流行的汽车油耗数据集上的简短实现。首先,给出 KNN 方法的简要说明。然后,检查数据集以查看数据集中的一致性。然后,我们定义一个 KNN 分类器,K 设置为 5,这意味着一个新的数据点根据 5 个最近的邻居进行分类。
对于两个独立的测试示例,福特嘉年华和宝马 M5,分类工作良好。此外,模型会针对不同的 K 值进行评估,对于这个特定的数据集,K 值越小,模型越精确。将 random_state 更改为不同的值可以改变这种行为,但不会显著改变。
此外,增加训练规模与测试规模的比率,应该会产生更好的结果。这里,由于大量模拟,更改 random_state 值的影响较小。
走向机器学习——线性回归

瑞安·斯通在 Unsplash 上的照片
最近,我在 Coursera 上开设了一门密歇根大学的应用机器学习课程。该课程涵盖了一些广泛流行的机器学习算法。我决定写几篇关于这个主题的简短文章,旨在帮助刚接触这个主题的人进入机器学习的有趣世界。我的上一篇文章讨论了 K 近邻(KNN)分类的主题。你可以看看如何使用 KNN 根据发动机大小、气缸数量、燃料消耗和二氧化碳排放量将汽车分类为车辆类别。今天我们更进一步,处理线性回归,另一个非常流行和广泛使用的技术。
文章的结构:
- 介绍
- 数据集加载和描述
- 数据分析
- 模型训练和评估
- 奖励:多项式回归
- 结论
享受阅读吧!🙂
介绍
在观察上一篇文章中的燃油经济性数据时,一些特性(如发动机排量和二氧化碳排放量)显示了一个有趣的模式。发动机排量的增加(“更大”的发动机)导致更高的 CO2 输出。让我们看看这个简单的数据散点图。有人会说数据显示了某种线性关系。

可以观察到数据分布的一些线性(来源:作者)
根据排量来预测你的车会产生多少二氧化碳,这难道不是很有趣吗?因此,今天的文章将研究线性回归,以及如何使用 Python 和 Scikit-Learn 库将它应用于一组数据。
什么是线性回归,为什么这么受欢迎?
首先,这是一个非常简单的算法。它试图用一条直线(或线性方程)来描述两个变量之间的关系。如果我们再次查看上面的散点图,我们可以看到 CO2 是因变量,是解释变量的位移。在研究两个变量之间的关系之前,这种图通常被用作第一步。因此,该方法假设 Y (CO2)的每个值都可以描述为 X (位移)的线性函数,遵循以下简单等式:
Y=w*X + b
其中 w 为直线的斜率, b 为 y 轴截距。或者用机器学习的术语来说,更多时候 w 被简称为t*和 b 代表。*****
然而,必须考虑一些假设:
- ****线性关系:x 和 y 之间必须存在线性关系。
- ****独立性:时间序列数据中的连续残差之间没有相关性
- ****同方差:每个 x 的残差的恒定方差
- ****正态:残差呈正态分布
这些所谓的残差是什么?嗯,残差是观察值与拟合线的值(或偏差)。基本上就是蓝点离拟合线(绿线)的距离(红线)。

残差是从拟合线到观察值的距离(来源:作者)
最小二乘误差
到现在,你可能会问自己,我们是如何计算出 w 和 b 参数的?嗯,我们需要计算函数的“损失”,也就是所有残差的总和。这里,最小二乘误差开始发挥作用。这是一种常见的方法,计算从观察点(图上的红圈)到拟合线(绿线)的平方差,并汇总所有这些平方距离。该方法的目标是找到产生最小可能距离平方和的 w 和 b 。距离的平方和通常被称为“均方误差或 MSE 。
让我们跳到一个更实际的例子,关于我们的汽车油耗数据。🙂
数据集加载和描述
像往常一样,首先我们导入依赖项,加载数据并查看数据帧。

数据帧的切片(来源:作者)
同样,我们将使用来自 Udacity 的燃油经济性数据集。它包含了 3920 辆汽车的技术规格,包括气缸数、发动机尺寸(排量)、油耗、二氧化碳排放量等数据。我们只对发动机尺寸和二氧化碳排放量感兴趣。
数据分析
由于 2D 阵列的 Scikit-learn 要求,并且由于我们只有 1 个输入特征, ,我们选择并整形解释变量。(-1,1)整形使用的是。然后使用 Scikit-learn 的 train_test_split 函数将数据拆分为训练样本和测试样本。

训练/测试分割(来源:作者)
模型训练和评估
下一步,我们准备我们的模型。因此,使用线性回归函数,并用训练数据拟合来训练模型。
我们可以通过调用来检查回归函数的 w 和 b 参数。coef_** 和。拦截 _ 属性。同样,通过调用计算 R 平方(决定系数)。分数,类似于 KNN 。**

模型的结果(来源:作者)
现在,让我们对训练数据进行线性回归。

线性回归—训练数据(来源:作者)
在我们绘制测试数据的回归图之前,首先我们根据我们的模型计算预测的 Y 值,我们的操作如下:

线性回归—测试数据(来源:作者)
正如我们从训练和测试数据中观察到的,我们的模型非常适合预测排量一般的汽车的二氧化碳排放量,这些汽车的发动机为 3-4 升。对于所谓的异常值,即与观察类的平均值有较大偏差的点,该模型表现出较弱的性能。即非常节能的汽车,如排放量非常低的混合动力汽车,或与之相反的功率输出非常高的汽车。此外,对于发动机非常小的汽车,该模型往往会大大高估二氧化碳的排放量。
奖励:多项式回归
简而言之,多项式回归是回归分析的一种形式,其中使用 n 阶多项式而不是线性模型来建模数据关系。这种方法增加了模型的复杂性,当解释变量和因变量之间存在更复杂的数据关系时,可以产生更好的结果。也就是说,在我们的案例中,乍一看,排量和 CO2 输出之间的关系似乎符合线性趋势,但是我们扪心自问,二次函数甚至更高阶函数是否能更好地捕捉这种关系?
让我们来了解一下!🙂
要使用 Scikit-Learn 应用多项式回归,我们将使用预处理模块中的 PolynomialFeatures 类。基本上,它生成多项式特征,然后用于最小二乘线性回归方法。当我们假设二次关系时,我们将多项式的次数设置为 2。
我们训练模型。
接下来,我们绘制结果,与之前描述的线性回归模型进行比较。

多项式与线性回归(来源:作者)
应用二阶** (k=2) 多项式回归,一个二次函数,在我们的训练和测试数据集上产生略微更好的结果。**

多项式回归的结果(k=2)(来源:作者)
在最后一步,我们测试不同阶多项式的模型精度。

准确性与计算时间(来源:作者)
从上图可以看出,当 K 值进一步增加时,精度会有所提高,但计算时间会大幅增加!此外,由于非常高的模型复杂性和过拟合,将 k 增加到 13 以上会开始降低精度。
结论
本文给出了一个简单的线性回归例子。线性回归的主要优势之一是趋势描述,更稳定的预测,但在异常值或极值(最小值或最大值)的情况下往往不准确。多项式回归提高了性能,但是随着模型复杂性的增加,往往会过度拟合,并显著增加计算时间。
我希望每件事都被清楚地解释和介绍了。直到下一次,随时检查我的其他文章。🙂
根据油耗和发动机大小对汽车进行简单的 K 近邻(KNN)分类。
towardsdatascience.com](/towards-machine-learning-k-nearest-neighbour-knn-7d5eaf53d36c) [## 测量和计算普利特维采湖国家公园的河流流量
你想知道如何测量和计算溪流或河流的流量吗?
towardsdatascience.com](/measuring-and-calculating-streamflow-at-the-plitvice-lakes-national-park-678223318191)
欢迎每一个评论或建议!领英
请随时关注我在媒体上的故事。干杯!**
利用人工智能实现精确的火灾预测
卫星+人工智能=前所未见的信息

地图显示了美国西部植物相对于干生物量的水量。数字越低,植被越干燥,发生野火的风险越大,反之亦然。作者图片。
为了克服这一挑战,我使用大量数据和深度学习来制作美国西部的动态森林干旱地图,这是有史以来第一次。这些地图可能最终导致野火风险评估的改进。
野火风险和森林干燥的作用
在野火风险评估中,森林干燥度——野火点燃和蔓延的重要预测指标——是使用气象指标(如先前的降水和温度)来估计的。研究人员将森林干燥度称为活燃料水分含量(LFMC ),因为它表明了树木和灌木等燃料相对于其干生物量的含水量。新鲜燃料的含水量越低,燃料越干燥,野火的风险就越大,反之亦然。
然而,气象指标并不总是代表真正的森林干旱。就像你阳台上的植物一样,不同的植物有独特的策略来应对干旱。一些可能能够通过关闭气孔(叶子上的孔)来保存水分,而另一些可能不能。一些植物可以通过长更深的根来获得更多的水分,而另一些则不能。然而,绘制什么物种生长在哪里以及它们如何对水分胁迫做出反应是很困难的。因此,火灾模型经常忽略这些影响。这可能会导致对森林干燥度的错误估计,最终在我们的野火风险评估中引入错误。我们怎样才能做得更好?

美国林务局在 2016-2019 年间进行的森林干燥度测量。图片作者。
当我看到美国林务局在美国西部收集数千份森林干燥度测量数据时,我看到了一个机会。利用这些测量数据,我用神经网络直接估算了森林的干燥度。
从太空感知的森林干旱
虽然观察森林变褐和变绿很常见,但观察森林干燥(和潮湿)很有挑战性,因为我们看不到树里面的水。虽然存在一些模型来估计森林的干燥度,但它们无法缩放,因为它们需要知道植被的几何形状。因此,科学家们只能估计 5-17 种植物的森林干燥度。通过让神经网络使用各种遥感输入来计算树冠几何形状的影响,我能够通过验证 56 种不同的物种来绘制整个美国西部的森林干旱地图。
在交叉验证时,我发现我的景观尺度森林干燥度制图工作与其他较小尺度的分析一样准确。可用于模型训练的大量地面数据,结合基于领域知识对神经网络进行的修改,产生了这个结果(如下所述)。
物理辅助神经网络

将森林干燥度(表示为“LFMC”)与输入变量联系起来的概念模型。图片作者。
由于森林干燥度是一个随时间变化的变量,它依赖于整个前一个季节(在这种情况下是 3 个月)的时间观察,我使用了一个基于长短期记忆(LSTM)模型的递归神经网络。这一决定是在初步结果表明仅从卫星观测的快照(及时)预测森林干旱导致非常差的时间可预测性之后做出的。
利用 Sentinel-1 卫星的微波后向散射和 Landsat-8 卫星的光学反射来训练 LSTM 模型。
我根据我们对将输入与森林干燥联系起来的物理过程的概念性理解,通过使用精心设计的输入,使模型成为物理辅助的。这是通过两种方式实现的:
- 通过使用微波和光学比率,这些比率是根据与卫星有关的机械模型的形式选择的。由于微波后向散射对植被水和光学反射对干生物量具有更高的敏感性,微波后向散射和光学反射的比率模拟了森林干燥的定义的结构。因此,我包括了偏振和光学反射率和指数的微波反向散射的比率。
- 通过选择辅助静态输入,提供关于土壤类型、植被结构和地形对遥感观测的影响的信息。
用于实现物理辅助递归神经网络的完整代码库可以在这里找到并且该算法的进一步细节包括在杂志环境遥感中的这个【开放存取出版物】中。
结论
现在有了动态的、完整的森林干燥度地图,我计划测试野火发生和规模对森林干燥度的敏感性。在这个过程中,我将量化这些森林干旱地图对野火风险预测的价值。

使用我的 LSTM 模型绘制的森林干燥度图。森林干燥度显示为树木含水量相对于其干生物量的百分比。从地图上看,与 2019 年相比,2020 年似乎会因为更干燥的燃料而导致火灾活动增加。图片作者。
使用我的 网络应用 探索你在美国西部当地社区的森林干旱动态。
这篇文章的修改版本最初出现在 AWS 公共部门博客中。
走向无代码分析:让每个人都成为数据科学家
Wix 让每个人都成为网站建设者,Canva 让每个人都成为设计师。现在,是时候让每个人都成为数据科学家了。

弗兰基·查马基在 Unsplash 上拍摄的照片
在互联网的早期,建立一个网站是 T4 的技术壮举。现在,像 Wordpress 这样的无代码工具使任何人都可以快速启动一个网站,与 1995 年的 31,000 个网页相比,今天已经有超过 50 亿个网页。
同样,今天的数据科学受到高技术准入门槛的损害,但将通过无代码分析工具实现民主化。数据科学家通过复杂工具的字母汤“将数据转化为见解”。
r,SAS,SQL,NoSQL,TF,D3.js,NLTK,RF,MATLAB,ML。我编了一个,没关系。
关键是,如果企业不理解数据科学,他们就无法利用数据科学,而且不是每个人都可以雇佣数据科学家团队——在美国,他们的工资超过六位数。
一项关于 500 名美国雇员如何使用数据的调查显示,企业没有从数据中获得他们需要的洞察力。例如,68%的营销人员需要更多的数据可视化功能,54%的会计师需要更多的预测分析功能来预测风险。

来自 GetApp 的统计数据。用制作的图形美观。AI 。
商业领袖对此能做些什么
无论你是管理一个营销团队还是经营一家咖啡馆,所有领导者都应该能够使用数据科学,而不需要成为“人工智能向导”或“代码忍者”。
这就是数据科学民主化的含义。像 Apteo 这样的无代码工具的目标是让每个人都成为数据科学家,让所有规模和技能水平的团队利用这项技术,从可视化到预测分析。
为了明确无代码分析可以应用于任何垂直领域,你可以看看一个罗宾汉数据追踪器,这个摇摆州追踪器,或者这个汤姆·布拉迪分析。
民主化——不仅仅是一个时髦词
通过民主化的设计,Canva 成为了一家 60 亿美元的公司。
Wix 通过民主化网站建设,在纳斯达克获得了高达 126 亿美元的市值。
Shopify 使电子商务民主化,目前在纽约证券交易所的市值超过 1000 亿美元。
有人可能会说,谷歌——一家价值万亿美元的公司——通过让世界信息触手可及而使知识民主化,通过让你按点击付费而无需购买广告牌而使广告民主化,等等。
1998 年探索谷歌理念的开创性论文提出了这样的假设:
“迄今为止,大多数搜索引擎的开发都是在很少公布技术细节的公司进行的。这导致搜索引擎技术在很大程度上仍然是一门黑色艺术,并以广告为导向。
22 年后,谷歌每天回答数十亿次查询。谷歌让寻找信息变得容易。无代码分析使寻找见解变得容易。
甚至在 90 年代,我们就知道“最好的导航服务应该让在网上找到几乎任何东西变得容易。”同样,最好的数据科学服务应该让你很容易找到对数据的任何见解。
寻找洞见
忘记从令人困惑的自述文件中导入依赖项或在 Tableau 中编写 SQL,无代码工具使任何人都可以识别趋势、KPI 驱动因素并创建预测。

Apteo 的三步流程。
例如,假设你是一个 SaaS 的企业主,对降低“用户流失率”感兴趣那是你的 KPI。无代码工具允许您选择 KPI,或者您试图解决的问题,所有繁重的工作都在后台完成。
在 Apteo 的例子中,有助于分析 KPI 的属性是自动选择的,但是用户可以添加或删除属性。很快就会创建一个模型,让您根据插入的属性生成预测。
从亚马逊、沃尔玛、网飞和麦当劳到你
许多行业领先的公司将他们的成功归功于数据的力量,但他们也有资源雇佣大型数据科学团队。
例如,沃尔玛使用预测模型来预测特定时段的需求,这样他们就可以安排适当数量的员工,改善结账体验。
亚马逊的推荐功能为亚马逊的收入贡献了高达 35%的份额——上一财年几乎达到1000 亿美元。
麦当劳以3 亿美元收购了数据公司 Dynamic Yield,以预测其各地的客户需求,减少浪费,并增加利润。
再举一个例子,你的网飞反馈是为你和你的个人兴趣定制的,通过预测模型输入数据,比如你喜欢的节目,你观看它们的日期和时间,你使用的设备,你是否暂停了节目(以及你是否在之后继续),等等。
通过使用无代码数据科学工具,您自己的企业可以利用从亚马逊到沃尔玛的行业领导者使用的强大技术。
走向激流科学:数据工程
激流科学
挖掘 BitTorrent 网络

艾莉娜·格鲁布尼亚克在 Unsplash 上的照片
最近,我在综艺节目上偶然发现了一篇名为“网飞如何利用盗版挑选节目”的旧文章。它讲述了网飞如何挖掘 BitTorrent 网络来确定哪些程序必须被选择用于其平台。最近的一篇文章(“Torrent 流量在欧洲、中东和非洲超过网飞”)强调,多年来 BitTorrent 流量已经逐渐下降,但其使用在欧洲、非洲和亚太地区仍然很突出。显然大量流媒体平台的兴起是 BitTorrent 流量复苏的原因(查看这篇文章)。顺便说一句,必须注意的是,VPN 的广泛使用使得识别流量的来源变得困难,因此必须有保留地分析这些统计数据。
有人为了社会的更大利益而分享他们的带宽,这种想法违背了“公地热”的理论,这是令人惊讶的。
BitTorrent 网络吸引我有两个主要原因。首先,从创新的角度来看,布拉姆·科恩功不可没。使用我刚刚熟悉的简单 CS 原则,在上传的同时下载和组装单个文件的想法很鼓舞人心。第二点是其运作的经济性。有人会为了社会的更大利益而分享他们的带宽,这种想法违背了公地悲剧的理论,这是令人惊讶的。
一言以蔽之的 BitTorrent
简单地说,它是一个对等共享协议,试图解决三个主要问题。首先,它提供了一种算法来将一个大文件分割成块,确定哪个对等体拥有哪个块,以及哪个块应该被发送到哪里,而不会产生很大的开销。第二,它试图解决一旦下载了文件,对等点就会频繁地从网络中流出的问题。最后,公平的问题,处理保持上传和下载率之间的相关性。
要使用 BitTorrent 网络,需要一个可以将对等点连接到网络的客户端。在网络上共享的每个文件都与包含客户端所需信息的种子文件相关联。共享完整文件的对等点称为种子,下载文件的对等点称为网络上的吸血鬼。为了网络的健康,种子设定者最好能长时间设定文件的种子。
该协议的更多技术细节超出了本文的范围。查看维基百科了解更多信息。
挖掘 BitTorrent 网络
BitTorrent 网络由与网络中的文件和网络中对等体的特征相关的数据组成。例如,网飞感兴趣的是确定哪些是它的消费者想要观看的受欢迎的节目。BitTorrent 是一个世界范围的网络,确定其同伴的地理位置有助于挖掘许多有趣的模式。比如一个国家的社会政治指标和观影习惯有什么关联?特定国家喜欢的音乐类型是什么?哪个国家的色情消费最高?
只有当我们有了一个从 BitTorrent 网络获取数据的框架时,这些问题和许多其他问题才能被探索。这是本文的重点。在这个系列、名为洪流科学的后续文章中,我将报告执行这一分析所采用的不同技术,并分享从这一调查中获得的结果。
数据工程
获取 BitTorrent 数据的过程分为两个部分。首先,抓取种子网站以找到流行的文件(大部分是盗版视频)以及与每个文件相关的对等点(种子和吸血鬼)的数量。许多流行的文件被多次上传,这就需要对文件名进行相似性匹配,并组合属于相同内容的信息。
其次,确定每个文件的对等体的地理位置。请注意,这些信息在 torrent 网站上并不容易获得。这需要对 BitTorrent 协议的工作原理有所了解。
整个过程必须定期重复,以收集时序数据。
擦
让我们从第一部分开始。这需要抓取流行的种子网站,如海盗湾,1337x 等。本文仅关注 1337x.to。该网站定期更新按周和日分组的趋势种子列表,涵盖电视、电影、应用程序、游戏等类别。

种子网站快照:1337x.to
对于每个趋势部分,例如趋势纪录片,可以提取种子的名称。查看下面的快照。对于这些种子,我们需要提取种子和水蛭的数量,上传大小,时间等。以及播种者和吸血者的地理位置。

从 1337 年到 2010 年的趋势纪录片
这相当简单。每个网站都需要一个自定义代码。以下代码片段完成了 1337x.to 的工作

代码片段— BeautifulSoup
欲了解更多关于使用美汤的信息,请查看本文。
以下是典型输出的示例。请注意,由于从多个来源上传相同的内容导致多个种子文件,从而出现了重复。以“阿特米斯奇幻历险”为例,它已经上传了两次(输出中的 2 和 3),可能在文件格式和其他规范上有所不同。但是当涉及到数据挖掘和提取模式时,必须将两者视为同一个文件,因为它们对应于同一个电影。这同样适用于名为“Gulabo Sitabo”的印地语电影(输出中的 1 和 4)。

从网站抓取数据的实例(快照)。
在下一节中,我将讨论如何高精度地找到这些副本。
检测重复项
这个问题是关于寻找一对文本串之间的相似性。考虑一个函数,它可以返回一个度量或一个分数来表示两者之间的相似性。第一组想法可能围绕着类似 Jaccard 距离或余弦距离的相似性度量(查看这篇文章))。但这实际上是一个简单得多的问题,类似史密斯-沃特曼算法的东西适合于这个目的。
Smith-Waterman 算法执行局部序列比对;即,用于确定两串核酸序列或蛋白质序列之间的相似区域。史密斯-沃特曼算法不是查看整个序列,而是比较所有可能长度的片段,并且优化的相似性度量。”——维基百科上说的。
swalign 是一个 python 包,它实现了这种在幕后使用动态编程的算法。查看下面的代码片段,它展示了运行中的算法。

用于检测相同种子内容的代码片段
匹配和不匹配值可以改变,以适应当前的应用。通常的值是 2 和-1,这对我们的目的来说也很好。可以看出,当比较 name1 和 name2 时,得分为 14 ,而 name1 和 name3,属于同一部名为 Gulabo Sitabo 的宝莱坞电影,得分为 88 。
注意,对于同名但不同集或季的电视节目,这种相似性度量将失效。尽管这将取决于一个人希望做什么样的分析。如果有人希望比较一部电视连续剧不同季节或不同集的受欢迎程度,这可能行不通。但是,如果人们希望在电视节目之间进行广泛的比较,那么这仍然是可行的。
通过考虑这样的启发,即只有字符串的开头部分与名称相关,而后面部分只是元数据,并删除点、空格和连字符,我们可以获得更准确的分数。这是使用下面的代码片段实现的。

代码片段:清理
提取对等地理位置
这是一个有趣的部分,因为它需要对 BitTorrent 协议的工作原理有更深入的理解。如前所述,为了使用 BitTorrent 下载文件,需要一个客户端,如洪水。向客户端提供关于所需数据的信息,这是找到拥有需要下载的文件的对等体列表所必需的。该信息以指向存储对等体列表的追踪器网站的指针的形式可用。
通过使用分布式哈希表,也可以在没有跟踪器的情况下执行上述任务。这在追踪器网站被来自对等点的请求过载时更有用,因为客户端需要定期刷新对等点列表。在这种情况下,每个节点都维护一个独立的路由表,当该节点与网络中的其他节点通信时,该路由表会更新。注意,即使对于无跟踪器的种子,至少需要一个节点来引导到网络中。
如果这一切都令人困惑,或者你打算了解更多,检查下面的视频。
让我们看一下完成这项工作的代码片段。我使用了 BitTorrent DHT 的 python 实现( Github 链接)——Bt DHT。
让我们尝试识别正在下载流行的开源图像编辑软件 GIMP 的同行的地理位置。这将需要从网站 1337x.to 获取的 infohash ,如下图所示。

从 1337x.to 获得 GIMP 图像编辑器的 Infohash
下面的代码使用 dtdht 包从网络中提取对等体列表。输出显示了网络中当前与该种子相关联的对等体的 IP 地址列表。

提取对等 IP 列表的代码片段
一旦获得 IP 列表,我们就可以使用 geoIP2 数据库来确定地理位置。当你安装包, maxminddb-geolite2 时,这实际上非常简单。
查看下面的代码片段,其中显示了上面显示的 IP 地址所属的国家。

Gimp torrent 的对等机所在的国家。
显然,GIMP 正在被全世界下载,列表中有 145 个对等点。美国有 29 名同行,紧随其后的俄罗斯有 24 名同行。
下图显示了该特定软件在各个国家的同行频率。

每个国家的同行数量
接下来呢?
我目前运行了一个 cronjob,每 6 小时从 torrent 网站收集一次数据。在接下来的几周/几个月里,我将收集足够的数据来尝试数据挖掘算法,并寻找模式和关系。
俄语中有毒评论的检测
表达各种观点的自由,包括有毒、攻击性和辱骂性的评论,可能会对人们的意见和社会凝聚力产生长期的负面影响。

因此,自动识别和调节互联网上的有毒内容以消除负面后果的能力是现代社会的必要任务之一。本文旨在自动检测俄语中的有毒评论。作为数据来源,我们利用匿名发布的 Kaggle 数据集,并额外验证其标注质量。为了建立分类模型,我们对两个版本的多语言通用句子编码器、来自 Transformers 的双向编码器表示和 ruBERT 进行了微调。微调后的 ruBERT 达到了 F 1 = 92.20%,展示了最好的分类得分。我们向研究社区公开了经过训练的模型和代码样本。
1.介绍
如今,社交网站已经成为在线表达意见的主要方式之一。内容的快速增长导致未经核实的信息量每天都在增加。表达各种观点的自由,包括有毒、攻击性和辱骂性的评论,可能会对人们的意见和社会凝聚力产生长期的负面影响。因此,自动识别互联网上的有毒言论和不当内容以消除负面后果的能力是现代社会的必要任务之一。大公司已经进行了大量的研究[23],[26],[39],[47],然而,为了让社会接受这种限制言论自由权的制度,有必要进行深入的了解和公开的研究。
近年来,组织了越来越多的评估跟踪,如[3]、[21]、[42],并对最佳检测方法进行了评估。目前,先进的深度学习技术往往是这项任务的优越方法[1],[35]。虽然一些论文直接检查了俄语有毒语言、辱骂和仇恨言论的检测[2]、[8]、[17],但只有一个公开可用的俄语有毒评论数据集[5]。该数据集是在 Kaggle 上发布的,没有关于注释过程的任何细节,因此在没有深入检查的情况下在学术和应用项目中使用该数据集可能是不可靠的。
本文主要研究俄语文本中有害评论的自动检测。为此,我们对俄语毒性评论数据集进行了注释验证[5]。接下来,我们通过探索预训练多语言通用语句编码器(M-USE) [48]的预训练多语言版本、来自变压器(M-BERT) [13]和 ruBERT [22]的双向编码器表示的迁移学习来建立分类模型。性能最好的模型 ruBERT-Toxic 在二元分类任务中实现了 F 1 = 92.20%。我们在 GitHub 上公开了示例代码和经过微调的 M-BERT 和 M-USE 模型。
这个库包含来自 Transformers (M-BERT)的经过微调的多语言双向编码器表示…
github.com](https://github.com/sismetanin/toxic-comments-detection-in-russian)
文章的其余部分组织如下。在第 2 节中,我们给出了相关工作的简要概述,包括现有俄语注释数据集的总结。在第 3 节中,我们提供了俄语有毒评论数据集的概述,并描述了注释验证流程。在第 4 节中,我们描述了文本分类任务的语言模型的采用。在第 4 节中,我们描述了分类实验。最后,我们提出了系统的性能和进一步的研究方向。
2.相关著作
针对不同数据源的有害评论检测已经进行了大量的工作。例如,Prabowo 及其同事评估了朴素贝叶斯(NB)、支持向量机(SVM)和随机森林决策树(RFDT)算法,用于检测印度尼西亚 Twitter 上的仇恨言论和辱骂性语言[34]。实验结果表明,使用单词单字特征和 SVM 模型的分级方法的准确率为 68.43%。在论文[15]中,Founta 等人提出了一种基于深度 GRU 的神经网络,该网络具有用于有毒文本分类的预训练手套嵌入。所开发的模型在五个滥用文本数据集上取得了高性能,AUC 值在 92%到 98%之间。
越来越多的研讨会和比赛致力于有毒语言、仇恨言论和攻击性语言的检测。例如,SemEval-2019 的 HatEval 和 OffensEvalHASOC at FIRE-2019;在 GermEval-2019 和 GermEval-2018 上识别攻击性语言的共同任务;TRAC at COLING-2018。任务提交中使用的模型各不相同,从传统的机器学习,如 SVM 和逻辑回归,到深度学习,如 RNN,LSTM,GRU,CNN,CapsNet,包括注意机制[45],[49],到最先进的深度学习模型,如 ELMo [31] BERT [13],以及 USE [9],[48]。相当数量的表现最好的团队[18]、[24]、[27]、[28]、[30]、[36]、[38]利用了所列的预训练语言模型中的嵌入。由于来自预训练语言模型的表示显示了高分类分数,它们被广泛用于进一步的研究。例如,来自洛林大学的学者使用两种方法对推文进行了多类和二元分类:使用预训练的单词嵌入训练 DNN 分类器,并微调预训练的 BERT 模型[14]。他们观察到,BERT 微调比 CNN 和建立在 FastText 嵌入之上的双向 LSTM 神经网络表现得更好。
虽然大量研究检查了俄语社交媒体源中的毒性和攻击性行为[7]、[33]、[41],但直接探索文本毒性自动分类的研究论文数量有限。Gordeev 利用卷积神经网络(CNN)和随机森林分类器(RFC)来检测英语和俄语文本中的攻击状态[17]。攻击性注释消息的语料库包括大约 1000 条俄语注释消息和大约 1000 条英语注释消息;然而,它没有公开。经过训练的 CNN 模型在俄语文本的攻击性二元分类中取得了 66.68%的准确率。基于这些结果,作者认为细胞神经网络和深度学习方法在攻击检测任务中似乎更有前景。Andrusyak 及其同事提出了一种无监督的概率方法,使用种子字典对来自 YouTube 的用乌克兰语和俄语编写的辱骂性评论进行分类[2]。作者发布了一个包含 2000 条评论的人工标注数据集,但它包含了俄语和乌克兰语的评论。因此,它不能直接应用于俄语内容的研究。
最近的几项研究旨在自动识别俄语社交媒体中对移民和族裔群体的态度,包括识别基于身份的攻击。Bodrunova 和他的同事通过分析来自俄语 LiveJournal [8]的 363,000 个帖子,研究了人们对来自前苏联南部和其他国家的移民的态度。他们发现,在俄罗斯的博客中,移民既没有引发大量的讨论,也没有经历最糟糕的待遇。此外,北高加索人和中亚人受到非常不同的待遇。贝苏德诺夫的研究小组发现,传统上俄罗斯人对来自高加索和中亚的移民更加敌视;同时,他们普遍接受乌克兰人和摩尔多瓦人作为他们的潜在邻居[6]。然而,根据 Koltsova 及其同事的说法,各种中亚人和乌克兰人带头持否定态度[19]。尽管有些人讨论了旨在检测有毒语言、辱骂和仇恨言论的学术研究,但他们都没有向研究界公开他们的俄语数据集。据我们所知,俄语毒性评论数据集[5]是唯一公开可用的俄语毒性评论数据集。然而,这个数据集是在 Kaggle 上发布的,没有任何关于创建和注释过程的描述,因此在没有深入检查的情况下,在学术和应用项目中使用这个数据集可能是不可靠的。
因此,由于针对俄语毒性检测的研究很少,我们决定在俄语毒性评论数据集上评估深度学习模型[5]。据我们所知,没有研究致力于有毒评论分类的基础上,这种来源的数据。在最近的文本分类论文中,我们将多语言 BERT 和多语言使用确定为最常见和最成功的语言模型之一。此外,只有这些语言模型正式支持俄语。我们决定利用微调作为迁移学习方法,因为最近的微调研究报告了最好的分类结果[13]、[22]、[43]、[48]。
3.有毒评论数据集
Kaggle 俄语有毒评论数据集【5】是由 2ch 和 Pikabu 的注释评论集合而成,于 2019 年发布在 Kaggle 上。它包含 14,412 条评论,其中 4,826 条被标记为有毒,9,586 条被标记为无毒。评论的平均长度是 175 个字符;最小长度为 21,最大长度为 7,403。
为了验证数据集的标注质量,我们决定手动标注注释的子集,并使用注释者间协议度量来比较原始标签和我们的标签。我们决定假设数据集注释是有效的,以防注释者之间达成实质性或高级别的一致。首先,我们对这个数据集的一部分(3000 条评论)进行人工注释,然后将我们的类标签与原始标签进行比较。这一注释是由众包平台 Yandex 上讲俄语的人进行的。托洛卡,这已经在一些关于俄语文本的学术研究中使用[10]、[29]、[32]、[44]。作为注释指南,我们使用 Jigsaw 毒性评论分类挑战中的毒性和子属性的注释说明。根据指导方针,注释者被要求在一组在线评论中检测文本的毒性。对于提供的每条评论,注释者需要选择评论中的毒性级别。为了从标注者那里获得更准确的响应,并限制作弊标注者对任务的访问,我们利用了以下技术:根据标注者对控制任务的响应为他们分配一项技能,并禁止给出错误响应的执行者;限制响应过快的注释者对池的访问;限制连续几次输入验证码失败的注释者对任务的访问。每篇文章都由 3 到 8 个注释者使用动态重叠技术进行注释。接下来,使用基于Yandex 的 Dawid-Skene 方法[12]对结果进行汇总。Toloka 的推荐。根据 Krippendorff 的 alpha 值 0.81,注释者表现出高度的注释者间一致性。最后,根据 Cohen [11]的说法,原始标签和我们的聚合标签之间的 Cohen kappa 系数构成了 0.68,这是注释者间协议的实质水平。因此,我们假设数据集注释是有效的,特别是考虑到注释指令中的潜在差异。
4.机器学习模型
4.1.基线
作为基线方法,我们选择了一种基于基本机器学习的方法和一种基于现代神经网络的方法。在这两种情况下,我们应用了以下预处理技术:用关键字替换 URL 和用户名,删除标点符号,并将字符串转换为小写。
第一种是多项式朴素贝叶斯(MNB),它往往在文本分类任务中表现良好[16,40]。为了构建 MNB 模型,我们使用了词袋模型和 TF-IDF 矢量化。
第二个是双向长短期记忆(BiLSTM)神经网络,它在最近的情感分析研究中表现出较高的分类分数。对于神经网络的嵌入层,我们在 RuTweetCorp [37]的俄语推文集合上预先训练了 Word2Vec 嵌入( dim = 300) [25]。在 Word2Vec 嵌入的顶部,我们添加了两个堆叠的双向 LSTM 层。接下来,我们添加了一个隐藏的完全连接层和 sigmoid 输出层。为了减少过拟合,具有高斯噪声的正则化层和丢弃层也被添加到神经网络中。我们使用 Adam 优化器,初始学习率为 0.001,分类二进制交叉熵作为损失函数。我们用 10 个时期的冻结嵌入来训练我们的网络。我们试图在降低学习速率的同时解冻不同时期的嵌入,但未能获得更好的结果。这可能与训练数据集的大小有关[4]。
4.2.来自变压器的双向编码器表示
目前官方提供了两个多语种版本的 BERT_BASE,但只有 Cased 版本是官方推荐的。BERT_BASE 接受一个不超过 512 个令牌的序列,并输出这个序列的表示。单词标记化由单词标记化器[46]通过初步的文本规范化和标点分裂来执行。基于 BERTBASE 案例,莫斯科物理与技术研究所的研究人员预先训练并发布了俄语的 ruBERT 模型[22]。我们使用了预先训练的多语言 BERT_BASE Cased 和 ruBERT,支持 104 种语言,包括俄语,有 12 个堆叠的变压器块,隐藏大小为 768,12 个自关注头,一般有 110M 参数。微调阶段使用论文[43]和官方知识库【2】中推荐的参数进行:训练周期数为 3,预热步骤数为 10%,最大序列长度为 128,批量为 32,学习速率为 5e-5。
4.3.多语言通用句子编码器
作为输入数据,多语言 USE_Trans 取不超过 100 个令牌的序列,而多语言 USE_CNN 取不超过 256 个令牌的序列。句子片断标记化[20]用于所有支持的语言。我们使用预先训练的多语言 USETrans,它支持包括俄语在内的 16 种语言,变压器编码器有 6 个变压器层,8 个注意头,滤波器大小为 2048,隐藏大小为 512,一般有 16 个参数。我们还使用了预先训练的多语言 USE_CNN,它支持包括俄语在内的 N 种语言,CNN 编码器有 2 个 CNN 层,滤波器宽度为(1,2,3,5),滤波器大小为 256,一般有 N 个参数。对于这两个模型,我们使用了来自和 TensorFlow Hub 页面的推荐参数:100 个训练时段,32 个批量,3e-4 的学习率。
5.实验
我们评估了以下基线和迁移学习方法:多项式朴素贝叶斯分类器、双向长短期记忆(BiLSTM)神经网络、来自变压器的双向编码器表示的多语言版本(M-BERT)、ruBERT、多语言通用句子编码器的两个版本(M-USE)。训练模型在测试子集(20%)上的分类性能可以在表 2 中找到。所有微调的语言模型在精确度、召回率和 F 1-measure 方面都超过了基线方法。根据结果,ruBERT 实现了 F 1 = 92.20%,展示了最好的分类分数。
6.结论
因此,我们微调了两个版本的多语言通用句子编码器[48],来自 Transformers [13]和 RuBERT [22]的多语言双向编码器表示,用于俄语中的有毒评论检测。微调后的 RuBERTToxic 达到了 F 1 = 92.20%,展示了最好的分类得分。这项研究对实践和研究的贡献有三个方面。首先,我们概述了现有的关于俄语内容中有毒评论检测的知识库。在这样做的过程中,我们确定了现有的唯一一个公开可用的俄文毒性评论数据集。其次,我们对这个数据集的标注质量进行了验证,因为它是在 Kaggle 上匿名发布的。最后,为了给进一步的研究提供强有力的分类基线,我们向研究社区公开了预先训练的基于 BERT、基于 ruBERT 和基于多语言使用的模型。
这个库包含来自 Transformers (M-BERT)的经过微调的多语言双向编码器表示…
github.com](https://github.com/sismetanin/toxic-comments-detection-in-russian)
参考
你可以在会议论文中找到所有参考资料。
TPOT:Python 中的自动机器学习
面向所有人的机器学习?
每个人和他们的母亲都想进入机器学习领域。这很好,但是这些年来这个领域在一定程度上变得自动化了。如今,你不必成为一名机器学习工程师,就能生产出高质量的模型。如何?这就是像 TPOT 这样的图书馆发挥作用的地方。

如果你更喜欢视频,或者只是想巩固你的知识,请随意观看我们关于这个主题的视频。源代码包括:
让我们面对事实——机器学习并没有媒体炒作的那么有趣。你可以用它做一些令人惊奇的事情,不要误会我的意思。我说的只是实际的机器学习过程。你知道,寻找最优算法及其超参数的过程。
这一部分正在变得(或者已经变得)自动化,这很好——因为我们作为工程师可以专注于更有趣的事情。
理想的读者是熟悉 Python 编程语言和机器学习项目一般流程的人。你不需要成为专家,甚至不需要在这个领域工作,但是你应该熟悉最常用的算法以及如何使用它们。
这篇文章的结构如下:
- TPOT 是什么?
- 遗传程序设计简介
- 数据集加载和准备
- TPOT 在行动
所以事不宜迟,让我们开始吧!
TPOT 是什么?
TPOT,或基于树的流水线优化工具是一个用于自动机器学习的 Python 库。以下是官方定义:
把 TPOT 当成你的数据科学助理。TPOT 是一个 Python 自动化机器学习工具,它使用遗传编程优化机器学习管道。[1]
在某种程度上,TPOT 是你的数据科学助手。它自动化了“无聊”的事情,把数据收集和准备的任务留给了你。我知道这一部分对你们中的一些人来说并不有趣,但这是 80%的工作。有了像 TPOT 这样的图书馆,这个比例可能只会更高。
此外,由于显而易见的原因,数据收集和准备不能完全自动化。官方文件中的另一句话说明了这一点:
TPOT 将通过智能地探索成千上万个可能的管道来为您的数据找到最佳管道,从而自动化机器学习中最乏味的部分。[1]
让我们快速看一下你的平均机器学习管道,看看 TPOT 在哪里:

如您所见,该库自动化了该过程的每一个繁琐部分。
但是怎么做呢?通过使用被称为“基因编程”的东西。让我们在下一节探讨这个术语。
遗传程序设计简介
官方网站很好地总结了这个概念:
遗传编程(GP)是进化算法(EA)的一种,是机器学习的一个子集。进化算法用于发现人类不知道如何直接解决的问题的解决方案。摆脱了人类的先入之见或偏见,EAs 的自适应特性可以产生与人类最大努力相当甚至更好的解决方案。
受到生物进化及其基本机制的启发,GP 软件系统实现了一种算法,该算法使用随机变异、交叉、适应度函数和多代进化来解决用户定义的任务。GP 可用于发现数据中特征之间的函数关系(符号回归),将数据分组(分类),以及辅助电路、天线和量子算法的设计。GP 通过代码合成、遗传改良、自动错误修复应用于软件工程,并用于开发游戏策略……等等。[2]
有了正确的数据和正确的数据量,我们可以使用机器学习来学习任何函数。尽管如此,知道使用哪种算法可能令人生畏——它们实在太多了。我们仍然没有触及超参数调整的想法。
这就是遗传编程真正闪耀的地方,因为它受到达尔文自然选择过程的启发,它们被用于生成计算机科学中优化的解决方案。
遗传算法有 3 个特性:
- 选择:你有一个可能的解决方案和一个适应度函数的群体——然后在每次迭代中评估每个适应度
- 交叉——选择最优解,进行交叉,产生新的种群
- 变异——带着他们的孩子,用一些随机的修改使他们变异,直到你得到最合适或最好的解决方案
听起来确实很多,但是 TPOT 并不要求我们成为基因编程专家。了解这些概念总是有益的。
好了,到目前为止我们已经讨论了理论部分。我们将在下一部分收集和准备一些数据。
数据集加载和准备
我喜欢在我的大多数例子中使用泰坦尼克号数据集。数据集不是太基础,因为它需要一些准备,但也不是太复杂,因为准备过程需要太长时间。你肯定可以比我花更多的时间来准备这个数据集,但这足以满足我们的需求。
进口方面,我们现在需要三样东西:熊猫、标准器和火车试分裂:
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
接下来,我们可以加载数据集并显示前几行:
data = pd.read_csv(‘[https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv'](https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv'))
data.head()

这是我们要做的准备工作:
- 删除无关列(车票和乘客 Id
- 将性别列重新映射为零和一
- 检查一个乘客是否有一个独特的头衔(如医生)或更普通的头衔(如先生、小姐。)—可以从名称列中提取
- 检查客舱信息是否已知——如果客舱栏的值不是 NaN
- 从开始的栏创建虚拟变量— 3 个选项
- 用简单平均值填充年龄值
这是准备过程的代码:
data.drop([‘Ticket’, ‘PassengerId’], axis=1, inplace=True)gender_mapper = {‘male’: 0, ‘female’: 1}
data[‘Sex’].replace(gender_mapper, inplace=True)data[‘Title’] = data[‘Name’].apply(lambda x: x.split(‘,’)[1].strip().split(‘ ‘)[0])
data[‘Title’] = [0 if x in [‘Mr.’, ‘Miss.’, ‘Mrs.’] else 1 for x in data[‘Title’]]
data = data.rename(columns={‘Title’: ‘Title_Unusual’})
data.drop(‘Name’, axis=1, inplace=True)data[‘Cabin_Known’] = [0 if str(x) == ‘nan’ else 1 for x in data[‘Cabin’]]
data.drop(‘Cabin’, axis=1, inplace=True)emb_dummies = pd.get_dummies(data[‘Embarked’], drop_first=True, prefix=’Embarked’)
data = pd.concat([data, emb_dummies], axis=1)
data.drop(‘Embarked’, axis=1, inplace=True)data[‘Age’] = data[‘Age’].fillna(int(data[‘Age’].mean()))
请随意复制,因为这不是关于数据准备的文章。
这是我们的数据集现在的样子:

看起来不错,但是有些属性比其他属性大得多,比如年龄、费用。我们将使用标准定标器来解决这个问题,但首先,让我们执行训练测试分割:
X = data.drop(‘Survived’, axis=1)
y = data[‘Survived’]X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.8)
现在,让我们将标准定标器用于训练数据,并转换训练和测试数据:
ss = StandardScaler()
X_train_scaled = ss.fit_transform(X_train)
X_test_scaled = ss.transform(X_test)
这一节到此为止。在下一部中,我们将看到 TPOT 图书馆的运作。
TPOT 在行动
到目前为止,我们已经讨论了很多,现在我们将把重点转移到文章的核心部分。首先,我们需要导入 TPOT——回归变量或分类器。我们在这里处理分类问题,所以猜猜我们将使用哪一个。
from tpot import TPOTClassifier
培训过程再简单不过了:
tpot = TPOTClassifier(verbosity=2, max_time_mins=10)
tpot.fit(X_train_scaled, y_train)
在这里,我们将 verbosity 参数指定为 2,因为我们希望打印出更多的信息,并且还指定了我们希望训练持续多长时间。你可以随意训练更长时间,但是 10 分钟对于一个演示案例来说是完全可以的。
我们将在培训期间打印出一些信息:

只有 4 代,所以模型不会完美,但我们不想花一整天来训练模型。你可以。
我们现在可以检查最佳管道:
tpot.fitted_pipeline_

正如你所看到的,梯度推进方法与调整的超参数值一起使用。TPOT 只用了 10 分钟就做到了这一点!想想手动到达这里需要多长时间。
我们现在可以检查测试集的准确性:
tpot.score(X_test_scaled, y_test)**>>> 0.8491620111731844**
无论如何都不可怕。
这就足够介绍 TPOT 图书馆了。你可以自由探索。官方文档是一个很好的起点。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
参考
[1]https://epistasislab.github.io/tpot/
[2]http://geneticprogramming.com
TQDM: Python 进度条变得简单
在 Python 中创建进度条

照片由 Jungwoo Hong 在 Unsplash 上拍摄
在过去的一个月里,我一直在和一个研究员同事一起创建一个 python 包。创建一个 python 包包括一些瞧和一些令人沮丧的时刻。虽然我们将在其他时间讨论 python 包的创建过程,但今天我们将学习 Python 中的进度条。
进度条的需要
老实说,如果你一次处理最少的信息(数据),进度条永远不会真正进入你的工作流程。但是对于迭代数据集、对大量信息进行编码或训练模型等情况,进度条会非常方便。
- 它们为您提供了已经取得的进展的估计和可能需要更多时间的近似值。
- 它们向您提供进程仍在运行且没有突然终止的信息。
进步
progress包是我一直用来在 Python 中创建进度条的包。它简单,直观,并提供各种风格的进度条。
首先初始化进度条的对象bar。然后,对于每个进度,使用bar.step()步进,最后使用bar.finish()关闭该栏。该模块在处可用。
例子
要迭代 10 个数据点,您将使用以下代码:
from progress.bar import Bar
bar = Bar('Progress bar', max = 10)
for i in range(10):
bar.next()
bar.finish()
虽然它在终端上运行得很好,但当我在 Jupyter 笔记本上运行时,它根本没有显示进度条。所以,我开始寻找替代品,我找到了tqdm,我发现它被广泛使用,并决定进行转换。
tqdm
这个tqdm包使得创建进度条变得非常简单,既可以在终端上显示,也可以在 Jupyter 笔记本上显示。所以,我把代码换成了使用tqdm。文档和用法可在 GitHub 上获得。
例子
假设您有下面的循环,它迭代了 1000000000 次。
for i in range(1000000000):
pass
为了有一个进度条来显示你已经取得的进展,我们将修改上面的代码如下(只要用tqdm()把这个范围括起来就行了):
from tqdm import tqdmfor i in tqdm(range(1000000000)):
pass
当我们用tqdm运行这个循环时,i仍然保存来自range()方法的值。另一方面,tqdm获取迭代次数并使用它来显示进度条,如下所示:

使用 tqdm 的进度条
该模块还可以扩展到许多复杂的问题,并可以与pandas、keras等集成。
结论
今天,我们探索了进度条,尤其是progress和tqdm。我建议你使用tdqm,,但是这两个进度条都有很大的价值。
请在评论中与我分享你的想法、观点和建议。你也可以在 LinkedIn 上联系我:https://www.linkedin.com/in/bhanotkaran22/
跟踪和组织 ML 项目
使用 Neptune.ai 组织工作、跟踪和可视化实验

Neptune.ai 仪表板和指标可视化(图片由作者提供)
每当我开始一个需要运行数百个实验的新项目时,集成实验跟踪工具是我添加到代码中的第一件事。这样的工具不仅仅是可视化度量和存储每次运行的超参数。在这篇文章中,我将介绍和描述 Neptune 工具,我在最近的项目中使用了它。
实验“管理”工具
实验跟踪工具给你的机器学习(不仅仅是)项目带来巨大的推动。您可以使用它们来跟踪超参数、可视化图表(如指标)和图像(混淆矩阵或错误分类的样本)、存储工件(模型权重)等等。
幸运的是,人们已经注意到项目管理工具是组织良好的项目的必备工具。因此,越来越多的工具和服务为此而被创造出来:彗星、 MLFlow 、海王星和权重&偏差等等。
我使用哪个工具?
我个人使用 Neptune 做我的项目。我用过一次我很喜欢,但是坦白说我还是得找足够的时间来测试其他工具。正如作者所说,Neptune 是“最轻量级”的实验管理工具。您可以随时尝试,因为它是作为一项服务提供的,并且完全免费用于您的个人项目,这意味着:
- 1 个公共和私人项目的用户帐户,
- 高达 100GB 的日志、工件等存储空间,
- 无限的实验和笔记本检查点。
公司或要求更高的用户也有其他选择。
“团队”计划允许您创建 10 倍以上的用户,并为您提供 10 倍以上的磁盘空间,但团队中每个用户的费用为 79 美元。天下没有免费的午餐……然而,用于教育、研究或非营利目的的团队计划是完全免费的(目前)。Neptune tool 也可以作为“企业”计划的一部分在内部使用(托管在您的组织内),但这主要是推荐给那些不喜欢为其产品使用 SaaS 解决方案的大型组织。
在代码中使用 Neptune
将 Neptune 与您的代码集成在一起是小菜一碟,真的。它基本上是一个带有简单 API 的 Python 模块,例如记录几个参数和指标,你所要做的就是你下面看到的。当然,代替这些神奇的数字,您将记录由机器学习框架返回的值(像 PyTorch Lightning 它对 Neptune 和其他工具有很大的支持)。
import neptuneneptune.init('Me/MyProject')
neptune.create_experiment(params={'lr':0.1, 'dropout':0.4})
neptune.log_metric('test_accuracy', 0.84)
访问Neptune 的官方页面,这里有很多它如何工作的例子,并列出了你可能感兴趣的所有特性。我会告诉你哪些是我觉得有用的,以及它们在我的项目中的样子。我将只展示我使用过的特性,但是请注意,您的项目需要大量的其他功能。
一张图胜过千言万语,所以…
特征
从仪表板视图开始(图 1。)以及所有项目的列表(包括当前正在运行的实验)。

图一。仪表板:项目列表、磁盘使用等(图片由作者提供)
在项目视图中(图 2。),浏览实验列表及其参数和结果(指标如 test_loss )。修改显示的列,包括实验信息(作者、运行时间、标签)和指标( Neptune 可以建议您根据您记录的内容添加一个指标列)。

图二。实验:最近的运行、参数和结果(图片由作者提供)
可视化指标,默认情况下,每个图表单独显示(图 3。),但是您也可以创建自定义视图。您可以决定在同一个图表中显示多个可视化效果(图 4。).

图 3。指标和其他值的可视化,例如 LR(作者提供的图像)

图 4。自定义图表:同一图表中的多个指标(图片由作者提供)
将任何文件(例如,权重、输出文件)保存为工件(图 6。).在预览窗口中查看它们(如果可能)或下载它们用于推断。

图 6。工件:保存/下载工件(如模型)(作者图片)
不使用这些是浪费时间
改变我的想法。
将您的代码连接到一个“管理”工具是一件轻而易举的事情。除此之外,以 PyTorch Lightning 为例,一旦您决定应该记录哪些指标等等。你可以互换使用 loggers(像 Tensorboard,Neptune,Weights & bias)。
您可以在后台运行实验,所有的日志、图像和结果将被保存供您以后查看。
尝试不同的工具,有些可以作为 Saas 使用,有些可以在本地运行。它们提供了各种各样的功能,当然比我描述的要多得多。它们也是相辅相成的,所以试一试,然后再看看另一个。找到你和你的团队最喜欢的一个,让你的项目井井有条。过会儿谢谢我。
使用 R 自己跟踪新冠肺炎数据
变更数据
了解如何使用 R 监测您所在国家和全球的每日冠状病毒统计数据和趋势。

今年早些时候,当全球疫情第一次获得势头时,我像大多数人一样,依赖媒体来获取最新消息。我很快发现,媒体的报道不仅不一致,而且经常提供不完整的信息。这些局限性的根本问题是,它们经常导致对数据的误解和曲解,在任何特定时间点对这场全球危机的严重性存在广泛分歧的观点就证明了这一点。
媒体机构经常精挑细选他们报道的统计数据和图表,偏好与他们试图讲述的故事相一致的耸人听闻的标题。鉴于他们的主要目标是吸引观众,你不能过多地责怪他们的这种倾向。但是,如果你希望获得新冠肺炎病毒在你的国家的当前影响的准确和可靠的图片,包括跟踪和绘制趋势,你最好自己分析源数据。
在本文中,我们将介绍如何用 R 编写一个脚本来提取和分析当前的冠状病毒数据。最好的部分是,一旦你写了脚本,你可以很容易地保存和重新运行它。您不再需要依赖基于其他人决定分析和报告的数据的不完整快照。现在,您可以轻松快捷地获得最新的新冠肺炎数据,并且可以自己跟踪当前的统计数据和趋势!
让我们开始编码吧
我使用 R Studio 并将这个脚本保存在 R markdown (Rmd)中。如果您喜欢使用 base R,不用担心,代码也可以在标准的 R 脚本中运行。我不打算介绍如何安装 R [1]或 R Studio [2],但是这两个都是开源的(并且是免费的),您可以查看下面的参考资料,找到详细的文档和安装说明。
首先,打开一个新的 Rmd(或 R)文件。如果你使用 Rmd,使用Ctrl+Alt+I(Mac:Cmd+Option+I)来插入代码块。在这个新的块中,我们将加载我们将要使用的包。请注意,如果您还没有安装这两个软件包,那么您首先需要安装它们。我包含了下面的代码,用于安装和加载它们,不过如果需要安装它们,您需要先取消对安装行的注释(删除标签)。你只需要安装软件包一次,所以一旦你安装了它们,请随意删除那些注释行。
# install.packages('lubridate')
# install.packages('tidyverse')library(lubridate)
library(tidyverse)
我们不会太详细地讨论每个包的功能,因为这超出了本文的范围。但是,如果您想了解更多,我将在下面提供对它们的简要描述,并在参考资料中包含它们的文档链接。如果您打算经常使用 R,我强烈建议您仔细看看这些包的文档。他们很牛逼,值得学习!
第一个包是 lubridate,它提供了很多处理日期变量的有用函数[3]。出于我们的目的,我们只是使用 lubridate 将数据集中提供的日期格式转换为 r 可识别的日期变量。另一个包 tidyverse 实际上是组成“Tidyverse”的一组包[4]。当您安装(和加载)tidyverse 时,包含的整个软件包组会自动为您安装(和加载)。其中两个包含的包值得一提,因为我们将多次使用它们,dplyr 和 ggplot2。
dplyr 包“是数据操作的语法,提供一组一致的动词,帮助您解决最常见的数据操作挑战”[5]。可能会有一整本书只是介绍如何使用 dplr,所以现在这样的描述已经足够了。Ggplot2 是另一个用于绘制图形和图表的神奇软件包[6]。我在研究生院上了整整一学期的数据可视化课,专门使用 ggplot2,我们只触及了可用功能的皮毛。安装和加载这两个包之后,我们就可以开始挖掘和研究数据了!
加载并浏览数据
今年早些时候,当我第一次寻找可用的冠状病毒数据集时,我检查了几个不同的选项。在对这些选项进行了几周的测试后,我对欧洲疾病控制中心(ECDC)的数据产生了偏好[7]。它持续更新(每晚),并提供我正在寻找的大部分信息,包括每日病例数、死亡人数和人口信息,按国家/地区分类。在过去的 4-5 个月中,他们已经更新了数据集几次,更改了格式并添加了列。但总的来说,他们在维护和更新数据方面非常一致。因此,ECDC 数据集一直是我追踪新冠肺炎的首选来源,也是我们在这里要使用的。
# FROM: [https://www.ecdc.europa.eu](https://www.ecdc.europa.eu)
data <- read.csv(“[https://opendata.ecdc.europa.eu/covid19/casedistribution/csv](https://opendata.ecdc.europa.eu/covid19/casedistribution/csv)", na.strings = “”, fileEncoding = “UTF-8-BOM”, stringsAsFactors = F)data# convert date format
data$date_reported <- mdy(paste0(data$month,”-”,data$day,”-”,data$year))
ECDC 为他们的 CSV 格式的数据集提供了一个方便的 URL,我们可以使用内置的“read.csv”函数轻松地将其拉入 R 中。这个链接的好处是,他们每天使用相同的 URL 更新数据集,因此您永远不需要更改代码来导入数据集。运行 read.csv 行后( Ctrl + Enter 运行单行或高亮选择),数据集保存在“data”变量中。运行下一行“data ”,查看原始数据集。

原始数据集的快照(图片由作者提供)
如您所见,“dateRep”列使用 DD/MM/YYYY 以一种非常独特的方式格式化日期。上面代码块中的最后一行代码实际上只是将日期字符串转换成 R(和 ggplot2)可以读取的格式。有很多方法可以完成这个任务,但是为了简单起见,我们将使用 lubridate 包中的 mdy()函数[3]。
基础探索
让我们先来看看全球累计总病例和死亡人数。第一行将汇总迄今全球新冠肺炎病例总数。接下来,我们将按国家进行细分,并计算该国的病例总数,以及每个国家单日报告的最大病例数。然后,我们按案例总数降序排列结果。下面,我们将计算同样的事情,但这次是冠状病毒死亡(而不是新病例)。
# total cases worldwide to date
sum(data$cases)# total cases and max single day by country
data %>%
group_by(countriesAndTerritories) %>%
summarise(cases_sum = sum(cases), cases_max = max(cases)) %>%
arrange(desc(cases_sum))# total deaths worldwide to date
sum(data$deaths)# total deaths and max single day by country
data %>%
group_by(countriesAndTerritories) %>%
summarise(deaths_sum = sum(deaths), deaths_max = max(deaths)) %>%
arrange(desc(deaths_sum))
上述代码块将有四个输出。下面是最后的输出,显示了各个国家的新冠肺炎死亡总数,以及一天内的最大死亡人数。目前(2020 年 8 月),美国是冠状病毒死亡人数最多的国家。

新冠肺炎国家死亡人数(图片由作者提供)
绘制每日病例和死亡数
现在我们将开始绘制数据以确定趋势。因为我住在美国,所以我要策划美国的案子。您可以很容易地使用其他国家修改代码,我们将很快介绍这一点。
us <- data[data$countriesAndTerritories == ‘United_States_of_America’,]
usUS_cases <- ggplot(us,
aes(date_reported, as.numeric(cases))) +
geom_col(fill = ‘blue’, alpha = 0.6) +
theme_minimal(base_size = 14) +
xlab(NULL) + ylab(NULL) +
scale_x_date(date_labels = “%Y/%m/%d”)US_cases + labs(title=”Daily COVID-19 Cases in US”)
首先,我过滤数据集,只查看美国案例,并将其存储到一个变量中。然后,我使用 ggplot2 来绘制新冠肺炎的每日新病例。有关如何使用 ggplot2 的更多信息,请查看他们的文档[6]。运行上面的程序块后,您应该会看到下图。

美国每日新冠肺炎病例(图片由作者提供)
太棒了,对吧?当然,数据描绘的画面并不可怕,但你可以自己跟踪它的事实肯定是可怕的!
让我们继续,对冠状病毒死亡做同样的事情。代码实际上是一样的,只是我们现在跟踪的是“死亡”而不是“病例”
US_deaths <- ggplot(us,
aes(date_reported, as.numeric(deaths))) +
geom_col(fill = ‘purple’, alpha = 0.6) +
theme_minimal(base_size = 14) +
xlab(NULL) + ylab(NULL) +
scale_x_date(date_labels = “%Y/%m/%d”)US_deaths + labs(title=”Daily COVID-19 Deaths in US”)

美国每日新冠肺炎死亡人数(图片由作者提供)
如你所见,死亡率描绘了一幅不同于案件数量的画面。虽然第二波病例是第一波的两倍,但第二波死亡人数还没有超过第一波。这些都是值得关注的有趣趋势,绝对值得追踪。
比较多个国家
抓紧你的帽子,因为我们将要涉及的最后一个情节将允许我们比较不同的国家!我选择了美国、中国、意大利和西班牙,但是你可以混合起来选择你感兴趣的任何国家/地区。
# Now lets add in a few more countries
china <- data[data$countriesAndTerritories == ‘China’,]spain <- data[data$countriesAndTerritories == ‘Spain’,]italy <- data[data$countriesAndTerritories == ‘Italy’,]USplot <- ggplot(us,
aes(date_reported, as.numeric(Cumulative_number_for_14_days_of_COVID.19_cases_per_100000))) +
geom_col(fill = ‘blue’, alpha = 0.6) +
theme_minimal(base_size = 14) +
xlab(NULL) + ylab(NULL) +
scale_x_date(date_labels = “%Y/%m/%d”)China_US <- USplot + geom_col(data=china,
aes(date_reported, as.numeric(Cumulative_number_for_14_days_of_COVID.19_cases_per_100000)),
fill=”red”,
alpha = 0.5)Ch_US_Sp <- China_US + geom_col(data=spain,
aes(date_reported, as.numeric(Cumulative_number_for_14_days_of_COVID.19_cases_per_100000)),
fill=”#E69F00",
alpha = 0.4)Chn_US_Sp_It <- Ch_US_Sp + geom_col(data=italy,
aes(date_reported, as.numeric(Cumulative_number_for_14_days_of_COVID.19_cases_per_100000)),
fill=”#009E73",
alpha = 0.9)Chn_US_Sp_It + labs(title=”China, US, Italy, & Spain”)
这段代码看起来有点吓人,但实际上非常简单。在顶部,我们筛选出我们感兴趣的国家的数据集,并将其保存在各自的变量中。接下来的一系列代码块创建了我们要堆叠的图,我们添加的每个国家一个。
考虑到我们要比较国家,这次我们将使用一个新列,它列出了该国过去 14 天每 100,000 人中的累计新增病例数。由于每个国家的人口不同,使用每 100,000 人的病例数使我们能够根据人口标准化病例数。让我们看看那是什么样子。

中国、美国、意大利和西班牙——每 100,000 人中超过 14 天的病例(图片由作者提供)
红色的小驼峰(在开始)是中国,绿色是意大利,黄色是西班牙,蓝色是美国。正如你所看到的,中国首先受到冲击,尽管总体影响明显低于其他三个国家(至少根据他们报告的数字)。可悲的是,相比之下,美国看起来仍然相当糟糕。在这四个国家中,西班牙受到第一波冲击最大,而美国和意大利似乎受到了类似的影响。
不幸的是,第二波像卡车一样袭击了美国(就累计病例而言),尽管我们似乎开始了下降趋势(手指交叉)。西班牙的第二波浪潮似乎仍在升温。我们必须继续监控他们的数据,看看他们何时开始拉平曲线。另一方面,义大利在第一波疫情之后,似乎在抑制新冠肺炎扩散方面做得非常出色。我们可以从他们的成功中吸取一些教训。
结论
这只是开始。我们只是触及了你可以用这些数据做的事情的表面。我希望您接受我们在这里介绍的内容,并使用它!让它成为你自己发现的跳板。您不再需要依赖媒体或其他数据科学家的片段来掌握新冠肺炎数据并跟踪趋势。请在评论中告诉我你是如何处理这些数据的,并与我们分享你的发现!
✍️ 订阅获取我的最新文章,这些文章刊登在像➡️数据科学创业公司&这样的出版物上
参考
[1] R,《R:统计计算的 R 项目》r -project.org ,2020。【在线】。可用:【https://www.r-project.org】T4。[访问时间:2020 年 8 月 10 日]。
[2] R 工作室,《R 工作室 IDE 桌面》rstudio.com,2020 年。【在线】。可用:https://rstudio.com/products/rstudio。[访问时间:2020 年 8 月 10 日]。
[3]lubridate package | R Documentation,“让处理日期变得简单一点”,rdocumentation.org,2020 年。【在线】。可用:https://www . rdocumentation . org/packages/lubridate/versions/1 . 7 . 9。[访问时间:2020 年 8 月 10 日]。
[4] tidyverse package | R 文档,“轻松安装和加载‘tidy verse’”,rdocumentation.org,2020 年。【在线】。可用:https://www . rdocumentation . org/packages/tidy verse/versions/1 . 3 . 0。[访问时间:2020 年 8 月 10 日]。
[5] dplyr 包| R 文档,“数据操作的语法”rdocumentation.org,2020。【在线】。可用:https://www . rdocumentation . org/packages/DP lyr/versions/0 . 7 . 8。[访问时间:2020 年 8 月 10 日]。
[6] ggplot2 软件包| R 文档,“使用图形语法创建优雅的数据可视化”,rdocumentation.org,2020 年。【在线】。可用:https://www . rdocumentation . org/packages/gg plot 2/versions/3 . 3 . 2。[访问时间:2020 年 8 月 10 日]。
[7]欧洲疾病防治中心,“CDC 新冠肺炎·疫情”ecdc.europa.eu,2020 年。【在线】。可用:https://www.ecdc.europa.eu/en/covid-19-pandemic。[访问时间:2020 年 8 月 10 日]。







浙公网安备 33010602011771号