TowardsDataScience 博客中文翻译 2020(十)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

14 种深度和机器学习的使用使 2019 年成为一个新的人工智能时代。

原文:https://towardsdatascience.com/14-deep-learning-uses-that-blasted-me-away-2019-206a5271d98?source=collection_archive---------2-----------------------

比格根、塞勒根、斯泰尔根、高根、艺术育种家、德奥迪菲等。:我非常私人的清单(包括奖金)。

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 T ime 的流动比我们想象的要快。对摩尔定律有好处。但仍有很多要赶上。在下面,我想列出我在机器学习和深度学习领域在 2019 年发生的伟大事情(和——抱歉作弊——2018 年也有一些)。这些大多是基于神经网络的模型,让我印象深刻。

首先,这里是伊恩·古德菲勒的一条推文,完美地展示了深度学习的成就。

即使是关于一个特定的话题:生成性对抗网络的进展,这种进展很好地展示了已经发生的事情,以及将要发生的事情。一图抵千言。

我有一种感觉,2019 年比往年更加激烈。以下是一些让我惊喜交集的进展,但顺序并不特别。

免责声明 1: 我是数据科学的新手。因此,如果我错过了以下主题的一些重要讨论,请随时用参考链接来补充本文。
免责声明 2: 这是模型、网络、实现和实验的混合。它们通常是相互关联的。其中一些是另一个的核心。《走向数据科学》的作者已经很好地介绍了其中一些。你在这里看到的是过去 1-2 年里给我留下深刻印象的 DL/ML 故事。
免责声明 3: 正如你会注意到的,我列表中的 AI 进步大部分是指视觉媒介(图像生成和修改)。2019 年也是自然语言处理(OpenAI 等的 GPT-2)的重要里程碑。),但那是我很快会谈到的另一个大话题)。

1.比根

这是关于什么的: 比根扩大生成对抗网络——并允许你生成新的视觉效果,在巨大的视觉数据库上接受训练。系统的核心是两个神经网络:生成器鉴别器生成器创建新的视觉效果,并试图说服鉴别器这是真实的镜头。鉴别器将生成的图像与其“经验”对齐,并作为“未通过”发回给生成器。这种反复的相互作用一直持续到某种“共识”。

**尝试一下:**使用这个 BigGAN 笔记本,你可以使用 【类别条件采样】 并创建例如山谷的图像:

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

结果是惊人的:

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

比根生成的图像

在我这篇文章的标题中,还可以看到 BigGAN 生成的时钟。

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

如你所见,还是弱 AI 。网络不知道时钟是什么。他们只是知道,这东西怎么可能长得像:“roundish”,“有字有箭”。

我看到解释世界的尝试和 柏拉图的形式/理念**** 理论之间明显的相似之处:

观念或形式是物质事物的超物质本质。物质的东西不是原创的,只是想法/形式的模仿。

我的报道本话题( 【朋友链接】 ):

** [## 作为创意引擎的比根

的确,2018 年可以被称为人工智能创造真正创造力的开始。

medium.com](https://medium.com/merzazine/biggan-as-a-creative-engine-2d18c61e82b8)**

2.和比根一起变形。

****这是怎么回事:我们可以走得更远,不仅仅是生成带标签的图像。我们可以使用插值函数用 BigGAN 对事物进行合并和变形。在 BigGAN 的情况下,生成的图像 A 到生成的图像 B 的转换是可能的,无论它们在语义上如何不同。

****试试看:用同一个比根笔记本插值功能。

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

使用这些设置,可以将约克夏梗转化为航天飞机

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

这种方法带来了前所未有的可能性,超出了人类的想象。你甚至可以制作更多渐变的画面——并把它们组合成动画片段(更多信息,请查看扎伊德·阿利亚菲的《可乐布笔记本》)

我对这个话题的报道:

** [## 比根和万物的变形

数字变形

medium.com](https://medium.com/merzazine/biggan-and-metamorphosis-of-everything-abc9463125ac)**

3.风格转移

这是怎么回事: 风格转移是在给定一组风格定义图像后,对输入的基础图像进行变换的神经技术:将图像 A 的一种风格转移到图像 b。

试试看: Colab 笔记本。也有各种免费的和商业的基于数字图书馆的应用程序将你的图像转换成世界艺术大师的作品。

我用各种艺术家的风格转换了我的用户照片,得到了令人信服的结果:

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

凡·高

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

马格里特

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

库尔特·施威特斯

你可能对风格转移很熟悉,因为走向数据科学提供了一些关于这个主题的很棒的文章(这里只是其中的一部分,阅读全部):

** [## 卷积网络的神经类型转移和可视化

使用迁移学习在 10 分钟内创建专业外观的艺术品。

towardsdatascience.com](/neural-style-transfer-and-visualization-of-convolutional-networks-7362f6cf4b9b) [## 重要的资源,如果你正在与神经风格转移或深层照片风格转移

神经风格迁移和深度照片风格迁移是深度学习的有趣领域。他们越来越受欢迎…

towardsdatascience.com](/important-resources-if-you-are-working-with-neural-style-transfer-or-deep-photo-style-transfer-719593b3dbf1) [## 用卷积神经网络进行图像风格转换

创造美丽的图像效果

towardsdatascience.com](/style-transfer-styling-images-with-convolutional-neural-networks-7d215b58f461)

甚至视频风格传输也是可能的:

[## 实时视频神经类型转移

在受限的移动环境中优化视频的艺术风格化

towardsdatascience.com](/real-time-video-neural-style-transfer-9f6f84590832)

艺术家 Gene Cogan 使用了迪斯尼《爱丽丝梦游仙境》(茶会场景)的风格转换,并将 17 件著名艺术品的风格转换到动画中:

我对这个话题的报道(友链):

[## 人工智能和创造力:风格转换(你也可以做到)

人工智能的普及

medium.com](https://medium.com/merzazine/ai-creativity-style-transfer-and-you-can-do-it-as-well-970f5b381d96)

4.风格转换的创造性运用:深度的绘画和谐

**这是关于什么的:**一些艺术家和开发者将风格转移的能力用于创造性的图像处理。这个想法就像天才一样简单:

1\. take a target image B
2\. transfer its style to the element A you want to build into B
3\. combine and enjoy

例如,这种方法允许在数字图像拼贴画中艺术地使用风格转移。

**论文:**作者付军栾等人。在他们的 GitHub 资源库中,你可以找到令人惊叹的样本:

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

Gene Cogan 以自拍的方式运用风格转移,在世界艺术史上无处不在:

我对这个话题的报道(朋友链接):

[## 人工智能与创造力:风格迥异的元素。

AI 用艺术玩变色龙游戏

medium.com](https://medium.com/merzazine/ai-creativity-alien-elements-with-style-27ee7e45df92)

5.喜剧化—将视频转换回故事板

**这是关于什么的:**华沙理工大学的一组研究人员,都对人工智能和漫画艺术着迷,他们将自己的热情结合在一起,实现了一个惊人的项目(阅读更多细节):

1\. The model analyzes the video, using intelligent video summarization.
2\. The scenes in the video footage are separated by the DL-powered definition of frames with the most aesthetic impact.
3\. Style Transfer for the specific stylization of images is applied.
4\. Selected frames are put into storyboard / comic layout

尝试一下 : 漫画化 —选择一个视频并将其传输到漫画中。

我是塔尔科夫斯基电影的超级粉丝,所以我急切地想知道,这部《潜行者》的超级剪辑会发生什么:

结果令人震惊:

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

尤其是如果你知道——并且喜欢——这部电影,你会发现画面的选择是多么令人惊讶。其实是在刻画 Stalker 的核心思想(不剧透影片)。

我用更多的实验报道了这个话题():

[## 人工智能与创造力:用人工智能将视频转换成漫画

Comixify 允许将视频转换成类似漫画的剧本

medium.com](https://medium.com/merzazine/ai-creativity-transform-a-video-into-a-comic-panel-with-ai-549d1e275a5c)

6.CycleGAN —无需输入输出对的图像到图像转换。

这是怎么回事:BigGAN 在预训练的基础上生成新的图像, StyleGAN两幅图像之间转换样式, CycleGAN 使用单幅图像将其样式或特征转换成不同的东西。实际上,这是一个不成对的图像到图像的翻译,使用循环一致的对抗网络(这正是这篇论文的名字):

1\. The image is being analyzed by GAN (including pattern and object detection)
2\. Pre-trained feature modification is applied.
3\. The same image as in "1." has new visuals achieved by "2."

CycleGAN 在不引用其他图像的情况下更改图像的样式和视觉功能。

论文:不成对的图像到图像的翻译使用循环一致的对抗网络 ( 主页/GitHub/论文 )

它不仅可以将艺术家预先训练的风格转移到照片上。它可以使用预先训练好的分割特征知识,将绘画修改为照片般逼真的图像:

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

来源:论文 使用循环一致对抗网络的不成对图像到图像翻译

你甚至可以循环播放录像。在这种情况下,传输“马= >斑马”被应用于运动图像:

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

(来源

但并非没有一些系统缺陷…

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

普京斑马( Souce

在《走向数据科学上有很多相关的文章,我不会深究技术细节。对我来说最重要的是,有了 DL,图像的可修改性达到了一个新的高度。适合艺术使用。因为严重的错误使用而变得危险。

我的报道本话题( 【朋友链接】 ):

[## 人工智能与创造力:CycleGAN 的视觉无政府主义现实主义(以及人工智能如何欺骗开发者)

你已经尝试过把照片变成梵高的画了。但是你有没有想过反过来…

medium.com](https://medium.com/merzazine/ai-creativity-visual-anarchist-realism-of-cyclegan-and-how-ai-cheats-on-developers-ab2b3cb9eb8d)

7。StyleGAN 接受绘画训练

这是怎么回事:C0D32 结束于Reddit在来自 kaggle 的 24k 艺术作品数据集上训练 StyleGAN。随着他修改代码,各种风格的新艺术品产生了。它是这样工作的:

StyleGAN 生成具有预先训练的艺术风格的原创艺术品。

试用一下: 谷歌 Colab 笔记本

有趣的事情:即使你用这个模型得到了无数独特的艺术作品,用一些艺术史的知识你可以假设,哪些风格,艺术运动甚至艺术家正在通过新的图像闪闪发光。

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

两个生成的图像“Las Meninas”,迭戈·委拉斯开兹

或者是对点彩艺术的模仿。

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

生成的图像乔治·修拉(右图)

****我的报道本话题,包括更多图片及分析():

** [## 如何培养你的艺人?

各位,现在是美术测验时间!(奖品包括)

medium.com](https://medium.com/merzazine/how-to-train-your-artist-cb8f188787b5)**

8.pix2pix:图像到图像的翻译。

这是怎么回事: pix2pix 是由 Phillip Isola 等人开发的,最迟在 2017 年开始病毒式传播。由条件敌对网络完成的图像翻译允许将人造涂鸦渲染成照片般逼真的(或以某种方式类似的)图像。请观看 Karoly Zsolnai-Feher 撰写的这篇著名的两分钟论文进行总结:

****论文:Pix2Pix 网站上你可以找到这个方法的文档、论文、例子和演示( GitHub / 论文)

试试看: Christopher Hesse 为 pix2pix 提供了现场 TensorFlow 演示。你可以把你的猫、门面和其他东西的涂鸦“翻译”成“照片般逼真”的图像。

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

pix2pix 正尽力从我业余涂鸦的一只猫开始。

这当然不仅仅是有趣的草图翻译:通过预定义的设置,你可以将航拍照片转换成地图,将白天的照片转换成夜景等等。条件敌对网络检测模式,并将其翻译成所需的主题(你必须定义你的目标图像任务)。在特定的标记图像数据集上训练网络。

NVidiaGauGAN 将这种方法带到了另一个层面——他们 AI 游乐场的实验之一。您可以使用分段来驱动草图:每种颜色都应用于特定的对象或材料。翻译后生成新图像(具有在各种视觉特征之间切换的类似 CycleGAN 的可能性):

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

图片,是我女儿为我们的人工智能驱动的童话书涂鸦的。

你可以在这里试试 GauGAN:https://nvlabs.github.io/SPADE/demo.html
关于 GauGAN 的论文:https://arxiv.org/abs/1903.07291

9.pix2pix,face2face,DeepFake 和 Ctrl+Shift+Face

深度学习世界充满了实验。人们跳出框框思考,这是 DL 特别是 AI 最鼓舞人心的地方。Gene Cogan 用 dynamic pix2pix 进行了实验:在这种情况下,来源不是素描,而是网络摄像头(他的脸),目标是在特朗普的照片上训练的:

这些实验激发了对 face2face 的研究(在本例中: Dat Tran ):

** [## face 2 face——模仿德国总理面部表情的 Pix2Pix 演示

受吉恩·科岗研讨会的启发,我创建了自己的 face2face 演示程序,将我的网络摄像头图像转换成…

towardsdatascience.com](/face2face-a-pix2pix-demo-that-mimics-the-facial-expression-of-the-german-chancellor-b6771d65bf66)

原理很聪明:

1\. face2face model learns facial features / landmarks
2\. It scans webcam input on facial features
3\. It finally translates it into another face

后真相时代的另一个前沿到达了——现在我们不仅可以修改图像,还可以修改电影。就像流行的消息应用程序上的 AR 应用程序一样,AI 以完美的方式解释视频片段并修改它。

Ctrl+Shift+Face 这样的艺术家将这种方法完善到了令人难以置信的程度:他在 face2face 的帮助下切换了邪教电影中演员俏皮的面孔。比如这里:金凯瑞的《闪灵》。并排比较向你展示了即使是精彩的心理战也能翻译得多好。

这种实现在以下方面具有多种可能性:

电影制作人可以在试镜前对演员进行实验。他们还可以将电影本地化,以更好地实现不同语言的唇形同步,就像 Synthesia 对大卫·贝克汉姆所做的那样。

现在想象一下使用人工智能驱动的语言翻译和语音合成的国际视频会议的可能性。

艺术家们可以创作出颠覆性的、超现实的类似“成为约翰·马尔科维奇”的杰作。例如,特朗普、普京等人演唱的这首鼓舞人心、欢快而略带荒诞的《想象》的封面:

Passed away persons can be revived. The best example is singer Hibari Misora, who preformed new song on annual Japanese New Year TV event NHK Kōhaku Uta Gassen (NHK 紅白歌合戦). She did it this week, even if she died 30 years ago. The visuals were reconstructed with the help of AI, the voice was simulated by Vocaloid:

但是 DeepFake 的新方法是开放的。还记得 ZAO 吗,中国 DeepFake 趣味 app:转移你和名人的脸。现在你是莱昂纳多·迪卡普里奥。将它与在中国推出的生物识别支付结合起来,你就有无限的欺诈可能性:

[## 新的中国“deepfake”人脸应用在隐私反弹后后退

在遭到用户强烈反对后,一款允许人们与名人交换面孔的中国新应用程序正在更新其政策…

edition.cnn.com](https://edition.cnn.com/2019/09/03/tech/zao-app-deepfake-scli-intl/index.html)

我的覆盖范围本话题( 友链 ):

[## 运动中的人工智能:参观恐怖谷的三种方式(关于后真相中“真相”的一些想法…

这是一个显而易见的事实:我们生活在假新闻的时代。不太明显的事实是:我们一直都是这样。刚才我们…

medium.com](https://medium.com/merzazine/ai-in-motion-3-ways-to-visit-uncanny-valley-some-thoughts-about-the-truth-in-post-truth-ac0cf717be77)

10.3D 本·伯恩斯效应。

**这是关于什么的:**这款机型,由 西蒙·尼克劳斯 开发,将单张图像转换成跟踪拍摄。该模型可以识别背景,模拟深度,用内容敏感的修复技术填充缺失的区域,添加新的角度——简而言之:通过一张图像,您可以制作一个空间 3D 视频镜头。在安迪·拜奥的博客中了解更多信息。

试试看: Colab 笔记本作者马努·罗梅罗

以下是我的一些实验(在 twitter 帖子中):

我写过这个话题( Friend-Link ):

[## 很有空间感!

在人工智能的帮助下赋予照片新的维度。

towardsdatascience.com](/very-spatial-507aa847179d)

11.艺术育种者:无限的艺术作品生成

这是关于什么的: Joel Simon 将 BigGAN 和其他模型实现到用户友好的 web 应用 ArtBreeder 中。你有许多不同的可能性来创建和修改脸,风景,宇宙图像等。Artbreeder 同时在一个生动的社区中成长和发展,在这个社区中,用户和开发者处于持续的对话中。

**试出来:**https://artbreeder.com/

以下是我用 ArtBreeder 做的一些样本:

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

还可以制作简短的过渡视频:

我在这里写了 art breader(Friend-Link):

[## 艺术育种家:给我画一只电动羊

如何以用户友好的方式应用生成式对抗网络?

towardsdatascience.com](/artbreeder-draw-me-an-electric-sheep-841babe80b67)

12.去彩色化—黑白照片的彩色化

这是怎么回事: DeOldify 由 Jason Antic 创作并发布。这个项目的任务是对旧图像和电影胶片进行着色和恢复。( 来源 )。 DeOldify 正在使用生成对抗网络,在两个神经网络生成器鉴别器之间进行迭代交互(类似于art breader)。但与上一个模型不同的是,DeOldify 中的图像不会以它们的形式被修改或生成。甘的力量带来色彩——发生器将颜料涂在他训练过的已识别物体上,鉴别器尝试批评颜色选择。

**试试看:**你可以在 GitHub 中找到这个型号,也可以在两个笔记本中找到——图片( Colab 笔记本)和视频( Colab 笔记本)!

这是我的照片:一张我父亲在 1960 年拍摄的黑白照片。看花的颜色检测的多细致。

当然,颜色不会重复原来的调色板。但它让历史照片充满活力,让它们更贴近我们的时代。

我在这里写了这个话题( Friend-Link ):

[## 基于 GAN 的图像彩色化

找回丢失的颜色…

towardsdatascience.com](/deoldify-gan-based-image-colorization-d9592704a57d)

13.人工智能驱动的虚拟现实

这是关于什么的: AI 驱动的虚拟现实是可能的。实际上,这是 NVidia 一年前发布的新闻——而且非常有希望:

在这里,城市和视觉效果是在谷歌街景上训练的,所以 VR 城市体验是通过深度学习模型重建的:

为了进行训练,该团队在 DGX-1 上使用了NVIDIA Tesla V100 GPUcud nn-加速 PyTorch 深度学习框架,以及来自城市景观和 Apolloscapes 数据集的数千个视频(来源)。

你可以想象这种方法的所有潜力:“从零开始”的现实城市模拟,对城市发展、交通管理和物流的帮助,重塑视频游戏景观。

14.跑道 ML

这是关于什么的: Runway 是一个终极应用,使用各种 ML/DL 模型来满足不同的需求。它可以翻译图像 2 文本,在图像后生成文本(使用 GPT-2),检测照片和视频镜头中的对象。你也可以将不同的模型结合成连锁反应。而且是免费的。

试试看:https://runwayml.com/

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

我很快会写关于 RunwayML 的文章。

即将发布:StyleGAN2

最近,NVidia 发布了 style gan 2——图像质量有所提高( GitHub / 论文 / 视频)。

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

StyleGAN 2 预告(来源)

此外,使用图像的新方法也是可能的。例如,StyleGAN 投影:与来自任何可能图像的目标图像对齐。我强烈建议跟随 Jonathan Fly 对每个最新的 DL/ML 开发进行全面的实验:

《road runner 01》也非常有趣:

(人工智能先驱、艺术家和实验者是我将在 2020 年讨论的另一个话题)

奖励:尝试它的资源

冬天(希望)终于过去了。技术就在眼前,我们彼此相连,思想交流前所未有地活跃。而 AI 复兴最好的一点就是:DL/ML 的大众化和民主化。如今,不仅 Python 演讲者和 NVidia GPU 所有者可以享受无限的可能性:每个人都可以做到这一点。作家,艺术家,其他非技术领域的人可以使用 Colab/Jupyter 笔记本,用户友好的应用程序,如 Artbreeder 和 RunwayML 等。

这里有一个小列表供你收藏:基于跨平台网络的人工智能实验。现在没有借口声称人工智能将是一门火箭科学(它仍然存在于各种高科技领域,但不是普遍的)。该列表将被更新。

[## 人工智能实验|谷歌的实验

在过去的 6 个月里,谷歌在悉尼的创意实验室与数字作家节团队合作,并且…

experiments.withgoogle.com](https://experiments.withgoogle.com/collection/ai) [## 来自 NVIDIA Research 的交互式演示

与基于 NVIDIA 研究的现场演示互动,链接到白皮书和 GitHub 源代码

www.nvidia.com](https://www.nvidia.com/en-us/research/ai-playground/) [## 谷歌联合实验室

编辑描述

colab.research.google.com](https://colab.research.google.com/) [## 面向创作者的机器学习。

机器学习的瑞士军刀

runwayml.com](https://runwayml.com/madewith)

你也可以关注我的人工智能相关关键人物的 Twitter 列表。这个列表还在增长,这是一件好事!

[## 推特上的@Merzmensch/AI

twitter.com](https://twitter.com/Merzmensch/lists/ai)

这些只是 2019 年令人惊叹的人工智能发展的一部分。你还有 AI 驱动的 WOWs 吗?请随意将它们写在评论中!****

Scikit 学习库的 14 个鲜为人知的令人印象深刻的特性

原文:https://towardsdatascience.com/14-lesser-known-impressive-features-of-scikit-learn-library-e7ea36f1149a?source=collection_archive---------38-----------------------

scikit 学习库中经常未知和被低估的功能示例。

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

Pixabay

Scikit learn 仍然是人工智能领域最受欢迎的开源和机器学习库之一。scikit-learn 库包含了很多用于机器学习和统计建模的高效工具,包括分类、回归、聚类和降维。

Scikit-learn 大部分是用 Python 编程语言编写的,一些核心算法是用 Cython 编写的,以提高其性能。它还可以与许多其他 Python 库很好地集成,例如用于绘图的 matplotlibPlotly ,用于数组矢量化的 NumPy ,以及 pandas dataframes、 scipy 等等。

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

scikit 学习主页

Scikit-learn 附带了许多特性。以下是其中的几个

  • 数据集
  • 特征抽出
  • 特征选择
  • 参数调谐
  • 使聚集
  • 交叉验证
  • 监督模型
  • 无监督模型
  • 降维
  • 集成方法

Scikit learn 在其 GitHub 资源库上拥有超过 1770 个贡献者41.2k 颗恒星 ,这意味着许多数据科学家、机器学习工程师和研究人员依赖这个库进行机器学习项目。

我个人喜欢使用 scikit learn 库,因为它提供了极大的灵活性,并且很容易理解带有大量示例的文档。在本文中,我很高兴与您分享 scikit learn 库中您不存在的鲜为人知的令人印象深刻的特性。

1.克隆估计量

如果您想要复制一个估计器并将其用于另一个数据集**,克隆函数**可以帮助您做到这一点。克隆函数帮助你用相同的参数构造一个新的估计量。

“Clone 在不实际复制附加数据的情况下,在估算器中进行模型的深度复制。它产生了一个新的估计量,其参数与任何数据都不匹配。”- scikit 学习文档

例如:

我们首先创建一个分类数据集和估值器。

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification# create dataset`
X1, y1 = make_classification(n_classes=2, n_features=5, random_state=1)# create estimators 
logistic_classifier_1 = LogisticRegression()

现在我们将使用来自 sklearn.base 的克隆函数来复制 logistic_classifier_1 模型。

from sklearn.base import clone# duplicae the first classifier with clone function 
logistic_classifier_2 = clone(logistic_classifier_1)logistic_classifier_2

从逻辑分类器 1 克隆的名为的逻辑分类器 2 的新估计器的输出如下。

LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
                   intercept_scaling=1, l1_ratio=None, max_iter=100,
                   multi_class='auto', n_jobs=None, penalty='l2',
                   random_state=None, solver='lbfgs', tol=0.0001, verbose=0,
                   warm_start=False)

2.将评估者识别为分类器或回归器。

如果一个模型实例用两个简单的函数 is_classifieris_regressor 解决了 scikit-learn 库中的分类或回归任务,您就可以识别该模型实例。如果给定的估计量是分类器,is_classifier 函数返回 True,如果给定的估计量是回归量,is_regressor 函数返回 True。

举例:

首先创建两个估计器,第一个作为回归,第二个作为分类。

from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestClassifier# create estimators 
model_1 = LinearRegression()
model_2 = RandomForestClassifier()

让我们检查一下第一个模型是否回归。

# check if it regressor
from sklearn.base import is_regressoris_regressor(model_1)

输出为真。

现在让我们检查第二个模型是否是分类。

# check if it classifier 
from sklearn.base import is_classifieris_classifier(model_2)

输出为

3.用 make_column_selector 选择列

make_column_selector 与make _ column _ transformer配合使用,根据不同列的数据类型(整数、类别)或列名对其应用不同的预处理。

举例:

在本例中,我们使用 make_column-_selector 来选择数据集中的所有对象特征,并通过使用 OneHotEncoder 方法来转换它们。

import numpy as np 
import pandas as pd
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import make_column_transformer
from sklearn.compose import make_column_selector# create a dataframe with different data types
data = pd.DataFrame(
 {“gender”: [“male”, “female”, “female”, “male”],
 “age”: [23, 5, 11, 8]}
)# create a column transformer with make_column_selectorct = make_column_transformer(
 (StandardScaler(), make_column_selector(dtype_include=np.number)), # ages
 (OneHotEncoder(), make_column_selector(dtype_include=object)), # genders
)transformed_data = ct.fit_transform(data)transformed_data

转换数据的输出是:-

array([[ 1.6464639 ,  0\.        ,  1\.        ],
       [-0.98787834,  1\.        ,  0\.        ],
       [-0.10976426,  1\.        ,  0\.        ],
       [-0.5488213 ,  0\.        ,  1\.        ]])

4.绘制决策树

您可以使用 plot_tree 函数可视化决策树模型。绘图功能允许你用名为 feature_names 的参数添加特征名。

示例: 我们首先通过使用决策树算法为虹膜数据集创建分类模型,然后绘制决策树。

# import libraries
import matplotlib.pyplot as plt 
from sklearn.model_selection import train_test_split
from sklearn.metrics import plot_confusion_matrix
from sklearn.tree import DecisionTreeClassifier, plot_tree, export_text 
from sklearn.datasets import load_iris#load data 
iris = load_iris()# create our instances
model = DecisionTreeClassifier()# train test split
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state = 0)# fit and predict
model.fit(X_train, y_train)# plot the tree
plt.figure(figsize = (20, 10))
plot_tree(model,feature_names=iris.feature_names, filled = True) 
plt.show()

我们通过 plot_tree 函数中的模型和特征名称来创建一个决策树图。

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

决策树图

5.从 Openml 获取数据集

Openml 是一个在线平台,旨在通过提供一个开放、协作、无摩擦、自动化的机器学习环境来改进开放式机器学习。

您可以通过使用 scikit-learn 的 fetch_openml 函数从 openml 平台获取数据集。

举例:

使用名称获取银行营销数据集。

from sklearn.datasets import fetch_openml#fetch by using data name
bank_marketing = fetch_openml(name=”bank-marketing”)# seperate independent variables and target variable 
x = bank_marketing.data 
y = bank_marketing.target

获取数据集的访问样本。

x[:2]

输出是

array([[ 5.800e+01,  4.000e+00,  1.000e+00,  2.000e+00,  0.000e+00,
         2.143e+03,  1.000e+00,  0.000e+00,  2.000e+00,  5.000e+00,
         8.000e+00,  2.610e+02,  1.000e+00, -1.000e+00,  0.000e+00,
         3.000e+00],
       [ 4.400e+01,  9.000e+00,  2.000e+00,  1.000e+00,  0.000e+00,
         2.900e+01,  1.000e+00,  0.000e+00,  2.000e+00,  5.000e+00,
         8.000e+00,  1.510e+02,  1.000e+00, -1.000e+00,  0.000e+00,
         3.000e+00]])

您也可以使用指定的 ID 提取数据。

# fetch by using id from this link [https://www.openml.org/d/1461](https://www.openml.org/d/1461)
bank_marketing = fetch_openml(data_id=1461)# seperate independent variables and target variable 
x = bank_marketing.data 
y = bank_marketing.target

在上面的例子中,我们获取 ID 为 1461 的数据。

6.学习曲线

scikit-learn 的学习曲线功能允许您确定不同训练集大小的交叉验证训练和测试分数。

“交叉验证生成器在训练和测试数据中将整个数据集拆分 k 次。具有不同大小的训练集的子集将用于训练估计器,并且将计算每个训练子集大小和测试集的分数。之后,对于每个训练子集大小,将在所有 k 次运行中平均分数。” scikit 学习文档

举例:

from sklearn.datasets import make_classification
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import learning_curve# create dataset`
X, y = make_classification(n_classes=2, n_features=10, n_samples=5000, random_state=1)# create estimator
KNN_classifier = KNeighborsClassifier()#
train_sizes, train_scores, test_scores = learning_curve(
estimator = KNN_classifier,
X = X,
y = y,
train_sizes=np.linspace(0.1, 1.0, 5),
shuffle=True, cv = 5)

显示训练规模以生成学习曲线。

# the train size
train_sizes

输出是

array([ 400, 1300, 2200, 3100, 4000])

显示训练集的分数。

# Scores on training sets
train_scores

输出是

array([[0.895     , 0.8875    , 0.85      , 0.8675    , 0.8975    ],
       [0.87384615, 0.88846154, 0.87692308, 0.88461538, 0.88230769],
       [0.88818182, 0.89363636, 0.88409091, 0.89045455, 0.88863636],
       [0.89354839, 0.89354839, 0.88903226, 0.88806452, 0.88387097],
       [0.893     , 0.894     , 0.88825   , 0.893     , 0.88625   ]])

显示验证分数

# show validation scores
test_scores

输出是

array([[0.83 , 0.812, 0.829, 0.841, 0.819],
       [0.837, 0.813, 0.853, 0.848, 0.828],
       [0.843, 0.823, 0.845, 0.853, 0.821],
       [0.832, 0.831, 0.855, 0.857, 0.83 ],
       [0.834, 0.828, 0.849, 0.86 , 0.835]])

我们来找训练分和验证分的手段。

# find the mean of training scores and validation scores train_scores_mean = train_scores.mean(axis = 1)
print(“Training Scores mean:{}”.format(train_scores_mean))test_scores_mean = test_scores.mean(axis = 1)
print(“Test Scores mean:{}”.format(test_scores_mean))

输出是。

Training Scores mean:[0.8795 0.88123077 0.889 0.8896129  0.8909]
Test Scores mean:[0.8262 0.8358 0.837  0.841  0.8412]

下图展示了数据是如何被分成 k 次和 5 次交叉验证的。

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

了解更多查看另一个例子 这里

7.交叉验证和预测

如果您想为您的估计器同时执行交叉验证和预测,您可以使用 scikit-learn 的 cross_val_predict 函数。

举例:

对 iris 数据集执行 cross_val_predict。

from sklearn import datasets, linear_model
from sklearn.model_selection import cross_val_predict
from sklearn.ensemble import RandomForestRegressor#load dataet
diabetes = datasets.load_diabetes()X = diabetes.data
y = diabetes.targetRF_regressor = RandomForestRegressor()# perfrom cross validation and prediction
y_pred = cross_val_predict(estimator=RF_regressor, X= X, y=y, cv=5)

显示前 10 个预测。

#show prediction
y_pred[:10]

输出是:

array([225.41,  89.16, 172.4 , 164.03,  79.48, 116.87,  74.47, 157.5 ,155.99, 170.59])

8。使用 SelectFromModel 函数选择重要功能。

并非数据集中出现的所有特征都对模型性能有用,这意味着您可以通过使用 **SelectFromModel 函数来识别和选择模型的重要特征。**该函数根据重要性权重选择特征。您可以从一系列估计量中进行选择,但请记住,拟合后估计量必须具有 feature_importances_ 或 coef_ attribute

SelectFromModel 不太健壮,因为它只是根据作为参数给出的阈值来删除不太重要的特征。

**示例:**从包含 10 个独立特征的糖尿病数据集中选择重要特征。

from sklearn import datasets, linear_model
from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression#load dataet
diabetes = datasets.load_diabetes()X = diabetes.data
y = diabetes.targetlg_regressor = LogisticRegression()# identify and select important fatures by using SelectFromModel
selector = SelectFromModel(estimator=lg_regressor).fit(X, y)#show estimator coefficient 
selector.estimator_.coef_

输出如下。

array([[-0.01631211, -0.04448689, -0.01041713, ..., -0.03925967,
        -0.02122777, -0.03405436],
       [ 0.00188878, -0.04444519, -0.00816801, ..., -0.03918144,
        -0.06436135, -0.05463903],
       [-0.02699287, -0.04433151, -0.06285579, ..., -0.0756844 ,
        -0.05557734, -0.06683906],
       ...,
       [ 0.03415162,  0.05040128,  0.11077166, ..., -0.00292399,
         0.027618  ,  0.07302442],
       [ 0.03416799,  0.05030017,  0.12469165, ...,  0.10747183,
        -0.00019805,  0.02747969],
       [-0.04907612, -0.04462806,  0.16038187, ...,  0.0340123 ,
         0.02773604,  0.01114488]])

显示用于特征选择的阈值。

# show the threshold value
selector.threshold_

输出是12.19469668686

现在,我们可以使用选定的要素来转换数据。

 transformed = selector.transform(X)
transformed[:3]

输出是:-

array([[ 0.05068012,  0.06169621,  0.02187235, -0.04340085, -0.00259226,
         0.01990842],
       [-0.04464164, -0.05147406, -0.02632783,  0.07441156, -0.03949338,
        -0.06832974],
       [ 0.05068012,  0.04445121, -0.00567061, -0.03235593, -0.00259226,
         0.00286377]])

数据集已经从 10 个特征转化为 6 个重要特征

9。功能变压器

应用来自 pandas 的函数已被用于处理数据帧中从一个形状到另一个形状的数据,但如果您想在管道中使用它,则该函数没有用。 FunctionTransformer 函数可以帮助您在管道中添加特征/变量转换。

FunctionTransformer 提供了其他 sklearn 估算器的一些标准方法(例如,拟合和转换)。

举例:

使用 np.log() 方法将数组转换为自然对数。

import numpy as np
from sklearn.preprocessing import FunctionTransformerX = np.array([[89,34,9, 1,5,87,54,22,67,44], [12, 63,67,2,9,45,81,54,22,73]])#create FunctionTransformer
log_transformer = FunctionTransformer(np.log)#transform the data
log_transformer.transform(X)

转换后的输出。

array([[4.48863637, 3.52636052, 2.19722458, 0\.        , 1.60943791,
        4.46590812, 3.98898405, 3.09104245, 4.20469262, 3.78418963],
       [2.48490665, 4.14313473, 4.20469262, 0.69314718, 2.19722458,
        3.80666249, 4.39444915, 3.98898405, 3.09104245, 4.29045944]])

10。确定目标数据类型

在监督机器学习任务/问题中,我们有独立变量目标变量。您还需要知道目标变量的数据类型,以选择您将使用哪条路径来解决回归或分类任务的问题。您可以使用 type_of_target 函数来检查目标变量所指示的数据类型。

示例: 确定糖尿病数据集中目标变量的类型。

from sklearn.utils.multiclass import type_of_target
from skearn import datasets#load dataet
diabetes = datasets.load_diabetes()X = diabetes.data
y = diabetes.targettype_of_target(y)

输出为***‘多类’。***

11.添加虚拟特征

通过使用 add_dummy_feature 功能,可以在数据中添加具有特定值的虚拟特征。

“这对于将截取项与不能直接拟合的实现相拟合是很有用的.” scikit-learn 文档

例如:

数据集对象和虚拟特征值(如 5)将通过 add_dummy-feature 函数在我们的数据集中创建一个新的虚拟特征。

import numpy as np 
from sklearn.preprocessing import add_dummy_featurep = np.array([[89,34], [12, 63]])add_dummy_feature(p, value=5)

在我们的 p 数组中,每一行都将增加一个值 5。

array([[ 5., 89., 34.],
       [ 5., 12., 63.]])

12.使用迭代估算器估算缺失值

大多数时候,我们使用简单的方法来估算数据集中的缺失值。像用于数字特征的均值/中值和用于分类特征的模式这样的方法。也可以使用 迭代估算器 等高级方法。

通过使用机器学习模型,例如 BayesianRidge,IterativeImputer 使用数据集中所有可用的要素来估计缺失值。这意味着带有缺失值的特征将被标记为因变量,其他特征将被标记为自变量

举例:

import numpy as np
from sklearn.experimental import enable_iterative_imputer 
from sklearn.impute import IterativeImputer# Create dataset with missing values
data = [[61, 22, 43,np.nan,67],
        [np.nan, 6, 27, 8, 11],
        [83, 51, np.nan, 32, 9],
        [74, np.nan, 35, 26, 97],
        [np.nan, 4, 13,45, 33]]

现在我们可以用迭代估算函数估算缺失值。

# Impute missing values using iterative imputer
iter_imp = IterativeImputer(random_state= 42)
iter_imp.fit_transform(data)

没有丢失值的输出:

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

13.使用随机搜索的超参数调谐

RandomizeSearchCV 函数倾向于通过随机选取一组预定的超参数分布来训练和评估一系列模型。在用不同的随机选择的超参数组合训练模型的 N 个不同版本之后,该函数挑选具有最佳参数值的模型的最成功版本。这允许您显式控制尝试的参数组合的数量。

示例: 创建随机搜索以找到 XGBoost 算法的最佳参数,从而将虹膜分类为 3 类。

from sklearn import linear_model, datasets
from sklearn.model_selection import RandomizedSearchCV
from xgboost import XGBClassifier
from scipy.stats import randint# Load data
iris = datasets.load_iris()
X = iris.data
y = iris.target# create model
classifier = XGBClassifier()# Create Hyperparameter Search Space
param_dist = {
 # randomly sample numbers from 50 to 400 estimators
 “n_estimators”: randint(50,400),
 “learning_rate”: [0.01, 0.03, 0.05],
 “subsample”: [0.5, 0.7],
 “max_depth”: [3, 4, 5],
 “min_child_weight”: [1, 2, 3],
}# create random search# Create randomized search 5-fold cross validation and 100 iterationsclf = RandomizedSearchCV(
 estimator=classifier,
 param_distributions=param_dist,
 random_state=1,
 n_iter=100,
 cv=5,
 verbose=0,
 n_jobs=-1,
)# Fit randomized search
best_model = clf.fit(X, y)

运行随机搜索后,我们可以观察最佳参数值,以提高模型性能。

# View best hyperparameters
print(‘Best n_estimator:’, best_model.best_estimator_.get_params()[‘n_estimators’])
print(‘Best learning_rate:’, best_model.best_estimator_.get_params()[‘learning_rate’])
print(‘Best subsample:’, best_model.best_estimator_.get_params()[‘subsample’])
print(‘Best max_depth:’, best_model.best_estimator_.get_params()[‘max_depth’])
print(‘Best min_child_weight:’, best_model.best_estimator_.get_params()[‘min_child_weight’])

输出:

Best n_estimator: 259
Best learning_rate: 0.03
Best subsample: 0.5
Best max_depth: 3
Best min_child_weight: 1

有时,RandomizedSearchCV 不会提供准确的结果,因为 **GridSearchCV,**但是当您拥有大型数据集时,GridSearchCV 会大大降低计算时间,并且成本非常高。在这种情况下,建议使用随机搜索,因为您可以定义想要运行的迭代次数。

14.加载文本文件

如果您想在 scikit learn 中加载文本文件,您可以使用 load_files 函数。load_files 将根/主文件夹中的每个文件夹视为一个类别,该文件夹中的所有文档都将被分配到相应的类别。

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

示例: 从名为 news_report 的文件夹中加载数据。

from sklearn.datasets import load_filesnews_reports = load_files(
 container_path=”news_report/”,
 description=”News reports in 2020",
 load_content=True,
)

从 l oad_files 函数中,我们在名为 container_path 的参数中传递了文件夹的名称。

**注意:**当设置 load_content=True 时,您也可以使用’ encoding '参数来指定文本的编码。

现在我们可以用 target_names 属性来标识目标名称。

# show target names 
news_reports.target_names

输出将是。

['business', 'healthy', 'international', 'sport']

还可以通过使用两个名为 data 和 target 的属性来指定自变量和目标变量。

# specify the independent variable and the target variable 
X = news_reports.data
y = news_reports.target

结论

正如我所说,scikit-learn 仍然是最受欢迎的开源和机器学习库之一,拥有所有可用的功能,您可以进行端到端的机器学习项目。您还可以在您的机器学习项目中实现本文中介绍的 scikit learn 令人印象深刻的功能。

如果您想了解更多关于 scikit-learn 的信息,我推荐您参加来自 AnalyticVidhya 的免费在线课程

你可以在这里下载包含本文介绍的所有 14 个特性的笔记本。

[## davisy/14-Scikit-Learn-Library 中鲜为人知但令人印象深刻的功能

scikit 学习库中经常未知和被低估的功能示例。…

github.com](https://github.com/Davisy/14-Lesser-Known-Impressive-Features-in-Scikit-learn-Library)

如果你学到了新的东西或者喜欢阅读这篇文章,请分享给其他人看。也可以随意发表评论。在那之前,下一篇文章再见!也可以通过推特 @Davis_McDavid 联系到我。

最后一件事: 在下面的链接里多看看类似这样的文章。

[## 使用投票方法的特征选择

如何应用多种技术来选择 Xverse 包的特性?

medium.com](https://medium.com/analytics-vidhya/feature-selection-by-using-voting-approach-e0d1c7182a21) [## 如何用 Python 日志模块运行机器学习实验

有时候“打印”并不是一个好主意

medium.com](https://medium.com/analytics-vidhya/how-to-run-machine-learning-experiments-with-python-logging-module-9030fbee120e) [## 如何在你的机器学习项目中写配置文件?

用配置文件管理参数和初始设置。

medium.com](https://medium.com/analytics-vidhya/how-to-write-configuration-files-in-your-machine-learning-project-47bc840acc19)

机器学习中的 14 个流行评估指标

原文:https://towardsdatascience.com/14-popular-evaluation-metrics-in-machine-learning-33d9826434e4?source=collection_archive---------47-----------------------

了解分类和回归机器学习模型中使用的所有评估指标及其使用 sklearn 库的实现

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

Unsplash 上由 Hitesh Choudhary 拍摄的照片

评估度量用于测量机器学习模型的性能。对于一个模型来说,评价指标的正确选择是非常重要的。本文将涵盖分类和回归机器学习模型中使用的所有指标。

文章中讨论的评估指标:

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

分类模型中使用的指标:

对于分类机器学习算法,模型的输出可以是目标类别标签或概率分数。这两种方法使用不同的评估标准。

当 ML 模型的预测是类标签时使用的度量:

混乱矩阵:

混淆矩阵是衡量分类问题性能的最简单的方法。它用于可视化和观察 ML 模型的预测性能。对于 k 类分类模型,使用大小为 kk 的矩阵来观察预测。对于二元类分类问题,使用标准的 22 大小的矩阵。

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

来源,用于二进制分类的混淆矩阵

**Notations,**
**TP: True Postive:** Number of Points which are actually positive and predicted to be positive
**FN: False Negative:** Number of Points which are actually positive but predicted to be negative
**FP: False Positive:** Number of Points which are actually negative but predicted to be positive
**TN: True Negative:** Number of Points which are actually negative and predicted to be negative

如果主对角线上的数字最大,非对角线上的数字最小,则认为 ML 模型是好的。对于二进制混淆矩阵, TP 和 TN 应该为高, FN 和 FP 应该为低。

不同的问题有不同的指标可供选择:

  • 对于癌症诊断的问题,TP 应该很高, FN 应该很低接近于 0。患有癌症的患者不应该被预测为不是癌症,这是 FN 的情况。
  • 对于垃圾邮件检测的问题, FP 应该很低。不应该将不是垃圾邮件的邮件预测为垃圾邮件。

什么是一型和二型错误?

第一类错误也称为假阳性(FP)。第二类错误也称为假阴性(FN)。

精度:

准确度是分类算法最常用的性能指标。精确度主要用于平衡数据集。它被定义为正确预测的数量与所有预测的数量之比。

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

  • 精度度量可能不适用于不平衡的数据集,因为它可能偏向于多数类。下述指标克服了这一缺点。

TPR(真阳性率):

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

TPR 是正确预测的肯定类别数与肯定类别总数的比率。

TNR(真阴性率):

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

TNR 是正确预测的否定类别数与否定类别总数的比率。

FPR(假阳性率):

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

FPR 是错误预测的肯定类别的数量与否定类别的总数的比率。

FNR(假阴性率):

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

TNR 是正确错误地否定类别的数量与肯定类别的总数的比率。

精度:

信息检索中使用的精度度量被定义为从预测为正的所有点中,有多少点实际上是正的。

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

精确度指标用于 ML 模型,其中低误报率(FP)很重要,例如垃圾邮件检测。

回忆:

召回率也被称为敏感度,敏感度被定义为从实际上为正的所有点中,有多少点被预测为正。召回率与真实阳性率(TPR)相同。

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

召回指标用于低假阴性(FN)很重要的 ML 模型,如癌症诊断。

F-beta 评分:

对于 FN 和 FP 同样重要的 ML 模型来说,那么我们可以在一个新的称为 F-beta score 的度量中结合精确度和召回率的优势。

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

Here beta is a variable,
(Beta < 1) is used when FP have more impact than FN
(Beta > 1) is used when FN have more impact than FP
(Beta == 1) is used when FN and FP have equal importance

当 Beta=1 时,该指标被称为 F1 得分,对精确度和召回率给予同等的重视。

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

当 ML 模型的预测是概率得分时使用的度量:

ROC 曲线和 AUC:

ROC(接收机工作特性)曲线主要用于基于二元分类的 ML 模型。ROC 曲线和 AUC(曲线下面积)可用于输出概率得分的 ML 模型。

ROC 曲线是连接 TPR 对 FPR 图中不同阈值的所有点的曲线。

ML 模型的输出是概率值,对于不同的阈值,找到 y_hat 值,然后计算 TPR 和 FPR。进一步,画一个图来观察 ROC 曲线和 AUC。

对于下面的样本数据集:

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

(图片由作者提供),样本数据集不同阈值的 TPR 和 FPR 分数

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

Notation,
**x_i:** ith data point
**y:** target binary class label
**y_hat:** predicted probability value
**y_hat(t):** predicted binary class label for threshold - **t**

关于样本数据集的 ROC 曲线(蓝色曲线)如下:

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

(图片由作者提供),上述样本数据集的 ROC 曲线

对于真实世界的数据集,ROC 曲线看起来像这样:

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

(图片由作者提供),ROC 曲线—蓝线

上面的图是 ROC 曲线(蓝色曲线),曲线下的面积称为 AUC(曲线下面积)。橙色线就是 x=y 线,ROC 曲线会一直在这条线上面。

日志丢失:

对数损失也称为交叉熵损失,它使用概率估计来计算模型的性能。模型的概率估计值在 0 到 1 之间。模型的对数损失总是大于 0,0 分是最好的模型。对数损失是我们预测的不确定性量,基于它与实际标签的差异程度。在 Log Loss 值的帮助下,我们可以更准确地了解模型的性能。二元分类的测井曲线损失方程为:

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

Notations,
n: number of points in dataset
p_i: predicted probability of ith point
y_i: actual output class label

下面是一个样本数据集:

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

(按作者分类的图片),样本数据集的实际和预测目标类表

Notation,
**x_i:** ith data point
**y:** target binary class label
**y_hat:** predicted probability value

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

回归模型中使用的指标:

对于回归问题,ML 模型的输出是实值的。计算回归模型性能的各种指标有:

平均绝对误差(MAE):

MAE 是回归问题中使用的最简单的误差度量。MAE 定义为预测值和实际值之间的绝对差值的平均值之和。它通过对实际值的预测可变性求和来计算回归模型的性能。

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

Notation,
**n:** number of data point
**y:** actual real value
**y_hat:** predicted real value

均方根误差(RMSE)和均方误差(MSE):

MSE 与 MAE 相同,但唯一的区别是,它在对实际输出值和预测输出值求和之前,对它们之间的差进行平方,而不是使用绝对值。RMSE 正在计算 MSE 的平方根。

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

Notation,
**n:** number of data point
**y:** actual real value
**y_hat:** predicted real value

R 平方误差:

r 平方度量通常用于解释目的,表示一组预测输出值与实际输出值的拟合优度。

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

Notation,
**n:** number of data point
**y_i:** ith actual real value
**y_hat:** predicted real value
**y_bar: mean of y**

感谢您的阅读!

给每个数据工程师或数据科学家的提示

原文:https://towardsdatascience.com/14-tips-for-every-data-engineer-or-scientist-e4b47fbd8498?source=collection_archive---------49-----------------------

提示作为一名初露头角的数据分析专家,我希望自己知道这些

以下是我发现作为数据专业人员至关重要的 10 件简单的事情。这些技巧虽然显而易见,但却能区分普通的数据专家和杰出的数据专家。这里讨论的技巧与定义问题、生产好的产品和个人发展有关。

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

编辑过的照片由玛琳·莱帕宁原创

1.理解你工作的背景

要生产一个好的产品,你必须了解要制造什么,为什么需要它,你要和谁一起做,什么时候做,在哪里做。这基本上就是应用 5 Ws 了。这里有一些问题。

什么:需要做什么,业务影响或理由是什么?有什么要求?你的范围是什么?

为什么:为什么一定要做?

*谁:*谁是利益相关者——谁是您的最终用户,谁是您需要与之合作的其他团队?

项目必须在什么时候完成?现有系统何时会关闭或数据集何时会过时?

*哪里:*你的产品或流程需要在哪里发生?

这里的目标是获得一套清晰完整的资源、要求和时间表。

2.起草一份你的理想解决方案的计划

这将指导你“如何”做项目。很多时候,你不能实现一个理想的解决方案,而是在你的当前状态和你的理想解决方案之间。

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

图 1:创建解决方案的计划(由作者创建)

3.进行一些流程或数据发现

这是了解当前状态和可用资源,并确定主题专家的研究。发现通常会导致需求、方法和时间表的变化。

4.创建好的代码

人们很容易忘记用于创建数据输出的代码是数据产品的一部分。要创建好的代码:

I .从小处着手并迭代——使用小数据集快速确保代码按预期运行。不断完善。它不会是完美的,这没关系。

二。代码检查——试着想一想什么会破坏你的代码逻辑,以及你如何积极主动地处理它。对于一些关键元素,创建失败保存。

三。优化代码——这可能是 10 分钟代码和 4 小时代码的区别。这对于实时系统尤其重要,因为在实时系统中,客户希望得到即时响应。

四。注释你的代码——你的代码应该让任何人在高层次上都容易理解每一步发生了什么。

动词 (verb 的缩写)建立一个基线来验证你的产品。

5.使自动化

尝试创建可以完全自动化的流程或模型。避免手动输入。

6.测试,测试,再测试!

测试花费的精力和时间取决于您的更改是否可逆。如果流程一旦实施就不可逆转,那么要确保有足够的时间和精力来测试流程和产品的弹性、可靠性和正确性。应该对每个产品执行的一些测试包括:

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

产品开发的关键测试(由作者创建)

7.监控您的产品

建立指标和流程来监控您的产品,并在需要改变时发出警报。

8.沟通

这可以说是处理数据时最重要的技能之一。沟通至关重要,因为它设定了期望。交流-

a.在整个过程中与利益相关者一起细化需求和范围。

b.确保适当使用他们的数据集或产品。

c.与其他团队合作,了解其他技术规范。如果您的流程被部署,它会影响任何其他现有的特性吗?

d.通过尽可能多地评论你的代码、版本和文档,与你未来的自己和其他队友交流。

e.与最终用户和企业一起设定正确的期望值,创建服务级别协议,并就变更流程达成一致。

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

人们谈论的数据来源: fauxels

9.记住没有人是完美的

认识到你不会总是有一个完美的产品,也不会总是有答案。有人向你征求意见通常是有帮助的。

10.检查你的成长

最后但同样重要的是,定期检查您的编码或解决问题的技能是否随着时间的推移而提高。心中有一个目标会有所帮助。对我来说,我通常会查看并尝试模仿我发现最有帮助的包的编码风格。

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

通过练习,一切皆有可能。来源: Tranmautritam

感谢阅读!请随时联系我,让我知道你的想法!😄

从数据到洞察的 15 种数据探索技术

原文:https://towardsdatascience.com/15-data-exploration-techniques-to-go-from-data-to-insights-93f66e6805df?source=collection_archive---------3-----------------------

构建数据探索的艺术

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

照片由 Unsplash 上的 h heyerlein 拍摄

我们都面临过看着原始数据并思考下一步该做什么的焦虑。尽管数据科学算法已经非常成熟,但如何从原始数据发展出真知灼见仍然是一门手艺。

那么,一个人如何构建一门艺术呢?可以做的事情之一是制定某种列表或构建模块。以英语为例。积木是字母 A、B、C 等。有了这些基本的字母积木,我们就能造出漂亮的单词

因此,在本文中,我试图列出最有效的数据探索技术。这个列表绝不是任何详尽的列表,但我在这里的尝试是给数据探索的艺术带来一些结构

为了说明这些数据探索技术,让我举一个汽车的样本数据集。

汽车数据集示例

现在让我举例说明数据探索技术

1.唯一值计数

在数据探索过程中,首先要做的事情之一是查看分类列中有多少唯一值。这给出了数据是关于什么的概念。此处显示了 cars 数据集中分类列的唯一值计数。

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

唯一值计数

正如您将观察到的,唯一值的最大数量在“品牌”列中,这意味着数据集主要围绕不同品牌的汽车

2.频率计数

频率计数是查找列中单个值出现频率。例如,下面是列“make”的频率计数。

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

频率

它显示,在品牌栏中,丰田的价值出现最多(16%),道奇的价值出现最少(4%)。通过这种分析,您可以很好地了解分类变量的内容

3.差异

在分析数值时,一些基本信息如最小值、最大值和方差非常有用。方差很好地说明了值是如何分布的。

这是显示 car 数据集中数值列中数值分布的可视化。

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

差异

上面的可视化是以这样一种方式组织的,即在顶部显示具有高变化的场,在底部显示具有低变化的场。例如,对于我们的汽车数据集,方差最大的字段是价格,方差最小的字段是高度

4.帕累托分析

帕累托分析是一种关注重要事物的创造性方法。帕累托 80-20 法则可以有效地用于数据探索。在汽车数据集中,我们可以对价格列应用帕累托分析,如下所示

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

帕累托分析

正如分析表明,80%的价格低于 17075。这是一个很好的信息,可以让你深入了解什么是可以被认为是高的价格水平

5.柱状图

直方图是数据科学家最喜欢的数据探索技术之一。它给出了大部分值的值域信息。它还提供了关于数据中是否存在任何偏差的信息。如果我们在价格栏中制作一个直方图,它将指示具有最大值的价格范围和具有最小值的价格范围

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

柱状图

6.所有数字列之间的关联热图

术语相关性指的是两个事物之间的相互关系或关联。几乎在任何业务中或出于个人原因,用与他人的关系来表达某事是有用的。寻找相关性在数据探索中非常有用,因为它给出了列如何相互关联的想法

查看数字列之间相关性的最佳方式之一是使用热图。在 cars 数据集中,这是数字列之间的关联热图

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

相关热图

因为相关性热图显示公路英里数和城市英里数之间的高度相关性。您还可以看到其他列之间的相关性

7.两个数值列之间的 Pearson 相关性和趋势

一旦可视化了关联热图,下一步就是查看两个特定数字列之间的关联趋势。例如,以下是汽车数据集中城市 mpg 和公路 mpg 之间的关联

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

皮尔逊相关

这种相关性可视化清楚地显示了两个柱之间非常正的相关性

8.所有分类列之间的 Cramer-V 相关性

Cramer-V 是一种非常有用的数据探索技术,用于发现分类变量之间的相关性。Cramer-V 的结果也可以使用热图来可视化。

在 cars 数据集中,有许多分类列。这是基于所有分类列之间的 Cramer-V 相关性生成的热图

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

克拉默-V 相关矩阵

正如我们可以看到的,列 fuel_system 和 fuel_type 高度相关

9.两个特定分类列之间的相关性

一旦使用 Cramer-V 相关矩阵检查了分类列之间的相关性,就可以进一步研究任意两个分类列之间的相关性。这可以使用两列之间的气泡图来完成,气泡的大小表示出现的次数

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

分类列之间的相关性

你会发现大多数燃料系统都有一种燃料类型的气体,证实了这两个领域之间的强相关性

10.聚类大小分析

我们生活在一个拥有海量数据的世界。很容易陷入数据过载的困境。为了在这个不断增长的数据世界中生存,我们需要从高层次的角度来看待事物。

将事物组合在一起可以让我们有一个高层次的视角。成组的数据允许我们首先查看成组的而不是单个的数据点。您更喜欢查看数百万条数据记录还是查看几组数据?答案显然是以后,因为我们人类更喜欢以自上而下的方式理解

数据科学可以帮助我们完成从大量数据中创建少数群体的惊人壮举。在数据科学术语中,分组的过程也称为聚类或分段。制作数据段是一种很好的数据探索技术,因为它提供了一个很好的数据概览

作为分段的第一步,对聚类大小进行分析是有用的。聚类大小分析显示了如何将数据分成不同的组。

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

聚类大小分析

正如我们可以观察到的,如果我们将所有数据分为 3 组,那么我们将拥有大小大致相同的簇

11.聚类或分割

一旦确定了簇的数量,下一步就是将所有数据分成特定数量的簇或段。

此处显示的是将所有数据分为三类的结果。这一结果在数据探索中非常有用

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

使聚集

为了使聚类成为更有效的数据探索工具,有必要了解聚类的含义。在本例中,我们观察到决定聚类的重要列是整备质量和长度。基于此,我们可以看到汽车可以分为三类——小型车、中型车和大型车。这种聚类练习在数据探索中非常有用

12.异常值概述

在数据中发现一些不寻常的东西称为离群点检测(也称为异常检测)。这些异常值代表一些不寻常的、罕见的、异常的或特殊的东西。离群值不一定意味着负面的东西。异常值分析极大地帮助提高探索性数据分析的质量

数值列中的异常值可以通过各种技术获得,如标准偏差分析或隔离森林等算法。异常值概述分析给出了所有数字列中异常值的概述。

气泡图显示具有很低或很高值的列。气泡越大,意味着列中存在的异常值越多

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

异常值概述

上面显示了 cars 数据集中数值列的异常值概述。它显示大多数异常值都在“气缸数量”列中

13.单个数值列的异常值分析

一旦您检查了哪些列具有非常高或非常低的值,您就可以分析各个列。

可视化中显示了一个方框图。在方框图中,正常范围由最左侧和最右侧的垂直线表示。超出正常范围的点是异常值。左侧的点是非常低的值,最右侧的点是非常高的值

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

单个数值列的异常值

作为上面的例子,cars 数据集中列马力的异常值分析如上所示

14.多个列的异常值分析

探索性数据分析的一个重要步骤是基于多列(行级)发现异常值。这可以使用各种算法来实现,例如隔离森林

显示散点图,异常值用不同颜色标记(标签 1)。散点图的轴基于列,因此该行是异常值。

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

多个列的异常值分析

在异常值分析过程中,获取数据点或数据行是异常值的原因也很重要。在 cars 数据集的示例中,您可以看到大多数异常值都与高权重和高长度相关

15.专业可视化

到目前为止,你所看到的大多数可视化都是经典的,比如条形图、散点图等…然而,在数据勘探过程中,添加一些专门的可视化工具非常有价值,如雷达图、神经网络可视化工具或 Sankey 图表

这有助于更好地理解数据。雷达图有助于比较。而神经网络可视化可以帮助理解哪些列的组合可能是重要的特征,或者还可以帮助理解隐藏或潜在的特征。桑基图在进行路径分析时非常有用

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

用于比较的雷达图

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

理解隐藏或潜在特征的神经网络

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

用于路径分析的 Sankey 图

还有很多数据探索技术,但是上面的 15 个会给你一个好的开始。下次您看到一些原始数据时,借助这些数据探索技术,您将很快获得真知灼见

额外资源

网站(全球资讯网的主机站)

你可以访问我的网站进行零编码分析。https://experiencedatascience.com

订阅每当我发布一个新的故事时,请及时通知我。

[## 每当 Pranay Dave 发表文章时,您都会收到电子邮件。

每当 Pranay Dave 发表文章时,您都会收到电子邮件。通过注册,您将创建一个中型帐户,如果您还没有…

pranay-dave9.medium.com](https://pranay-dave9.medium.com/subscribe)

你也可以通过我的推荐链接加入 Medium。

[## 通过我的推荐链接加入 Medium—Pranay Dave

作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…

pranay-dave9.medium.com](https://pranay-dave9.medium.com/membership)

https://www.youtube.com/c/DataScienceDemonstrated 的 YouTube 频道
这里是我的 Youtube 频道
的链接

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

原文:https://towardsdatascience.com/15-git-commands-you-should-learn-before-your-very-first-project-f8eebb8dc6e9?source=collection_archive---------10-----------------------

您需要掌握的唯一 Git 教程是在命令行控制版本,并加速您的开发职业生涯

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

罗曼·辛克维奇Unsplash 拍摄的照片

作为一名 web 开发人员,你刚刚开始你的第一个项目,并且希望跟踪你的工作目录中的大量变化?你最终被选为一名初级数据工程师参加面试,并对版本控制话题感到有些生疏?或者您只是从事数据科学的工作,想要学习更多关于 Git 和命令行的知识,以便向您的团队展示您根本不使用任何 GUI 也可以获得同样的结果?

如果你回答“是的,我在这里!”至少添加到上面的一个配置文件中,那么本教程肯定可以帮助你通过命令行学习更多关于版本控制的知识,而且会很快完成!

和许多其他数据分析师和 BI 开发人员一样,我通过 GitHub GUI 了解了版本控制。当时,我的公司正在使用 Looker 作为可视化工具,它可以配置一个方便的 Git 集成,以便在开发模式下管理文件版本

在提交和部署变更时,每一步在视觉上都非常吸引人和用户友好,直到有一天一位数据工程师告诉我:“版本控制?我总是在我的终端上使用相同的 4–5 个命令,工作完成了!我很少访问用户界面”。

然后他又打了一个字,而我则羡慕地盯着他的笔记本电脑。那时我意识到下一步应该是学习命令行以及如何用 Git 进行版本控制。

在本教程的剩余部分,你会发现我在项目中使用最多的 15 个命令。

[## 3 纳米学位你应该考虑在 2021 年推进你的数据工程职业

towardsdatascience.com](/3-nanodegrees-you-should-consider-to-advance-your-data-engineering-career-in-2021-baf597debc72)

首先,什么是 Git?

Git 是一个用于版本控制的命令行工具,只需在 shell 中输入 Git 即可访问。第一步是创建一个新目录并初始化一个存储库:

$ **mkdir medium_git**
$ **cd medium_git/**

我已经创建了一个 medium_git 文件夹,我将在本教程的剩余部分使用它,它将包括下面讨论的所有命令的列表。可以在我的 GitHub 的 code_tutorials 资源库中找到。

Git 命令解释

1。git init → 该命令初始化 medium_git 文件夹中的存储库,这意味着从现在开始,它将跟踪文件夹中文件的多个版本。初始化 Git 存储库还会创建一个名为的目录。存储库文件夹中的 git 。带有句点前缀的文件和文件夹。)通常是私有的,当您列出文件夹中的文件时,默认情况下不会显示,除非使用 ls -a 命令:

$ **git init**Initialized empty Git repository in /Users/antonellobenedetto/Documents/medium_git/.git/$ **ls -a**.  ..  .git 

然后,让我们创建一个名为 *git_commands、*的 markdown 文件(.md,它只包含对git init 功能的简要描述,并将它保存在 medium_git 存储库中。

  1. git 添加 →在 git 中,文件可以处于以下三种状态之一:已修改已登台已提交。如果您准备提交您修改过的文件,您可以使用git add [file name] 命令将它们添加到暂存区。然后,暂存文件被标记为包含在下一次提交中,但尚未提交:
$ cat git_commands.md1\. git init <-- initializes a repository inside the folder$ git add git_commands.md

使用git add .(或者使用通配符git add *)可以获得相同的结果。唯一的区别是,通过这种方式,存储库中的所有文件将同时转移。

3。git 配置 user.name/user.email在你第一次提交之前,告诉 git 你是谁是个好习惯。当您在团队中工作时,这一点尤为重要,这样每个成员都可以识别出是谁做出了某项承诺:

$ **git config --global user.name ‘anbento’**
$ **git config --global user.email ‘anbento@myemail.com’**

如果您希望检查您的配置设置,请键入git config -l

**4。git commit-m ’ your message '**→commit 在某个时间点将文件的快照存储在存储库中。通过构建这些快照的历史,您可以回滚到更早的时间点。 -m 标志表示您正在添加一条消息,并且它后面的引号中的文本就是提交消息本身。习惯上,提交消息应该提供一些信息,所以如果我们必须回卷或合并代码,那么很明显已经做了哪些更改以及何时做的:

$ **git commit -m ‘Adding git_commands.md file’**[master (root-commit) 815d087] Adding git_commands.md file1 file changed, 3 insertions(+)create mode 100644 git_commands.md

5。git log →您可以使用这个命令调出存储库的提交历史。每个提交都分配有一个 40 字符长的唯一 ID 或散列。提交散列是永久的,这意味着Git 保存它们,并将它们包含在本地和远程 repos 之间的传输中。另请注意,提交作者的姓名和电子邮件如何显示在每个提交历史记录下:

$ **git log**commit 815d087f132288112b7e427617be0408e6db4974 (**HEAD -> master**)Author: anbento <anbento@myemail.com>Date: Sat Apr 4 08:19:16 2020 +0100Adding git_commands.md file

**6。git remote add[remote name][remote URL]**→有时,您可能希望将您的更改推送到(例如)GitHub 上的一个存储库,以便您可以使用其他设备访问您的完整项目历史,或者只是与您的团队协作。为了做到这一点,您首先必须创建存储库本身,然后在终端中运行命令:

$ **git remote add origin** [https://github.com/anbento0490/code_tutorials.git](https://github.com/anbento0490/code_tutorials.git)$ **git remote -v**origin https://github.com/anbento0490/code_tutorials.git (fetch)
origin https://github.com/anbento0490/code_tutorials.git (push)

在这种情况下,首先我在我的 GitHub 帐户上创建了code _ tutorials资源库,然后我将它作为 remote 添加到 origin 别名下。请记住"只是一个约定俗成的名称,但是如果您愿意,您可以随意给遥控器起不同的名字。通过指定 -v 选项,您可以检索分配给每个别名的完整远程 url。如果您犯了一个错误,希望移除遥控器,只需运行git remote remove origin 命令。

7。git push[remote name][branch name]→一旦您对 repo 的本地版本进行了更改,您就可以将它们推送到远程 repo,这样您的项目及其整个提交历史就可以安全地存储在云中。这意味着,即使你的笔记本电脑崩溃或被盗,你的作品也不会丢失,并且可以从你的 GitHub 帐户中找回。为此,您需要**将主分支推至远程【原点】回购*😗

*$ **git push origin master**Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 282 bytes | 282.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)To [https://github.com/anbento0490/code_tutorials.git](https://github.com/anbento0490/code_tutorials.git)
* [new branch] master -> master*

一旦您这样做了,原来只在本地工作目录中可用的文件将被上传到您的远程 repo 中,以及关于您的提交的信息:

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

8。git clone[repository URL][folder name]→如果您或您的同事希望在另一个设备上下载您的项目文件夹,您可以通过在本地克隆远程存储库来实现。在我的例子中,我回到了主目录,并克隆了存储库,指定了原来的名称 medium_git :

*$ **git clone** [**https://github.com/anbento0490/code_tutorials.git**](https://github.com/anbento0490/code_tutorials.git) **medium_git**Cloning into ‘medium_git’…
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0Unpacking objects: 100% (3/3), done.*

上面的命令不仅创建了一个名为" medium_git "的目录,而且还初始化了其中的一个.git目录,下载了该存储库的所有数据,并签出了一个最新版本的工作副本。

第一次尝试从远程存储库克隆私有 repo 时,会要求您提供用户名和密码 ( 除非已经使用 SSH 密钥连接到 GitHub )。凭据可以通过以下方式直接嵌入 url:

*git clone https://your_username:your_pw@github.com/anbento0490/repo_name.git*

提供一次身份验证后,Git 会在内存中缓存您的凭证,并在需要时分发它们。如果git config credential.helper 命令返回manager,密码被存储在 windows 凭证管理器中,如果它返回store,密码被存储在用户文件夹的.git-credentials文件中,如果它返回oskeychain,密码被存储在钥匙串中。

9git pull 对于本教程,为了模拟协作环境中通常会发生的情况,我直接在 GitHub 中编辑了 git_commands.md 文件,向列表中添加了更多命令,并提交了更改:

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

此操作创建了一个具有唯一标识符的新提交。在运行以下命令之前,提交和更改仅在远程存储库中可见:

*$ **git pull origin master**remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From [https://github.com/anbento0490/code_tutorials](https://github.com/anbento0490/code_tutorials)
* branch master -> FETCH_HEAD
815d087..b3088e3 master -> origin/master
Updating 815d087..b3088e3
Fast-forward
git_commands.md | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)*

10git diff [HEAD~1] [HEAD]→ 如果您现在从远程 repo 中提取后运行git log ,您将看到两次提交,最上面的一次是最近的一次。要查看两次提交之间的差异,只需键入:

***$ **git diff HEAD~1 HEAD****diff — git a/git_commands.md b/git_commands.md
index ddd61c8..3cb7e12 100644
— — a/git_commands.md
+++ b/git_commands.md** @@ -1,3 +1,11 @@+Git 15 Most Used Commands
1\. git init ← initializes a repository inside the folder
+2\. git add
+3\. git config user.name/user.email
+4\. git commit -m ‘ your message’
+5\. git log
+6\. git remote add [remote name][remote url]
+7\. git push [remote name] [branch name]
+8\. git clone [repository url] [folder name]
+9\. git pull [remote name] [branch name]***

您可以使用名为 HEAD特殊变量*,而不是键入每个散列的前 3-4 个字符,该变量总是指向当前分支中最近的提交。您还可以使用快捷方式来获取旧的提交散列,其中 HEAD~1 是本地回购中第二个最新的提交, HEAD~2 是第三个最新的提交,依此类推。***

11。git fetch[remote name][branch name]→git pull 完全一样,该命令用于从远程存储库下载文件并提交到本地存储库中。您可以考虑这两个命令的更保守的版本,因为它将下载远程内容,但不更新您的本地 repo 的工作状态,保持您当前的工作不变。如果您在本地有正在进行的未决变更,git fetch 将避免冲突的发生,并且通常用于协作环境中,以查看其他人都在做什么,而不会强迫您将变更合并到您的存储库中。

为了展示git fetch有多有用,我在 GitHub 的列表中添加了另一个命令并提交了更改,这样远程存储库再次比本地存储库有更多的提交。第三个提交 ID 以 40ae0be 开始,您可以通过运行以下 3 个命令来验证:

***$ **git fetch origin master**remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From [https://github.com/anbento0490/code_tutorials](https://github.com/anbento0490/code_tutorials)
b3088e3..40ae0be master -> origin/master$ **git checkout origin/master**Note: checking out 'origin/master'.
You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example:git checkout -b <new-branch-name>HEAD is now at 40ae0be... Update git_commands.md$ **git log**commit 40ae0bebb77b8df716439b94bb5005a65c0e6301 (**HEAD**, **origin/master**)Author: AnBento <35920666+anbento0490@users.noreply.github.com>
Date:   Sun Apr 5 06:56:07 2020 +0100Update git_commands.mdcommit b3088e373b881a526844826a2dade7b1443eefbb (**master**)
Author: AnBento <35920666+anbento0490@users.noreply.github.com>
Date:   Sat Apr 4 18:39:48 2020 +0100Update git_commands.mdcommit 815d087f132288112b7e427617be0408e6db4974
Author: anbento <anbento@myemail.com>
Date:   Sat Apr 4 08:19:16 2020 +0100
Adding git_commands.md file***

因为提取不会向本地回购添加任何新的提交,所以您应该使用git checkout origin/master 从本地分支()切换到远程分支(源/主)并进入所谓的“分离头状态”。这允许您运行熟悉的命令,如git loggit diff ,探索您的同事提交给远程回购的内容。

12。git reset [ — flag][#hash] →让我们假设在获取新的提交之后,您对团队所做的更改感到满意,因此您运行git pull 来更新您的本地目录,但是在稍后阶段,您注意到了一个问题,并且想要恢复到倒数第二个提交,或者您只是希望看到项目在更早的时间点是什么样子。在这两种情况下,您都可以运行:

***$ **git reset — hard HEAD~1**HEAD is now at b3088e3 Update git_commands.md***

使用这个命令,Git 切换回具有该特定散列的提交。如上所述,为了使你的工作流程更快,你可以利用特殊可变头*。 — hard 标志将工作目录和 Git 历史重置为特定状态。如果您省略了这个标志,或者使用了 —软标志,它将跳过对工作目录的修改,只重置 Git 历史。***

13。Git branch[branch name]/Git branch-d[branch name]→Git branch 允许用户在同一个 repo 中创建几个不同的工作区域。在专业环境中,通常会创建一个新的分支,每当你希望对一个项目做一些改变或者修复一个 bug ,然后当我们完成后,将那个分支合并回主分支。当你初始化一个新的本地 repo 时,Git 自动创建 分支:

***$ **git branch**
* master***

要创建新分支,请运行以下命令:

***$ **git branch project1/add_commands**$ **git branch project1/branch_to_delete**$ **git branch*** master
project1/add_commands
project1/branch_to_delete***

这样,您将创建两个分支( project1/add_commandsproject 1/branch _ to _ delete*),这两个分支现在将与主分支一起列出。分支的名字应该是有意义的,并且清楚地表明它最初被创建的原因(添加一个新特性,修复一个 bug,执行一个杂务)。使用git branch delete [branch name] 命令删除一个分支:***

***$ **git branch -d branch project1/branch_to_delete**Deleted branch project1/branch_to_delete (was b3088e3).***

14。git checkout [branch name] → 要切换到新的分支,请运行以下命令:

***$ **git checkout project1/add_commands**Switched to branch ‘project1/add_commands’***

一个常见的快捷方式是使用git checkout -b [branch name] 命令创建一个新的分支并立即切换到它。一旦创建了分支并添加了 commit,就可以将分支推送到远程 repo。这允许其他人看到您的更改,并在单独的工作区域与您协作:

***$ **git push origin project1/add_commands**Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 444 bytes | 444.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
remote: Create a pull request for ‘project1/add_commands’ on GitHub by visiting:
remote:[https://github.com/anbento0490/code_tutorials/pull/new/project1/add_commands](https://github.com/anbento0490/code_tutorials/pull/new/project1/add_commands)
remote: To [https://github.com/anbento0490/code_tutorials.git](https://github.com/anbento0490/code_tutorials.git)
* [new branch] project1/add_commands -> project1/add_commands***

在我的例子中,我已经将最后 5 个命令添加到列表中,并通过项目 1/add_commands* 分支*提交了更改。最后,我将提交推送到远程回购,这样现在 GitHub 帐户上就可以看到两个分支,其中 project1/add_commands 比主回购多显示一个提交:

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

你也可以使用git branch -r 来显示遥控器上的所有分支,并确认你的分支在那里。相反,git branch -a 将显示本地可用的所有分支:

***$ **git branch -r**origin/master
origin/project1/add_commands$ **git branch -a**master
* project1/add_commands
remotes/origin/master
remotes/origin/project1/add_commands***

15。git merge [new_branch name] → 合并允许开发人员将提交从一个分支复制到另一个分支。这使得协作工作成为可能,因为每个团队成员都可以在他们自己的分支上高效地开发项目功能,而不会发生冲突,然后将它们合并到中,以便最终用户可以访问它们。要将 project1/add_commands 合并到 master, 检出到 master 分支,然后运行git merge 命令:**

***$ **git checkout master**Switched to branch ‘master’$ **git merge project1/add_commands**Updating b3088e3..cdb97d4
Fast-forward
git_commands.md | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)$ **git branch -d project1/add_commands**Deleted branch project1/add_commands (was cdb97d4).***

为了避免混淆,一旦丢失的提交被合并到主分支中,较新的本地分支通常被删除。**

结论

对于那些设法完成本教程的人,我要说:“做得非常好!”我希望你在这里学到的,对你的耐心有所回报。在这篇文章中,我带你了解了在你开始你的第一个 web 开发或数据科学项目之前需要掌握的 15 个 Git 命令,因为版本控制很酷,可以帮你省去很多麻烦!如果你想阅读更多,请确保查看 Bitbucket 提供的这个优秀的 Git 教程

您可能还喜欢:

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

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

towardsdatascience.com](/8-popular-sql-window-functions-replicated-in-python-e17e6b34d5d7) [## 气流:如何在睡觉时刷新股票数据——第 1 部分

在这个关于 Apache Airflow 的第一个教程中,学习如何构建一个数据管道来自动提取、转换和…

towardsdatascience.com](/airflow-how-to-refresh-stocks-data-while-you-sleep-part-1-a464514e45b7)****

15 张图显示了冠状病毒如何改变我们的搜索

原文:https://towardsdatascience.com/15-graphs-which-show-how-coronavirus-is-changing-what-we-search-for-bc07bc4302a3?source=collection_archive---------29-----------------------

在整个西方世界,新冠肺炎病例的迅速增加不仅改变了我们的行为方式,也改变了我们寻找的东西。

随着新冠肺炎病例在整个西方世界的迅速增加,我们许多人转向谷歌获取信息也就不足为奇了。我们不只是研究病毒本身;新冠肺炎正在改变我们搜索旅游、娱乐和金融信息的方式。

为了了解案件的增加如何影响我们的搜索行为,我使用谷歌趋势 API 提取了一系列不同搜索趋势的数据,这些数据与冠状病毒搜索量的增加或正或负相关。下面是我发现的一些最有趣的图表。

旅行

不足为奇的是,全球新冠肺炎病例的增加对我们的旅游态度产生了巨大影响,并随之影响了我们的搜索内容。随着热门度假目的地的病例增加,以及边境关闭的威胁不断增加,越来越多的人开始询问如何取消航班预订:

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

上升的不仅仅是取消;那些有旅行计划的人越来越多地希望申请保单,并购买新的保单:

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

虽然 Skyscanner 等价格聚合器的搜索量有所下降,但通过更通用的搜索词寻找降价航班的人数却有所增加:

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

这并不一定意味着人们仍然在预订航班。搜索量已经从品牌关键词(、【英国航空】、)转向通用关键词(、【机票】、),这一事实可能表明,消费者只是在研究那里有什么,还没有购买的意图。

金融

过去几周的话题之一是冠状病毒恐惧对全球金融体系的影响。由于大量行业的供应链受到冠状病毒爆发的影响,消费者担心他们的金融未来也就不足为奇了。

一个直接影响是,寻求将资产转移出股市、甚至利用这种不确定性的人增多了:

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

鉴于目前的市场动荡,消费者越来越担心经济衰退的前景就不足为奇了。这张图表追踪了过去 3 个月对衰退的搜索,以真正强调担忧的增加以及它与对冠状病毒的兴趣有多么密切的关联:

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

上图中有趣的一点是,在一月底冠状病毒搜索的第一次上升期间,关于衰退的搜索似乎没有显著增加。当时 mainland China 的病例正在上升,但在西方很少观察到病例。

这表明,在普通谷歌用户真正担心衰退的可能性之前,西方的案例有所增加。

运动

随着许多体育比赛和赛事的取消,一个大问题仍然存在:东京奥运会会如期举行吗?

虽然在撰写本文时还不知道这个问题的答案,但消费者越来越担心奥运会将被取消:

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

无论奥运会是否如期举行,搜索量趋势显示,由于消费者对冠状病毒的担忧加剧,门票需求大幅下降:

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

健康

随着冠状病毒成为一种健康流行病,病例的增加影响了我们搜索健康信息的方式也就不足为奇了。

我发现一个有趣的数据切割方法是查看对新冠肺炎主要症状的搜索:

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

有趣的是,这些词的搜索量一直或多或少保持稳定,直到 3 月中旬才急剧上升。这可能是因为随着冠状病毒在西方国家传播,这些症状的发病率增加,而谷歌在西方国家是最常用的。

或者,在围绕冠状病毒的恐慌中,人们更有可能通过谷歌搜索这些症状来确认或拒绝他们是否患有新冠肺炎。毕竟,大多数人都很熟悉喉咙痛,他们通常不会在网上搜索信息。然而,面对感染新冠肺炎病毒的前景,有可能会有更多的人转向谷歌,不管他们是否真的感染了病毒。

另一个有趣的健康趋势与用户在线寻找的健康信息类型有关。虽然对在线医生的搜索(令人惊讶地)保持相当平稳,但人们已经开始越来越多地转向在线症状检查器寻求医疗建议:

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

工作

随着越来越多的西方公司关闭了他们的物理办公室,对远程工作和视频会议的搜索出现了大幅增长:

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

上图中特别有趣的是,橙色和绿色线条直到 3 月 8 日左右才真正开始上升。这可能反映出,尽管新冠肺炎病例越来越多,但在 3 月 9 日周一开始的一周之前,很少有公司实施远程工作。

关于团队沟通软件品牌如 Zoom 和 Slack 如何从向远程工作的转变中获益的新闻已经很多了,看看它们的搜索量就可以反映出:

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

虽然上图中最明显的特征是最右边的巨大跳跃,但也值得注意的是,Zoom 和 Slack 的搜索量在过去两个月里稳步增长。

这可能是由于许多非西方公司在转向远程工作时更早地采用了这些品牌。

娱乐和活动

最后但同样重要的是,西方对冠状病毒日益增长的担忧也改变了我们闲暇时的行为。OpenTable 的首席运营官 Andrea Johnston 已经指出了一个明显的趋势,那就是消费者越来越不愿意外出就餐:

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

然而,不仅仅是餐馆受到冠状病毒恐惧的严重打击,电影院的搜索流量也在下降:

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

上述两种趋势都是可以预测的;谁会愿意在一个封闭的空间里,在一场流行病中,与可能有数百人在一起呢?

你可能期望看到的一些其他趋势似乎还没有出现。随着越来越多的人留在疫情,许多人预计像网飞这样的公司将在整个冠状病毒中繁荣发展。但到目前为止,谷歌趋势并没有显示任何支持这一点的数据:

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

许多人预计在这种环境下蓬勃发展的其他品牌是 Peloton 和 Zwift,这两家最受欢迎的室内锻炼提供商:

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

上面的数据显示,这两个网站的搜索流量都没有显著增加,如果有的话,可能在最近几周有所下降。

也许像网飞和 Peloton 这样的室内友好型品牌期待看到增长还为时过早。也许我们要等到更多的西方国家实施检疫措施后,人们对这些品牌的兴趣才会开始回升。

最后

上面的图表显示,对冠状病毒的日益关注与搜索行为的一些有趣变化相关;无论是我们寻求的金融建议,还是我们寻求的医疗信息。

毫无疑问,这些趋势中的许多可能在几周内看起来完全不同,我们可能会看到我们现在甚至无法预测的新趋势。

你对趋势有什么想法吗?我很想在推特上听到你的想法:@ mackgenfell

【https://mackgrenfell.com】最初发表于

赢得 3 次以上黑客马拉松后我学到的 15 件重要事情

原文:https://towardsdatascience.com/15-important-things-i-learnt-after-winning-more-than-3-hackathons-65c99cebf9fd?source=collection_archive---------21-----------------------

从我赢得黑客马拉松后的经历中得到的重要提示

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

费利佩·费塔多在 Unsplash 上的照片

黑客马拉松是人们展示技能的终极战场。任何黑客马拉松的目的都是让你的想象力引导你拓展这个领域的知识和技能。

两年前,在学习了中级 android 和数据科学技能后,我开始了我的黑客马拉松之旅。到目前为止,我已经参加了 20 多个黑客马拉松,包括在线和离线黑客马拉松。

注意:这些是我已经到达最后阶段的黑客马拉松,不仅仅包括在黑客马拉松中注册。

简单介绍一下我在黑客马拉松中的成就,我是 Smart India 黑客马拉松的冠军,在线数据科学黑客马拉松的冠军和 IIT·马德拉斯黑客马拉松的亚军。

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

智能印度黑客马拉松 2019

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

IIT 马德拉斯 ML 黑客马拉松 2019

在这次旅程中,我根据自己的经验,在每个人参加黑客马拉松之前,为他们列出了 15 条重要的建议。

一次只关注一个黑客马拉松

有这么多的黑客马拉松即将到来,不要试图一次注册多个黑客马拉松。这可能会分散你对他们中任何一个人的注意力。尽可能保持简单,一次在一个黑客马拉松中尽你最大的努力。

黑客马拉松更多的是学习而不是获胜

你应该列出黑客马拉松的候选名单,这会提高你正在学习的技能。

如何组建你的团队

通常,人们会和他们的密友一起参加所有的黑客马拉松。你应该开始组建团队,让那些能为黑客马拉松贡献自己技能的人加入进来。

始终与拥有黑客马拉松所需的各种技能的人组成团队,这样你就可以扩大你的解决方案的范围。

小贴士:和拥有不同技能的人组成团队,这样你就可以向他们学习。我总是尝试和新人一起为黑客马拉松创建团队,因为这有助于提高我的团队合作技能,也可以在如此短的时间内获得与陌生人协调的经验。

理解问题

一旦你创建了你的团队,你需要理解黑客马拉松中提到的问题。你需要了解黑客马拉松背后的原因以及他们试图从黑客马拉松中得到的解决方案。

这个阶段需要时间和努力,因为你必须明智地选择你的黑客马拉松。选择你有想法并且可以帮助提供解决方案的黑客马拉松。

如果你仍然不清楚这个想法,那么你可以参考以前在互联网上解决这个问题的方法,看看人们是如何解决的。

不要直接从网上抄袭想法。黑客马拉松是关于你自己的想法和你如何实现它。

如果需要,领域专业知识

如果你的问题依赖于某个特定的领域,你就需要对那个领域进行研究,以便对问题有一个清晰的认识。例如,很少有黑客马拉松以农业或健康为主题。建议找一个在那个领域有经验的人来指导你把问题搞清楚。

洗脑

你需要和你的队友坐下来讨论你的想法和你如何解决这个问题。继续记下你所有的想法,因为你永远不知道哪个想法会成为你的 USP——独特的卖点

USP——一个可以为问题提供重要解决方案的想法,以前没有实施过。

将你的想法分为两部分→必须做的想法和正常的想法

必须做的事情想法是你必须在你的黑客马拉松中完成的重要想法,而普通的想法是你认为不那么重要而不能完全完成的想法。这将有助于你在时间有限的时候参加黑客马拉松。

记住这是团队的努力

在开始解决方案之前,将项目分配给所有的团队成员。确保每个人都对解决方案做出贡献,因为这将有助于快速完成您的解决方案。如果团队中的某个人完成了项目的 80%,你可能会完成项目,但是你不会学到团队合作的品质或者一个团队实际上是如何一起工作的。

制定计划

既然你被期望在 24 小时内完成这么多工作,你必须制定一个计划并设定你的目标。我总是把工作分成几个小时。例如,我为一个特定的功能分配 2 个小时,并尝试在给定的时间内完成它。

最后记得留 2-3 小时的缓冲时间。会有一些时间,很少有事情会比你分配的时间更长,或者在你的解决方案中可能会有法官建议的改变。

“没有长远打算的人会发现麻烦就在他家门口。”――中国哲学家孔子

不要试图完成所有的事情,

大多数团队没有完全完成他们的项目。这完全没问题,因为每个团队都有很短的时间来创造有价值的产品。

它更多的是关于你的想法和你为把它做成一个产品所付出的努力。

记得我之前告诉你的吗?既然你已经把你的想法分为必须做的想法和正常的想法,你就可以根据它们来确定工作的优先顺序。这将允许您在黑客马拉松期间完成项目的重要功能。

总是寻求帮助

黑客马拉松期间将会指派导师。接受他们的指导。被指派的导师在他们的领域有丰富的经验和知识,所以不要羞于接近他们。他们被指派来帮助你,所以与他们讨论你的想法,使你的解决方案更好。如果你被某个东西卡住了,不要浪费你宝贵的时间去调试它几个小时。向对你的工作有想法的导师寻求帮助。

定期听取反馈

你决定采用的解决方案不一定是评委们想要的。听取导师对关注哪些想法的反馈。

接受反馈将帮助你专注于重要的想法,避免你在对他们没有价值的想法上浪费时间。时间是宝贵的。

午睡

你将连续工作 24 或 36 个小时来解决问题。建议小睡 10 分钟来提神,这样你就能有效地继续工作。相信我,这对提高你的工作效率很有帮助。

与其他团队讨论

在我的黑客马拉松完成后,我会去找其他团队,花一个小时讨论他们的想法。这有助于了解我没有想到的不同想法。

与人分享知识有助于你成长和产生新的想法。

定期测试您的项目

在将你的项目提交给评委之前,一定要多次测试。在我参加的几乎所有黑客马拉松中,我都看到应用程序和网站在评审过程中崩溃。

做最好的准备,做最坏的打算。

如果可能的话,准备好实施的截图和视频。

展示事项

经过几个小时的连续工作和几天的洗脑,你有 5 分钟的时间来解释你的工作。你需要在这 5 分钟内完成所有的努力。

有效的陈述不仅有助于联系你的评委,还能让他们专注于你的核心解决方案。

在您的演示文稿中添加有限的重要内容,并包括图像,以便人们容易理解。

最后,学习比获胜更重要

还记得我开始写这个博客时的任何黑客马拉松的目的吗?

任何黑客马拉松的目的都是让你的想象力引导你拓展这个领域的知识和技能。

以下是你从任何黑客马拉松中学到的重要东西:

  • 促使你在短时间内完成一项任务。
  • 帮助与世界各地的杰出人士建立联系
  • 向您展示您可以改进的地方
  • 增强你的软技能
  • 帮助你学习新技能
  • 与人合作完成任务
  • 帮助你跳出思维定势
  • 通过将热情和勤奋的人聚集在一起来激励你

如果你赢了又有什么区别呢?

赢得黑客马拉松只是蛋糕上的樱桃。

老实说,更多的是学习和提高自己,而不是获胜。在黑客马拉松结束时,总是问自己是否为自己的所作所为感到骄傲。获得成就感比胜利更重要。我总是惊讶地看到参与者在 24 小时内尽了最大努力后容光焕发的脸。那种感觉是无价的。

希望你们喜欢!

15 分钟后点火

原文:https://towardsdatascience.com/15-minutes-to-spark-89cca49993f0?source=collection_archive---------30-----------------------

从配置到 UDF,像老板一样在 900 秒内开始工作

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

Jukan Tateisi 在 Unsplash 上拍摄的照片

正如我在写的几乎所有关于这个工具的文章一样,Spark 和 SQL 一样超级好用。但是不管我花多少时间写代码,我就是不能在我的大脑中永久存储 Spark APIs】(有人会说我的内存就像 RAM,小而易失(😃。

无论您是想要 Spark SQL 的快速入门,还是不耐烦编写您的第一个查询,或者您和我一样需要一个备忘单**,我相信您会发现这篇文章很有用。**

这篇文章的想法是涵盖 Spark SQL 的所有主要功能/特性,并且在片段中,您总是可以看到原始的 SQL 查询及其在 PySpark 中的翻译。

我将在 上执行我的代码。这个数据集 : 是我几个月前为另一篇中型文章创建的,名为六个 Spark 练习,用来管理所有这些练习 ,它由三个简单的表格组成:

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

基础知识

Apache Spark 是一个用于大规模并行数据处理的引擎。这个框架的一个惊人的特点是它用多种语言公开 API:我通常用 Scala 与它交互,但其他很多人用 SQLPython ,甚至 JavaR

当我们编写一个 Spark 程序时,首先要知道的是,当我们执行代码时,我们不一定对数据执行任何操作。事实上,该工具有两种类型的 API 调用:转换动作。Spark 转换背后的范例被称为惰性评估,这意味着实际的数据处理不会开始,直到我们调用动作
为了理解这个概念,想象一下你需要做一个SELECT和一个列的重命名:而没有调用一个动作 (比如一个collect或者一个count),你的代码只是定义了所谓的 Spark 执行计划 ,也就是一旦一个动作被触发,将要执行的一组操作。

Spark 在一个有向无环图(非常著名的 DAG )中组织执行计划。该结构描述了将要执行的确切操作,并使调度器能够决定在给定时间执行哪个任务。

正如宫城先生教导我们的:

  1. 蜡上:定义 DAG ( 变换)
  2. 打蜡:执行 DAG ( 动作)

与火花互动

太好了,我们从哪里开始?使用 Spark 有多种方式:

  • 使用 IDE :我会推荐 IntelliJ 或者 PyCharm,但是我想你可以选择你想要的。查看附录中的 PyCharm 快速入门(在本地运行查询)。我认为可以从您的本地环境中使用远程 Spark executor(使用 Livy 肯定可以,不确定没有它是否容易),但说实话,我从未经历过那种配置。
  • Jupyter 笔记本+Spark magic:Spark magic 是一套通过Livy、Spark REST 服务器 [ 1 ]与远程 Spark clusters 进行交互工作的工具。这是你在 AWS、Azure 或谷歌云等云系统上工作时使用 Spark 的主要方式。大多数云提供商都有在大约 10 分钟内配置集群和笔记本电脑的服务。
  • 通过使用 **spark-shell**的终端:有时你不想在你和你的数据之间有任何东西(例如,在一个表上做一个超级快速的检查);在这些情况下,您可以只打开一个终端并启动spark-shell

下面的代码很大程度上是针对 IDE 的。

在编写任何查询之前,我们需要导入一些库并启动一个 Spark 会话(使用数据集和 DataFrame API 编程 Spark 的入口点)。以下 PySpark 和 Scala 代码片段将加载您需要的所有内容(假设您已经配置了您的系统)。之后,为了简单起见,我们只看 PySpark 代码。除了一些细微差别之外,Scala APIs 非常相似。

PySpark

斯卡拉

解释数据集、数据帧和 rdd 之间的差异在我承诺的 15 分钟内无法完成,所以我将跳过这一部分,假装它不存在。

基本操作

您可以编写的最简单的查询可能是您曾经使用过的最重要的查询。让我们看看如何使用Sales表进行基本操作。

简单的 Select 语句和显示数据

我们在代码片段中做的第一件事是定义执行计划;只有当我们输入了显示动作 时才会执行。

我们可以对 Spark 计划采取的其他行动包括:

  • collect() —返回我们的整个数据集
  • count() —返回行数
  • take(n) —从数据集中返回n
  • show(n, truncate=False) —显示n行。您可以决定截断结果或显示所有长度的字段

另一个有趣的注意事项是列由 **col** 对象标识。在本例中,我们让 Spark 推断这些列属于哪个数据帧。

我们可以使用语法execution_plan_variable["column_name"]来指定列来自哪个执行计划。使用这种替代语法,我们得到:

当我们处理连接时,限定字段的源表尤为重要(例如,两个表可能有两个同名的字段,因此仅使用col对象不足以消除歧义)。Scala 中的语法略有不同:

// Qualify the source execution plan in Scala
sales_table.col("order_id")

重命名和添加列

有时我们只是想重命名一个列,或者我们想添加一个新的列进行一些计算(例如一个CASE WHEN):

简单聚合

Spark 支持所有主要的聚合功能。下面的例子仅指“简单”的(如平均值总和计数等)。).稍后将描述数组的聚合。

显示表模式

显示“”模式是一种误导性的措辞;更精确的定义应该是“显示执行计划的输出模式”。有了 Spark APIs,我们可以一个接一个地用管道传输多个操作;使用printSchema API,我们输出如果我们将执行计划的结果写到磁盘上,最终的表会是什么样子。

在下面的示例中,我们重命名了几列,进行了聚合,并添加了另一列。

printSchema的输出是:

root
 |-- product_id: string (nullable = true)
 |-- total_pieces: double (nullable = true)
 |-- fake_column: integer (nullable = false)

注意**printSchema** 不会触发动作*;*相反,Spark 会评估执行计划,以了解 DAG 在输出列方面的走向。由于这个原因,这个操作比 **show** 要快得多,后者反而触发 DAG 的执行。

解释执行计划

动作被触发时,引擎将做什么的更详细解释可以通过explain API 获得。在这种情况下,我们将不会获得最终 DAG 节点的简单模式作为输出,但是我们将获得 Spark 将执行的操作的详细说明。让我们调用前面查询中的explain:

== Physical Plan ==
*(2) HashAggregate(keys=[product_id#361], functions=[sum(cast(pieces#379 as double))])
+- Exchange hashpartitioning(product_id#361, 200)
   +- *(1) HashAggregate(keys=[product_id#361], functions=[partial_sum(cast(pieces#379 as double))])
      +- *(1) Project [product_id#361, num_pieces_sold#364 AS pieces#379]
         +- *(1) FileScan parquet [product_id#361,num_pieces_sold#364] Batched: true, Format: Parquet, Location: InMemoryFileIndex[file:<PATH_TO_FILE>/sales_parquet], PartitionFilters: [], PushedFilters: [], ReadSchema: struct<product_id:string,num_pieces_sold:string>

老实说,我从来没有发现explain API 太有用,尤其是当 DAG 开始变得庞大和复杂的时候。一个更好的视图可以在Spark UI中找到,它展示了相同信息的图形表示

选择不同

什么情况下

Spark 非常好地实现了CASE WHEN操作(不需要专门的 UDFs 让我们简单地用sales_table将每一行插入到不同的桶中,这取决于num_pieces_sold:

联合所有

有时我们需要将我们的流分成多个部分,然后将所有内容合并到一个表中;在 SQL 中,这用UNION ALL表示。在 Spark 2.1 中,在执行UNION ALL操作之前,必须对列进行排序。幸运的是,Spark 2.3 使用列名来对齐正在被合并的执行计划。在下面的例子中,我们首先将我们的表一分为二,然后将各部分合并在一起(完全没有必要,但它将显示如何使用 API):

让我们来看看explain的幕后发生了什么:

Union
**:- *(1) Project [order_id#483, product_id#484, seller_id#485, date#486, num_pieces_sold#487, bill_raw_text#488]**
:  +- *(1) Filter (isnotnull(num_pieces_sold#487) && (cast(num_pieces_sold#487 as int) > 50))
:     +- *(1) FileScan parquet [order_id#483,product_id#484,seller_id#485,date#486,num_pieces_sold#487,bill_raw_text#488] Batched: true, Format: Parquet, Location: InMemoryFileIndex[file:<FILE_PATH>/sales_parquet], PartitionFilters: [], PushedFilters: [IsNotNull(num_pieces_sold)], ReadSchema: struct<order_id:string,product_id:string,seller_id:string,date:string,num_pieces_sold:string,bill...
**+- *(2) Project [order_id#483, product_id#484, seller_id#485, date#486, num_pieces_sold#487, bill_raw_text#488]**
   +- *(2) Filter (isnotnull(num_pieces_sold#487) && (cast(num_pieces_sold#487 as int) <= 50))
      +- *(2) FileScan parquet [order_id#483,product_id#484,seller_id#485,date#486,num_pieces_sold#487,bill_raw_text#488] Batched: true, Format: Parquet, Location: InMemoryFileIndex[file:<FILE_PATH>/sales_parquet], PartitionFilters: [], PushedFilters: [IsNotNull(num_pieces_sold)], ReadSchema: struct<order_id:string,product_id:string,seller_id:string,date:string,num_pieces_sold:string,bill...

粗体的两行是被合并在一起的表。

加入火花

当我们的代码出现性能问题时,连接通常是我们想查看的第一个地方。Spark 引擎在并行化非连接操作方面非常出色,但在处理join任务时可能需要调整。 关于这个话题 我写了一整篇文章,所以就不深究这个了:如果你想了解更多,或者你正遇到一些关于 joins 性能的问题,我绝对建议看看!

同时,这里是加入的语法。在示例中,我们将连接SalesSellers表。

除了传统的加入类型(leftrightinnercross等)。),Spark 也支持semianti加入;这两种基本上是一种方式来表达 **IN** **NOT IN** 在 Spark 中的操作:

窗口功能

窗口函数对特定的行子集执行计算,定义为窗口 。经典的例子是子群的排序。在我们的玩具数据集中,假设我们想知道,对于每个卖家,卖得最多的产品是什么。为了提取这些信息,我们需要:

  1. 定义我们将应用排名函数的“分区”——我们需要对每个seller_id销售的产品执行一次排名操作
  2. 应用我们的首选排序函数 n — dense_rankrankrow_number。这里是 Spark 中的窗口函数列表。

下图是我们希望如何对数据进行分区的示例:

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

用线串

数据科学家在处理数据时面临的另一组非常常见的操作,包括从字符串中提取信息。当然,有很多 Spark APIs 可以对文本数据进行几乎任何(基本)操作。让我们从简单的LIKE操作符开始,然后逐步了解正则表达式的用法。对于 API 的完整列表,我会参考文档;下面,大概是用的最多的那些。

喜欢

在下面的例子中,我们想要使用sales表来选择所有的字符串,其中bill_raw_textLIKE 'ab%cd%'(即从字符串ab开始,中间有一个字符串cd)。

有时候我们想要寻找的模式更复杂,不能用简单的通配符来表达。在这种情况下,我们需要使用正则表达式。让我们深入研究几个函数。在下面的例子中,我们总是要应用相同的正则表达式。

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

(ab[cd]{2,4})|(aa[abcde]{1,2})

像正则表达式(Regex)

用正则表达式提取模式

操纵数组

在大数据领域定义表模式/数据集市时,数组是一种可能会更多使用的数据类型。Spark 实现了很多操作数组的函数(准确的说是从 2.4 版开始就是这样)。让我们深入研究基础知识。

数组聚合

将列转换成数组就像调用聚合函数一样简单。Spark 2.3 有两种主要类型的数组聚合函数collect_setcollect_list:第一种只包含唯一元素,而后者只是一个组到一个列表的转换。

分解数组

聚合的逆操作是“数组爆炸”,意味着从一个水平数组中,我们要生成一个“垂直”列。为此,我们可以使用explode功能。

其他数组操作(从 Spark 2.4 开始)

不幸的是,Spark 2.3 不支持太多的数组操作。很幸运, Spark 2.4 确实!从 Spark 2.4 开始提供的一些功能包括:

  • array_except(array1, array2) —返回 array1 中而不是 array2 中的元素的数组,没有重复。
  • array_intersect(array1, array2)返回 *array1* *array2* 交集中元素的数组,不重复。
  • array_join(array, delimiter[, nullReplacement])使用分隔符和替换空值的可选字符串连接给定数组的元素。如果 *nullReplacement* 没有设置值,则过滤任何空值。
  • array_max(array)返回数组中的最大值。 *NULL* 元素被跳过。
  • array_min(array)返回数组中的最小值。 *NULL* 元素被跳过。
  • array_sort(array)按升序对输入数组进行排序。输入数组的元素必须是可排序的。 *NULL* 元素将被放在返回数组的末尾。

诸如此类。以上定义直接取自参考文献。我建议你去了解更多的细节!

UDF

最后,用户定义的函数。当我们在默认的 API中找不到转换时,UDF 就是我们要走的路。UDF 是一个自定义函数,程序员可以定义它并将其应用于列,就像我们到目前为止看到的所有 API 一样。它们允许最大的灵活性(我们可以在其中编写几乎任何代码);缺点是 Spark 将它们视为黑盒,因此内部 Spark 引擎优化器(Catalyst**)无法进行任何优化:**UDF 可能会降低我们代码的速度。

举个例子,让我们实现一个模拟函数array_repeat(element, count)的 UDF,该函数返回一个包含element count次的数组。

除了 UDF 的语法,我建议关注上面使用的lit函数。一些 Spark 函数只接受列作为输入:如果我们需要使用一个常量,我们可能需要将这个常量转换成一个“ **Column** ”。 **lit** 创建一个 **Column** 的文字值

接下来呢?

太棒了。我希望我能够展示出 Spark 并不比 SQL 更难,它基本上是一样的东西,只是用了类固醇。

可以想象,这篇文章的标题有点言过其实:要精通这个工具需要的时间远远超过 15 分钟;我相信以上是一个很好的快速入门,但 Spark 可以提供更多!

从这里去哪里?首先,我的建议是开始使用上面的 API,因为它们将覆盖 70%的用例。当你对基础知识有信心的时候,我会推荐下面两篇文章,是一位值得信赖的作者( lol )几个月前写的。第一个将向您挑战使用该工具开发时遇到的一些经典问题,而第二个将深入探讨 Spark Joins。

更多关于你的文章可以 关注我中的

[## 火花中加入的艺术

Spark 中加速连接的实用技巧

towardsdatascience.com](/the-art-of-joining-in-spark-dcbd33d693c) [## 六个星火练习来统治他们

一些具有挑战性的 Spark SQL 问题,易于在许多现实世界的问题上提升和转移(带解决方案)

towardsdatascience.com](/six-spark-exercises-to-rule-them-all-242445b24565)

附录—配置 PyCharm

在本地(非分布式)环境中安装 Spark 是一个非常简单的任务。在本附录中,我将向您展示 PyCharm Community Edition 的基本配置,以便使用 Python 运行 Spark。有五个简单的步骤:

  1. 下载 PyCharm 社区版
  2. 下载星火
  3. 安装 PySpark
  4. 配置 PyCharm 执行正确的火花执行器
  5. 测试是否一切正常

细节之前的两个注意事项:

  • 我假设你已经在你的系统中正确安装了 Java。
  • Windows 上,你需要安装 Winutils ,这是运行 Hadoop 所需的一组二进制文件。查看 Git repo 了解更多信息

下载 PyCharm 社区版

幸运的是,JetBrains 有 PyCharm 的开源版本。我们可以从他们的网站下载最新版本。安装很简单。

下载 Spark

我们只需要从 Spark 官方网站下载一个 zip 文件。我在写的时候有两个主要版本可用:3.0.12.4.7。对于文章的范围,我们可以选择其中之一。

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

一旦下载完成,我们只需要在合适的位置解压软件包。

安装 PySpark

是时候运行 PyCharm 并安装所有需要的包了。首先,让我们打开 PyCharm,创建一个新项目和一个新的虚拟环境

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

最后,直接从 PyCharm,我们可以简单地安装 PySpark:

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

注意,为了启用提示,我们还应该安装 **pyspark-stubs**

配置 PyCharm 来执行正确的 Spark 执行器

希望我们没有出错,所以我们只需要指示 PyCharm 运行正确的 Spark 执行器。这位于我们解压 Spark 本身的文件夹中。让我们为 PyCharm 项目创建一个Run Configuration

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

测试是否一切正常

要测试 Spark 是否工作,只需运行下面的代码片段

# Import Libraries
import pyspark
from pyspark.sql import SparkSession
from pyspark.sql.functions import *

#   Initialize the Spark session
spark = SparkSession.builder \
    .master("local") \
    .appName("SparkLikeABoss") \
    .getOrCreate()

print(spark.version)

数据科学家需要知道的 15 个 Python 库

原文:https://towardsdatascience.com/15-python-libraries-that-a-data-scientist-need-to-know-df0b3029ecd9?source=collection_archive---------1-----------------------

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

PexelsPixabay 拍摄的照片

数据收集、清理、转换、可视化、建模、音频/图像识别和网络相关

如果你是一个数据科学家、数据分析师或者仅仅是一个爱好者,你不应该错过一些非常流行和有用的 Python 库。

在本文中,将列出总共 15 个 Python 库,并对其进行简要介绍。我相信他们中的大多数你可能已经熟悉了,但如果没有,强烈建议你自己去看看。

这些库将分为几个类别,它们是

  • 数据采集
  • 数据清理和转换
  • 数据可视化
  • 数据建模
  • 音频和图像识别

数据采集

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

照片由 geraltPixabay 上拍摄

大多数数据分析项目从数据收集和提取开始。有时,当你为某个公司工作以解决一个现存的问题时,数据集可能会被给出。但是,数据可能不是现成的,您可能需要自己收集。最常见的情况是,您需要从互联网上抓取数据。

1.Scrapy

[## Scrapy |一个快速而强大的抓取和网络爬行框架

编辑描述

scrapy.org](https://scrapy.org/)

当你想写一个 Python 爬虫从网站提取信息时,Scrapy 可能是最流行的 Python 库。例如,您可以使用它来提取一个城市中所有餐馆的所有评论,或者收集电子商务网站上某一类产品的所有评论。

典型的用法是根据 URL 模式和 XPath 模式来识别出现在 web 页面上的有趣信息的模式。一旦发现了这些模式,Scrapy 就可以帮助你自动提取所有需要的信息,并把它们组织成表格和 JSON 这样的数据结构。

您可以使用pip轻松安装 Scrapy

pip install scrapy

2.美味的汤

[## 美味的汤

下载|文档|名人堂|企业版|来源|变更日志|讨论组|杂志]您没有…

www.crummy.com](https://www.crummy.com/software/BeautifulSoup/#Download)

Beautiful Soup 是另一个用于抓取 Web 内容的 Python 库。人们普遍认为,与 Scrapy 相比,它的学习曲线相对较短。

此外,对于相对较小规模的问题和/或只是一次性的工作,美丽的汤将是更好的选择。不像 Scrapy,你必须开发自己的“蜘蛛”,然后回到命令行运行它,Beautiful Soup 允许你导入它的功能并在线使用它们。因此,你甚至可以在你的笔记本上使用它。

3.硒

[## Selenium 客户端驱动程序— Selenium 3.14 文档

Selenium WebDriver 的 Python 语言绑定。selenium 包用于从…自动化 web 浏览器交互

www .硒. dev](https://www.selenium.dev/selenium/docs/api/py/index.html)

最初,Selenium 被开发为一个自动化的 Web 测试框架。但是开发者发现,把它当 Web scraper 用还是挺方便的。

Selenium 通常在与网页交互后需要获取有趣的数据时使用。比如你可能需要注册一个账号,然后登录,点击一些按钮和链接后获取内容,而这些链接被定义为 JavaScript 函数。在这些情况下,通常情况下,不容易使用刺痒或美丽的汤来实现,但硒可以。

然而,重要的是要注意到,硒将比正常的刮库慢得多。这是因为它实际上初始化了一个 web 浏览器,如 Chrome,然后模拟代码中定义的所有操作。

因此,在处理 URL 模式和 XPaths 时,一定要使用 Scrapy 或 Beautiful Soup。万不得已才选择硒。

数据清理和转换

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

照片由 Sztrapacska74Pixabay 上拍摄

我想没有必要去宣称数据清理和转换在数据分析和数据科学中有多么重要。还有,有太多优秀的 Python 库很好地做到了这些。我将挑选其中一些,作为数据科学家或分析师,您一定知道它们。

4.熊猫

[## 熊猫

pandas 是一个快速、强大、灵活且易于使用的开源数据分析和操作工具,构建于…

pandas.pydata.org](https://pandas.pydata.org/)

我几乎可以肯定,把熊猫列入这个名单是没有必要的。只要是和数据打交道的,肯定都用过熊猫。

使用 Pandas,您可以操作 Pandas 数据框中的数据。有大量的内置函数可以帮助您转换数据。

不需要太多的文字。如果你想学习 Python,这是一个必须学习的库。

5.Numpy

[## 数字——数字

NumPy 是使用 Python 进行科学计算的基础包。它包含了其他的东西:一个强大的…

numpy.org](https://numpy.org/)

类似地,Numpy 是 Python 语言用户的另一个必须学习的库,甚至不仅仅是数据科学家和分析师。

它将 Python 列表对象扩展为全面的多维数组。还有大量的内置数学函数来支持您在计算方面的几乎所有需求。通常,您可以使用 Numpy 数组作为矩阵,Numpy 将允许您执行矩阵计算。

我相信许多数据科学家将如下开始他们的 Python 脚本

import numpy as np
import pandas as pd

因此,可以肯定的是,这两个库可能是 Python 社区中最受欢迎的库。

6.空间

[## Python 中的 spaCy 工业级自然语言处理

spaCy 旨在帮助您做真正的工作——构建真正的产品,或收集真正的见解。图书馆尊重你的…

空间. io](https://spacy.io/)

Spacy 大概没有前几部出名。Numpy 和 Pandas 是处理数字和结构化数据的库,而 Spacy 帮助我们将自由文本转换成结构化数据。

Spacy 是 Python 最流行的 NLP(自然语言处理)库之一。想象一下,当你从一个电子商务网站上搜集了大量产品评论时,你必须从这些免费文本中提取有用的信息,然后才能对它们进行分析。Spacy 有许多内置特性可以提供帮助,比如工作标记器、命名实体识别和词性检测。

此外,Spacy 支持许多不同的人类语言。在其官方网站上,声称支持 55 个以上。

数据可视化

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

Pixabay 上由 6689062 拍摄的照片

数据可视化绝对是数据分析的基本需求。我们需要将结果和结果可视化,并讲述我们发现的数据故事。

7.Matplotlib

[## Matplotlib: Python 绘图— Matplotlib 3.2.1 文档

Matplotlib 是一个全面的库,用于在 Python 中创建静态、动画和交互式可视化…

matplotlib.org](https://matplotlib.org/)

Matplotlib 是最全面的 Python 数据可视化库。有人说 Matplotlib 丑。然而,在我看来,作为 Python 中最基本的可视化库,Matplotlib 为实现你的可视化想法提供了最大的可能性。这就像 JavaScript 开发人员可能更喜欢不同种类的可视化库,但当有很多定制的功能不被那些高级库支持时,D3.js 就必须参与进来。

我写过另一篇文章介绍 Matplotlib。如果你想了解更多,可以看看这个。

[## Python Matplotlib 介绍,包含 40 个基本示例

Matplotlib 是 Python 中最流行的库之一。在本文中,提供了 40 个基本示例供您…

levelup.gitconnected.com](https://levelup.gitconnected.com/an-introduction-of-python-matplotlib-with-40-basic-examples-5174383a6889)

8.Plotly

[## Plotly Python 图形库

Plotly 的 Python 图形库制作出交互式的、出版物质量的图形。如何制作线图的示例…

plotly.com](https://plotly.com/python/)

老实说,虽然我相信 Matplotlib 是可视化的必学库,但大多数时候我更喜欢使用 Plotly,因为它使我们能够用最少的代码行创建最精美的图形。

无论您想要构建 3D 表面图、基于地图的散点图还是交互式动画图,Plotly 都能在短时间内满足要求。

它还提供了一个图表工作室,您可以将您的可视化上传到一个支持进一步编辑和持久化的在线存储库。

数据建模

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

菲洛娜Pixabay 上拍摄的照片

当数据分析涉及建模时,我们通常称之为高级分析。如今,机器学习已经不是一个新奇的概念。Python 也被认为是最受欢迎的机器学习语言。当然,有很多优秀的库支持这一点。

9.Scikit 学习

[## sci kit-学习

“我们使用 scikit-learn 来支持前沿基础研究[…]”“我认为这是我见过的设计最完美的 ML 软件包……

scikit-learn.org](https://scikit-learn.org/)

在您深入“深度学习”之前,Scikit Learn 应该是您开始机器学习之路的 Python 库。

Scikit Learn 有 6 个主要模块

  • 数据预处理
  • 维度缩减
  • 回归
  • 分类
  • 使聚集
  • 型号选择

我敢肯定,一个钉钉了 Scikit Learn 的数据科学家,应该已经算是一个好的数据科学家了。

10.PyTorch

[## PyTorch

开源深度学习平台,提供从研究原型到生产部署的无缝路径。

pytorch.org](https://pytorch.org/)

PyTorch 由脸书创作,作为 Python 的交互机器学习框架被开源。

与 Tensorflow 相比,PyTorch 在语法方面更“pythonic 化”。这也使得 PyTorch 更容易学习和使用。

最后,作为深度学习焦点库,PyTorch 拥有非常丰富的 API 和内置函数,可以辅助数据科学家快速训练他们的深度学习模型。

11.张量流

[## 张量流

一个面向所有人的端到端开源机器学习平台。探索 TensorFlow 灵活的工具生态系统…

www.tensorflow.org](https://www.tensorflow.org/)

Tensorflow 是另一个由 Google 开源的 Python 机器学习库。

Tensorflow 最受欢迎的功能之一是 Tensorboard 上的数据流图表。后者是一个自动生成的基于 Web 的仪表板,可视化机器学习流程和结果,这对调试和演示非常有帮助。

音频和图像识别

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

Pixabay 上的像素拍摄的照片

机器学习不仅针对数字,还可以帮助处理音频和图像(视频被视为一系列图像帧)。因此,当我们处理这些多媒体数据时,那些机器学习库将是不够的。下面是一些流行的 Python 音频和图像识别库。

12.利布罗萨

[## LibROSA — librosa 0.7.2 文档

LibROSA 是一个用于音乐和音频分析的 python 包。它提供了创作音乐所必需的构件…

librosa.github.io](https://librosa.github.io/librosa/)

Librosa 是一个非常强大的音频和语音处理 Python 库。它可以用来从音频片段中提取各种类型的特征,如节奏、节拍和速度。

使用 Librosa,那些极其复杂的算法,如拉普拉斯分段,可以很容易地在几行代码中实现。

13.OpenCV

[## OpenCV

开放计算机视觉库

opencv.org](https://opencv.org/)

OpenCV 是应用最广泛的图像和视频识别库。毫不夸张地说,OpenCV 使 Python 在图像和视频识别方面取代了 Matlab。

它提供了各种 API,不仅支持 Python,还支持 Java 和 Matlab,以及出色的性能,在业界和学术研究中都赢得了广泛的赞誉。

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

照片由200 度Pixabay 拍摄

不要忘记,Python 在数据科学领域流行起来之前,通常用于 Web 开发。所以,也有很多优秀的 web 开发库。

14.姜戈

[## 姜戈

Django 是一个高级 Python Web 框架,它鼓励快速开发和干净、实用的设计。建造者…

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

如果你想用 Python 开发一个 Web 服务后端,Django 永远是最好的选择。它被设计成一个高级框架,可以用很少的几行代码构建一个网站。

它直接支持大多数流行的数据库,以节省您设置连接和数据模型开发的时间。您只需关注业务逻辑,而不必担心 Django 的凝乳操作,因为它是一个数据库驱动的框架。

15.瓶

[## 欢迎使用 Flask — Flask 文档(1.1.x)

欢迎阅读 Flask 的文档。开始安装,然后了解快速入门概述。有…

flask.palletsprojects.com](https://flask.palletsprojects.com/)

Flask 是 Python 中的一个轻量级 Web 开发框架。最有价值的特点是,它可以很容易地定制任何特定的要求非常容易和灵活。

由于 Flask 的轻量级特性,许多其他著名的 Python 库和提供 Web UI 的工具都是使用 Flask 构建的,如 Plotly Dash 和 Airflow。

结论

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

凯利·西克玛在 Unsplash 上的照片

事实上,有更多著名的 Python 库有资格在此列出。看到 Python 社区欣欣向荣总是令人兴奋的。如果有更多的库成为数据科学家和分析师的必知库之一,可能有必要在另一篇文章中组织它们。

[## 通过我的推荐链接加入 Medium 克里斯托弗·陶

作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…

medium.com](https://medium.com/@qiuyujx/membership)

如果你觉得我的文章有帮助,请考虑加入灵媒会员来支持我和成千上万的其他作家!(点击上面的链接)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值