TowardsDataScience 博客中文翻译 2021(三百七十九)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

如何用 Python 制作令人惊叹的雷达图——用 Matplotlib 和 Plotly 实现

原文:https://towardsdatascience.com/how-to-make-stunning-radar-charts-with-python-implemented-in-matplotlib-and-plotly-91e21801d8ca?source=collection_archive---------4-----------------------

使用雷达图轻松可视化第二维以上的数据——在 Matplotlib 和 Plotly 中实现

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

文章缩略图—作者图片

在大多数情况下,可视化二维以上的数据并不是一个好主意。这就是雷达图的用武之地,它使您能够直观地表示多个相同比例变量的一组或多组值。

今天,您将了解雷达图如何使用 Matplotlib 和 Plotly 在多个维度上可视化数据。您还将了解什么是雷达图以及使用它们的利弊。

这篇文章的结构如下:

  • 雷达图介绍
  • 雷达图的利与弊
  • 使用 Matplotlib 的雷达图
  • 用 Plotly 绘制雷达图
  • 结论

你可以在这里下载相应的笔记本

雷达图介绍

你很可能知道什么是雷达图。有时它们被称为蜘蛛图极坐标图,但这些术语代表相同的概念。雷达图的目标是直观地表示多个变量的一组或多组值。

例如,假设您想通过一些公共变量直观地表示餐馆,比如食物质量、食物种类、服务质量和其他变量(*剧透提示:*您稍后会这么做)。在这种情况下,雷达图应该是首选的可视化类型。

每个变量都有一个轴,轴围绕中心呈放射状排列。不用说,但是轴是等间距的。然后沿着每个轴绘制单个观察值,就像散点图一样,但是这些点然后被连接起来形成一个多边形。您可以重复使用相同的逻辑在同一个图表中绘制多个多边形。

这就是雷达图背后的基本思想。让我们在开始动手示例之前先分析一下利弊。

雷达图的利与弊

先说一下的利弊:

  1. 雷达图非常适合观察结果之间的可视化比较,您可以轻松地比较不同观察结果之间的多个属性,并查看它们是如何叠加的。例如,您可以使用雷达图根据一些常见变量来比较餐馆。
  2. 很容易看到整体“最佳表现者”-如果您要查看整体表现,多边形面积最大的观察结果应该是最佳的。

但是事情并不都是阳光和彩虹,正如你从下面的清单中看到的:

  1. 雷达图很快就会变得令人困惑——比较几个以上的观察结果会导致没人愿意看到的混乱局面。
  2. 如果变量太多,就很难找到最佳选择——想象一下,一张雷达图有 20 多个变量。没人想看一眼。上帝禁止解读它。
  3. 变量必须在相同的范围内——比较学生成绩(从 1 到 5)和对某些服务的满意度(从 0 到 100)是没有意义的。

你现在知道什么是雷达图,什么时候使用它们是有意义的。接下来您将学习如何用 Matplotlib 绘制它们。

使用 Matplotlib 的雷达图

Matplotlib 是 Python 事实上的标准数据可视化库,所以这就是我们首先关注它的原因。

目标是在以下类别中比较三家餐厅:食品质量、食品种类、服务质量、氛围和可负担性。所有类别的范围从 1 到 5,所以它们是雷达图可视化的完美候选。

下面的代码片段演示了如何指定数据和类别、标签位置以及可视化图表。有几件事你应该事先知道:

  • label_loc是以弧度表示标签位置的列表
  • plt.subplot(polar=True)必须用来制作雷达图
  • plt.thetagrids()用于在标签位置放置类别名称

这些一开始可能会令人困惑,但你很快就会明白要点。您可以使用以下代码片段进行可视化:

下图显示的是:

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

图片 1 —您的第一张雷达图(图片由作者提供)

快速看一下前面的数字就可以看出有问题。最后一个数据点没有连接到第一个数据点,您需要以某种方式解决这个问题。没有 100%直观的解决办法,但是你应该这么做:在类别和餐馆中添加一个与第一项相同的元素。

您可以手动这样做,但是如果您不知道第一个值是什么呢?您可以使用解包和索引操作来解决这个问题。方法如下:

正如您所看到的,每次都编写这个逻辑有点乏味(您可以用它来创建一个函数),但是现在雷达图看起来是这样的:

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

图 2-修复雷达图中的数据点连通性(图片由作者提供)

如你所见,好多了!

Matplotlib 的美观性没有得到广泛认可,所以接下来让我们看看如何用 Plotly 生成更好看的可视化效果。

用 Plotly 绘制雷达图

普洛特利是另一回事。使用几乎相同数量的代码,很容易制作高度可定制的、好看的和交互式的图表。雷达图也不例外。

这并不意味着他们对 Matplotlib 的问题免疫。您仍然需要手动“关闭”多边形,但结果是更好看的可视化。

下面的代码片段产生了之前用 Matplolib 创建的相同的可视化效果:

可视化如下所示:

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

图 3 —带 Plotly 的雷达图(图片由作者提供)

这就是全部了!Plotly 也使得填充多边形变得容易——只需指定fill='toself'。这里有一个例子:

可视化如下所示:

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

图 4-用 Plotly 填充的雷达图(图片由作者提供)

这就是用 Plotly 制作雷达图有多简单。接下来让我们总结一下。

结论

雷达图提供了一种很好的方法来可视化多个变量的一组或多组值。今天你已经学会了如何做到这一点——用完全虚构的餐厅满意度数据。

请记住雷达图的限制或缺点。如果你想可视化许多观察结果,它们不是最好的选择,所以最多坚持一个或几个。

喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。

https://medium.com/@radecicdario/membership

了解更多信息

保持联系

  • 关注我的媒体以获取更多类似的故事
  • 注册我的简讯
  • LinkedIn 上连接
  • 查看我的网站

原载于 2021 年 2 月 15 日【https://betterdatascience.com】

如何在没有筛子的情况下用小众研磨机制作 Sudo-Staccato 浓缩咖啡

原文:https://towardsdatascience.com/how-to-make-sudo-staccato-espresso-with-a-niche-grinder-without-a-sifter-7b4cdcd70231?source=collection_archive---------15-----------------------

咖啡数据科学

无筛分层

在使用了五年的韩国磨床之后,我最近把它升级成了 T2 磨床。我升级主要是因为时间。我花了 5 分钟磨了四次豆子,我不喜欢这种经历,尤其是计划什么时候磨对我的家人影响最小。我对质量很有把握,我想我可以节省一些升级的时间。

我花了一点时间来适应,因为我在拍摄准备中做了很多花哨的事情。然而,这导致了一个伟大的发现:0 设置的利基是非常好的。所以我筛选了它,我从 10 设置中筛选了一些咖啡渣,以了解更多关于粒子分布的信息。大多数 0 设置的大小小于 400 um。我认为这有可能做一个断奏镜头,让我们称之为 sudo-staccato espresso。

我喜欢断续镜头,但由于疫情和在家工作,我没有时间筛咖啡。我想过买一个更大的机械筛,但是我没有柜台空间。我在去年偶然开发了断奏夯实,我用我从 100 个断奏击球中获得的知识改进了这个过程。

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

地面容器

此外,我一直想让别人尝试断奏。大多数人没有筛子,也不会花时间去筛足够的咖啡来实验和完善这项技术。即使在筛选了许多磅咖啡后,我能得到的最好结果是每分钟 3 克,所以对于 18 克的镜头,需要 6 分钟的筛选。通常情况下,我不得不筛掉多余的咖啡渣,因为我无法得到每层咖啡渣的正确数量。通常,我会一次筛 45 克。

通过演示如何使用壁龛进行断奏,我还制作了一个食谱,任何拥有壁龛或类似研磨机的人都可以复制。关键是研磨设置可以很容易地调整,并有一个狭窄的咖啡粉分布。因此,任何具有单峰或接近单峰分布的零或低留着率研磨机都可以工作。

回顾中的断续浓缩咖啡

断续射击一开始是一个奇怪的实验。我对使用筛子来获得更好的咖啡颗粒大小感兴趣,但我对此并不感兴趣。我不想买新的筛子,因为我不相信我会长期使用它。如果我找到一个好价钱,我想我会去买它。这就是我买第一个的原因。

一开始,我买的 Kruve 筛子只有 400 微米和 800 微米的筛网。这并不是浓缩咖啡的最佳选择,但我总是有心情去尝试。所以我筛选了我的咖啡渣。800 微米以上的磨粒很少,但大于 400 微米和小于 400 微米的磨粒分布相当均匀。我设计了一些实验来确定我能做什么。

小于 400 微米的粉末会导致过滤器堵塞,产生不均匀的萃取,但就味道而言,它更甜,没有正常的苦味。大于 400 微米的粉末流动性更好,但味道不同。情况并没有变得更糟,但我开始理论化地认为,每种颗粒大小都代表了味道的不同组成部分。

自然地,这导致了一种结合,一种分层。

经过两个月的反复,我决定只使用 7 个度量标准的品味等级,即层的最佳排序和每层的权重。后来,我使用总溶解固体(TDS)和提取率(EY)来确认我用断续击球比正常击球获得了更高的提取率。

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

危机中诞生的断奏捣固

疫情来袭时,我突然在家工作。我还碰巧买了几磅咖啡,比我喜欢的烘焙咖啡颜色要深一些。然而,我仍然在寻找牛奶饮料。我讨厌把咖啡渣放进篮子里,让咖啡到处都是,即使在我捣实后,它会有足够的空间。结果我开始中间夯一次,最后夯一次。

我在测量这些镜头的提取率,我注意到我在增加提取率。这导致了断奏夯实技术的发展,该技术通过修改两层中的密度来近似断奏击球,从而利用从断奏击球中获得的经验。

在过去的几个月里,我花了更多的时间来观察咖啡的分布曲线,为了节省时间,我买了一个利基市场。然而,我确实注意到,最好的咖啡研磨机在中心颗粒尺寸周围给出了更紧密的分布。这让我想到,也许像壁龛这样的高端研磨机可以用来进行断奏或更接近断奏。据我估计,这个利基市场是高端研磨机的低价位。

如何分层与利基(或任何高端磨床)

当我第一次得到磨床,我试图拉一杆,但我需要在磨床拨号。因此,我决定筛选两种不同的研磨尺寸,以了解更大的研磨分布。分布存在于一些来源,但是没有人扫过研磨设置来看它是如何影响研磨分布的。这个小测试确实告诉我设置 1 非常好。我怀疑利基可以去 10 或更多的设置比我以前的磨床更好。

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

像大多数实验一样,我开始了这个实验:一个有根据的猜测。我认为 0 设置可以很好地替代精细层,设置 15 为中间层,设置 30 为粗糙层。我知道这些层在粒子分布上不会那么紧密,但也许我会找到一些有用的东西。

我的目的是看看我是否在正确的范围内。如果我是在棒球场,一些小的调整会让我一路。在球场上意味着我可以接近我的其他镜头的味道,并接近提取产量。

我想对研磨分布有更深入的了解,所以我研究了一种方法来产生粒子分布。主要目的是帮助修改这个 sudo-staccato 镜头。

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

一般来说,我会磨几杯,然后把粉末储存在冰箱的密封容器里(的数据显示这不会影响新鲜度)。

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

首先,我研磨咖啡。对于工作流程,我首先在最精细的设置上研磨咖啡豆,然后是中等设置,最后是粗糙设置。

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

精细(0 设置)、粗糙(30 设置)、中等(15 设置)

然后我预热机器,开始准备冰球。我用一个弯曲的回形针或定制的塑料片来分发咖啡渣。

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

有时会有更多的层,因为用豆子分裂了精细的层或者添加了一层罗布斯塔

我夯实每一层,但我发现夯实需要轻。对于细层,它会在压力下迅速压缩,因此较轻的夯实可以减少沟流。我通常的目标是每层 200 到 400 克夯实。我用一个标尺来测量压力。我还在底部以及精细和粗糙层之间使用了一个布过滤器来增加额外的复杂性。

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

左:精细层分布工具,使边缘密度更高,以避免甜甜圈。右图:带齿的扁平工具,用于平整粗糙层和中间层。

然后我开枪。我会做 30 或 40 秒左右的长时间预输注。通常,我拍摄照片,这样我就可以看到进展。如果注射无效,我会进行 1 分钟或 1.5 分钟的预输注。然后我压脉

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

我在 1:1 输出到输入和 1.5:1 之间结束拍摄(对于 18g in,我的目标输出范围是 18g 到 24g)。我让它凉了 4 分钟,然后搅拌,喝了它。

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

底部和中间有滤布。在上图中,冰球上下颠倒。底部的两个图像是中间/粗糙层

镜头分析

在观察总溶解固体(TDS)与提取率(EY)时,我的目标是下图中的红色区域。断奏仍然表现更好,所以我有一些工作,看看我是否可以调整研磨设置,以改善 Sudo 断奏。

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

在过去的几个月里,我一直在拉更多的断奏夯实镜头,从这些照片中,他们对 TDS 和 ey 的趋势相似:

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

断续地拨入

不像正常的拨入过程中调整研磨,我更喜欢先调整每层的数量。我也很小心夯压。我发现一个非常轻的夯锤(200 克到 400 克)更有效,因为颗粒尺寸范围已经很紧了,所以层压实得更好。这是假设更长时间的预输注对献血没有帮助。

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

断奏镜头对我来说一直是下一个水平,我还做了其他有趣的技巧,比如在底部以及精细和粗糙层之间用布(或纸)过滤。能够从我的工作流程中削减时间,但仍然能拍出令人惊叹的照片,这让我觉得利基市场是一个不可思议的购买。

磨工不一定是小众。你可以是任何高端磨床,给接近单峰分布。我怀疑平毛刺可能更适合,但我不知道,直到我得到一些数据的多重研磨设置。

如果你愿意,可以在 TwitterYouTube 上关注我,我会在那里发布不同机器上的浓缩咖啡照片和浓缩咖啡相关的视频。你也可以在 LinkedIn 上找到我。也可以在关注我。

我的进一步阅读:

浓缩咖啡系列文章

工作和学校故事集

个人故事和关注点

乐高故事启动页面

摄影飞溅页面

如何确保你的分析被实际使用

原文:https://towardsdatascience.com/how-to-make-sure-your-analysis-actually-gets-used-4295bac3073?source=collection_archive---------13-----------------------

将海盗拒之门外

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

奥斯丁·尼尔Unsplash 上拍摄的照片

小心海盗

最普遍的令人沮丧的经历之一就是看到你努力工作的成果没有被发现,没有被欣赏,没有被使用。在数据世界里,这是我们经常经历的事情。以下面的假设情况为例:

  1. Jim 向数据团队提交了一份请求,要求对下周的客户演示进行深入分析。
  2. 你和 Jim 花一周时间进行分析,密切合作以确保他有正确的视觉效果,并有信心展示调查结果。
  3. 展示的日子到了,但吉姆一句话也没说。太奇怪了。
  4. 当你最终找到他时,他告诉你他“最终还是没有使用图表。”“他们只会把他们弄糊涂,”他用安抚的语气补充道。
  5. 你生气了。浪费了整整一周。另一个没有数据支持的决定。他当初为什么要问?

我喜欢称这些请求者为海盗,因为他们偷走了我的时间。不幸的是,总会有海盗,但我们可以学会避免他们,或者至少应对他们的存在。这里有一个提示列表,根据我自己的经验、学术研究和行业最佳实践,可以确保你的分析得到应有的信任。

1.丢弃数据请求表单

我们必须是顾问,而不是雇工。

大多数数据团队都有一个请求门户,用于筛选和分配来自业务的数据请求。这些门户旨在使业务和数据团队更容易合作;业务用户准确地输入他们想要的,数据团队只是让它发生。

不幸的是,正如我们从吉姆那里看到的,事情没那么简单。许多业务用户来到数据团队时脑子里已经有了一个图表,包括图表上的数字应该显示什么。

在这一点上,我们已经注定了。如果数据与请求者想要的故事不匹配,或者有点细微差别,那么他们永远不会使用这个分析。我们需要知道他们试图解决的问题。

作为数据专业人员,我们比任何人都更了解数据和统计方法,并可以建议使用数据来回答手头问题的最佳方法。业务环境与我们的数据专业知识相结合,可以创建比我们单独生成的分析更有影响力的分析。

简而言之,我们必须是顾问,而不是雇工。

2.数字从不独行

单靠一张图表不可能传达所有信息,这种想法抑制了我们通过工作影响业务的能力。

通常,我们希望发送一个完整的图表或仪表板请求。如果没有一对一的解释,业务用户几乎不可能理解这些内容。

我们被告知数据可以自己说话;一张精心制作的图表可以独自传达所有的细微差别。这根本不是真的。单靠一张图表不可能传达所有信息,这种想法抑制了我们通过工作影响业务的能力。

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

不能只靠图表来传达见解。利用文字来解释你的工作。来源:从未获得冠军的最佳球员作者:【count.co】T2

在分享任何分析时,我会尽量包含以下信息:

  • 数据的时间段
  • 分析日期
  • 作者
  • TL;博士:背景和见解总结
  • 如何阅读图表的说明
  • 你是如何进行分析的(不是代码,而是外行的解释)
  • 局限性和后续步骤

这种上下文信息可能看起来令人头疼,但它会产生巨大的影响。我们不仅仅是发送了一个图表,孤立地看,它可能会带来无益的潜台词“搞清楚”。我们已经向他们发送了一份分析报告,提供了将图表转化为洞察力所需的一切,这是一个不会被忽视的小举动。

打破自己发送图表的习惯给了他们一个被理解并最终被使用的机会。

3.让它成为一种体验

要真正理解你的分析,你的用户需要戳戳它…让我们帮助他们实现这一点。

用上下文和解释围绕你的图表可以确保读者从我们的分析中了解到他们需要的一切。但是我们通过经验学习得最好。

因此,要真正理解你的分析,你的用户需要戳戳它。Kolb 的学习模型表明,他们需要对我们的分析进行实验,并花时间思考它在现实世界中的含义,然后才能正确理解它。让我们帮助他们到达那里。

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

大卫·库伯的体验式学习模式(ELM) [1]图片来源:作者

至少,这涉及到为您的分析设置交互元素。添加过滤器和参数,让用户开始查询数据。如果你有两倍的预算会怎么样?一半?

这种问答流程让用户信任分析,并理解它与他们的问题的关系,最终让他们有信心在董事会中运用这种分析。这种缺乏信心是你的图表没有进入幻灯片的首要原因,所以在这里要小心。

4.准备好演示文稿

在不牺牲分析复杂性的前提下,创建引人入胜、信息丰富的视觉效果,不会吓到观众。

不幸的是,我们不能指望有人花时间从演示文稿的分析中学习我们的商业伙伴(希望)到目前为止的做法。这意味着我们现在需要创建一个摘要图表,它可以反映我们分析的关键点,但细节要少得多。

理想情况下,一旦你就关键见解以及如何最好地将它们组成一个更大的决策或要解决的问题达成一致,这就是你分析的最后一步。然后,您可以利用数据可视化最佳实践[2]来创建引人入胜且信息丰富的视觉效果,而不会威胁到查看者,同时又不会牺牲您分析的复杂性。

5.分析万岁

请确保您的分析不仅限于这一个数据请求,并且可以反复使用。

这个过程中被严重忽视的一部分是将这种分析转化为可扩展知识的问题。你如何确保你刚刚回答的业务问题不只是与 Jim 或 Jim 的团队分享,而是与更广泛的公司分享?不仅仅是这个星期,而是在 6 个月内同样的问题再次出现时可以使用。答案显然不是仪表板,而是更微妙的东西。

AirBnB 的方法 [3]是实现一个知识源,该知识源采用我们刚刚概述的详细分析类型,并将其发布给整个公司。其结果是一个报告集合,所有用户都可以轻松理解,但仍然可以访问原始代码和注释,供分析师用作未来工作的起点。关键属性被记录下来,让每个人对他们所看到的有信心(何时发布,限制等)。).他们使这个知识数据库易于解析,这样人们在向数据团队提交请求之前,就可以快速找到与他们的问题相关的分析。

现在,您可以确保您的分析超越了这个单一的数据请求,并且可以一次又一次地使用。

每日时间

这种工作方式的好处是易于测试。下一次当你的一个更友好的商业用户(避免盗版)发出请求时,我建议试试这个方法。与其将他们要求的图表具体化,不如要求与他们会面,以更好地了解他们希望用这张图表做什么。它为哪些决策提供了信息?观众是谁?

当你们在这个分析中一起工作时,我建议使用一个数据笔记本来记录所需的元数据,并向你的业务伙伴解释你的工作。这让你可以灵活地将你的分析与代码和图像联系起来,这样你就不会试图在某个地方拼凑一个谷歌文档。

一旦你们都对分析和发现感到满意,然后一起完成最终的图表,看看它与最初的请求有多大的不同。我敢打赌他们完全不同。

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

计数笔记本示例。来源:谁是网球山羊?

将这种分析用于共享知识需要更多的深谋远虑。这些笔记本没有多少自然的去处;Github 对非开发人员来说不够用户友好,像 DropBox 或 Google Docs 这样的选项不够技术化,无法包含所需的代码。

如果你强迫我推荐一个工具,我会说,但是坦白地说,我确实帮助构建了它。Count 是一个数据笔记本,旨在使这种工作方式成为规范。您可以创建高质量的分析报告,在一个文档中包含完整的上下文、解释和定制的视觉效果,为您的工作提供所需的平台,使其能够经受住短暂的数据请求,并成为整个公司都可以从中受益的知识。

如果你尝试过这些方法,我很想在评论中听听效果如何!

参考

[1]Kolb,D. A. 体验式学习:经验作为学习和发展的源泉 。新泽西:普伦蒂斯-霍尔;1984.

[2]迈克尔·马奥尼。 数据可视化的艺术与科学 。走向数据科学;2019.

[3] Sharma,C. & Overgooer,Jan .Airbnb*缩放知识。*airbnben;2016.

如何用 Python 制作合成数据集:机器学习完全指南

原文:https://towardsdatascience.com/how-to-make-synthetic-datasets-with-python-a-complete-guide-for-machine-learning-376093b360ac?source=collection_archive---------33-----------------------

没有数据集?没问题。使用 Python 在几秒钟内创建您自己的。

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

照片由海登·邓塞尔Unsplash 上拍摄

好的数据集很难找到。另外,有时候你只是想表明自己的观点。对于这些情况,繁琐的加载和准备可能有点多。

今天,您将学习如何使用 Python 和 Scikit-Learn 制作合成数据集,Scikit-Learn 是一个出色的机器学习库。您还将学习如何处理噪声、类平衡和类分离。

这篇文章的结构如下:

  • 制作您的第一个合成数据集
  • 添加噪声
  • 调整职业平衡
  • 调整类分离
  • 结论

你可以在这里下载这篇文章的笔记本

制作您的第一个合成数据集

真实世界的数据集对于展示概念和想法来说往往太多了。假设你想直观地解释 SMOTE(一种处理类不平衡的技术)。你首先必须找到一个类别不平衡的数据集,并将其投影到 2-3 维,以便可视化工作。

有更好的方法。

Scikit-Learn 库附带了一个方便的make_classification()函数。它不是创建综合数据集的唯一工具,但今天您会大量使用它。它接受各种参数,让您控制数据集的外观和感觉,但稍后会详细介绍。

首先,您需要导入所需的库。请参考以下片段:

您已经准备好创建您的第一个数据集。它将有 1000 个样本分配到两个类(0 和 1)中,并达到完美的平衡(50:50)。属于每个类别的所有样本都集中在单个聚类周围。数据集只有两个特征,以使可视化更容易:

sample()的调用打印出五个随机数据点:

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

图片 1—5 行随机样本(图片由作者提供)

这并不能给你数据集背后的全貌。它是二维的,所以你可以为数据可视化声明一个函数。这里有一个你可以用的:

这是它的视觉效果:

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

图 2-合成数据集的可视化(图片由作者提供)

太快了!您现在有了一个简单的合成数据集,可以随意摆弄。接下来,您将学习如何添加一点噪声。

添加噪声

您可以使用make_classification()功能的flip_y参数添加噪声。

此参数表示随机分配类别的样本的分数。较大的值会在标注中引入噪声,使分类任务更加困难。请注意,默认设置 flip_y > 0 在某些情况下可能会导致 y 中少于 n _ classes[1]。

下面是如何在我们的数据集上使用它:

下面是相应的可视化:

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

图 3-添加了噪声的合成数据集的可视化(图片由作者提供)

你可以在蓝色星团中看到更多橙色点,反之亦然,至少与图 2 相比是这样。

这就是你添加噪音的方式。接下来把重点转移到阶级平衡上来。

调整职业平衡

在现实世界的数据集中,至少可以看到一点点的阶级不平衡。一些数据集遭受严重的类别不平衡。例如,1000 笔银行交易中有一笔可能是欺诈性的。这意味着余额比例为 1:1000。

你可以使用weights参数来控制职业平衡。它将列表视为具有 N–1 个值的值,其中 N 是要素的数量。我们只有 2 个,所以列表中只有一个值。

让我们看看如果将值指定为 0.95 会发生什么:

以下是数据集的视觉效果:

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

图 4-正类上存在类不平衡的合成数据集的可视化(图片由作者提供)

如您所见,只有 5%的数据集属于类 1。你可以轻松扭转局面。假设您想要类 0 中数据集的 5%:

下面是相应的可视化:

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

图 5-在负类上具有类不平衡的合成数据集的可视化(图片由作者提供)

这就是阶级平衡的全部。让我们通过调整类分离来结束。

调整类分离

默认情况下,存在一些重叠的数据点(类别 0 和类别 1)。您可以使用class_sep参数来控制类的分隔程度。默认值为 1。

让我们看看如果将值设置为 5 会发生什么:

以下是数据集的外观:

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

图 6-具有严重类别分离的合成数据集的可视化(图片由作者提供)

正如你所看到的,现在的班级更加分散了。更高的参数值会导致更好的类分离,反之亦然。

现在,您已经了解了制作用于分类的基本合成数据集的所有内容。接下来让我们总结一下。

结论

今天,您已经学习了如何使用 Python 和 Scikit-Learn 创建基本的综合分类数据集。当你想证明一个观点或者实现一些数据科学概念的时候,你可以使用它们。真实的数据集对于这个目的来说可能是多余的,因为它们通常需要严格的准备。

请随意浏览官方文档,了解其他有用的参数。

感谢阅读。

喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。

https://medium.com/@radecicdario/membership

加入我的私人邮件列表,获取更多有用的见解。

了解更多信息

参考

[1]https://sci kit-learn . org/stable/modules/generated/sk learn . datasets . make _ classification . html

原载于 2021 年 1 月 11 日 https://betterdatascience.com**T21

如何充分利用低代码/无代码开发平台?

原文:https://towardsdatascience.com/how-to-make-the-most-of-low-code-no-code-development-platform-1d1bd3768765?source=collection_archive---------9-----------------------

运行 3 个低代码黑客马拉松和几个概念验证后的经验教训

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

本·科尔德在 Unsplash 上的照片

在过去的一年里,我为企业客户提供了几次概念验证和黑客马拉松,现在我想分享一下我的经验。由于各种原因,许多企业放弃了 PoC 解决方案。本文可以帮助您评估解决方案的价值和有用性。

主题:

  • 挑战
  • 什么是无代码/低代码开发平台
  • 传统瀑布模型和手工编码与低代码/低代码开发平台的比较
  • 例子
  • 我的想法
  • 限制
  • 摘要

挑战

用户的业务需求

IT 专业人员有许多工作要做。根据凤凰计划,有业务项目、运营项目、变更和未计划的工作。如何对任务进行优先排序以及快速适应市场趋势可能具有挑战性。

缺乏解决问题的技能

用户最了解业务流程。在许多情况下,他们可以指出瓶颈,甚至提出解决问题的想法。然而,他们往往缺乏实现这一想法的 IT 技能。

遗留系统现代化

随着客户行为的改变,企业也改变了他们的规范和业务应用。您拥有不是为移动设备构建的传统系统。他们可能不是为网络而建的。例如,在疫情期间,现代工作空间和在家工作的想法变得流行起来。最重要的是,瀑布模型可能需要更长的时间来适应变化,因为流程是连续的。这种方法没有考虑到随着项目的进展,已定义需求的变化。

什么是无代码/低代码开发平台?

低代码/无代码开发平台是可视化软件开发环境的类型,允许公民开发人员拖放应用程序组件,连接它们并创建移动或 web 应用程序。这些平台减少了传统手工编码的数量,加快了业务应用程序的交付。随着技术转型的推进,云化已经大众化。基于云的低代码开发平台已经变得流行。

传统瀑布模型和手工编码与低代码/低代码开发平台的比较

在过去,应用程序开发有线性顺序阶段可循。以图书馆目录为例,整个过程是单向的,包括概念、启动、分析、设计、构建、测试、部署和维护等阶段。更不用说有时结果和期望可能不一致。即使使用更现代的开发方法,比如敏捷开发,在第一个最小可行产品(MVP)交付给用户之前,可能会经过相当长的时间。

低代码开发的开发体验是“所见即所得”,你可以在开发过程中很早就体验到实际工作的 app。通过这种方式,用户可以轻松地为他们的图书馆目录应用程序添加新功能,并确保概念和交付内容保持一致。

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

来源:电力应用和传统应用开发方法的区别

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

来源:电力应用和传统应用开发方法的区别

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

来源:电力应用和传统应用开发方法的区别

例子

我从不同的客户那里看到了很多很好的例子,其中大部分来自用户。我列出了一些适用于大多数公司的方法:

事实上,所有的用例都可以通过手工编码来实现。不同之处在于来自公民开发者的构思和实现。

**Feature:** Replace paperwork or information located in different systems**Business Impact:** Avoid data silo, collect more data, learn the insight, and optimize the business process**Scenario:** A customer survey app to replace social media such as LINE. An inspection app to replace paper documents and cameras, embedded video and audio features to collect different types of information.
**Feature:** Build a business process to instruct the user following the guideline**Business Impact:** Decrease loss and waste**Scenario:** work order, spare parts management, instrument management, inventory check
**Feature:** Build a project platform for announcement, notification, and follow-up**Business Impact:** Improve cross-team collaboration, communication, and efficiency**Scenario:** Projects, Order Tracking

思想

场景选择这是最重要的部分。在选择没有可靠商业价值的场景时要小心。我有一个客户对这个想法非常兴奋,希望实现一个午餐订购应用程序,这样办公室的管理员就不需要每天手动为同事记笔记了。我问客户:即使一切顺利,你认为公司批准这个预算的可能性有多大?企业使用诸如 ROI 和预算等语言。区分有形价值和无形价值很重要。假设应用程序在很短的时间内就准备好了,并且用户喜欢它,我们不能忽视商业价值应该是最重要的因素这一事实。

此外,我建议最好的场景是解决业务流程中的一个痛点,以便帮助组织实现最大的效率。例如,我正与一个客户合作,将低代码开发平台用于他们的 ERP 系统,通过移动应用程序和 API 使系统现代化。在引入该平台之前,该员工需要携带笔记本电脑和摄像机来定位和清点办公楼中的资产。拍完照片后,需要时间进行记录和存档。当工人了解到低代码开发平台的强大功能时,包括摄像机的内置连接器、ERP 系统和云存储,他实现了最后一英里的数据输入,简化了业务流程,最大限度地减少了人为错误。这个场景展示了重要性、复杂性以及商业价值,这使得这个案例更有说服力。

限制

信息安全

了解该平台提供的安全产品组合非常重要。例如,平台应该有一个管理中心来管理所有的流量。此外,对企业内的数据源和连接器进行分类,以避免数据丢失。建议建立一个卓越中心,不仅帮助企业实现平台的价值,还可以抵御数据和 It 系统的内部和外部威胁。

成本管理

不仅是财务成本,还有时间成本。在台湾,有大量的工程人才可供雇佣,因此管理层倾向于认为雇佣人才并自行开发和定制系统更具成本效益。与订阅模式相比,它不仅在短期内为公司节省了资金,还将资产保留在了组织内部。然而,如果组织可以让业务用户满足自己的需求,那会怎么样呢?这样,编码人员可以专注于处理更复杂的问题,解决更多的问题。另一方面,随着客户行为的改变,企业必须改变他们的业务应用程序,但是遗留系统不是为移动或 Web 而构建的。然后,是迁移到新系统还是重新开发遗留系统就成了一个难题。我曾与一位客户合作,他很久以前自己开发了电子邮件系统,为了满足业务需求,他别无选择,只能搬到 SaaS。迁移一个拥有成千上万用户的系统是一个巨大的挑战。在评估成本时,企业还应该考虑除金钱以外的成本类型。

配置

低代码开发平台的目标受众以前是公民开发人员,而不是专业开发人员。专业开发人员熟悉各种 IDE(集成开发环境)和命令行界面,可能不喜欢图形用户界面。在尝试了低代码开发平台后,我得到了用户的反馈,他们说“这种方式太慢了,我宁愿手工编码!”。另一方面,它降低了那些不熟悉编码工具的人的进入门槛,甚至鼓励他们创造更多的业务场景。当引入低代码开发平台时,企业有一个清晰的定位是很重要的,避免平台成为 It 专业人员维护的另一个麻烦系统。

结论

低代码开发平台鼓励公民开发者自己通过数字工具解决业务挑战。随着图形用户界面的进步,他们在日常工作中更加亲力亲为。我相信这个新概念有助于来自商业和 IT 组织的用户进行更多的对话,从而获得更多的理解。当他们开始说同一种语言并发现信息差距时,企业将走上成功之路。

最初发布于https://wanchunghuang . com/how-to-make-the-most-low-code-no-code-development-platform/2021。

保持联系

如何使主题模型可解释:3 个新想法

原文:https://towardsdatascience.com/how-to-make-topic-models-interpretable-3-new-ideas-f594518c4b9c?source=collection_archive---------21-----------------------

实践教程

调整 LDA 主题模型输出的三种创新技术

主题建模是一种无监督的机器学习方法,它扫描一组文档,检测其中的单词和短语模式,并自动聚类单词组和最能表征一组文本响应(或文档)的类似表达。迄今为止,潜在狄利克雷分配(LDA)已经成为最流行的主题建模技术之一,广泛应用于不同的工业应用中。这里提供了对 LDA 的详细解释。LDA 是应用于一组单词的概率模型,它有两个关键输出:

I .来自文档集合的主题列表。每个主题都是单词(经常共存)的集合,其形式是每个主题的词汇的概率分布。

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

图片由 Divya Dwivedi [ 来源

二。每个文档的已识别主题的概率分布。

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

大样本的概率分布通常是包含数百万数字的巨大矩阵,这使得社会科学研究人员难以提取关键见解。在我的案例中,我分析了来自创新领导力中心数据库的开放式文本回复,该数据库包含 43,000 名领导者,历时 10 年,我们要求他们回答以下问题:你目前面临的 3 个最关键的领导力挑战是什么?平均而言,领导者在 3 个挑战中写了大约 100 个单词(Balakrishnan,Young,Leslie,McCauley,& Ruderman,2021)。

出于本博客的目的,我将使用来自高层管理人员(C-suite leaders)的挑战数据集的子集。我使用 LDA 并实现了不同的技术来更好地解决社会科学研究人员经常问的关于这些数据的问题。

本博客的主要目的是了解提取的主题之间的关系,评估亚组差异,并确定主题流行度是否以及如何随时间变化。下面提供了上述技术的一步一步的过程。

1.主题之间的相互关系(理解提取的主题之间的关系)

2.识别语料库中两个不同子集的主题比例之间有意义的和统计上显著的差异(评估子组差异)

3.科菲·费恩戈尔德·布罗姆伯格(CFB)衡量标准,以确定话题随时间的变化(话题流行率如何随时间变化?)

主题间的相互关联:

LDA 导出的主题可以相互关联。例如,关于遗传学主题的文档更可能是关于传染病主题,而不是天文学或政治。为了在我的数据集中确定这一点,我检查了主题之间的关系。重要的是要记住,文档中所有主题的平均主题概率分布总和必须为 100%。换句话说,如果一个文档在一个给定的主题中排名靠前,那么理论上它们在其他主题中的排名应该靠后。在这种情况下,可以以这样的方式应用二分法文档主题矩阵的机制,即将中值以上的主题概率转换为 1,将中值以下的概率转换为 0。可以为二分法矩阵计算主题之间的相关系数,以确定主题之间的相互相关性。

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

图 1:高层管理人员的主题相互关系。

上图是关于高层领导面临的挑战的主题之间相互关系的表示。如果领导者报告与“组织人才问题”相关的挑战,他们更有可能报告与“不确定性中的组织准备情况”相关的挑战,反之亦然。

主题之间的联系表示大于或等于. 16 的主题之间的相关性,节点的大小表示主题比例。0.16 是根据 Bosco 及其同事(2015 年)的相关基准选择的,该基准发现应用心理学文献中的场水平效应大小的中值为 0.16。

识别语料库中两个不同子集的主题比例之间有意义的和统计上显著的差异:

领导力挑战数据集包括来自 32 个不同行业的不同领导者。我的项目的目标之一是比较不同行业之间主题比例的差异(例如,制造业(184 名领导者)和金融业(211 名领导者)的高管之间的差异)。我进行了显著性测试和效应大小测试,以检查这种差异是否有意义和统计显著性。由于偏态和不平等的样本量,我选择了曼-惠特尼检验,以确定统计意义。为了确定实际意义,计算了 r 效应大小。根据 Cohen 的标准(Cohen,1988;1992).基于这一分析,6 个主题中有 3 个显示了教育和制造业领导者之间的显著差异。

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

表 1:教育与金融行业领导者的话题比例和统计数据

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

图 2:教育和金融服务领导者的话题概率

科菲·费恩戈尔德·布罗姆伯格(CFB)用于识别话题随时间变化的衡量标准:

CFB 分数是对一组加权比例的可变性的度量。分数范围从 0 到 1,数值越高表示可变性越高。形式上,科菲测度 C({p1,…,pn},{w1,…,wn})由以下公式给出:

其中{p1,…,pn}是一组比例,{w1,…,wn}是一组权重,{p1*,…,pn*}是一组在以下约束条件下产生最大方差的比例:

43,000 名领导者的挑战数据集是从 2010 年至 2020 年收集的。为了分析过去十年挑战数据集的主题变化,我计算了每个主题的 CFB 度量。下图显示了 2010 年至 2020 年挑战主题的 CFB 指标。

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

图 3:****CFB 2010 年至 2020 年高管

为了更好地理解为什么 CFB 高管级别的得分差异更大,我们按年研究了挑战。在领导组织层面,从 2014 年到 2018 年,在“动态商业环境”和“战略责任”挑战方面观察到了轻微的波动。尽管很难解释为什么会出现这种情况,但对于高管来说,这两种挑战一直都很大。

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

图 4:随着时间的推移,高管模型的平均主题比例%

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

Bovens、Chatkupt 和 Smead (2012 年)实施了 CFB 衡量标准,以计算欧盟寻求庇护者承认率的可变性。实现在 Mathematica (版本 8)中。点击此处查看 Mathematica 笔记本,其中包含用于计算 Bovens、Chatkupt 和 Smead (2012)中出现的科菲测度的函数。

主题建模是我最喜欢的探索文本数据主题的方法之一。在分析主题建模结果时,除了上述思路之外,还有不同的方法。上面解释的技术对我在 I/O 心理学领域的研究很有用。如果你有任何其他关于主题建模结果的有趣想法或提示,请在下面的评论中告诉我。

参考文献:

Balakrishnan,Young,s .,Leslie,j .,McCauley,c .,& Ruderman,M. (2021)。领导力挑战阶梯(LCL)技术报告。北卡罗来纳州格林斯博罗:创造性领导中心。

f .博斯科、h .阿吉尼、k .辛格、j .菲尔德和 c .皮尔斯(2015 年)。相关效应大小基准。*《应用心理学杂志》,100 卷 2 期,*431–449 页。

Bovens,l .,Chatkupt,c .和 Smead,L. (2012 年)衡量欧盟庇护结果数据中的共同标准和平等责任分担。欧盟政治

科菲,议员,费恩戈尔德,硕士和布罗姆伯格,J. (1988 年)。比例间可变性的赋范度量。计算统计&数据分析,7(2),127–141。

科恩,J. (1988)。行为科学的统计功效分析。新泽西州希尔斯代尔:劳伦斯·厄尔鲍姆联合公司。

科恩,J. (1992 年)。能量引爆器。*《心理通报》,112 卷 1 期,*第 155–159 页。

如何用 Python 制作不烂的词云

原文:https://towardsdatascience.com/how-to-make-word-clouds-in-python-that-dont-suck-86518cdcb61f?source=collection_archive---------4-----------------------

用 python 制作美丽而有意义的单词云的简短教程

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

张秀坤·施罗德在 Unsplash 上拍摄的照片

动机

在最近一次对总统就职演说的 NLP 分析中,我发现结果很有趣,但我意识到大多数人不会被这些演讲所强迫。我通常认为词云可能是可怕的,但我认为它们在这里是有意义的——为了让 TF-IDF 的结果更容易立即使用,我从 TF-IDF 对拜登、特朗普、奥巴马和布什的就职演讲的矢量化中创建了词云。

作为自然语言处理工作流工具的词云

本教程的重点是学习如何在视觉和基于内容的层面上制作不烂的单词云。网上有很多免费的工具供非程序员制作 word clouds,但是在 NLP 项目中迭代参数时可视化 python 管道中的数据是评估决策结果的一种有效方法,并且可以向非技术利益相关者展示您的过程。有了视觉设计背景,我发现开箱即用的单词云包有点可怕,所以我会提供一些调整,让你的单词云不那么糟糕。

如何在 Python 和 Jupyter 笔记本里做一个字云,一步一步来:

这是一个概述,但是我会随着您的继续深入下去。

  1. 安装 wordcloud 包。
  2. 将 wordcloud 和 matplotlib 导入笔记本。
  3. 使用 TF-IDF 值创建术语文档矩阵(可选步骤)
  4. 使用文本或矩阵运行 Word Cloud。
  5. 调整设置,让你的字云不吸。
  6. 包装在一个函数中并迭代。

开始了。

  1. 安装 wordcloud

如果您使用 anaconda,请在终端中键入以下内容:

conda install -c conda-forge wordcloud

备选方案此处

2。导入包

import matplotlib.pyplot as plt
from wordcloud import WordCloud

3。使用 TF-IDF 值创建术语-文档矩阵(可选步骤)

你绝对不需要一个 TF-IDF 矩阵来构建一个词云——你可以只使用你想要构建一个词云的文本。然而,让你的词云不糟糕的一个方法是使用更有意义的数据集——一个经过 TF-IDF 处理的数据集。使用 TF-IDF 矩阵的优势在于,您可以控制您在词云中查看的词的类型,而不是最常用的词,您可以查看最独特的词。甚至使用计数矢量器并在制作单词云之前调整设置也是一个有效的工作流程。创建 TF-IDF 矩阵的这一额外步骤使比较单词云更有意义,并且有助于解释调整 nlp 工作流中的设置的效果。

要了解如何生成 TF-IDF 矩阵,您可以在这里查看我以前的文章。:

基于我的 TF-IDF 矩阵,我想要一个数据帧,其中每一列是一个文档,每一行是一个单词及其每个文档的 TF-IDF 值。

# Prep TF-IDF Matrix for Word Cloudsdata = df.transpose()data.columns = ['document_bush_2001', 'document_obama_2009', 'document_trump_2017', 'document_biden_2021']data.head()

这是我想要使用的数据的形状:

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

4。运行文字云。

一旦你有了 TF-IDF 矩阵,你就可以使用 wordcloud 来生成频率,使用 matplotlib 来绘制。

wordcloud = WordCloud().generate_from_frequencies(data['document_biden_2021'])plt.imshow(wordcloud)

现成的结果如下所示:

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

除了大小和轴的包含,单词的颜色大多难以辨认,并且与数据集不相关。字的大小被调整了,这很好,但这并不好。

5。调整你的设置,让你的 WordCloud 不烂。

除了尺寸和移除轴之外,还有一些额外的考虑事项:

色彩——我是一个传统主义者,尽可能少用色彩来表达我的观点。对我来说,白色或灰色背景上的黑色文字效果很好。我不认为根据 TF-IDF 的一个数据集同时使用颜色和大小来区分单词是必要的。然而,如果你要用这种颜色来代表另一个有相同单词的数据集,那对我来说是可行的。例如,我会支持颜色的使用,如果在后面加上另外一个信息,比如术语频率或逆文档频率。

我喜欢绘画通常的工作方式,因为你第一眼就能理解图像的想法,但当你细想时,你会理解得更多。我认为文字云可以这样工作,所以我喜欢增加页面上的字数,因为它可以让人们第一眼就简单地理解文档,然后进一步深入并停留在文档的细节上。

font_path — 我讨厌现成的字体,如果有选择的话,我会坚持使用 arial 或 helvetica 字体,尤其是像 word cloud 这样看起来“现代”的可视化字体。

# change the value to black
def black_color_func(word, font_size, position,orientation,random_state=None, **kwargs):
    return("hsl(0,100%, 1%)")# set the wordcloud background color to white
# set max_words to 1000
# set width and height to higher quality, 3000 x 2000
wordcloud = WordCloud(font_path = '/Library/Fonts/Arial Unicode.ttf', background_color="white", width=3000, height=2000, max_words=500).generate_from_frequencies(data['document_biden_2021'])# set the word color to black
wordcloud.recolor(color_func = black_color_func)# set the figsize
plt.figure(figsize=[15,10])# plot the wordcloud
plt.imshow(wordcloud, interpolation="bilinear")# remove plot axes
plt.axis("off")# save the image
plt.savefig('biden_wc.png')

这里有一个不烂的词云:

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

有几件事我可以做,比如步长,但是我觉得对我的目的来说没有必要。你也可以看看 wordcloud 的例子库,在这里找到更多的。

6。包装在一个函数中并迭代。

一旦我有了我喜欢的设置,我就把它打包成一个函数。随着分析的进行,我可能会迭代我的词云来评估我的 TF-IDF 设置,比如 max 和 min tf,或者关注特定的词类——名词、形容词等。为了加速我的过程,我可能想在函数中改变输出的宽度和高度,但是这是一个很好的方法来感受你在 nlp 中所做的决定。

filenames = ['bush_2001_.png', 'obama_2009_.png', 'trump_2017_.png', 'biden_2021_.png']def word_cloud(data, filenames):
    def black_color_func(word, font_size, position, orientation, random_state=None, **kwargs):
        return("hsl(0,100%, 1%)")
    columns  = list(data)for i in range(4):
        wordcloud = WordCloud(font_path = '/Library/Fonts/Arial Unicode.ttf', background_color="white", width=3000, height=2000, max_words=500).generate_from_frequencies(data[columns[i]])
        wordcloud.recolor(color_func = black_color_func)
        plt.figure(figsize=[15,10])
        plt.imshow(wordcloud, interpolation="bilinear")
        plt.axis("off")
        plt.savefig(filenames[i])# plot the wordcloud
plt.imshow(wordcloud, interpolation="bilinear")# remove plot axes
plt.axis("off")# save the image
plt.savefig('biden_wc.png')

这里比较单词云:

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

拜登 2021 就职演说词云

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

特朗普 2017 年就职演说词云

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

奥巴马 2009 年就职演说词云

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

布什 2001 年就职演说词云

在这里打开这项研究的结果:

https://anupamagarla.medium.com/comparing-inaugural-addresses-democracy-is-to-dreams-as-biden-is-to-trump-8a1aaeba5f9c

如何让文字云让人不会讨厌

原文:https://towardsdatascience.com/how-to-make-word-clouds-people-wont-hate-9a465c1b63ab?source=collection_archive---------18-----------------------

讨厌的人会讨厌文字云。但它们仍然是有用的可视化,你可以让它们变得更好。

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

照片由NOAAUnsplash

单词云:它们听起来很轻,很蓬松,很有趣。它们是可视化文本数据中术语频率的一种流行方式。但数据评论员长期以来一直批评这些方便的图形,如“词云是蹩脚的】“词云:我们不能让它们消失,所以让我们改善它们”,以及颇具攻击性的标题“词云被认为是有害的。”哎哟。

这些人对词云有什么意见?如果使用不当,它们确实会有问题,但是有办法让它们变得更好。让我们来看看对 Word Cloud 的批评,看看我们如何绕过它们的潜在陷阱,特别是当您使用 Alteryx Designer 和 Alteryx Intelligence Suite 的文本挖掘调色板中的 Word Cloud 工具时。

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

图片经由 GIPHY

大多多云?对词云的批评

对词云有哪些常见的批评?这里有一个 TL;上面链接的文章的博士:

  • 词云通常共享不言自明或显而易见的信息。产品评论的文字云可能会以大字体显示产品名称,因为这些名称经常出现——但这对浏览者来说不是有用的洞察力。而且,如果不删除它们,停用词(英语中频繁出现的词,如“the”、“a”或“an”)也会使词云变得杂乱,从而难以看到重要的词。
  • 单词云通常孤立地显示单个单词,忽略了有价值的上下文和周围的叙述。它们将复杂的文本数据减少到最低限度——也许太简单了。观众必须弄清楚单词显示的意义,他们可能会得出错误的结论。
  • 字体大小不能清楚地表明单词的实际频率;更大的字体意味着一个单词出现的频率更高,但进行更细微的比较或排名是很困难的。

这些作者提出了一些很好的观点。我们可能都曾尝试创建过包含无用单词或不为数据提供故事的单词云。

那么,我们如何解决词云的这些缺点呢?考虑到它们有时是一种以视觉上引人入胜的方式总结文本数据的好方法。

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

图片经由 GIPHY

一连串的停用词

你可以使用一些策略来解决你的单词云的这些问题。让我们来看看其中的一些。我将使用一个我之前用来演示情感分析的数据集;它包含了对服装的评论。

首先,我们可以相当容易地处理自显和停止词的问题。在 Alteryx Designer 中,一定要在你的 Word Cloud 工具之前设置一个文本预处理工具。然后,在字云工具中,一定要选择原字段名后带有 _processed 的文本字段;我已经忘记这么做很多次了!在预处理步骤中,您可以删除数字、标点符号和停用词。

默认停用词来自 spaCy,该工具底层的 Python NLP 包。但是,您可以添加自己的停用词来删除一些明显的术语,这些术语不会帮助观众从词云中获得意义。

下面,我已经从单词 cloud 中删除了“top”和“shirt ”,因为这个单词 cloud 将只代表服装评论的“tops”类别。在单词 cloud 中突出显示“top”和“shirt”不会帮助我们理解人们对它们的看法。

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

作者图片

显然,您应该小心省略默认停用词之外的其他词,这样您就不会无意中歪曲您的数据,但我会为查看者提供上下文,以确保他们知道这个词云仅限于 tops 的评论。

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

图像通过 GIPHY

你觉得那朵云像什么?

在我们确保单词云中只包含有用的、相关的单词之后,我们如何确保观众提取出我们希望在可视化中分享的有意义的故事呢?看看下面的云这个词,它代表了所有包含“面料”这个词的负面服装评论的文字。这里有哪些关键的要点,甚至是一些有趣的观察结果需要跟进?很难说。

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

作者图片

根据你的词云的主题和你想要分享的故事,拥有多个词云可能更有意义。例如,如果我的目标是分享不同服装类别(例如,上衣、连衣裙、裤子)的主要客户反应,那么首先将我的数据集和评论文本划分到这些类别,然后创建单词 clouds 可能更有意义。或者,我可以按照主题(例如,面料、尺寸)和/或情感分析分数(即,正面或负面评论)来划分评论。

通过更小的相关词分组,浏览者可以集中在每个主题的关键点上,而不必研究所有的词并找出一个总体信息。正如一项调查研究所说,“最好将这些单词组织成有意义的区域,并通过空间或颜色分组,在视觉上以不同的组来显示这些区域。”

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

提及面料的负面评论词云,按服装类型分组(从左至右:连衣裙、上衣、夹克;图片作者)

如果我们把负面评论的文本按服装类型分类,如上所示,我们现在马上就能看到可能引人注目的差异。当顾客在负面评论中提到面料时,顾客也在评论尺码 XS 的连衣裙;有些上衣有些“奇怪”;夹克的颜色尤其引人注目。

不幸的是,大多数这种分组必须手动进行,或者至少是半手动进行。在 Designer 中,您可以使用公式和/或过滤工具来设置“主题”标准,以确定将哪些文本项输入到每个词云中。您还可以在 Word Cloud 工具中为不同的主题选择不同的配色方案,这样图像在视觉上就很明显。

您还可以使用主题建模来帮助识别关键主题,然后使用主题建模分数来划分您的文本数据。如果你想了解更多关于主题建模的内容,这里是我们系列教程的开始,一个使用它的 SFW 演示,还有一个也许是 NSFW 演示

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

图像通过 GIPHY

当云模糊时:频率和排名

词云可以变得更有用,但有时你可能想要一个不同的选择。例如,当查看者能够更详细地了解文本数据中不同单词的相对频率和/或排名非常重要时,单词云可能会让您失望。显示关键词的条形图可能是更好的选择。

例如,也许你想深入了解年龄在 18-34 岁的顾客的意见,尤其是他们对你的上衣的积极评价,这样你就能看出他们真正喜欢哪些特点。下面的条形图显示了一种查看他们最常用词排名的方法(一些明显的停用词——衬衫顶级爱情伟大*——添加到默认列表中)。尺寸和合身似乎是快乐顾客讨论的流行标准;很容易看出,在这种格式中,尺寸和合身比“舒适”更常被提及。*

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

作者图片

从你的文本中创建一个这样的条形图需要更多的步骤,正如你在这篇文章的原始版本所附的工作流程中看到的。“拆分为行”上设置的“文本到列”工具可以将文本审阅转换为单独的行;有了汇总工具和交互式图表工具,条形图可以很快地组合在一起。

本文还展示了一个用于可视化文本的热图的很酷的例子(查看第 2 项)。

天气监视:小心前进

虽然有些人可能不喜欢单词云,但明智地使用它们肯定是可能的。与任何数据可视化一样,我们的目标是将信息有效地传达给浏览者,因此当务之急是,您的天空应该是晴朗的!

Alteryx 数据科学博客 上找到本文引用的 Alteryx 工作流。

推荐资源

  • 阅读一些用于可视化文本数据的单词云替代方案
  • 上面提到的这篇文章,对词云进行了基于研究的批判,并对它们提出了深思熟虑的建议。
  • 本教程展示了如何使用 Python 构建单词云,这是一种可以用 Python 工具构建到 Alteryx 工作流中的方法。
  • 关于各种数据可视化的更多信息,请查看我们的 Data Science Mixer 播客,其中有 data viz 专家和作者 Alberto Cairo 我们有小插曲长插曲供你欣赏!

原载于 Alteryx 社区 数据科学博客

如何让你的电脑与 Python 对话

原文:https://towardsdatascience.com/how-to-make-your-computer-talk-with-python-63f6c6eb534a?source=collection_archive---------4-----------------------

你成为亿万富翁花花公子的第一步

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

你的机器人管家。图片由史蒂芬·米勒

如果你是《钢铁侠》等电影的粉丝,你可能会幻想拥有自己的贾维斯。在这篇文章中,我将向你展示如何开始制作你自己的电脑助手。我们将通过一点编程和一些智能 python 包在引擎盖下做数据科学来做到这一点。

现在,制作像超级智能人工智能这样复杂的东西是很难的,对我来说太难了,以至于我无法在一篇帖子中完成,甚至很可能是在一般情况下。然而,我们能做的是把这个问题分解成更小的部分,使问题看起来更简单。这是你应该在你的每一个项目中做的事情,这样才不会一下子陷入所有复杂的事情中。

从我对这个主题的简短思考中,我相信我们可以将一个超级智能的人工智能助手分成四个主要部分:

  1. 文本到语音转换(获得响应)
  2. 语音转文字(要东西)
  3. 一些计算来理解我们的问题并做出回应
  4. 将反应转化为现实世界中的行动

在今天的帖子中,我将重点介绍我们的计算机助手的文本到语音方面,它允许我们的计算机与我们交谈。如果一切顺利,我将在未来继续撰写这篇文章,让我们的助手变得更加复杂和有用。

查找文本到语音库

现在,用 python 做这样的事情的一个巨大的好处是,我们有大量的库可以用来快速完成工作。毕竟,如果我们从头开始开发每一点,我们会在这里呆很长时间,以至于我们永远也做不了任何事情。让我们站在巨人的肩膀上,使用 python 包。

对于文本到语音转换,有几个 python 包脱颖而出:

  • 谷歌文本到语音(gTTs),以及
  • pyttsx3(我不知道那到底代表什么)。

Google Text To Speech 是一个 Python 库,用于与 Google Translate 的 text to speech API 接口。它具有谷歌自己的文本到语音应用程序的性能,但需要使用互联网连接。

pyttsx3 ,另一方面,是一个文本到语音转换库,它寻找预装在你的平台上的文本到语音引擎并使用它们。因此,它离线工作。

以下是它在主要操作系统上使用的文本到语音转换引擎:

  1. Windows 上的 SAPI5

2.MacOSX 上的 NSSpeechSynthesizer

3.在每隔一个平台上讲话

看着这两者,我不希望我的助手依赖于谷歌或在线连接来工作。我更愿意使用 pyttsx3,让所有东西都在我自己的机器上运行。

设置项目

现在,在我们开始运行一切之前,让我们设置我们的项目。

我们将通过文本编辑器和终端做所有的事情。如果你不知道这是什么意思,那么我向入门者推荐的文本编辑器是 vscode ,终端通常内置在你的文本编辑器中(就像在 vscode 中一样),或者是你计算机上的一个叫做“终端”或“cmd”的程序。

现在,我希望您打开终端,将目录更改为保存项目的位置,例如

cd ~/projects

接下来,我们需要创建一个目录来存储我们的项目。这完全由你决定,但我希望我的助手叫罗伯特。因此,我正在创建一个名为“robert”的新目录,然后用

mkdir robertcd robert

你可以把名字改成你喜欢的任何名字,比如 Brandy 或者 Kumar 什么的。

接下来,我们需要让 python 开始运行。为此,我们需要安装 python 3。如果您没有安装,请参见https://www.python.org/获取安装说明。我们还需要创建一个 python 虚拟环境。如果你想了解更多,请看这里的我最近的一篇文章

假设您安装了 python,您可以在终端中用

python3 --version

现在,您应该能够使用以下命令在 robert 目录中创建 python 虚拟环境:

python3 -m venv venv

注意,如果你安装的 python 版本叫 python python3.7 或者 python3.9 或者别的什么,那就用那个

然后,您应该能够通过以下方式激活您的虚拟环境:

(在 MacOS 和 Linux 上)

source venv/bin/activate

或(Windows)

venv\Scripts\activate

我们现在需要安装我们需要的软件包。为此,我们将创建一个 requirements.txt 文件。打开你最喜欢的文本编辑器,例如 vscode,或者,如果你喜欢冒险,打开你的“robert”文件夹,现在就创建这个文件。

对于我们的项目,到目前为止,我们只需要 pyttsx3。简单。现在让我们将它添加到 requirements.txt 文件中,如下所示

接下来,让我们使用 pip 安装我们的需求

pip install -r requirements.txt

使用 pyttsx3

现在一切都安装好了,让我们开始使用 pyttsx3。为了了解该怎么做,我查阅了这里的文件。

然后,您可以通过创建一个名为speech.py的文件并添加以下代码来制作一个很好的示例:

我们首先导入 pyttsx3 来加载它的所有类和变量。然后我们初始化语音引擎,设置我们想要的声音,然后是我们想要说的文字。我们终于用engine.runAndWait()说话了。

然后,我们可以在终端中使用以下命令运行该文件:

python speech.py

摆弄这个,改变text_to_say变量。你应该想说什么就说什么。

很酷的调整

现在我们有了一些工作,让我们给我们的助手一些调整。Pyttsx3 可以让我们调整声音和速度。

在上面的例子中,您可以将 voice_num 更改为一个不同的数字来获得一个新的语音。根据我的测试,这似乎是平台相关的(可能取决于你的平台是否有 SAPI5NSSpeechSynthesizerespeak )。

我创建了这个巨大的文件(当很多机器人用奇怪的口音跟你说话时,你会明白为什么)来帮助你决定什么声音最适合你。一旦你找到你喜欢的声音号码,就用在voice_num变量中找到的号码替换掉。

后续步骤

祝贺你到达终点。如果你有任何问题或者只是想打个招呼,请在下面发表。

如果你想进一步阅读,并对即将发布的帖子有所了解,我建议你查看下面的链接。

在我的下一篇文章中,我将关注语音转文本,这样我们的助手就可以响应我们的命令了🤖。给我一个关注,以确保你不会错过它。

如何使您的数据目录成功

原文:https://towardsdatascience.com/how-to-make-your-data-catalog-successful-3df6894f1975?source=collection_archive---------22-----------------------

从数十家公司学习如何让您的数据目录成功

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

约书亚·索蒂诺在 UNSPLASH 上拍摄的照片

衡量数据目录的成功只有两个目标:1)采用,2)客户满意度。如果你搞定了这两个,你就成功了。

我是领先的开源数据目录 Amundsen 的共同创建者,该目录被 35 多家公司使用,包括 Instacart、Square、Brex、Asana 等等。在这篇文章中,我分享了从 Lyft、其他 Amundsen 采纳者和 Stemma 客户那里学到的关于数据目录安装成功的关键知识。

我们在 Stemma 中吸收了一些知识,但是这篇文章吸收了产品中还没有吸收的知识。这些学习侧重于如何推出产品,如何获得广泛采用,以及如何衡量成功。

1.区分人物角色及其用例的优先级

一个数据目录有许多用户角色和用例。成功的安装优先考虑首先关注哪些角色和用例。这是数据目录中最常见的角色和用例的简化视图。首先从哪个角色开始并不重要,重要的是从特定的目标用户群开始。

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

按作者分类的图片:数据目录中最常见的角色和用例

2.分阶段推出

在这一节中,我将深入探讨启动数据目录的最佳实践。

第一步:确定一小组表格来获得 alpha 用户的反馈。

  • 该集合可以是公司内最常用的表(通常称为“核心”表),也可以是公司内的一个领域,如营销、增长或财务等。
  • 更常见的是,我看到核心表是被选择的集合,部分原因是它们最有影响力,但也因为通常有一个中央数据团队负责维护它们。

步骤 2:在这些表上填充 MVP 元数据

  • 这是大多数数据目录失败的地方。为了让用户从他们身上获得价值,描述,标签,所有者等等。需要策划。然而,如果没有大量的数据管理员,这是不可持续的,而且这些文档很快就会过时。这是数据目录失败的最大原因。通过为大部分数据选择自动化的数据目录,并仅管理最有影响力的数据,可以避免这一缺陷。
  • 对于部落知识,在你必须的地方,与一群数据生产者和消费者进行“文档即兴会议”会有所帮助。你甚至可以为那些提交最多文档的人提供奖励(比如礼品卡)!

第三步:向 5-20 名 Alpha 用户发布

  • 阿尔法用户最好是超发声用户。这些将来自您之前选择的优先角色。当您向更广泛的受众发布时,这些用户将成为 data catalog 的忠实支持者。
  • 整合反馈和迭代。有些类型的反馈在这里非常有价值,比如有人说,“哦,我们已经在这个电子表格中有了这些元数据,我们应该把它们也放在这里。”

第四步:向优先角色的所有用户发布测试版。

  • 将你的测试版集中在你的优先用户(例如数据消费者)上是很重要的。一个常见的错误是通过向所有角色开放来淡化发布的焦点。这并不意味着你应该从数据目录中锁定其他的角色,这只是意味着你应该首先关注哪些角色。
  • 如果您能够达到成功指标目标,则升级到 GA。在后面衡量成功的章节中会有更多的介绍。

3.大量收养的土地

为了更好地被采用,这里有一些我见过的最佳实践:

  • 更新松弛频道标题,人们在那里互相提问。产品功能在这里非常有用,例如,如果您的目录具有松散集成,并且可以自动将这些对话链接到目录。
  • **嵌入新员工培训。**标记每个领域的数据集(营销、增长等。)可以帮助新员工快速进入他们的领域。如果您已经接受过培训,请展示目录作为切入点。在 Lyft,我们让所有新入职的技术人员在入职时使用一个指标。他们使用 Lyft 的数据目录来发现和理解该任务的正确数据。
  • **与其他产品的联系。**创建各种数据工具之间的链接。例如,自动填充填充表的气流 DAG 和数据目录中的表页面之间的链接(反之亦然)。另一个有效的链接是数据目录中的表页面和用于生成表的代码的链接。
  • 在小组或公司会议上展示产品目录。在面向角色用户的全体会议上做一个 5 分钟的简短演示。教育、回答问题、感谢你的 alpha 用户——通过创造更多的认知和学习的机会,这是非常有影响力的。

4.衡量成功

就像我前面说的,采用和客户满意度是唯一重要的两个目标。我进一步探讨了对每一个指标使用什么样的具体指标定义:

1。采用:

  • WAUs: 我建议从周活跃用户(WAUs)开始,而不是日活跃用户或月活跃用户。常见的使用频率是每周,而不是每天或每月。
  • 目标穿透率:80%。在你的目标人物中,高渗透率是 80%。

2。客户满意度(CSAT):

  • **定期进行带外测量。**根据我的经验,定期(每 3 或 6 个月)测量的带外(非产品内)CSAT 反馈比在数据目录产品内获得反馈更好。我了解到,当在产品中衡量反馈时,最近的体验可能会玷污用户共享的反馈。

还有一些公司经常考虑的其他指标:文档质量、搜索质量等。然而,我的建议是一开始就坚持核心指标。随着您的数据目录逐渐成熟,并且随着时间的推移您将更多的元数据吸收到您的数据目录中,您可以使用这些特定的指标来跟踪这些不同改进的影响。

我希望本分步指南有助于您和您的团队了解如何导航数据目录安装,并使您的数据目录获得成功。正确的数据目录可以大大减少管理的开销。然而,无论您选择什么样的数据目录,上述步骤仍然对确保您的成功起着巨大的作用。

想了解更多关于 Stemma 的完全托管数据目录的信息吗?查看演示并开始使用 stemma.ai

为什么您需要为您的数据管道设置 SLA

原文:https://towardsdatascience.com/how-to-make-your-data-pipelines-more-reliable-with-slas-b5eec928e906?source=collection_archive---------12-----------------------

意见

如何设定贵公司对数据质量和可靠性的期望

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

图片由 Shutterstock 上的 Yevgenij_D 提供,可供拥有标准许可证的作者使用。

对于今天的数据工程团队来说,对实时、准确数据的需求从未像现在这样高,然而破损的管道和陈旧的仪表板却是一个司空见惯的现实。那么,如何才能打破这种恶性循环,做到数据可靠呢?

就像我们 20 年前的软件工程同行一样,21 世纪 20 年代初的数据团队面临着一个重大挑战:可靠性

与以往相比,公司正在吸收越来越多的运营数据和第三方数据。整个企业的员工都在数据生命周期的各个阶段与数据进行交互,包括非数据团队的员工。与此同时,数据源、管道和工作流变得越来越复杂。

虽然软件工程师已经用专业领域(如开发运维及站点可靠性工程)、框架(如服务水平协议、指标和目标)和大量首字母缩写词(分别为 SRE、SLA、SLIs 和 SLOs)解决了应用程序停机问题,但数据团队并没有以应有的努力处理 数据停机

现在是时候让数据团队做同样的事情了:区分优先级、标准化和度量 数据可靠性 。我预计在未来十年,数据质量或可靠性工程将发展成为自己的专业,负责这一关键的业务功能。

在此之前,让我们探索一下什么是数据可靠性 SLA,它们为什么重要,以及如何创建它们。

什么是 SLA?

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

Slack 的 SLA 保证 99.999 的服务正常运行时间。如果违约,他们会申请服务信用。图片由 Slack 提供。

简而言之,服务水平协议(SLA)是许多公司用来定义和衡量给定供应商、产品或内部团队将提供的服务水平的一种方法,以及如果他们未能提供的潜在补救措施。

例如, Slack 面向客户的 SLA 承诺每个财季 99.99%的正常运行时间,计划停机时间不超过 10 小时,适用于 Plus 计划及以上的客户。如果他们达不到要求,受影响的客户将在他们的帐户上获得服务积分以供将来使用。

客户使用 SLA 来确保他们从供应商那里得到他们所支付的东西:健壮、可靠的产品。对于许多软件团队来说,SLA 是为内部项目或用户开发的,而不仅仅是终端客户。

为什么 SLA 很重要?

让我们以内部软件工程 SLA 为例。如果没有客户向您施压,要求您在合同中承诺某些阈值,为什么还要经历编纂 SLA 的过程呢?为什么不指望每个人都尽力而为,争取尽可能接近 100%的正常运行时间呢?这不就是引入不必要的繁文缛节吗?

一点也不。定义、同意和度量构成可靠软件的关键属性的实践非常有用,并且为内部涉众设定了明确的期望。

SLA 可以帮助工程、产品和业务团队就他们的应用程序中最重要的事情达成一致,并对传入的请求进行优先级排序。有了 SLA,不同的软件工程团队和他们的涉众可以确信他们在说相同的语言,关心相同的度量标准,并且共享一个清晰记录的期望的承诺。

设定那些非 100%正常运行时间的期望值也为增长留下了空间。如果容忍零停机风险,就没有创新的空间。另外,这是不可行的。即使拥有世界上所有的最佳实践,系统也会偶尔崩溃。但是有了好的 SLA,当事情确实出错时,工程师将确切地知道何时以及如何进行干预。

为什么数据可靠性如此重要

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

图片由蒙特卡洛提供。

同样,对于数据团队及其数据消费者来说,在数据的整个生命周期中定义、测量和跟踪数据的可靠性已经成为一项关键需求。

设置数据可靠性 SLA 有助于在您的数据、您的数据团队和下游消费者(无论是您的客户还是您公司的跨职能团队)之间建立信任并加强关系。如果没有这些明确定义的指标,消费者可能会做出有缺陷的假设,或者依赖关于您的数据平台的可靠性和可信度的轶事证据。换句话说,数据 SLA 有助于您的组织更加“数据驱动”数据。

SLA 还将沟通形式化并简化,确保您的团队和您的利益相关者使用相同的语言并引用相同的指标。由于定义 SLA 的过程有助于您的数据团队更好地了解业务的优先级,他们将能够快速确定优先级,并在事件发生时加快响应速度。

如何创建数据可靠性 SLA

创建数据可靠性 SLA 并遵守它们是一项协作和专业的练习。

让我们先弄清楚一些词汇。根据 Google 的服务水平协议(SLA ),需要明确定义的服务水平指标(sli)、服务质量的量化衡量标准以及商定的服务水平目标(SLO ),即每个指标应达到的目标值或值范围。例如,许多工程团队将可用性作为站点可靠性的一个指标来衡量,并设定一个目标来保持至少 99%的可用性。

通常,对于数据团队来说,创建可靠性 SLA 的过程遵循三个关键步骤:定义、测量和跟踪。

步骤 1:用 SLA 定义数据可靠性

第一步是就可靠数据对您的组织意味着什么达成一致并明确定义。

我建议从设定基线开始。首先对您的数据进行清点,包括数据的使用方式和使用人。评估数据的历史性能,以获得可靠性的基准指标。

您还想从数据消费者那里获得关于他们眼中“可靠性”的反馈。即使对数据谱系有很好的理解,数据工程师也经常会被从他们同事的日常工作流程和用例中剔除。在与内部团队达成可靠性协议时,了解消费者实际上如何与数据交互、哪些数据最重要以及哪些潜在问题需要最严格、最直接的关注是至关重要的。

此外,您还需要确保相关利益相关方——所有对可靠性有既得利益的数据领导者或企业消费者——已经对您正在开发的可靠性定义进行了权衡和认可。

一旦您了解了(1)您正在处理哪些数据,(2)如何使用这些数据,以及(3)谁在使用这些数据,您就能够制定清晰、可行的 SLA。

(如果你仍然不确定这些 SLA 会是什么样子,我强烈推荐阅读这个关于设置数据仓库 SLA 的https://locallyoptimistic.com/post/data-warehouse-sla-p2/系列 。Brooklyn Data Co .的 Scott Breitenother 提供了一个非常强大的入门模板,以及与利益相关者沟通 SLA 的实用建议。

步骤 2:用 SLIs 测量数据可靠性

一旦您有了透彻的理解和基准,您就可以开始关注将成为可靠性的服务级别指标的关键指标。

根据经验,数据 sli 应该代表您在步骤 1 中定义的双方同意的数据状态,提供如何使用和不使用数据的界限,并具体描述数据停机时间是什么样子。这可能包括丢失、重复或过期数据等情况。

您的 SLIs 将取决于您的具体用例,但这里有一些用于 量化数据健康 的指标:

  • 特定数据资产的数据事件数量(N)。尽管这可能超出了您的控制范围,但考虑到您可能依赖外部数据源,它仍然是数据停机的一个重要驱动因素,并且通常值得衡量。
  • 检测时间(TTD):当问题出现时,此指标量化您的团队得到警报的速度。如果您没有适当的检测和警报方法,这可能需要几周甚至几个月的时间。由不良数据造成的“无声错误”会导致代价高昂的决策,对您的公司和客户都有影响。
  • 解决问题的时间(TTR):当您的团队收到问题警报时,这衡量您解决问题的速度。

步骤 3:使用 SLO 跟踪数据可靠性

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

在设置可靠性仪表板时,数据团队应该更加具体。图片由蒙特卡洛提供。

在确定了数据可靠性的关键指标(sli)后,您可以设定目标,即可接受的数据停机时间范围。

这些 SLO 应该是现实的,基于你的现实环境。例如,如果您决定将 TTD 作为一个度量标准,但是您不使用任何自动化的监控工具,那么您的 SLO 应该低于一个拥有全面的数据可观察性工具的成熟组织的范围。

就这些范围达成一致使您能够创建一个统一的框架,根据严重程度对事件进行评级,并在出现问题时简化沟通和快速响应。

一旦您设定了这些目标并将其合并到您的 SLA 中,您就可以创建一个仪表板来跟踪和报告进度。一些数据团队创建他们自己的专用仪表板,而另一些则使用专用的数据可观察性 解决方案。

实践中的数据可靠性

为数据设置 SLA、SLO 和 SLIs 只是难题的第一部分。当数据事件发生时,我们还需要一种方法来分类和管理事件,以免它们成为下游消费者的一大难题。

为此,我们可以再次向我们在 DevOps 的朋友寻求灵感。大多数工程组织会指派整个站点的可靠性团队来识别、解决和防止停机。在当今的现代数据组织中,当管道破裂和仪表板变得不稳定时,数据工程师往往首当其冲。

为了使事件解决过程更加简单和无缝,我们可以借鉴 SRE 手册,在数据问题出现时进行有效的沟通和分类。

例如,假设您的主管的一份重要报告中出现了陈旧的数据。从一开始,你不确定这条管道是如何断裂的,但是你需要告诉他们管道已经断裂,你的团队正在处理这件事。在您解决这个问题时,您不仅需要不断更新您的数据宕机侦探同事,还需要更新您的关键利益相关方对事件解决流程的了解。

以下是从一些最好的数据工程团队收集到的一些有用的表情符号及其相应的含义,便于交流:

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

图片由蒙特卡洛提供。

和一些图标来指示事件的严重性:

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

图片由蒙特卡洛提供

虽然获得可靠数据的手段最终取决于您的业务需求,但拥有一个良好的沟通策略将使您更容易执行 SLA。( Blinkist 分享了他们解决数据宕机的路线图,这里)。

入门指南

我们很兴奋地看到数据可靠性工程 这个专业领域是如何发展的。SLA、SLIs 和 SLOs 是一个很好的起点:它们为测量数据停机时间提供了一个有用的框架,并有助于在整个组织中建立一种信任、协作、数据驱动的文化。

就像 sre 通过自动化支持系统确保应用程序正常运行一样,数据团队也应该拥有自己的专业工具。最好的数据平台不仅会测量数据停机时间,还会通过 端到端的数据可观察性 ,最终帮助从一开始就防止数据停机,让您的团队达到最高的数据可靠性标准。

有兴趣学习如何设置自己的数据可靠性 SLA?伸出手去 巴尔摩西 和其余的 蒙特卡洛团队

如何通过设计使您的数据项目合乎道德

原文:https://towardsdatascience.com/how-to-make-your-data-project-ethical-by-design-99629dcd2443?source=collection_archive---------18-----------------------

一个简单的框架从今天的数据伦理开始

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

图片由 Riccardo AnnandaleUnsplash 上拍摄

数据是当今公司的命脉。日常运作不仅依赖于有关运营各个方面的持续数据,而且越来越清楚的是,有了足够的数据和正确的分析,以前难以解决的问题就可以得到解决,流程也可以得到改进。毫不奇怪,数据科学目前在 Glassdoor 的 2021 年美国最佳工作名单中排名第二(过去 6 年中有 4 年一直排名第一)。

但正如 2018 年脸书/剑桥分析政治丑闻向世界表明的那样,收集和分析大量数据的现代方法也可能引发伦理问题。丑闻爆发后,整个世界开始形成一种关于数据如何被使用和不被使用的观点,开启了可以被称为数据伦理的时代。

将这一点与旨在限制可以收集多少客户数据以及出于何种目的的现有和新兴立法结合起来,底线是:如果您的公司使用客户数据来做出面向客户的决策,则必须考虑做出这些决策所涉及的道德和法律问题。

培养伦理思维专家

在我的上一篇文章中,我描述了疏忽的数据使用可能导致的各种问题。我还提到了许多框架,数据科学家可以使用这些框架作为开始思考他们的工作可能带来的潜在问题的基础。但是,随着数据越来越成为整个组织决策的驱动力,数据道德意识需要扩展到数据科学团队之外。避免无意的陷阱意味着将每个数据用例的道德规范视为组织流程的一个组成部分。

我工作的公司积极帮助防止公司陷入道德数据陷阱。我们试图将数据使用的伦理注入我们的 DNA。我们公司的每一位顾问都接受过某种程度的数据安全和道德培训。我们最近还成立了一个包容性、多样性、公平和意识(IDEA)小组,面向热衷于思考道德和公平如何影响业务决策的人们。在进行数据项目时,IDEA group(多么有趣的缩写)的想法有助于确保我们的数据科学家了解利用客户数据的道德规范的最新趋势。

道德数据使用框架

通常,公司认为解决道德问题对业务不利,或者以某种方式“破坏”他们所做的事情。但是在我们的经验中,从来不是这样。在我的工作中,我以道德的方式帮助公司用数据达到他们的目标。

为此,我(和两位同事)创建了一个道德风险快速扫描,帮助客户快速评估他们的数据用例是否会导致道德风险。对于尚未设计解决方案的用例,很难评估风险和定义所需的度量,更不用说构建了。然而,道德风险是区分用例优先级和选择方法的关键标准。因此,我们开发了在用例选择和需求收集的早期阶段精确使用的快速扫描。它让我们对项目早期涉及的风险水平和领域有一个感觉,因此在哪些领域需要额外的关注。该框架帮助您将道德规范融入数据项目的设计中。

快速扫描如下所示:

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

作者为 IG & H 创建的框架

我们设计了快速扫描来提供潜在道德问题点的可视化表示。只需填写与您的案例细节相对应的点即可。

运行中的框架:出租车司机用例

下面是如何使用该框架的一个示例:想象一个出租车服务,它以数字方式监控出租车司机分配和执行的乘坐的许多方面。他们希望开发一种模型,根据这些数据对司机的表现进行评分,并相应地自动调整司机的工资。

让我们讨论一下这个用例在框架的每个维度上的得分:

  • **弱势人群受到冲击?**受影响的人通常经济收入低于平均水平,有些人可能只能勉强度日。
  • **受影响的人数多吗?**这是一个内部应用,对很多人没有影响(只有公司的出租车司机员工)。
  • ‘人生大事’受影响?该模型的决策将影响生活中的事情,因为它们将影响财务健康和工作保障。
  • **影响个人行为?**该模型的决策可能会影响出租车司机的行为,因为它们可能会刺激出租车司机工作更长时间,或者接受往返于他们不舒服的地点。
  • **没有,或者说慢,反馈回路?**模型决策的效果会很快显现(每周或每月),因此会有一个快速的反馈循环。
  • **没有人类参与?**用例要求自主的绩效评分和薪酬调整,这意味着没有人参与。
  • **数据中的偏差?**性能通常是一个主观的概念,因此模型训练所依据的数据可能会有偏差。
  • **使用的个人数据?**最后,数据会涉及到细粒度的个人位置数据,被认为是个人数据。

下面是我如何根据这个特定的使用案例填写快速扫描:

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

作者为 IG & H 创建的框架

对于每个填有红点的区域,必须考虑或采取措施来缓解潜在问题。此外,建议特别注意填有“中等风险”点的区域。下表提供了这种情况下最大问题点的可能缓解措施示例。

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

快速浏览将注意力集中在项目开始前可以采取的措施和缓解措施上。一旦项目全面展开,随着实际的解决方案和数据需求变得越来越清晰,团队可以通过道德风险评估框架将其评估提升到下一个级别。这进一步从普遍接受的安全、公平、透明和隐私的道德准则方面检查了风险维度。我们从对 36 个著名的人工智能原则文档进行的元研究中提炼出了这些指导方针。

确保数据转换中的道德行为

在转型期间,我公司的数据科学家与行业专家一起工作,以确保数据、分析、技术和业务技能之间的无缝互动。同时,我们确保数据使用得到优化,以有效实现业务目标,而不会违反道德数据使用准则和法规。

在下一篇文章中,我打算使用我们的(更广泛的)道德风险评估框架,根据快速扫描结果阐明我们可以采取的行动类型。使用这些指南,我们可以消除和/或减少已识别的风险,并使人工智能的使用不仅可行,而且可行和可取。

这篇文章(和框架)是我和我的同事曼多·罗特曼和 Floor Komen 共同完成的。它也被发布到我们的 公司网站 ,在那里你也可以下载 pdf 格式的框架,这样你就可以自己使用了。

这篇文章也被发表到 IG & H 的网站上。这是三篇系列文章中的第二篇,你可以在这里找到:第一部分 第三部分

如何让你的数据科学简历脱颖而出

原文:https://towardsdatascience.com/how-to-make-your-data-science-cv-stand-out-9adad32f61cb?source=collection_archive---------48-----------------------

成功简历的 7 个屡试不爽的技巧

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

Bram Naus 在 Unsplash 上拍摄的照片

如果你有分析背景,吸引招聘人员的兴趣可能不会有太多困难。

对数据科学家的需求激增,但数据科学家的数量远远不足以满足需求:自 2015 年以来,人工智能相关的年度招聘增长了 74%,但预计到 2030 年,全球科技人才短缺将达到 8500 万人(来源:【https://quanthub.com/data-scientist-shortage-2020/】T4)。

考虑到蓬勃发展的就业市场,你可能会认为你不需要在简历上花太多精力。只要相关的东西在里面,人们就不会在意,我说的对吗?不对。

虽然让你的简历受到关注并通过第一个筛选阶段可能并不太难,但从它出现在招聘经理的办公桌上的那一刻起,你只有很短的时间来留下印象(你可能有超过 6 秒的时间,但不会太多)。他们可能每天都会收到几十份简历需要评估,并且会很快浏览一遍。

很长一段时间以来,我一直坐在候选人的位子上,幸福地不知道在我的简历中什么会或不会给人留下印象。随着时间的推移,我从导师那里得到了很好的建议,并学会了在阅读他们的简历时应该注意什么。这些事情可以带来很大的不同。

这里有七个小贴士可以让你的简历脱颖而出。

1.把你相关的工作经验放在最上面

当有人看你的简历时,他们显然是从上面开始的。这是您希望最相关的信息所在的位置。这几行字会让某人决定是继续阅读你的简历还是跳到下一页。所以,如果你有数据科学家的相关工作经验,就放在最上面。

2.首先列出你最近的角色

从当前或最近的工作经历开始列出你的工作经历是一个好主意。同样,人们只会在这一部分花几秒钟的时间,而且需要说明的是,你目前是一名数据科学家,或者不久前还是一名数据科学家。评论者不关心你五年前在做什么。人们会改变职业,在数据科学领域工作五年是一段漫长的时间。

3.简洁

时间很关键。如果你当前的角色描述是一个密集的 10 行段落,那么一个评论者不会阅读它。最多写两行来概括描述你的角色的职责,并用要点来指出具体的项目或成就。

4.要点是你的朋友

如果使用得当,要点可以成为强有力的工具。它们将复杂的信息分解,使其更容易阅读。但是,不要和他们一起疯;每一部分要有三到六个要点。如果你有更多的项目,试着把它们分成包含它们的单个项目,或者选择你认为最能展示你才华的项目。

5.量化你的成就

通过量化你的成就所带来的价值,以面向业务的方式展示你的成就。如果是实实在在的结果就更好了。例如,收入的增加、支出的节省或现有流程的改进。详细点。它将展示你理解业务需求并实现这些需求的能力。

6.选择你的技能

你可能想在你的简历中删减一些技能。清单中的 20 多项技能迫使读者筛选出对他们来说重要的技能。一个更好的主意是让工作描述中明确列出的技能更加突出——如果你有的话——或者只选择你最擅长的技能。关注那些阅读你简历的人会寻找的关键词。如果他们在寻找 NLP 专家,而你就是其中之一,那么让他们容易找到并清楚地陈述出来。

剩下的可以放在其他技能下。但不管怎样,你绝对需要把 X 列为技能吗?例如,如果你上一次用 C++编程是在十年前读研的时候,那么把 c++作为一项技能有多大用处呢?除非 C++是必备技能,不然不多。还有,有些技能是给定的,不需要叫出来。2021 年谁不知道怎么用 Office?

7.限制个人信息

事实是,除非你的爱好与你申请的工作有关,否则面试官并不在乎你是否喜欢旅游或在空闲时间玩 T4 五人制足球。例如,如果这个职位是一家博彩公司的,那么对体育的熟悉可能会让你比其他候选人更有优势。不过,这将是一个小优势,因为在数据科学中,技能是可以转移的,领域知识不是必需的。

然而,个人成就可能会有所不同,因为它们可能会告诉你一些事情。例如,如果你参加了马拉松训练,这可能会说明你的承诺或长期规划能力。

总的来说,不要低估一份好简历的重要性。这是你数据科学面试的第一步。保持更新,不要超过两页——或者三页,根据经验而定。然而,最重要的信息应该在第一页。你简历的第二页就像谷歌搜索结果中的第二页。几乎没有人去过那里。

上面的列表来自我自己的经验,并不详尽。如果你有什么建议想分享,请联系我们或在下面留言!

如何让你的建模过程更有效率

原文:https://towardsdatascience.com/how-to-make-your-modeling-process-more-efficient-89e70259839d?source=collection_archive---------43-----------------------

介绍一种用于数据集初始建模的省时方法

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

张杰Unsplash 上的照片

在这篇文章中,我将分享一些关于如何有效地开始初始建模的技巧。在花了很多时间测试哪些模型在我的特定数据集上表现最好之后,我想出了一个节省时间的方法,我用它来对我的所有数据集进行初始建模。一旦我能够找出在我的数据集上表现最好的模型,我就专注于这些模型,并开始调整它们的超参数,使它们在我优化的指标方面更好。

我下面描述的过程将有助于找到你的模型的一个好的起点。在这个例子中,我正在进行一个项目,该项目使用 CTG 信息将胎儿健康分为 3 类(1 为健康,2 为可疑,3 为病理)。请注意,在开始项目的建模阶段之前,我彻底清理了数据并执行了 EDA。

为了开始分类建模过程,我定义了 X 和 y 变量,并创建了训练、测试分割和缩放数据,如下图所示。一旦训练和测试数据被缩放,就该开始初始建模了。

X = df.drop(columns = ['fetal_health'])
y = df['fetal_health']X_train, X_test, y_train, y_test = train_test_split(X, y, stratify = y )ss = StandardScaler()
X_train_sc = ss.fit_transform(X_train)
X_test_sc = ss.transform(X_test)

我创建了一个函数来实例化并拟合训练数据上的指定模型,对测试数据进行预测,然后打印出训练和测试的准确度分数。下图显示了我如何设置这个简单而有效的函数。

def pipe(model): #instantiate model
    model = model() #fit to scaled data
    model.fit(X_train_sc, y_train)

    #make predictions
    predictions = model.predict(X_test_sc) #print accuracy scores for training and testing groups
    print(f'{model} training score: {model.score(X_train_sc, y_train)}')
    print(f'{model} testing score: {model.score(X_test_sc, y_test)}')return

接下来的部分是最有趣的部分!我能够通过我在笔记本中导入的函数传递任何模型。我能够很快地在 8 个不同的分类模型上重复这个函数,并打印出训练组和测试组的准确度分数。然后,我可以查看如下所示的 8 个模型的得分,并挑选出前两个模型来微调超参数,以进一步提高准确性。

pipe(LogisticRegression)
> LogisticRegression() training score: 0.8977415307402761
> LogisticRegression() testing score: 0.9078947368421053pipe(DecisionTreeClassifier)
> DecisionTreeClassifier() training score: 0.998745294855709
> DecisionTreeClassifier() testing score: 0.9116541353383458pipe(KNeighborsClassifier)
> KNeighborsClassifier() training score: 0.9316185696361355
> KNeighborsClassifier() testing score: 0.8984962406015038pipe(RandomForestClassifier)
> RandomForestClassifier() training score: 0.998745294855709
> RandomForestClassifier() testing score: 0.9454887218045113pipe(AdaBoostClassifier)
> AdaBoostClassifier() training score: 0.9084065244667503
> AdaBoostClassifier() testing score: 0.8853383458646616pipe(SVC)
> SVC() training score: 0.9240903387703889
> SVC() testing score: 0.9191729323308271pipe(GradientBoostingClassifier)
> GradientBoostingClassifier() training score: 0.9949811794228356
> GradientBoostingClassifier() testing score: 0.9492481203007519pipe(ExtraTreesClassifier)
> ExtraTreesClassifier() training score: 0.998745294855709
> ExtraTreesClassifier() testing score: 0.9342105263157895

在这种情况下,我选择继续研究梯度提升分类器和随机福里斯特分类器,因为它们在训练组和测试组之间具有最高和最一致的分数。在那里,我设置了网格搜索来测试每个模型中不同的超参数选项。网格搜索需要更多的时间来迭代,这就是为什么我只想在最高性能的模型上尝试。梯度增强分类器网格搜索如下所示。然而,我对这两个模型都做了这个过程,并确定了每个模型的最佳参数。

X = df.drop(columns = ['fetal_health'])
y = df['fetal_health']X_train, X_test, y_train, y_test = train_test_split(X, y, stratify = y )#pipeline to scale data and then grid search
pipe = Pipeline([
    ('ss', StandardScaler()),
    ('gbc' , GradientBoostingClassifier()) 
])#gbc parameters to grid search through
pipe_params = {
    'gbc__max_depth':[1, 2, 3, 4],
    'gbc__learning_rate'  :[0.1, 0.001, 1],
    'gbc__n_estimators' :[100, 300, 500],
    'gbc__min_samples_leaf' :[1, 2]
}#instantiate and fit grid search
gs = GridSearchCV(pipe, param_grid = pipe_params, cv = 5)
gs.fit(X_train, y_train)#print accuracy scores for training and testing groups
print(f'training score:  {gs.score(X_train, y_train)}')
print(f'testing score: {gs.score(X_test, y_test)}')> training score: 0.9887076537013801
> testing score: 0.9473684210526315#get best parameters from grid search
gs.best_params_> {'gbc__learning_rate': 0.1,
 'gbc__max_depth': 2,
 'gbc__min_samples_leaf': 2,
 'gbc__n_estimators': 500}

最后,为了评估用于生产的最佳模型,我对测试数据进行了预测,并查看了每个模型的准确性分数和召回分数。我希望优化召回分数,因为在处理胎儿健康数据时,假阴性的风险很高。我选择梯度提升分类器作为最佳模型,因为与随机森林分类器相比,它在准确性和召回率方面得分最高。参见下面的分类报告和混淆矩阵,其中第 3 组(病理组)的假阴性已降至最低。

#make predictions on testing data
preds = gs.predict(X_test)#print out classification report
print(classification_report(y_test,preds))> 
fetal health  precision    recall  f1-score   support

           1       0.96      0.97      0.97       414
           2       0.91      0.78      0.84        74
           3       0.86      0.98      0.91        44

    accuracy                           0.95       532
   macro avg       0.91      0.91      0.91       532
weighted avg       0.95      0.95      0.95       532#plot confusion matrix
cm = confusion_matrix(y_test, preds)
ConfusionMatrixDisplay(cm, display_labels = gs.classes_).plot(cmap = 'Blues');

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

作者照片

这整个过程可以在一天的工作中完成。我希望模型功能和网格搜索的结合也能帮助你的分类建模更有效!

如何成功管理人工智能团队

原文:https://towardsdatascience.com/how-to-manage-ai-teams-for-success-502c1f85ca96?source=collection_archive---------36-----------------------

隐藏的动力、目标和竞争矢量

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

Shutterstock.com瓦伦丁·瓦尔科夫 / 摄影

几个月前,我与多伦多一家知名人工智能公司的几位研究人员进行了一次对话,他们的公司理念是,每个人都应该编写生产级代码,甚至能够部署它。这让我想起了很多事情。关于我的团队,关于人工智能和管理软件工程的复杂性。人工智能团队特别有趣,因为他们同时需要至少两个学科:软件/硬件工程和科学发现。

那么,一个人如何走向成功,创建一个有凝聚力的团队,或者由研究人员和软件工程师组成的团队,他们一起工作,创造出伟大的产品呢?产品要么是企业试图在知识产权方面获得竞争优势的纯研究,要么是在给定垂直领域更适合商业产品的应用研究,要么是两者的混合。

这是我们三年前面临的挑战。作为一个团队,我们需要为我们的金融客户创建一个软件生态系统。它有几个不同的组件:基于 Kafka 的数据摄取系统,ETL 流程,特征工程,发现 ML/深度学习算法的核心流程,并最终将它们部署到生产中。这是一个既需要科学研究又需要创造商业产品的混合环境。观察新出现的团队内部模式很有趣,这让我想起了我以前与科学家和软件工程师的合作。我发现仔细检查人工智能研究和软件工程的交互中隐藏的假设,以及管理哲学如何影响这些交互,并最终影响一个组织的目标可以实现的程度,这很有趣。

竞争向量

想象你是一名软件/数据工程师,与一名人工智能研究人员一起工作,或者相反,这取决于你更喜欢哪种角色。作为一名软件工程师,你朝着消除设计中的错误和减少设计中的缺陷前进,如果你的系统中有未知的东西,在很大程度上你就暴露在风险之中。相反,作为一个人工智能研究者,你会走向一个新的发现,本质上你是在走向一个在发现之前未知的东西。它有多新颖并不重要,重要的是它以前不为任何人所知。换句话说:研究人员走向未知,而软件工程师走向消除未知,图 1。我把这种现象称为未知向量的*竞争(CUV)。*我一直在从三个维度思考 CUV:系统熵、奖励系统、集体与个人目标,并有兴趣看看这些向量可能在哪里收敛或发散。

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

图 1:未知向量的竞赛,a s 如果有两个向量,代表每个学科的努力,指向两个不同的搜索空间。作者图片。

系统熵

从系统熵的角度来看待未知会很有趣。人工智能研究中的发现过程,或任何与此相关的科学研究,似乎都伴随着所涉及的思维过程和潜在工作空间中熵的增加。类似于给思想的灯塔充能,把它送到高维空间,寻找新的发现。如果你的研究灯塔能量不高,你就不太可能接触到新奇的事物。似乎没有这种熵水平的内在增加,就无法进行研究。如果不在创造力的空间里进行高维度的搜索,一个人怎么能发现未知的新领域呢?另一方面,软件工程寻求在系统层次上减少熵。熵的起伏会在目标、支持系统、协议、数据管道和项目的运营预算等方面产生摩擦。

例如,在我们项目的早期,我们的研究人员正在构建新的模型,这些模型不断需要新的数据流、这些数据的新转换以及这些数据的新存储解决方案。他们的创造速度超过了数据平台所提供的开箱即用。在这种情况下,一家公司可能有两种选择,一种是将研究人员转化为兼职工程师,他们也可以创建自己的临时管道,在我看来,这是一种自我挑战的活动,因为它会导致团队的研究能力大幅下降。第二个选择是想出新的方法来支持研究人员。第二个选择最终是我们选择的道路,它帮助我们在不破产的情况下增加我们的研究能力(我将在下一篇文章中更详细地介绍我们如何扩大我们的团队)。我想在这里强调的一点是,这两个子系统,数据管道和不同机器学习模型的实验,在增加或减少系统熵方面是如何发生冲突的。除了数据管道,我们在其他子系统中也看到了熵上升和下降的相同模式,以及随之而来的摩擦,例如在编码、测试和设计 ML 模型的定制模拟中。

奖励系统

这两个领域的奖励制度可能大相径庭。在科学领域,一个人会因为有所发现而获得奖励,即揭开未知的秘密。例如,亚当优化器的发明是一项科学成就,它使得深度模型的训练更快。虽然,让我们说,创建一个高性能的数据流管道,实时填充功能商店也为生产模型提供数据,虽然非常复杂和非常有价值,但它更像是一项工程成就,而不是科学或 NeurIPS 有兴趣发表的东西。我认为奖励制度是公司需要投资澄清的主要话题之一,因为它影响了企业的最终目标,以及如何平衡人工智能研究人员和软件工程师的留用和工作满意度。

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

照片由航拍/Shutterstock.com拍摄

集体目标与个人目标

在商业人工智能公司中,目标不明确有许多方式,但似乎最常见的方式之一是试图简单地复制管理哲学和学术界的目标。如果考虑未知向量、奖励系统和系统熵的竞争,就可以更清楚为什么简单地复制学术界可能不是中小型企业的最佳主意。可以举出几个不同的例子来说明这种不适用性。

例如,学术界可以承受思维过程中几乎无限的熵(这是正确的,因为这是他们的设计目的,做出新的发现),而在商业企业中,无限的熵可能会破坏工程努力和团队内部的努力,从而破坏产品化的机会。

另一个例子可以是如何在人工智能公司中衡量进展。在我们项目的早期,我们在 finance+ml 杂志上看到了一篇很有前途的同行评议论文,它为解决我们现有的一些问题提供了理论依据。然而,令我们惊讶的是,我们无法重现该论文承诺的结果。为了解决这个问题,我们作为一个团队合作创建了一个模拟环境,以测试实现该论文承诺结果的可能性。通过这些概率模拟,我们发现实现那篇论文发表结果的几率只有 70%。对我们来说,这一过程是成功的,因为有两个原因,首先,它节省了我们在那份文件上花费的时间,其次,它揭示了那份文件中隐藏的风险远远超出了我们在任务关键型环境中所能容忍的程度。对我们来说,这里的成功不一定是写一篇新的科学论文,而是发现一个模型与项目的目标不一致。

第三个例子是检查学术界和企业所需的软件工程工作的规模和结构。在学术界,软件工程工作通常是在筒仓中完成的,有趣的是,这些筒仓老化得非常快,并且不期望它们相互连接和交换数据,因为根本不迫切需要它,因为目标不是公司范围的,而是基于个人的。在企业方面,要使这些孤岛相互通信、保持最新状态并服务于多个客户,需要在软件和数据工程方面进行大量投资。

思绪向前

我认为检查人工智能企业中存在的隐藏假设是有益的,无论它们更倾向于研究还是研究和产品的混合体。并且可能有助于提出具有深远影响的问题:团队是如何构建的,进展是如何衡量的,代码是如何产生的,敏捷迭代是如何完成的,谁支持谁以及支持到什么程度,以及成功的定义是什么:它发表了更多的论文吗?或者,作为一个例子,成为金融领域领先的人工智能提供商?或者两者都有?这就引出了这样一个问题:一个公司要取得预期的成功,需要什么样的结构、团队和脚手架。我也有兴趣了解你的经验和实地观察,无论是作为一名人工智能研究人员,一名软件工程师,还是一名经理,请随时通过评论或消息联系。

感谢阅读。

https://www.linkedin.com/in/atavakolie/
http://www . silka tech . ca

如何像老板一样管理配置

原文:https://towardsdatascience.com/how-to-manage-configurations-like-a-boss-34e224f3bb4?source=collection_archive---------4-----------------------

使用 Pydantic BaseSettings,你的生活会变得更容易

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

费伦茨·阿尔马西在 Unsplash 上的照片

介绍

每当您编写应用程序、算法或数据管道时,您很可能会有几个因环境或部署而异的变量。例如,与生产环境中的目标数据库相比,您在本地测试时连接到的数据库肯定是不同的。因此,数据库的名称或地址将是一个配置变量。

管理这样的配置变量至关重要;您肯定不希望在本地测试时意外地将垃圾写入生产数据库。为了获得良好的开发体验,添加和设置配置变量也应该是容易和轻松的。

尽管配置管理非常重要,但它并不被认为很有吸引力。在这篇文章中,我想改变这一点!具体地说,我想向您展示我认为在现代 Python 中管理配置的最性感的方式。你准备好了吗?我们开始吧!

问题是

正如在引言中已经提到的,每当你写一个更大的软件时,在某个时候,你将不得不管理配置变量。我所说的配置变量指的是不同环境之间的变量,或者可以决定应用程序行为的变量。典型的例子有数据库地址、日志级别、并发线程的最大数量或 API 令牌等等。

要设置这些变量,您有几个选项。三种最常见的是

  • 将它们作为常量存储在代码中。在这种情况下,您的优势在于,在运行您的应用程序或测试时,您不需要做任何事情,因为一切都是预先配置好的。最大的缺点是,当你把你的应用程序部署到不同的环境中时,它是非常不灵活和不适用的。实际上,这样做被认为是一种反模式,因为代码和配置是紧密耦合的。
  • *将它们存储在配置文件中。*这里,您必须在应用程序启动时加载一个文件,并将值赋给各个变量。这种方法很灵活,因为不同的环境可以有不同的文件。不利的一面是,它可能需要大量样板代码来很好地设置一切。此外,当涉及到测试时,保留虚拟配置文件来设置您的测试可能会很烦人。
  • 存储在环境变量中。这里,您必须单独加载每个环境变量,并将加载的值分配给相应的代码变量。利弊与使用配置文件的描述相似。不过,使用环境变量可能会更灵活一些,但需要编写更多的代码。

如你所见,这三种选择都有利弊。问题是现在;我们能否利用它们的优点,同时避免或减轻它们的缺点?幸运的是,答案是

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

布雷特·乔丹在 Unsplash 上拍摄的照片

解决方案

当您使用伟大的 Pydantic 库时,在 Python 中管理配置就像是轻而易举的事情。Pydantic 附带了一个名为 BaseSettings 的类,它允许您创建定义明确、有类型提示的应用程序配置类。除了给你的配置一个清晰的结构和定义良好的接口,这个类自动从环境变量和配置文件中读取值。因此,加载您的配置不需要编写任何额外的代码。听起来是不是很棒?

最后,当您将配置定义为标准 Python 类时,您可以为变量分配合理的默认值。这意味着您不必在每个环境中显式地设置每个变量,但是如果您希望或者将来必须这样做,您可以做好准备。

基本示例

一小段话包含了很多信息。因此,让我们喘口气,看看一些示例代码,以进一步加深我们的理解

我在这里做了什么?首先,我创建了一个继承自BaseSettings的配置类MediumConfig。这个类有三个配置变量tier, log_level,user,它们都是字符串。Tier 和 log_level 分配了默认值,而用户变量必须显式设置。设置值最直接的方法是创建一个类的实例,如cfg = MediumConfig(user="hans.maulwurf", tier="stg")。到目前为止,没有什么非常壮观的,只是普通的 Python。

然而,真正方便的是使用环境变量设置变量的第二个选项。对于给定的示例,您可以通过设置与带有前缀medium_MediumConfig类中的环境变量同名的环境变量来实现,即medium_tiermedium_log_level。需要前缀,因为子类Config中的env_prefix变量被设置为前缀。如果你不想要那个,你可以不要它。一般来说,建议为 env 变量使用前缀,因为它允许您将特定于应用程序的变量与其他变量区分开来。

但是,可能有一些环境变量的名称您无法显式控制,也就是说,您不能只在它们的名称前添加前缀。尽管如此,您仍然希望能够自动加载这些变量。在这种情况下,您可以使用Field类。在这里,将 Field 的一个实例分配给一个变量,并将其 env 参数设置为相应的环境变量名。您可以从取自user_name环境变量的user变量中看到这一点。注意,这里使用的前缀是而不是

最后,您从示例中看到,您可以混合和匹配指定变量值的方式。如果一个变量以多种方式被指定,例如,一个值被传递给类初始化器并且相应的环境变量被设置,传递给类初始化器的值优先或者具有更高的优先级。这种优先顺序可以改变,甚至扩展。让我们在下一节看看如何做到这一点。

高级示例

到目前为止,我们已经看到了如何在代码中或者使用环境变量显式地设置我们的配置变量。我们还没有介绍的是如何使用配置文件做到这一点。为了了解它是如何工作的,让我们来看一些代码

这里发生了什么?我有

  • 增加了从 YAML 文件加载配置变量的可能性,
  • 更改了优先级顺序,使配置文件优先于环境变量,
  • 去掉了一种设置变量的方法,我在这里还没有讲到。

我是怎么做到的?只需从 Config 子类实现和扩展customise_sources classmethod。这个方法必须返回一个可调用元组,每个可调用元组实现一种加载配置变量的可能方式。从该函数返回可调用内容的顺序决定了从不同来源加载时的优先级。

具体地说,为了加载 YAML 配置文件,我实现了yml_config_setting函数。该函数加载名为 config.yml 的 YAML 文件,并将其反序列化到 Python 字典中。为了在 config 类中使用这个函数,我将它添加为customise_sources函数的返回值之一。为了给 YAML 配置文件比使用环境变量更高的优先级,我在返回值集合中把yml_config_setting放在了env_settings callable 之前。完成了。对我来说,这再简单不过了。

最后一点,加载配置变量不仅限于加载 YAML 文件。您可以将任何可以反序列化数据的东西添加到字典中。您甚至可以考虑添加一个函数,从 AWS SSM 这样的云参数存储中加载您的配置,但这超出了本文的范围。我相信你可以自己解决这个问题:)

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

照片由艾蒂安·吉拉尔代Unsplash 拍摄

包裹

在本文中,我向您展示了如何使用 Pydantic 和 BaseSettings 类来定义和管理应用程序配置。使用这种开箱即用的方法,不仅可以为您的配置提供一个定义更好、更清晰的界面,还需要您编写和维护更少的代码。此外,我还向您展示了一种超级简单灵活的方法,如何扩展 BaseSettings 实现,使其能够处理其他源,如配置文件。有了这个,你应该配备一个工具集,让你像老板一样管理你的配置。对我来说,所有的一切都很性感,不是吗:-)

感谢你关注这篇文章,我希望你喜欢它,并学到一些新东西。一如既往,欢迎随时联系 LinkedIn 或关注我,并在下面留下评论。

如何管理您的数据科学项目

原文:https://towardsdatascience.com/how-to-manage-data-science-projects-successfully-8fbcbdb3b5f7?source=collection_archive---------49-----------------------

数据科学项目的五个 P

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

蒂姆·斯万在 Unsplash 上的照片

在这篇短文中,我想为您提供什么是 5P 的答案,以及如何通过在您的数据科学项目中使用它们来从中受益。

目的

类似于经典的项目管理,目标或目的总是应该被制定。在大数据世界中,可能的目标包括:

  • 更好的商业洞察力
  • 欺诈预防/检测
  • 预言;预测;预告
  • 最大化问题等。

但是,如果没有明确的目标,就不应该做大数据或数据科学项目。不要因为每个人都在做某件事就去做它!

通常参与开发团队的人员的角色如下:

  • 开发商
  • 试验装置
  • 数据科学家
  • 领域专家

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

敏捷数据科学团队—作者图片

还有利益相关者和项目发起人,他们通过项目经理/产品负责人了解项目的进展,在双方之间进行调解,并承担建立适当团队、组织截止日期、创建项目计划或故事的任务。在这里阅读更多关于组建团队的。

处理

你必须考虑两种不同类型的过程。一方面组织流程和主题如:

  • 项目组织:经典与敏捷
  • 项目进度报告和项目营销(例如,我如何通知我的利益相关者?)
  • 变更流程(我如何让相关人员参与进来,并让他们成为合作者?)

另一方面,你将处理技术流程:

  • 我试图用 IT 和数据科学支持的业务流程是什么?
  • 数据集成过程和使用什么等问题——以 ETL 与 ELT 为例
  • 您希望选择什么样的数据分析和数据科学流程(例如 CRISP)

平台

影响您将用于分析和产品的平台的基本和战略性问题有:

  • 我的 IT 治理规定了什么?
  • 我追求哪些(IT)策略?
  • 以前的(IT)架构
  • 一两个速度呢?
  • 我的法规遵从性/安全性要求什么?

这导致了一些技术问题,如:

  • 数据集成应该如何实现?(通过 Java 手动操作,而不是使用 talend、Dataflow 等工具。)
  • 应该使用哪种云(AWS 对 Google 对 Azure 以及
    公共对私有对混合)
  • 我的技术要求是什么?
  • SLA(服务提供商和客户之间的合同)

本文中的描述了如何构建您的数据分析平台。

可编程序性

我使用哪些工具和编程语言?这一点当然也是由 IT 治理和战略以及对上述问题的回答所决定和影响的。

工具和编程语言可以是:

  • 像 SQL、Python、R
  • 像 Hadoop、谷歌云存储和大查询、AWS 红移和 S3 这样的大数据工具
  • Kafka、Spark、talend 等流媒体软件
  • 商务智能工具,如:Tableau,Qlik,谷歌数据工作室

结论

在从事数据科学项目甚至管理项目时,5P 将为您提供您应该考虑的五个主要主题。此外,他们会问你一些你在项目中可能会问自己的问题。要了解更多信息,您可以点击下面的链接。

资料来源和进一步阅读

如何在 SQL 中操作熊猫数据帧

原文:https://towardsdatascience.com/how-to-manipulate-a-pandas-dataframe-in-sql-7d1a1503f47?source=collection_archive---------13-----------------------

数据操作

这是一个现成的代码,包含一些使用 SQL 查询操作 Python Pandas 数据框架的技巧。

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

迈克尔·泽兹奇在 Unsplash 上拍摄的照片

在本教程中,我展示了一些使用 SQL 查询操作 Python Pandas 数据帧的技巧。具体来说,我涵盖以下主题:

  • 缺失值(移除和替换)
  • 数据帧排序
  • 删除重复项
  • 合并两个数据框架(并集和交集)

为了通过 SQL 查询来查询 Pandas 数据帧,我使用了sqldf Python 库,可以通过下面的命令安装这个库:pip install sqldf

加载数据集

我导入了pandas库并读取了一个简单的数据集,其中包含每个国家的首都和一个通用字段,称为 Value。

import pandas as pddf = pd.read_csv('../../Datasets/capitals1.csv')
df.head()

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

作者图片

现在我导入sqldf库。

import sqldf

缺少值

缺失值是数据集中不可用的值。例如,丢失的值可以表示为NULLNoneNaN。可以采用不同的策略来处理缺失的价值观。在本教程中,我演示了两种技术:

  • 删除缺少的值
  • 替换丢失的值。

删除缺少的值

删除缺失值包括删除某一列中缺失值的所有行。在我们的示例数据集中,索引为 3 的行缺少一个值。

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

作者图片

我定义了一个查询,它只选择Value列不为空的行:

query = """
SELECT *
FROM df
WHERE Value IS NOT NULL;
"""

现在我可以通过run()函数运行查询。

如果查询包含 **SELECT** 语句,则 **run()** 函数返回新的 dataframe。相反,如果查询包含一个 **UPDATE** 语句,则更新原始数据帧。

sqldf.run(query)

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

作者图片

替换丢失的值

处理缺失值的另一个策略是用固定值替换它们。例如,固定值可以是平均值。据我所知,sqldf库不支持嵌套查询,因此我必须运行两个独立的查询,一个检索平均值,另一个替换丢失的值。

首先,我计算列Value的平均值:

query = """
SELECT AVG(Value) as AVG
FROM df
"""avg = sqldf.run(query)['AVG'][0]

然后我更新数据集:

query = """
UPDATE df
SET Value = {}
WHERE Value IS NULL;
"""sqldf.run(query.format(avg))
df.head()

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

作者图片

订单数据框架

可能发生的情况是,为了建立一个最终的可视化,必须订购一个数据帧。因此,我可以利用 SQL 提供的ORDER BY语句:

query = """
SELECT *
FROM df
ORDER BY Value DESC;
"""sqldf.run(query)

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

作者图片

删除重复项

SQL 的强大功能也可以用来删除重复项。这可以通过构建查询来实现,该查询选择不同的列:

query = """
SELECT DISTINCT Country, Capital, Value
FROM df;
"""sqldf.run(query)

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

作者图片

合并两个数据帧

数据集合并包括合并两个数据帧。SQL 是一种非常强大的方法,可以毫无困难地合并数据集。

联盟

两个数据帧之间的联合操作的结果包含两个数据集的所有行。为了执行 union,我加载了一个额外的数据帧df2,称为capitals2.,它与前面的类似。附加数据帧df2仅包含一个与df重叠的行。

df2 = pd.read_csv('../../Datasets/capitals2.csv')
df2.head(len(df2))

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

作者图片

两个数据帧的联合可以通过以下查询实现:

query = """
SELECT Country, Capital, Value 
FROM df
UNION
SELECT Country, Capital, Value 
FROM df2
ORDER BY Value DESC
"""sqldf.run(query)

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

作者图片

请注意,union 操作已经删除了重复项。

交集

两个数据帧的交集只包含两个数据帧中包含的行。在 SQL 中,可以通过INNER JOIN操作进行交集:

query = """
SELECT *
FROM df
INNER JOIN df2
  ON df.Country = df2.Country AND df.Capital = df2.Capital;
"""sqldf.run(query)

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

作者图片

摘要

在本教程中,我展示了一些在 Pandas 数据帧上运行 SQL 查询的技巧。我只描述了一些查询的例子,但是你的幻想将比我的更有创造性!

本教程的完整代码可以从我的 Github 库下载。

如果你想了解我的研究和其他活动的最新情况,你可以在 TwitterYoutubeGithub 上关注我。

相关文章

https://medium.com/geekculture/the-top-25-python-libraries-for-data-science-71c0eb58723d

如何在几分钟内绘制出新冠肺炎在全球的传播图

原文:https://towardsdatascience.com/how-to-map-the-spread-of-covid-19-globally-in-minutes-baa2e18d25e5?source=collection_archive---------55-----------------------

使用 BigQuery GeoViz 在 20 分钟内实现数据可视化

使用 BigQuery GeoViz 快速可视化新冠肺炎感染的指南

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

Unsplash摄影拍摄的照片

介绍

一张图胜过千言万语。请原谅这里的陈词滥调,但是没有什么时候比当你试图向非技术观众阐述数据发现时更重要了。许多人不希望看到一页塞满了数字。简洁的数据视觉效果可能是让你的观点被理解的区别,也可能是让你的听众厌倦和茫然的凝视的区别。

在这篇文章中,我将向你展示如何使用 Google BigQuerie 的 GeoViz 工具来可视化新冠肺炎的全球传播。这种类型的可视化可以用多种方式来完成,我发现 GeoViz 既快又直观。

在这篇文章结束时,你将已经创建了一个地图,显示了过去 7 天全球新新冠肺炎感染情况。

数据

我们将使用通过 BigQuery 的公共数据集程序获得的新冠肺炎公共数据集。这些数据集可以免费使用,涵盖了从医疗保健到金融的各种行业。谷歌已经将新冠肺炎的数据在短时间内免费提供给 BigQuery 进行访问和分析,以帮助研究

先决条件!

在构建数据可视化之前,您需要做两件事…

  1. 你需要在谷歌云平台(GCP)上开一个账户。您可以从这里免费开始使用
  2. 您需要创建一个项目。你可以通过遵循这些指南来做到这一点。重要!请记下你的项目 ID,你将需要它来生成你的可视化。

好了,让我们开始吧!

步骤 1:设置您的 BigQuery GeoViz 环境

从 GCP 仪表板导航到 Google BigQuery ,打开 BigQuery 控制台。

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

作者图片

资源下,导航到big query-public-data>covid 19 _ open _ data _ eu,打开 covid19_open_data 。您将看到一个数据集,您可以通过按下预览进行浏览。

点击位于 BiGQuery 控制台右侧的导出,然后点击使用 GeoViz 进行浏览

这将在浏览器的新窗口中打开 GeoViz studio。点击授权按钮,按照步骤完成必要的权限授予。您需要这样做,以允许 GeoViz 在 Google BigQuery 中查看和管理您的数据。

一旦你这样做了,导航回 GeoViz 工作室。在查询下输入你的项目 ID。

第二步:产生你的观想

在您的项目 ID 下的空白处,输入以下 SQL 查询:

SELECT
    country_name,
    subregion1_name,
    subregion2_name,
    ST_GeogPoint(longitude, latitude) AS WKT,
    sum(new_confirmed) as  New_Confirmed_Cases
  FROM 
    `bigquery-public-data.covid19_open_data_eu.covid19_open_data` 
  WHERE 
    date BETWEEN DATE_ADD(CURRENT_DATE(), INTERVAL -7 DAY) AND CURRENT_DATE() AND
    new_confirmed IS NOT NULL AND
    subregion1_name IS NOT NULL AND
    subregion2_name IS NOT NULL
  GROUP BY 
   country_name, subregion1_name, subregion2_name, longitude, latitude

该查询汇总了自运行之日起最近 7 天内所有新确诊的新冠肺炎病例。它跨越由经度和纬度定义的空间点来实现这一点。输入查询后,点击运行。点击显示结果可以看到结果。

当你满意时,导航到样式来改变图上点的外观。您可以编辑样式,以便给定点反映它所代表的数据。例如,较大的点表示较高数量的新冠肺炎病例。

下面的图片是帮助你编辑风格的指南。摆弄设置,直到你找到你喜欢的东西。一旦你满意点击应用样式,你可能需要通过放大来调整你的地图的分辨率,但是你应该有一个工作的可视化。

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

作者图片

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

作者图片

如果我的指示已经很清楚了,你应该有一个类似这样的地图:

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

作者图片

这是我之前准备的。它是交互式的,所以你可以点击每一个点来深入了解新冠肺炎在任何地方的感染情况。

https://www.linkedin.com/in/john-adeojo/

如何大量识别重复出现的文本特征

原文:https://towardsdatascience.com/how-to-mass-identify-recurring-textual-features-e3e98c4b0309?source=collection_archive---------18-----------------------

当你为西班牙语、英语等培训一名 NER 模特时,要知道你真正在做什么。使用空间

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

图片作者。

假设你有一堆短信。文本中有人名、地名、组织、日期、职位等。我们称这些实体为一般实体。通过阅读,你可以知道哪些单词组(记号)代表了每个实体,但是你不希望自己去识别所有的单词,尤其是当你有成百上千的页面需要浏览的时候。这根本不是对你时间的有效利用。

命名实体识别(NER): 一种识别代表特定实体(如个人、组织、品牌、地点)的词组的方法。

你可以使用现成的模型,比如 spaCy ,它有一个优秀的英语 NER 模型,但是对于其他语言(在我的用例中是哥伦比亚西班牙语)并不十分准确。该模型未能识别我所关心的实体。如果您在寻找使用不太流行的语言的小众实体,可能会遇到同样的问题。

这篇文章是为你写的,如果你:

  • 有原始文本可以处理
  • 当前 NER 模型的精确度越来越低
  • 是一个完全的初学者与培训 ner 模型

这是我发现的改进 spaCy 现有 NER 模型的最省时、最有利于协作的方法。如果你正在和一个不是特别懂技术的人一起做一个数字人文(或任何)项目,这个工作流程会有所帮助。

在你们任何一个人开始模特训练冒险之前,我应该先回答你们脑海中的第一个问题:

这会有多难?

你要知道的第一件事是,训练一个模特是耗时又繁琐的。你投入的时间大约与你得到的准确度成正比。这就是为什么普通实体的英语模型更准确——它们有更多的训练数据。

简单地说,训练数据告诉模型什么定义了一个实体。你在一个文本块中标注了成百上千、上百万个实体,模型根据机器学习(ML)算法选择模式(关于这一点的更多信息,请参见另一篇文章)。您提供的训练数据的数量和种类越多,ML 算法就越能准确地识别这些模式。

给 1,069 个实体做标记花了我大约 4 个小时,因为我对西班牙语只有基本的了解,对哥伦比亚也不熟悉。这些数据够吗?这取决于:

  • 期望的精度水平(你愿意接受模型的什么样的误差水平?)
  • 你的模型的复杂性(你是在寻找特定的东西还是计算机难以识别的东西?)
  • 现有数据量(您是在优化模型还是从头开始训练模型?)
  • 你的训练数据的质量(是否有各种各样的文本?这些单词出现在不同的上下文中吗?)

最终,一个经验的测试方法是使用测试数据来验证你的结果,我将在下面解释。

第二件事是编码技巧。如果你对 Python 有一个的基本了解,我相信这个指南会被证明是容易理解的。老实说,如果您不习惯使用 terminal 和 spaCy,这需要一点时间来适应,但是花一个小时来做这个设置,只会变得更容易。让我们开始吧!

设置 NER 注释器

Arunmozhi 创造了我发现的最方便的 tagger。下载文件并将其解压缩到一个方便的位置,如 Documents 文件夹。

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

点击链接https://github.com/tecoholic/ner-annotator下载 zip。图片作者。

然后,我们将遵循 GitHub 上给出的说明,但我会提供更多考虑到使用终端的初级经验的详细指导。(一开始我真的很反对学习使用终端,但是几次之后,我发现它并没有那么糟糕!不要让这个影响你。)

  1. 打开命令提示符/终端
  2. *建立虚拟环境。*使用cd Documents/ner-annotator-main导航至包含该程序的文件夹。cd代表更改目录,并告诉终端您希望它查找的位置。
  3. 使用python -m venv env在 Python 上创建虚拟环境。你应该在ner-annotator-main文件夹中看到一个名为env的文件夹。
  4. *激活虚拟环境。*我们想导航到activate文件。根据您的操作系统,您需要查看env中的文件夹,看看它在哪里。例如,在使用 Windows 时,我在终端输入了env\Scripts\activate
  5. 下载依赖关系。这些都是程序需要的库和文件,写在主文件夹的文本文件中。在终端中键入pip install -r requirements.txt
  6. 运行你的后端服务器。键入python annotator/server.py进入端子。
  7. 打开另一个终端启动另一个服务器。导航到ui文件夹。你可以输入cd Documents\ner-annotator-main\ui
  8. yarn install将下载软件包管理器,它将处理 tagger 程序的前端。
  9. yarn serve将启动程序。
  10. 在浏览器中打开 http://localhost:8080 打开 tagger。

**虚拟环境:**电脑上的隔离空间,用于下载特定程序所需的所有文件,而不会与其他程序所需的文件发生冲突。

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

完成第 5 步后,您的终端应该是这样的。图片作者。

厉害!下次运行时,您只需执行步骤 4、6、7、9 和 10。

我们来列举一些实体吧!

上传完你的。txt 文件,您可以开始标记,但您应该等待一秒钟。首先,你需要确定你想要什么标签,以及加入每个标签俱乐部的标准。你不想回去重做所有的标签!

以下是一些你应该考虑的问题:

  1. 你有兴趣提取什么信息?
  2. 哪些令牌可能难以标记?例如,“联合国日内瓦会议”会被认为是属于“组织”或“地点”或“事件”的标签吗?记住:你不能双重标记一个实体!

完成后,您的注释将保存在一个. json 文件中。

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

标记单词的外观示例。图片来自 Arunmozhi

培训 NER 模型

将训练数据加载到 Python 中。

import json
with open('training_data.json', 'r') as f:
  DATA = json.load(f)["annotations"]

分离出 20%的数据作为你的测试数据,这样我们就可以验证更新后的 NER 模型有多准确。只要你有足够的数据进行测试,你可以随意改变百分比。

import numpy as np
N = len(DATA)# Randomly select 20% of the data for testing
test_idx = np.random.randint(N, size=N//5)
TEST_DATA = np.array(DATA)[test_idx].tolist()# Leave the remaining 80% as training data
train_idx = list(set(np.arange(N))-set(test_idx))
TRAIN_DATA = np.array(DATA)[train_idx].tolist()

我从 Shrivarsheni 的文章中学习了如何实现 spaCy 培训管道,所以请阅读它以了解更多细节!我确实纠正了他的一些不适合我的代码,所以希望这个补充对你有帮助。

本质上,下面的代码建立在 spaCy 的 NER 模型上,并更新了令牌的方式:

  1. trf_wordpiecer:已定义
  2. trf_tok2vec:转换成矢量(数值表示)
  3. ner:已标记

根据你的训练数据。

# Load pre-existing spacy model
pip install spacy # Download the package if you haven't
import spacy
nlp=spacy.load('en_core_web_sm') # Spanish

# Getting the pipeline component
ner=nlp.get_pipe("ner")# Disable pipeline components you dont need to change
pipe_exceptions = ["ner", "trf_wordpiecer", "trf_tok2vec"]
unaffected_pipes = [pipe for pipe in nlp.pipe_names if pipe not in pipe_exceptions]# Import requirements
import random
from spacy.util import minibatch, compounding
from pathlib import Path
from spacy.training.example import Example# TRAINING THE MODEL
with nlp.disable_pipes(*unaffected_pipes):
  # Training for 30 iterations
  for iteration in range(30):
    # shuffling examples  before every iteration
    random.shuffle(TRAIN_DATA)
    losses = {}
    # batch up the examples using spaCy's minibatch
    batches = minibatch(TRAIN_DATA, size=compounding(4.0, 32.0, 1.001))
    for batch in batches:
      for text, annotations in batch:
        # create Example
        doc = nlp.make_doc(text)
        example = Example.from_dict(doc, annotations)
        nlp.update(
                 [example],
                 drop=0.5, # dropout - make it harder to memorise data
                 losses=losses,
                 )
print("Losses", losses)

损失是底层神经网络用来确定模型在 NER 表现如何的指标。在另一篇文章中有更多关于这方面的内容!目前,最重要的是模型的目标是将损失最小化。

模型表现如何?

毕竟,我们希望 NER 模型可以帮助大规模识别所需的实体。这一步有助于确定我们对模型获得正确标签的能力有多大的信心。

from spacy.scorer import Scorer
from spacy.tokens import Docdef evaluate(ner_model, examples):
  scorer = Scorer()
  example = []
  for input_, annot in examples:
    pred = ner_model(input_)
    temp = Example.from_dict(pred, annot)
    example.append(temp)
    scores = scorer.score(example)
  return scoresresults = evaluate(nlp, TEST_DATA)
print(results)# Calculate sample size
from collections import Counter
ent = []
for x in TEST_DATA:
  ent += [i[-1] for i in x[1]['entities']]
print(Counter(ent))

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

我自己测试数据的结果。

精度显示所有标记的实体中有多少实体被正确标记。它显示了模型在辨别哪些实体属于某个标签时是多么敏感。回忆显示基于实际的标签,我们做了多少正确的。它显示了模型在挑选与标签相关的实体方面有多好。

例如,在带有“位置”标签的 60 个实体中,NER 模型正确地标记了其中的 84.2%(召回)。精确地说,在所有用“位置”标记的实体中,只有 43.2%的实体有“位置”标记。

如示例所示,在一项指标上得分极高,而在另一项上却没有,这是一个不好的迹象。该模型在“位置”标签的精确度上得分很低,因为它无法区分不同的标签,即使它有相对较高的召回分数。以此类推,由于模型发射了更多的子弹,更多的子弹可能会落在正确的目标上,即使许多子弹没有击中。

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

只有两个类别(标签)的 F-1 分数公式。

我们使用 F 分数来平衡这些指标,F 分数是在只有两种标签的情况下由上面的公式给出的。在多类分类中,如在 NER 模型中,分数根据大小对每个标签进行加权,并在所有标签中取平均值。当精度和召回率为零时,最低分为 0,这意味着所有东西都被错误标记。当精确度和召回率完美时,最高分是 1,这意味着一切都被正确标记。

总而言之,我的更新模型在确定所有“日期”方面做得非常好,但在所有其他标签方面做得很差,只捕捉到了大约一半。

使用模型

恭喜你!所有的努力都有了回报。现在您可以保存您的模型,并在您的下一个项目中使用它。

# Save the  model to directory
output_dir = Path('/content/')
nlp.to_disk(output_dir)# Use the model
output_dir = Path('/content/')
nlp = spacy.load(output_dir)

我们可以做得更好!!(改进模型)

对于不精通技术的人来说,设置 NER 注释器可能具有挑战性。这里有一个(尽管有点不完美)方法,通过使用 Google Sheets 的更多协作来添加更多的训练数据。

  1. 创建一个带有“实体”和“标签”列的谷歌表
  2. 将数据验证添加到“标签”列,这样所有标签将统一显示
  3. 按照这篇 TDS 文章中的说明访问电子表格数据。
  4. 当将table转换成熊猫数据帧时,使用train_df = pd.DataFrame(table[1:], columns=table[0])
  5. 然后用下面的代码将它添加到您的训练数据中。
# Add training data from Google Sheets
for i in train_df.index:
  TRAIN_DATA.append([
      train_df.ENTITY[i],
      {
        'entities': [
          [0, len(train_df.ENTITY[i]), train_df.TAG[i]]
        ]
      }])

现在,你可以与你的项目合作伙伴分享谷歌表单,以纠正他们在 NER 模型中看到的错误,并且你可以将正确的标记硬编码到模型中。

然而,这种强力方法的主要缺陷是它没有包含单词嵌入。该模型基于句子或段落中的上下文来确定哪个字符序列是标记,以及哪个标记属于哪个标签。当我们按原样将令牌输入到模型中时,它并不知道令牌在不同的上下文中会如何变化。

然而,我希望这篇文章已经给了你一个训练你自己的 NER 模型的起点!我还希望理解 NLP 模型令人眼花缭乱的背后的困难,能够更好地理解这些刻板模型中的工作。

如果你知道一个更省时和/或协作友好的方法来训练 NER 模型,我很乐意学习更多!

注意:这篇文章并没有深入到 spaCy 所做的所有酷的幕后工作。我想在另一篇文章中公正地阐述这些概念,所以请密切关注!

如何掌握熊猫进行数据科学

原文:https://towardsdatascience.com/how-to-master-pandas-for-data-science-b8ab0a9b1042?source=collection_archive---------0-----------------------

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

使用来自 envato elementsmir_design 的图像创建(经许可)。

入门

这是数据科学需要的基本熊猫

Pandas 是一个开源的 Python 库,允许处理表格数据(探索、清理和处理)。该术语源于计量经济学术语 panel data 并由此产生**PAN(**El)-**DA(**ta)-S

在高层次上,Pandas 在处理行和列时非常像一个电子表格(比如 Microsoft Excel 或 Google Sheets)。Pandas 是任何数据科学工作流的支柱库之一,因为它允许您执行数据的处理、争论和管理。这一点尤为重要,因为许多人认为数据预处理阶段占据了数据科学家 80%的时间。

在本文中,我们将探索掌握 Pandas 所需的基本知识,以便开始学习数据科学。正如您将看到的,Pandas 是一个功能丰富的库,甚至整个 Pandas 文档 都可能是一个挑战,因为它多达 3411 页(在撰写本文时)!

1.对数据争论的需求

George Fuechsel 在计算机科学和软件工程中经常使用的一个流行短语是:

“垃圾进,垃圾出。”

—乔治·富希塞尔,IBM 程序员

它明确指出,无论一个程序有多好,如果输入的质量很差,生成的输出将是不相关的。这在数据科学中有很好的通用性,因为模型只有在给出它的输入数据的情况下才是好的。因此,数据清理有助于以这样一种方式处理数据,即数据中没有丢失的值,数据结构和值具有一致性,等等。

简而言之,如果您正在处理表格数据,那么 Pandas 就是您处理数据所需的首选库。

2.我们为什么需要熊猫?

下图总结了数据科学生命周期的典型工作流程。

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

数据科学生命周期。作者绘制。

一旦收集了数据,它们可能会存储在单独的数据库中,并且必须检索来自异构数据源的这些数据的汇编,以便在数据科学项目中使用。数据科学项目中的大部分工作可能会花费在数据清理阶段以及探索性数据分析上,因为这两个阶段都有助于提供高质量的数据集(即,在密集的数据清理之后)并提供对数据的高级理解,这是制定假设的良好起点,随后可以通过探索性数据分析以及机器学习模型构建来验证假设。

Pandas 库具有大量功能,允许您执行从原始数据的第一次输入、清理和转换到最终整理形式的任务,以便产生高质量的数据(即,希望没有缺失值和错误),通过探索性数据分析和机器学习进行进一步的假设测试和验证。

3.熊猫基础知识

3.1.熊猫物品

熊猫允许我们使用表格数据集。让我们来看看熊猫的基本数据结构,它由以下三种类型组成(,前两种是数据结构,后者作为参考点):

  1. 系列
  2. 数据帧
  3. 索引

在下图中,我总结了熊猫数据结构的基本结构。简而言之,您将看到熊猫数据帧和熊猫系列被标记为数据(,即,它有行名和列名)。您还会看到,Pandas DataFrame 是 Pandas 系列的集合(单独的列和行)。

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

熊猫数据结构剖析。作者绘制。

3.2.系列

熊猫 系列 是一个一维数组,与 NumPy 数组非常相似,但具有标记功能(轴标签或也称为 索引 )。一个系列可以容纳一个整数、浮点数、字符串、python 对象等。在高层次上,可以将系列视为 Microsoft Excel 中的一列。

3.3.数据帧

一只熊猫 DataFrame 是一个二维数组。在高层次上,数据帧可以被认为是 Microsoft Excel 中的电子表格(M×N 矩阵,其中 M 表示行,N 表示列)。

3.4.索引

Pandas 中的 索引 是 Series 和 DataFrame 对象的固有属性,用作关于对哪些行和/或列执行操作(即对于 DataFrame)或对 Series 中的特定元素执行操作的参考点。默认情况下,Pandas 自动分配从 0 开始的索引号来表示行号或列号(如果没有明确定义)。

索引有两个主要特征:(1)是一个不可变的数组,(2)是一个有序的集合。

**3.4.1。不变

简单地说,不可变意味着我们不能通过简单的赋值(像我们对数据帧的任何其他行所做的那样)来轻易地修改索引值,如下所示

index_value = pd.Index([0,1,2,3,4,5])
index_value[0] = 10

这将产生一个错误:

TypeError: Index does not support mutable operations

这样做的好处是,我们可以放心,索引将在编码过程中保持完整。然而,如果我们想给索引命名,可以通过pd.Index.rename()函数来完成。

3 . 4 . 2。数组**

作为一个数组,我们可以通过执行简单的切片来检索索引中的特定值,如下所示:

index_value = pd.Index([0,1,2,3,4,5])
index_value[0]

这将提供:

0

3 . 4 . 3

Pandas 索引的工作方式非常类似于set数据结构,允许您对其应用集合操作。还记得我之前提到的索引可以作为你的系列和数据框架的参考点吗?

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

作为集合索引。作者绘制。

因此,您可以根据索引比较和连接(交集、并集、差集、对称差集、连接和追加)Pandas 系列和 DataFrame。

例如,您可以利用 Pandas index 来找出 2 个系列或 2 个数据帧之间哪些元素是相同的,哪些是不同的。还在迷茫?一个很好的例子是维恩图,它允许你检索前一句中提到的相同或不同的元素。

4.熊猫的使用案例

在这一节中,我们将从较高的层面来了解 Pandas 提供的一些功能,您可以将这些功能用于您的数据科学项目。

简而言之,这里列出了您可以使用 Pandas 执行的常见任务:

  • 创建数据对象
  • 加载和保存数据
  • 数据检查
  • 缺失数据
  • 索引、选择、添加、修改和删除数据
  • 数据过滤
  • 合并和联接数据
  • 重塑和透视数据
  • 分组数据
  • 排序数据
  • 汇总统计数据
  • 数据可视化
  • 时序数据
  • 字符串和分类数据

4.1.探索性数据分析的熊猫

现在让我们来看看熊猫在进行典型的探索性数据分析(EDA)。

本质上,EDA 让我们在被分析的数据集的高层次上有一个总体的理解。这可能有助于我们提出假设,以便在后续的统计分析和机器学习模型构建工作中进行探索(见下一节)。

  • 从 CSV 文件(pd.read_csv())加载数据。将其赋给一个变量,比如df
  • 通过df.shape查看数据的维度大小。
  • 通过df.head()df.tail()浏览数据的前几行或后几行,以获得数据的要点(我们有哪些变量及其数据类型,如分类或数值)。
  • 查找缺失值(,即pd.isna(df))。决定是删除缺失值还是估算缺失值(用 0 等任意值替换或用列的平均值或中值替换)。
  • 计算汇总统计(例如最小值、最大值、平均值、中值、标准差等)。)通过df.describe()对整个数据或分层数据(,即根据特定标准对数据进行分组,然后计算汇总统计数据;*例如:*通过如下所示的 groupby 函数,按类别标签对数据进行分组,并为每个类别计算汇总统计数据:df.groupby('name_of_variable_used_as_criteria').describe()
  • 创建一些基本的数据可视化(,如条形图,箱线图,热图,直方图等。)用于整个数据或通过df.plot.bar()功能用于分层数据。
  • 写一份报告,总结我们从这次 EDA 分析中获得的一些初步发现和见解。这也将帮助我们弄清楚正在分析的数据是否足够,或者我们是否需要收集额外的数据。

4.2.熊猫是统计分析和机器学习的先驱

如前所述,从 EDA 分析中获得的一些初步见解是一个很好的起点,可以帮助我们为更深入的统计分析和机器学习模型构建指明正确的方向。

统计分析可能需要对数据的不同子集进行比较,这些子集可能是先前通过经由 Pandas 执行 groupby 操作而获得的。Python 中一个流行的统计包是 statsmodels 库,还有一个新兴的非常健壮的库叫做 pingouin ,我在我的 YouTube 频道上的视频 中回顾了如何使用 Pengouin 库 在 Python 中轻松执行统计分析。

现在让我们来看看熊猫如何帮助我们建立机器学习模型。

  • 从 CSV 文件(pd.read_csv())加载数据。
  • 通过df.shape查看数据的维度大小。
  • 通过df.head()df.tail()功能检查第一行或最后几行来检查数据。
  • 寻找丢失的值(,即通过pd.isna(df))。决定是删除缺失值还是估算缺失值(用 0 等任意值替换或用列的平均值或中值替换)。
  • 将内容从df分配到XY变量,以便为通过 scikit-learn 库建立模型做准备。这可以按如下所示执行:
X = df.drop(['Y_variable'], axis=1)
Y = df['Y_variable]
  • 然后将XY变量用作 scikit-learn 库的输入数据,用于如下数据分割:
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=42)
  • 然后,通过随机森林,在生成的训练和测试数据上训练机器学习模型,随后评估它们的模型性能度量,如下所示:
from sklearn.ensemble import RandomForestClassifier*# 1\. Define classifier*
rf = RandomForestClassifier(n_estimators=10)*# 2\. Train model* rf.fit(X_train, y_train)

*# 3\. Make predictions*
y_train_pred = rf.predict(X_train)
y_test_pred = rf.predict(X_test)

*# 4\. Training set performance**# 4.1\. Calculate Accuracy*
rf_train_accuracy = accuracy_score(y_train, y_train_pred) *# 4.2\. Calculate MCC*
rf_train_mcc = matthews_corrcoef(y_train, y_train_pred) *# 4.3\. Calculate F1-score*
rf_train_f1 = f1_score(y_train, y_train_pred, average='weighted') 

*# 5\. Test set performance**# 5.1\. Calculate Accuracy* rf_test_accuracy = accuracy_score(y_test, y_test_pred) *# 5.2\. Calculate MCC* rf_test_mcc = matthews_corrcoef(y_test, y_test_pred)*# Calculate F1-score* rf_test_f1 = f1_score(y_test, y_test_pred, average='weighted')

[## 如何用 Python 构建你的第一个机器学习模型

towardsdatascience.com](/how-to-build-your-first-machine-learning-model-in-python-e70fd1907cdd)

  • 也可以执行超参数调整,以便通过搜索最佳超参数集来提高模型性能。

5.学习资源

5.1.熊猫官方文件

正如在介绍性段落中简要提到的,整个熊猫文档由 3411 页组成。具体来说,文档由 4 部分组成:(1)https://pandas.pydata.org/docs/getting_started/index.html#getting-started,(2) 用户指南 ,(3) API 参考 ,(4) 开发者指南

官方的 Pandas 用户指南 提供了一个全面的文档,其中有大量的例子来解释每个功能是如何使用的。这些用户指南被方便地组合在一起,用于涵盖广泛主题的常见任务。如果你多少知道你想做什么,这是特别有用的。例如,如果你知道你想要更多关于如何在 Pandas 中选择数据的信息,那么你可以阅读关于 索引和选择数据 的指南。

如果你对一个特定的熊猫函数非常清楚,想要更多的信息,你可以深入到 API 文档中。如下图所示,您可以看到pd.concat()函数的所有输入参数,每个参数的含义以及如何使用它的例子。

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

显示感兴趣的特定函数的 API 文档的屏幕截图。

5.2.小抄

下面是一份官方的、伟大的熊猫小抄总结了熊猫的主要功能。这个熊猫小抄的灵感来自于 Rstudio 数据争论小抄。

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

普林斯顿顾问 Irv Lustig 制作的熊猫小抄。

DataQuest 制作的熊猫小抄有网页版和下载版。这些功能按任务方便地分组,如果您大致了解每个任务组或任务允许您做什么,这些功能将允许您快速实施。

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

由 DataQuest 制作的熊猫小抄

DataCamp 还创建了一个熊猫备忘单,总结了所有的功能,也是根据任务分组的。

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

DataCamp 制作的熊猫小抄。

Enthought 不仅在这个 Pandas cheat sheet 中对 Pandas 的功能进行了分组,而且他们还在这个长达 8 页的 cheat sheet 中提供了示意图来帮助理解 Pandas 的各种操作。

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

Enthought 制作的熊猫小抄

5.3.书

下面列出的所有书籍(除了杰克·范德普拉斯的《Python 数据科学手册》)都是关于熊猫的。

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

熊猫方面的书籍推荐。

结论

Pandas 是任何数据科学工作流程中的核心组件。对于一个初学者来说,学习使用熊猫似乎是一项艰巨的任务,因为有大量可用的熊猫功能。希望这篇文章可以作为读者在使用 Pandas 进行数据项目时可以参考的蓝图。

总之,我们对 Pandas 库进行了高层次的概述,考虑了数据争论的重要性,了解了 Pandas 中的基本数据结构,考虑了 Pandas 用于探索性数据分析和机器学习模型构建的用例,并探索了可用的学习资源以了解更多关于 Pandas 的信息。

公开

  • 作为一名亚马逊员工,我可能会从合格购买中获利,这将有助于未来内容的创作。

接下来读这些

✉️ 订阅我的邮件列表,获取我在数据科学方面的最佳更新(偶尔还有免费内容)!

关于我

我是泰国一所研究型大学的生物信息学副教授和数据挖掘和生物医学信息学负责人。在我下班后的时间里,我是一名 YouTuber(又名数据教授)制作关于数据科学的在线视频。在我做的所有教程视频中,我也在 GitHub 上分享 Jupyter 笔记本(数据教授 GitHub 页面)。

*https://www.youtube.com/dataprofessor

在社交网络上与我联系

✅YouTube:http://youtube.com/dataprofessor/
♇网站:http://dataprofessor.org/(在建)
♇LinkedIn:https://www.linkedin.com/company/dataprofessor/
♇Twitter:https://twitter.com/thedataprof/
♇Facebook:http://facebook.com/dataprofessor/
♇github:https://github.com/dataprofessor/
ϝinsta*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值