TowardsDataScience 博客中文翻译 2020(四十二)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

8 款人工智能驱动的创意应用,适合您和您的孩子

原文:https://towardsdatascience.com/8-ai-driven-creative-apps-for-you-and-your-kids-5fdd71407dc4?source=collection_archive---------14-----------------------

新冠肺炎期间你和家人关在一起吗?对整个 AI 宇宙开放。

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

截图:Merzmensch

它不期而至,改变了一切:我们的生活、工作和日常事务。新冠肺炎正以难以想象的方式扰乱我们的世界。现在#SocialDistancing 和#HomeOffice 是热门话题(如果我们必须避免# social distancing,甚至是,尤其是现在)。

你们中的许多人目前在内政部工作。即使你的雇主不允许,你的孩子也必须在家办公。学校停课了,幼儿园也一样。多重任务不是一种技能:它是存在性的。

日冕的积极影响

那么,我们所有的研究和项目、我们的家庭和孩子都处于危险的边缘吗(考虑到潜伏在外面的病毒)?一点也不。尤其是现在。

让我们说一些挑衅性的,但我认为必要的:

感谢科罗纳,我们社会(全球)的平均数字能力即将提高。人们在网上保持联系,孩子们有更多的机会使用数字工具。可能是最后一个曾经对数字化持怀疑态度的人,现在看到了这种存在水平的重要价值。顺便提一下,孩子们:他们现在有一个很好的机会来学习更多关于数字主题,关于在线层,关于人工智能。呆在里面并不意味着被排除在大的外面。

在这篇文章中,我想与你分享一些策略和工具来吸引我们的孩子,启发他们的未来,并创造性地度过锁定期。一起。

人工智能和孩子:一个爆炸性的组合。一个用例。

去年夏天,我和女儿(当时 7 岁)决定在 AI 的帮助下做一个小本子。我们用 GPT-2 写了几个童话故事,她亲手画了插图。到那时,我用 TalkToTransformer.com 的进行文本生成。这是我们得到的。(我们对这个故事的提示是“ 一个国王想要飞 ”)

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

插图来自书“世界的开始”(仍未出版),由索菲亚,7

****A king wanted to fly.** His plane would come."You guys are not coming, so let him fly."The pilot stared at that in the mirror, his eyes wide. His eyes were wide and bloodshot. His back was flat against the wall."Get him through."He looked down. It was true, the door had been opened from the inside. An enormous fist from above."What are you doing now?"And the door opened.In the middle of the room, there was a girl. In a green striped dress that was very short, her hair was short and her eyes were wide as well, her eyes were blue as well.She was young, but very ugly. Her lips were a pale yellow and there weren't any teeth here.No!Hundred-year-old!He stared at her for a long time, then smiled."Gee, you look like a normal child and can't help but laugh, I guess.""How old are you, then?"She looked at him, the young girl's mouth dropped slightly, which was not the right expression to say."Five.""Five?"A hundred!**

这个故事很有趣。我的女儿对人工智能作为一种创作工具产生了兴趣——我们开始了我们的人工智能和艺术之旅。

几个月后,我很高兴地读到了贾森·布谷写的这篇美丽而鼓舞人心的文章,这篇文章是关于将纸工艺品和人工智能(GPT-2 和比根)结合起来,增加孩子们的数字技能、乐趣和创造力。

**** [## 帮助孩子们玩人工智能

老派杂志可以教孩子们尖端技能

towardsdatascience.com](/helping-kids-play-with-artificial-intelligence-68af8f8ba280)

因此,让我们收集和分享基于人工智能的创意工具,提高数字能力,并为我们的孩子带来额外的价值——乐趣。****

与您的孩子一起尝试基于人工智能的创意工具。

讲故事

去年 OpenAI 发布的模型GPT-2,对自然语言处理产生了重大影响。与此同时,整个 1.5b 版本已经推出。在 40 Gb 文本上训练,它在叙事质量上令人信服。(当然还有 谷歌 BERT ,但如果你在寻找混乱但一致的小说,GPT-2 是 IMHO 方式有趣)。

GPT-2 的一个有趣而重要的方面是变压器驱动的算法自我关注:文本生成与第一个人类提示对齐——然后在自身内部保持一致。所以你可以控制最初的倾向或者把注意力放在文本上(文本逐渐变得复杂)。**

有许多方法可以使用 GPT-2。我推荐用两个。在这些情况下,它是原始模型,而不是在其他来源上训练的。

01。与变形金刚对话

最直观的实现就是TalkToTransformer.com,由亚当·金提供。你所要做的就是输入第一句话或一些单词——然后模型继续。

感谢自我关注,你可以,比如,唤起一个童话时代的写作,“从前有一个国王”。

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

TalkToTransformer.com生成的具有一个提示的各种文本。Merzmensch 截图。

如你所见,结果可能是滑稽的、超现实的、荒谬的,但也有亵渎的危险。如果这对你来说不成问题,你可以和孩子们一起创造。当然,你可以为你的合作写作“策划”文本。

****优点:

易于使用已经有一些预置可用
系统实现了整个 1.5b 型号
快速可用,甚至可以通过手机使用****

对比:
(实际上只有一个:)它只生成简短的文本片段

02。GPT-2 Colab 笔记本

如果你想给你的孩子关于 Python 的第一印象——以及关于 GPT-2 如何工作的背景,使用 Colab 笔记本(我的一般建议— 有这么多精彩的 Colab 笔记本)。

还有各种各样的 GPT-2 的笔记本电脑。但是我建议试试这个实现:带 JavaScript 接口的 GPT-2

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

文本,由 GPT-2 笔记本生成。截图:Merzmensch

我喜欢这种实现的原因是:

  • 您可以修改文本长度和其他参数。
  • 如果你有 Google-GPU 的运气,你甚至会得到 1.5b 参数的整个模型(就像上面的截图)
  • 与其他实现相比,Java 接口是直观的(考虑到你的孩子想玩 GPT-2)。
**To parameters (according to definitions by GitHub folk):**temperature:** Float value controlling randomness in boltzmann distribution. Lower temperature results in less random completions. As the temperature approaches zero, the model will become deterministic and repetitive. Higher temperature results in more random completions.
**top_k:** Integer value controlling diversity. 1 means only 1 word is considered for each step (token), resulting in deterministic completions, while 40 means 40 words are considered at each step. 0 is a special setting meaning no restrictions. 40 generally is a good value.Source: 
[https://github.com/openai/gpt-2/issues/27](https://github.com/openai/gpt-2/issues/27)**

我的收藏设置:
温度 = 0.9,
top_k = 80,
生成多少 = 1000

****优点:

易于使用;可以使用更长的连贯文本(自我关注机制!)
系统实现各种模型,包括 1.5b 参数
更多修改参数的可能性****

对比:
【初始化和文本生成需要时间
较大的模型可能会产生突然的亵渎和其他奇怪的东西,可能不适合您的孩子。你无法控制结果。

语言障碍?假设你的孩子母语不是英语——这不是问题。您可以使用 DL 驱动的翻译服务 Deepl.com,并将其翻译成您的语言:

**** [## DeepL 翻译器

科技巨头谷歌、微软和脸书都在将机器学习的经验应用到翻译中,但是一个小的…

www.deepl.com](https://www.deepl.com/translator)

当然,你甚至可以使用亚马逊 AWS Polly 服务(目前有大约 30 种语言可用),让人工智能用多种语言大声朗读故事:****

画一幅画

03.Pix2Pix

已经一年了,但仍然是由Zaid Alyafeai(GitHub)进行的迷人实验:Image2Image 翻译的 TensorFlow 实现。

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

Pix2Pix 演示,来源:github.com/zaidalyafeai

我不需要把 Pix2Pix 介绍给你亲爱的数据科学观众,因为它已经在这里得到了很好的检验。它使用模式识别将涂鸦转化为图像,并在特定的数据集上接受训练。

这个基于网络的应用提供了一个孩子友好的界面,有输入输出窗口和各种预先训练好的模型:猫、门面、口袋妖怪等等。

画个口袋妖怪怎么样?

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

一些口袋妖怪,是我女儿画的。截图:Merzmensch

****优点:

易于使用 pix2pix 作为最相关的模型之一的体验
体验乐趣****

对比:
大概没什么

04.高根

这一个达到了另一个层次。我打赌你的孩子会对 GauGAN 上瘾。这个由 NVidia AI Lab 提供的基于 GAN 的实现,将分割图转换为照片级真实感图像。

分割图通过颜色来区分,并归属于各种材质和内容:天空、云、树木、建筑物等。

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

左边的分割图:女儿涂鸦的。右图由 GauGAN 实时处理。截图:Merzmensch。

如果你使用平板电脑,或者在我的情况下,它是笔记本电脑的触摸屏,你的孩子可以用手(而不是鼠标)画画。触觉体验!

在各种型号上也有大量的风格转换预设。创意遇上惊喜=这是你孩子的天堂。你也可以顺便给你的孩子解释一下图像分割的原理。

以下是 GauGAN 的演示:

****优点:

易于使用
实验视野宽广
几十个分段和预设****

对比:
(…还在找一些不好的地方…)

05.给你孩子的画上色。

你的孩子当然也喜欢用完全模拟的方式(用铅笔在纸上)画画。让 AI 给你孩子的作品上色怎么样?

有各种各样的着色实现。其中之一就是 Petalica Paint ,原名 PaintsChainer ,由日本在线艺术家社区 Pixiv 提供。

你可以用工具画画或者上传你孩子的草图。原始文件的质量并不重要。我用智能手机拍摄了我女儿的素描。这是我在不同模式下得到的结果:

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

我女儿的涂鸦,还有人工智能着色的版本。截图:Merzmensch

或者这个:

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

我女儿画的素描,还有人工智能上色的版本。截图:Merzmensch

如你所见,即使是你的孩子画的抽象画也可以用令人惊讶的方式着色。

****优点:

总是出人意料,甚至支持抽象涂鸦****

对比:
【缺少以前版本的 3D 效果

再造一个童话!

06.比根。

老好人 BigGAN 正在用这款 Colab 笔记本稳定工作。你可以生成东西,也可以享受种子间的插值(我写的更多的是 BigGAN插值)。

和你的孩子一起重现变形和转变的童话故事怎么样?

灰姑娘,有人吗?

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

比根插值。截图 ty Merzmensch

午夜时分,马车变成了——好吧,数据集中没有南瓜,但我希望花椰菜会通过。

还是青蛙来个王子

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

牛蛙(#30) = >温莎领带(#906)。截图:Merzmensch

你还知道哪种变形?

****优点:

为您的孩子提供完美的甘视觉演示
使用有趣
重要方法****

****对比:

有限的预训练类别选择低分辨率(因为已经是历史)****

建立一个新世界。

07.艺术育种家

肯定,艺术培育者。毫无疑问,你已经读过我对这个基于 StyleGAN 的工具集的更长描述,由乔尔·西蒙实现。

你可以创造奇迹。角色生成为你的合作故事?

她你去:一张脸代

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

艺术育种家。截图:Merzmensch

你的世界需要设定吗?使用风景生成

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

艺术育种家。截图:Merzmensch

你也可以生成一个全身的角色(注意:因为 Artbreeder 支持全身的服装,如果你尽量少穿衣服,工作会变得不安全,如果你明白我的意思的话)。

Artbreeder 也非常适合 BigGAN 插值函数,但是具有更多可能性和种子。

因此,如果你想穿越书店、飞船和大灰猫头鹰,你可以循序渐进:

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

截图来自 Merzmensch 的 Artbreeder

现在你和你的孩子可以进行各种不可组合的实验——很有趣,可能是你疯狂童话的一部分。艺术育种界面是用户友好的,你的孩子会很快适应自己。

优点:
【图像生成的多种可能性】
每个模型都有大量的参数可以修改
结果质量惊人

对比:
还不是 StyleGAN2(等待)
“全身人物”的情况下:可以是 NSFW

赋予角色生命

08.一阶运动模型。

现在你的孩子将需要你的帮助,因为这个模型可以通过 Colab 笔记本操作。(提示:RunwayML 也支持它)

aliak sandr Siarohin(等人)的一阶运动模型将视频镜头中的运动数据转换为单张照片。在这种情况下,你可以像我对妮芙缇一样制作脸部动画:

有各种各样的 Colab 笔记本,我推荐这款经过 Bomze 优化的:

而且已经有了孩子和人工智能合作动画的完美样本。

来自创意视觉工作室的数字艺术家 Mar Canet 用他的女儿和第一个动作顺序模型做实验。他们取得了惊人的成绩:

现在想象用动画角色制作一个童话故事(原始的面部镜头可以由你或你的孩子录制并转换)。

优点:
独特的可能性来制作一个小孩画的涂鸦脸。

对比:
并非所有视频格式都可用
Colab 笔记本不可避免(RunwayML 中的这款机型仍有问题)

09.顺便说一下,RunwayML。

如果这还不够——你只需要看看 RunwayML —大量的模型(文本、图像生成、视频、网络摄像头等。).选择是如此之多(并且还在不断增加),以至于它值得一篇特别的大文章。我这就去!

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

你知道其他适合孩子的创造性人工智能应用吗?

你如何与你的孩子度过隔离时间(关于数据科学?)

初级数据科学家追求的 8 条职业道路

原文:https://towardsdatascience.com/8-career-paths-for-junior-data-scientists-to-pursue-3e6041950e4e?source=collection_archive---------36-----------------------

数据科学家的职业发展战略

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

资料来源:Freepik

你终于实现了自己的目标,成为了一家自己喜欢的公司的数据科学家。您成功入职,并开始将您的数据科学技能转化为公司的商业价值。在最初的六个月,一年,甚至两年里,一切都很顺利。

……但最终,你会问自己:我的下一步是什么?我如何规划未来的职业生涯,以实现自我、成功并在公司甚至其他地方获得更高的职位?攀登职业阶梯是必然的;你会觉得是时候采取下一步行动了。一些公司也鼓励,甚至推动你采取这些步骤;要么上去,要么出去!

但是,作为一名初级数据科学家,你可以选择哪些最常见的职业道路来提升自己的职业生涯?这里有一个职业道路列表,你可以选择:

1。高级数据科学家
2。咨询
3。机器学习工程
4。数据工程
5。创业
6。项目管理 7。研究
8。用户体验

在这里,我们将详细讨论每一条职业道路:

  1. 高级数据科学家

升职是最自然的选择;这是显而易见的。通常,当您开始担任行业中的数据科学家时,您会在最初的 6-12 个月内获得大量经验。在这个时期,你正在快速学习新技术,并越来越接近成为一名全栈数据科学家。你也将习惯于你的行业是如何做事的,更高级的人是如何解决问题或展示结果的。随着您拥有越来越多的经验,自然会有更多的责任分配给利益相关者沟通,将需求转化为具体的开发故事,高层次的问题解决,甚至监督公司的新员工。

虽然在大多数公司中,初级和高级之间有一个过渡期,称为中级,但通过积累经验,你正在为高级数据科学工作做准备。这种转变通常有三种方式:(a)你明确提出要求,(b)你的经理会提拔你,或者©你换公司,协商一个更好的职位。你需要有一个清晰的计划,以最有效的方式从初级水平过渡到高级水平。通过确保你了解这些要求,包括你公司的具体要求,你可以加快你的职业晋升。

[## 全栈数据科学家还是大数据项目的超级英雄?

数据科学就业市场的新兴需求趋势

towardsdatascience.com](/full-stack-data-scientists-or-superheroes-of-the-big-data-projects-f245ec66bb6a)

2。咨询
数据科学咨询也是初级数据科学家的典型职业道路,进入门槛相对较低。咨询行业的主要功能是为他们的客户,主要是跨国公司,提供外部的合格人才。咨询公司以短期和长期合约的形式与客户开展项目。这些项目可能需要几个月到几年时间。

在咨询行业工作通常是积累你不同领域商业知识的好选择;您将参与许多与大客户合作的项目,通过这些项目,您将了解企业决策者的思维模式,以及他们在数据科学解决方案中寻求什么。此外,数据驱动的决策已经成为所有大公司的主要趋势;您甚至可以期望与客户的董事总经理级别的员工进行互动,向他们提供他们新的花哨的分析仪表板。

有些人在进入咨询行业工作之前,先学习工商管理硕士(MBA)。尽管考虑到 MBA 学位对你的商业头脑有用,但如今,在一些大型咨询公司工作相当于上商学院。在咨询行业工作有助于你更多地了解业务流程,并获得关于大型企业最佳实践的实用知识。

也有成为特定领域顾问的机会。例如,如果你做过营销分析方面的项目,并且对这个能力感兴趣,你可以选择营销分析方面的专家路径。作为特定领域的顾问,通常在一些大型咨询公司工作,但主要是在高级管理层,他们有主题专家或能力领导。另一个选择是做一名自由职业顾问,或者在你擅长的特定领域开办你的咨询机构。

[## 担任数据科学顾问

具有企业意识的数据科学家的职业战略

towardsdatascience.com](/working-as-a-data-science-consultant-e626669ab72b) [## 成为数据科学顾问所需的 5 项技能

为数据科学咨询职业发展的软技能

towardsdatascience.com](/5-skills-you-need-to-succeed-as-a-data-science-consultant-1a77c5bba064) [## 数据科学顾问面对客户的技能:奢侈品还是必需品?

成为成功的数据科学顾问需要什么

towardsdatascience.com](/what-is-takes-to-be-a-top-data-science-consultant-part-1-client-facing-skills-7803f5c8974c)

3。机器学习工程

机器学习工程是与数据科学关系密切的领域,在一些公司,这两条职业道路几乎没有区别。通常,机器学习工程更关注数据科学的软件工程方面,而不是分析方面,这意味着,作为一名机器学习工程师,你将做大多数将人工智能集成到软件解决方案中的开发工作。现在机器学习工程师工作的最突出的领域是自动驾驶和云计算。

从数据科学过渡到机器学习工程相当简单。你只需要展示出你有工程思维,能够以实用可靠的方式交付高质量的软件解决方案。你还需要对你所从事的领域有所了解。但这应该不是什么大问题。

一些新兴领域近年来发展得如此突出,以至于它们正在从数据科学和机器学习工程领域中独立出来。这些领域是计算机视觉工程、语音技术工程和自然语言处理工程。

[## 作为一名机器学习工程师

人工智能和数据人才的职业战略

towardsdatascience.com](/working-as-a-machine-learning-engineer-a364545ae93c)

4。数据工程

数据工程是数据科学的另一个姊妹领域。数据工程师是软件开发专家,对大数据基础架构和 DevOps 有深入的了解。数据工程师帮助数据科学家和机器学习工程师获取和准备大型数据集。

数据科学家认为 70%的数据科学工作都致力于数据管理。因此,一些数据科学家很自然地在这部分过程中找到了他们的激情,并转向数据工程。对于这种转变,你将需要变得更有工程师头脑,并对 Hadoop、Spark、Scala 等技术以及几乎所有的数据库技术拥有实践经验。
5。创业

创业是数据科学领域的热门选择。大数据分析和人工智能是热门话题,许多初创公司正在寻求将这些技术应用到他们的产品中。有一些经验的数据科学家可以通过多种方式进入企业家行列:

(a)支持年轻创业人才组建团队和建立公司的创意阶段孵化器。这些通常是长达 6 个月的短期项目,为其中一些项目提供创业人才;你只需要带上你的创业天赋,仅此而已。这些项目帮助你建立团队,生产最小可行的产品,并获得后续投资者,

(b)类似于创意阶段孵化器的公司创建者,区别在于你是这些孵化器的雇员。通常,你被聘为常驻企业家,在孵化器导师的指导下追求一个创业想法。对于这条道路,你通常需要至少在一个业务领域有一个想法或专业知识。对产品开发、筹资和团队建设的支持也是这些公司提供的支持服务,

©初创公司(联合)创始人,遵循传统的初创公司成长路径,通常是用一个想法组建一个团队,开发一个最低可行的产品,向投资者展示,筹集资金,扩大公司规模,然后重复。在这条道路上,你不一定要成为首席执行官或拥有强大的商业背景才能经营公司。你可以是专注于产品开发的技术人员,而把业务开发或筹资留给你的联合创始人,

(d)在一些国家,政府为促进创业提供资助。其中一些资助是提供给具有高科技想法的科学创业公司的,所以如果你与你以前的大学仍然有一些联系,那么恢复这些联系并开始申请这些资助将是有用的。

(e)如果你不是一个绝对的风险承担者,也不想创办自己的公司,另一个选择是在年轻或成熟的初创公司工作,你可以担任类似于产品经理甚至首席技术官的角色。这仍然是走向创业职业道路的一个很好的步骤,它包括学习创业成长过程的好处,而不需要承担财务风险。

6。项目管理

项目管理是几乎所有公司的一项必要工作。通常,人们通过两条主要的职业道路成为项目经理:(a)数据科学专业知识道路或(b)面向业务的项目管理道路。

第一个选项是职业道路,在这条道路上,你已经完成了如此多的数据科学项目,你将成为公司中其他初级和高级数据科学家的天然领导者。在你职业生涯的这个阶段,你知道如何与利益相关者沟通,解决业务问题,将任务委派给公司中更初级的数据科学家,在项目中拥有一个主题。为了更好地进行项目管理,你必须在依靠你在数据科学方面的深厚专业知识的同时,明确地接受项目管理技能的培训。

对于第二种选择,你需要在职业生涯早期就开始专注于项目管理职业轨道。这通常是通过承担初级项目管理角色来完成的,比如成为一名 scrum master,或者仅仅是协助你公司当前的项目经理。有些人从职业生涯一开始就选择项目管理角色。这些人通常从成为 scrum 大师开始,获得 scrum 大师证书,并由此获得一些项目管理经验。然而,这些类型的角色仅仅是管理角色,涉及很多人际交往技巧,尤其是公司政治。

7。研究

对于一些在数据科学领域工作过一段时间的人来说,回到研究领域也是一个选择。许多第一年的数据科学家都是直接从研究生院毕业的,有时他们觉得这个行业不适合他们,或者他们想重新做一些研究工作。典型的研究职业道路包括攻读博士学位、在学术界担任博士后研究员,或者在工业界担任研究科学家。

我们需要注意的是,回到研究阶段不应该是行业中充满挑战的第一年的最终解决方案。适应一个新的系统是很困难的,尤其是如果某人来自学术界。例如,与学术界相比,工业界开发工作的速度可能会非常不同。因此,建议是,如果你对数据科学行业充满热情,坚持不懈地在这个行业取得成功,结果就会到来。但是,如果你的动力是回答问题,而不是让事情运转起来,那么再次探索研究职业道路将是值得的。

8。用户体验

在软件行业做项目时,你可能会遇到一些新的角色,这些角色不在你的核心专业范围内,但是你非常感兴趣。在软件开发中,一个选项可以是用户体验设计和研究。用户体验设计是设计用户在工作软件中经历的流程所遵循的过程。这可以是一个简单的网站,也可以是更先进的网络平台,比如社交媒体。另一方面,用户体验研究侧重于用户体验的实验和最佳实践。

对人类行为更感兴趣或者性格外向的人,可以选择用户体验设计作为职业道路。这些角色通常需要与用户或利益相关者进行更多的交流,而不需要成为项目经理。

请记住,就像任何向核心专业以外的职业过渡一样,你将不得不学习许多新技能。尽管如此,如果你热衷于用户体验,这可能是值得的。

关于作者:

Pouyan R. Fard 是 Fard 咨询公司的首席执行官&首席数据科学家。Pouyan 在数据科学、人工智能和营销分析方面拥有多年的公司咨询经验,从初创公司到全球公司。他曾与医药、汽车、航空、运输、金融、保险、人力资源和销售&营销行业的财富 500 强公司合作。

Pouyan 也在指导活跃在大数据行业的初创公司和人才。他的热情是通过职业培训培养下一代数据科学家,并帮助他们找到数据科学领域的顶级工作机会。

Pouyan 已经完成了关于消费者决策预测建模的博士研究工作,并对开发机器学习和人工智能领域的最先进解决方案保持兴趣。

8 种填补缺失数据的方法

原文:https://towardsdatascience.com/8-clutch-ways-to-impute-missing-data-690481c6cb2b?source=collection_archive---------15-----------------------

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

Unsplash 上由 Ehimetalor Unuabona 拍摄的照片

如何处理任何数据集中缺失数据的教程

缺失数据可能是任何数据相关项目的瓶颈。虽然拥有高质量的数据总是值得赞赏的,但情况并非总是如此。有时你需要处理你拿到的任何一块半生不熟的蛋糕。因此,处理缺失数据对任何数据科学家/分析师都非常重要,因为这将使他们能够更准确地得出结果。

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

弗兰基·查马基Unsplash 上拍摄的照片

“估算”一词指的是对我们丢失的任何数据进行统计估计。不同的数据类型有不同的插补技术。例如,您可能有数字数据,并且将应用以下插补技术:

  • 使用数据的平均值/中值估算
  • 使用任意值估算
  • 使用尾部结束法估算。

如果您有分类数据,那么您可以执行以下操作:

  • 使用模式估算数据
  • 为缺失数据添加类别

如果您有混合的数据,包含数值和分类值,那么您可以执行以下操作:

  • 完整的案例分析
  • 为缺失值添加指示器
  • 使用随机抽样方法估算数据

数字数据插补

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

照片由米卡·鲍梅斯特Unsplash 上拍摄

平均值/中值

使用平均值/中值进行估算是最直观的方法之一,在某些情况下,它也可能是最有效的方法。我们基本上取数据的平均值,或者取数据的中位数,用那个值代替所有缺失的值。

  • 假设:数据随机缺失;缺失的观察值看起来像大多数的观察值
  • 优点:实现简单快捷;保留数据的丢失
  • 缺点:协变和方差可能发生变化;丢失的数据越多,失真就越高

任意值方法

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

照片由戴维斯科Unsplash 拍摄

这里,目的是标记数据集中缺失的值。您可以用一个固定的任意值(随机值)来估算缺失的数据。

它主要用于分类变量,但也可用于具有任意值的数值变量,如 0,999 或其他类似的数字组合。

  • 假设:数据不是随机缺失的
  • 优点:快速且易于实现;揭示缺失价值的潜在重要性
  • 缺点:改变共方差/方差;可能会产生异常值

尾部结束法

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

照片由克里斯蒂安·凯恩德尔Unsplash 上拍摄

这种方法类似于任意值方法,但是,这里的任意值是在变量的基本分布的尾端选择的。

如果正态分布,我们使用平均值+/- 3 倍标准差。

如果分布是偏斜的,使用 IQR 邻近规则。

  • 假设:数据不是随机缺失的;数据在尾端是倾斜的
  • 优点:能带出缺失值的重要性;
  • 缺点:改变共方差/方差;可能会产生有偏差的数据。

分类数据插补

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

CJ DayritUnsplash 上拍摄的照片

方式

顾名思义,您用最常出现的值来估算缺失数据。这种方法最适合分类数据,因为缺失值最有可能是出现频率最高的值。

  • 假设:数据随机缺失;缺失值看起来像多数
  • 优点:快速且易于实现;适用于分类数据
  • 缺点:可能创建有偏差的数据集,偏向最频繁的值

添加缺失数据的类别

下一个方法非常简单,只适用于分类数据。您可以为缺失值创建一个单独的标签——“缺失”或者任何相关的内容。这个想法是标记缺失的价值观,并理解缺失的重要性。

  • 假设:无假设
  • 优点:快速且易于实现;帮助理解缺失数据的重要性
  • 缺点:可能被误解的数据;缺失数据的数量应该足够大

混合数据插补

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

布鲁克·拉克在 Unsplash 拍摄的照片

完整的案例分析

在这种方法中,我们基本上放弃了缺少值的选项。我们只考虑所有值都存在的数据行。顾名思义,是只对完整案例的评估。这对混合数据集很有用。

  • 假设:数据在随机点缺失;没有模式的证据
  • 优点:没有数据操纵;保持数据的分布
  • 缺点:数据丢失;如果数据不是随机丢失的,可能会创建有偏差的数据集

为缺失值添加指示器

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

斯文·舍尔梅尔在 Unsplash 上的照片

在这种方法中,您基本上会创建一个新列来指示数据丢失的位置。这将是一个二进制值(1 或 0 ),表示丢失或未丢失。

您可以将此方法与其他插补方法结合使用,以便更好地理解缺失数据。

  • 假设:数据不是随机缺失的;数据是可预测的
  • 优点:易于实现;抓住缺失数据的本质
  • 缺点:创建另一个列/特征;仍然需要估算

随机抽样方法

该方法包括从变量的数据池中随机抽取样本,并使用随机抽取的值来估算缺失值。

  • 假设:数据随机缺失;数据呈正态分布
  • 优点:快速且易于实现;保留方差
  • 缺点:可能产生随机数据;当丢失数据占数据的百分比很高时不起作用;

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

照片由 magnezis magnesticUnsplash 上拍摄

感谢阅读。希望你学到了新东西。更多类似内容关注我。

每个程序员都必须知道的 8 种常见数据结构

原文:https://towardsdatascience.com/8-common-data-structures-every-programmer-must-know-171acf6a1a42?source=collection_archive---------0-----------------------

8 种常用数据结构的快速介绍

数据结构是一种在计算机中组织和存储数据的专门方法,通过这种方法,我们可以更有效地对存储的数据执行操作。数据结构在计算机科学和软件工程领域有着广泛而多样的使用范围。

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

作者图片

几乎每一个已经开发的程序或软件系统都在使用数据结构。此外,数据结构属于计算机科学和软件工程的基础。当涉及到软件工程面试问题时,这是一个关键话题。因此,作为开发人员,我们必须对数据结构有很好的了解。

在这篇文章中,我将简要解释每个程序员都必须知道的 8 种常用数据结构。

1.数组

一个数组是一个固定大小的结构,它可以保存相同数据类型的项目。它可以是整数数组、浮点数数组、字符串数组甚至数组数组(比如二维数组)。数组是有索引的,这意味着随机访问是可能的。

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

图一。数组基本术语的可视化(图片由作者提供)

数组运算

  • 遍历:遍历元素并打印出来。
  • 搜索:搜索数组中的一个元素。您可以通过元素的值或索引来搜索元素
  • 更新:更新给定索引处现有元素的值

向数组中插入元素和从数组中删除元素不能马上完成,因为数组的大小是固定的。如果你想在一个数组中插入一个元素,首先你需要创建一个新的数组,增加它的大小(当前大小+ 1),复制现有的元素并添加新的元素。这同样适用于删除一个新的减小了大小的数组。

数组的应用

  • 用作构建块来构建其他数据结构,如数组列表、堆、哈希表、向量和矩阵。
  • 用于不同的排序算法,如插入排序、快速排序、冒泡排序和合并排序。

2.链接列表

链表是一个顺序结构,由一系列相互链接的线性顺序的项目组成。因此,你必须按顺序访问数据,随机访问是不可能的。链表提供了一种简单灵活的动态集合表示。

让我们考虑以下关于链表的术语。参考图 2 可以有一个清晰的思路。

  • 链表中的元素被称为节点
  • 每个节点包含一个和一个指向其后继节点的指针,称为下一个
  • 名为 head 的属性指向链表的第一个元素。
  • 链表的最后一个元素被称为

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

图二。链表基本术语的可视化(图片由作者提供)

以下是可用的各种类型的链表。

  • 单链表 —只能向前遍历项目。
  • 双向链表 —可以向前和向后遍历条目。节点由一个称为 prev 的额外指针组成,指向前一个节点。
  • 循环链表 —头的 prev 指针指向尾,尾的 next 指针指向头的链表。

链表操作

  • Search :通过简单的线性搜索,在给定的链表中找到关键字为 k 的第一个元素,并返回指向该元素的指针
  • 插入:向链表中插入一个键。插入可以通过三种不同的方式完成;在列表的开头插入,在列表的结尾插入,在列表的中间插入。
  • 删除:从给定的链表中删除一个元素 x 。您不能一步删除一个节点。删除可以通过三种不同的方式完成;从列表的开头删除,从列表的结尾删除,从列表的中间删除。

链表的应用

  • 用于编译器设计中的符号表管理
  • 用于使用 Alt + Tab 在程序之间切换(使用循环链表实现)。

3.大量

堆栈是一种 LIFO (后进先出——放在最后的元素可以首先被访问)结构,这在许多编程语言中都很常见。这种结构被命名为“堆栈”,因为它类似于现实世界中的堆栈——一堆盘子。

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

图片由设计来自像素库

堆栈操作

下面给出了可以在堆栈上执行的两个基本操作。请参考图 3 来更好地理解堆栈操作。

  • 按下:将一个元素插入到栈顶。
  • Pop :删除最上面的元素并返回。

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

图三。堆栈基本操作的可视化(图片由作者提供)

此外,还为堆栈提供了以下附加功能,以便检查其状态。

  • Peek :返回栈顶元素,不删除。
  • isEmpty :检查堆栈是否为空。
  • 是否已满:检查堆栈是否已满。

堆栈的应用

  • 用于表达式评估(例如:调车场算法用于解析和评估数学表达式)。
  • 用于在递归编程中实现函数调用。

4.行列

一个队列是一个 FIFO (先进先出——放在最前面的元素可以最先被访问)结构,这在许多编程语言中都很常见。这种结构被命名为“队列”,因为它类似于现实世界中的队列——人们在队列中等待。

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

图片来自 PixabaySabine Felidae

队列操作

下面给出了可以在队列上执行的两个基本操作。请参考图 4 来更好地理解队列操作。

  • 入队:在队列末尾插入一个元素。
  • 出列:删除队列开头的元素。

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

图 4。队列基本操作的可视化(图片由作者提供)

队列的应用

  • 用于管理多线程中的线程。
  • 用于实现排队系统(例如:优先级队列)。

5.哈希表

哈希表是一种存储值的数据结构,这些值具有与每个值相关联的键。此外,如果我们知道与值相关联的键,它可以有效地支持查找。因此,无论数据大小如何,它在插入和搜索方面都非常有效。

直接寻址在表中存储时,使用值和键之间的一对一映射。然而,当有大量的键值对时,这种方法就有一个问题。考虑到典型计算机的可用内存,该表将会非常大,包含如此多的记录,并且可能不切实际,甚至不可能被存储。为了避免这个问题,我们使用了散列表

散列函数

名为散列函数 ( h )的特殊函数用于克服直接寻址中的上述问题。

在直接访问中,具有键 k 的值被存储在槽 k 中。使用散列函数,我们计算每个值所在的表(槽)的索引。使用散列函数为给定键计算的值被称为散列值,它指示该值映射到的表的索引。

h(k) = k % m

  • h: 哈希函数
  • k: 应确定其哈希值的键
  • m: 哈希表的大小(可用的槽数)。对于 m 来说,不接近 2 的精确幂的质数是个不错的选择。

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

图五。哈希函数的表示(图片由作者提供)

考虑哈希函数 h(k) = k % 20 ,其中哈希表的大小为 20。给定一组键,我们希望计算每个键的哈希值,以确定它在哈希表中的索引位置。假设我们有以下键,散列和散列表索引。

  • 1 → 1%20 → 1
  • 5 → 5%20 → 5
  • 23 → 23%20 → 3
  • 63 → 63%20 → 3

从上面给出的最后两个例子中,我们可以看到,当哈希函数为多个键生成相同的索引时,会出现冲突。我们可以通过选择合适的散列函数 h 来解决冲突,并使用诸如链接开放寻址之类的技术。

哈希表的应用

  • 用于实现数据库索引。
  • 用于实现关联数组。
  • 用于实现“设置”数据结构。

6.树

是一种分层结构,其中数据按层次组织并链接在一起。这种结构不同于链表,而在链表中,项目是以线性顺序链接的。

在过去的几十年中,为了适应特定的应用和满足特定的限制,已经开发了各种类型的树。一些例子是二叉查找树树、B 树、treap 树、红黑树、八字树、AVL 树和 n 叉树。

二分搜索法树

二叉查找树(BST) 顾名思义,是一种二叉树,其中数据以层次结构组织。这种数据结构按排序顺序存储值。

二叉查找树中的每个节点都包含以下属性。

  1. key :存储在节点中的值。
  2. :指向左子的指针。
  3. :指向右孩子的指针。
  4. p :指向父节点的指针。

二叉查找树表现出一种独特的属性,区别于其他树木。这个属性被称为二进制搜索树属性

x 是二叉查找树中的一个节点。

  • 如果 y 是 x 的子树中的一个节点,那么 y.key ≤ x.key
  • 如果 y 是 x 的子树中的一个节点,那么 y.key ≥ x.key

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

图六。树木基本术语的可视化(图片由作者提供)

树木的应用

  • 二叉树:用于实现表达式解析器和表达式求解器。
  • 二叉查找树:用于许多数据不断进出的搜索应用。
  • :JVM(Java 虚拟机)用来存储 Java 对象。
  • Treaps :用于无线网络。

查看我下面关于 8 个有用的树数据结构和自平衡二分搜索法树的文章。

[## 值得了解的 8 种有用的树数据结构

8 种不同树形数据结构的概述

towardsdatascience.com](/8-useful-tree-data-structures-worth-knowing-8532c7231e8c) [## 自平衡二分搜索法树 101

自平衡二分搜索法树简介

towardsdatascience.com](/self-balancing-binary-search-trees-101-fc4f51199e1d)

7.很

一个是二叉树的一个特例,其中父节点与它们的子节点的值进行比较,并相应地排列。

让我们看看如何表示堆。堆可以用树和数组来表示。图 7 和图 8 展示了我们如何使用二叉树和数组来表示二进制堆。

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

图 7。堆的二叉树表示(图片由作者提供)

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

图 8。堆的数组表示(图片由作者提供)

堆可以有两种类型。

  1. 最小堆 —父项的键小于或等于其子项的键。这被称为最小堆属性。根将包含堆的最小值。
  2. 最大堆 —父项的键大于或等于其子项的键。这称为最大堆属性。根将包含堆的最大值。

堆的应用

  • 用于堆排序算法
  • 用于实现优先级队列,因为优先级值可以根据堆属性进行排序,其中堆可以使用数组来实现。
  • 队列函数可以在 O(log n) 时间内使用堆来实现。
  • 用于查找给定数组中 kᵗʰ最小(或最大)值。

查看我下面关于使用 python heapq 模块实现堆的文章。

[## Python Heapq 模块简介

关于如何使用 Python 的 heapq 模块的简单介绍

towardsdatascience.com](/introduction-to-python-heapq-module-53534feda625)

8.图表

一个由一组有限的顶点或节点以及一组连接这些顶点的组成。

图的是图中顶点的个数。图的大小是图中边的数量。

如果两个节点通过同一条边相互连接,则称它们为相邻

有向图

如果一个图 G 的所有边都有一个指示什么是起始顶点,什么是结束顶点的方向,则称该图为有向图

我们说 (u,v) 是从或离开顶点 u事件,是从进入顶点 v事件。

自循环:从顶点到自身的边。

无向图

如果一个图 G 的所有边都没有方向,则称其为无向图**。它可以在两个顶点之间双向移动。**

如果一个顶点不与图中的任何其他节点相连,则称其为孤立的

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

图九。图形术语的可视化(图片由作者提供)

你可以从我的文章 10 图算法直观解释中读到更多关于图算法的内容。

[## 直观解释的 10 种图形算法

10 种基本图形算法的快速介绍,包括示例和可视化

medium.com](https://medium.com/@vijinimallawaarachchi/10-graph-algorithms-visually-explained-e57faa1336f3)

图表的应用

  • 用于表示社交媒体网络。每个用户都是一个顶点,当用户连接时,他们就创建了一条边。
  • 用于表示搜索引擎的网页和链接。互联网上的网页通过超链接相互链接。每个页面是一个顶点,两个页面之间的超链接是一条边。用于谷歌的页面排名。
  • 用于在 GPS 中表示位置和路线。位置是顶点,连接位置的路线是边。用于计算两个位置之间的最短路线。

最后的想法

数据结构操作的时间复杂性的备忘单可以在这个链接中找到。此外,请查看我下面的文章,在这篇文章中,我使用 C++从头开始实现了一些常见的数据结构。

[## C++中的数据结构—第 1 部分

在 C++中实现通用数据结构

towardsdatascience.com](/data-structures-in-c-part-1-b64613b0138d)

最后,我要感谢 A Alkaff Ahamed 先生为改进本文提供了宝贵的反馈和建议。

我希望作为对数据结构的简单介绍,这篇文章对您有所帮助。我很想听听你的想法。😇

非常感谢你的阅读。😊

干杯!😃

参考

[1]《算法导论》,第三版,作者:托马斯·h·科尔曼、查尔斯·e·莱瑟森、罗纳德·L·李维斯特和克利福德·斯坦。

[2]维基百科的数据结构列表(https://en.wikipedia.org/wiki/List_of_data_structures)

8 选择模型方法的决定因素

原文:https://towardsdatascience.com/8-determining-factors-for-the-selection-of-the-model-approach-7d06d893d0ca?source=collection_archive---------17-----------------------

而且它们与你的技术技能无关

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

图片由 Arek SochaPixabay 上拍摄

最后,所有数据都被清理并准备好进行分析。安迪开始过度热情地将数据可视化,以获得数据的第一印象。他有许多维度和变量,因此他花了几天时间直观地分析它们,并确定应用的最佳方法。在那个周末,团队经理告诉他,下周二他需要一份关于结果的演示稿,因为团队经理必须在一周内将其提交给指导委员会。

安迪告诉他,他还没有结果。但是没有谈判的余地。周二,必须提交结论并整合到 PowerPoint 演示文稿中。

安迪匆忙地制作了一些回归分析,并将其整合到演示文稿中。

在指导委员会会议后,团队经理告诉他,该项目将不会继续进行。

安迪非常沮丧。那是他的第二个项目,第二次也是以同样的决定结束。他之所以选择这个职位,是因为他有潜力在大量可用的数据上做伟大的数据科学工作。

这个故事是一个真实的案例,它不是公司中的一个非典型情况。我想你们中的一些人也已经经历过类似的情况。

发生这种情况的原因不是你的技能。

当投入到企业环境中的数据科学项目时,情况与之前的学习环境不同。

我的经验是,考虑到许多公司的限制和期望,大多数数据科学家都很难管理这个项目。

不少数据科学家在第一个项目后感到失望和沮丧,并寻找另一个职位。

为什么?

他们接受处理数据、技术方法和编程方面的培训。没有人教他们项目、利益相关者或公司数据管理,也没有人教他们公司业务 KPI。

这是因为缺乏处理不言而喻的企业行为的经验。

不幸的是,在这个领域,潜在的陷阱比你所有的技能都要多。

如果您知道决定因素,您可以相应地计划您的数据科学任务,追求令人满意的项目,并指导您的工作。

在下文中,我将向您介绍在企业环境中选择模型方法的八个最重要的驱动因素,以及如何减轻它们。

1。时间、时间表和截止日期

你需要知道的事情

公司已经定义了项目流程。阶段入口或指导委员会会议是必须提交结果的会议的一部分。演示文稿必须提前几天提交,并且必须包含某些预期信息。此外,企业总是面临交付财务成果的压力。这导致持续紧张的最后期限。这些流程是企业文化的一部分,不言而喻,并认为员工知道它们。

如何解决?

问,问,问。询问里程碑,例如,做出项目决策的会议日期。

建立一个时间预算。从里程碑的日期开始,反向计算项目日程。

不仅包括你的任务,还包括周围的行动,如协调会议、演示和提交演示的截止日期。不要忘记,每个演示文稿都有一轮审查,你必须考虑在提交前几天添加内容。包括意外任务和故障排除的时间余量。

只有这样,才能选择在确定的时间表内执行的方法。选择可以快速运行且您熟悉的方法。有了一些成功的结果后,希望还有时间,开始尝试更复杂的新方法。

举例

人力资源迫切需要针对业务部门和人员的人力资源管理关键成功因素模式。根据截止日期设置时间表,我们决定仅执行简单的线性回归,而不考虑这些关键成功因素的任何相互依赖性,例如教育水平和参加的培训项目。我们专注于精确拟合更简单的模型,并确定具有高可靠性的单一贡献因素。

2.模型和结果所需的精确度

你需要知道的事情

可用的现成数据决定了模型的准确性。因此,模型的详细程度和数据的粒度必须匹配。对结果粒度的期望也是如此。方法必须符合预期。任何不匹配都会给出不可靠的结果。

如何解决?

根据可用数据的粒度选择模型。当没有合适的数据时,不要浪费时间去拟合一个非常详细和准确的模型。当没有高质量的数据时,聚合数据并使用粒度更小的模型可以得到更可靠的结果。

当决策所需的准确性水平与数据所能达到的水平不匹配时,您必须尽早上报。不要试图编造一些事情。只有透明的沟通有助于防止意外,并管理期望。否则,你会受到责备。

例子

当我们分析养老院盈利能力的影响模式时,粒度数据太不均匀,结果没有经济意义。因此,我们汇总了数据并应用了更简单的模型。根据调查结果,管理局已经可以做出重要决定,并为未来的数据管理和收集制定指导方针。

3.方法的相关性

你需要知道的事情

的问题必须用合适的方法解决。要回答的问题一定要明确。它不应该允许任何含糊不清。此外,结果的形式必须与其他内部和外部分析具有可比性。两者都指出了应该使用的相关方法的方向。

如何称呼?

确保你理解了要回答的问题。请不要假设它!问!当你用最精确的方法得到一个解决方案,但却是一个错误的问题时,这是没有用的。

基于此,您可以确定它属于描述性、预测性还是规定性领域。如果寻找最有影响的因素,选择描述性方法。当问题是预测时,选择预测性的方法,只有当各种影响下的优化决策是目的时,才选择规定性的模型。不要试图创新。我的经验是,它在大多数情况下都是错误的。

例子

三年前,我以前的团队强烈反对我,并推动实施一种新的流行的资产回报预测时间序列方法。最后,他们只是执行了它——哦,是的,我很生气,但由于最后期限的原因,我们不能搬回来。三年来,他们在没有做出大量调整努力的情况下,努力获得足够的结果。最近,我的一位前团队成员告诉我,他们最终搬回了旧模型,因为新模型包含了几个与结果无关的功能,但增加了很多噪音。

4.数据的准确性

你需要知道的事情

数据的准确性限制了可能方法的范围。非常精确的方法在使用不太精确的数据时不会带来任何价值。误差项将会很高。同样,数据的准确性和方法的准确性必须匹配。质量差会影响结果——垃圾进,垃圾出。

如何解决?

理解数据以及模型的需求。不要仅仅因为试错的原因而应用方法。不要只是重复方法,因为它已经在其他类似的案例中给出了很好的结果。您需要根据数据准确性的要求对它们进行定制。

示例

在优化两家医院的手术室容量时,我们不得不采用两种不同的方法。在一家医院,可以获得每个行动时间点的粒度数据,例如麻醉开始、进入手术室、手术开始等。由于实时电子记录,数据质量良好。

在另一家医院,数据是手工记录的,有时有几个小时的延迟,因此数据非常不准确。例如,数据显示在六个手术室中并行进行八个手术。

在第一种情况下,我们可以拟合粒度时间序列和基于代理的模型,并考虑数据的季节性。相比之下,在第二种情况下,我们必须重建模型,进行回归分析并消除不一致,然后将它们用作基于代理的更小粒度模型的输入。

5.数据可用性和准备使用数据的成本

你需要知道的事情

我经常听到这样的话:“当我们有这样或那样的数据时,我们会有完美的模型,但不幸的是,我们不能在适当的时候访问它们。”一个事实是,如今,企业只能使用大约 12%30% 的数据。在我的讨论中,大多数公司表示,他们使用了大约 20%的数据。在大多数情况下,获取它们的成本太高,而且没有相应的商业案例。如果没有商业案例包含使数据可用的成本,您将无法及时获得数据。

如何解决?

在你对这些奇特的模型有了所有的想法之前,你可以申请,澄清,在适当的时候什么数据是可用的,以及获得它们的成本。仅仅因为在一个公司中“数据是可用的”,并不意味着它在合理的时间范围内和以合理的成本可用。

根据本文中给出的其他七个驱动因素对数据进行优先级排序,并在每种情况下进行成本效益分析:与获取数据的成本相比,从业务角度来看,获得数据的额外收益是什么。永远不要问‘你能给我所有的数据吗?’。这表明你对公司的业务流程一无所知,当你需要支持时,比如说,需要 It 部门的支持时,你会被降低优先级。

例子

在对一家全球银行的日间流动性数据进行模式识别时,我们意外地遇到了存储格式问题。前一年交易的一个所需数据集的数据被存档在磁带上。因此,由于发布周期和转换成可访问的格式,需要几个月的时间才能获得数据。我们必须评估替代数据并调整模型。

6.数据隐私和保密性

你需要知道的事情

客户数据通常是保密的。数据隐私受法律监管,例如欧盟的 GDPR 或加利福尼亚州的 CCPA。金融机构有自己的法规来保护所谓的 CID 数据,即客户识别数据。只有经过授权的人才能访问这些数据,而数据科学家很少在其中。数据只能以匿名、加密或聚合的形式使用,并且必须经过数据所有者、安全官和法律顾问的批准。

如何称呼?

在您开始项目之前,请澄清您的数据科学项目中是否涉及任何受这些限制的个人数据。如果是,请尽早解决这个问题,一方面通过 it,因为他们最终已经有了处理这个问题的加密工具,另一方面通过法律顾问。只有在获得所有批准和适当加密后,才能使用数据。我见过许多无法执行的项目,不是因为数据隐私法案,而是因为它处理得太晚,没有足够的时间及时获得批准和加密数据。

举例

在一个必须将信用卡交易数据用于第三方服务分析的项目中,律师需要七个月的时间来澄清和批准数据的使用。澄清内容不仅包括法律方面,还包括加密方式、应使用的汇总级别,以及软件的访问权限和容器化等技术要求。

7.资源、基础设施和工具的可用性

你需要知道的事情

公司环境中的项目涉及许多不同的部门:IT、业务、创新团队或内部咨询小组。所有人都同时参与几个项目,他们的时间有限。

你需要存储和计算能力。关于软件安装的公司规则已经到位,并且需要相应的批准。如果某个工具需要成本并需要许可,则存在公司批准流程。作为一名数据科学家,你不仅需要 Python 和 Jupyter Notebook,而且很可能需要其他工具,如 Tableau 或 Alteryx。有些公司需要像 Docker 这样的容器。有些工具是公司政策不允许的。

如何解决?

在开始实际项目之前,澄清工具和基础设施。估计所需的存储和计算能力,并确保其可用。阐明公司关于数据科学软件的政策,以及可用的工具。尽早通知其他部门的人员即将到来的支持,以便安排一些专门的时间。在现有的数据科学团队中工作时,您可以首先与您的直线经理澄清这一点。但是,即使在一个已建立的数据科学团队中,也不要假设项目所需的一切都已就绪。

例子

在银行处理大量交易数据时,我们需要更高的计算和存储能力。我们在私有云环境中工作,通常只需要几分钟到几个小时就可以增加容量。但是,由于我们使用的是客户身份识别数据,因此在所谓的红区环境中,这是一个安全性非常严格的虚拟区域,基础架构需要经过安全官的“红区”认证。这花了两个星期。

8.公司产品和项目管理关键绩效指标

你需要知道的事情

企业用 KPI 来衡量产品和项目管理。有一些量化指标,比如短期项目的净现值或产品的盈亏平衡点。还有一些质量上的好处,比如缩短上市时间,一个项目的经验可以用于其他项目,等等。项目的决策和批准是基于这样的标准。

如何称呼?

不管你的数据科学工作成果有多好;它应该始终转化为公司的 KPI。因此,向你的直线经理澄清公司的指导措施是什么。将您的成果转化为这些指标,并传达给公司带来的好处。我的经验是,决策者停止的项目较少,更多的是实施到公司的流程中,最后,它在数据科学团队的工作中建立了很多信任。

例子

一家生命科学公司的一个部门几个月来一直试图为他们计划的数据科学项目获得内部资金,尽管思想、数据和数据科学是该公司战略的支柱。他们最终请求我支持他们。我们发现财务部有项目的投资模板,包括公司的指标。因此,我们向他们索要模板,并将所有数据科学蓝图组装到这样的神殿中。在下一轮演示之后,他们所有项目的 60%都被批准了。导火索是执行委员会现在可以将其与公司的 KPI 和其他项目的绩效进行比较。

连接圆点

许多数据科学家没有意识到,在企业环境中工作,除了建立模型和分析数据之外,还有多达 80%的其他任务。当你读完我所有的评论时,你最终会有点沮丧。

但是,了解上述因素并尽早解决它们,并积极主动地让你回到驾驶座上,避免糟糕的意外。目标是为我们的任务获得尽可能多的自由。它增加了项目的成功,你可以腾出时间用更复杂和新的方法做实验。

数据科学家没有接受过管理此类因素的培训,通常也没有预料到这些因素。正确地管理它们比你所有详细的技术知识更重要。

我所有的解决这些决定性因素的技巧和诀窍既不是火箭科学也不是秘密。但是提高你对它们的认识是至关重要的。我希望能让你对你的项目有更多的控制和更多的乐趣。

你应该在 LinkedIn 上关注的数据科学领域的 7 个人

原文:https://towardsdatascience.com/8-folks-you-should-be-following-on-linkedin-75f8fe9e43db?source=collection_archive---------28-----------------------

作为一名数据科学家不断进步和跟上时代

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

莫尼卡·梅尔顿在 Unsplash 上的照片

如今很难找到优秀的导师。随着如此多的信息和如此多的观点充斥互联网,找到一个特定领域的权威可能相当困难。

这一壮举并没有贬低在我们生活的不同阶段和领域寻找导师的重要性。长期以来,导师一直被认为是最有效的学习方式,可以将你的学习曲线缩短一半。见鬼,上面甚至有一段圣经经文——箴言 19:20——NLT尽可能得到所有的建议和指导,这样你的余生将会变得聪明”。

“如果说我看得更远,那是因为我站在巨人的肩膀上。”——艾萨克·牛顿

话虽如此,我认为有必要整理一份我们都应该关注的有效数据科学专业人士的名单,特别是在 LinkedIn 上。

列出这份名单非常困难,我可以添加的名字太多了,比如 Dat TranKevin TranSteve Nouri 等等。但我认为“不”这些名字出现得如此频繁——人们现在应该知道并关注它们。我想要新鲜血液,那些我看不到被抛来抛去却为社区做出惊人贡献的名字。

:我还必须考虑到,我并不知道所有在 LinkedIn 上做出惊人工作的数据科学家。如果你愿意,请随意评论一些名字,并添加他们的 LinkedIn 个人资料,以便我们可以关注他们。

#1 — 阿布舍克·塔库尔

他是世界上第一位 4x Kaggle 特级大师,是今年最令人兴奋的机器学习书籍之一的作者,是 Youtuber 和 Boost.AI 的首席数据科学家。

如果你在 LinkedIn 上关注我,你可能知道这是迟早的事,因为我经常分享他的帖子。我个人从 Abhishek 那里获得了大量的灵感,因为他是如此的实际——所有的东西都被应用。我想我从没见过他在分享某件事情时不给出一个真实世界的例子。

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

来源 : 阿布舍克·塔库尔 Youtube 频道

他的大部分工作无疑是针对具有机器学习经验的人,但最近他一直在发布许多围绕闯入数据科学的视频——下面是一些例子:

免责声明:他的发型变化很大但我可以验证还是他!

[## Abhishek Thakur -首席数据科学家- boost.ai | LinkedIn

购买我的书:接近(几乎)任何机器学习问题:美国:https://www.amazon.com/dp/8269211508UK…

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

#2 — 昂舒曼·戈什博士(博士、MBA、MBE)

Angshuman 博士分享了围绕数据科学的极具启发性、教育性和激励性的帖子。我经常发现自己在他发布的有用资源上做书签,这样我就可以在以后的数据中参考,例如这本 47 页的关于 机器学习数学 的书。

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

他是 Target 的首席数据科学家,现在是 Grab 的高级经理,也是印度管理学院的客座教授。我肯定会建议关注昂舒博士,并与他的帖子互动。

注意:由于某种奇怪的原因,当我分享他页面的链接时,Medium 没有阻塞。在 LinkedIn 上关注昂舒博士

第三名——菲利普·沃莱特

Phillip 是一名高级数据工程师,也是一名激进的自然语言处理传道者——我是指字面上的激进!

他还发布了关于数据可视化、深度学习和机器学习的非常有用的内容,因此在某种程度上使他成为一个多面手,但总的来说,他肯定会谈论 NLP。

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

来源 : 菲利普·沃莱特领英活动

给他一个关注…

[## Philip Vollet -高级数据工程师-毕马威德国| LinkedIn

⚡Insights 关于自然语言处理机器学习数据科学生物信息学图形技术⚡…

www.linkedin.com](https://www.linkedin.com/in/philipvollet/?originalSubdomain=de)

#4 — 埃里克·韦伯

我最近开始关注埃里克,从那天起,它就一直是我 LinkedIn feed 上的宝石。他的帖子主要是为数据专业人员提供建议,但他偶尔也会提供一些对进入数据领域有用的资源。

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

来源: 埃里克·韦伯领英帖子

Eric 是 Yelp 的实验负责人数据科学负责人,我肯定会把他列为第一批追随的人之一。

[## 埃里克·韦伯——Yelp | LinkedIn 的实验主管

请点击[关注]获取有关数据专业人士社区(领导者、科学家、分析师等)的更新和建议

www.linkedin.com](https://www.linkedin.com/in/eric-weber-060397b7/)

#5 — 马得

我觉得我和丹尼有很多相似之处,所以我能理解他的帖子。Danny 是一名自学成才的数据科学家和机器学习工程师,没有科学、技术、工程或数学(STEM)学位,也没有硕士或博士学位——他甚至进一步说他没有证书,并努力完成了 3 门在线课程。我相信我们很多人都有同感。

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

来源 : 马得领英帖子

丹尼分解现场工作的方式消除了人们对与角色相关的巨额薪酬的恐惧。看,自从我在学校放弃食品技术后,我就没做过一顿饭,但看看 how 谈论数据科学饮食。

[## 马得-创始人&首席执行官-悉尼数据科学| LinkedIn

在全球最大的职业社区 LinkedIn 上查看马得的个人资料。丹尼有一份工作列在他们的…

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

凯尔·麦基乌

介绍凯尔很简单——我只要看他的标题就行了。我教数据科学家如何找到工作,简单明了。当凯尔有话要说时,他会发帖,而且通常很有价值。

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

来源 : 凯尔·麦基乌帖子

我知道…有争议!

有很多方法可以和凯尔联系:

但是这个帖子是关于 LinkedIn 老兵的!

[## Kyle McKiou -创始人兼首席执行官-数据科学梦想工作| LinkedIn

查看 Kyle McKiou 在世界上最大的职业社区 LinkedIn 上的个人资料。凯尔有 8 份工作列在他们的…

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

# 7——莱克斯·弗里德曼

莱克斯·弗里德曼是独一无二的,但他的帖子确实提醒我,他是真正的人——我可以证明这一点,因为我看到他在流汗。他在麻省理工学院从事以人为中心的人工智能、自动驾驶汽车和深度学习方面的研究。

听说过埃隆·马斯克如何管理自己的时间吗?好吧,埃隆·马斯克找到了足够的时间(准确地说是 36 分钟)与“俄罗斯杀手”坐在一起——他说不是我——哦…我忘了补充,乔·罗根也认为有必要。

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

链接到莱克斯·弗里德曼播客

包裹

读完这篇文章后,你可能会感到惊讶,但你的问题的答案是“是的!有很多杰出的女性从事数据科学研究”,我将在下一篇文章中介绍你应该在 LinkedIn 上关注的 7 位女性——如果你想获得该文章的通知,请在 Medium 上关注我。

我提供的名单没有特定的顺序,而且肯定不是世界上唯一在社区中做伟大事情的人。正如我前面提到的,我想会见更多的权威人士,所以如果你有一些我没有提到的,那么一定要把他们和我联系起来!

让我们继续 LinkedIn 上的对话…

[## Kurtis Pykes -人工智能作家-走向数据科学| LinkedIn

在世界上最大的职业社区 LinkedIn 上查看 Kurtis Pykes 的个人资料。Kurtis 有一个工作列在他们的…

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

任何数据科学家都必须知道的 Pandas 库中的 8 个函数

原文:https://towardsdatascience.com/8-functions-from-the-pandas-library-that-any-data-scientist-must-know-17f6d33521a?source=collection_archive---------50-----------------------

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

杰瑞米·C 在 Unsplash 上的照片

如果你是通过“数据科学家荣耀之路”开始你的旅程,也许在你的旅程中会出现一些问题。为了帮助你,我创建了这个指南,展示了这个小而闪亮的库的所有关键方面。

开始之前

你需要使用的任何工具都有一些核心概念,在使用之前必须了解,熊猫也不例外。熊猫开发者将该库描述为*“一个快速、强大、灵活且易于使用的开源数据分析和操作工具”*。

简而言之,我们可以说 Pandas 是一个库,我们总是需要它来阅读和理解我们的结构化数据。我所说的结构化指的是任何表格数据,比如 excel 文件等等。如果您没有收到这些术语,不用担心,它们对本指南并不重要。

我希望你不要忘记的事情更简单:熊猫读取数据并将其转换为一堆系列,将系列想象为“单列多行”。这些“串系列”在熊猫内部被称为数据帧

关于我们的数据集

我将使用我过去工作过的数据集。我们的数据内容是关于佐治亚州亚特兰大市的犯罪。点击这里你可以获得原始版本和更多信息。

好了,我们终于能够开始做一些问题,并用代码回答它们了。我们开始吧!

1)如何读取数据文件?

这里你需要回答的第一个问题是:“我的数据有什么格式?”。答案会指引你的下一步。默认情况下,我们使用。csv(逗号分隔值),但您可以使用任何类型。

上面没找到你的格式?点击此处,您可以找到正确的代码来加载您的数据。

2)如何在我的数据框架内导航?

我所说的“导航”是指毫无问题地在数据集间穿行。默认情况下,我们可以只使用我们的列名来验证我们在特定列中的条目,但是使用 Python 的 slice 还有更高级的方法。

下面你可以验证一些核心导航方式的区别。

如何过滤我的数据框?

这么说吧,你需要数一数有多少数值高于 10,100,1000!啊,我想你明白了…你能做什么?例如,如何获取目标值不低于 100 的所有空单元格。让我们把它编码。

4)如何验证缺失数据?

在数据清理阶段,验证数据集是否有空值非常重要,并据此决定如何处理。不幸的是,丢失的值不仅仅是 NaN 条目,还可能是-1、0 甚至是“丢失”的字符串。我将在这里留下一堆解决这个问题的方法。

5)如何验证我的数据帧类型?以及如何修改?

默认情况下,上面描述的 info()方法可以完成这项工作,但是还有其他方法可以处理。这需要在数据清理/争论期间完成!如果您使用不正确的 dtypes 导出处理过的数据集,您以后需要小心(浪费时间)。这是非常简单的一步,但是非常重要。

6)我需要修改每个条目的值,该怎么办?

通常我们会在数据争论阶段这样做,例如,当您需要基于度量标准的一些问题来修改实际的数据时。有很多方法可以做到这一点,你可以在下面查看。

附加信息

即使有那么多信息,我知道这永远不够。所以我也会回答其他人的问题。把喜欢当成一种奖励。

如何使用 crosstab 和 groupby?

在探索性数据分析阶段,两者都是很好的工具。不用写很长的代码,你可以提取真正重要的东西,然后用一段时间。非常有趣的方法!

交叉表

第一个是 crosstab,它实际上将两个系列“交叉”并返回一个对象。例如,你可以用这个结果为你的客户策划一些真正重要的信息。

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

使用熊猫的交叉表示例

分组依据

groupby 将基于一个或一小组列对整个数据集进行分组。结果不是将它们交叉,而是该列后跟所有其他列的值,这些值与分组后的值相匹配。用图像更容易理解。

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

以熊猫为例分组

我需要将这些信息可视化,有办法吗?

啊,我真的很喜欢这个!你想看什么就画什么!Pandas 有一个名为 plot 的内置函数,它使用 Matplotlib(一个绘图库)。作为回应,它可以用一种非常简单的方法为您完成这项工作!让我展示一下。

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

就是这样,伙计们!

希望你喜欢这个内容,并能熟练运用你的新知识!如果你想每天都学到有趣的东西,我很乐意成为你在 Medium 的老师!

你也可以查看我的 Github 个人资料。我从事一些数据科学项目已经有一段时间了。所有的关键概念都可以学习和重用!

[## 雷南·洛里科

在 GitHub 上注册你自己的个人资料,这是托管代码、管理项目和构建软件的最佳地方…

github.com](https://github.com/renfelo)

解读新冠肺炎统计数据时避免常见陷阱的简短指南

原文:https://towardsdatascience.com/8-key-points-you-might-want-to-think-about-before-sharing-that-next-covid-19-stat-with-your-friends-812c134de124?source=collection_archive---------7-----------------------

在与朋友分享下一个统计数据之前,你可能需要考虑的 8 个要点

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

马库斯·斯皮斯克在 Unsplash 上的照片

随着新冠肺炎疫情事件在过去几周的展开,我们被媒体报道的确诊病例、死亡人数、死亡率等数字所淹没。不幸的是,许多报道似乎倾向于对数字的自由解释,这种解释助长了耸人听闻的说法和头条新闻,而牺牲了科学的严谨性和客观的信息传播。

我过去 15 年的大部分时间都在利用大量嘈杂的数据来构建复杂现象的数学模型:我完成了人类大脑建模的研究生学业,并在高盛(Goldman Sachs)担任过定量分析师,在脸书担任过数据科学经理。在我的职业生涯中,我一次又一次地看到,缺乏对数据来源、背景和获取方法的理解,会导致对你正在研究的现象的严重误解。媒体和社交网络上流传的最新新冠肺炎数据和解读也不例外。我想和你分享一个没有术语、不详尽的 8 要点列表,来帮助你避免这些陷阱。

8 个关键点

  • 确诊病例几乎是一个无用的独立指标,它总是低估真实的感染人数。
  • 检测到的病例数量的增加或减少直接受到正在进行的检测数量的影响
  • 报告病例数量的增加并不一定意味着更多的人被感染。
  • 除非对人群的检测是随机进行的,否则检测出的阳性病例的百分比将而不是反映受感染人群的真实百分比。
  • 死亡人数的峰值总是滞后于感染人数的峰值。
  • 病例死亡率(CFR),即检测到的病例中死亡人数的百分比,是对实际感染死亡率(IFR)的高估,并且随着检测的增加而不断降低。
  • 国与国之间的比较应该考虑到人口统计和抽样方法的差异,并以百分比为基础。
  • 一个相关且熟悉的基线让发展对数字的直觉变得更加容易。

深入讨论

绝对检出病例数大多是无用的

新闻标题中经常出现这样的内容:“检测出 1000 例新型冠状病毒”或“T2 冠状病毒病例达到 10 万例”。这些数字并不能说明疫情的进展如何,它们只是一个诱饵。原因如下:

假设一个 1000 万人口的国家有 100 万感染者,那么 10%的感染率。如果我们在第一天随机测试 5000 人(稍后会有更多),检测到的病例数将会是 500。这个数字与实际感染人数相差甚远,由于检测能力有限,确诊病例总是被低估。现在假设第二天,我们检测了 50,000 人,确诊病例总数将增加约 5,000 例。这十倍的每日增长是确诊病例的增长,而不是总感染人数的增长,并且是检测增加的直接后果

作为政府应对新冠肺炎疫情的一部分,每天将进行更多的测试,这些测试的快速增加将远远超过疫情的发展,因此确诊病例数量的变化,特别是在疫情开始时,将主要受测试数量而不是实际感染病例的影响。

更进一步,在感染高峰后,政府加强检测的情况下,T10 每日确诊病例很可能会增加,尽管感染总人数正在减少 T11。想象一下这样一种情况,测试从 5000 次增加到 10000 次,而感染率从 10%下降到 9%(一天内大幅下降),每天确诊的病例仍然会从 500 例增加到 900 例!这再次表明,在评估疫情进展时,单独的确诊病例数是多么不相关。

抽样:细节决定成败

由于在给定的一天内只能进行有限数量的测试,因此需要制定一个关于如何分配这些测试的协议。这种分配策略,在科学界也被称为抽样方法,对被报告的案例有直接影响。让我们继续我们开始的例子,假设政府可以有 2 个策略来分配 5000 个测试:

  • 策略 A:随机敲开人们的门,让他们接受测试。
  • 策略 B:只测试那些在热线上自我报告显示有新冠肺炎症状的人。

策略 B(又名偏倚抽样)将导致比策略 A(又名随机抽样)更高的报告病例数。策略 B 是有偏见的,因为它测试的是被感染的可能性高得多的亚群。现在来看看阳性检测的百分比:策略 B 将给出自报感染症状病例的百分比估计值,而策略 A 将给出总体感染率的估计值。

随着政府提高日常检测率,通常人群的抽样方法将从 B 类策略逐渐变为 A:最初,住院患者和有急性症状的人优先,但随着检测变得更加普遍,更多症状较轻的人以及最终症状很少或没有症状的人将有机会接受这些检测。随着各国积极提高他们的检测能力,越来越接近真实的人口感染率,检测呈阳性的病例的 T4 百分比通常会下降。

与此相关的是,有偏样本仍然可以用来获得我们试图测量的属性的无偏估计。这需要有正确的数据来清楚地量化样本的偏差,并根据总体人口特征进行调整。通常,如果收集到正确的数据,收集数据的组织和政府应该能够共同提供一个无偏见的估计。看到这样的努力,以避免有偏见的估计的传播,这将是伟大的。(我已经发表了一篇简短的后续文章,讨论这样一个框架会是什么样子这里

死亡人数和死亡率

正如我们前面看到的,检测人群中的所有感染是一项重要的任务。那么死亡人数呢?由于大多数新冠肺炎死亡病例是在住院治疗后发生的,在住院治疗中,检测已成为急性症状的标准,因此可以假设记录的死亡人数接近实际死亡人数。这里要注意一点:不同国家记录和归因于新冠肺炎病毒的死亡过程并不总是相同的——稍后将详细介绍。

在跟踪疫情病毒演变的背景下,死亡人数被称为**【滞后** 指标,因为死亡仅在最初感染后的几个事件中发生:感染→潜伏期→症状→恢复或死亡)世界卫生组织认为仅潜伏期就在 1 至 14 天之间。因此,如果我们在寻找感染人数的峰值,它通常会在死亡人数的峰值被报道之前大约几周出现。

让我们看看死亡率。我们应该明确区分两种不同的指标:

  • 病死率(CFR)是仅检测到的病例的病死率
  • 感染致死率(IFR)是所有感染的人的致死率(已测试&未测试)。

大多数标题中报道的数字,例如“7%的病例现已导致死亡”是 CFR,并且总是高估了真实的感染死亡率。此外,随着测试的增加,CFR 将不变地降低并更倾向于 IFR。

比较和发展对数据的直觉

我希望到目前为止,我已经成功地帮助你更好地理解了媒体上抛出的数字到底代表了什么,以及它们的局限性。在这最后一节,我想给你一些比较各国统计数据的小技巧,以及如何通过将它们联系起来获得更好的直觉。

因此,在进行国家间比较时,让我们从一些警告开始:

  • 正如整篇文章所指出的,比较原始绝对数字在大多数时候是不相关的。始终确保您看到的是比率,而不是绝对数字。例如,在一个 100,000 人口的国家中 5000 人死亡,代表了比一百万人口中 10,000 人死亡更高的死亡率。
  • 正如我在文章前面所指出的,各国将处于不同的测试阶段,这意味着这将直接影响他们的数据有多失真。
  • 各国可能会以不同的方式进行检测和记录,例如,如果没有在更早的时候进行检测,是否在死后检测新冠肺炎病毒,或者受感染者的死亡是否直接归因于新冠肺炎病毒,而不管它是否是死亡的原因。
  • 国与国之间有一些重要的因素会对这些数字产生很大的影响:比如年龄分布、总体人口健康状况以及医疗保健系统的质量

我想说的最后一点是,当你第一次试图通过指标来观察和理解一个现象时,最好是有一个合适的基线或基准来进行比较。这样会更容易获得某种直觉。例如,知道新冠肺炎是病毒流感的一个分支,使用季节性流感的死亡人数,可能是一个很好的基线,例如,假设如果没有采取缓解或遏制策略,新冠肺炎在一个地区的当前死亡人数估计为 10,000 人:如果同一地区的季节性流感死亡人数约为每年 15,000 人,这有多令人担忧?相比之下,季节性流感死亡人数约为 1000 人。

结论

我在这篇文章中试图分享一些指导方针,使读者能够避免在解读新冠肺炎疫情数据和统计数据时最常见的错误。我真诚地希望记者们也把这 8 点作为一个清单,以科学合理的方式报道数据,远离任何耸人听闻和令人恐惧的标题。世界各地的许多政府都按下了恐慌按钮,人们很焦虑,我们的医疗专业人员(衷心感谢他们所有人)在第一线,经历了地狱般的情况。在这个动荡的时代,我们需要基于事实的冷静报道。

下一篇文章将讨论在快速发展的情况下,使用理论模型和不完整数据进行关键决策的最佳实践。敬请关注。

最新文章: 我们该开始问这个难题了

关注作者 @DonRiachi

8 ML/AI 项目,让您的投资组合脱颖而出

原文:https://towardsdatascience.com/8-ml-ai-projects-to-make-your-portfolio-stand-out-bfc5be94e063?source=collection_archive---------0-----------------------

有趣的项目想法与源代码和参考文章,也附上一些研究论文。

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

来源 Unsplash ,由作者编辑

你对进入数据科学世界感到兴奋吗?
祝贺你!这仍然是正确的选择,因为在这个疫情期间,数据科学和人工智能领域的工作需求将得到最终推动。

虽然,由于危机,市场现在变得更难像以前一样用更多的劳动力重新建立起来。所以,你可能要为长期的招聘之旅和许多拒绝做好心理准备。

因此,在写这篇文章时,我假设你已经知道数据科学投资组合是至关重要的,以及如何建立它。
你可能会把大部分时间花在处理数据和争论上,而不是应用花哨的模型。

数据科学爱好者不断向我提出的一个问题是,他们应该在自己的投资组合中包含什么样的项目,以构建一个非常好且独特的投资组合。

下面,我为您的数据科学产品组合提供了 8 个独特的想法,并附上了参考文章,您可以从这些文章中深入了解如何开始任何特定的想法。

1.基于社交媒体帖子的抑郁症情感分析

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

照片由 dole777Unsplash 上拍摄

这是一个非常敏感的话题,急需解决。全世界有超过 2.64 亿人患有抑郁症。抑郁症是全球范围内导致残疾的主要原因,也是全球疾病总负担的重要支持者,每年有近 80 万人因自杀而死亡。自杀是 15-29 岁人群死亡的第二大原因。抑郁症的治疗经常被延迟、不精确和/或完全错过。

基于互联网的生活给了主要优势改变早期忧郁调解服务的机会,特别是在年轻的成年人。一直以来,Twitter 上大约有 6000 条推文,这相当于每时每刻发送超过 35 万条推文,每天有 5 亿条推文,每年约有 2000 亿条推文。

皮尤研究中心指出,72%的公众使用某种基于互联网的生活。从社交网络发布的数据集对许多领域都很重要,例如,人类科学和大脑研究。但是从专业的角度来看,这种支持还远远不够,而且显式的方法也很不走运。

通过分析社交媒体帖子中的语言标记,有可能创建一个深度学习模型,该模型可以比传统方法更早地洞察个人的心理健康。

[## 你在推特上说什么就是什么

通过 Twitter 使用检测社交媒体中的抑郁症

towardsdatascience.com](/you-are-what-you-tweet-7e23fb84f4ed) [## 抑郁症的早期检测:社会网络分析和随机森林技术

原始论文 1 西班牙 A . Coruna 大学计算机科学学院计算机科学系 2…

www.jmir.org](https://www.jmir.org/2019/6/e12554/) [## 使用机器学习技术从社交网络数据中检测抑郁症

关键词:社交网络、情绪、抑郁、情绪分析

www.ncbi.nlm.nih.gov](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6111060/)

2.基于神经网络的体育比赛视频文本摘要

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

照片由阿克什·亚达夫Unsplash 上拍摄

所以这个项目的想法基本上是基于从体育比赛视频中获得精确的摘要。有体育网站会告诉你比赛的精彩部分。已经提出了各种模型来完成提取文本摘要的任务,但是神经网络做得最好。一般来说,摘要是指在一个简短的结构中介绍信息,集中在传达事实和信息的部分,同时保护其重要性。

自动创建游戏视频的轮廓带来了区分游戏的精彩部分的挑战。

因此,可以使用一些深度学习技术来实现这一点,如 3D-CNN(三维卷积网络)、RNN(递归神经网络)、、LSTM(长短期记忆网络),也可以通过机器学习算法来实现,将视频分成不同的部分,然后应用 SVM(支持向量机)、神经网络(神经网络)、k-means 算法。

为了更好地理解,请详细参考所附文章。

[## 基于迁移学习的体育视频摘要场景分类

本文针对体育视频场景分类的特殊目的,提出了一种新的分类方法

www.mdpi.com](https://www.mdpi.com/1424-8220/20/6/1702/htm)

3.使用 CNN 的手写方程求解器

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

安托万·道特里在 Unsplash 上拍摄的照片

其中,手写数学表达式的识别是计算机视觉研究领域中令人困惑的问题之一。您可以使用卷积神经网络(CNN) 和一些图像处理技术,通过手写数字和数学符号训练一个手写方程求解器。开发这样一个系统需要用数据训练我们的机器,使它们能够熟练地学习并做出所需的预测。

为了更好的理解,请参考下面的文章。

[## 使用卷积神经网络的手写方程求解器

介绍

medium.com](https://medium.com/@vipul.gupta73921/handwritten-equation-solver-using-convolutional-neural-network-a44acc0bd9f8) [## vipul 79321/手写方程求解器

一个使用 CNN 方程的手写方程解算器可以包含从 0-9 的任何数字和符号+,x,-在图像上用…

github.com](https://github.com/vipul79321/Handwritten-Equation-Solver) [## 计算机视觉—手写数学答题卡的自动评分

将徒手写在纸上的解数学方程的步骤数字化,验证步骤并最终…

towardsdatascience.com](/computer-vision-auto-grading-handwritten-mathematical-answersheets-8974744f72dd) [## LaTeX 的手写方程式

这篇文章还是关于机器学习,而不是关于优化,但我想提一些事情…

开放源代码](https://opensourc.es/blog/he2latex/)

4.使用 NLP 生成商务会议摘要

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

塞巴斯蒂安·赫尔曼在 Unsplash 上的照片

有没有遇到过这样的情况,每个人都想看到一个摘要而不是完整的报告。我在学校和大学的时候就面临这个问题,我们花了很多时间准备一份完整的报告,但是老师只有时间看摘要。

摘要已经成为解决数据过载问题的一种不可避免的有用方法。从对话中提取信息具有很好的商业和教育价值。这可以通过对对话的对话结构的统计、语言和情感方面的特征捕捉来完成。

手动把报表改成汇总的形式太费时间了,是不是?但是人们可以依靠自然语言处理技术来实现这一点。

使用深度学习的文本摘要可以理解整个文本的上下文。对于我们所有需要快速总结文档的人来说,这难道不是梦想成真吗!!

为了更好的理解,请参考下面的文章。

[## 使用 Python 深度学习的文本摘要综合指南

“我不要完整的报告,只要给我结果的摘要”。我经常发现自己处于这种情况——两者都是…

www.analyticsvidhya.com](https://www.analyticsvidhya.com/blog/2019/06/comprehensive-guide-text-summarization-using-deep-learning-python/) [## 理解文本摘要并在 python 中创建自己的摘要器

摘要可以被定义为一项任务,即产生一个简洁流畅的摘要,同时保留关键信息和…

towardsdatascience.com](/understand-text-summarization-and-create-your-own-summarizer-in-python-b26a9f09fc70)

5.面部识别检测情绪,并相应地建议歌曲

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

照片由 Unsplash 上的 Alireza Attari 拍摄

人脸是一个人身体的重要组成部分,在了解一个人的精神状态方面尤其重要。这消除了将歌曲手动隔离或分组到各种记录中的沉闷和乏味的任务,并有助于基于个人的情感特征生成适当的播放列表。

人们倾向于根据他们的心情和兴趣来听音乐。人们可以创建一个应用程序,通过捕捉面部表情,根据用户的情绪为他们推荐歌曲。

计算机视觉是一个跨学科领域,有助于向计算机传达对数字图像或视频的高级理解。计算机视觉组件可以用于通过面部表情来确定用户的情绪。

我也发现了一些有趣和有用的 API,虽然我没有做这些,但是把它们附在这里,希望能对你有所帮助。

[## 20 多种情感识别 API 会让您印象深刻,并引起您的关注|北欧 APIs |

如果企业可以一直使用技术来感知情感,他们就可以利用技术向消费者销售…

nordicapis.com](https://nordicapis.com/20-emotion-recognition-apis-that-will-leave-you-impressed-and-concerned/)

6.从开普勒等航天器拍摄的图像中寻找可居住的系外行星

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

尼克·奥瓦尔Unsplash 上拍摄的照片

在最近的十年里,超过 100 万颗恒星被监测以识别凌日行星。人工解释潜在的系外行星候选者是劳动密集型的,容易出现人为错误,其后果很难评估。卷积神经网络适合于在嘈杂的时间序列数据中识别类地系外行星,比最小二乘法策略具有更高的精度。

[## 使用机器学习搜寻系外行星

搜寻太阳系以外的世界。

towardsdatascience.com](/exoplanet-hunting-using-machine-learning-d615958e1787) [## 人工智能,美国宇航局用于发现系外行星的数据

随着最近发现了第八颗行星,我们的太阳系现在是围绕着一颗恒星的行星数量最多的系

www.nasa.gov](https://www.nasa.gov/press-release/artificial-intelligence-nasa-data-used-to-discover-eighth-planet-circling-distant-star)

7.旧破损卷轴图片的图像再生

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

来源 Pikist

我知道,把你损坏的旧照片恢复成原来的样子是多么耗时和痛苦。因此,这可以通过找到所有图像缺陷(裂缝、磨损、孔洞)使用深度学习来完成,并使用修复算法,人们可以根据周围的像素值轻松发现缺陷,以恢复和着色旧照片。

[## 利用深度学习对旧图像进行着色和恢复

利用深度学习对黑白图像进行着色已经成为现实世界应用的一个令人印象深刻的展示…

blog.floydhub.com](https://blog.floydhub.com/colorizing-and-restoring-old-images-with-deep-learning/) [## 图像修复指南:使用机器学习来编辑和纠正照片中的缺陷

我们快照中的错误

heartbeat.fritz.ai](https://heartbeat.fritz.ai/guide-to-image-inpainting-using-machine-learning-to-edit-and-correct-defects-in-photos-3c1b0e13bbd0) [## 如何在完全无数据集的情况下执行图像恢复

深度学习需要大量的数据。这个短语在那些考虑使用深层…

towardsdatascience.com](/how-to-perform-image-restoration-absolutely-dataset-free-d08da1a1e96d)

8.使用深度学习的音乐生成

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

阿比盖尔·基南Unsplash 上拍摄的照片

音乐是各种不同频率音调的组合。因此,自动音乐生成是一个在最少人工干预的情况下创作一小段音乐的过程。最近,深度学习工程已经成为编程音乐生成的前沿。

[## 使用深度学习的音乐生成

“如果我能再活一次,我会定下一个规矩,至少读一些诗,听一些音乐……

medium.com](https://medium.com/analytics-vidhya/music-generation-using-deep-learning-a2b2848ab177) [## 如何在 Keras 中使用 LSTM 神经网络生成音乐

使用 LSTM 神经网络创作音乐的介绍

towardsdatascience.com](/how-to-generate-music-using-a-lstm-neural-network-in-keras-68786834d4c5)

一锤定音

我知道建立一个很酷的数据科学投资组合是一件非常困难的事情。但是有了我上面提供的这些,你可以在那个领域取得高于平均水平的进步。该系列是新的,这也为研究目的提供了机会。因此,数据科学的研究人员也可以选择这些想法来工作,这样他们的研究将对数据科学家开始这个项目有很大的帮助。此外,探索以前没有人做过的事情真的很有趣。虽然,这个系列实际上是由从初级到高级的想法组成的。

因此,我不仅会向数据科学领域的新手推荐这个,也会向资深数据科学家推荐。这将在你的职业生涯中开辟许多新的道路,不仅是因为项目,也是通过新获得的网络。

这些想法向你展示了广泛的可能性,并给你跳出框框思考的想法。

话虽如此,但有一个非常有趣的发现会帮助你组织你的深度学习项目。在这里,您甚至可以跟踪您的模型,评估它们的性能,以及部署它们。

对我和我的朋友来说,学习因素、为社会增加价值和未开发的知识是重要的,某种程度上的乐趣是必不可少的。所以,基本上,我喜欢做这样的项目,它给我们一种获得大量知识的方式,让我们探索未被探索的维度。这是我们致力于此类项目时的主要关注点。

我希望你们会发现这篇文章对你们有益。请在评论框中分享你对这些项目想法的想法&如果你有 any✌️,请让我知道其他很酷的想法

所以,如果我的博客帖子对你有所帮助,而你此刻觉得很慷慨,请不要犹豫,请给我买杯咖啡。☕😍

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

是的,点击我。

And yes, buying me a coffee **(and lots of it if you are feeling extra generous)** goes a long way in ensuring that I keep producing content every day in the years to come.

您可以通过以下方式联系我:

  1. 订阅我的 YouTube 频道 视频内容即将上线 这里
  2. 跟着我上
  3. 通过 LinkedIn 联系我
  4. 跟随我的博客之旅:-https://kajalyadav.com/
  5. 成为会员:-

也可以看看我的其他博客:

** [## 基于 Python 的推特情感分析预测美国总统大选

修订数据科学基础的有趣项目,从数据集创建到数据分析再到数据可视化

medium.com](https://medium.com/datadriveninvestor/predicting-us-presidential-election-using-twitter-sentiment-analysis-with-python-8affe9e9b8f) [## 用 10 个简单的步骤搜集 1000 篇新闻文章

如果你遵循这 10 个简单的步骤,使用 python 进行网络抓取是非常简单的。

towardsdatascience.com](/scraping-1000s-of-news-articles-using-10-simple-steps-d57636a49755)**

Python 中复制的 8 个流行的 SQL 窗口函数

原文:https://towardsdatascience.com/8-popular-sql-window-functions-replicated-in-python-e17e6b34d5d7?source=collection_archive---------7-----------------------

编程 | 面试 | 办公时间

关于如何在业务分析中利用 Pandas 高效复制最常用的 SQL 窗口函数的教程。

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

un splash:David Backer 的紫色建筑仰视图

更新:你们中的许多人联系我,要求在从 SQL 过渡的同时,为数据科学或数据分析学习 Python 提供有价值的资源 下面我分享 4 个我强烈推荐坚持学习的课程/平台:

希望你也会发现它们有用!现在享受这篇文章:D 这个职位包括附属链接,我可能会赚一小笔佣金,没有额外的费用给你,你应该购买。

任何致力于构建公司 KPI 或创建分析业务绩效的报告的数据分析师都知道 SQL 窗口函数是一个强大的工具。使用它们的真正优势是可以在不同的时间范围内计算许多指标,而不会影响原始数据集的粒度。这反过来意味着不需要使用多个自连接或 cte 就可以实现更多功能,从而节省大量代码。

如果到目前为止,您主要使用 SQL 来构建指标和提取见解,并且正在学习 Python,那么您可能想知道如何在 Pandas 中复制您喜爱的窗口函数。在接下来的教程中,我将展示如何利用 Python 中的窗口函数使代码更加紧凑和高效。

数据集 1

在教程的第一部分,我们将使用一个模拟的客户订单数据集,可以通过 GitHub 下载。数据集最初包括七列(订单日期、订单 ID、客户 ID、商品 ID、商品价格、数量已付金额()),但是我们还将添加订单月份,如下所示:

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

我们发现数据集包括 50 个不同的订单 id 和 8 列,但是如果我们想进一步研究它,我们可以通过运行以下命令来分析订单的分布和客户支付的金额:

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

我们可以看到,总共有四个客户,其中 customer_1 是完成订单最多( 18 )和消费金额最高( 1291.75 )的客户。请注意如何在 Python 中使用 DataFrame.groupby() 方法来实现与我们在 SQL 中通过查询末尾的列进行分组相同的结果。但是还有更多,因为这个方法也被用来复制典型的窗口函数的 over(partition by…) 子句,我们将在下面学习。

[## 排名上的 6 个 SQL 窗口函数编码问题——采访倒计时 P1

SQL 面试即将来临,您正在寻找一些具有挑战性的练习来测试您的准备情况?你是…

towardsdatascience.com](/6-sql-window-functions-coding-problems-on-ranking-interview-countdown-p1-9be0ccf66453)

Python 中的窗口函数

  1. 行号()→ Rank(method=‘first’)

SQL****Row Number()**函数,为数据集分区内的每一行分配一个连续整数。它通常用于创建一个辅助列,根据指定的分区和顺序对字段进行排序。然后,该列可用于更有效地筛选或联接数据集。**

假设我们希望根据订单日期按客户对订单进行排序,从最近的订单开始。为了在 SQL 中实现这一结果,我们可以编写:

**row number() over(partition by customer_id order by order_date)**

对于熊猫,同样的结果可以通过应用 来实现。rank(method = ’ first ')函数对按订单日期筛选的 GroupBy 对象执行操作,以创建行号列:

我们可以验证 customer_1 确实完成了 18 个订单,其中第一个订单发生在 2019–02–13(row num = 1),最后一个订单发生在 2020–04–25(row num = 18)。因为我们是按客户 ID 进行划分和排序的,一旦所有 18 个订单都被排序,该函数将开始对 customer_2 的订单进行排序:

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

问题 1: 如果我们想按降序(从最近到最早的顺序)分配行号会怎样?

这很简单,因为尽管代码中没有显示,pandas rank(method = …) 函数有一个 升序 参数,默认设置为 true 。通过将其设置为,我们将颠倒等级的分配方式:

****orders.groupby([‘Customer ID’])[‘Order Date’].rank(method=’first’, ascending = False)****

问题 2: 如果我们想按多列(如客户 ID 和订单月份)进行分区,该怎么办?

在这种情况下,我们只需要将首选字段添加到 GroupBy 对象中:

****#SQL Syntax
row number() over(partition by customer_id, order_month order by order_date)****#Python Syntax
orders.groupby([‘Customer ID’, 'Order Month'])[‘Order Date’].rank(method=’first')****

#2。Rank() → Rank(method=‘min’)

****SQL RANK() 函数,为结果集分区内的每一行分配一个等级。与 ROW NUMBER()不同,等级不是连续的,这意味着一个分区内共享相同值的行将获得相同的等级。使用与上面相同的示例,SQL 语法将是:

****rank() over(partition by customer_id order by order_date)****

而它在 Python 中的对应物是:

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

因为 customer_1 在 2019–02–21 执行了两个订单,这两个订单都被分配了 rank = 3,下面的订单被分配了 rank = 5,那么完全跳过 rank = 4。如果我们必须使用 SQL rank()窗口函数,这正是我们将得到的排名类型。

#3。dense _ Rank()→Rank(method = ’ dense ')

如果我们想避免排名值的差距,我们应该使用 SQL dense_rank() 函数。实际上,与 rank() 函数不同,使用 dense_rank() 会返回连续的等级值。在我们的例子中,SQL 语法应该是:

****dense_rank() over(partition by customer_id order by order_date)****

而在 Python 中,我们只需要在 rank() 函数 : 中将 method=‘min’ 替换为 method=‘dense’

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

不出所料, customer_1 于 2019_02_23 执行的订单现在已被分配 rank = 4 ,,尽管它是客户在分析期间的第 5 个订单。

总结一下我们到目前为止所学的内容:尽管在 SQL 中有 3 个不同的函数来计算数字数据的等级,但在 pandas 中,我们只需要使用 rank() 函数和方法(‘first’,【min’,【dense’)以及升序( TrueFalse )参数来获得想要的结果

#4。Sum(…) over(partition by … order by…前面无界的行)→ cumsum()

我们现在希望计算每个月每个客户支付金额的累计金额,按订单日期排序。这种计算也被称为 运行总数 ,它可能是商业分析中最常用的指标之一。在 SQL 中实现这一点的一种方法是:**

*****sum(amount_paid) over(partition by customer_id, order_month order by order_date rows unbounded preceding)*****

上面的语法并不是最有效和最直观的:有相当多的代码要写,如果我们希望按 order_date 排序,我们还必须包括 rows… 子句来计算所选窗口中的累积和而不是总和。

这是 Python 因其简洁而大放异彩的情况之一,为了达到与上面相同的结果,我们只需要编写:

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

正如预期的那样, Run Tot ( ) 列显示每个客户在一个月内支付的金额()的累进总和,该行对应于该月内的最后一个订单,最终显示该客户在该月的总消费金额。

#5。avg(…)over(partition by…)→transform(NP . mean)

以类似的方式,我们可能还希望计算每个客户每月花费的平均金额。这一次,SQL 语法非常直观:

*****avg(amount_paid) over(partition by customer_id, order_month)*****

然而,详细阐述 Python 解决方案是值得的:

我们之所以使用 pandasdata frame . transform()函数,是因为它允许我们在 GroupBy 对象上计算均值后,保持序列的长度等于原始数据集的长度。这种方法让我们得到了想要的结果:

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

数据集 2

在本教程的第二部分,我们将使用 yfinance 包从雅虎财经获取 AAPLAMZN 股票调整收盘价。我们应该已经在一开始就导入了它,但是如果不是这样,我们现在可以通过运行以下命令来完成:

*****!pip install yfinance # <-- to install the package
import yfinance as yf****aapl = yf.download(“AAPL”, start=”2020–04–20", end=”2020–04–30").resample(‘D’).ffill()****amzn = yf.download(“AMZN”, start=”2020–04–20", end=”2020–04–30").resample(‘D’).ffill()*****

使用上面的代码,我们还使用 yf.download() 方法为2020–04–202020–04–30期间创建了两个新数据集( aaplamzn )。为了将周末和节假日包括在内,数据被重新采样,缺失的股票价格被替换为之前最近的调整收盘价格观察值。对数据集进行了额外的操作(GitHub中提供了全部代码),这些数据集最终被合并到股票数据框架中:****

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

#6 超前/滞后(返回值,偏移)→移位(n)

使用股票数据集,我们现在希望计算 DoDWoW adj . Close Price % Change并通过保持数据帧长度不变来做到这一点,我们需要一个函数来访问当前行之前特定物理偏移量处的行。在 SQL 中,该窗口函数被命名为 lag() ,在我们的示例中,其语法如下:****

***#Retrieves the stock price located 1 row back from the current row
**lag(adj_close, 1) over(partition by symbol order by date)**#Retrieves the stock price located 7 rows back from the current row
**lag(adj_close, 7) over(partition by symbol order by date)*****

****重要提示:因为我们已经对其进行了重新采样,我们的数据集现在有了每日粒度, 这意味着要获得昨天的股票价格,我们只需向后移动一行,而要获得上周同一天记录的股票价格,我们只需向后移动 7 行。如果我们把周末和假期排除在外,这些计算就不会这么简单了。

****在 Python 中,我们可以通过对 GroupBy 对象(按 符号 分组,并按 Adj. Close 过滤)应用 shift() 函数来创建 Lag1Lag7 列,从而获得相同的结果。注意,因为我们希望分别向后移动 1 行和 7 行(我们的数据集有一个降序),shift()函数将一个负整数 作为参数:

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

我们可以看到, shift( n ) 函数已经正确地应用于每只股票,因此在第一个观察日期(2020–04–20),在没有先前价格的情况下,显示 NaN 值。同样,Lag7 列中显示的第一个有效值出现在第一个观察日期(2020–04–27)之后 7 天。

到目前为止,我们只是设法检索滞后的股票价格,而不是计算百分比变化。为了做到这一点,我们可以应用公式:

*****[(Adj Close / Lag1) - 1] x 100 <-- DoD % Change****[(Adj Close / Lag7) -1] x 100 <-- WoW % Change*****

或者使用pct _ change(n)函数来计算变动的股票价格,并返回它们的变化百分比:

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

为了简洁起见,在本教程中我们不会展示一个使用 lead() 函数的等价示例,但是很容易猜到唯一真正的变化是分配给 shift()pct_change() 函数的整数的符号。请记住,数据集的排序方式会影响应该传递给函数以获得预期结果的符号。

#7。第一个/最后一个值()→ rank(method ='first ',ascending = True/False) == 1

first value()last value()窗口函数用于在数据集的有序分区中检索第一行或最后一行的值。让我们假设我们想要找到AAPL 股票每月第一个和最后一个可获得的可调收盘价。我们将使用的修改后的 aapl 数据集的前 10 行如下所示:****

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

访问我的 GitHub 账户获取完整代码

我们处理 SQL 查询的方式是:

*******#The aapl dataset includes prices for one stock only, therefore the #partition is just applied on order_month****first value(adj_close) over(partition by order_month order by date)****last value(adj_close) over(partition by order_month order by date)*******

在 Python 中,并不存在与 first/last value() 完全相同的函数,但是可以通过使用 Pandasrank(method = ’ first ')函数对分区中的值进行排序,然后只返回 rank = 1 的值,从而获得类似的结果。根据我们如何在 rank()函数中设置升序参数,rank = 1 的值将与分区中的第一个或最后一个值匹配。****

尽管不是特别有挑战性,但这个过程还是有点麻烦,因为我们最终需要回填或前填整个分区的第一个或最后一个值,以获得想要的结果:

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

2020–03–162020–04–14期间有效,三月份 AAPL 的第一个(或最近的)可用调整收盘价为 242.2 美元(排名 Asc = 1 ),最后一个(或最近的)为 254.3 美元(排名 Desc = 1 )。类似地,在 4 月,AAPL 的第一个可用的 Adj. Close 价格是 240.9 美元,最后一个是 287 美元。

#8。Avg(…) over(partition by … order by…前 n 行和当前行之间的行)→滚动(window = …)。平均值()

我们在本教程中要复制的最后一个窗口函数是一个移动平均值。移动平均线是更一般函数的特例:****

*******avg(return_value) over()*******

至于在 SQL 中计算它,我们需要声明一个 rows … 子句(就像我们对运行总数所做的那样)。例如,如果我们想用 SQL ( 假设数据集按升序排列)计算 AAPL 调整收盘价的 7 天移动平均值,我们应该写:

*******avg(adj_close) over(order by date rows between 6 preceding and current row)*******

rows … 子句中,我们简单地说明了我们希望在计算平均值时包括最近的观察值,因此我们只需要前面的 6 条记录就可以得到 7 天的窗口。对于更有经验的分析师来说,这些概念可能看起来微不足道,但是在新手中可能会引起混乱。

幸运的是,用熊猫计算移动平均数是一件真正令人愉快的事情,因为我们只需要创建一个滚动对象(指定所需的 窗口 ),然后对其应用 mean() 函数。或者,我们也不妨计算一下 ,这本身就是移动平均线的一个特例:****

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

实际上,这两个指标的区别在于当我们对滚动的对象应用函数时,窗口大小保持不变,而对于扩展的对象,窗口保持增长。使用扩展窗口背后的逻辑是,随着每一天的过去,我们都会观察到一个新的价格,可以添加到我们的均值计算中。这是我们希望包含在计算指标中的新信息。

结论

在这篇文章中,我们学习了如何使用 Pandas 在 Python 中复制 8 个流行的 SQL 窗口函数。如果您正在从事分析工作,那么您现在应该已经准备好使用 SQL 或 Python 来构建 KPI 以监控性能。在这两种语言中,当然有多种方法可以达到相同的效果,因此请在回复部分分享您的经验。希望你喜欢这篇教程,并期待下一篇!

我的读者请注意

这个帖子包括附属链接,如果你购买的话,我可以免费给你一点佣金。

您可能还喜欢:

***** [## 在你开始第一个项目之前,要掌握 15 个 Git 命令

您需要掌握的最后一个 Git 教程是命令行版本控制。

levelup.gitconnected.com](https://levelup.gitconnected.com/15-git-commands-you-should-learn-before-your-very-first-project-f8eebb8dc6e9) [## 使用 Python 连接到数据库时使用环境变量隐藏密钥:简要教程

环境变量可用于在连接到数据库时隐藏您的秘密细节。了解如何在这个快速…

medium.com](https://medium.com/@anbento4/connect-to-databases-using-python-and-hide-secret-keys-with-env-variables-a-brief-tutorial-4f68e33a6dc6)*****

数据科学家不应错过的 8 个 Python 迭代技巧

原文:https://towardsdatascience.com/8-python-iteration-skills-that-data-scientists-shouldnt-miss-out-6b57fb35e00f?source=collection_archive---------19-----------------------

您想知道的常见有用迭代技巧的回顾

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

弗拉德·沙波奇尼科夫Unsplash 上拍摄的照片

我们的程序做的一个主要的自动操作是为我们重复特定的任务。这通常使用 for 循环来实现,其最基本的形式如下:

for item in iterable:
    # Your tasks go here

理论上,我们可以利用基本形式来解决所有与迭代相关的需求,但是在许多情况下,如果我们利用 Python 提供的现有功能,我们的代码会变得更加简洁。在本文中,我想回顾一下我们在进行数据科学项目时应该考虑的 8 种有用的技术。

为了说明这些技术的有用性,我将它们与只使用最基本形式的代码进行对比。从这些比较中,您可以看到代码可读性的显著提高。

1.使用 enumerate()跟踪迭代

假设我们需要跟踪迭代的计数。换句话说,我们想知道我们已经迭代了多少次循环。在这种情况下,我们应该考虑enumerate()函数。

使用枚举()

  • 要获得序列中项目的索引,基本方法包括创建一个 range 对象,因为典型方法(即for item in iterable)没有与索引相关的信息。尽管我们可以使用带有列表的index()方法来查找索引,但默认情况下,它会返回第一个找到的元素的索引。因此,当有重复的项目时,它会给出非预期的信息。
  • enumerate()函数创建一个枚举对象作为迭代器。它可以带一个可选参数start,指定计数器的开始。默认情况下,它从 0 开始计数。在我们的例子中,我们从 1 开始计算第一个渲染元素。如你所见,enumerate()函数直接给出了计数器和元素。

2.将 Iterables 与 zip()配对

当我们有几个可重复项,并且需要从这些可重复项的相同位置检索项目时,我们应该考虑zip()函数,如本例所示。

使用 zip()

  • 为了获得相同索引处的元素,我们使用range()函数创建索引,就像我们在上一节中所做的那样。使用索引从每个 iterable 中检索元素有点乏味。
  • zip()函数可以连接多个 iterable,并且在每个循环中,它产生一个 tuple 对象,该对象包含来自相同索引处的每个 iterable 的元素。我们可以解包元组对象来非常方便地检索元素。代码看起来干净多了,不是吗?
  • 另一件需要注意的事情是,zip()函数将压缩匹配其中最短可迭代对象的可迭代对象。如果你想让压缩匹配最长的可重复项,你应该使用 itertools 库中的zip_longest()函数。

3.使用 reversed()进行反向迭代

当需要以逆序迭代一系列元素时,最好使用reversed()函数。假设学生在稍微不同的时间到达教室,您想使用相反的顺序检查他们的作业,即第一个到达的学生最后被检查。

使用反转()

  • 如果您坚持使用range()函数,您将使用序列的反向索引。换句话说,我们用-1 来表示列表的最后一项,依此类推。
  • 或者,我们可以使用[::-1]反转列表,然后迭代新创建的列表对象。
  • 最好的方法就是简单地使用reversed()函数。这是一个非常灵活的函数,因为它可以接受其他序列数据,如元组和字符串。

4.带过滤器的过滤器元件()

您不需要总是使用 iterable 中的所有项目。在这些情况下,我们通常可以在应用所需的操作之前检查项目是否满足特定的标准。这样的条件评估和所需迭代器的创建可以很容易地集成到一个函数调用中— filter()。让我们来看看它是如何与典型的方式进行比较的。

使用过滤器()

  • 典型的方法包括评估每个元素。
  • filter()函数将计算元素,同时将元素呈现为迭代器。换句话说,该函数返回一个迭代器,这样就可以在 for 循环中使用它。
  • 根据您的需要,您可以考虑其他过滤函数,例如 itertools 库中的filterfalse(),它执行相反的操作(即保留那些评估False的函数)。

5.Chain Iterables 与 Chain()

在上一节中,我们已经讨论了如何使用zip()函数处理多个可重复项,对于这一点,您可以认为我们在垂直方向上连接了可重复项。如果想首尾相连,应该使用 itertools 库中的chain()函数。具体来说,假设您有多个可迭代对象,您想要依次迭代它们中的每一个,这是chain()函数的最佳用例。

使用链条()

  • 典型的方法是手动连接 iterables,比如使用一个中间列表。如果你使用其他的可重复项,比如字典和集合,你需要知道如何连接它们。
  • chain()函数可以链接任意数量的可迭代对象,并生成另一个迭代器,从每个可迭代对象中顺序产生元素。您不需要管理保存这些元素的另一个临时对象。

6.迭代字典

字典是一种非常常见的数据类型,它以键值对的形式存储数据。因为使用散列实现,所以从字典中查找和检索条目非常快,因此它们是许多开发人员最喜欢的数据结构。键值对的存储为我们迭代字典提供了不同的选择。

迭代字典

  • 要迭代这些键,我们只需在 dictionary 对象上使用keys()方法。或者,我们可以只使用 dictionary 对象本身作为 iterable,这只是由keys()方法创建的 view 对象的语法糖。
  • 为了迭代这些值,我们将只使用values()方法。
  • 为了以键值对的形式迭代条目,我们将使用items()方法。
  • 值得注意的是,这些方法创建的对象是字典视图对象,这与 SQL 视图非常相似。换句话说,当 dict 对象被更新时,这些视图对象也会被更新,下面显示了一个简单的例子。

字典视图对象

7.将理解视为选择

如果迭代的目的是从 iterable 中创建一个新的 listdictionaryset object,我们应该考虑理解技术,它更具性能,也更简洁。

(听力或阅读)理解测试

  • 列表理解具有以下格式:[expr for item in iterable],与 for 循环相比,这是创建列表对象的首选方式。
  • 字典理解有以下格式:{key_expr: value_expr for item in iterable}。类似地,这是从可迭代对象创建一个字典对象的首选方式。
  • 集合理解具有以下格式:{expr for item in iterable},这是从 iterable 创建集合对象的首选方式,与 for 循环相比。

8.考虑 else 子句

最后但同样重要的是,要考虑在 for 循环中使用 else 子句。应该注意的是,这并不是最直观的技术,因为许多人甚至不知道 for 循环中的 else 子句的存在。下面的案例向您展示了一个微不足道的例子。

For 循环中的 Else 子句

与一些人的错误想法不同,在常规情况下, else 子句中的代码将遵循 for 循环运行。但是,如果执行中遇到任何break语句,将会跳过 else 子句中的代码。如第一个函数调用所示,没有执行 else 子句。

结论

在本文中,我们回顾了除了 for 循环的基本形式之外,我们可以考虑在 for 循环中使用的八种技术。应用这些技术可以让你的代码更加简洁,性能更好。

感谢你阅读这篇文章。

防止过度拟合的 8 个简单技巧

原文:https://towardsdatascience.com/8-simple-techniques-to-prevent-overfitting-4d443da2ef7d?source=collection_archive---------5-----------------------

当模型对训练数据表现良好,但对看不见的数据概括较差时,就会发生过度拟合。过拟合是机器学习中非常普遍的问题,并且已经有大量的文献致力于研究防止过拟合的方法。在下文中,我将描述八种简单的方法,通过在每种方法中只引入一种对数据、模型或学习算法的改变来减轻过度拟合。

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

目录

1。坚守
2。交叉验证
3。数据扩充
4。特征选择
5。L1 / L2 正规化
6。移除层数/每层单元数
7。辍学
8。提前停止

1.拒绝(数据)

我们可以简单地将数据集分成两组:训练和测试,而不是使用所有的数据进行训练。常见的拆分比例是 80%用于培训,20%用于测试。我们训练我们的模型,直到它不仅在训练集上表现良好,而且在测试集上也表现良好。这表明了良好的泛化能力,因为测试集表示未用于训练的看不见的数据。然而,这种方法需要足够大的数据集来训练,即使在分割之后。

2.交叉验证(数据)

我们可以将数据集分成 k 个组(k 重交叉验证)。我们让其中一个组作为测试集(请参见保留说明),其他组作为训练集,重复这个过程,直到每个单独的组都被用作测试集(例如, k 重复)。与保留不同,交叉验证允许所有数据最终用于训练,但在计算上也比保留更昂贵。

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

3.数据扩充(数据)

更大的数据集将减少过度拟合。如果我们无法收集更多数据,并且受限于当前数据集中的数据,我们可以应用数据扩充来人为增加数据集的大小。例如,如果我们正在为图像分类任务进行训练,我们可以对我们的图像数据集执行各种图像变换(例如,翻转、旋转、重新缩放、移位)。

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

4.特征选择(数据)

如果我们只有有限数量的训练样本,每个样本都有大量的特征,我们应该只选择最重要的特征进行训练,这样我们的模型就不需要学习这么多的特征,最终会过度拟合。我们可以简单地测试不同的特征,为这些特征训练单独的模型,并评估泛化能力,或者使用各种广泛使用的特征选择方法之一。

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

5.L1 / L2 正则化(学习算法)

正则化是一种技术,用于限制我们的网络学习过于复杂的模型,这可能因此而过度拟合。在 L1 或 L2 正则化中,我们可以在成本函数上添加惩罚项,以将估计的系数推向零(并且不取更多的极值)。L2 正则化允许权重向零衰减,但不衰减到零,而 L1 正则化允许权重衰减到零。

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

6.移除层数/每层的单位数(模型)

正如在 L1 或 L2 正则化中提到的,一个过于复杂的模型更有可能过度拟合。因此,我们可以通过删除层来直接降低模型的复杂性,并减小模型的大小。我们可以通过减少全连接层中神经元的数量来进一步降低复杂性。对于我们的任务,我们应该有一个复杂的模型来充分平衡欠适应和过适应。

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

7.辍学(模型)

通过对我们的层应用 dropout(一种正则化形式),我们以设定的概率忽略了网络单元的子集。使用 dropout,我们可以减少单元之间的相互依赖学习,这可能会导致过度适应。然而,对于 dropout,我们需要更多的纪元来使我们的模型收敛。

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

8.提前停止(模型)

我们可以首先为任意大量的时期训练我们的模型,并绘制验证损失图(例如,使用排除)。一旦验证损失开始降低(例如,停止降低而是开始增加),我们停止训练并保存当前模型。我们可以通过监控损失图或设置早期停止触发器来实现这一点。所保存的模型将是在不同训练时期值之间进行概括的最佳模型。

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

您已经到达文章末尾!希望你现在有一个工具箱的方法来对抗过度适应⚔️.

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

为你完成这篇文章向你致敬,我希望你喜欢它🎩*。如果你对更多与 ML 相关的话题感兴趣,也可以查看一些由* Tim :)撰写的有趣文章。

*订阅?*🙂

更好的数据可视化的 8 个技巧

原文:https://towardsdatascience.com/8-tips-for-better-data-visualization-2f7118e8a9f4?source=collection_archive---------10-----------------------

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

照片由爱德华·豪威尔Unsplash 拍摄

改善你的地图的实用建议

G gplot 是 R 的首要数据可视化包。它的流行可能归因于它的易用性——只需几行代码,您就能制作出非常棒的可视化效果。这对于刚刚开始 R 之旅的初学者来说尤其重要,因为只用两行代码就可以创建可视化的东西,这非常令人鼓舞:

ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width)) +
  geom_point()

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

上述代码的输出

在本文中,我想强调 ggplot 的灵活性和可定制性。Matplotlib 和 Seaborn(都是 Python)和 Excel 等替代品也很好用,但是可定制性较差。在这篇文章中,我将通过 8 个具体步骤来改善你的 ggplot。

为了确保本文中的建议切实可行,我将遵循两个主题:

  1. **假设读者对 ggplot 有所了解:**如果你理解了上面的代码,你应该会很好。如果您不熟悉 ggplot,我将尽量使这些提示与语言无关,因此如果您使用 base R、Python 或其他可视化工具,这些提示可能仍然有用。
  2. **易于理解:**如果您想自己运行示例代码,您所需要的只是 R 和 tidyverse。不需要外部数据集,因为我们将使用 ggplot 中包含的diamonds数据集。

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

来源:https://ggplot2.tidyverse.org/reference/diamonds.html

1.主题是你最好的朋友

主题控制所有非数据显示,是改变图形外观的一种简单方法。为了做到这一点,只需要一行额外的代码,ggplot 已经有了 8 个独立的主题。

ggplot(data = diamonds, aes(x = Sepal.Width, y = Sepal.Length)) + 
  geom_point() + 
 **theme_bw()**

ggplot 主题很简单。它们不会真的突出,但是它们看起来很棒,容易阅读,并且能表达重点。同样,如果你想反复使用同一个主题,你可以用一行代码设置一个全局主题,它将适用于所有的 ggplots。

# Set global themetheme_set(theme_bw())

关于 8 个主题的全部细节,你可以访问 这个链接

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

ggplot 主题,比较

**主题也是超级可定制的。**除了 ggplot 自带的 8 个主题,你还可以制作自己的主题,但更重要的是使用其他人已经创建的主题。在我工作过的几个公司里,我们都有内部的 ggplot 主题。例如,我在脸书公司帮助设计了theme_fb(),公司的设计师为它提供了意见。

如果你想在 ggplot 之外使用一些其他的主题,最流行的包是 ggthemes,它有一些有趣的选项,比如theme_fivethirtyeight(), theme_wsj(), and theme_economist()。下面是这些主题的一个例子,但是我绝对推荐查看 这个链接 来了解更多。

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

ggthemes,比较

2.刻面是一种超能力

在可视化数据时,您总是要考虑的一件事是您想要显示多少维度的数据。大多数图表通常只需要 1-2 维的数据就可以得到一个点,例如:

  • 散点图上篮球运动员的身高 x 体重
  • 柱状图上洛杉矶湖人队球员的身高

随着维度数量的增加,一张图会变得更加混乱,这使得一个点更难被理解。例如:

  • 散点图上篮球运动员的身高 x 体重,但是 30 支球队中的每支球队都有不同的颜色点。这将很难阅读,因为您需要 30 种不同的颜色来代表不同的团队,以及一个列出所有团队名称的图例。

这就是刻面的魅力所在。**如果我们不必局限于一个图会怎么样?**我的假设是,为什么我们中的许多人会有这种想法,是因为我们习惯于在 Excel 中可视化数据,我们被限制在一个单一的图表中。在 ggplot 中,我们可以打破这种思维模式,只需要一行代码就可以做到。刻面使我们能够轻松地在可视化中添加两个额外的维度。

让我们探索如何使用刻面来可视化钻石数据。

基本上,我们可以查看钻石的克拉数与其价格之间的关系,这是本数据集的主要目的:

ex2 <- 
  diamonds %>%
  sample_n(5000) %>%
  ggplot(aes(x = carat, y = price)) +
  geom_point()ex2

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

这张图只显示了两个维度的数据,但还有一些其他的数据也很重要。钻石的切割、颜色和净度——所有这些都可能与钻石的价格有关。引入这些维度的一个方法是让点有不同的颜色或者使用不同的点形状,但是让我们试试刻面。

如果您只想通过单一尺寸分解图形,请使用facet _ wrap():

ex2 +
  **facet_wrap(~cut)**

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

如果您想通过二维分解图形,请使用facet _ grid():

ex2 +
  **facet_grid(color~cut)**

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

这只是如何使用facet_wrap()facet_grid()的两个例子,但是从这一节中得到的关键是,使用 ggplot,您不会局限于在单个图形中考虑可视化。

3.颜色!

颜色在数据可视化中有两个主要用途:

  1. 使可视化更有吸引力
  2. 表示数据的另一个维度

有很多方法可以给你的 gg 图上色,但是为了简单起见,这一节主要介绍绿色调色板,这是我个人最喜欢的颜色,因为它们是:

  • **丰富多彩:**跨越尽可能宽的调色板,使差异显而易见
  • **感知一致:**表示彼此接近的值具有相似的外观颜色,而彼此远离的值具有更多不同的外观颜色,在整个值范围内保持一致
  • **对色盲具有鲁棒性:**因此上述特性适用于患有常见色盲的人,也适用于灰度打印

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

来源:https://cran . r-project . org/web/packages/viridis/vignettes/intro-to-viridis . html

你可以在这里 **,**阅读更多关于上面 颜色背后的理论,但是这一节主要讲的是允许你使用这些颜色的 4 个关键功能:

  • scale_color_viridis_d() & scale_fill_viridis_d():将此语句添加到您的 ggplot,以便在离散/分类变量上着色/填充您的图形。(注意功能末尾的“d”)
  • scale_color_viridis_c() & scale_fill_viridis_c():将此语句添加到您的 ggplot 中,以便在连续变量上着色/填充您的图形。(注意功能末尾的“c”)
# Discrete
ggplot(data = diamonds %>% sample_n(1e3), 
         aes(x = carat, y = price,
             color = cut)) + 
  geom_point() +
 **scale_color_viridis_d()**

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

# Continuous
ggplot(data = diamonds %>% sample_n(1e3), 
       aes(x = carat, y = price,
           color = depth)) + 
  geom_point() +
 **scale_color_viridis_c(option = 'A')**

Protip: 这里,我使用option参数来改变 viridis 中的调色板。您可以在选项 A-E 之间切换,这些选项反映了上面的不同配色方案。

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

4.颜色与填充:了解区别

我在上一节中介绍了这一点,但我想更明确地解决它,因为当您第一次使用 ggplot 时,它可能会令人困惑。要给 ggplot 着色,您可以使用colorfill,这取决于图形类型。

那么有什么区别呢? 一般来说,fill定义了一个几何体填充*(即geom_bar())的颜色,而颜色定义了一个几何体勾勒*(即geom_point())的颜色。**

**ggplot(data = diamonds, aes(x = price)) +
  geom_histogram(color = 'blue',
                 fill = 'red')**

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

因此,这里的要点是,如果你试图给一个图形着色,但看起来没有任何变化,只需将color切换到fill,反之亦然。

阅读更多关于 StackOverflow.)

5.给它贴上标签

好的可视化有简洁和描述性的标签。它们帮助读者理解他们所看到的,如果你希望你的视觉化图像被分享,这尤其重要。幸运的是,它在 ggplot 中非常容易标记。

****以下是 ggplot 最有用的标签功能,按使用频率列出。您可以挑选想要使用的标签,例如,如果您只想添加标题,您只需在labs()中输入标题参数。

**ggplot(data = diamonds %>% sample_n(1e3), 
       aes(x = carat, y = price, color = cut)) + 
  geom_point() +
 **labs(title = 'title example',
       x = 'x-axis example',
       y = 'y-axis example',
       color = 'color example',
       subtitle = 'subtitle example',
       caption = 'caption example',
       tag = 'tag example')****

注: 只有当您的 ggplot 中有一种颜色作为美感时,才可以访问色域。无论你使用填充、颜色、大小、alpha 等等,这种标记方法都是有效的。

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

6.线条注释

在用你的视觉化来讲述一个故事的主题上,线条注释是一个非常有用的工具。我个人用过的一些例子包括:

  • 在线图中标记前/后时段
  • 在散点图上绘制 x 或 y 值的平均值
  • 注释我们想要达到的目标度量

无论什么用例,拥有一个线注释都有助于向那些将查看您的可视化的人传达一个重要的观点。要在 ggplot 中添加一条线,您可以使用:

  • geom_hline(): 添加一条水平线(有 y 截距)
  • geom_vline(): 添加一条垂直线(有一个 x 截距)

下面的例子将展示这两者的作用:

**ggplot(data = diamonds %>% sample_n(1e3), 
       aes(x = carat, y = price, color = cut)) + 
  geom_point() +
 **geom_hline(data = . %>% summarise(y = mean(price)),
             aes(yintercept = y)) +
  geom_vline(data = . %>% summarise(x = mean(carat)),
             aes(xintercept = x))****

请注意,上面的代码看起来可能比本文中的其他一些 ggplot 代码要复杂一些。我会试着解释那里发生了什么。为了得到平均克拉数和价格,一个更直接的方法是在你的 ggplot 代码之前计算它们。然而,因为我很懒,喜欢减少变量的数量,所以我将数据(diamonds %>% sample_n(1e3))直接传输到geom_line()语句中,这样也能很好地工作。

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

7.文本注释

除了线条之外,在图表中添加一些数据标签也是很有用的。然而,只有当你的数据标签易于阅读时,它才有用。例如,如果您盲目地应用文本 geom,您最终会得到一个非常难看的图形:

**p <- 
  ggplot(data = diamonds %>% sample_n(1e3), 
       aes(x = carat, y = price, color = cut)) + 
  geom_point()p + 
 **geom_text(aes(label = price))****

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

这很糟糕

在这一部分,我将谈谈有效使用geom_text()的三个关键技巧。

  1. ****过滤显示哪些标签:你可以发挥创意,但这样做的目的是只显示相关的数据标签。在下面的例子中,我只想显示高克拉钻石的价格:
**p + 
 **geom_text(data = . %>% filter(carat >= 2.25),
            aes(label = price))****

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

请注意,现在更容易阅读了,只显示了几个价格

2。hjust + vjust

在上面的图中,你会看到文本完全覆盖了点,看起来很丑。您可以通过在 geom_text()内对齐文本来轻松解决此问题。我认为这类似于微软 Word 中的左右对齐。

通常,vjust 和 hjust 的范围是从[0,1]开始,但它也接受负值和大于 1 的值(它只会在指定的方向上进一步移动标签)。下图显示了如何根据 hjust 和 vjust 值对齐文本:

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

**p + 
  geom_text(data = . %>% filter(carat >= 2.25),
            aes(label = price),
           ** hjust = 0,
            vjust = 0)****

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

3。颜色

这更多的是一种偏好,但是要知道你可以改变文本的颜色。你通常希望你的文本尽可能与背景形成对比,因为这样最容易辨认。如果您有一些较浅的颜色(如黄色)可能难以阅读,这一点很重要:

**p + 
  geom_text(data = . %>% filter(carat >= 2.25),
            aes(label = price),
            hjust = 0,
            vjust = 0,
          **  color = 'black')****

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

**# Another example where we add contrastdiamonds %>%
  group_by(clarity) %>%
  summarise(price = mean(price)) %>%
  ggplot(aes(x = clarity, y = price)) +
  geom_bar(stat = 'identity') +
  geom_text(aes(label = round(price, 2)),
            vjust = 1.25,
           ** color = 'white')****

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

8.秩序,秩序,秩序!

最后,对图表进行排序可以使其更容易阅读,这对于条形图尤其有用。你所要做的就是在 x 值上使用fct_reorder(),这样它就按照 y 值排序了:

**# By default, ggplot will order by the x valuediamonds %>%
  group_by(clarity) %>%
  summarise(price = mean(price)) %>%
  ggplot(aes(x = clarity, y = price)) +
  geom_bar(stat = 'identity')**

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

**# Reordered:diamonds %>%
  group_by(clarity) %>%
  summarise(price = mean(price)) %>%
  ggplot(aes(x = **fct_reorder(clarity, price)**, y = price)) +
  geom_bar(stat = 'identity')**

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

总结想法

我很难决定我想在这篇文章中涵盖哪些不同的主题。我最终专注于最初令我困惑的主题,我希望我在刚开始学习 ggplot 时能理解更多。希望这篇文章能给你一些关于如何改进可视化的具体想法,或者揭开 ggplot 一些更令人困惑/隐藏的方面。

初级数据分析师的 8 个技巧

原文:https://towardsdatascience.com/8-tips-for-the-junior-data-analyst-afdaea0eb91f?source=collection_archive---------60-----------------------

办公时间

祝贺你!你最近获得了第一份数据分析师的工作!作为一名过去几年的数据分析师,在您开始新的分析师职业生涯时,我想与您分享一些技巧。

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

活动创作者Unsplash 上拍摄的照片

1)充分了解客户的需求

当你收到客户的请求时,无论是新的报告/具体的分析/项目,都要理解为什么客户会有这样的请求。他到底在寻找什么?了解更大的图片。如果需要,不要不好意思问很多问题,直到你完全理解为止。准确理解他的需求是你工作的一大部分。通过理解工作的价值,它还会帮助你感受到更多与工作的联系。

2)有时你最清楚,提供替代方案

你的顾客可能认为他知道自己需要/想要什么,但有时你最清楚。问一些尖锐的问题,你需要这个做什么?你真的需要这个吗?你确切了解了他需要什么之后,想想替代方案。有没有一个现有的解决方案可以让你适度满足他的需求?技术上的最佳解决方案是什么?提供你认为最好的解决方案。

3)始终尝试自动化您的流程

分析师的部分工作有时包括“繁重的工作”,大量的复制和粘贴 excel 等。然而,在某些情况下,您可以选择来使流程更加自动化。总是寻找更好的自动解决方案。例如——不要在 excel 中做很多你下次无法复制的动作,试着把它放在一个查询表单中。试着从大处着眼——整个数据处理运行不顺畅怎么办?有哪些可以改进的地方

4)“保存您的查询”

尽可能做好记录。总是认为同样的问题会在几周后出现。您会希望轻松访问您所做的事情。例如-在 excel 中添加一个 SQL 表。在长查询中添加注释。甚至你发的邮件——写得非常清楚。添加一个额外的句子,只是为了适当地记录,这样当你或另一个人读回来的时候,就会很清楚了。

5)思考你的下一步职业发展

你不能也不应该确切知道你的职业道路会把你引向何方。最好的还在前面。但是重要的是与你内心的自我和想法联系起来。不要让时间白白流逝。思考你的下一步行动并不是一件容易的事情,但尽管如此,试着想象一下你在未来几年里想在的什么地方。你想去哪里?更技术性?更多的生意?你觉得哪个职位有意思?你喜欢你工作中的什么?你错过了什么?

6)记录你从事的有趣的事情

你在做一些有趣的项目吗?记录下来!可以在 LinkedIn,Medium 或者私人博客上。你还可以制作一个幻灯片,展示给其他可能感兴趣的团队成员。试着想一想,这对其他人来说是否也有价值?也许公司里的其他人也能从中受益?努力让你的工作创造出最大的内部和外部效益

7)了解您的技术前景

除了熟悉你公司使用的软件 ETL、仓库和报告软件,还要彻底理解技术前景。这些选定工具的竞争对手是谁?你的公司为什么选择这些特别的软件?它们的利弊是什么?

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

信用:blog.aimultiple.com

8)努力让你的工作充满你喜欢的任务

“数据分析师”可能意味着很多不同的东西,这取决于你的公司、它的技术前景和你的特定角色定义。有些角色技术性更强,甚至接近于数据工程师,而有些则更面向产品或业务。虽然你的公司可能已经定义了你的角色,但是你可以自由地改变你的工作定义。你对哪些方面感兴趣?你对商业方面的事情感兴趣吗?靠上去。你喜欢教书吗?靠上去。你的公司只有在你提出新的想法和项目,并在这个过程中利用你最好的技能时才会受益。

分析师可以成为非常有价值的关键人物。如果这是你想要的,那就看你了。或者,您的工作可以简化为更技术性的工作,只是反复运行一些查询。那些成功到达顶端的人,和你我没有什么不同,他们只是想要并被推着到达那里。

值得了解的 8 种有用的树数据结构

原文:https://towardsdatascience.com/8-useful-tree-data-structures-worth-knowing-8532c7231e8c?source=collection_archive---------3-----------------------

8 种不同树形数据结构的概述

当你想到一棵树时,你会想到什么?根、枝、叶?你可能会想到一棵有根、有枝、有叶的大橡树。同样,在计算机科学中,树形数据结构有根,有枝,有叶,但是画倒了。树是一种分层数据结构,可以表示不同节点之间的关系。在本文中,我将简要介绍 8 种类型的树数据结构。

树的属性

  • 一个树可以不包含任何节点,也可以包含一个称为根的特殊节点,根有零个或多个子树。
  • 树的每条边都直接或间接地起源于根。
  • 每个孩子只有一个父母,但一个父母可以有很多孩子。

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

图一。树木术语

在本文中,我将简要解释以下 10 种树数据结构及其用法。

  1. 通用树
  2. 二叉树
  3. 二叉查找树
  4. AVL 树
  5. 红黑树
  6. 八字树
  7. Treap
  8. B 树

1.通用树

一个通用树是一个树形数据结构,其中没有对层次结构的约束。

性能

  1. 遵循树的属性。
  2. 一个节点可以有任意数量的子节点。

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

图二。通用树

使用

  1. 用于存储分层数据,如文件夹结构。

1.二叉树

一个二叉树是一个树形数据结构,其中可以找到以下属性。

性能

  1. 遵循树的属性。
  2. 一个节点最多可以有两个子节点(子节点)。
  3. 这两个子节点被称为 左子节点右子节点

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

图三。二叉树

使用

  1. 由编译器用来构建语法树。
  2. 用于实现表达式解析器和表达式求解器。
  3. 用于存储路由器中的路由表。

3.二叉查找树

二叉查找树是二叉树的一个更严格的扩展。

性能

  1. 遵循二叉树的属性。
  2. 有一个独特的属性叫做二叉搜索树属性。该属性声明给定节点的左子节点的值(或键)应该小于或等于父节点的值,右子节点的值应该大于或等于父节点的值。

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

图 4。二叉查找树

使用

  1. 用于实现简单的排序算法。
  2. 可以用作优先级队列。
  3. 在许多数据不断进出的搜索应用程序中使用。

4.AVL 树

AVL 树是一种自平衡二叉查找树。这是第一棵自动平衡高度的树。

性能

  1. 遵循二分搜索法树的属性。
  2. 自我平衡。
  3. 每个节点存储一个名为平衡因子的值,该值是其左侧子树和右侧子树之间的高度差。
  4. 所有节点的平衡系数必须为-1、0 或 1。

在执行插入或删除之后,如果至少有一个节点不具有-1、0 或 1 的平衡因子,则应该执行旋转来平衡树(自平衡)。你可以从 这里 阅读我之前文章中关于旋转操作的更多内容。

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

图五。AVL 树

使用

  1. 用于需要频繁插入的情况。
  2. 在 Linux 内核的内存管理子系统中使用,用于在抢占期间搜索进程的内存区域。

5.红黑树

红黑树是一个自我平衡的二叉查找树,每个节点都有一种颜色;红色或黑色。节点的颜色用于确保树在插入和删除过程中保持近似平衡。

性能

  1. 遵循二分搜索法树的属性。
  2. 自我平衡。
  3. 每个节点不是红色就是黑色。
  4. 根是黑色的(有时省略)。
  5. 所有的叶子(标记为 NIL)都是黑色的。
  6. 如果一个节点是红色的,那么它的两个子节点都是黑色的。
  7. 从给定节点到它的任何叶节点的每条路径必须经过相同数量的黑节点。

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

图六。AVL 树

使用

  1. 作为计算几何中使用的数据结构的基础。
  2. 用于当前 Linux 内核中使用的完全公平调度器
  3. 用于 Linux 内核的 epoll 系统调用实现。

6.八字树

八字形采油树是一种自平衡二叉查找树。

性能

  1. 遵循二分搜索法树的属性。
  2. 自我平衡。
  3. 最近访问过的元素可以快速地再次访问。

在执行搜索、插入或删除后,张开树执行一个称为张开的动作,其中树被重新排列(使用旋转),使得特定元素被放置在树的根部。

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

图 7。显示树搜索

使用

  1. 用于实现缓存
  2. 用于垃圾收集器。
  3. 用于数据压缩

7.Treap

一个树堆(这个名字来源于树+堆)就是一个二叉查找树。

性能

  1. 每个节点有两个值;一个和一个优先级
  2. 这些键遵循二进制搜索树属性。
  3. 优先级(随机值)遵循堆属性。

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

图 8。Treap(红色字母键遵循 BST 属性,蓝色数值遵循最大堆顺序)

使用

  1. 用于维护公钥密码系统中的授权证书。
  2. 可用于执行快速设置操作。

8.B 树

b 树是一个自平衡搜索树,它包含多个节点,这些节点按照排序的顺序保存数据。每个节点有 2 个或更多的子节点,并由多个键组成。

性能

  1. 每个节点 x 都有以下内容:

— x.n(键的数量)

— x.keyᵢ(以升序存储的密钥)

— x.leaf(无论 x 是否为叶子)

2.每个节点 x 都有(x.n + 1)个子节点。

3.键 x.keyᵢ分隔每个子树中存储的键的范围。

4.所有的树叶都有相同的深度,也就是树高。

5.节点对可以存储的键的数量有上限和下限。这里我们考虑一个值 t≥2,称为 B 树的最小度(或分支因子)。

—根必须至少有一个键。

—每个其他节点必须至少有(t-1)个键,最多有(2t-1)个键。因此,每个节点将至少有 t 个子节点,最多有 2t 个子节点。如果节点有(2t-1)个键,我们说它是满的

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

图九。B 树

使用

  1. 用于数据库索引,以加快搜索速度。
  2. 在文件系统中用来实现目录。

最后的想法

数据结构操作的时间复杂性的备忘单可以在这个链接中找到。

我希望作为对树结构的简单介绍,这篇文章对您有用。我很想听听你的想法。😇

请继续关注关于更多数据结构的后续文章。如果你没有读过我以前写的关于数据结构的文章,可以通过下面的链接来看看。

[## 每个程序员都必须知道的 8 种常见数据结构

数据结构是一种在计算机中组织和存储数据的专门方法,以这种方式我们可以执行…

towardsdatascience.com](/8-common-data-structures-every-programmer-must-know-171acf6a1a42) [## 自平衡二分搜索法树 101

自平衡二分搜索法树简介

towardsdatascience.com](/self-balancing-binary-search-trees-101-fc4f51199e1d)

非常感谢你的阅读!

干杯!😃

参考

[1]《算法导论》(第三版),作者:Thomas H. Cormen、Charles E. Leiserson、Ronald L. Livest 和 Clifford Stein。

https://en.wikipedia.org/wiki/List_of_data_structures

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值