TowardsDataScience-博客中文翻译-2021-三-

龙哥盟 / 2024-10-22 / 原文

TowardsDataScience 博客中文翻译 2021(三)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

编写机器学习模型时要避免的 3 个错误

原文:https://towardsdatascience.com/3-mistakes-to-avoid-when-you-write-your-machine-learning-model-543ab1a825b5?source=collection_archive---------36-----------------------

机器学习

关于如何优化机器学习模型的开发过程以避免部署阶段出现意外的一些提示。

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

最终我可以松一口气了:我的机器学习模型在训练和测试集上都工作得非常好。用于衡量我的模型性能的所有指标都达到了非常高的性能。我终于可以说我的工作差不多完成了:只需要部署就可以了。

相反,正是在部署阶段,所有的问题都出现了:根据新数据,模型似乎给出了不好的结果。最重要的是,它似乎有代码实现的问题。

在本文中,我描述了在开发机器学习模型时必须避免的三个常见错误,以防止部署阶段出现意外。

1 忘记保存缩放器

在机器学习模型开发的第一阶段,我们着手清理数据,并将其规范化和标准化。

在预处理阶段,可能出现的错误之一是执行以下类型的操作:

df['normalized_column'] = df['column']/df['column'].max()

在前面的例子中,所有东西似乎都可以在原始数据集上工作。但是,当你去部署时,列规范化的问题就出现了。您应该使用哪个值作为比例因子?

这个问题的一个可能的解决方案是将比例因子存储在某个地方:

file = open("column_scale_factor.txt", "w")
scale_factor = df['column'].max()
file.write(scale_factor)
file.close()

前面的解决方案非常简单。或者,可以使用更强大的缩放器,如 Scikit-learn 预处理包提供的缩放器:

form [sklearn.preprocessing](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.preprocessing) import MaxAbsScalerscaler = **MaxAbsScaler**()
feature = np.array(df[column]).reshape(-1,1)
scaler.fit(feature)

安装好定标器后,不要忘记保存它!您将在部署阶段使用它!

我们可以通过利用joblib Python 库来保存缩放器:

import joblibjoblib.dump(scaler, 'scaler_' + column + '.pkl')

听起来不错的 Gif 由 Giphy 上的 Leroy Patterson 制作

2 无限制地增加您的笔记本数量

在寻找表示数据的最佳模型时,我们可能会在获得最佳模型之前测试不同的算法和不同的场景。

在这种情况下,一个可能的错误是在我们测试新算法时创建一个新笔记本。**随着时间的推移,您的文件系统中可能会出现塞满文件的文件夹。**因此,存在无法准确跟踪模型开发过程中采取的步骤的风险。

那么如何解决问题呢?

仅仅对代码进行评论是不够的,我们必须将对话名称输入到各种笔记本中。一个可能的解决方案是在笔记本的标题前加上一个渐进数字,该数字精确地指示在哪个点执行给定的步骤。

这里有一个可能的例子:

01_01_preprocessing_standard_scaler.ipynb
01_02_preprocessing_max_abs_scaler.ipynb02_01_knn.ipynb
02_02_decisiontree.ipynb
..

在前面的示例中,我们使用了以下命名格式:

stepnumber_alternative_name.ipynb

因此,第一个数字表示管道中的步骤号,而第二个数字(下划线后)表示可能的替代方案。

当替代方案被接受时,我们可以将文件重命名为:

02_02_decisiontree_accepted.ipynb

这样,我们在寻找测试中实际使用的模型时就变得容易了。

乔纳森·沃尔夫在 Unsplash 上拍摄的照片

3 使用不同的库版本

我们可能遇到的最后一个错误是在训练/测试和部署阶段使用不同版本的各种被利用的库。

使用不同版本的风险是会有意想不到的行为,这可能会导致错误的预测

这个问题的一个可能的解决方案是创建一个虚拟环境并安装所有必要的库,同时指定要使用的版本,然后在培训/测试阶段和部署阶段使用这个虚拟环境。

在我的上一篇名为的文章中,你有没有想过使用 Python virtualenv?我描述了如何建立一个虚拟环境。

照片由安东在 Unsplash 上拍摄

摘要

在这篇短文中,我描述了在机器学习项目的建模阶段要避免的三个错误:

  • 忘记保存缩放器
  • 没有任何标准地增加您的笔记本
  • 在培训/测试和部署阶段使用不同的库版本

如果你避免了这三个错误,你的工作肯定会进展得更快

如果你已经走了这么远来阅读,对我来说今天已经很多了。谢谢!你可以在这篇文章中读到更多关于我的信息。

你愿意支持我的研究吗?

你可以每月订阅几美元,解锁无限的文章——点击这里。

相关文章

https://pub.towardsai.net/3-different-approaches-for-train-test-splitting-of-a-pandas-dataframe-d5e544a5316

学习数据科学时要避免的 3 个错误

原文:https://towardsdatascience.com/3-mistakes-to-avoid-while-learning-data-science-2f5fe2b45809?source=collection_archive---------1-----------------------

我认为有抱负的数据科学家可能会犯的错误。

在 Unsplash 上 NeONBRAND 拍摄的照片

2019 年开始学习数据科学。我花了将近两年的时间找到了我的第一份工作——数据科学家。当我回顾我的学习历程时,我觉得我完成了很多事情。在这些成就中,我也看到了一些非常明显的错误。

我不后悔犯了那些错误。我想他们每个人都认为我是个人物。然而,如果没有它们,我会有一个更有成效的学习路径。

在这篇文章中,我想分享我在学习数据科学时犯的 3 个错误。

1.看太多了

学习数据科学是一项具有挑战性的任务。困难的不是缺乏资源。学习数据科学有大量的资源。它们以各种形式提供,如视频和教程、文章、MOOC 课程、微型学位等等。

拥有大量的资源并不能保证高效和多产的学习路径。我们需要明智地选择和使用它们。否则,我们会浪费一些时间。

在我开始数据科学之旅时,我大部分时间都在看视频教程。他们清楚地解释了关键术语和概念。其中大多数也很容易理解。我觉得我学习的速度非常快。

没过多久,我就意识到我只是在理解,而不是在学习。我觉得看视频教程有一个很大的谬误。因为他们清楚地解释了事情,你感觉你在学习。然而,你就是明白。

正如 Nick Dam 在这篇文章中所说的,“当学习经历不活跃时,对大脑中发生的学习来说至关重要的神经连接的变化似乎不会发生。许多研究表明,积极参与是大脑变化的先决条件。毫不奇怪,仅仅听一场演示或讲座不会带来学习。”

我们需要积极参与学习。大多数情况下,是无法通过观看视频教程来实现的。我们需要更多的练习。实践教程需要更多的时间,但绝对比学习更有效率。

避免长时间观看视频教程。相反,你应该努力解决具有挑战性的问题。当你在解决这类问题时,你可能会遇到视频教程和 MOOC 课程中没有涉及的障碍。因此,这是一个很好的学习资源。

2.忽略 SQL

SQL 是一种编程语言,用于与关系数据库进行交互。起初,我认为 SQL 是一种从关系数据库中检索数据的工具。但是,远不止如此。

我知道我需要学习 SQL。我学习了基础知识以及如何编写简单的查询。我认为对于一个数据科学家来说,SQL 已经足够了。但是,我显然错了。

SQL 是数据科学家的必备技能。您需要超越编写简单的查询。SQL 提供了许多可用于数据分析和操作的函数和方法。

最著名的数据分析工具可能是 Python 的 Pandas 库。您可以用 Pandas 完成的大多数操作也可以用 SQL 来完成。语法可能没有熊猫那么简单,但几乎总有办法。

使用 SQL 进行数据分析和操作的最大优点是,它只允许检索您需要的数据。这显然比检索批量数据然后执行操作更有效。

我应该花更多的时间学习 SQL。如果我重新开始,我会努力掌握它。在我开始从事数据科学家的工作后,我意识到数据科学家的重要性。

3.做项目而不是一个项目

如果你之前没有数据科学方面的工作经验,展示你技能的最好方式就是做项目。有大量的博客文章强调了项目对于有抱负的数据科学家的重要性。

做项目没有错。我自己也做了一些。问题是,大多数平凡的项目都不够有挑战性。一个你能在一两天内完成的项目不太可能吸引招聘经理。

那些项目有利于学习和练习。然而,依靠他们找到工作是一个错误。与其完成一打这样的项目,不如尝试完成一个脱颖而出的项目。

成为一名数据科学家不仅仅是使用工具和软件包。数据科学家应该能够确定一个可以用数据解决的问题。然后,他们设计并实施解决方案。一个展示你有利用数据找到解决方案的技能的项目是一个游戏改变者。

你应该避免专注于完成几个小菜一碟的项目。相反,你应该尝试提出一个原创的想法。这不是一件容易的事,但如果你做到了,你就能吸引一些招聘经理和招聘人员。

最后的想法

我花了将近两年时间才找到一份数据科学家的工作。在这段时间里,我做了一些好事,也犯了一些错误。我想分享其中的一些。我认为,许多志向高远的数据科学家很可能会犯类似的错误。

重要的是要注意,你的学习风格或旅程可能完全不同于我的。如果是这样,我建议你把重点放在技巧上,让你的学习之旅尽可能高效。时间毕竟是最宝贵的资源。

感谢阅读。如果你有任何反馈,请告诉我。

3 种更好的方法来大幅提高你自己的编程技能

原文:https://towardsdatascience.com/3-more-ways-to-drastically-improve-your-programming-skills-on-your-own-f7a5ac1620e1?source=collection_archive---------18-----------------------

成为更好的程序员

Nubelson Fernandes 在 Unsplash 上的照片

人们对我的上一篇文章 的反应非常好,这是 3 种能让你自己大幅度提高编程技能的方法 。因为你可以做很多事情来独立提高,我决定增加 3 件你可以做的事情来发展你的编程技能。这些建议应该更加实际,并让你积极思考。

💔-ways-to-drastically-improve-your-programming-skills-on-your-own-9359ce670099> [## 3 种方法可以极大地提高你自己的编程技能

towardsdatascience.com](/3-ways-to-drastically-improve-your-programming-skills-on-your-own-9359ce670099)

#1 逻辑地解决问题

编程技能应该解决问题。许多人过于关注特定编程语言的复杂性和语法。虽然知道使用编程语言可以做的各种技巧很重要,但如果你能实际解决问题就更好了——即使这意味着要走老路。

我永远不会忘记和我的一个朋友迈克尔坐在一起的那一天。计划是做一个对等编码会议。他有 5 年多的编程经验,所以我很兴奋。当我伸手去拿包里的笔记本电脑时,我看向了迈克尔。他把笔记本整齐地放在桌子上,然后是钢笔,但没有笔记本电脑的迹象。我傻眼了。那天,我们花了大约 45 分钟理解逻辑,然后他拿出笔记本电脑,花了大约 15 分钟编写代码。这是我最大的编程突破。

在纸上解决问题就像在砍树之前磨利你的斧头。它极大地增强了你的编程直觉。开发编程直觉的其他方法包括:

  • 挑选出问题陈述中的关键信息,以理解你可以采取的可能路线、你的限制和最终目标
  • 在不使用或不考虑代码的情况下解决问题
  • 确定您的解决方案失败的情况及其影响
  • 每天刻意寻求解决问题

很容易养成一头扎进代码的习惯。我总是告诉我的朋友,如果你告诉我问题的答案,我可以编写代码,但我自己无法提出实际的解决方案。他的纸笔流程极大地帮助了我。在写代码之前在纸上解决问题是一个好习惯,随着你变得更好,你花在解决问题上的时间将会显著减少。

#2 学习数据结构和算法

自学的时候很容易把事情推掉。例如,我打赌你已经避免了学习数据结构和算法(DSA)的恐惧。有罪!我们都做过,一些非常有经验的程序员提出了一个很好的例子,即理解 DSA 并不总是解决现实世界问题所必需的。另外,这很复杂。我为什么要让我的生活变得更复杂呢?

听着,我不是说不懂 DSA 就不能成为程序员。在你的编程生涯中,你可能走得有点远,但是事实是主观的和有争议的。然而,毫无疑问的是,成为一名更好的程序员需要对 DSA 有很好的理解。

原因很简单。DSA 强化了你的逻辑;它发展你的直觉逻辑肌肉——如果有这样的东西的话。从算法的角度来看。算法仅仅是解决特定问题的一系列步骤。我们每天都在使用算法,但典型的技术性质,我们用一个非常复杂的词来描述我们简单的早晨日常事务——醒来和起床,做 5 个俯卧撑,小便,刷牙,去健身房,等等。

数据结构视角也不例外。这种现象仅仅描述了输入和输出将如何呈现。使用前面提到的早晨例行公事的例子,我的牙刷的初始状态将影响我将如何刷牙。如果我必须自己找到刷毛并把它们粘在一根木棍上,那么我将遵循的加工过程与我从当地超市购买牙刷的过程是不同的。数据结构的要点是不同格式的数据需要不同类型的处理。

你可能会决定付费学习数据结构和算法,但 YouTube 有一些非常棒的老师。而且,你可以通过接受黑客排名的一些挑战来练习你的技能:1) 数据结构 2) 算法。

Python 中的数据结构和算法(参见完整播放列表

#3 编写伪代码

如果你读过关于机器学习算法的研究论文,你可能会遇到伪代码。在某些方面,伪代码是一种编程语言,但它的语法是通用的。因此,所有的编码逻辑都可以用伪代码编写,并很容易翻译成另一种特定的编程语言。

维基百科将伪代码描述为

"一种算法或另一系统中各步骤的简单语言描述"。

本质上,伪代码是以一种使用典型编程语言的结构约定的方式来构造的,但是旨在由人而不是机器来阅读。它是一种向他人而不是向计算机详细描述你的思维过程的方法。这就是问题所在!

向另一个人详述你的思维过程并不难,对吗?他们说最好的学习方法是通过教学。因此,我们可以从使用伪代码开始,想象我们正在向我们想象中的朋友教授我们的思维过程。一旦这些错综复杂的东西被描绘出来,把你的思维过程翻译成计算机能读懂的语言就容易多了。

如何编写伪代码是开始学习更多伪代码的好地方。

最后的想法

专注于你能控制的事情是培养你编程技能的关键。你可以控制自己在发展技能上投入了多少努力。评估一下目前你为成为一名更好的程序员所付出的努力,这会给你一个大概的想法,为什么你会苦苦挣扎。这也有助于确定你在哪里挣扎(例如,是语法问题还是逻辑问题)——这将让你更清楚地知道你需要做什么。

感谢阅读!

如果你喜欢这篇文章,请通过订阅我的免费 每周简讯与我联系。不要错过我写的关于人工智能、数据科学和自由职业的帖子。

相关文章

https://medium.com/geekculture/how-to-cultivate-a-programming-habit-53fd701ca877

我从事数据科学工作 3 年来学到的 3 条最重要的经验

原文:https://towardsdatascience.com/3-most-important-lessons-ive-learned-from-3-years-into-my-data-science-career-acdf783d889c?source=collection_archive---------16-----------------------

我的反思。

照片由 Unsplash 上的 Mantas Hesthaven 拍摄

作为一名数据专家工作了 3 年后,我认为这是一个分享我学到的 3 个最重要的教训的好时机。

我相信这些课程非常重要,因为它们有助于获得成功的数据科学职业生涯。读完这篇文章后,你会意识到成为一名优秀的数据科学家不仅仅是构建复杂的模型。

话虽如此,以下是我在数据科学职业生涯中学到的 3 条最重要的经验!

如果您喜欢这篇文章,请务必订阅https://terenceshin.medium.com/subscribe,千万不要错过另一篇关于数据科学指南、技巧和提示、生活经验等的文章!

1.很大一部分时间实际上是花在你的项目之间(之前和之后)。

作者创建的图像

我注意到的一件事是,几乎所有的数据科学课程和训练营都强调并阐述了项目生命周期的建模阶段,而实际上,这只是整个过程的一小部分。

如果你花了一个月的时间在工作中建立一个初步的机器学习模型,你可以预计花一个月的时间事先了解业务问题,然后记录和社交项目。

不仅建议您在构建模型之前和之后完成这些步骤,而且这对于您项目的成功至关重要。

让我们深入了解每一项的重要性:

  • 业务理解:理解手头的业务问题对你的成功至关重要。例如,如果你正在建立一个机器学习模型,你应该知道模型应该预测什么,谁将使用它,它将如何被实际使用,你将使用什么指标来评估模型,等等。重要的是,你要花时间去理解关于商业目标的一切来创建一个适用的模型。
  • 文档:虽然我同意文档没有浏览数据和构建模型那么令人兴奋,但是为您的代码、您构建的任何表以及模型是如何构建的,拥有清晰简明的文档是很重要的。这真的很重要,这样你或者其他人在使用你的模型或者修复它们的时候就可以很容易地参考这些资源。
  • 社会化:社会化很少被提及,但是如果你的项目没有被企业所利用,它们就不会成功。将你的项目社会化需要向相关的利益相关者展示它们,解释它们的价值,以及如何使用它们。你能向越多的利益相关者推销你的想法,他们就越有可能采用你的数据产品,你的项目就越成功。

这三个步骤有什么共同点?它们都是交流的一种形式。事实上,我认为良好的沟通是数据科学家和高级数据科学家之间的区别。

如果你喜欢这篇文章,请务必 订阅 千万不要错过另一篇关于数据科学指南、技巧和提示、生活经验等的文章!

2.基本面会让你达到 80%以上。

当我开始学习数据科学时,我试图在不学习基础知识的情况下学习最复杂的概念。

经过多年的经验,我意识到这些基础知识足以让你在职业生涯中走完 80%的路程。为什么?更简单的解决方案总是胜出。它们更容易理解,更容易实现,更容易维护。一旦一个简单的解决方案证明了它对公司的价值,只有那时你才能考虑更复杂的解决方案。

那么基本面到底是什么呢?

A) SQL

经过 3 年的工作,我确信掌握 SQL 是事业成功的关键。SQL 不是一项很难学习的技能(例如,从哪里选择),但它肯定是一项很难完善的技能。SQL 对于数据争论、数据探索、数据可视化(构建仪表板)、构建报告和构建数据管道是必不可少的。

如果你想掌握 SQL,看看我下面的指南:

**

b)描述性和推断性统计

很好地理解基本的描述性和推断性统计也是非常重要的。

描述性统计让你以一种简单的方式总结和理解你的数据。

推断统计让你根据有限的数据(样本)得出结论。这对于构建解释性模型和 A/B 测试是必不可少的。

c)用于 EDA 和特征工程的 Python

Python 主要对执行 EDA 和特征工程很重要。也就是说,这两个步骤也可以使用 SQL 来完成,所以这一点要记住。我个人喜欢在我的技术堆栈中使用 Python,因为我发现在 Jupyter 笔记本中执行 EDA 比在 SQL 控制台或仪表板中更容易。

3.迭代并构建一个模型的几个版本比花费大量时间构建一个最终模型要好。

构建、测试、迭代、重复。

一般来说,在一个模型上花费更少的时间来将初始版本投入生产并从那里迭代总是更好的。为什么?

  1. 在初始模型上分配更少的时间会激励你提出更简单的解决方案。正如我在本文前面说过的,更简单的解决方案有几个好处。
  2. 您提出 POC(概念验证)的速度越快,您就能越快地从其他人那里获得反馈以对其进行改进。
  3. 业务需求不断变化,所以如果您能尽早部署您的项目,您就更有可能成功。

我想说的是不是催促你的项目,而是快速部署它们**,这样你就可以接收反馈,迭代和改进**你的项目。

感谢阅读!

我希望您发现这很有见地,并对您的数据科学事业有所帮助!如果你喜欢这个,一定要关注我的未来内容。一如既往,我祝你学习一切顺利!

不确定接下来该读什么?我为你挑选了另一篇文章:

又一个!

[## 六分钟内解释所有概率分布

towardsdatascience.com](/all-probability-distributions-explained-in-six-minutes-fe57b1d49600)

特伦斯·申

  • 如果你喜欢这个, 订阅我的媒介 获取独家内容!
  • 同样,你也可以 跟我上媒
  • 有兴趣合作吗?让我们连线上LinkedIn**

有抱负的数据科学家面临的 3 大动力障碍

原文:https://towardsdatascience.com/3-motivation-breakers-that-aspiring-data-scientists-face-96f4b97f89f5?source=collection_archive---------15-----------------------

以及如何克服它们

瑞安·斯纳特在 Unsplash 上的照片

大约 3 年前,我在 YouTube 上看了一个视频,点燃了我脑海中的火花。这种火花已经成长并照亮了我成为数据科学家的道路。

30 岁后转行对我来说是一个很大的挑战。我不得不在晚上或周末抽出时间学习数据科学。然而,这很有趣,我很高兴我改变了职业。

我花了大约两年时间找到了第一份数据科学家的工作。在这段旅程中,我曾多次质疑自己的决定。在这篇文章中,我想写一些几乎打破我的动机的事情。

1.我来晚了吗?

当我第一次踏入数据科学领域时,我 30 岁。即使我设法找到了工作,我也会从大三开始。考虑到我即将在目前的工作中获得一个头衔,这对我来说是一个很大的问题。

我继续前进。几个月后,我申请了一个志愿者组织的新兵训练营。我通过了初步筛选,被邀请参加面试。去面试的时候,关于时机的问题又一次击中了我。

大多数来面试的人是年轻学生。我想我是那里最老的一个。我又问自己。我来晚了吗?

是的,我可能有点晚了,但当我在大学时,数据科学并不是一个如此受欢迎的领域。即使它很受欢迎,而我不知何故忽略了它,也没关系。我当时 30 岁,正在学习我真正喜欢的东西。

我没有让这个动机破坏者阻止我。我的目标是成为一名数据科学家,我下定了决心。如果你也有同样的感觉,想想在工作中做自己喜欢的事情的快乐。

迟到总比不到好!

2.学的太多了吗?

数据科学是一个跨学科领域,由 3 个主要部分组成。这些组成部分是统计、编程和数学。每个组件都有几个与数据科学相关的概念和主题。

在我取得一些进展后,我感到被要覆盖的大量材料淹没了。对我来说,几乎不可能有足够的时间和精力去学习所有的课程。

是不是太难学了?是的,绝对的。然而,我并不需要学习所有的知识。没人知道。

数据科学的整个范围是极端的。尽管基本原理是相同的,但应用的技术因领域而异。例如,数据科学在金融中的应用与自然语言处理(NLP)技术有很大不同。

如果你试图了解每一个话题,你要么放弃,要么浪费时间。专注核心概念,努力掌握。这将大大增加你找到第一份工作的机会。

3.找不到工作怎么办?

我认为转行最具挑战性的部分是找到你的第一份工作。雇主最看重的是你以前没有的工作经验。

我并不指望在最初的几个月里找到工作。然而,在我花了 6 个月的时间学习后,我开始担心。如果我找不到工作,我的努力就白费了怎么办?

担心是可以的,因为我花了很多时间学习。然而,我不能让这种担心阻止我坚持下去。我用以下行动排除了这个动机破坏者:

  • 问题是没有机会展示我的数据科学技能或知识,而不是我没有学习。因为我以前没有工作经验,所以很难找到潜在的雇主。因此,我更加关注展示我的知识的方式。
  • 即使我不得不多花几年时间来找工作,这也不是一个大问题,因为我喜欢学习数据科学。我甚至可以开创自己的事业,或者实施一个极具潜力的项目。

我也能够消除这种动力障碍。我不断地学习,学习,申请工作。迈出第一步两年后,我找到了第一份工作。开始学习数据科学是我职业生涯中最明智的决定。

结论

如果你正在学习数据科学或计划改变职业生涯,你也可能会遇到一些动力破坏者。你也可能有一些顾虑,让你质疑自己的决定。

你不应该忽视他们。相反,你应该试着用合理的论据来解决它们。有这样的担心当然没问题,但是不要让它们打破你的动力。

最后但同样重要的是,如果你还不是中级会员并打算成为其中一员,我恳请你使用以下链接。我将从你的会员费中收取一部分,不增加你的额外费用。

https://sonery.medium.com/membership

感谢您的阅读。如果您有任何反馈,请告诉我。

数据科学家必备的 3 项软技能

原文:https://towardsdatascience.com/3-must-have-soft-skills-for-data-scientists-58ea2deedb45?source=collection_archive---------23-----------------------

我掌握了 Python 和 SQL,但我准备好了吗?

照片由莱昂在 Unsplash 上拍摄

近年来,数据科学获得了极大的普及。不断增长的收集、传输、存储和处理数据的能力是数据科学普及的一个重要因素。

越来越多的企业能够从数据中创造价值。他们应用数据科学技术或面向数据的策略来改进他们的流程。基于数据的商业决策也被证明是高效和准确的。

由于我们在前面两段中提到的原因,很多人改变了职业,成为了一名数据科学家。同样,大学生比以往任何时候都更加关注数据科学教育。

然而,成为一名数据科学家是一条充满挑战的道路。这需要时间、努力和奉献。你需要学习很多工具,获得不同的技能。

有许多资源,包括我在 Medium 上的一些帖子,解释了成为一名数据科学家需要学习的内容。但大多侧重于编程语言、软件工具和软件包等硬技能,或者某些领域的理论知识。

我花了大约两年时间找到了第一份数据科学家的工作。这是一段艰难的旅程,因为我必须同时保持工作和学习。然而,我很高兴我改变了我的职业道路。

在我开始作为一名数据科学家工作后,我意识到一名数据科学家要想取得成功,应该具备一些软技能。当然,您的 Python 和 SQL 技能或统计知识非常重要。然而,我将要提到的软技能同样重要。

沟通

数据科学家极有可能在团队中工作。你不会被期望独自从头到尾完成一个项目。此外,你不仅需要与数据科学家合作,还需要与其他行业的人合作。

数据科学项目或产品有许多方面。客户端会有一系列的需求。你需要清楚地了解需求。否则,最终产品可能毫无用处。

数据科学可以应用于我们可以收集数据的任何领域。虽然有些操作是标准的,但每个领域都有自己的动态,在设计产品时,您需要考虑到这一点。

领域知识是数据产品的重要输入。数据科学家不可能拥有每个领域的领域知识。因此,你可能不得不与真正在那个领域工作的人交流。

如果您从事一个小项目,您可能会负责 ETL 操作或其他一些数据工程任务。然而,随着项目规模变大,这些任务很可能由数据工程师或其他数据科学家来处理。

这里我想强调的是,一个成功高效的数据产品,是团队合作的结果。让团队高效的是清晰的沟通。

我所说的交流不仅仅是交谈。你需要能够说出你到底需要什么,项目中的步骤是什么,以及你可能会遇到什么瓶颈或挑战。

Icons8 团队在 Unsplash 上的照片

当贡献者之间的交流没有效率或者不清晰时,你的项目很可能会失败或者不能在截止日期前完成。

介绍会;展示会

创建数据产品是一回事。然而,它不能出售自己。你需要能够展示它做了什么,它实现了什么,你如何衡量它的性能,以及它创造了什么价值。

否则,你将很难说服客户或公司的其他部门。

演示是数据科学家必须具备的一项基本技能。你的客户可能没有你的分析思维。除非你表达清楚,否则即使你的队友也可能不明白你的意思。

你的演讲技巧将帮助你克服这些挑战。我说的不仅仅是准备 powerpoint 演示。重要的是你在演示中放了什么,以及你如何演示。

你如何呈现有很大的影响。

您可能需要高级软件工具来进行演示和报告,例如 Tableau 或 Power BI。它们为您提供了非常强大的功能。再说一次,你如何利用它们才是最重要的。

解决问题或分析思维

解决问题和分析思考可以被认为是两种不同的技能。但是,它们相互加强。此外,没有另一个,一个很难实现。

作为一名数据科学家,您不会总是得到解决任务的明确指示。相反,你会遇到一个问题。如何处理问题和设计解决方案将取决于你。

为了更进一步,你甚至需要找出问题是什么。在某些情况下,你会有一个需要改进的过程。它不一定包含问题。你只需要做得更好。

所有这些任务都需要解决问题和分析思考的技能。

你如何获得这些技能超出了我的专业水平。作为一名数据科学家,当然会帮助你提高解决问题和分析思考的能力。

需要强调的是,数据科学家也执行许多标准任务。他们遵循常规。例如,在您获得一些经验后,清理原始数据或进行探索性数据分析将不会那么困难。您需要这些操作的硬技能,所以我们在本文中不关注它们。

结论

我认为数据科学是一个伟大的职业,我很高兴我改变了职业道路,成为了一名数据科学家。

这是一个漫长的旅程,既需要时间,也需要奉献。我花了大量的时间试图获得硬技能。在我开始作为一名数据科学家工作后,我意识到软技能和硬技能一样重要。

感谢您的阅读。如果您有任何反馈,请告诉我。

Python 字符串插值的 3 个必备方法

原文:https://towardsdatascience.com/3-must-know-methods-for-python-string-interpolation-99e6d90b439c?source=collection_archive---------30-----------------------

那份书面声明怎么样?

Jordi Moncasi 在 Unsplash 上拍摄的照片

字符串插值是一种将变量嵌入字符串的方法。与键入整个纯文本字符串不同,占位符是在可以保存变量值的字符串中实现的。

字符串插值允许我们更有效地使用 print 语句。无论是为了调试代码还是确认结果,print 语句很可能会出现在您的脚本中。

在本文中,我们将介绍 Python 中字符串插值的三种方法。他们可以用不同的方式做同样的事情。看完例子,你大概会选择自己喜欢的方式。

用占位符格式化

这是一种古老的方法,现在已经不常用了。“%”运算符用作变量的占位符。

这里有一个简单的例子。

result = 20print("The result is %s." % result)
The result is 20.

我们也可以在一个字符串中添加多个占位符。

name = "John"
id = 22print("Hello %s, your id is %s." % (name, id))
Hello John, your id is 22.

字母 s 与%运算符一起使用,表示占位符。这是一个老方法,所以我们不会去详细。但是,了解这一点仍然很重要,因为您很可能会遇到使用这种方法包含字符串的代码。

字符串格式。格式()

它类似于前面的方法,但是我们用花括号代替“%s”。

result = 20print("The result is {}".format(result))
The result is 20.name = "John"
id = 22print("Hello {}, your id is {}.".format(name, id))
Hello John, your id is 22.

变量按照它们的顺序放在花括号中。还有一个从 0 开始的与花括号相关的顺序。我们可以通过在里面写数字来操纵这个顺序。

print("Hello {1}, your id is {0}.".format(name, id))
Hello 22, your id is John.

索引 0 与 name 变量相关联,因此它被写入指定 0 索引的位置。

我们也可以用一个指定的名字来指代每个花括号。在这种情况下,格式中的顺序并不重要。

year = 2000
price = 100000print("The house is built in {year_built} and worth {value}"\
.format(value = price, year_built = year))The house is built in 2000 and worth 100000.

如果要打印字符串中的小数点,您可以调整要显示的小数位数。

# without adjustment
result = 1.346343454353print("The result of is {result}".format(result = result))
The result of is 1.346343454353# rounded up to 2 decimals
print("The result of is {result: 1.2f}".format(result = result))
The result is 1.35

在表达式“1.2f”中,2 代表小数位数,1 代表变量的大小。它几乎总是被用作 1,但是让我们用不同的值做一个例子来看看它的效果。

print("The result of is {result: 10.2f}".format(result = result))
The result of is       1.35

格式化字符串文字(f 字符串)

格式化字符串,也称为 f 字符串,是三种字符串中最新的一种。Python 3.6 引入了它们。

f 字符串使用花括号作为变量占位符。然而,我们可以将变量名写在花括号内,而不是在最后指定它们。

name = "John"
id = 22print(f"Hello {name}, your id is {id}.")
Hello John, your id is 22.

我们将字母 f 放在字符串字符的前面,告诉 Python 这是一个 f 字符串。

f 字符串比其他两种方法更具可读性。对于开发者来说也更容易。在有许多变量的情况下,跟踪字符串中的变量就成了一项繁琐的任务。

在最后指定变量也容易出错。f 字符串提供的是清晰的语法和易读的代码。

f 弦也可以进行浮点调整。

result = 1.346343454353print(f"The result of is {result: 1.2f}")
The result of is  1.35

如果您需要在打印之前修改变量,那么使用 f 字符串进行这样的修改会更容易。这里有一个例子。

location = "Houston,TX"
price = 100000print(f"The house is in {location[:-2]} and is worth {price * 2}")
The house is in Houston, and is worth 200000

我们省略州,价格翻倍。其他方法也是可行的。然而,使用 f 字符串跟踪这些修改相对容易,尤其是当有许多变量时。

结论

我们经常使用 print 语句,不仅是为了确认结果,也是为了调试。字符串插值允许我们操纵或修改字符串,以充分利用绝版语句。

虽然这三种方法都能胜任,但我更喜欢 f 弦,因为我认为这是最实用的一种。最终,可读性很重要,从这个角度来看 f 字符串更好。

感谢您的阅读。如果您有任何反馈,请告诉我。

高效数据分析的 3 个必备 SQL 函数

原文:https://towardsdatascience.com/3-must-know-sql-functions-for-efficient-data-analysis-b7e4ee820faf?source=collection_archive---------4-----------------------

用实际例子说明

卡尔·海尔达尔在 Unsplash 上拍摄的照片

SQL 是关系数据库管理系统使用的一种编程语言。它提供了许多对存储在关系数据库中的数据进行操作的函数和方法。

SQL 不仅仅是一种查询语言。我们也可以用它来过滤、操作和分析数据。在本文中,我们将介绍 3 个对高效数据分析非常有用的 SQL 函数。

我们将涉及的功能有:

  • 联合
  • 什么情况下
  • 行数

我创建了两个样本表,并用模拟数据填充它们。我们先来看看这些表。

产品表(作者图片)

销售表(作者图片)

这些表包含两个不同商店的销售和产品数据。

1.联合

考虑这样一种情况,我们需要将 sales 表左连接到 products 表。它们通过产品代码联系在一起,所以我们基于该列连接这些表。

SELECT P.*, S.storecode, s.date, s.salesqty, s.salesrevenue                                                                      FROM products P                                                                                                                             LEFT JOIN sales S                                                                                                                           ON P.productcode = S.productcode;

(图片由作者提供)

不是每个产品在给定日期都有销售。对于这些产品,sales 表中的列包含空值(在上面的屏幕截图中为空)。

我们可以使用 coalesce 函数来处理连接表后的空值。在我们的例子中,我们可以用零填充销售数量和销售收入列。日期列可以用其他行中的日期来填充。

SELECT 
   P.*, 
   S.storecode, 
   coalesce(s.date, '2021-05-10') as date,  
   coalesce(s.salesqty,0) as salesqty, 
   coalesce(s.salesrevenue, 0)as salesrevenue                                                                                                                             FROM Products P                                                                                                                             LEFT JOIN Sales S                                                                                                                           ON P.productcode = S.productcode;

(图片由 authot 提供)

空单元格用 coalesce 函数中的指定值填充。我已将商店代码留空。

2.什么情况下

函数允许根据给定条件更新值的情况。它类似于 Python 中的 if-else 语句。

假设我们希望从 sales 表中选择所有列,并根据销售收入创建一个附加列。如果收入高于 5,则该列取值“高”。否则就填“正规”。

我们可以用如下函数时的情况来完成这个操作:

SELECT 
   *,
   CASE WHEN salesrevenue > 5 THEN 'high' ELSE 'regular' END AS
   salesgroup
FROM Sales;

(图片由作者提供)

上述查询中的 case when 语句执行以下步骤:

  • 创建名为“销售组”的列
  • 当“销售收入”列中的值大于 5 时,将“高”分配给此列
  • 否则(即 else)指定“常规”

3.行数

row_number 函数允许根据特定列中的值对行进行排序。通过与分区结合,我们可以使它更灵活或更有用。

回忆一下销售表:

销售表(作者图片)

假设我们需要根据销售收入分配一个等级。我们希望不同的产品组有不同的等级。因此,水果和蔬菜将在它们自己之内被排列。

第一步是从 products 表中获取 product group 列。然后,我们将使用 row_number 函数。

SELECT
   S.*, 
   P.productgroup, 
   ROW_NUMBER() OVER(PARTITION BY P.productgroup ORDER BY  
   salesrevenue DESC) AS salesrank
FROM sales S 
LEFT JOIN products P 
ON S.productcode = P.productcode;

(图片由作者提供)

在每个组中,第一个等级被分配给销售收入最高的行。然后,相应增加。

结论

SQL 是数据科学生态系统中的强大工具。绝对是数据科学家必备的技能。我们不仅应该使用 SQL 从数据库中检索数据,还应该使用 SQL 进行数据分析和操作。

SQL 能够执行几乎所有可以用流行的数据分析库(如 Python pandas 和 R data table)完成的操作。

感谢您的阅读。如果您有任何反馈,请告诉我。

3 门数据工程课程,在 2023 年推进您的职业发展

原文:https://towardsdatascience.com/3-nanodegrees-you-should-consider-to-advance-your-data-engineering-career-in-2021-baf597debc72?source=collection_archive---------8-----------------------

数据工程 | 职业 | Python 编程

加入数据行业,改变角色或通过注册数据工程纳米学位来学习前沿技术。

由 Marvin Meyer 在 Unsplash 上拍摄

给我的读者一个提示:

这篇文章包括附属链接,如果你购买的话,我可以免费(但实际上是打折)为你赚取一小笔佣金。

**** * 通过这个环节获得 70% * ****

还不是中等会员?考虑与我的 推荐链接 签约,以获得 Medium 必须提供的一切,费用低至每月 5 美元**!**

你不再是你在大学里学的样子了

尽管听起来可能有争议,但你已经不是大学时的你了,随着你在职业生涯中的进步,公司将倾向于减少对你在 20 岁出头时参加的课程的关注,而更多地关注你在这一过程中获得的技能,以及一旦被聘用后你将带来的技能。

你不再是你在大学时所学的样子,随着你在职业生涯中的进步,公司往往更关注你在 20 岁出头时参加的课程,而更关注你在这个过程中获得的技能。

不要误解我——从一所好大学毕业仍然是脱颖而出的一种非常有效的方式,尤其是在你人生旅程的起点。此外,对于更传统的角色(如医生、律师、建筑师等……)来说,正式学位仍然是开始成为专业人士的必要步骤。

然而,数据行业的情况并非如此。就拿我的背景来说吧:我有金融经济学学士学位和数量金融学硕士学位。在大学里,我从未上过真正的计算机科学课程,也很少使用 MATLAB 和 R 来完成一些带回家的统计作业。尽管如此,我是一名 BI 工程师。

*</6-sql-window-functions-coding-problems-on-ranking-interview-countdown-p1-9be0ccf66453>

通常,在聊完我的背景后,同事们会问我,我有金融背景,是如何找到数据方面的工作的。我告诉他们真相:当我认真对待这个职业时,我开始在网上参加按需编码课程,每天两个小时。就这样,我先自学了 SQL,然后是 Python,最近又自学了 Apache Spark。

我在网上学到的东西,结合我在工作场所获得的经验,塑造了我成为今天的专业人士。我是我的软技能、技术技能和商业知识的总和。

像许多其他人一样,仅仅是与我的日常训练保持一致,就允许我选择我热爱的职业。

为什么你应该考虑纳米学位

点播课程帮助了我,但随着我在数据工程学习道路上的进步,我注意到,尽管网上提供了大量的编码课程,但找到非常高质量的内容变得越来越具有挑战性。至少在我发现 Udacity 的纳米学位之前是这样。

纳米学位可以被定义为一个基于在线技能的教育项目。事实上,就像标准的大学学位一样,一旦你完成了纳米学位,你将获得一个证书,证明你掌握了一系列技能。

然而,与大学学位不同,纳米学位需要几个月而不是几年才能完成,而且更专注于你所选择领域的实际项目。通过这种方式,你将能够向你的雇主证明,你从第一天起就准备好了创造价值。

注册纳米学位的另一个好处是,你可以选择更广阔的职业道路(如 数据分析tp程序)或更具体的专业领域(如 商业预测分析 程序)。在这两种情况下,结构良好的学习路径都是为你建立的,并由有 FAANG 公司背景的教师传授给你。

下面是我本人参加的三个数据工程课程的真实描述和评论,我参加了由 Udacity 发起的 30 天免费使用 促销活动:

尽管纳米学位还不能完全取代大学课程,但随着时间的推移,它们很可能会成为证明你在数据行业实践经验的标准认证。

2023 年的数据工程纳米学位

无论你的目标是第一次加入数据行业,从事更技术性的职业,还是仅仅试图跟上数据工程的最新趋势,我希望以下至少有一个纳米学位能为你提供一个在旅程中进步的机会:

1.数据结构&算法(Python)纳米度

纳米学位主页

描述 : 在本课程中,您将通过解决 80+道练习题来学习数据结构和算法。你将从学习解决与特定数据结构和算法相关的问题开始每门课程。在每个模块结束时,您将能够针对任何开放式问题评估不同的数据结构和算法,并根据您的设计选择实施解决方案。

教学大纲分为三个主要部分:

  • **简介 😗* python 复习者,如何解题,理解时空复杂性。
  • 数据结构: 其中集合数据结构(链表、数组、链表、队列、堆栈)、递归、树、映射和哈希。
  • 基本算法: 二分搜索法,排序算法,除法&征服算法。
  • 高级算法: g reedy 算法,图算法,动态&线性规划。

预计持续时间: 4 个月,每周学习 10 小时。

**定价:**如果提前支付,每月 279 英镑(4 个月 1116 英镑)。

如果你想为编码回合做好准备,这是一个极好的纳米学位。实际上,数据结构和算法问题是数据工程师、机器学习工程师和数据科学家每次技术面试的关键组成部分。

材料非常透彻,教得也很好,但如果你赶时间,这不是你应该参加的那种课程。相反,你应该提前计划,并承诺至少几个星期。

到目前为止,我的分数是 7.5/10,但仅仅是因为,在我看来,这个课程对于它所服务的主要目的来说有点太长了。

</10-algorithms-to-solve-before-your-python-coding-interview-feb74fb9bc27>

2。 数据工程纳米学位

纳米学位主页

**描述:**在本课程中,您将学习设计数据模型、构建数据仓库和数据湖、自动化数据管道以及处理海量数据集。在课程结束时,您将通过完成一个顶点项目来结合您的新技能。教学大纲分为四个主要部分:

  • 数据建模: 数据模型、关系数据模型、NoSQL 数据模型简介。
  • 云数据仓库: 数据仓库简介,用 AWS 介绍云,在 AWS 上实现数据仓库。
  • ***Spark &数据湖泊:***Spark 的力量,与 Spark 的数据角力,调试优化,数据湖泊入门。
  • 带气流的数据管道: 数据管道,数据质量,生产数据管道。
  • 顶点项目: 结合您在整个项目中学到的知识,构建您自己的数据工程组合项目。

预计持续时间: 5 个月,每周学习 5-10 小时

**定价:**每月 279,如果提前支付(5 个月 1395)。

**回顾:**这个项目是专门为你成为一名数据工程师而设计的,它可能是我在网上找到的最完整的教学大纲。数据工程领域预计将在未来几年继续快速增长,各行业对数据工程师的需求巨大。

在过去的 3 周里,我已经学习了太多关于气流、火花和数据湖的知识,所以我可能会购买剩下的 4 个月来完成 nanodegree。这种材料质量极高,价格完全合理。我此时的标记是 9/10

💔-ways-to-create-tables-with-apache-spark-32aed0f355ab>

**描述:**在本课程中,您将学习如何通过在现代数据工程工具(如 Apache Spark、Kafka、Spark Streaming 和 Kafka Streaming)中构建流畅性来实时处理数据。

您将从理解数据流系统的组件开始。然后,您将构建一个实时分析应用程序。学生还将编译数据和运行分析,以及从流式控制台生成的报告中获取见解。教学大纲分为两个主要部分:

  • 数据流和 SQL&Web 数据建模基础: 流处理简介,Apache Kafka,数据模式和 Apache Avro,Kafka Connect 和 REST 代理,流处理基础,流处理与 Faust,KSQL。
  • 流式 API 开发与文档: 流式 DataFrames,joins 与 JSON,Redis,Base64 与 JSON。

预计持续时间: 2 个月,每周学习 5-10 小时

**定价:**如果提前支付,每月 279 英镑(2 个月 558 英镑)。

**回顾:**该计划旨在提高更有经验的软件工程师和数据工程师的技能,以学习数据处理的最新进展,持续发送数据记录以支持实时更新。

特别是,随着企业越来越依赖于实时生成和处理数据的应用程序,数据流是数据工程师越来越需要的技能。

我发现这是目前在线上结构最合理的数据流课程,因为它既教授阿帕奇卡夫卡阿帕奇火花,这两种课程经常在工作场所的组合中使用。该计划包括先进的材料和相当的技术,所以我喜欢它至今。

我的分数暂时是 9.5/10 ,特别是因为它物有所值,可以用较少的时间投入完成。

结论

在这篇文章中,我分享了关于 3 个工程在线项目的评论,我建议你考虑一下,以便在 2023 年推进你的职业生涯。

根据 2020 年对 Udacity 纳米学位项目毕业生的一项调查:
在打算继续职业生涯的毕业生中,73%的人表示职业前景良好。
·在有意提升自己职位的毕业生中,50%的人获得了加薪,平均增幅为+33%。

尽管纳米学位还不能完全取代大学课程,但随着时间的推移,它们很可能会成为证明你在数据行业实践经验的标准认证。

给我的读者一个提示

还不是中等会员?考虑注册我的推荐链接,以每月 5 美元的价格获得 Medium 提供的一切!

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

3 用于数据科学的不常见但功能强大的 Python 库

原文:https://towardsdatascience.com/3-not-so-common-yet-functional-python-libraries-for-data-science-fa58bbf6b405?source=collection_archive---------16-----------------------

让你的生活更轻松。

萨曼莎·加德斯在 Unsplash 上的照片

Python 主宰数据科学的原因之一是它为用户提供了丰富的库选择。活跃的 Python 社区不断维护和改进这些库,这有助于 Python 保持领先地位。

一些最常用于数据科学的 Python 库是 Pandas、NumPy、Matplotlib、Seaborn、Scikit-learn、TensorFlow 和 PyTorch。它们可以被认为是 Python 库生态系统的一部分。

就像除了 FAANG 之外还有许多成功的公司一样,Python 还有其他在特定情况下派上用场的库。在这篇文章中,我将告诉你其中的三个。

阿尔泰尔

Altair 是 Python 的统计可视化库。它不如 Seaborn 或 Matplotlib 受欢迎,但我建议你也给 Altair 一个机会。

我最喜欢 Altair 的是过滤和数据转换操作。在创建可视化时,它提供了许多操作数据的选项。在这个意义上,Altair 可以被认为是一个更完整的探索性数据工具。

我们还可以用 Altair 创建交互式可视化。此外,可以将选择对象添加到可视化效果中,使您在一个图表上选择的内容在另一个图表上发生变化。很酷的功能!:)

下面的交互式可视化是用 Altair 创建的。右边的是一个直方图,显示了在左边图上选择的数据点的价格分布。

(作者 GIF)

我写过几篇解释如何使用 Altair 的文章。它们构成了一个实用的牛郎星教程,所以如果你想了解更多关于牛郎星的知识,我建议你访问它们。

  • 第一部分:简介
  • 第二部分:过滤和转换数据
  • 第 3 部分:互动情节和动态过滤
  • 第 4 部分:定制可视化
  • 第 5 部分:用 Altair 制作交互式可视化效果

侧桌

Sidetable 是熊猫图书馆的一个附件。它是由克里斯·莫菲特创造的。

Pandas 有一些访问器来使用某些类型的方法。例如,使用 str 访问器可以访问操作字符串的方法。我给出这些信息的原因是 Sidetable 可以像 str 访问器一样用作数据帧的访问器。

它可以从终端或 jupyter 笔记本中安装。

#from terminal
$  python -m pip install -U sidetable#jupyter notebook
!pip install sidetable

为了享受 Sidetable 的乐趣,我们需要将它和熊猫一起导入。

import pandas as pd
import sidetable

Sidetable 的功能类似于熊猫的value_counts功能,但它提供了更多的洞察力。

当应用于分类变量时,value_counts函数给出了每个类别的观察值或百分比份额。另一方面,Sidetable 不仅给出了观察值的数量和百分比,还提供了累积值。

让我们做一个简单的例子来说明这种区别。假设我们有以下数据框。

df 前五行(图片由作者提供)

我们可以找出每个品牌的汽车数量如下。

value_counts 函数(图片由作者提供)

sidetable 返回一个信息更丰富的表格。

侧表(图片由作者提供)

这是一个只有 25 行的样本数据框。当您在现实生活中处理较大的数据框时,Sidetable 将更加实用和实用。

除了freq功能,Sidetable 还有countsmissingsubtotal功能,这些功能也很实用。

如果你想了解更多关于 Sidetable 的知识,这里有两篇文章,并附有几个例子。

  • 熊猫侧桌刚公布
  • 熊猫侧桌:更聪明地使用熊猫

缺少编号

Missingno 顾名思义,是一个帮助处理数据框中缺失值的库。

Pandas 具有查找缺失值的数量或者用合适的值替换它们的功能。Missingno 所做的是创建可视化效果,提供缺失值分布的概述。

这肯定比仅仅知道缺失值的数量更能提供信息。这对于处理缺失值也是一个重要的见解。

例如,如果大多数丢失的值都在同一行,我们可以选择删除它们。但是,如果不同列中缺少的值碰巧在不同的行中,我们可能应该找到更好的方法。

缺失 no 让我们更容易探究缺失值的分布。

结论

Python 是数据科学中一个杰出的库是有原因的。有许多图书馆使你的生活更容易。非常感谢伟大的 Python 社区创建了如此优秀的库。

最后但同样重要的是,如果你还不是中级会员并打算成为其中一员,我恳请你使用以下链接。我将从你的会员费中收取一部分,不增加你的额外费用。

https://sonery.medium.com/membership

感谢您的阅读。如果您有任何反馈,请告诉我。

3 个 NumPy 函数,便于对熊猫进行数据分析

原文:https://towardsdatascience.com/3-numpy-functions-to-facilitate-data-analysis-with-pandas-b1ad342a569?source=collection_archive---------22-----------------------

用 NumPy 提升你的熊猫代码

在 Unsplash 上由 Toa Heftiba 拍摄的照片

Pandas 和 Numpy 是用于数据分析和操作的两个最流行的 Python 库。熊猫配备了许多实用和方便的功能。

Pandas 还允许使用一些 Numpy 函数,这使得 Pandas 的操作更加有效。在本文中,我们将介绍 3 个 Numpy 函数,它们在使用 Pandas 进行数据分析时非常有用。

让我们从导入库和创建样本数据框开始。

import numpy as np
import pandas as pddf = pd.DataFrame({
    "A": np.random.randint(10, size=6),
    "B": np.random.randint(20, size=6),
    "C": np.random.randint(10,20, size=6),
    "D": np.random.random(6).round(2)
})df

df(作者图片)

在哪里

我们感兴趣的第一个是 where 函数,它为创建条件列提供了一种方便的方法。

我们将一个条件传递给 where 函数,并为满足和不满足该条件的行确定一个单独的值。

例如,如果列“B”和“C”中的值都大于 10,我们可以创建一个值为 1 的列“E”。否则,“E”列中的值为 0。

df["E"] = np.where((df["B"] > 10) & (df["C"] > 10), 1, 0)df

df(作者图片)

我们可以使用逻辑运算符组合任意多的条件。

挑选

select 函数就像是 where 的升级版。我们能够应用多个条件来确定每个条件的单独值。

使用 where 函数,我们只能测试一个条件(或一组条件)并确定两个值。select 函数的作用是更进一步。我们可以测试多个条件(或多个条件集),并为满足每个条件集的行分配一个单独的值。它还允许为不满足任何条件的行指定默认值。

举个例子会更清楚。

conditions = [
  (df["B"] >= 10) & (df["A"] == 0),
  (df["B"] >= 10) & (df["A"] == 8)
]values = [1, 2]df["F"] = np.select(conditions, values, default=0)df

df(作者图片)

原木

对数函数,顾名思义,是用来取一个值的对数的。

np.log10(100)
2.0np.log2(16)
4.0np.log(1000)
6.907755278982137

幸运的是,我们可以将 log 函数应用于数据框的整个列。在许多情况下,记录列的日志是一种有用的做法。例如,如果机器学习模型中的目标变量包含异常值,则最好使用模型中目标变量的日志。对数线性模型常用于机器学习。

我们有以下数据框:

df(作者图片)

与目标列中的其他值相比,值 600 和 850 相当大。让我们来看看这个专栏的日志有什么不同。

df["log_target"] = np.log(df["target"])df

df(作者图片)

由于对数函数,差异变得更小。

结论

熊猫和熊猫携手并进。事实上,Pandas 和其他一些 Python 库都是建立在 Numpy 之上的。

在大多数情况下,我们能够用熊猫功能完成任务。但是,在某些情况下使用 Numpy 函数可以提供额外的好处和功能。

感谢您的阅读。如果您有任何反馈,请告诉我。

数据分析师的 3 个在职技巧

原文:https://towardsdatascience.com/3-on-the-job-tips-for-data-analysts-95fd65ae9632?source=collection_archive---------22-----------------------

更好分析的简单步骤

你参加了成为数据分析师所需的所有课程。SQL?检查。Python?检查。你最近成为了一名数据分析师,或者你是一名有抱负的分析师。

毫无疑问,你的技术技能会让你在这个职位上走得更远,但是你怎样才能成为一名更强的分析师呢?

一年前,我从化学工程师专业毕业,在一家科技公司担任数据分析师。我不知道我在数据分析领域的第一个角色会是什么样的。

这里有一些我希望在成为数据分析师之前就知道的技巧,这样你就不用费劲去学习了。

不要犯我的错误!由米哈尔·马特隆在 Unsplash 上拍摄的照片

作为一名数据分析师,我用数据洞察力回答业务团队的问题。这听起来几乎微不足道——数据分析师只是简单地回答问题,对吗?

不完全是。细节决定成败。

分析师回答问题的方式决定了分析的质量。

这就是为什么我的三个建议是

  • 了解问题类型,并恰当地回答。
  • 了解问题的意图——不要成为一只提问的猴子。
  • 讲数据故事。

在我开始之前,我将首先总结一下分析师是做什么的。

分析师的角色

通常,数据洞察最好通过数字或图表来传达。为了实现这一点,我使用了工具箱中的这些工具。

  • SQL 用于从云中提取数据(我的公司使用 BigQuery 和 PostgreSQL)
  • Tableau、Google Data Studio 和 Metabase 都是商业智能(BI)仪表板工具,供利益相关者进行交互。
  • Python 和 R 用于数据争论和可视化,尤其是在需要某些包的情况下。
  • Google Sheets 和 Excel 对于呈现小型数据集是必不可少的。

BI 工具示例。斯蒂芬·菲利普斯-Hostreviews.co.uk 在 Unsplash 上拍摄的照片

下面是一个工作流程示例。

  1. 业务涉众就一个可以用数据回答的问题联系分析师。
  2. 数据分析师与利益相关者一起工作,以理解利益相关者的意图。
  3. 分析师通过数据提供见解和建议,并运用恰当的数据讲述技巧。
  4. 冲洗并重复。

现在,有了这些,我给在职的有抱负的新数据分析师一些建议。

1.了解问题类型,并恰当地回答。

知道问题是回答问题的第一步。西蒙·塞西在 Unsplash 上的照片

分析师回答的问题可能来自不同的团队(销售、产品、营销、运营、战略或工程)。这些问题可以分成六种不同的类型。

描述的

  • 例如谁是我们最活跃的用户?
  • 要求简短、快速的回答。

探索的

  • 例如,为什么某些用户不再活跃?
  • 需要探索多种可能的假设。

推理的

  • 例如,活跃用户 的减少是 Covid 的结果吗?
  • 需要深入研究一个假设,并找出不同数据集之间的相关性。

预言性的

  • 例如,哪个客户将来会成为活跃客户
  • 要求使用预测模型,可能以回归的形式。

原因的

  • 例如,应用内奖励 的引入是否会让更多用户变得活跃?
  • 要求对用户样本进行具有统计意义的实验(比如卡方检验)。

机械论的

  • 例如应用内奖励如何让更多用户变得活跃?
  • 需要探索和连接多个相关的数据集。

知道你在回答什么类型的问题为回答问题提供了一个框架。

要了解更多细节,请阅读罗杰·d·彭和伊丽莎白·松井的免费书籍《数据科学的艺术》。我推荐这是一本相对快速的读物。

**

2。了解问题的意图——不要变成一只提问的猴子。

一个查询猴子根据请求提取数据,而不问数据回答什么问题。通常,数据请求的意图是隐藏的,只有通过一些探查才能发现。这就是为什么我喜欢把数据请求想象成冰山。

一个商业问题的冰山类比。作者插图。

您可能会感到惊讶——有时数据请求者甚至不知道他们真正需要数据的原因。

这就是为什么理解意图有助于分析师更好地回答请求者的问题。在我开始数据提取或探索之前,我确保我理解以下 5W1H

5W1H 的数据

  • 谁是这些数据的最终用户?
  • 这部作品的影响是什么?
  • 相关时期是什么时候?
  • 我能从哪里得到数据?
  • 我们为什么需要这个?
  • 将如何使用数据分析?

这让我们更清楚地了解到需要什么样的数据集来回答需要什么样的问题。我在这里详细介绍了我们如何理解数据请求的意图:

* *

讲述数据故事

数据叙事是一种使用叙事结构来传达数据见解的艺术。如果没有适当的数据叙述,不必要的细节和数据很容易淹没关键的见解。

我在传达见解时喜欢使用的一个技巧是使用*“渐进揭示”。由 Tableau 建议**,它将观众的注意力吸引到一个数据故事上。*

想象一下这个过程:

  • 首先,解释一下什么是轴。
  • 接下来,显示一个样本数据点。
  • 然后,揭示更多的数据点。
  • 使用颜色来显示数据点的差异。
  • 添加动画来显示随时间的变化。

我最喜欢的例子是汉斯·罗斯林的《200 个国家,200 年,4 分钟》。在这里,罗斯林一次构建一个数据故事,一路上吸引观众。

韩的《罗斯林的 200 个国家,200 年》,BBC 四台 4 分钟。

对于更多的数据讲故事技巧,我绝对推荐

要学习数据讲故事,这里有一些我推荐的资源:

  • Datacamp 的用 R 的 tidyverse 讲数据故事。
  • Cole Knafflic 的用数据讲故事。

关闭

在理论上了解这些技巧和在日常工作中实践它们是不同的。将它们融入我的工作后,我发现我能够更好地回答最终用户的问题,他们也更好地理解了我的分析。

如果你喜欢这个,你可能也会喜欢:

*

如果你需要学习数据科学的课程列表,这里是我的建议。

我经常在 Medium 和 LinkedIn 上发布内容,所以请随时在 Medium 和 LinkedIn 上关注我。

https://www.linkedin.com/in/travistang/ *

3 熊猫的功能会让你的生活更轻松

原文:https://towardsdatascience.com/3-pandas-functions-that-will-make-your-life-easier-4d0ce57775a1?source=collection_archive---------5-----------------------

一个通过例子工作的实践指南

莎拉·多维勒在 Unsplash 上的照片

Pandas 是数据科学生态系统中流行的数据分析和操作。它提供了许多通用的函数和方法来执行有效的数据分析。

在本文中,我们将介绍 3 个 Pandas 函数,它们将加速和简化数据分析过程。

1.转换类型

对于有效的数据分析过程,对变量使用最合适的数据类型是至关重要的。

为了使用某些函数,必须有特定的数据类型。例如,我们不能对数据类型为 object 的变量进行任何数学运算。在某些情况下,字符串数据类型优于对象数据类型,以增强某些操作。

Pandas 提供了许多选项来处理数据类型转换。convert_dtypes 函数将列转换为可能的最佳数据类型。显然,单独转换每一列更为实用。

让我们创建一个包含 object 数据类型的列的示例 dataframe。

import numpy as np
import pandas as pdname = pd.Series(['John','Jane','Emily','Robert','Ashley'])
height = pd.Series([1.80, 1.79, 1.76, 1.81, 1.75], dtype='object')
weight = pd.Series([83, 63, 66, 74, 64], dtype='object')
enroll = pd.Series([True, True, False, True, False], dtype='object')
team = pd.Series(['A','A','B','C','B'])df = pd.DataFrame({
    'name':name,
    'height':height,
    'weight':weight,
    'enroll':enroll,
    'team':team
})

df(作者图片)

所有列的数据类型都是 object,这不是最佳选择。

df.dtypes
name      object
height    object
weight    object
enroll    object
team      object
dtype: object

我们可以使用 convert_dtypes 函数,如下所示:

df_new = df.convert_dtypes()df_new.dtypes
name       string
height    float64
weight      Int64
enroll    boolean
team       string
dtype: object

数据类型被转换成可能的最佳选项。convert_dtypes 函数的一个有用特性是,我们可以将布尔值转换为 1 和 0。更适合数据分析。

我们只需要将 convert_boolean 设置为 False。

df_new = df.convert_dtypes(convert_boolean=False)

(图片由作者提供)

2.管

管道功能允许以链状方式组合许多操作。它将函数作为输入。这些函数需要将一个数据帧作为输入并返回一个数据帧。

考虑以下数据帧:

(图片由作者提供)

我们想做三个操作作为数据预处理步骤。

  • 将高度从米转换为英寸
  • 删除至少有一个缺失值的行
  • 如果合适,将字符串列更改为类别

注意:如果类别的数量与总数值相比非常少,最好使用类别数据类型,而不是对象或字符串。根据数据大小,它可以节省大量内存。

我们现在将为每个操作定义一个函数。

def m_to_inc(dataf, column_name):
   dataf[column_name] = dataf[column_name] / 0.0254
   return dataf def drop_missing(dataf):
   dataf.dropna(axis=0, how='any', inplace=True)
   return dataf def to_category(dataf):
   cols = dataf.select_dtypes(include='string').columns
   for col in cols:
      ratio = len(dataf[col].value_counts()) / len(dataf)
      if ratio < 0.05:
         dataf[col] = dataf[col].astype('category')
   return dataf

你可能会说,如果我们需要定义函数,这有什么意义。这看起来不像是简化工作流程。你对一个特定的任务是正确的,但我们需要更普遍地思考。考虑你正在多次做同样的操作。在这种情况下,创建一个管道会使这个过程变得更容易,并且提供更干净的代码。

下面是一个 pandas 管道,它结合了我们定义的三个操作:

df_processed = (df.
                 pipe(m_to_inc, 'height').
                 pipe(drop_missing).
                 pipe(to_category))

(图片由作者提供)

看起来整洁干净。我们可以根据需要添加任意多的步骤。唯一的标准是管道中的函数应该将数据帧作为参数并返回数据帧。

注意:需要提到的一点很重要,管道函数修改了原始数据帧。如果可能的话,我们应该避免改变原始数据集。为了克服这个问题,我们可以在管道中使用原始数据帧的副本。

3.情节

Pandas 不是一个数据可视化库,但是可以用 Pandas 创建许多基本的绘图类型。

用熊猫创建剧情的好处是,我们可以快速生成信息丰富的剧情。与数据可视化库相比,语法也相当简单。

考虑以下包含营销活动数据的数据帧。

营销数据框架(图片由作者提供)

我们可以很容易地创建一个直方图来查看“花费金额”列的分布。

marketing.AmountSpent.plot(kind='hist', title='Amount Spent', figsize=(8,5))

(图片由作者提供)

我们还可以创建一个散点图来直观显示薪水和花费金额列之间的关系。

marketing.plot(x='Salary', y='AmountSpent', kind='scatter',
               title='Salary vs Amount Spent',
               figsize = (8,5))

(图片由作者提供)

通过在 dataframe 或 pandas 系列上应用 plot 函数,我们可以很容易地生成许多其他图。事实上,Pandas 足以涵盖典型数据分析过程中所需的大部分数据可视化。

然而,如果你需要更高级或交互式的可视化,熊猫将不是最佳选择。

结论

我们已经讲述了熊猫的三个重要功能。所有这些都有助于在某种程度上简化数据分析和处理过程。

当然,Pandas 提供了更多的功能和操作,这使得它成为最常用的数据分析库之一。

感谢您的阅读。如果您有任何反馈,请告诉我。

数据治理的 3 个实用技巧

原文:https://towardsdatascience.com/3-practical-tips-for-data-governance-629d55632b05?source=collection_archive---------53-----------------------

强调你今天就可以开始做的 3 件事,让数据治理变得切实可行

数据治理是一个复杂的话题。大多数人都想远离它。当初级数据管理顾问听说他们被分配到一个数据治理项目时,他们并不兴奋。以至于他们真的试图避免所有这些。这不仅仅适用于初级顾问,这是一个遍及整个市场的趋势,一直延伸到高管。关于 DataOps 如何成为新的数据治理以及数据治理 2.0 的必要性,已经有许多文章发表。我不认为数据治理有什么问题,但实现应该更加实际。在这篇博客中,我给出了实现数据治理的三个实用技巧。

在《极端所有权》一书中,叶小开·巴宾和乔科·威林克讨论了“蓝色工作”和“红色工作”的区别。他们解释说蓝色的工作是思考和计划,而红色的工作是做和执行。他们继续解释两者不应该混为一谈,因为当你处于红色工作模式时,你并没有真正的精神空间去做蓝色工作。这就是为什么期望红族工作的人同时做蓝族工作是不公平的。

数据治理和数据管理是一样的:数据管理是红色工作,数据治理是蓝色工作。数据管理是关于行动和执行,而数据治理是关于思考和规划。这就是初级数据管理顾问不喜欢数据治理的原因:他们想要做和执行。数据治理项目通常是非常高级的,并且包含大量的策略文档,而没有真正完成任何事情(除了大量孤独的写作)。

一只喜欢数据治理的怪鸭子——作者图片

我是一只奇怪的鸭子:我从一开始就非常喜欢数据治理项目。但那是因为我真的喜欢蓝色的工作。我喜欢思考概念之间的关系。从这个意义上说,我有点理想主义。但是,我也是结果驱动的。思考和计划是好的——但只是在一定程度上。实际上,我让数据治理的蓝色工作面尽可能的简短和交互。然后是行动时间。下面是我在以前的项目中应用的 3 个非常实用的步骤:

1。用数据职责 丰富你的工作描述

这可能看起来微不足道,但这是一个神奇的快速胜利。数据治理是关于建立角色和职责的。传统上,这是通过建立充满不同角色、级别和会议结构的数据治理框架来实现的。在利益相关者批准之前,几个月已经过去了…事实是,我们真的不需要更多的会议结构。我们还不够多吗?切实可行的方法是从小处着手。将数据集成到现有角色和会议结构中。那是什么意思?在你的工作描述中,你对数据的责任应该正式化。所以这实际上是在一个清单上增加一两个责任。销售人员负责将客户关系的姓名和联系信息正确输入 CRM 系统。销售经理负责定期检查这些信息的准确性和完整性,并要求没有正确完成这项工作的员工进行修正。这是他们工作的一部分。形式化了。如果员工没有做到,那么这就是他们绩效考核的负分。

2。不要迷失在元练习中**

当心迷失在事物的另一面。如果您在无法访问信息的情况下记录信息,您会怎么做?检查一下你自己。我完全支持结构和质量文档,但是要确保它真正增加价值。只花时间定义经常使用的属性。我曾经尝试填写一个数据目录演示环境来说明它是如何工作的…几个小时后我放弃了。一个人做太多的工作,一点也不好玩。为人们实际使用的东西下一个定义,你会收到大量的反馈。记录没有人使用的东西是没有意义的。它不会激励任何人,而且肯定会把人吓跑。如果您的数据目录只是您的数据环境的元反映,请重新考虑它是否会增加价值。有些解决方案还可以索引数据的实际内容。它们比元数据目录增加了更多的价值,因为它们显示了数据内部的内容。这才是最重要的:内容!

3。民主化数据建模

公共语言和数据定义中的一个重要元素是数据模型。这也是一个容易把人吓跑的概念,但是几乎每个商务人士都会画一些图来解释他们在谈论什么。描绘出不同概念之间的相互关系远比没有人使用的业务术语表中的定义要重要得多。至于您的物理数据模型,看看哪些数据属性出现在多个表和/或系统中。如果有,他们有相同的名字吗?这是一件很容易实现的事情,这样做有助于避免如此多的沟通失误。也可以使用草图。当开发必须快速创建一些东西,并且还没有正式的数据模型时,允许他们创建一个临时草图。通过这种方式,您不会减慢流程,并且确实拥有现有解决方案的文档。草图可用于将临时解决方案整合到永久解决方案中。另外,它确实有助于分解业务需求。

如果从实践的角度来看,数据治理不一定是一个复杂的概念。确保你没有让忙于红色工作的人同时做蓝色工作。希望这三个小技巧能帮到你!

3 Python Pandas 高效数据分析技巧

原文:https://towardsdatascience.com/3-python-pandas-tricks-for-efficient-data-analysis-6324d013ef39?source=collection_archive---------6-----------------------

举例说明。

照片由 Unsplash 上的刻痕拍摄

Pandas 是数据科学家高度赞赏的主要数据分析工具之一。它提供了许多灵活多样的功能来执行高效的数据分析。

在这篇文章中,我们将回顾三个熊猫的小技巧,我认为它们会让你成为一个更快乐的熊猫用户。最好用一些例子来解释这些技巧。因此,我们首先创建一个数据框。

数据框包含 3 个不同商店的日销售量。我们首先使用 pandas 的date_range功能创建一个 10 天的时间段。

import numpy as np
import pandas as pddays = pd.date_range("2020-01-01", periods=10, freq="D")

days 变量将被用作一列。我们还需要一个销售数量列,它可以由 numpy 的randint函数生成。然后,我们为每个商店创建一个包含 3 列的数据框。

A = pd.DataFrame({"date": days,
                  "store": "A",
                  "sales": np.random.randint(100, 200, size=10)})B = pd.DataFrame({"date": days,
                  "store": "B",
                  "sales": np.random.randint(100, 200, size=10)})C = pd.DataFrame({"date": days,
                  "store": "C",
                  "sales": np.random.randint(100, 200, size=10)})

我们现在用concat函数组合这 3 个数据帧。最好也根据日期对行进行排序,因为我们对日销售量感兴趣。

df = pd.concat([A, B, C]).sort_values(by="date")df.head()

(图片由作者提供)

1.等级函数

第一招是关于rank功能的。假设我们需要找到每天销售额最高的商店。该任务可以使用groupbymax功能完成。

如果我们需要根据每天的销售额对商店进行排序,该怎么办?请看上面的截图。对于日期 2020–01–01,A 是第一,C 是第二,B 是第三。

我们可以使用 rank 函数对每个日期应用这样的顺序。

df["rank"] = df.groupby("date)["sales"]\
               .rank(ascending=False).astype("int")df.head(6)

(图片由作者提供)

我们首先按日期将数据点(即行)分组,然后应用排名函数。将生成的等级分配给新列。默认情况下,rank 函数按升序对值进行排序,但可以使用 ascending 参数进行更改。

等级信息可用于在商店之间进行比较。我们来搞清楚各个店铺的排名分布。

df.groupby(["store","rank"]).count()[["sales"]]

(图片由作者提供)

商店 A 具有最高数量的第一等级。商店 B 通常是第二家商店,而 C 的排名是均匀分布的。

2.命名聚合

当我们在前面的示例中找到等级分布时,我们在完成聚合后选择了一个列。原因是计数聚合应用于分组中未使用的所有列。如果我们使用 mean 进行聚合,它将应用于分组中未使用的所有数字列。

下面是没有选择列时的结果。

df.groupby(["store","rank"]).count()

(图片由作者提供)

如果我们使用 mean 进行聚合,它将应用于分组中未使用的所有数字列。

这种方法的另一个缺点是聚合列名不能提供它所代表的信息。如果看不到代码,我们就无法真正判断 sales 列告诉我们什么。我们总是可以重命名列,但是有一个更实际的方法。

这两个问题的解决方案是使用带有agg函数的命名聚合。我们需要指定列名和聚合函数,如下所示:

df.groupby(["store","rank"]).agg(rank_count = ("rank", "count"))

(图片由作者提供)

我们只看到聚合的列名,因此不必在聚合后选择列。它还允许我们为聚合列指定任何名称。

3.忽略索引

回想一下第一张截图。

(图片由作者提供)

我们合并了 3 个数据帧,但是索引没有更新。它们代表每个单独数据框的索引。

索引是数据框的重要组成部分,因此需要准确。一种选择是在连接后重置索引。

df = pd.concat([A, B, C])\
       .sort_values(by="date").reset_index(drop=True)df.head()

(图片由作者提供)

我们现在有了一个更准确的指数。如果我们不将reset_index函数的drop参数设置为真,那么先前的索引将作为一列保存在数据框中。

这里的诀窍是ignore_index参数。它让我们不必使用reset_index功能。concatsort_values功能都有这个参数。设置为 true 时,它会忽略单个数据帧的索引,并分配一个新的整数索引。

df = pd.concat([A, B, C]).sort_values(by="date", ignore_index=True)df.head()

(图片由作者提供)

这并不是很大的增益,但是我们用一个更少的函数获得了相同的结果。

结论

我们已经介绍了 3 个熊猫的小技巧,它们看起来很简单,但在某些情况下会派上用场。它们还简化了语法和操作。

Pandas 是一个很棒的库,具有易于理解和直观的语法。因此,通过一些练习,你可以很容易地学会基本操作。在基础知识之后,我建议专注于一些技巧和提高效率的详细技术。

感谢您的阅读。如果您有任何反馈,请告诉我。

3 个 Python 项目将帮助您实现生活自动化

原文:https://towardsdatascience.com/3-python-projects-that-will-help-automate-your-life-b6d48a4c1fa2?source=collection_archive---------0-----------------------

初级和高级项目,用 Python 自动化您的生活。

汉弗莱·穆莱巴在 Unsplash 上的照片

大多数工作都有一些对我们的职业没有什么价值的任务。做一次这样的任务没什么大不了的,但是当它们变得重复和耗时时,它们就必须自动化。

通过自动化任务,你将不再浪费时间做平凡的任务,而是专注于对你来说最重要的事情。最重要的是,你将把你所有的 Python 知识付诸实践,甚至学习新的东西。

在本指南中,我将向您展示 3 个 Python 项目,它们帮助我实现了一些日常工作任务的自动化,希望对您也有所帮助。

1.自动化 Excel 报告

想一想制作 Excel 报表需要做的所有事情——使用 Excel 公式、创建数据透视表、制作图表以及设置工作表格式。

做一次很容易,但是当你要做很多次时,事情就变得复杂了。幸运的是,Python 可以帮助您自动完成这些任务,所以下次您需要制作 Excel 报表时,只需点击几次鼠标。

如何解决这个项目

在 Python 中,我们可以使用 openpyxl 和 Pandas 来自动化您的 Excel 报告。这是我用 Python 制作的自动化 Excel 报表的指南。这两个都是很棒的 Python 库,但缺点是初学者可能需要一些时间来学习 openpyxl,并且它没有 Excel 以外的应用程序。

不过,有一种更简单的方法来自动化您的 Excel 报告。你只需要安装一个名为 mitosheet (又名米托)的 Python 库。这个库允许我们使用一个直观的类似 Excel 的界面来分组数据和计算汇总统计数据。最好的部分是米托为每个编辑生成代码,所以我们将能够看到对应于每个编辑的 Python 代码。

在下面的例子中,你可以看到我是如何使用 mitosheet 的接口来创建数据透视表的。做好数据透视表后,代码就自动生成了,是不是很棒?

创建数据透视表(作者图片)

要实现数据透视表和更多 Excel 任务的自动化,您需要安装 mitosheet 库。要安装它,首先,打开一个新的终端或命令提示符,然后使用以下命令下载米托安装程序:

python -m pip install mitoinstaller

然后,运行安装程序(该命令可能需要一些时间来运行)

python -m mitoinstaller install

就是这样!查看此链接了解如何使用 mitosheet 创建您的第一个数据透视表。

2.自动化数据可视化

大多数数据分析项目都以包含大量图表的演示结束。在我以前的工作中,我会更新我的 Excel 报告,然后手动制作可视化效果,如条形图、饼状图、箱线图等等。

这非常耗时,所以我在 Python 中寻找一种替代方法。我找到了几个可以帮助我自动绘制可视化图形的库。我只需要用 Python 阅读我更新的 Excel 报告,通过运行一个脚本,所有的可视化都将被创建。

如何解决这个项目

为了自动化数据可视化,首先,我们需要编写代码来创建我们想要的图形(最好是在 Jupiter 笔记本文件中)。然后写下输入数据(Excel 文件)应该是什么样子,这样可以确保列名、数据形状、数据类型和其他重要特性在下次更新时保持不变。

现在你可能想知道“我如何用 Python 制作可视化?”嗯,Python 提供了不同的选项来制作标准的以及交互式的可视化。这是用 Matplotlib/Seaborn 和制作可视化效果的指南,这是另一个用 Pandas/Plotly 制作交互式可视化效果的指南。

也就是说,学习这样的库可能会花费你很多时间。在这方面,米托也可以提供帮助。在生成相应的 Python 代码时,您可以使用米托通过几次点击来实现数据可视化。该代码可用于自动创建未来数据的数据可视化。

让我们来看看它是如何工作的。

使数据可视化(图片由作者提供)

在上面的 gif 中,我使用 mitosheet 库创建了一个网飞数据集的柱状图,只需点击几下鼠标。我只需要选择一列,点击图形按钮,然后!图形被创建,代码被自动生成。

3.网络自动化

作为一名初级数据分析师,我不得不做的无聊任务之一是每天将文件上传到客户的网站上。步骤非常简单:进入网站“X”,点击这个按钮,从下拉列表中选择一个选项,然后点击上传。

这样做可能需要 2 分钟左右,但我不得不在一周内重复这些步骤数百次。这就是为什么我决定用 Selenium 来自动化这个任务。这是一个通过 Python 控制 Chrome 之类的 web 浏览器的工具。

如何解决这个项目

要用 Python 实现任何网站的自动化,首先要考虑在网站上完成一项任务通常要遵循的所有步骤。您的任务可能包括点击按钮、选择下拉列表中的元素、引入文本、上下滚动、登录页面等。

一旦枚举了所有任务,就使用 Selenium 复制 Python 中的所有步骤。下面是我在 YouTube 和上为初学者准备的 Python Selenium 教程。两者都将帮助你在 Selenium 中创建一个机器人,它将执行网站上的几乎任何任务,就像你自己在控制它一样。

奖励:如果你达到了这一点,这意味着你进入了自动化,这里是你可以用 Python 完成的另外 4 个自动化项目,这里是你甚至不用写一行代码就可以完成的另外 4 个项目。

https://medium.datadriveninvestor.com/3-python-books-i-read-to-automate-some-boring-data-science-tasks-2a946601a827

与 3k 以上的人一起加入我的电子邮件列表,获取我在所有教程中使用的 Python for Data Science 备忘单(免费 PDF)

如果你喜欢阅读这样的故事,并想支持我成为一名作家,可以考虑报名成为一名媒体成员。每月 5 美元,让您可以无限制地访问数以千计的 Python 指南和数据科学文章。如果你用我的链接注册,我会赚一小笔佣金,不需要你额外付费。

https://frank-andrade.medium.com/membership

获得更好代码的 3 个 Python 技巧

原文:https://towardsdatascience.com/3-python-tricks-for-better-code-511c82600ee1?source=collection_archive---------40-----------------------

编程;编排

..第二个技巧让我的 python 程序执行速度提高了 440 倍!

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

大蟒道!💡

利用 Python 独特的特性编写代码,提高了代码的可读性,减少了执行时间,并使程序更短。

我在最近的项目中使用了这 3 个技巧,这使得我的 Python 程序长度减少了近 75%,同时可读性更好。

在上一篇文章中,我讨论了用 Python 编码来加速代码执行的最好的 省时的 方法。⏳

在接下来的 4 分钟里,你将学习 Python 中的 3 个技巧,用缩短的代码长度写出更好的代码。

列出理解

列表理解是最好的,也是最真实的💡基于现有列表创建列表的方法。

为了让文字更清晰,这里举个例子。让我们创建一个简单的字符串列表。

listofnames = ["apple", "orange100", "banana2",
                 "pineapple", "10grapes", "jackfruit"]

接下来,如果字符串是纯字母的,我想从最近创建的大写listofnames中创建一个所有字符串的列表。

该任务可以使用for循环和if语句来完成,但这不是 Pythonic 式的方法。相反,使用如下所示的列表理解将代码长度限制在一行内。

new_list = [name.upper() for name in listofnames if name.isalpha()]

让理解变得更简单,让我们将列表理解与 for 循环和 if 语句进行比较。

作者列表理解和 For 循环|图像的比较

如上图所示,for循环中最里面的元素将是列表理解中的第一个元素。

然而,列表理解并不是在所有情况下都是正确的选择。在某些情况下,它会使您的代码运行缓慢并消耗更多内存。🚩

列表理解|作者图片的优缺点

根据程序的复杂程度,您必须在列表理解和 for 循环之间做出选择。重要的是编写一个易于理解和修改的代码。

用于复制 Switch-Case 语句的字典

使用字典📚在 Python 中复制 Switch-Case 和多个if-elif-else语句。

与其他编程语言不同,Python 不支持Switch-Case语句。这可以通过使用if-elif-else语句来实现。

用字典替换多个if-elif-else语句使得我的程序 比上一个版本的 快了 440 倍。

让我们看看这个例子。
变量 action 是开关,其取值是 Case。根据该值,执行程序的不同路径。

Switch-Case 语句|作者图片

当然,这可以使用 if-else 语句来实现。但是,随着复杂性的增加,代码的可读性将开始下降。

下面是如何在if-else中实现这一点。

使用 If-Else 语句按作者复制 Switch-Case | Gist

仅语句if-elif-else就占用了 11 行代码,具有良好的代码可读性,并且这将随着案例的增加而不断增长。

更好的方法是,使用包含所有案例的字典。📚请参见下面的示例。

使用目录复制交换机-案例|作者要点

简单!代码长度减少,但代码可读性仍优于if-elif-else

在更复杂的场景中,这些lambda函数可以直接被用户定义的函数代替。因此,随着情况的增加,代码长度将总是只增加一行。

此外,根据代码的复杂性,字典可以改善完整代码的执行时间。在我的项目中,它使我的代码速度提高了 440 倍。

作者使用字典|图像的优势

三元条件句

当您希望在特定条件为真时执行一行或一段代码时,请使用 Python 条件。

通常,这是使用一个if语句来完成的。然而,一个if至少需要 2 行代码。有一种更简洁的方式来编写这样的条件语句 Python 中的三元运算符。

顾名思义,三元运算符有三个参数—条件为真时要计算的表达式,条件为假时要计算的表达式。

Python 三元运算符语法|作者图片

让我们以写一个小代码来检查这个人是否是老年人为例,根据他的年龄。简单地说,开始一个可变的年龄。

age = 79

使用三元条件,这段代码减少到只有一行。

print("Senior Citizen") if age>60 else print("Not a Senior Citizen")

然而,相同的逻辑可以在下面的if-else中实现。

if age>60:
    print("Senior Citizen")
else:
    print("Not a Senior Citizen")

显然,三元条件使代码缩短了 75%,同时也提高了可读性。

这些是来自我的经验的提示和技巧,对每个人保持代码干净、简短易于理解都是有用的。

如果您在项目中处理大量文本数据,那么我建议您阅读这些字符串操作方法。

* [## Python 中五个必须知道的字符串方法

towardsdatascience.com](/five-must-know-string-methods-in-python-e97925d12eec)

这就是你如何在更快地进行数据分析的同时发挥创造力。

要阅读媒体上的所有故事和文章,你今天就可以成为媒体会员&让⚡ 无限制 ⚡访问所有媒体故事。

在这里报名 加入我的邮箱订阅

当你在这里注册并选择成为付费媒介会员,我会从你的会员费中获得一部分作为奖励。

感谢您阅读并投入您宝贵的时间!

您可以随时联系我,获得建设性的反馈或关于数据分析的精彩讨论。📈📊 📉

❓对通过项目学习感兴趣吗??

在我的Github回购上查了一堆项目。📚📚

这里有一篇关于 Pythonic 编程方式的有趣文章。

https://www.udacity.com/blog/2020/09/what-is-pythonic-style.html *

简化您生活的 3 个 Python 技巧

原文:https://towardsdatascience.com/3-python-tricks-that-will-ease-your-life-6b48952caedf?source=collection_archive---------7-----------------------

举例说明

照片由 Z S 在 Unsplash

Python 是数据科学生态系统工作人员的首选语言。Python 成为该领域的主要选择有几个原因,比如简单易学的结构、简单的语法和丰富的第三方库选择。

我最喜欢 Python 的地方是它如何简化某些任务。在这篇文章中,我将分享 3 个我认为非常实用的技巧或诀窍。我在工作中使用过它们,我想你也会发现它们很有用。

我想强调一下,这些技巧并不是一些高级的 Python 特性。其实都可以认为是基本操作。然而,它们对于某些任务来说是很方便的。

1.字符串插值

第一个是关于字符串插值,它允许通过使用变量名来操作字符串。我们经常在打印功能中使用它们来调试代码或确认结果。

字符串插值的一个典型用例是创建包含基于某些变量的信息的文件路径。例如,我使用字符串插值法将日期信息集成到文件路径中。

Python 的 datetime 模块返回不带前导零的月和日,因此一些值显示为一位数字。

from datetime import datetimemydate = datetime(2020, 4, 2, 16, 40)print(mydate)
2020-04-02 16:40:00mydate.month
4mydate.day
2

月和日都可以包含一位数或两位数。因此,对于只有一个数字的路径,我们需要添加一个前导零,使路径具有标准格式。

让我们首先创建几个没有标准化月份和年份数字的文件路径。

# one digit month and day
mydate = datetime(2020, 4, 2)
file_path = f"Results_{mydate.year}{mydate.month}{mydate.day}"print(file_path)
Results_202042# two-digit month and day
mydate2 = datetime(2020, 11, 24)
file_path = f"Results_{mydate2.year}{mydate2.month}{mydate2.day}"print(file_path)
Results_20201124

正如我们从打印的文件路径中注意到的,它们不是标准格式。幸运的是,向字符串中使用的变量名添加前导零非常简单。

mydate = datetime(2020, 4, 2)
file_path = f"Results_{mydate.year}{mydate.month:02}{mydate.day:02}"print(file_path)
Results_20200402

在我们的例子中,“02”意味着相关变量将占用两位数,前导字符变成零。如果月或日包含两位数,Python 不会添加前导零,因为变量已经占用了两位数。因此,我们将保持一个标准。

计数器功能

下一个是 Python 的 collections 模块中的 Counter 函数。它是 dictionary 的子类,用于计算可散列对象的数量。Counter 返回一个字典,其中的项存储为键,计数存储为值。

我们先做一个单子上的例子。

from collections import Counterlist_a = [1, 2, 3, 3, 3, 5, 5]Counter(list_a)
Counter({1: 1, 2: 1, 3: 3, 5: 2})

Python 列表也有一个 count 方法,但是它只能用于计算单个元素的出现次数。

list_a.count(3)
3

counter 函数也可以用来计算字符串中字符出现的次数。

mystring = "aaaabbcbbbcbbcccaaaa"Counter(mystring)
Counter({'a': 8, 'b': 7, 'c': 5})

我们还可以计算一篇文章中的字数和频率。这里有一个简单的例子。

mytext = "Python python data science Data Science data"Counter(mytext.lower().split(" "))
Counter({'data': 3, 'python': 2, 'science': 2})

我们首先将所有字符转换成小写或大写以保持标准。下一步是在空格处分割字符串以提取单词。然后我们可以应用计数器函数。

对列表进行排序

在 Python 中对列表进行排序非常简单。我们可以使用 sort 函数对列表进行排序,并且不返回任何内容。另一个选项是 sorted 函数,它返回一个列表的排序版本。

考虑一个稍微复杂一点的情况。我们有一个包含其他列表作为其元素的列表。例如,我们可能有一个成员列表,每个元素可能代表一些关于他们的信息,比如名字、姓氏和年龄。

members = [["John", "Doe", 28], 
           ["Betsy", "Ash", 32], 
           ["Megan", "Sam", 44]]

我们可能希望根据名字、姓氏或年龄对成员进行排序。Python 允许通过使用 sort 函数的 key 参数进行这种定制排序。

下面的代码根据姓氏对成员列表进行排序。

members.sort(key = lambda inner: inner[1])members
[['Betsy', 'Ash', 32], 
 ['John', 'Doe', 28], 
 ['Megan', 'Sam', 44]]

我们使用嵌套列表元素的索引。例如,“inner[2]”根据年龄对列表进行排序。

members.sort(key = lambda inner: inner[2])members
[['John', 'Doe', 28], 
 ['Betsy', 'Ash', 32], 
 ['Megan', 'Sam', 44]]

结论

我们已经介绍了 3 个简单而有用的 Python 技巧。您可能并不总是需要使用它们,但是在某些情况下,这些技巧可以有效地解决问题。令人惊讶的是 Python 为各种情况提供了简单而直观的方法。本文中的 3 个例子可以被认为是 Python 简单性的很小一部分。

感谢您的阅读。如果您有任何反馈,请告诉我。

在 Power BI 中使用视图而不是表的 3 个理由!

原文:https://towardsdatascience.com/3-reasons-to-use-views-instead-of-tables-in-power-bi-272fb9616691?source=collection_archive---------14-----------------------

在本文中,我们将揭开视图的神秘面纱,并解释为什么在从 SQL 数据库导入数据时,它们应该是您的首选。

作者插图

最近几个月,我经常被问到在 Power BI 中导入数据时是否应该使用表或视图。我特意将单词标记为 importing ,因为本文的主要目的是比较视图和表在导入模式下的用法。如果你有兴趣了解更多关于直接查询模式的信息,在哪些场景下你会(不)想使用它,请参考这篇文章。

首先什么是视图?

我猜你们都知道什么是桌子,我就不花时间解释了。而且,如果您来自 SQL 世界,您可能知道什么是视图:)…然而,有许多没有 SQL/数据库背景的 Power BI 内容创建者,因此他们至少应该有一个关于视图的基本介绍。

数据库视图就是对数据库中数据的存储查询。这个存储查询可以针对表和其他视图(您可以创建一个查询其他视图的视图)。这个存储的查询(视图定义)代表数据库的一部分,但是 它不存储任何物理数据 !这是与“常规”表的第一个重要区别——视图不存储数据,这意味着每当您需要来自视图的数据时,底层存储查询将针对数据库执行。因为视图在您每次“调用”它们时都在运行,所以它们总是会从底层表中选取相关的数据。这意味着您不需要担心底层表中是否发生了变化(删除/更新的行),因为您总是可以从表中获得实际的数据。

使用视图的优势

在某些情况下,与常规表相比,视图可以提供多种优势:

  • 视图可以包含(并且通常包含)多个表之间的连接,产生一个结果集,从而降低复杂性
  • 视图可能只包含数据的子集(例如,您可以创建一个只包含销售额大于 X 的视图;包含当前未结采购的视图;查看仅包括在 X 年注册的客户,等等。)
  • 您可以使用视图为您的分析工作负载预聚合数据,使用聚合函数,如 SUM、AVG、COUNT 等
  • 视图可用于控制对基础数据的访问:例如,您可以创建一个只包含美国地区销售额的视图,然后授予相关用户对该视图的访问权限。这样,您就不会暴露表中的所有数据,因为您可以限制对表的访问,而只授予对视图的访问
  • 视图不消耗数据库中的空间(除了存储查询定义的少量内存)——不要忘记,视图不存储物理数据!

考虑到所有这些优点,我相信您已经可以设想视图在 Power BI 中使用时可以提供的一些好处。

然而,我也确信您可能对潜在的警告有所顾虑——即与“常规”表相比时的性能。敬请关注,我们将“揭开”在您的 Power BI 解决方案中使用视图而非表格的所有利弊…

#1“尽可能向上游转变您的数据,必要时向下游转变”——罗氏的格言

在解释数据转换和整形的最佳实践时,我总喜欢从页眉引用这句话,这就是著名的“罗氏格言”(罗氏是微软 Power BI 团队的马修·罗氏)。

坚持这个想法,如果您有机会在源端(在数据库本身内)应用您的数据转换,您一定要这样做!使用视图封装复杂的逻辑,执行计算(不要忘记 Power BI 中的计算列没有经过优化压缩,或者过滤掉数据的特定部分。

蒂姆·福斯特在 Unsplash 上拍摄的照片

我听到了,我听到了…你没有访问底层数据库的权限。嗯,这显然是一个潜在的障碍,但是我相信您应该与您的 IT/DBA 同事保持良好的关系,尽管是在访问权限方面:)…所以,与他们交谈,解释使用视图的好处,我相信他们会很乐意帮助创建和公开视图,而不是原始表。

嘿,我听到另一个问题:“如果我们使用视图而不是表,我们就放弃了查询折叠的能力,对吗?”睡吧…错了!视图和表格一样,都是可折叠的对象!因此,即使您需要应用一些额外的步骤来形成来自视图的数据,您仍然应该实现查询折叠(当然,假设您将可折叠转换应用到您的视图)。

#2 基础表中的更改

这是一个场景:您正在从报表的数据库表中导入数据。类似于 DimProduct 表的东西,它可能是所有报表不可或缺的一部分。而且,很有可能您已经在每个报表中导入了该表—让我们假设您已经创建了 50 个从 DimProduct 表中检索数据的报表。

作者图片

在上图中,您可以看到一个显示每个品牌总销售额的基本示例。现在,让我们假设在底层数据库中有一个结构变化—例如,BrandName 列已被重命名为 Brand:

作者图片

如果我去刷新我的电源 BI 报告,让我们看看会发生什么…

作者图片

咩咩!我的报告坏了!现在,想象一下修复 50 个报告来处理这种结构变化需要多少努力。好的,如果您使用一个视图而不是一个表,报告也将被破坏,但是“小”的区别是您只需要更新视图定义,所有依赖的报告将再次工作!

因此,您可以在一个集中的位置解决问题,而不是调整 50 个报告!

与表相比,使用视图的一个巨大优势是 Power BI 报告和物理数据库模型之间的依赖性变弱,因此更容易维护。

#3 视为该表的 1:1 复制

好了,当您需要遵循最佳实践并在源端执行计算时,或者当您想要避免对一个表的更改影响多个报表的情况时,很容易理解为什么您应该使用视图而不是表。

但是,一个合理的问题可能是: 如果我不执行任何转换/计算(只希望我的数据保持原样),并且我确信表中不会发生结构性变化(尽管您应该重新考虑这个立场),我应该使用表作为数据源,对吗? 嗯,不对!

在一个表上使用 view 有很多好处,即使您在这个过程中没有执行任何转换!

免责声明: 不要创建视图编写:SELECT * FROM table…这根本不是一个好的做法,但是解释为什么,超出了本文的范围!相反,总是显式定义将成为视图一部分的列。

  • 您可以(也应该)在视图定义中排除所有不必要的表列。这样,您不仅减少了传输到 Power BI 的数据量,还减少了在 Power Query Editor 中应用额外步骤来删除不必要数据的工作量。回到前面的例子,我可以很容易地从 DimProduct 表中删除 ETLLoadID、LoadDate 或 UpdateDate 等列,因为它们在报告解决方案中完全没有用

作者图片

CREATE VIEW [dbo].[Product]
AS
SELECT ProductKey
    ,ProductLabel
    ,ProductName
    ....
FROM dbo.DimProduct
GO
  • 使用视图而不是表格,可以确保所有报告之间的一致性。例如,假设您希望您的所有报告显示值“Brand”而不是“BrandName”,您可以在视图定义中为该列定义别名,从而避免在每个报告的超级查询编辑器中为该列重命名的额外步骤!
CREATE VIEW [dbo].[Product]
AS
SELECT ProductKey
    ,ProductLabel
    ,ProductName
    ,BrandName AS Brand
    ....
FROM dbo.DimProduct
GO

如果从表中导入数据,一个报表创建者可以将“BrandName”重命名为“Brand”,另一个将它称为“Product”,第三个将它标记为“Product Name”,以此类推……我想您明白了!通过标准化视图定义中的列名,您可以确保所有报告都具有一致的命名

  • 您可以轻松地应用对象的用户友好命名的最佳实践。您可以(也应该)实现用户友好的名称,方法是从维度表中删除“Dim”前缀,并为列指定有意义且易于阅读的名称,而不是公开用户值,如“DimProduct”、“DimDate”等,或者像“UnitOfMeasureName”、“AvailableForSaleDate”等列。类似于:

作者图片

因此,尽管这看起来好像我没有转换我的数据,但事实上,我正在这样做!我正在塑造它,并准备让它更方便、更一致地使用 Power BI。

物化/索引视图

我有意把这个留到最后,因为索引/物化视图(名称取决于关系数据库管理系统)代表了两个世界的最佳状态!它们保存视图的逻辑(连接、转换、计算),但是它们保持结果集的持久性。简单地说,它们物理地存储执行查询产生的数据。这意味着您将获得性能优势(您也可以在这种类型的视图上创建索引),但是代价是物化视图会消耗数据库中的空间。

决定使用物化视图还是常规视图并不简单,取决于各种因素。在任何情况下,都需要与您的 DBA/IT 部门仔细评估和讨论。

结论

当使用关系数据库作为 Power BI 解决方案的数据源时,大多数报表创建者会选择一种更简单的方法——直接从表中导入数据,甚至不用考虑或意识到数据库视图!因此,在本文中,我们揭开了视图的神秘面纱,并解释了为什么在从 SQL 数据库导入数据时,它们应该是您的首选。

感谢阅读!

成为会员,阅读 Medium 上的每一个故事!

数据科学家应该学好统计学的 3 个理由

原文:https://towardsdatascience.com/3-reasons-why-data-scientists-should-learn-statistics-well-90e80ae6c68f?source=collection_archive---------22-----------------------

不懂数据的我们只能做工具专家

杰克·亨特在 Unsplash 上的照片

数据科学是一个跨学科的领域。为了有一个繁荣的职业生涯,数据科学家应该获得一套全面的技能,涵盖该领域的每个组成部分。

其中一个组成部分是统计学。有些人甚至称机器学习为美化了的统计学。我不完全同意这种观点,但机器学习和统计学密切相关。

数据科学的目标是从数据中创造价值。实现这个目标的最初要求是很好地理解数据。统计学可以被认为是理解、解释和评估数据的最有效的工具。

在本文中,我们将讨论数据科学家应该全面理解统计概念的 3 个主要原因。

知道你有什么

一个成功的产品从理解数据开始。我们不能只是将原始数据转储到一个模型中,然后期望它产生有意义的结果。在典型的工作流中,大量的时间花费在理解数据上。

统计学帮助我们描述我们在数量上的度量。我们不需要浏览大量的数据,而是可以使用一些措施来以一种明智的方式解释它。

假设我们有一个篮球运动员的三分球数据。数据包含到篮筐的距离和投篮的结果。仅仅通过查看原始值很难管理这样的数据。

我们可以使用以下信息来简化这些数据:

  • 投篮得分的平均分数
  • 到篮子距离的标准偏差

仅仅通过两个简单的方法,我们就有了一个关于击球和球员表现的信息汇总。我们也可以用这些指标来比较不同玩家的表现。

这些量化指标是描述性统计的一部分,因为它们被用来描述数据。描述性统计不限于平均值和标准差。

平均值、中值和众数提供了数据分布的概况。他们也被称为集中趋势的措施。标准差试图解释单个值的分散程度。

变量的分布(如正态分布、二项式分布)也是描述统计学中非常重要的概念。例如,在正态分布的情况下,我们可以通过均值和标准差来了解大量数据。

超越你所拥有的

统计数据不仅帮助我们了解我们所拥有的,而且引导我们超越它。我们可以通过使用有限范围的数据(即样本)使用统计学来推断关于整个范围(即总体)的有意义的结果。

这部分统计又称为推断统计。它可以扩大我们手头数据的发现范围。这是至关重要的,因为我们通常没有整个范围的数据。

假设你在一家连锁店工作,你的任务是分析和比较两个不同国家的商店的销售模式。整个范围将是商店存在期间的销售数据。然而,收集和处理如此大量的数据是不可管理的,也是负担不起的。

取而代之的是,你从两组中抽取样本。您可以分析样本数据并比较商店。推断统计告诉我们样本结果是否适用于整个范围。

假设检验、p 值、统计显著性和 z 值是推断统计学中使用的一些术语和概念。数据科学家应该对这些概念有全面的理解,并能够应用它们。

使用推断统计学,我们可以根据对小范围数据的发现得出关于总体的结论。这一点非常重要,因为我们可能会处理样本数据,而不是总体数据。

机器学习不仅仅是导入算法

机器学习是数据科学的一部分。有几种机器学习算法,我们用来从数据中学习。

在监督学习的情况下,我们用已知数据训练算法,并期望它对新的观察结果进行预测。无监督学习算法提供了对数据中潜在结构或观察值之间关系的洞察。

在这两种情况下,原始数据的处理对于获得可靠和准确的结果极其重要。我们不能只是将原始数据转储到一个现成的算法中,然后期望得到出色的结果。

原始数据可能包含对模型性能产生负面影响的异常值。数据中也可能有一些缺失值。它们需要小心处理以保持特征的完整性。

我们如何执行这些操作对模型性能有很大的影响。为了恰当地处理它们,我们需要有很强的统计知识。例如,我们使用统计技术来标记异常值。类似地,在统计的帮助下确定缺失值的适当替换。

评估模型的结果和创建模型一样重要。我们不能只看一个指标就完成评估过程。其实应该是动态的,迭代的。

我们评估结果,为改进模型提供反馈。例如,检测结果中的高偏差或高方差至关重要。基于误差的模式,模型被不同地调整或更新。统计数据有助于我们创建一个有价值、信息丰富的评估流程。

机器学习不仅仅是导入一个算法并使用它。我们需要适当地准备和处理数据。同样,模型的输出也需要仔细评估。这两项任务都需要统计知识,因此这是数据科学家的必备技能。

数据科学是一个跨学科的领域。统计学是不可或缺的一部分,也是对数据科学家的绝对要求。没有像样的统计知识水平,只能做工具专家。

感谢您的阅读。如果您有任何反馈,请告诉我。

失败是你最好朋友的三个理由

原文:https://towardsdatascience.com/3-reasons-why-failure-is-your-best-friend-281a9e54bcfa?source=collection_archive---------23-----------------------

当我们在学习的时候,我们在成长

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

在成长过程中,我认为失败是一件坏事。我在一个班表现很差——这是一次失败。我在一项活动或一个项目中表现不佳——这是我的错误和我的过错。直到我长大了,我才意识到失败并不总是坏事,错误可以成为发现经验教训的工具。回顾这些事例,那次失败教会了我什么?我该如何接受失败并改进,以便下次做得更好?我可以做哪些改变?在软件和数据科学中,失败有多种形式。有时失败是错过了最后期限。其他时候,失败是解决一个你自己无法解决的错误。

代码评审——每个人都有学习的机会

开发人员可能感到失败或犯了错误的一个常见领域是代码审查。让另一个软件工程师、数据科学家或一般的开发人员查看您的代码可能会很伤脑筋。在过去的工作中,我有一个初级开发人员在代码评审后找到我,说他在参与其他人的代码评审中感觉轻松多了。看到高级团队成员的代码因小错误、最佳实践和一般代码改进而受到批评,令人大开眼界。他再也不用担心他的代码没有堆叠起来,因为他不是唯一一个得到这种评论的人。他还能够参与这些评审,向这些高级成员提供反馈。以下是我在代码评审中获得反馈时喜欢考虑的一些关键问题:

1\. Based on your feedback, what are the key takeaways? What can you learn from your coworkers?
2\. Is there a typical pattern that emerges in your code reviews that you need to look further into? For example, do you often receive feedback that the features you have engineered are too valuable for your analysis or overly complex? If so, how can you learn and grow from this? 
3\. Did anyone mention resources that would be good to look into? If not, could you ask them for recommendations or look into documentation that may be available based on the changes they recommended?

Bug 修复—需要帮助吗?自讨苦吃!

有时候失败是一种感觉。一种感觉,认为自己不够好或能力不足以让事情运转起来。有多少次你发现了一个 bug,花了几个小时调试你的代码,但还是找不到修复方法?但是当你让另一个人看你的代码时,他们可以在几秒钟内发现它!这种感觉可能会令人沮丧,但它可以带来许多经验教训。

第一课是,知道何时寻求帮助。我花了一段时间才意识到这一点,但从那时起它就变得非常有价值。如果你被困在一个问题上,试图修复一个错误,用尽了你所有的资源,寻求帮助。就像前面提到的,帮助可以来自任何人,不仅仅是你的上级。甚至你的下级也可以看待一个问题并提供他们的见解。所以在我寻求帮助之前,我会问自己以下问题:

4\. Did you read all the team documentation and find an answer there? 
5\. If you couldn't find your answer there, did you read the documentation available for the tool, code, algorithm, or other that is publicly available? Does this documentation make sense, and could it help you solve your problem? 
6\. Are there any other resources, such as Stack Overflow, a Google search, a Medium article, or other open community forums that you can leverage that may give you insight into your issue? 

如果你已经用尽了所有的选择,并且试图解决你的问题花费了太长的时间,寻求帮助。不要浪费太多时间试图自己修复。这是一个向你的同事学习并找出如何解决同样问题的绝佳机会。

错过了你的截止日期——为什么?

在我最近工作过的团队中,最短的期限是两周或更短的冲刺周期,最长的期限是你的团队、部门和组织的全年目标和期望。尽管我们在做项目时尽了一切努力来计划和赶上最后期限,但我们有时会错过或达不到目标。因此,与其把这当成一次失败,不如花点时间反思一下为什么错过了截止日期。发生这种情况时,我会考虑以下几个关键问题:

7\. Was the original deadline and work estimation accurately representing what was required for this project? 
8\. Were there major hurdles or blockers that caused the project to be delayed? Did you make this clear to your team, and if not, why not? 
9\. What could you or your team have done differently to keep the project on track? 
10\. Was the work deprioritized in favor of other work? If so, were the roadmap and deadlines updated to reflect such? 
11\. What areas of improvement are essential to note before taking on a similar project? What best practices or process improvements could you implement next time?

最后的想法

也许并不总是这样,但失败是你最好的朋友。失败让你重新评估形势,并从中吸取教训。当我们在学习的时候,我们在成长。一些关注学习而不是失败的好领域包括代码审查、bug 修复和面临最后期限。

你经常在哪些领域看到失败,你如何从中吸取教训?

感谢阅读!我希望你喜欢阅读我所学到的东西。如果你愿意,你可以通过这个链接成为一名灵媒来支持我的写作。

Jupyter Notebook 将您的团队引向歧途的 3 个原因

原文:https://towardsdatascience.com/3-reasons-why-jupyter-notebook-is-steering-your-team-the-wrong-way-abb53cc46823?source=collection_archive---------10-----------------------

意见

从人工智能开发者的角度来看

照片由布伦丹·丘奇在 Unsplash 上拍摄

过去几年见证了 MLOps 实践的出现,因为公司开始意识到,要制作一个 ML 项目,需要的不仅仅是机器学习(ML)模型。有时,这些实践,如确保可重复性、监控和治理,可能比创建模型更复杂。从高层次来看,MLOps 旨在使从开发阶段到生产阶段的过渡更加平稳。这种转换的成功通常与源代码的质量有关。因此,仔细选择有助于开发健壮软件的工具非常重要。

Jupyter 笔记本仍然是许多数据科学团队的首选工具。它用于简单的数据探索,也用于创建数据处理管道和模型训练。一些云解决方案甚至允许您将笔记本电脑部署到生产环境中。我同意这是一个很好的工具,可以探索新的数据集,分析结果,更容易地创建和交互图表。然而,在这篇文章中,我将试着解释为什么 Jupyter Notebook 不适合你,如果你的目标是构建高质量的软件。

它鼓励不良的编码习惯

软件最佳实践之一是将源代码分成多个文件。这使得代码更容易使用、调试和维护。然而,由于将一个笔记本导入到另一个笔记本中是非常有限的,所以整个代码通常都在一个笔记本中结束。这促进了代码的重复,使得代码库难以维护。

此外,代码被安排到单元中,而不是定义具有清晰名称和单一职责的小功能的类。这导致了多个问题。首先,在笔记本电脑的生命周期中,要么单元变得非常长,要么同一部分逻辑分布在多个单元中。例如,您会发现在单元号 5、10 和 17 中处理的预处理逻辑。第二,测试要么受限,要么几乎不可能。在某些情况下,测试包括运行整个笔记本,没有异常意味着测试成功。其他情况下使用一些原始的 pytest 端口,其中笔记本需要包含测试。

最后,生成图的代码通常与代码库的其余部分高度耦合。这种耦合使得理解代码和进行更新变得困难。

虽然我只触及了潜在问题的表面,但很容易看出这会导致严重的长期问题。首先,由于维护占据了软件项目成本的 70%以上,使得代码难以维护将会增加这一比例,或者在最坏的情况下导致完全重写。第二,如果你第一次接触编写源代码是在笔记本上,那么以后要改变这些坏习惯就很难了。

版本控制是一场噩梦

我们都同意版本控制是强制性的,尤其是对于大型团队。所以,你使用的工具不应该妨碍你的项目的正确版本控制,Jupyter Notebook 就不是这样。在引擎盖下,笔记本是包含源代码、绘图数据和 Jupyter 元数据的大型 JSON 文件。这使得版本控制成为一场真正的噩梦,因为:

  • 检查同一文档的两个版本之间的差异是很困难的。你不能依赖 github 来做你的拉取请求(PR),你必须试着找一个第三方库来“尝试”做这件事。
  • 做三路合并是不可能的。您需要打开笔记本并手动进行所有更改。
  • Jupyter 元数据污染了 diff 历史,使得很难区分代码更新和元数据更改,如单元运行顺序。

小工具生态系统

工具在任何现代软件开发环境中都扮演着重要的角色。然而,Jupyter 笔记本电脑要么功能有限,难以使用,要么根本不存在。例如,如果你想使用 pylint ,你需要将你的笔记本导出到一个 python 脚本,然后运行 pylint,之后修复笔记本中的问题并重做。你不能让它像过去 10 年中的任何 IDE 一样运行,这适用于大多数静态代码检查器。此外,像自动完成这样的智能感知功能对于现实世界的项目是不可用的。至于调试,通常用 prints 或原始的 pdb 来完成,或者使用一个扩展来让你有一个可视化的调试器。然而,它并不适用于所有的内核,而且功能非常有限。例如,截至 2020 年 3 月,扩展没有几十年前引入的条件断点。

结论

对于 Jupyter 笔记本用户来说,我知道使用相同的工具进行所有的开发会更容易。然而,我认为你应该为每项任务准备一套合适的工具。你以后会感谢自己的。此外,我知道一些库或工具解决了或将解决我在这篇文章中提到的问题。但是你需要问问你自己,你是否愿意花时间去寻找这些工具,或者使用一些由软件开发人员完善的、开箱即用的工具来为你的项目带来更多的价值。

在你走之前

在 Twitter 上关注我,我经常在 Twitter 上发布关于软件开发和机器学习的消息。

每个数据科学研究生课程都应该包含优化的 3 个原因

原文:https://towardsdatascience.com/3-reasons-why-optimization-should-be-included-in-every-data-science-graduate-program-7ec7a94062b?source=collection_archive---------10-----------------------

领先的学者和行业专家一致认为,将优化添加到数据科学工具包中是就业市场的一个真正优势。

照片由丹尼尔·库切列夫在 Unsplash 上拍摄

为了在毕业后找到数据科学的角色,学生需要完成包括数学、统计学和计算机科学/编程在内的综合应用课程。他们还需要一个坚实的商业环境来学习分析技术,如机器学习。

除了传统的商业课程,数据科学和分析的研究生学位通常会在行业提供的咨询项目中达到高潮,该项目提供解决来自合作公司的真实业务问题的实践经验。这些行业提供的咨询项目可以强调的一个问题是,并非所有的商业问题都可以仅靠机器学习来解决。有些问题需要一个可用于制定数据驱动型决策的最佳解决方案,因此,不仅要有对下一步将会发生什么的预测性见解,还要有企业可以放心实施的值得信赖的指令性行动方案。

数据科学研究生学位课程通常专注于教授预测分析,但并非所有课程都教授学生规范分析(即利用优化(主要规范分析工具)的能力,以找到复杂业务问题的解决方案并做出最佳决策)。

在过去的两个月里,我与正在制定顶级数据科学计划的教授、行业专家和在组织中安置顶级数据科学人才的领导者进行了交谈,探讨了为什么将优化融入学术计划的数据科学工具包是塑造下一代问题解决者的重要组成部分。

我们讨论了新兴趋势、当前如何向数据科学家教授优化,以及向学生介绍优化问题的价值,以便他们能够利用组合解决方案方法,不仅为未来的雇主提供预测性见解,还提供可导致可信决策的规定能力。

我从交谈中获得的见解使我得出结论,为什么优化应该被视为数据科学和分析计划中的一个基本元素,这有三个主要原因:

1。 商业领袖对数据的期望比以往任何时候都高。

企业正在收集比以往更多的关于客户、流程和产品的数据。福布斯估计,近一半的企业要么正在开始新的分析项目,要么在现有项目的基础上继续前进,并强调那些不能快速从数据中获得洞察力(以及后续决策能力)的公司正在落后。

用于优化的应用——一种数据驱动的、规定的分析技术——规模庞大,规定的功能正在影响全球范围内的业务运作方式。各公司使用大量数据为各种重要决策提供信息,从疫苗分发计划、器官捐赠者和接受者的匹配,到全球运输物流和每天超过 10 万次航班的调度。

然而,一些公司在他们的分析旅程中仍然没有达到那个成熟水平。显而易见的是,无论一家公司的分析成熟度处于哪个阶段,企业领导人都比以往任何时候都更了解情况,并对他们的数据有更高的期望。

在讨论优化的广泛使用案例时,Gurobi Optimization 的首席执行官 Ed Rothberg 博士向我提出了一个问题:“人们普遍认识到,机器学习并不能解决所有问题,那么你会怎么做?”他讨论了随着领导者对优化的认识和理解的发展,他从领导者那里听到了什么,他的评估是,最终取决于业务领导者是否认识到优化机会应该优先考虑,以增加业务价值。

根据西北大学兼职教授兼 Coupa 人工智能负责人迈克尔·沃森博士的说法,“企业领导人确实了解优化的价值,但他们可能不了解什么技术实际上导致了优化。他们理解利用数据做出特定决策的价值。”

2.如果公司现在没有规定能力,他们很快就会有了。

考虑到许多复杂的权衡,获得最佳解决方案有助于企业领导者快速自信地采取行动。机器学习模型可以根据历史和实时数据成功预测接下来会发生什么,但它们不会帮助企业就下一步做什么做出最佳或可解释的决策。如果公司没有使用优化,他们很快就会使用。

Gartner 预测到 2022 年,规范分析软件市场将达到 18.8 亿美元(相当于 2017 年的 20.6% CAGR),37%的大中型组织将使用某种形式的规范分析技术。

许多公司仍处于构建分析能力的早期阶段。一些公司有数据科学团队,但还没有超越使用他们的数据进行预测。定量高管猎头公司 Burtch Works 的董事总经理兼创始人 Linda Burtch 分享了她对分析团队未来趋势的看法:“能够获得规定的能力是圣杯,领导层需要相信它,他们需要推动它。公司必须先走后跑,许多这样的团队现在才刚刚开始小跑,所以给它时间,我认为更多的公司会采用这种规范的方法。”

3.没有学习最优化的世卫组织学生可能没有准备好解决公司需要回答的紧迫问题。

当我与专家和学者交谈时,我清楚地知道,几乎所有我联系过的人都有一个相关的故事,关于一家公司向学生团队提供行业提供的咨询问题(以顶点或实习项目的形式),这些学生团队在问题陈述中既有机器学习又有组件。在大多数情况下,这些公司甚至没有意识到这些问题有优化的成分,但是他们确实意识到他们需要一个基于他们提供的数据的决策和实施建议。

行业提供的问题不能仅靠预测或处方来解决,学生们需要结合数学建模来提供解决方案和下一步该做什么的见解。我将重新分享乔治亚理工学院 MS in Analytics 项目的教授和主任 Joel Sokol 博士与我分享的一个故事:“我们有一家公司带着一个研究问题来找我们,他们突然可以访问所有新的数据集,他们希望能够开始将所有这些信息放在一起,但数据集来自不同的来源,并且不一致(重复,不一致的标签等)。).你如何着手匹配数据?回答这个问题有预测部分和规定部分,我们的学生需要考虑他们工具包中的所有模型,以及如何在没有人为区分(预测和规定之间)的情况下使用它们。”

这种故事我听过很多次,但也是我亲身经历过的。我以前是西北大学分析学硕士项目的副主任,在这个项目中,我们要求每一批学生都有两套行业提供的咨询项目。这些项目嵌入到课程中,向我们的学生介绍现实世界的问题解决方案,并提供动手实践的体验,这将有助于他们为数据从业者和数据科学领域的未来领导者做好准备。这些年来,我提交了多个项目,这些项目需要优化,以向公司提供有用的可交付成果,并可以实现。

我很幸运地与一位系主任 T2 博士共事,他认识到数据科学家了解各种分析技术的价值。他支持数据科学学生在计划的早期学习优化,并且是将优化课程作为核心要求提供的先驱之一,这样学生就可以确定问题的正确分析方法并有效地解决它。

Joel Sokol(另一位研究生级数据科学教育的先驱)阐述了这一想法,并解释了他的学生如何在一个本质上跨学科的项目中解决问题:“我们向学生提出业务问题,但我们不会说它是预测性的还是规定性的。学生们需要弄清楚回答问题需要什么数据,以及需要什么模型才能到达他们需要解决问题的地方。”

针对数据科学专业学生的教学优化

数据科学专业的学生天生擅长解决问题。他们通常进入数据科学或分析研究生学位课程,拥有强大的数学背景、编程基础(我们越来越多地将 Python 视为主流编程语言),以及对如何发现数据中有价值的模式的天然好奇心。这些学生有定量的才能和寻找最佳解决方案的欲望,这种能力自然有助于解决优化问题——不管他们是否知道,他们已经在使用利用优化的机器学习技术。

迈克尔·沃森解释说“一个优秀的数据科学家已经懂得数学。他们使用统计学,他们建立的算法离数学建模不远。优化是数据科学家已经使用的许多算法的幕后工作,回归模型使用优化,深度学习嵌入了优化。”

数据科学和分析硕士学位通常需要大约一年的时间来完成,尽管项目可能需要九个月到两年的时间。计划的任务是提供一个课程,为学生在数据科学领域的有利可图的职业生涯做准备。他们通常只有两个学期的课程来为学生做准备,他们需要做出艰难的决定,即什么是学生成为成功的数据科学家所必需的。面对这些艰难的决定,许多程序选择不将优化包含在他们的核心需求中,这是有道理的。Mike Watson 解释说,“大多数学生从未见过,甚至没有听说过优化,所以向他们介绍这种使用数据来做决定的新方法,并实际使用数据来给出答案和解决方案是很重要的,这不同于使用数据来进行预测(这是传统机器学习程序所教授的)。没有优化,学生就错失了机会。”

公司需要解决的各种问题正变得越来越复杂,不仅能够识别优化问题,而且能够为企业领导者提供最佳解决方案,这将是数据科学学生在未来几年进入就业市场的一个优势。Joel Sokol 亲眼目睹了这一成功,并分享道:“优化是我们课程的核心要素之一。这非常适合这个项目,我们的一些校友甚至说这是一个核心优势。他们现在可以采取额外的步骤:既然他们已经很好地理解了事物是如何工作的,并且对将要发生的事情有了很好的预测,他们会怎么做呢?他们是如何据此做出决策的?这项优化工作将真正成为数据科学发展的下一步。”

即使你不是技术团队的一员,你也应该学习 SQL 的 3 个理由

原文:https://towardsdatascience.com/3-reasons-why-you-should-learn-sql-even-if-you-are-not-part-of-a-tech-team-232be317b9d7?source=collection_archive---------22-----------------------

约翰·施诺布里奇在 Unsplash 上的照片

作为一名数据分析师,我整天都在写 SQL 查询。我的任务之一是在我公司的数据库和需要获得现成数据的同事之间充当 翻译。提取的数据适合他们的需求,然后他们能够进行自己的分析,并得出面向业务的结论。与对数据库管理知之甚少甚至一无所知的同事一起工作时,我发现他们通常会受益于 SQL 的基本知识——或者在工作中获得这些知识。

如果你处于类似的位置,即与处理公司数据库的数据分析师或技术团队互动,或者如果你认识这样的人,欢迎你!如果您想更多地了解什么是 SQL 以及为什么它在数据处理方面如此重要,那么这篇文章就是为您而写的。

简介:SQ-什么?

SQL 代表结构化查询语言。它是一种编程语言,用于管理存储在关系数据库管理系统(RDBMS)中的数据。在本文中,我将重点关注查询,这是 SQL 中最常见的操作。他们的角色是翻译指令,如“您能给我看一下昨天与这位客户的交易吗?”从(可能非常大的)数据库中提取。

这里有一个例子。假设我公司的数据库由 5 个表组成:

  • “交易”记录了我的公司每天进行的所有交易
  • “卫生产品”和“食品”列出了我们销售的产品
  • “个人客户”和“专业客户”是客户注册

来回答问题*“2020 年 11 月杰克买了什么?”我需要通过组合这五个表格来找到所需的信息。*

玛丽·勒费夫尔

那么,为什么要学习 SQL 呢?

1.在数据分析方面变得更加自主

虽然使用 Microsoft Excel 或 Google Sheets 对于有限大小的数据来说已经足够了,但是您可能已经遇到过由于处理的数据量过大而导致电子表格软件死机的情况。事实上,SQL 的第一个优势是,它可以从数据库中提取和处理大量数据,而不必通过逐个打开每个 Excel 表来浏览数据库。很实用,不是吗?

回到前面的例子,你有两个选择来回答这个问题:

  1. 转到每个表,查看可用的字段。为了明确地找到 Jack 和他购买的商品,您可以从这些表中筛选摘录,以找到 Jack 对应的 client_id,以及他购买的商品对应的产品。
  2. 编写一个 SQL 查询(或者使用您最喜欢的数据分析师编写的模板)将所有五个表直接链接在一起。然后在 WHERE 子句中指定搜索条件。

这里的 SQL 查询如下所示:

2.更好地组织你的思想

即使你自己不打算成为一名数据分析师,学习 SQL 也是一个很好的练习,可以更好地理解你公司的数据是如何构成的,以及通过组合各种数据源你可以实现什么。SQL 有一个相当简单的结构(至少与其他编程语言相比),但它可以执行复杂的查询。通过自己编写查询,您将能够检索更多的信息,最重要的是,这些信息将以一种您可以立即用来回答您的问题的方式进行组织。

在你与数据分析师或技术团队的互动中,更好地理解数据库的架构和 SQL 查询背后的逻辑将使你节省宝贵的时间。当表达对数据提取的特定需求时,如果您已经知道您需要什么类型的数据,您将会赢得时间。

以我之前的例子为例,有两种方法可以让你的同事检索你分析所需的数据:

  1. “我需要关于某个杰克的信息,他在 2020 年 11 月购买了一些产品:您能把他所有的购买清单发给我吗?”
  2. “我需要关于个人客户 Jack 的信息,他在 2020 年 11 月购买了卫生用品:您能给我他的购买清单吗?”

你可以想象第二个选项可能会帮助你的同事更快找到答案。为了说明我的例子,这是你得到这个答案的思维过程:

玛丽·勒费夫尔

3.发展新的专业技能

根据Stack Overflow2020 年的一项调查, SQL 位列第三大最常用编程语言。也就是说,SQL 已经被广泛传播,而且很可能会继续传播,因为它是用于数据库管理的头号语言。不管你的公司使用什么样的数据库技术(MySQL、PostgreSQL、Microsoft SQL Server……),它们都使用 SQL 或这种语言的衍生物。

正如 Dataquest 解释的那样,根据 2021 年 1 月在 Indeed job portal 上进行的一项分析,SQL 是数据工作中最受欢迎的技能。即使你不打算将职业重点转向全职数据角色,更好地了解这些工作背后的东西也只会有好处,而且它为数据世界或周围的未来机会打开了一扇门。

玛丽·勒费夫尔

结论:开始吧!

为了结束这篇文章,我想补充最后一个论点(和一些好消息):学习 SQL 是免费的

其中,MySQL 是一个开源的 RDBMS(见简介),你可以免费下载和安装。然后,您可以开始参加在线课程,或者请您的数据分析师同事就该主题为您提供一个快速入门课程!学习 SQL 有大量免费的在线资源:

  • 在线课程(例如在 Coursera 或 Udemy 上)
  • 从到数据科学的文章
  • 博客
  • 等等。

现在全靠你了。快乐学习!

你喜欢读这篇文章吗? 成为会员 加入一个不断成长的充满好奇心的社区吧!

https://marie-lefevre.medium.com/membership

为什么应该使用线性回归模型而不是神经网络的 3 个原因

原文:https://towardsdatascience.com/3-reasons-why-you-should-use-linear-regression-models-instead-of-neural-networks-16820319d644?source=collection_archive---------5-----------------------

不要忘记传统的统计学

凯西·霍纳在 Unsplash 上的照片

介绍

第一,我不是说线性回归比深度学习好。

其次,如果你知道自己对计算机视觉、图像识别或语音识别等深度学习相关的应用特别感兴趣,那么这篇文章可能与你不太相关。

但是对于其他人,我想给出我的想法,为什么我认为学习回归分析比深度学习更好。为什么?因为时间是有限的资源,你如何分配你的时间将决定你在你的学习旅程中走多远。

因此,我将给出我的两点意见,为什么我认为你应该在深度学习之前学习回归分析。

但是首先,什么是回归分析?

简单来说,回归分析通常与线性回归互换使用。

更一般地说,回归分析是指一套用于估计因变量和自变量之间关系的统计方法。

然而,一个很大的误解是,回归分析仅仅指线性回归, **并非如此。**回归分析中有许多非常强大和有用的统计技术。这引出了我的第一点:

第一点。回归分析更加通用,具有广泛的适用性。

线性回归和神经网络都是在给定一些输入的情况下可以用来进行预测的模型。但是,除了做出预测,回归分析还允许您做更多的事情,包括但不限于:

  • 回归分析让你了解变量之间关系的强度。使用 R 平方/校正 R 平方等统计测量值,回归分析可以告诉您数据中的总可变性有多少是由您的模型解释的。
  • 回归分析告诉您模型中哪些预测因子具有统计显著性,哪些不具有。更简单地说,如果你给一个回归模型 50 个特征,你可以找出哪些特征是目标变量的良好预测者,哪些不是。
  • 回归分析可以给出它估计的每个回归系数的置信区间。您不仅可以估计每个特征的单个系数,还可以获得系数所在的置信水平(例如 99%置信)的系数范围。
  • 还有更多…

我的观点是,回归分析中有很多统计技术,可以让你回答更多的问题,而不仅仅是“给定 X(s),我们能预测 Y 吗?”

第二点。回归分析不是一个黑箱,更容易交流。

在选择模型时,我总是考虑两个重要因素,一是如何简单,二是如何可解释

为什么?

更简单的模型意味着更容易交流模型本身如何工作以及如何解释模型的结果。

例如,大多数商业用户理解最小二乘和(即最佳拟合线)的速度可能比反向传播快得多。这很重要,因为企业对模型中的底层逻辑是如何工作的感兴趣——在企业中,没有什么比不确定性更糟糕了——黑盒是它的同义词。

最终,理解模型中的数字是如何得出的以及如何解释它们是很重要的。

第三点。学习回归分析会让你从整体上更好地理解统计推断。

信不信由你,学习回归分析让我成为了一个更好的程序员(Python 和 R),一个更好的统计学家,并且让我对构建模型有了更好的理解。

为了让您更加兴奋,回归分析帮助我了解了以下内容(不限于此):

  • 构建简单和多元回归模型
  • 进行残差分析并应用像 Box-Cox 这样的变换
  • 计算回归系数和残差的置信区间
  • 通过假设检验确定模型和回归系数的统计显著性
  • 使用 R 平方、MSPE、梅伊、MAPE、PM 评估模型,这样的例子不胜枚举…
  • 使用方差膨胀因子识别多重共线性(VIF)
  • 使用部分 f 检验比较不同的回归模型

这只是我所学到的一小部分东西,我只是触及了皮毛。因此,如果你认为这听起来像一个整洁的演出,我敦促你去看看,至少看看你能学到什么。

怎么可以学习回归分析?

最近,我发现学习一个新话题的最好方法是从学院/大学找课程讲座或课程笔记。令人难以置信的是网上有这么多免费的东西。

特别是,我将留给您两个很好的资源,您可以使用它们开始工作:

https://online.stat.psu.edu/stat501/

感谢阅读!

我希望你觉得这篇文章很有见地!请记住,我的观点是基于我的经验,可能与你的不一致,没关系!如果你对此有共鸣,并同意我的观点,我鼓励你深入这个话题——你不会后悔的。

一如既往,我祝你在努力中好运!

不确定接下来要读什么?我为你挑选了另一篇文章:

又一个!

特伦斯·申

  • 如果你喜欢这个, 跟我上媒 了解更多
  • 有兴趣合作吗?让我们连线上LinkedIn

你不应该为你的机器学习之旅担心数学的 3 个理由

原文:https://towardsdatascience.com/3-reasons-why-you-shouldnt-worry-about-math-for-your-machine-learning-journey-e06dff6528d1?source=collection_archive---------48-----------------------

以及如何取得成功

图片由标记 _ 摄影来自【Pixabal.com 的

这一切都始于我个人的奋斗

到说实话,从我开始机器学习之旅的第一天起,对数学不够好的恐惧就一直困扰着我。当我在做神经网络的反向传播时试图应用链式法则时,它第一次打动了我。在任务截止日期前,我花了好几天时间才最终弄明白如何计算梯度。伙计,那感觉很难!我几乎还能尝到嘴里的苦涩和艰辛。我不知道,这可能是最简单的部分。当我第一次尝试阅读机器学习论文时,真正的噩梦开始了…🤮

如果你能理解我的经历,那你就去过那里。我今天想告诉你的是:不需要那样,你可以有一个完全不同的角度来接近你的机器学习之旅,而不用太担心数学。让我解释一下。

应用深度学习所需的数学非常有限

在机器学习中,太多人患有冒名顶替综合症,无法弄清模型背后的数学真相。这是可以理解的,当我们知道我们在控制时,我们对自己感到安全和自信。但是不能完全理解数学是一个严酷的提醒,提醒我们还不够。

这在 90%的情况下可能是不必要的,尤其是对于深度学习。还记得我上面提到的反向传播链规则地狱吗?它追逐了我太久,直到有一天,当我在学习 PyTorch 时,我发现了一个叫做' auto-grad '的东西它让我大吃一惊。这基本上意味着无论你想出什么损失函数,框架都会跟踪它,并自动为你计算梯度。什么?!那为什么我需要手工计算所有的反向链规则呢?

由 Kelly Sikkema 在 Unsplash 上拍摄的照片

而且即使你必须手工完成这些,深度学习所需的基本数学是矩阵乘法和导数微积分。一旦你掌握了这两点(这绝对不难),你在面对大部分挑战时应该会感到自信。其余的更多的是试验什么可行,什么不可行——比如 AutoML 和网格搜索。

🧗Two 语言,山的两边,同一个 Peak🧗‍♀️

照片由来自 Pixabay 的 Pexels 拍摄

答关于机器学习的另一件事是,它要求你会两种语言:编程语言如 Python、R 和数学。有时候,要解决一个挑战,你需要综合的力量,掌握一个肯定会帮助另一个。因此,如果你不是“数学头脑”,所有的希望都不会失去,因为你仍然可以尝试用代码来做它,它一点也不含糊,而且非常“可修补”。不像数学,你总是可以做更多的实验并得到反馈。

在编码领域,当教授递归算法时,最大的障碍是要'信任'简单的递归代码,它们实际上可以解决看似困难的问题。这叫做‘信念的递归跳跃’https://baeddavid.medium.com/taking-the-first-recursive-leap-of-faith-ea5cd9582d94。第一次递归学习通常很难克服不舒服的感觉,即仍然缺少解决问题的代码。这有点不自然,但你只要相信代码,相信算法,让它以优雅的方式展开问题。只有在实践之后,你才能轻松自信地使用递归解决问题。

我感觉深度学习也有类似的东西。大多数框架和一些语言拥有的“自动渐变”特性就是其中之一。你不需要知道如何计算你的损失函数的梯度,只需要相信框架/语言可以做到。也许它应该被称为“信念的自动毕业生飞跃”。不会用汇编写你的 Python 代码你也不会烦恼吧?所以当你不能用手做渐变的时候,为什么要小题大做呢?

你不应该让自己陷入困境🚦

照片由 schroederhund 从 Pixabay 拍摄

另一个值得注意的点与一般的学习和教育有关。我想把它叫做“不要卡住”当遇到一个问题或挑战时,也许是一个数学方程式,也许是一个 bug,不要让自己陷入其中,把所有的时间都投入到解决它上。相反,后退一步,深呼吸,休息一下,走开,找些方法绕过去。或者暂时忽略它,稍后再回来。你会发现,有了更多的背景,更好的休息,更清晰的观点,问题会看起来不同,解决方案通常会自己出现。所以不要纠结于数学或者其他什么,真的。退一步,看大局。🥾

你应该怎么做?

说了这么多,我想澄清一下,我并不反对学习数学,也不是说数学对你的机器学习之旅不重要。数学无疑是大多数新的有影响力的机器学习研究进展的核心。我刚才说的是不要让对数学的痴迷或对数学的恐惧阻碍你的学习。跟着学习,如果遇到困难就尝试代码,先获得一些直觉。随着时间的推移,你会逐渐理解机器学习的数学部分。数学的学习是必要的,但额外的担心不是。👨‍💻

结论

希望这些提示能帮助你的深度学习之旅,无论是学习新东西还是解决一些棘手的问题。谁知道呢,在解决了一些挑战并看到它的美丽后,你可能会爱上数学,这对你来说永远都不是问题!祝好运,学习愉快!

觉得这篇文章有用?在 Medium 上关注我(李立伟),或者你可以在 Twitter @lymenlee 或我的博客网站wayofnumbers.com上找到我。你也可以看看我下面最受欢迎的文章!

** **

你的机器学习模型表现不佳的 4 个原因

原文:https://towardsdatascience.com/3-reasons-why-your-machine-learning-model-is-garbage-d643e6f0661?source=collection_archive---------18-----------------------

建立更好的 ML 模型的图解方法

作为一名数据科学家,用数据创造影响是你获得报酬的原因,但对于新手来说,抓住创建有影响的机器学习模型的问题似乎有点太令人生畏了。将它们归类到某个总括模式中,可以帮助有效地将优化模型的零碎内容联系起来,并理解真正的瓶颈出现在哪里。分为四个想法,示意图方法应该提供一个更清晰的步骤,以获得一个有影响力的模型。

肖恩·朗斯在 Unsplash 上拍摄的照片

培训数据的质量

大多数 ML 工程师都熟悉这句名言,“垃圾进,垃圾出”。当您的模型所训练的数据不能很好地代表实际情况时,您的模型只能执行这么多。我说的“代表”是什么意思?它指的是训练数据群体模拟目标群体的程度;不同类别的比例,或点估计(如均值或中值),以及训练和目标人群的可变性(如方差、标准差或四分位间距)。

一般来说,数据越大,越有可能代表您想要归纳的目标人群。但情况可能并不总是如此,尤其是在抽样方法有缺陷的情况下。例如,假设您想要对从第一标准到第十标准的整个学校的学生群体进行概化,但是 80%的训练数据包含第二标准的学生。如果学校的学生分布与第二标准中的 80%不对应,并且您想要预测的数据实际上很大程度上受不同班级中人口特征的自然差异的影响,则您的模型将偏向第二标准。

为了设计正确的数据收集技术,很好地了解目标人群的分布是至关重要的。一旦有了数据,就要研究数据(探索性数据分析阶段),以确定其分布和代表性。

离群值、缺失值以及完全错误或虚假的数据是您可能需要考虑的一些其他因素。您应该将异常值限制在某个值吗?还是完全移除它们?价值观正常化怎么样?您是否应该包含一些缺失值的数据?还是用平均值或中值代替缺失值?数据收集方法是否支持数据的完整性?这些是在考虑模型之前必须评估的一些问题。数据清理可能是数据收集后最重要的步骤。

无关的特征

“垃圾进,垃圾出”这句话也适用于特性工程。一些特征对预测的权重(影响)会比其他特征大。

相关系数、方差、离差率等度量被广泛用于对每个特征的重要性进行排序。数据科学家新手常犯的一个错误是,他们使用主成分分析来减少内在不连续的维度。我的意思是,技术上你可以,但理想情况下,你不应该。这通常导致假设可变性最高的特性就是影响最大的特性,当然,这不一定是真的。人工编码的特征原本在本质上是分类的,但当编码时,通常不会像连续的特征那样高度可变,因此它们的相关性被低估了。

有时,使用其他已知要素创建新要素比将它们分开会产生更大的影响。通常,具有太多相关性低的特征会导致过度拟合,而具有太少的特征会导致拟合不足。找到特性的最佳组合需要领域的经验和知识。这可能是一个不错的模型和一个近乎完美的模型之间的区别,并且,推而广之,一个不错的 ML 工程师和一个相当好的 ML 工程师之间的区别。

过度拟合和欠拟合

与我们关注数据的前几个问题不同,这一个问题实际上归结为模型使用的算法,尽管通过考虑上面讨论的问题,这些影响仍然可以在一定程度上得到缓解。

过度拟合是指模型与训练数据过于接近,无法推广到目标人群。一般来说,模型越复杂,就越能更好地检测训练数据集中的细微模式。收集的数据可能不总是完全代表目标人群,因此使用更复杂的算法(如深度神经网络)而不是较简单的低阶多项式算法可能是区别所在。但是,对问题使用太简单的模型,模型将不能很好地学习和检测潜在的模式。当然,这被称为欠拟合。

补偿过度拟合的一种方法是施加惩罚,这取决于模型赋予特征的权重与我们在训练前设置的值之间的差异(如果我们希望模型完全忽略该特征,该值也可以为零)。这有效地允许我们在更精细的尺度上控制算法的复杂性,并帮助找到过拟合和欠拟合之间的最佳点。这就是我们所说的模型的正则化,惩罚是一个超参数。它不是模型的一部分,但是影响模型的概括能力,并且在训练之前设置。还有其他方法来找到甜蜜点,如装袋(主要用于随机森林)和助推。

但这并没有结束。在对超参数进行大量调整后,您可能会发现您的模型对测试数据集的预测准确率为 95%。但是现在你冒着过度适应的风险,即组测试数据和模型在部署时可能无法推广到真实世界的数据。对此的常见解决方案是从训练数据集中分割出另一组数据,并在使用不同超参数调整的第一个测试数据集上测试模型后,将其用作验证模型的另一层。三轮拟合通常会产生一个效果很好的模型,但这最终取决于你所拥有的数据的大小和质量,以及手头问题的复杂程度。

缺乏足够的数据

大多数 ML 模型需要 sh*t 色调的数据。除非你有一个只需要一些微调的预训练模型,否则你必须找到一种方法为你的模型提供足够的数据。即使对于像识别橙子和香蕉这样的简单任务,也应该有至少几千个示例图像供模型学习。这是管道中的一个巨大瓶颈。比任何其他因素更重要的是,由于缺乏足够的数据,今天的 ML 模型的效率及其应用的功效被大大抑制了。

这就是为什么像脸书、谷歌和苹果这样的公司如此热衷于从他们的用户那里收集尽可能多的数据(这里不讨论这种做法的道德问题)。裁剪、填充和水平翻转等数据扩充技术对于从可用数据集挤出尽可能多的训练潜力至关重要,但这些技术只能做到这么多。这项来自微软的研究说明了非常多样的 ML 模型如何表现相似,并且与训练数据的大小(字数)有非常强的正相关性。

图 1 来自,Banko,m .,& Brill,e .缩放到用于自然语言消歧的非常非常大的语料库。检索时间 2021 年 2 月 16 日。

当然,这并不适用于所有情况,但公司应该重新考虑花费数百万用于模型算法开发和收集越来越多数据之间的权衡。

最终目标是能够:

我)拥有尽可能完美地代表目标人群的数据(又名。更大的数据量和更高的数据质量)

ii)在现实中使用实际影响预测的特征

iii)使用适当复杂程度的模型(又名。它能够学习的详细程度)

iv)微调模型,以匹配或减少问题的实际复杂性和模型复杂性之间的差距

</5-stages-of-learning-data-science-40bca61f11b1>

附言:更多关于数据科学、编程以及生物学家如何在数据革命中导航的简明扼要的文章,请关注我的博客。

每分钟都有成千上万的视频被上传,过滤掉它们是很重要的,这样你就只消费高质量的数据。我亲自挑选的,我会把你感兴趣的主题的教育视频发邮件给你。报名这里。

感谢您的阅读!

构建数据科学产品组合时要避免的 3 个新手错误

原文:https://towardsdatascience.com/3-rookie-mistakes-to-avoid-when-building-your-data-science-portfolio-6451ccaebf2d?source=collection_archive---------21-----------------------

下面是应该做什么和应该避免什么

在 Unsplash 上 Magnet.me 拍照

你能记得上一次仅仅通过提交简历就找到工作是什么时候吗?没错;技术领域已经被重组到一个高度革命性的标准,雇主不再相信一份充满你的教育背景的经验和成绩的文件(你的简历)。他们想看看你能用你所拥有的技能做些什么或者已经做了些什么。

向你的潜在雇主展示你能做什么,而不仅仅是告诉他们,这对于抓住每一个工作机会来说是非常重要的。

这里有一个问题,这不仅仅是建立一个投资组合——你需要建立一个能让你立即被雇佣的投资组合。大多数数据专业人士在建立投资组合时都会犯很多初级错误。这些错误通常会使他们失去赚钱的数据工作机会。

在本文中,我们将讨论在构建数据科学投资组合时经常犯的错误以及如何避免它们。为了简化事情,我对数据科学专业人士(数据分析师、产品设计师、数据工程师和其他人)的经验进行了研究和个人交流。以及建立销售组合的注意事项。就这样,让我们开始吧!

1。创建网站

除非你是吴恩达,否则你的网站不会有任何流量——尤其是如果你是数据科学新手的话。没有经验,没有人脉,没有人脉。当然,你可以使用一个网站作为投资组合,但为什么不使用一个拥有数百万志同道合的数据科学家的平台呢?

这是一个双赢的局面,你得到现成的流量。这意味着更多人关注你的项目,你可以向更多的雇主展示你的技能和成就。

Github 是一个流行的平台,用于展示各种数据科学项目和经验。对于希望学习和增长数据科学知识的初学者来说,Github 是您的首选起点。有了大量的技术爱好者,尤其是数据科学家,您的工作将很容易被同事、项目团队和经理访问。我敢肯定,这比零流量的网站发展要好。最好是将这种能量引导到在 Github 的其他专业人员中留下印记。你会需要的。

假设你刚刚完成了一个项目,你想创建一个 Github 库,上传一个包含标题、概要、数据集和项目文件的README.md file是非常重要的。

一个好的自述文件应该包含:

  • 您的项目标题。
  • 关于它的内容和发布日期的详细描述。
  • 流程中使用的步骤。
  • 如何运行你的代码?
  • 列出配额和许可证。

你的自述文件应该用简单的上下文来概括你的项目是关于什么的,我喜欢让我的自述文件对技术人员和非技术人员都容易阅读。

大多数数据科学家通常会在简历的项目/经历部分留下 Github 简介的链接。雇主可以看看你做了什么,用了什么工具,你是怎么做的。请记住,要想在该领域的其他专家中脱颖而出,您需要尽可能让您的 Github 简介独一无二且专业。

2。你的数据科学技能没有公开证据

你能部署代码吗?将数据可视化为简单的演示文稿?为数据科学中的基本挑战创建解决方案?有很多才华横溢的数据专业人士,根据经验,以上问题的答案是肯定的。既然你在你的领域很广阔,为什么你不在有共同兴趣的数据科学家之间分享你的知识呢?

强有力的公开证据将为你的数据科学技能提供数据支持。许多数据专业人士和爱好者在陷入分析困境时经常搜索解决方案,或许他们通过你的在线作品获得了帮助,他们很有可能会联系你,讨论其他机会。网络在技术中至关重要。

数据营的高级数据科学从业者,大卫·罗宾逊,讲述了他与一位雇主的经历,这位雇主注意到了他几年前在网上分享的知识。在 Mode Analytics 博客上的采访中讨论这个问题时,他分享了自己是如何在没有提交简历的情况下获得业内第一份工作的。他说,

对我来说,最有效的策略是做公共工作。我在博士后期写了很多博客并做了很多开源开发,这些有助于向公众证明我的数据科学技能。但我获得第一份行业工作的方式是公共工作中一个特别值得注意的例子。在我读博士期间,我是编程网站 Stack Overflow 的活跃回答者,该公司的一名工程师偶然发现了我的一个答案(一个解释 beta 分布背后的直觉的答案)。他对这个答案印象深刻,于是他(通过 Twitter)与我取得了联系,几次面试后,我被录用了。

有些人可能会说这是运气,但这是一个纯粹的意外,

努力+耐心=成功。

内容创作是建立作品集时最被忽视的方面之一。数据科学社区、社交媒体团体、YouTube、Quora 和微博平台都是重要的媒介,你可以利用它们来分享知识、建立追随者并开发你自己的在线数据科学不动产。

有了这些,以下是你可以用来建立投资组合的最佳平台:

卡格尔

Kaggle 是互联网领域最大的数据科学论坛,提供数据科学家展示技能、分享各种数据相关主题的信息、构建和发布数据集所需的各种重要功能。你可以用 Kaggle 做很多事情来丰富你的投资组合。

参加 Kaggle 竞赛并创建有用的模型是显示数据科学家熟练程度的好方法。如果你想建立最高水平的专业精神,作为一名数据科学家在网上露面是非常重要的,Kaggle 是一个免费的社区,可以帮助你以高标准做到这一点。

推特

是啊,就是你用来查地震的那个应用。流行的微博平台是构建健康的数据科学组合的强大工具。Twitter 是一个认识你所在领域的其他专业人士并与之互动的好地方。公司和个人也在他们的 Twitter 页面上分享机会(工作机会、自由职业晋升和会议邀请)。

Tableau 公共

Tableau 是一个数据可视化软件,旨在通过以图形和图表的形式将大量原始数据转换为有用和可读的信息。大多数数据工作需要你对 Tableau 有基本的了解,然后你才能得到一份工作。在 Tableau Public 上显示一些仪表盘会增加你技能的可信度。

我最近发表了一篇关于 Tableau 最佳特性的文章,它将提高你的数据科学和可视化技能。请随意查看,以详细了解 Tableau 软件。

3。包括错误的项目

在广泛的数据科学领域中有许多项目要做,值得一提的是,知道将什么样的项目添加到您的投资组合中是每个数据科学家都需要知道并精确应用的一项非常重要的技能。机器学习、可视化、物联网、人工智能,不胜枚举,大多数情况下,很难知道招聘经理希望看到什么样的项目。

Quora 的数据科学研究员和采访者 William Chen 描述了每个数据专业人员组合中独特项目的类别:

我喜欢那些人们表现出他们对数据感兴趣的项目,而不仅仅是家庭作业。任何种类的期末项目,你探索一个有趣的数据集,发现有趣的结果…努力写下…我真的很喜欢看到真正好的写下人们发现有趣和新奇的事情…有一些可视化和分享他们的工作。

雇主很容易被错误的项目拒之门外——展示完美的项目会让你更接近你的梦想职位。

**非常重要:**将你所有的数据科学工作直接投入到你的投资组合中可能很有诱惑力。确定最能展示你技能的项目。试着包括你为你最大的客户所做的工作,一个复杂但简单的论文,你为一个流行问题创造解决方案的项目。

结论

一份强有力的简历将让你进入办公室,至于面试,一份强有力的作品集将让你作为一名完全合格的数据科学家进入办公室。重要的是和更有经验的专业人士一起参与更多的项目。我总是告诉我的同事:无论你认为你知道什么,你永远也学不会数据科学的所有知识。不断学习,不断建设。

正如大卫·罗宾逊所说,

一般来说,当我评估一个候选人时,看到他们公开分享的东西,我会很兴奋,即使这些东西还没有润色或完成。分享任何东西几乎总是比什么都不分享要好。

你参与的项目越多,你能在作品集里展示的技能就越多。随着你的成长,确保你不断更新你的投资组合。永远不要停止分享知识,即使没有申请,你也会增加自己的知名度和被录用的机会。

资源

http://varianceexplained.org/r/start-blog/

3 个 Seaborn 函数覆盖了(几乎)所有的可视化任务

原文:https://towardsdatascience.com/3-seaborn-functions-that-cover-almost-all-your-visualization-tasks-793f76510ac3?source=collection_archive---------20-----------------------

综合实践指南

卢克·切瑟在 Unsplash 上的照片

数据可视化是数据科学不可或缺的一部分。它帮助我们探索和理解数据。数据可视化也是传递信息和交付结果的重要工具。

由于其重要性,在数据科学生态系统中有许多数据可视化库和框架。其中一个流行的是 Seaborn,这是一个用于 Python 的统计数据可视化库。

我最喜欢 Seaborn 的是它巧妙的语法和易用性。它允许创建只有 3 个功能的公共图。

  • Relplot:用于创建关系图
  • 分配图:用于创建分配图
  • Catplot:用于创建分类图

这 3 个功能为创建和定制不同类型的图提供了图形级界面。我们将通过几个例子来理解这些函数的用法。

这些例子将基于一个超市数据集。以下是对它的概述。我已经在 Kaggle 上排除了它的原始版本中的一些列。我们从导入库和读取数据集开始。

import numpy as np
import pandas as pd
import seaborn as sns
sns.set(style='darkgrid')df = pd.read_csv("/content/supermarket.csv", parse_dates=['date'])df.head()

(图片由作者提供)

该数据集包含零售企业的销售数据。

重新绘图

relplot 函数用于创建关系图,即线形图和散点图。这些图提供了变量之间关系的概述。

让我们首先创建单价和总价列的散点图。我们指定数据帧和列名。种类参数用于选择绘图类型。

sns.relplot(data=df, x='unit_price', y='total', kind='scatter')

(图片由作者提供)

它是一串直线,因为总价等于单价乘以决定直线斜率的数量。

让我们也使用 relplot 函数创建一个线图。我们可以画出每天的总销售额。第一步是按日期对销售额进行分组,然后计算总和。

df_sub = df[['total','date']].groupby('date').sum().reset_index()df_sub.head()

(图片由作者提供)

我们现在可以创建线图。

sns.relplot(data=df_sub, x='date', y='total', kind='line',
            height=4, aspect=2)

(图片由作者提供)

我们使用高度和纵横比参数来调整绘图的大小。aspect 参数设置宽高比。

显示

displot 函数创建分布图,这些分布图为我们提供了数字变量分布的概况。我们可以用 displot 函数创建直方图、kde 图、ecdf 图和 rug 图。

直方图将数值变量的值域划分为离散的区间,并计算每个区间中数据点(即行)的数量。让我们创建一个总销售额的直方图。

sns.displot(data=df, x='total', hue='gender', kind='hist',
            multiple='dodge', palette='Blues', height=4, aspect=1.4)

(图片由作者提供)

hue 参数根据给定列中的不同值来分隔行。我们已经将性别列传递给了色调参数,因此我们可以分别看到女性和男性的分布。

multiple 参数决定不同类别的条形如何显示(“减淡”表示并排)。使用色调变量时,调色板参数用于选择调色板。

这些函数的一个优点是参数基本相同。例如,它们都使用色调、高度和外观参数。这使得学习语法更容易。

kde 图创建了给定变量(即列)的核密度估计,因此我们得到了概率分布的估计。我们可以通过将 kind 参数设置为“kde”来创建 kde 图。

sns.displot(data=df, x='total', hue='gender', kind='kde',
            palette='cool', height=5, aspect=1.4)

(图片由作者提供)

猫图

catplot 函数用于创建分类图,如箱形图、条形图、条形图、小提琴图等。使用 catplot 函数总共可以生成 8 个不同的分类图。

箱线图显示了变量在中位数和四分位数方面的分布。这是每个产品线的单价列的方框图。

sns.catplot(data=df, x='prod_line', y='unit_price', kind='box',
            height=6, aspect=1.8, width=0.5)

(图片由作者提供)

宽度参数调整框的宽度。

以下是箱线图的结构:

箱线图的结构(图像源)

Median 是对所有点进行排序时位于中间的点。Q1(第一或下四分位数)是下半部分的中位数,Q3(第三或上四分位数)是上半部分的中位数。

我们还可以创建一个带状图来检查不同产品线的单价。带状图不使用方框,而是用点来表示每个数据点。因此,它就像一个数字和分类变量的散点图。

让我们为分支和总计列创建一个带状图。

sns.catplot(data=df, x='branch', y='total', kind='strip',
            height=5, aspect=1.3)

(图片由作者提供)

点的密度让我们对分布有一个大致的概念。看起来分支 C 在顶部区域有更多的数据点。我们可以通过检查每个分支的平均总额来证实我们的直觉。

df[['branch','total']].groupby('branch').mean() total     
branch
--------------------                              
  A       312.354029                 
  B       319.872711                 
  C       337.099726

C 的平均值高于其他两个分支的平均值。

catplot 函数下的另一种绘图类型是小提琴绘图。这是 plto 和 kde 图的结合。因此,它提供了一个变量分布的概况。

例如,我们可以创建一个 violin 图,该图包含上一个示例中用于带状图的列。我们需要做的就是改变 kind 参数。

sns.catplot(data=df, x='branch', y='total', kind='violin',
            height=5, aspect=1.3)

(图片由作者提供)

C 支的小提琴比上面的另外两把粗一点。

结论

relplot、displot 和 catplot 函数可用于生成 14 个不同的图,这些图几乎涵盖了我们通常在数据分析和探索中使用的所有可视化类型。

这些函数提供了一个标准的语法,使得理解它们变得非常容易。在大多数情况下,我们只需要改变 kind 参数的值。此外,定制图的参数也是相同的。

有些情况下,我们需要使用不同类型的地块。但是,我们需要的大部分都在这三个函数的范围内。

感谢您的阅读。如果您有任何反馈,请告诉我。

你的人工智能项目注定要失败的 3 个迹象

原文:https://towardsdatascience.com/3-signs-that-your-ai-project-is-doomed-9e3ab82d9425?source=collection_archive---------5-----------------------

你知道机器学习的开始并不顺利,当…

改编自维基百科。

“在你做过的机器学习战略咨询中,与哪种产品团队合作最具挑战性?”

在咨询了数百个机器学习项目后,我学会了关注客户有搬起石头砸自己脚危险的早期预警信号。以下是我最喜欢的三个:

  1. 他们是抱有不切实际期望的营销受害者
    **特例:愿意不惜一切代价推出
    特例:无数据(及其他基本要求)
  2. 缺乏对技能多样性的尊重
    *特例:有毒势利
  3. 团队不知道谁是负责人
    *特例:尖头发老板

详情如下。(如果你觉得我写的东西有用,最完美的感谢是转发。)

不切实际期望的头号营销受害者

有很多关于人工智能的炒作和胡说八道,所以当团队从最新的电视节目中直接来找我时()“…但是如果你现在打电话,我们会提供 50 个免费的深度神经网络,你可以组成一个邪恶的组合!”我知道我必须打消各种不切实际的期望。

科幻小说是一个糟糕的老师…但却是销售高手。

如果你认为 ML/AI 很神奇,你做出的项目决策就有不系安全带等同于超速行驶的危险。所有人深呼吸!

ML/AI 更多的是给你的团队一个编程的替代方法,这适合的一部分(不是全部!)任务比传统方法好得多。这既无聊又非常有用…这正是我喜欢它的原因。一个冷静的团队,呃,我的意思是,由价值而不是炫目所驱动的团队更有可能在人工智能领域取得成功。

特例:愿意不惜一切代价发射

有时候,团队并不关心用 ML/AI 解决真实的业务问题。相反,他们是为了视觉:他们希望能够谈论他们的“人工智能业务”他们没有任何标准,也不在乎是否可行。他们只是想推出一些热门的 AI。

图片:来源。

问题是,他们对自己的目标不诚实。如果他们是,我会帮他们找一个简单的玩具应用,不碰任何太重要的东西,垃圾的话也不会伤害任何人。本质上是成人学生的家庭作业。我甚至会提出一些想法,告诉你如何挑选一个听起来令人印象深刻但又无害的。每个人都会是赢家。

本质上是成人学生的家庭作业。

唉,以我的经验来看,这样的团队很少承认,直到为时已晚。有时候他们自己都不承认。相反,他们选择了一个任务关键型(令人印象深刻)的应用程序,但故意忽略了任何关于确保他们的系统高性能和可靠的谈论。(“哎呀,让它正常工作太繁琐了。我就 在事后设置性能栏吧。”)

如果团队诚实地(至少对自己)说出他们对于 ML/AI 项目的真正目标,并围绕这些目标构建他们的策略,一切都会变得更好。稍后添加营销亮点。

特殊情况:无数据(和其他基本要求)

既然机器学习是神奇的,每个人都在做,你也可以!即使你没有数据!对吗?不对。

你的项目需要满足一堆条件,你才能认真考虑 ML/AI。仔细检查这份包含 22 个项目的清单,看看你的项目是否没有成功的可能。把它想象成你的免费人工智能战略顾问盒。

*http://bit.ly/quaesita_realitycheck

#2 不尊重技能多样性

项目头疼的另一个迹象是缺乏对技能多样性的尊重。事实上,让我告诉你我最不喜欢的问题。而是:“你会如何描述理想的人工智能人?”

不要陷入过度关注在过程中间发挥作用的角色的陷阱。

我非常不喜欢这个问题,因为它假设应用人工智能是一个单人牛仔的游戏,而实际上它是一项团队运动。没有一个员工具备成功所需的所有技能。创建人工智能解决方案需要一个村庄(特别是如果我们谈论的是大规模的任务关键型解决方案),如果你的团队缺少任何所需的技能,整个事情都会崩溃。如果你没有能力与跨学科团队合作,你会在应用人工智能方面遇到问题……因为这是完成工作所需要的。

如果你一直试图雇佣一个人做所有的事情,难怪你会抱怨人才短缺!

我发现,要给那些认为像他们一样的工人是最好的、最聪明的(其他人都是白痴)的人提建议,需要花费我更多的耐心和精力。我遇到过人工智能研究人员,他们似乎认为,我所说的技能多样的工人是指从不同顾问那里获得计算机科学/人工智能博士学位的人。我遇到过完全由工程师组成的团队,他们不知道为什么如果用户体验设计部分由一个 UX 的专业人士处理会更好。(你以为会编码就懂设计?这是什么年代,90 年代?)

迷因:来源。

一定要赞美你的专家的技能多样性,并确保团队中的每个人至少对团队中其他人的工作有所了解。在这里了解更多关于典型 AI 项目的角色:[ 1 ,[ 2 ,[ 3 ,[ 4 。

特例:有毒势利

人工智能行业充斥着一种特殊的坏苹果,这种恶霸将人工智能工作者分成两类:合法的喜欢自己的人工智能参与者和几乎不必要的附属品。是的,我在看着你们,AI 研究人员和工程师。你们中的许多人都是可爱的人,他们渴望接受背景不同于自己的同事的不同贡献(如果你花时间指导他们,让他们跟上他们正在努力解决的问题,这是加分的),但你们中的一些人坐在那里抱怨说,没有博士学位的人应该离开你的人工智能草坪。

请停下来。

一个更好的策略是拥抱技能多样性,教会每个人欣赏不同的角色,有效地合作,并鼓励相互尊重。学会欣赏你同事擅长的事情,即使这些事情与你自己的技能不相干。如果你不是为了做一个好人而做,那就为了项目成功而做。与那些与我们不同的人合作会让我们更加强大。如果这听起来像是一派胡言,那就让我把你引向无情理性最冷酷的堡垒:你的经济学教科书。翻开关于比较优势的那一章,开始阅读……它会说完全相同的事情(数学方面,因为常识似乎对你不起作用)。

巨美的书呆子群很少对你有好处。图片:来源。

在应用人工智能领域有许多不同种类的合法参与者,根据其难度,你的项目可能需要他们。即使你找到一个神奇的独角兽,他拥有所有技能(同时是完美的工程师、完美的机器学习研究员、完美的 UX 设计师、完美的统计学家、完美的产品经理、完美的团队领导、完美的分析师、完美的领域专家、完美的商业决策者,以及所有其他人……集于一身),也会有太多的工作让他们独自去做,他们将被迫专业化。所以马上接受专家吧!你不会坚持雇佣奥运金牌选手帮你搬家具,对吧?好吧,不要做科技等价物。拒绝尊重伦理学家关于伦理的观点,除非他们有第二个计算机科学博士学位(真实故事)是愚蠢的,克服你自己。

不要试图自己做所有的事情,要学会如何检查接力棒是否在你的队友之间正确传递。

要从事应用 ML 工作,你不需要成为机器学习教授。你只需要在你的部分成为一个向导,并且很好地理解你的团队成员做什么(尽管不是你自己如何做)。例如,你的机器学习工程师需要能够理解来自业务领导的请求,他们需要能够评估这些人何时正确地完成了他们的工作,如果有糟糕的请求进来,他们应该阻塞流程。他们不应该屈服于不明智的,冲动的胡说八道。

当劳动力短缺时,人们会挺身而出去填补空缺。花点时间想想什么样的性格不太可能被有毒的势利感所吓倒。

哦,当我谈到这个话题时,有毒的欺凌和势利还有另一个影响:理智的新手被赶出去——被瘫痪的骗子综合症击垮,而不是被你辅导——而无耻的新手却没有被吓住。这就是我和我的朋友们开玩笑地称之为人工智能的第二种冒名顶替综合症(生存偏爱真正的冒名顶替者,所以留在游戏中的人不成比例地是时髦的骗子,他们甚至不明白他们不明白的东西)。邓宁-克鲁格变得如此丑陋,就像 T2 的弗雷迪·克鲁格。我还大胆猜测,这对该领域的多样性努力没有任何好处。

#3 团队不知道谁是负责人

当项目缺少一个熟练的领导者、发起人和决策者时,团队的努力很有可能被浪费掉…或者更糟。

这里谁说了算?"图像:来源。

*“你们大人呢?”*是当除了产品负责人/ 决策者之外的所有人都出席第一次会议时,每个优秀的人工智能战略顾问都在内心尖叫的东西。

如果谁说了算,我们就走运了。也许那些把老板留在家里的人正在做一些探索/原型制作来节省决策者的时间(值得称赞!)或者也许团队已经进展过了第 1 步(甚至更好)并且正在寻求高级建议。

不幸的是,经常向我寻求建议的人没有考虑到谁将负责项目中决策者的角色。他们希望在他们的作品上洒一些机器学习魔法精灵粉,因为他们所有的朋友都在这么做。啊哦!事实证明,决策者在项目中起着最重要的作用——在此了解更多——所以你不应该在没有决策者的情况下开始。即使你想出了很棒的东西,你的努力也很有可能会白费。

图片:来源。

特例:头发尖尖的老板

这种情况的一个特例是“领导者”不称职。这种情况有缺席决策者设置的所有乐趣,还有囚犯试图欺骗精神病院给他们钥匙的额外奖励。熟练的领导在 ML/AI 中甚至比在传统软件项目中更重要。想了解更多,请看文章,在这篇文章中,我称 AI 中的尖头发老板为“天启四骑士之一”

感谢阅读!喜欢作者?

如果你渴望阅读更多我的作品,这篇文章中的大部分链接会带你去我的其他思考。不能选择?试试这个:

https://medium.com/hackernoon/the-decision-makers-guide-to-starting-ai-72ee0d7044df

一如既往,您的所作所为决定了您的社区将会听到谁的声音。请在社交媒体上分享好的、有用的文章,这样它就能超越垃圾。无为是杀死一篇文章的最好方法。(哦,你知道 Medium 允许你点击赞按钮 50 次来获得起立鼓掌吗?)

人工智能课程怎么样?

如果你在这里玩得开心,并且你正在寻找一个为初学者和专家设计的有趣的应用人工智能课程,这里有一个我为你制作的娱乐课程:

在这里欣赏整个课程播放列表:bit.ly/machinefriend

与凯西·科兹尔科夫联系

让我们做朋友吧!你可以在 Twitter 、 YouTube 、 Substack 和 LinkedIn 上找到我。有兴趣让我在你的活动上发言吗?使用表格联系。*

你可能成为伟大的分析工程师的 3 个迹象

原文:https://towardsdatascience.com/3-signs-you-could-be-a-great-analytics-engineer-fe894fa1457e?source=collection_archive---------14-----------------------

如果你有这些技能,也许是时候尝试一下这个新角色了。

伊恩·施耐德在 Unsplash 上拍摄的照片

最近几个月,我看到越来越多的分析工程师的招聘信息。每个公司都希望有人既有数据分析又有工程技能。雇佣一个人是最划算的。

在做了两年数据工程师后,我在 6 个月前成为了一名分析工程师。我从未回头。我很高兴我决定申请一个我从未听说过的职位。它最终成为了我的完美职位。

以下是一些迹象,它可能也是你和你的技能组合的理想角色。

你喜欢参与工程和商业战略。

作为一名数据工程师,我每天都和业务团队一起工作,但我从来没有机会做出实际的业务决策。我正在构建团队在没有我的情况下决定的工具和流程。

老实说,我很幸运能与商业团队互动。这让我对任务交给工程师之前发生的事情有了一些了解。这让我意识到我想成为做出战略选择实施这些选择的人。

我开始思考我每天想要完成的任务,这些任务既包括制定公司如何使用数据的战略,也包括建立处理这些数据的流程。分析工程师的工作描述听起来就像这样。

作为分析工程师,业务团队是您的利益相关者。你每天都和他们互动。你根据你的分析帮助他们指出正确的方向。你们一起工作,为营销、增长和产品决策提供信息并推动决策。

写 SQL 是你最大的超能力。

作为一名分析工程师,你睡觉、吃饭、呼吸 SQL。或许比数据分析师更重要。SQL 是你的 dbt 数据模型的核心。您需要知道编写和运行代码的最有效方式,以便这些模型快速可靠。

在用 dbt 做数据工程师之前,我对 SQL 了解不多。这是我不仅在工作中,而且通过做面试练习题学到的东西。面试问题向我介绍了不同的概念,比如窗口功能,这是我在工作中从未接触过的。你会惊讶于你从他们身上学到了多少。

所以,如果你对 SQL 了如指掌,也不要放弃尝试分析工程师的工作。这是比较容易学的技术技能之一。练习和重复真的能造就完美!

更重要的是,你需要喜欢写 SQL。如果你不喜欢这种语言,你可能会觉得这个角色重复又无聊。就我个人而言,我喜欢写 SQL,所以这对我来说是一种享受。我每天还在学习新的东西,比如[datepart()](/8-sql-date-functions-you-need-to-know-c6c887a8394f)函数。

你在设置系统方面取得了巨大的成功。

最后,如果你喜欢设置系统,你会喜欢成为一名分析工程师。这是什么意思?你从过程和组织中茁壮成长。

您需要构建数据管道,构建数据仓库,设置数据治理实践,并记录数据模型。这些事情中的许多将是公司从一开始就没有实现的事情。你将是那个从头开始建立这些并付诸行动的人。

如果你喜欢做决定,并且对自己的技能有信心,你可以通过这种方式在公司内部产生很大的影响。这是数据驱动型组织的支柱。你能成为建造它的人有多酷?

看到你建立的组织被其他分析师和领导团队所利用,这是非常令人满足的。你作为分析工程师的工作不会被忽视。它阻碍了公司内每个接触数据的人的工作。

结论

虽然作为一名分析工程师,你确实需要某些品质才能成功,但我坚信你会取得自己的成功。如果你知道你想追求这个目标,那就去实现它。投入工作掌握 SQL,学习 dbt,架构数据模型。

分析工程非常适合对工程和商业感兴趣的人。确保你喜欢这两个部分,因为你每天都要和两个团队一起工作。这将给你机会发展你与商业相关的沟通技巧和技术技能。剩下要做的就是申请了!求职愉快!

当你来自另一个领域时,你准备好接受机器学习工作的 3 个标志

原文:https://towardsdatascience.com/3-signs-youre-ready-for-a-machine-learning-job-when-you-ve-come-from-another-field-ffc23a0e0d14?source=collection_archive---------16-----------------------

你永远不会觉得自己准备好了,但有迹象表明是时候了

马丁·比约克在 Unsplash 上的照片

从另一个领域过渡到机器学习是艰难的。这不仅仅是因为你必须约束自己自学,还因为有很多东西要学,还有很多我们不知道自己不知道的东西。

例如,我们知道我们必须学习的主要机器学习算法,但我们不知道如何衡量我们是否真的准备好工作了。当我们试图衡量自己的技能时,通常会发生的情况是,我们最终会将自己与已经在该领域工作了 5 年以上的人进行比较。结果如何?压力。

你可能听说过“你永远不会觉得自己准备好了”这句话,这是真的。我同意。但是,有一些非常明显的迹象表明你已经完全准备好开始申请了。m

1.你不觉得有挑战/你觉得无聊

有很多原因会让你感到无聊。可能是你不满足,你不感兴趣,或者你觉得精力充沛,但却无处发泄。

全部有效!

如果你已经可以在考虑 ML ops 最佳实践的同时构建一个机器学习应用程序并将其部署到云服务器,那么你很可能正在遭受上述所有问题的困扰。

工作中一定会有某种成就感。当你不再感受到这种乐趣时,要么是因为你对机器学习并不真正感兴趣,要么是你已经到了不再知道自己不知道什么的地步。

在这种情况下,你需要一个有经验的从业者团队带你更上一层楼。开始申请。

2.你开始质疑自己的方向感

你的方向感让你知道你在哪里,或者该走哪条路,即使在不熟悉的领域徘徊。

宗教人士经常会说缺乏方向是没有目标的结果,在某种程度上,我同意。你不应该等到有了目标感才快乐。

想象一下,如果真是那样,生活会有多悲惨!

当一个人开始质疑他们在机器学习方面的方向感时,通常是因为缺乏对他们已经走了多远的欣赏。

随着你学得越来越多,你越来越难看到你的小进步,这可能会让你觉得你不再学习了——特别是当你把它与你每天都在学习新东西的时候相比时。

假设你满足了你想要的机器学习角色的一般要求,那么是时候申请一份挑战你的工作了,这份工作不同于你单独工作的情况。开始申请。

3.你已经在网上建立了自己的形象

我可以不假思索地列出 15 个你需要在线展示的理由——也许这将是我的下一篇文章。

这里有一个原因:当你从另一个领域过渡到机器学习时,你的简历不会向雇主解释你是谁。

简历只记录了你的技能、以前的工作、证书和成就的历史参考。但是,你是否会被录用取决于招聘经理是否认为你具备在他们的团队中工作的条件,这可以更好地反映你是谁——你在网上的形象可以更好地展示这一点。

如果你已经花了很多时间来建立一个对机器学习非常感兴趣的人的形象,假设你已经满足了技能要求,你就可以开始申请了。

包裹

开始找工作可能是一个可怕的过程。知道什么时候你已经获得了足够的技能来开始申请是很重要的,这样你就不会把你的学习拖得太久。

这些迹象只是一个开始,让我知道我错过了什么其他迹象。

感谢阅读!

如果你喜欢这篇文章,请通过订阅我的免费 每周简讯与我联系。千万不要错过我写的关于人工智能、机器学习和自由职业的帖子。

相关文章

https://medium.com/analytics-vidhya/courses-to-learn-data-science-in-2021-a52e64344e5c </5-things-id-tell-myself-if-i-had-to-learn-machine-learning-all-over-again-3feeb31a9b55> [## 如果我必须重新学习机器学习,我会告诉自己的 5 件事

towardsdatascience.com](/5-things-id-tell-myself-if-i-had-to-learn-machine-learning-all-over-again-3feeb31a9b55)

2021 年新手磨练 Python 技能的 3 个简单问题

原文:https://towardsdatascience.com/3-simple-questions-to-hone-python-skills-for-beginners-in-2021-f12da38f83cf?source=collection_archive---------20-----------------------

破解数据科学面试

初级数据科学家的逐步改进

比尔·杰伦在 Unsplash 上的照片

对于初级数据科学家来说,用 Python 编码可能令人望而生畏。相信我,我也经历过。有一次,我在 Leetcode 上绞尽脑汁想出一道简单的关卡题,几个小时毫无进展。

在过去的一年里,我被刻意训练用 Python 编码。我最大的收获是知道什么时候应该进入下一阶段,用更高级的问题挑战自己!如果我们停留在舒适区,练习旧的和熟悉的代码,就没有改进的空间。

要想在 Python 编程方面出类拔萃,我们必须掌握基础知识,并快速进入下一阶段!在今天的帖子中,我列出了我们应该升级的三种情况。

正如你们许多人所知,掌握 Python 已经成为我新的日常事务。它教会了我如何更好地编码,也教会了我个人的成长和学习。我很快会写更多关于这个话题的文章。

TL;速度三角形定位法(dead reckoning)

  • 当我们必须计算每个元素(键)的值时,Python 字典就派上了用场。
  • 使用弹出和推送操作,这样我们就不必更改数据类型。
  • 尽可能采用数学公式。

问题 1:微软和亚马逊的优秀配对数量

-给定整数 num 的数组。
-如果 nums[i] == nums[j]和 i < j.
则一个对(I,j)称为好的-返回好的对的数量。
-https://leetcode.com/problems/number-of-good-pairs/

走过我的思维

微软和亚马逊在他们的数据科学采访中包括了这个问题。我们应该返回等于特定位置要求(i

想到的第一个直觉是使用嵌套的 for 循环(又名,残暴的力量)来迭代序列,并最终返回计数。

解决方案 1:野蛮的力量&一个嵌套的 for 循环

4

它起作用了,但是很慢。一个 for 循环就足够了,更不用说嵌套的 for 循环了,它的时间复杂度是 O(N)。如果迭代次数很大,我们将会遇到运行时间问题。

新手程序员应该寻找更好的替代方案。

解决方案 2:字典和散列表

在这种情况下,字典是存储数据的更好的数据类型,因为它具有键值对属性。初学者可能知道什么是字典,但是很少能够利用键值特性。

我们将元素视为键,将出现次数视为值:对于每一次新的遇到,值增加 1,如果是第一次,则设置为 1。

4

只有一个时间复杂度为 O(N)的 for 循环。快多了!

完整的 Python 代码在我的 Github 上有。

问题 2:阿姆斯特朗数,由亚马逊

-k 位数字 N 是阿姆斯特朗数当且仅当每个数字的 k 次方之和为 N.
-给定一个正整数 N,返回 true 当且仅当它是阿姆斯特朗数。
-https://leetcode.com/problems/armstrong-number/

走过我的思考

亚马逊问这个问题。这是一个典型的数学问题。关键是要按照说明,决定这个数字是否符合标准。

一种简单的方法是将一个整数转换成一个字符串,然后遍历整个字符串,如解决方案 1 所示。

解决方案 1:使用 int()更改数据类型

True

这是一个可以接受的解决方案,但有时公司会设置额外的限制。例如,如果我们不能使用 int()转换数据类型,我们该怎么办?

试试 pop 和 push 操作!

解决方案 2:弹出和推送

弹出和推送操作是在不采用高级数据类型(例如,堆栈/数组)的情况下迭代字符串/整数的聪明方式。

一个简单的例子是合适的。

# pop operation
pop = number % 10 # step 1: obtain the last digit
number /= 10 # step 2: the remaining part without the last digit

# push operation 
temp = rev * 10 + pop 
rev = temp 

让我们看看这个问题是如何解决的。

True

while 循环非常棒。它在不改变数据类型的情况下对数字进行迭代。只有一个问题:我们在 while 循环中改变了 num 的原始值,并使用 num 的副本 num1 进行比较。

我的Github上有完整的 Python 代码。

Frans Vledder 在 Unsplash 上拍摄的照片

#问题 3:计算素数,作者 FAANG

-计算小于非负数的素数的个数,n .
-https://leetcode.com/problems/count-primes/

走过我的思考

令人惊讶的是,每个 FAANG 公司都问过这个问题。我保证如果我们不知道捷径,它会绊倒我们。

老实说,我的第一反应是迭代这个范围,直到感兴趣的数目,如果它是一个质数,就把它算进去。

解决方案 1:野蛮武力效率不高

3

从理论上讲,如果数量很小,比如我们的例子中的 7 个,这将是可行的。但是对于大值,它超出了运行时间。如果您很好奇,可以将这个数字设置为 100,000,然后运行上面的代码。需要几个小时,甚至几天才能得到结果。

这就是为什么 FAANG 会问一个后续问题:你能改进算法吗?

是的,我们可以!我们可以借助一个数学公式来计算素数的个数,直到一个数。

解决方案 2:厄拉多塞筛

我不知道厄拉多塞的筛子是什么,发现这个网站很有用(链接)。

9592

基本思想是构造一个列表,并将所有值设置为 True,除了前两个位置 0 和 1 不是素数。然后,我们用厄拉多塞的筛公式来判定非素数的位置。最后,我们计算列表的总和。在 Python 中,布尔值 True 等于 1,False 等于 0。因此,sum(primes)返回素数的总数,直到数字 n。

得到结果只需要几秒钟,而不是几天。

我在过去的面试过程中没有遇到过这个问题,不确定如果我们不知道公式会发生什么。面试官能给你一些提示吗?请在评论中让我知道。

我的Github上有完整的 Python 代码。

外卖食品

  • 学习是一个过程,一个只要我们不断练习,不断实践,每个人都能变得更好的过程。
  • 如果我们必须使用嵌套的 for 循环,请检查更好的替代方案。一本字典,也许?
  • 读取字符串/整数有两种方式:1。更改数据类型;2.弹出和推送操作。
  • 数学总是有用的。使用智能公式来减少运行时间。

Medium 最近进化出了它的 作家伙伴计划 ,支持像我这样的普通作家。如果你还不是订户,通过下面的链接注册,我会收到一部分会员费。

https://leihua-ye.medium.com/membership

我的数据科学面试序列

</5-python-coding-questions-asked-at-faang-59e6cf5ba2a0>

喜欢读这本书吗?

请在 LinkedIn 和 Twitter 上找到我。

还有,看看我其他关于人工智能和机器学习的帖子。

增强 Python 代码能力的 3 种简单方法

原文:https://towardsdatascience.com/3-simple-ways-to-empower-your-python-code-5897b42dbf28?source=collection_archive---------29-----------------------

编程;编排

让你的 Python 代码简洁高效的简单技巧!

由 SpaceX 在 Unsplash 上拍摄的照片

Python 内置方法永远是最好的!

Python 程序员使用它们快速编写干净高效的代码。以一种更具 Pythonic 风格的方式。

在这里,我将讨论我在 1 分钟或更短时间内掌握的 3 个最强大(但很少使用)的技巧。

我说的干净高效的代码 是什么意思??

易于理解、易于修改、灵活处理错误和执行速度更快的代码!⚡️

让我们跳进来吧!

。get()获取 Python 字典项

停止⚠️现在使用方括号,以访问字典项目。

假设,你有一本如下的字典。

my_dict = {'first_name': 'Michaela',
           'last_name': 'Kraushaar',
           'age': 36,
           'job': 'Pfleger',
           'country': 'Antarktis'}

而且你想访问键的值——countrymy_dict[‘country’]会工作的最好。

但是,如果你提到的键在字典里不存在呢??

字典中的关键字错误|按作者排序的图像

就像上面的例子一样,试图访问键的值— *city,*将抛出一个KeyError并中断程序的执行。

当然,这可以使用try — except语句来处理,但是看你自己如何快速的使用***.get()**方法。*

dictionary.get(key)与 dictionary[key]在 Python | Image by Author 中

。得到(钥匙)才是金科玉律!🏆

如果字典中没有这个键,这个字典方法将简单地返回None

Python 中的 dictionary . get(key )|作者图片

**.get()**方法不仅保持代码整洁、易于理解,还能随时处理KeyError

最重要的是,如果字典中没有这个键,方法.get()允许您自由设置要返回的值*。*

如果字典|按作者排序的图像中不存在关键字,则获取所需的值

这个值不仅限于字符串或数字,你还可以使用一个函数作为默认值。

在 for 循环中枚举()

通常,我们需要迭代一个范围或 iterable,比如 list、dictionary,同时处理每个条目的索引。

根据我的观察,人们倾向于在 for 循环中使用range(len(iterable))

然而,使用enumerate(iterable)非常有效,因为它跟踪 iterable 的每一项及其索引。♻️

下面是如何使用这两者的快速概述!

如何在 Python | Image by Author 中迭代范围

range(len(mylist))enumerate(mylist)产生完全相同的结果,但是后者使代码更加简单。

E 代表列举,E 代表优雅!!!🏆

使用enumerate(mylist)的另一个好处是,你可以完全自由地决定何时开始索引!

从特定编号开始索引|按作者排序的图片

此外,enumerate()还可以用来生成索引和项目元组,如下所示。

按作者在 Python 循环|图像中生成索引项元组

f-strings 来连接和打印字符串

f-string 或格式化的* 字符串文字format() 方法的更简单实现。🏆*

这种 f 字符串在要格式化的字符串的开头有一个字母***f*** ,在字符串中有多个占位符***{}*** 。看看下面,

Python 中的 f 字符串|作者图片

这里有一些用 Pythonic 方式编写代码的奇妙的字符串方法。

* [## Python 中五个必须知道的字符串方法

towardsdatascience.com](/five-must-know-string-methods-in-python-e97925d12eec)*

总结一下,

这些都是小事,但是可以让你的代码干净、易于修改并且高效运行。此外,这些技巧通过轻松处理错误来避免意外的代码中断。

现在,你可以通过 在这里报名 成为媒介会员,阅读我和其他作家发表的所有故事。如果你这样做,我会得到一小部分你的费用,没有额外的费用给你。欢迎加入我的电子邮件列表,了解我写作的最新进展。

📚我这里有更多有用的文章→

*1\. [5 Most Powerful One-Liners You Should Know in Python Programming](/5-most-powerful-one-liners-you-should-know-in-python-programming-c9d49a89b7f3?source=your_stories_page----------------------------------------)
2\. [4 Awesome Pandas Methods To Quickly Analyze Any Dataset](/4-awesome-pandas-methods-to-quickly-analyze-any-dataset-65d2252af6e8?source=your_stories_page----------------------------------------)
3\. [3 (and Half) Powerful Tricks To Effectively Read CSV Data In Python](/3-and-half-powerful-tricks-to-effectively-read-csv-data-in-python-c4699a4f9d07?source=your_stories_page----------------------------------------)
4\. [3 Time-Saving Python Tricks](/3-time-saving-python-tricks-a017f4215aeb?source=your_stories_page----------------------------------------)*

感谢您的阅读和投入时间!

在开始第一份数据科学工作前获取经验的 3 个简单方法

原文:https://towardsdatascience.com/3-simple-ways-to-get-experience-before-your-first-data-science-job-7e977320c5bd?source=collection_archive---------18-----------------------

没有工作经验如何获得数据科学工作

Icons8 团队在 Unsplash 上的照片

获得一份数据科学的工作并不容易。大多数公司通常要求应聘者在该领域至少有两年的工作经验。这使得大多数人闯入数据科学变得极其复杂。

然而,有一些方法可以让你自己获得真实世界的数据科学经验。您只需要专注于解决数据科学家在工作中遇到的问题、任务和项目。

有大量的教程教你成为一名数据科学家需要学习的东西,但是只有很少的资源让你自己去实践它们。这就是我收集大量资源的原因,这些资源将帮助你发展每个数据科学家都应该具备的技能,并获得你需要的经验。

1.解决 SQL 问题

SQL 是可以帮助你在不同岗位找到工作的技能之一,数据科学家也不例外。

对于那些还在学习 SQL 基础知识的人(或者像我一样 SQL 技能生疏的人),在模式有数千个教程可供选择。在那里,您可以学习大量的 SQL 概念,如何时使用 SELECT、WHERE、CASE 等。

在解决下面列出的实际 SQL 问题之前,一定要学习 SQL 的基础知识。

基本练习

不同的网站提供不同数据库管理系统(PostgreSQL、MySQL、SQL Server 和 Oracle)的免费 SQL 练习。他们将通过订阅计划锁定答案,但也可以选择查看其他人的解决方案。

  • 黑客排名(hacker rank):提供各种不同难度的挑战。每个挑战都有一个问题陈述和 SQL 编辑器(DB2、MySQL、SQL Server 和 Oracle ),您可以在其中编写和提交您的解决方案。
  • 这是我最喜欢的一个,因为它免费提供了 500 多个 SQL 和 Python 的数据科学编码问题。与 HackerRank 不同,Stratascratch 给出了如何解决一个练习的提示,并显示了预期的输出。不幸的是,它只支持 PostgreSQL。

SQL 问题

Mode 有一个叫“SQL 分析训练”的板块,里面有实用的 SQL 问题。它们比前面提到的参考资料中的任何练习都更完整,这很好,因为它们类似于您作为数据科学家将看到的现实生活中的 SQL 问题。

一些 SQL 问题包括:

  • 调查用户参与度的下降
  • 了解搜索功能
  • 验证 A/B 测试结果

2.使用熊猫解决数据科学家经常面临的任务

熊猫是每个数据科学家都需要具备的必备技能。为什么?数据科学家在清理、争论和准备建模数据时使用熊猫。通过解决这些任务,你可以获得真实世界的经验。事实上,数据科学家几乎 80%的时间都花在收集、清理和准备数据上。

熊猫练习

在这里你会发现很多基本的熊猫练习,以及其他用于数据科学的 Python 库的练习。请记住,熊猫不是一个孤岛——有时你会将 Numpy 与熊猫一起使用来解决问题。

一旦你解决了基本的熊猫练习,检查一下这个仓库,里面有更具挑战性的练习来练习熊猫。与第一种选择不同,这种回购侧重于熊猫演习。在那里,您可以找到说明、没有代码的解决方案以及有代码和注释的解决方案。该存储库涵盖了过滤、排序、分组、可视化、时间序列等方法。

解决数据科学任务

在你成功完成所有练习后,我建议你用熊猫项目来挑战自己。熊猫大部分覆盖的一个数据科学任务是数据清洗,所以去 Kaggle ,搜索任何你想要的数据集,用熊猫来清洗。

例如,您可以检查这个网飞电影和电视节目数据集,然后通过删除或替换丢失的数据、去除离群值、删除重复项、规范化文本等方式对其进行清理。如果你想知道我是如何清理这个数据集的,看看我做的这个指南。

3.解决一个数据科学项目

在找到工作之前获得现实生活中的数据科学经验的最好方法是解决一个项目。让我们来看看你应该解决的不同类型的项目。

卡格尔项目

你可能知道, Kaggle 是最好的机器学习和数据科学社区之一。在那里,你会发现数以千计的免费数据集以及一些常见数据科学项目的解决方案。该解决方案通常包括现实世界中的数据科学任务,如清理数据、争论、挖掘数据、构建训练集和改进算法。

这里有一些在 Kaggle 中解决的项目,它们帮助我在我的第一份数据科学工作之前获得了现实生活中的经验。

**客户流失预测:**在商业中“流失”代表客户停止与某个实体做生意的比率。由于其与公司的相关性,客户流失预测被用于许多行业(电信、银行等)。

在这个 Kaggle 项目中,我们的任务是通过预测客户是否会流失来防止银行客户流失。

数据集及源代码:银行客户流失预测

文本分类:文本分类包括将预定义的类别分配给自由的开放式文本。这方面的一些应用是情感分析、主题标记和垃圾邮件检测。有二元文本分类(例如,垃圾邮件与非垃圾邮件、积极情绪与消极情绪)和多类文本分类。

如果你需要一些灵感,这里有两个分步指南来解决文本分类项目:

  • Python 中的情感分析(二进制文本分类)
  • 使用 Scikit-Learn 进行多类文本分类

在这些指南中,你会找到解决这两个项目的数据集。

解决自己的项目

解决 Kaggle 项目并把它们写进简历是好的,但你知道什么更好吗?解决一个你热爱的项目。

选择一个你非常喜欢的主题(例如,金融、健康、体育),然后使用你所有的数据科学技能来解决它。陈述问题和应该回答的问题,收集数据,然后用你在 Python、机器学习、统计学、数学方面的知识去解决那个问题。

一个独特的项目将帮助你脱颖而出。例如,我构建了一个预测足球比赛结果的简单模型。在采访中,由于我对足球的了解,我更容易谈论我的见解、局限性和解决这个项目的方法。

在下面的文章中,你会发现 5 个项目的例子。

</5-solved-end-to-end-data-science-projects-in-python-acdc347f36d0>

与 3k 以上的人一起加入我的电子邮件列表,获取我在所有教程中使用的 Python for Data Science 备忘单(免费 PDF)

如果你喜欢阅读这样的故事,并想支持我成为一名作家,可以考虑报名成为一名媒体成员。每月 5 美元,让您可以无限制地访问数以千计的 Python 指南和数据科学文章。如果你使用我的链接注册,我会赚一小笔佣金,不需要你额外付费。

https://frank-andrade.medium.com/membership

每个数据科学家都应该知道的 3 项软技能

原文:https://towardsdatascience.com/3-soft-skills-every-data-scientist-should-know-f6f44a6bd2e4?source=collection_archive---------15-----------------------

意见

深入了解数据科学的专业方面

在Unsplash【1】上拍摄的气候现实项目。

目录

  1. 介绍
  2. 利益相关者关系
  3. 问题陈述定义
  4. 成果交流
  5. 摘要
  6. 参考

介绍

教育项目,无论是在线课程,甚至是一篇文章,还是本科和研究生项目,都经常忽视数据科学的 专业 方面。当然,学习高度复杂的机器学习算法和模型部署非常重要,但作为专业数据科学家或更面向客户的数据科学家,数据科学的其他一些方面也特别重要。顾客也不一定是指产品的顾客,而是你公司的顾客,就像利益相关者一样。话虽如此,我们还是来讨论一下每个数据科学家在从数据科学教育专业的学生转变为专业数据科学家时应该知道的三项关键软技能。

利益相关者关系

活动创作者在Unsplash【2】上的照片。

这一点既是一种技能,也提醒你,作为一名数据科学家,你不是一个人在工作。软技能本质上是与沟通相关的技能,不同于其他技能,如 Python 或更具体的、与他人无关的技能。

你将不得不习惯于和公司里过多的其他人交流。大多数情况下,项目是由利益相关者领导的,利益相关者是您公司中的一个人,他提出了要求,因此组织了一个团队,通常由数据科学家、产品经理(大多数情况下是利益相关者自己)、数据工程师、软件工程师和基于您正在从事的项目的专家组成。

话虽如此,以下是一些在你的公司运用这种技能的可行方法:

  • 将数据科学术语分解成任何人都能理解的内容

例如,这是一个向利益相关者解释数据科学的很好的例子

—“让我们为我们的模型使用一个监督的 CatBoost 回归算法来预测目标变量

太好了—“我们可以利用过去的数据输入我们的算法,这将有助于预测未来的价值

  • 通过参加围绕产品和研究的会议,而不仅仅是数据科学会议,致力于关系本身
  • 熟悉公司 KPI(关键绩效指标),因为数据科学的许多目标是从您将构建的模型的效果来改进这些 KPI。例如,熟悉至少 5 到 10 个关键绩效指标,如clicks per useraverage time to drive等。—这些通常取决于公司,而有些则更通用,可适用于大多数公司。了解公司的语言也很重要,KPI 是该语言的主要术语之一。

问题陈述定义

Jac Alexandru 在Unsplash【3】上拍照。

既然你已经和你的利益相关者建立了关系,你就能更好地和他们一起定义问题和解决方案。涉众很可能不知道算法是如何工作的,因为那不是他们的工作,对他们也不重要,但是他们需要知道what the predictions arehow often等等。话虽如此,我将给出另一个对你和涉众都有用的问题陈述的很好的例子。

——“使用数据科学团队的机器学习算法,可以更容易地预测电影中人数的利用率,因此我们应该尝试计算以前的统计数据,以了解有多少人将观看电影

那么,它有什么问题呢?

  • 在表述问题时,不要给出可能的解决方案——这会限制机会
  • 太长了
  • 很难看出实际的问题是什么
  • 有时,利益相关者会提供一个冗长的、措辞复杂的解决方案,而实际的数据科学模型只是解决方案的一部分

太棒了——我们不知道有多少人会去看一部特定的电影

这有什么不对?

  • 是的,大多数时候,简单的措辞是最好的
  • 现在,我们来看看解决方案,例如算法,并讨论可能的数据或特性
  • 它很容易突出或隔离我们不知道的东西——问题

总的来说,尽你所能,看待问题的最好方法是用最简单的术语来定义它。当然,你可以在此基础上更进一步,变得更具体,但从更一般的开始会让所有相关方更容易真正理解为什么需要帮助来解决某个特定问题,也许不仅仅是数据科学家可以帮助解决这个问题。

成果交流

在Unsplash【4】上由 Adeolu Eletu 拍摄的照片。

类似于上面的技能趋势,我们想把重点放在与沟通相关的你可以改进的软技能上。例如,保持事物简单易懂是成为一名成功的数据科学家的关键。不要试图抛出复杂的数学和令人困惑的统计数据,而是关注模型的结果如何影响业务。

以下是在交流数据科学模型结果时需要考虑的一些事项:

  • 模型的一般影响是什么?
  • 该模型的生产成本是多少?
  • 目标是什么,这个模型达到目标了吗?
  • KPI( s )的增长百分比是多少?例如,“由于这种数据科学模型,对于 80%的人来说,我们能够预测电影院中的人数在+- 10 人以内”。
  • 使用可视化图形或更多来描述你的结果,最简单的是最好的

最重要的是记住你的模型对业务的影响,包括时间、金钱、产品和可伸缩性等概念。

摘要

这三项技能通常不是教出来的,而是在您的数据科学职业生涯中学习到的。也就是说,如果你已经是一名数据科学家,那么事先研究这些概念,并在当前公司改进它们,不仅对你自己有利,最终对你工作的公司也有利。

总而言之,以下是每个数据科学家都应该知道的三项关键的、软性的专业技能:

* Stakeholder Relationship* Problem Statement Definition* Results Communication

我希望你觉得我的文章既有趣又有用。如果你同意或不同意这些技巧,请在下面随意评论。为什么或为什么不?你还能想到哪些在学习数据科学时经常被忽视的技能?你通常如何练习较少的技术技能,取而代之的是更注重软技能的技能?感谢您的阅读!

请随时查看我的个人资料、 马特·普日比拉 等文章,也可以在 LinkedIn 上联系我。

参考

[1]照片由气候现实项目在Unsplash(2017)上拍摄

[2]2018 年活动创建者在 Unsplash 上的照片

[3]图片由 Jac Alexandru 在Unsplash(2020)上拍摄

[4]Adeolu Eletu 在 Unsplash 上拍摄的照片,(2015)

Python 熊猫复制警告设置的 3 种解决方案

原文:https://towardsdatascience.com/3-solutions-for-the-setting-with-copy-warning-of-python-pandas-dfe15d62de08?source=collection_archive---------3-----------------------

永远不要忽略警告。

照片由 NeONBRAND 在 Unsplash 拍摄

如果你曾经对熊猫进行过数据分析或操作,你很有可能至少遇到一次SettingWithCopy警告。

当我们尝试使用链式索引进行赋值时,会出现此警告,因为链式索引具有固有的不可预测的结果。

以下是链式索引的样子:

df[df["column_a" > 5]["column_b"]

第一部分筛选 a 列中的值大于 5 的行,第二部分从筛选的数据框中选择 b 列。

问题是这种链式索引可能会返回一个视图或副本。

如果是视图,那么我们所做的更改也会反映在原始数据框中。例如,以下代码将更新原始数据框。

df[df["column_a" > 5]["column_b"] = 5

但是,如果返回的是副本,则不会在原始数据框中进行更改。

查看与复制(图片由作者提供)

这就是熊猫在出现这种暧昧情况时会警告我们的原因。

在这篇文章中,我们将讨论导致SettingWithCopy警告的 3 种解决方案。

先来看一个给我们警示的真实案例。我创建了一个包含 7 行 4 列的样本数据框。

df(作者图片)

我想将不在产品组 PG2 中的产品价格降低 50%。这是我想到的第一个解决方案。

df[df["product_group"]!="PG2"]["price"] = df[df["product_group"]!="PG2"]["price"] * 0.5SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.

df(作者图片)

由于链式索引和所选产品的价格没有变化,我们收到了一个警告。

解决方案 1

第一种选择是使用 loc 方法。

df.loc[df["product_group"]!="PG2", "price"] = df.loc[df["product_group"]!="PG2", "price"] * 0.5df

df(作者图片)

我们现在可以看到数据框中的价格变化。

loc 方法允许在单个步骤中进行筛选和选择,因此不会出现链式索引。

解决方案 2

另一种方法是 where 函数,它可用于根据条件更新值。

where 函数的工作方式如下:

  • 它接受条件和值
  • 当条件为真时,它保持原始值
  • 当条件不成立时,它用给定值更新原始值

下面的代码片段没有改变产品组 PG2 中产品的价格,但是将其他产品的价格减半。

为了保存数据框中的更改,将 inplace 参数设置为 true。

df["price"].where(
   df["product_group"]=="PG2", df["price"] * 0.5, inplace=True
)df

df(作者图片)

解决方案 3

我们还可以使用替换功能来更新数据框中的值,而不会出现SettingWithCopy警告。

假设我们需要将产品组 PG4 更改为 PG14。这是一个给我们警告的解决方案。

df[df["product_group"]=="PG4"]["product_group"] = "PG14"dfSettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.

df(作者图片)

我们收到了警告,而且值也没有更新。

以下是应用于列而不是数据框的略有不同的版本。

df["product_group"][df["product_group"]=="PG4"] = "PG14"dfSettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.

df(作者图片)

我们仍然得到警告,但是值被更新了。这就是为什么我们不应该相信链式索引并且永远不要忽略这些警告的原因。

以下代码片段使用 replace 函数执行此任务。

df.replace({"product_group" : "PG4"}, "PG14", inplace=True)df

df(作者图片)

任务完成,没有任何错误!

结论

警告可能没有错误那么重要,因为它们不会停止代码的执行。您可以选择忽略错误并继续。

然而,你可能会得到意想不到的结果。因此,了解警告的根本原因并解决它是非常重要的。

如果你还不是中级会员并计划成为其中一员,我恳请你使用以下链接。我将收取你的一部分会员费,不增加你的额外费用。

https://sonery.medium.com/membership

感谢您的阅读。如果您有任何反馈,请告诉我。

成功数据迁移的 3 个步骤

原文:https://towardsdatascience.com/3-steps-for-a-successful-data-migration-9de8e7f1671c?source=collection_archive---------17-----------------------

行业笔记

由 Patrick Fore 在 Unsplash 上拍摄

迁移是数据团队最常见的计划之一。但殊不知,它们是复杂兽。他们总是比他们需要的时间更长,涉及许多不同的团队,并且他们是超级可见的——不仅对用户,对高管也是如此。当迁移正在进行时,每个人都很焦虑。而且,总有一个正在进行或即将开始。

在我的职业生涯中,我自己就是一名数据工程师,与数百名数据工程师合作过。我学到的与数据工程团队质量相关的一件事是他们在迁移方面做得有多好

**我发现*数据工程团队如何处理迁移可以很好地代表数据工程团队的质量。***我将深入探讨我见过的优秀数据工程团队为确保成功迁移而采取的 3 个关键步骤:

  1. 确定迁移的复杂性和顺序
  2. 迁移和测试 1 级表
  3. 为下游所有者提供工具并启动涟漪迁移

这些步骤中的每一步都可以是一篇独立的博文,但是为了保持连贯性,我试图在一篇博文中解决它们。

迁移通常基于推动他们进行迁移的公司内部或外部发生的事情。迁移是彻底的,因为成功是与消灭某些东西联系在一起的,而不仅仅是移动某些东西。在大多数迁移中,完成 90%是不够的,甚至 100%也是不够的,为了迁移成功,你真的必须淘汰一些旧的东西。

以下是数据团队迁移的一些常见原因,以及每种情况下的成功表现:

  1. 从一个数据仓库到另一个数据仓库的大规模迁移,通常是为了降低成本、整合、提高可伸缩性或可靠性。成功:上一个仓库没有活动。
  2. 由于“上游”决策,从一个数据源迁移到另一个数据源。一个常见的例子是,一家公司从 Hubspot 迁移到 Salesforce,因为他们的 CRM 和所有下游销售分析渠道、仪表盘和指标都需要更新。另一个常见的例子是将上游服务从一个整体“分解”为多个微服务。这些微服务最终拥有自己的数据库,这导致了新的分解数据源,数据仓库 ETL 需要在这些数据源上重建,当然。成功:对旧数据的零查询。

事实证明,杀死一个东西比树立一个新的东西要难得多。这正是迁移如此困难和复杂的原因。

这是我见过的伟大的数据工程团队在进行迁移时采取的 3 个步骤。

步骤 1 —确定迁移的复杂性和顺序

迁移的复杂性

任何迁移的第一步都是了解它有多复杂。是 2 周、2 个月还是 2 年的迁移?与迁移复杂性最接近的代理由所讨论的数据源的两个因素决定:

  1. 您拥有多少级别的数据资产?
  2. 总共有多少数据资产是建立在数据源上的?

数据资产可以是表格、仪表板等。

换个角度来看,如果你有一个类似下面的谱系图,这些因素是:

  1. 图表的深度是多少?
  2. 图中有多少个节点?

作者图片:谱系图

迁徙顺序

优秀的数据工程团队对于他们选择的迁移顺序是深思熟虑的。在上面这样的谱系图中,您仍然必须选择首先迁移哪个“分支”。

在决定首先选择哪个分支的顺序时,伟大的团队会考虑以下三个最常见的类别:

  1. 成本 —我们将首先迁移最昂贵的数据。
  2. 使用影响 —我们将最后迁移最常用的数据集,以减少对用户的影响。
  3. 风险 —我们将首先迁移风险最小的数据。例如,让我们保存最后迁移的核心财务指标,因为它们是从外部报告的。

迁移很容易,只要你不用担心依赖性。

这让我想到了迁移中最困难的部分。一旦选择了要迁移的分支,就必须确定现有数据的使用方式。

Level-1 用法意味着只有数据的叶级消费者,如仪表板、表上的即席查询。 Level-2 用法意味着在该表上构建了其他表,这些表具有仪表板和正在其上运行的即席查询。

作者图片:数据使用水平

一个捕获数据谱系的自动化数据目录可以帮助您更好地了解您的使用级别。

呈现该谱系图的数据目录至少应该能够自动捕获这三种关系:

  1. 表级沿袭
  2. 基于表格构建的仪表板/报告
  3. 过去 30 天内用户的名称以及他们运行的条件查询的数量

很高兴拥有(不是必须拥有):

  • 列级沿袭——这很难以高粒度和高精度来捕获,并且许多迁移都不需要。
  • 关于使用什么过程/ETL 来生成下游表的更多信息。

列级沿袭还有其他的用例,比如满足监管需求或取消列。然而,对于本文开头描述的大型迁移,我发现表级别的沿袭已经足够了。

步骤 2 —迁移和测试 1 级表

在大多数组织中,您将有不止一个级别的使用。第一步总是首先迁移这些一级表。在一些组织中,没有进行真正的 ETL/ELT。在这种情况下,这一步是不行的。

这里有两种常见的情况:

  1. 上游变化被“吸收”,或者
  2. 上游的变化被“泄露”

测试

如果新表应该等同于旧表,那么进行数据测试就很重要。一个好的数据质量产品能够描述旧数据和新数据,突出行数、分布、最小值、最大值、平均值等方面的差异。您通常希望并行运行这两个作业(至少 2 周),以确保配置文件在这段时间内处于某个上限内。

步骤 3 —为下游所有者提供工具,并启动涟漪迁移

移民会产生连锁反应。优秀的数据工程团队对此有着清晰的理解,并且能够在两个方向上构建反馈循环来协调迁移。

一旦完成了 1 级表的迁移,就该通知下游用户数据了。有 3 种可能的下游消费者:

  1. 桌子上的仪表板
  2. 数据的特殊查询程序
  3. 派生的下游表

对于每一类下游消费者,您正在将下游迁移的责任传递给他们。这意味着:

  • 下游仪表板所有者需要迁移他们的仪表板,以使用新的数据源。
  • 数据的特别查询者将需要查询新的数据源,而不是旧的数据源。
  • 下游表所有者需要迁移他们的 ETL 作业,以便从新的数据源读取数据。

下游表所有者的最后一种情况是最有趣的,因为要么他们的表将吸收这种变化,而不需要通知他们下游的任何人。或者,他们的 ETL 作业或表将无法吸收这种变化,他们将触发自己的连锁反应,要求他们的数据消费者进行迁移。

优秀的数据工程团队为下游消费者提供工具,让他们知道他们的数据的用途,这样他们就可以执行他们的部分迁移。

下游表格和仪表板

通常,数据工程团队将归档一个 JIRA,它与他们的数据目录集成在一起。这将为下游表或仪表板所有者归档票证。

如果需要,仪表板所有者可以更新他们的仪表板。由于不再需要它们,他们最终往往会弃用它们。

下游表所有者必须做与 1 级所有者相同的事情。他们要么吸收变化,要么泄漏变化。如果他们吸收了变化,他们关闭票。如果他们泄露了零钱,他们就为他们的下游消费者创造了门票。他们可以使用相同的目录和 JIRA 集成为下游用户创建票证。

临时查询器

虽然 JIRA 票对下游的仪表板和表所有者很有效,但对那些专门查询数据的人就不太有效了。即使新的数据用户通过空闲消息或电子邮件得到通知,他们也很容易错过这些细节。

记录迁移的状态很重要,这样那些错误地使用错误数据的人可以被礼貌地重定向到新的数据。

做到这一点的一个好方法是在您的数据目录工具中放置一个横幅,如下所示:

作者图片:表格上的横幅,宣布已迁移的表格

例如,**如果一个新用户在他们的数据目录中偶然发现了一个旧表及其过时的文档,他们将通过横幅通知新版本的表存在,并被重定向到使用该表。**类似于亚马逊在产品新版本上市时通过横幅通知用户的方式。

驯服野兽

迁徙不必像它们看起来那样复杂。有许多方法可以确保顺利迁移,它们只需要一点额外的爱和关心。上面的四个步骤是我见过的数据工程团队驯服迁移这头野兽的最常见的方法,其核心是血统的力量以及它如何转变您团队的方法。因为在 it 的核心,拥有快速了解数据中上游和下游依赖性的能力是成功迁移的最重要的方面之一。

要阅读更多类似的帖子并保持联系,请在 Twitter 上关注我 或通过订阅 这里 接收每月简讯。

在 Azure 上构建和部署 NLP 模型作为微服务的 3 个步骤

原文:https://towardsdatascience.com/3-steps-to-build-and-deploy-your-nlp-model-as-a-microservice-on-azure-426ca77c66df?source=collection_archive---------25-----------------------

在 Azure 上部署 ML 模型最简单最便宜的方法

布鲁斯·马斯在 Unsplash 上的照片

在花费无数时间训练您的模型之后,您现在需要使它可用于其他应用程序或服务。

根据您部署到云的方式,这个过程可能需要几个小时或几分钟。更重要的是,您的部署选择应该基于您的可伸缩性和预算需求。

在这里,我将展示一种直接使用 Python 代码(而不是构建容器)将 NLP 模型作为微服务部署到 Azure 的快速方法。

本教程适用于任何 ML 模型,而不仅仅是 NLP。

我将展示的设置可能是现有的最简单的设置之一,并且维护这些设置的成本最小

开始之前,请确保做好以下准备:

  1. 创建一个有效订阅的 Azure 帐户:如果你还没有一个有效订阅的帐户,你可以为 Azure 创建一个新帐户,并获得两周的试用期。
  2. 安装 Azure CLI :我们将使用命令在 Azure 上创建资源(而不是使用 Azure Portal UI)。这种方法具有最强的可维护性,因为我们为自己创建的每个资源都编写了脚本,这使得进化和复制变得更加容易。点击此处查看如何安装 Azure CLI。
  3. 安装 Azure Functions 核心工具:在将我们的微服务部署到 Azure 之前,我们将在本地创建和测试一切,而不花一分钱。Azure Functions 核心工具将为设计、开发、测试、运行和调试 Azure 功能提供本地开发体验。点击此处查看如何安装。

下面我们将经历以下三个步骤:

1\. Create and test an Azure function locally
2\. Create the resources on Azure
3\. Deploy the function to Azure

1.在本地创建并测试 Azure 函数

理想情况下,我们希望在部署到 Azure 之前在本地测试所有东西。本地测试让我们确保一切正常,不会花不必要的钱在线调试。尽管如此,使用 Azure 上的“应用洞察”等监控工具仍然是值得的,也是必要的,以确保你的应用程序平稳运行。但是这超出了本文的范围。

下面,首先,我们使用终端创建并激活 python 环境。然后我们在本地创建一个 FunctionApp 项目,将多个函数组织在一起。最后,我们创建由 HTTP 请求触发的函数getSentiment

*# Create and activate an environment*
python3 -m venv .venv
source .venv/bin/activate*# Create a FunctionApp Project Locally*
func init --worker-runtime python*# Create a Function*
func new --name getSentiment --template "HTTP trigger" --authlevel anonymous

现在,我们可以编辑文件getSentiment\__init__.py中的函数,添加以下代码(针对您的型号进行修改):

上面创建的函数将接收一个text参数,并返回从拥抱脸的模型“DistilBERT base uncase fine tuned SST-2”获得的相应情感分析的输入文本。

由于我们已经为上面的代码添加了几个库,请确保按如下方式更新您的requirements.txt文件:

然后,在我们上面创建的环境中安装库:

pip install -r requirements.txt

现在我们已经准备好在本地测试这个功能了。为此,您需要运行:

func start

您应该在终端中得到类似这样的输出:

“func start”命令的输出示例。图片由作者提供。

所以我们可以访问上面列出的 URL,传递参数text来测试模型。例如:

[http://localhost:7071/api/getSentiment](http://localhost:7071/api/getSentiment)?text=I%20really%20like%20bananas

输出应该是:

本地函数的输出示例。图片由作者提供。

现在一切都按预期在本地运行,我们可以在 Azure 上创建所需的资源并部署我们的微服务。

2.在 Azure 上创建资源

您可以通过 Azure 门户点击每个资源并选择设置来完成以下步骤。但这很难维持。所以,一般来说,建议使用脚本。

因此,下面,我们在终端中运行几个命令来创建以下资源,这是在 Azure 上部署功能所需的最少资源:

  • 资源组:资源组只是为 Azure 解决方案保存多个相关资源的一种方式。
  • 存储帐户:Azure 存储帐户集中了数据对象,比如 blobs、文件共享、队列、表和磁盘。它为存储提供了一个独特的命名空间。我们将使用标准类型(最便宜的),主要推荐用于文件、blobs 和表。
  • function app:function app 是一种资源,它将各种功能组合成一个逻辑单元,便于管理、部署、扩展和资源共享。我们将使用最基本的消费计划来托管功能 app,并指定创建的存储帐户。
*# Login to your Azure Account from the Command Line*
az login*# Create a Resource Group*
az group create --name rgSENT --location westus*# Create a Storage Account*
az storage account create --name stracc2sent --location westus --resource-group rgSENT --sku Standard_LRS*# Create a FunctionApp*
az functionapp create --name **nlpfuncsa** --resource-group rgSENT --os-type linux --consumption-plan-location westus --storage-account stracc2sent --functions-version 3 --runtime python --runtime-version 3.9

请注意,我使用了**nlpfuncsa**作为 FunctionApp 的名称。此名称在 Azure 上必须是唯一的,因此请为你的应用使用不同的名称。如果上面的命令返回Operation returned an invalid status ‘Conflict’,这可能就是原因。所以请确保为您的 FunctionApp 使用不同的(且唯一的)名称

3.将功能部署到 Azure

最后,我们可以使用以下命令将本地项目的代码部署到在 Azure 上创建的 FunctionApp:

func azure functionapp publish **nlpfuncsa**

由于距离较远,此过程需要一段时间。最终,您应该会得到以下结果:

将功能部署到 Azure 后的输出示例。图片由作者提供。

现在你可以访问上面列出的 URL,传递参数text来测试你的模型。例如:

[https://nlpfuncsa.azurewebsites.net/api/getsentiment](https://nlpfuncsa.azurewebsites.net/api/getsentiment)?text=I%20really%20like%20bananas

输出应该与我们在本地看到的一样:

已经部署在 Azure 上的函数的输出示例。图片由作者提供。

就是这样。现在您已经将 NLP 模型部署到 Azure 上了。这里是 Github 仓库,所有代码都提交给 Azure。

如果你想删除你创建的所有东西,去 Azure 门户,找到“资源组”,点击创建的资源组(如果你完全按照这个帖子,应该是“rgSENT”),然后点击“删除资源组”。由于所有创建的资源都在同一个资源组下,执行上述操作将删除所有内容。

如果你喜欢阅读这样的故事,并想支持我成为一名作家,可以考虑注册成为一名媒体会员。每月 5 美元,你可以无限制地阅读媒体上的故事。如果你用我的链接注册,我会赚一点佣金。

确保在任何公司成为成功的新数据工程师的 3 个步骤

原文:https://towardsdatascience.com/3-steps-to-ensure-success-as-a-new-hire-data-engineer-at-any-company-e28ad470e914?source=collection_archive---------26-----------------------

办公时间

祝贺你获得了数据工程师的职位!现在怎么办?

TL;文末博士。

照片由拉兹万·苏驰在 Unsplash 上拍摄

我从事数据工程已经四年了,很高兴看到这股浪潮已经兴起。有影响力的人(从 YouTube 到 LinkedIn top voices)和公司已经开始认识到,如果他们认真对待扩大分析并让数据为他们服务,而不是相反,那么在聘用数据工程师之前聘用数据科学家的重要性(* 插入存储神秘数据的预算,并在基础架构迁移之间关心它们)。

就像现在这样,数据工程技术栈似乎已经尘埃落定,Hadoop/Cloud 用于数据存储(和仓储),Spark/Databricks 用于数据处理,Airflow 用于数据管道编排(虽然如果您的管道封装在微服务中,可以与生产中的其他微服务一起使用,这可以扩展到 Kubernetes),最后但同样重要的是,Python/SQL/Scala 用于编写管道和数据模型本身。

但是,谁知道呢,随着 dbt 的出现,向 ELT 的范式转变日益成为现实,以及分析工程师这一新兴角色的出现,也许这一切会在下一个 5 年内再次改变?

那你会怎么做?立志成为一名数据工程师有什么意义?

对塞巴斯蒂安·拉米雷斯的礼貌

在这四年中,我看到了对技术要求的过度强调,以及不切实际的、期望的多年经验。

虽然我理解在寻找合格候选人时查看技能清单的简单性,但这种清单应该更加轻松,因为即使是招聘经理也可能不知道高级管理层希望在下个季度“试用”什么工具,或者现有的数据基础设施是否正在恶化,以至于很快就要迁移到新的技术体系。(关于这一点,你如何积累 5 年以上的特定技术?)

在这篇文章中,我希望我们所有人都从紧张的技术要求和“我如何去学习所有这些”的无限循环中休息一下。我喜欢从商业角度来探讨对数据工程师的需求,而不是一头扎进辩论哪种编程语言最适合分析,或者密集地编写一个传输没人需要的数据的高性能管道,所以我将向你展示三个关键步骤,当你加入任何规模的公司时,作为一名数据工程师,你应该专注于这三个步骤

注意:下面提到的“系统”可以指微服务,可以是也可以不是数据管道,没错,电子表格,虽然技术上不正确,也算。

这一切都是通过业务密钥联系在一起的!

在数据建模领域,业务键有一个更严肃的名字,叫做“主键”。这些主键可以是足以标识表中唯一记录的单个字段,也可以是基本上只是多个重要字段组合起来标识唯一记录的组合键,或者是基于多个重要字段的唯一组合的无意义、编号或散列字段的代理键。

您可能已经猜到了——这些重要的字段是您的业务密钥。

业务关键字可以是上游系统(例如,跟踪订单的应用程序或电子表格)决定的递增整数、订单日期、具有某种约定的客户 id(例如,您可以判断出 CAN001 是来自加拿大的客户),或者散列登录会话 ID。

不管是什么,理解业务关键通常是理解系统集成、报告准确性和使世界(公司)运转的关键组件的一半。

如果已经有主题专家可以指导您浏览表,那么识别业务键可能是轻而易举的事情,但是如果数据集非常新颖,有一些确定的方法可以识别它们,方法是计算表(如果存在分区的话)中的行数,以及如果您SELECT DISTINCT它们(或者如果您仍然想查看其余的数据,请尝试row_number())具有相同行数的字段。这些业务关键字中的 NULL 值或空值会使这些记录无效,如果它们数量很大,您需要与系统管理员联系以进行补救。

在 Unsplash 上由 Aniyora J 拍摄的照片

为了更进一步,您可以尝试将数据集 A 与包含相同字段的数据集 B 连接起来,比如说,业务关键字 Y。如果您成功地将它们连接起来,因为业务关键字 Y 下的所有值都可以在数据集 B 中找到,那么您就知道您已经确定了两个相关的表,这两个表很可能是由两个不同的系统或报表生成的。如果你还没有成功加入他们(部分没有找到任何价值),那么,这就是你被雇用的原因!是时候深入挖掘所生成的值的逻辑了,并确定是否有一种由业务逻辑支持的方法来重新生成您在数据集 a 的业务键 Y 中看到的值。

也许如果一个业务键被称为“业务胶”,它会更容易被炒作,而“胶”无疑更能描述业务键的作用。它们识别每个真实的记录,并用于清除重复的记录。它们支持“join”操作和查找,因此它们间接地向您展示了两个业务键是 1:1 还是 1:N 关系(请不要是疯狂的 N:M 关系。这意味着该表需要一些重构)。他们的转换逻辑很少被干涉,因为这可能意味着对生成它们的系统或报告进行重大的修改。

因此,第一步,一旦你获准访问新公司的数据基础设施,就开始浏览你的团队定期维护的表格,最重要的是,确定它们之间的联系。准备好记笔记,因为你的大脑可能只能记下三个商业关键词之间的关系。

高粒度有利于消化

照片由本·怀特在 Unsplash 上拍摄

我相信这不是你第一次听到将数据与食物进行比较,因为 Cassie Kozyrkov 的微波类比对我们理解整个数据科学学科有很大帮助。

前 5 分钟进行微波类比

你如何知道你面前的数据集是否是原始的(最细粒度的)?

如果你没有跳过这一节之前的部分,你已经有一半的答案了。也就是说,如果您的数据集有业务关键字,那么这几乎总是您可以获得的最细粒度的数据,除非有另一个系统来进一步细分它(例如,因为一个订单可以拆分为多个发货,所以一个发货编号可以汇总为一个订单编号)。

使用业务关键字深入了解最细粒度的数据以及在一个时间窗口内预期有多少真实记录,可以让您对数据质量进行强大的控制,并灵活地更改您的数据策略或业务模型。您将知道您的基线,比如当前被跟踪的指标或指标的每日行数,并从那里开始比较。

以装运号与订单号为例,假设您的公司只与一家运输公司合作(运输 A ),当装运号=订单号时,事情就简单多了。但是,随着业务的增长和疫情的出现,运输 A 不再能够完成所有订单,您开始与第二家运输公司(运输 B)合作。高级管理人员协商了一笔交易,这一切都很好,直到你不能非常准确地向高级管理人员报告装运 B 已经完成了多少次装运,因为你仍然在忙着将装运数量从一个公司分割到另一个公司。

谨慎的方法是了解在一个时间窗口内(每小时/每天/每周)装运 A 通常履行了多少订单,影响决策者同意一个可扩展的装运号约定,该约定可以很容易地将不同的装运公司识别为更新的业务关键字,并且随着装运 B 履行更多订单,通过监控一个时间窗口内每个订单号+装运号的记录计数来跟踪“新常态”。

假设运输 A 通常每周装运 100,000 个订单(您的基线),在运输 B 开始后,似乎运输 B 现在完成了 40,000 个订单,而运输 A 完成了其余的 60–70,000 个订单。现在,下游汇总报告甚至有了一个新的指标,您可以跟踪每个订单,有多少发货是通过发货 A 与发货 B 完成的(例如,一个 5 件商品的订单,3 件由 A 发货,2 件由 B 发货),而无需对原始表进行任何结构性更改。

马库斯·考夫曼在 Unsplash 上的照片

让我们试着加入一两个“数据灾难”。想象一下,shipping A 的服务器出现故障,因此他们报告他们的订单完成量为 50K。如果您没有深入了解交易装运表和装运 A 的装运编号惯例来进行行计数,最初可能不会明显看出装运 A 的数据不准确,并会让指挥链中的某个人标记此“数据问题”。想象一下,再过一个月,您的订单数量猛增到每周 30 万,您的老板虽然很兴奋,但考虑到数据灾难的最后一幕,他还是小心翼翼地让您检查这 30 万订单是否是一笔真实的交易。记住基线数字,并且能够根据业务键进行查询(让我们希望业务键也全部正确生成),那么您很快就可以与您的老板确认 30 万订单不是由于重复记录,而可能是疫情的影响。

第二步,熟悉广为流传的商业智能报告,但更熟悉汇总或汇总到这些报告中的底层原始数据。你可以以后再感谢自己。

我明天能拿到数据吗?

如果这是你在工作中最喜欢的问题,请在下面评论。

有多少次你在脑海中回应道:“嗯,那真的不取决于我…”?

事实上,它并不真正依赖于一个数据工程师或分析师来完成一份报告,因为底层原始数据可能来自不同的数据源,这些数据源以不同的频率刷新数据。最重要的是,每次在数据人员准备交付某些东西之前,他们都必须花一些时间来检查所请求的时间窗口中的可用数据,根据前面提到的业务关键字验证数据,确认最近没有对数据进行更改,或者某个更改是否会影响报告。

销售报告可能看起来很惊人,但结果是产品维度表已经过时半年了,因此在此期间发生的新产品发布没有包括在该报告中,导致严重的漏报。

更新生成成本报告所需的三个表的批处理作业发生在不同的时间,坦率地说,顺序是错误的,因此当您连接这三个表时,您看到的记录数量比应该看到的要少(两个表提供了一整天的记录,但一个表由于更新顺序错误,只提供了当天最后两个小时的记录)。实际上,即使您知道这个表中的业务键,以及它的粒度类型,您也不会注意到这一点。您只需注意批处理作业的顺序是否合理。

我可以一直举这些例子,但是我在这里要强调的是“时间”是数据工程中最棘手的变量。

https://www . Reddit . com/r/perfect loops/comments/9lg tid/a _ synchronized _ passes/

“时间”作为一个变量可以以多种方式表现出来,一种是字面上的定义,如作业运行的时间窗口,无论是批处理还是实时流,另一种是作业运行的频率,还有一种是作业在不同系统上运行的顺序(如果您立即想到 DAG,就向您致敬)。

第三步,熟悉数据到达每个表的速度,这将使您能够告知数据消费者,数据的新鲜程度取决于其后台更新频率和您最后一次查询数据的时间,这确实是一项将您与其他数据专业人员区分开来的专业技能。

结束语

四年前,我几乎不知道“数据工程”这个术语,但我更感兴趣的是获得一致、可信的数据,而不是从口头传播的“好”数据中获得商业见解。四年后,尽管我获得了处理大数据的最先进技术堆栈的全面实践经验,但我仍然需要努力工作,以确保数据准确反映业务现实。然而,旅程仍在继续,每年都有新的支持软件解决现有设置无法解决的挑战或业务差距。

没有应用的技术在帮助企业利用数据达到新的高度方面有什么用?

无论哪种“it”技术现在对大数据处理来说是流行的,我都坚信这三个主题将会继续存在,因为我已经看到它们是所有公司的永恒主题,这些公司只依赖于电子表格、电子表格加半生不熟的内部关系数据库,甚至是本地 Hadoop 或云中的复杂数据仓库。

他们都在试图解决同一个问题——理解他们自己的数据并加以利用。您从这三个步骤中获得的知识将使您能够很好地面对运营火灾(例如,崩溃的服务器导致数据丢失)、未来项目(例如,从以前认为不相关的数据源到仪表板的新聚合管道)和不断变化的数据策略(例如,您认为不必要的新数据收集应用程序,因为类似的数据源已经存在)。

TL;博士,

第一步。每个表都有一个业务键。识别它(或它们),理解它们包含什么值,并使用它们将表粘合在一起。

第二步。最细粒度的表(原始表)总是有业务键。非常了解他们的结构,尤其是指标(计数、$$、评级)。获得一个基线数字。

第三步。时间是至关重要的。数据源可以在不同的时间、频率或以错误的顺序更新。前两步不能完全帮助您保持数据的新鲜。

祝你好运,带路吧!

2 周内获得 AWS 云从业者认证的 3 个步骤

原文:https://towardsdatascience.com/3-steps-to-get-aws-cloud-practitioner-certified-in-2-weeks-or-less-772178f48249?source=collection_archive---------4-----------------------

通过 AWS 认证验证您的云计算专业知识

JESHOOTS.COM在 Unsplash 上拍照

内容

AWS 认证简介
第一步:AWS 电子学习模块
第二步:AWS 白皮书和网站
第三步:YouTube 练习题
可选资源
关于考试

AWS 认证简介

亚马逊网络服务(AWS)是最受欢迎的云平台之一,他们从全球数据中心提供一套广泛的全功能服务。根据这些服务,AWS 提供认证来帮助专业人员验证这些按需云计算技能。

AWS 提供的认证类型|亚马逊网络服务标志是 Amazon.com 公司或其附属公司在美国和/或其他国家的商标|来源: AWS 认证

千里之行始于足下,本指南介绍了如何迈出 AWS 认证之旅的第一步,从基础云从业者考试开始。

AWS 认证云从业者( CLF-C01 )考试的目的是验证个人对 AWS 平台的理解和知识,包括云架构原则、云经济学、可用的产品和服务以及其他方面,如安全性和价值主张。记住所有这些,让我们开始管理考试的3–2–1****计划:3关键步骤, ≤2 周, 1 考试尝试。

步骤 1 — AWS 电子学习模块

— — — —
所需时间:6–7| 费用:免费 — — — —

AWS 自己提供的在线电子学习模块经过精心规划和交付,使概念易于理解。内容被组织成小块,涵盖云计算和 AWS 提供的服务背后的关键思想。最棒的是,它是免费的!

我喜欢他们用咖啡店作为所有模块的简单类比,因为这使得理论更容易理解和可视化。

泰勒·尼克斯在 Unsplash 上的照片

转到 AWS 云从业者基础在线学习页面,访问在线学习内容。如果您之前没有创建个人亚马逊帐户,您需要创建一个。

第一步的游戏计划是按顺序完成每一课,如果可能的话做笔记。虽然视频播放时间总共是 6 个小时,但你至少要花两倍的时间。这是考虑到反复观看和复习课程的因素。

对于完全不熟悉云计算的人来说,我认为你应该在 6 天内每天花 2-3 个小时来很好地理解内容。如果你已经对云计算概念有了一些基本的了解(比如接触过 GCP 等其他服务),那么所需的时间会更短。

另一个技巧是以更快的速度观看视频(例如 1.5-2 倍),这样可以优化花费的时间。

作为对阅读这篇文章的感谢,我分享我根据课程和文字记录整理的笔记。你可以在我的 GitHub 页面 这里找到笔记

步骤 2 — AWS 白皮书和网站

— —
所需时间:2–3| 费用:免费
—————

在从步骤 1 中获得 AWS 服务的主要概念的良好基础之后,是时候接触 AWS 必须提供的更多产品和服务了。我发现这一点很重要,因为考试倾向于测试你的 AWS 产品的功能。通过 AWS 提供的白皮书,您可以很好地了解这套服务。以下是推荐阅读的白皮书:

  • 亚马逊网络服务概述
  • AWS 定价的工作原理

白皮书可能会很长,所以我实际上并没有全部读完,因为它对我来说太乏味和耗时了。我认为最重要的是快速浏览一下,找出您以前在电子学习模块中没有遇到过的服务(步骤 1)。对于您不熟悉的服务,请简要阅读白皮书中相应的章节,对它们的功能有一个基本的了解。

如果您想对 AWS 平台有更深入的了解,请随意完整阅读文档,以便进一步增加您的信心和第一次尝试通过考试的机会。

让你熟悉各种产品的另一个资源是浏览官方的 AWS 网站。通过这样做,您应该能够很好地了解可用的服务。

步骤 3 — YouTube 练习题

— — — —
所需时间:2–3| 费用:免费
— — — —

现在是检验你的知识的时候了。有几个资源提供收费的练习题,但我避开了它们,因为 YouTube 上已经有很多免费的练习题。这是我在准备过程中观看的 4 个视频(以 2 倍的速度观看):

  1. 我的训练
  2. 测试准备训练
  3. 免费云培训
  4. 数字云培训

照片由克里斯蒂安·威迪格在 Unsplash 上拍摄

请确保在查看答案之前尝试了这些问题。如果你在 YouTube 上进一步浏览,你肯定会遇到更多这样的视频,所以也可以随意观看。此外,请点击查看 AWS 的官方样题。

可选资源

如果你想要一个有指导的在线课程,让你以一种系统的方式完全准备好,你可以在 Udemy 上查看一些付费课程。我并没有报名参加这些课程,但是我在 Udemy 上看了一下,觉得这些课程看起来结构良好,并且有额外的练习题。

  • 终极 AWS 认证云从业者— 2021 年
  • AWS 认证云从业者考试培训 2021
  • AWS 认证云从业者:2021 年 6 次全实践考试

完成这些课程可能会使准备过程比两周稍长,但是,嘿,这不是一场比赛,所以如果你需要的话,花更多的时间。

关于考试

已经有很多资源描述了考试过程,所以我就不深究了。您可以查看以下内容,了解更多信息:

  • https://aws.amazon.com/certification/certification-prep/
  • https://www.aws.training/certification
  • https://D1 . AWS static . com/training-and-certification/docs-Cloud-practicer/AWS-Certified-Cloud-practicert _ Exam-guide . pdf

相反,我将分享一些基于我个人经验的技巧。

  • 请确保至少提前 40 分钟,因为监考服务的设置可能需要一段时间才能完成。
  • 90 分钟内要回答 65 个问题。这实际上是足够的时间让你完成考试。因此,一定要花时间仔细阅读问题,避免匆忙通过考试。你也应该有足够的时间再次浏览(和编辑)你所有的答案,所以请在提交之前这样做。
  • 如果你在家参加考试,确保没有持续的(或潜在的)干扰。例如,让你的家人/室友知道你将参加监考,并提醒他们在 90 分钟的时间内不要干涉。

结论

在本指南中,我分享了如何准备 AWS 认证云从业者考试的 3 个步骤。由于每个人都有不同的学习偏好,这里的建议既不确定也不详尽。尽管如此,它仍然应该为你参加考试提供坚实的准备,并在你第一次尝试时通过考试。凭借本指南中列出的资源(即步骤 1-3),我第一次尝试就获得了 920/1000 分(及格分数为 700/1000 分)。我非常有信心你也能做到。

再一次,请不要介意我从 AWS 课程和抄本中收集的笔记。

在你走之前

欢迎您来到**,与我一起踏上数据科学学习之旅!**点击此媒体页面,查看我的 GitHub ,了解更多令人兴奋的数据科学内容。同时,祝你考试顺利!

💔-steps-to-get-tableau-desktop-specialist-certified-in-2-weeks-abbef25778de>

两周内获得 Tableau 桌面认证的 3 个步骤

原文:https://towardsdatascience.com/3-steps-to-get-tableau-desktop-specialist-certified-in-2-weeks-abbef25778de?source=collection_archive---------6-----------------------

获得 Tableau 专家认证,展示您的数据可视化技能和产品知识

威廉·艾文在 Unsplash 上的照片

内容

——Tableau 认证简介
——Tableau 桌面设置
——第一步:Tableau 免费培训视频
——第二步:Tableau 白皮书
——第三步:在线练习
——关于考试

Tableau 认证简介

Tableau 软件是市场上最受欢迎的视觉分析平台之一。Tableau 专注于商业智能,使用户能够轻松探索和管理数据,并快速发现和分享见解。鉴于它在各行各业的广泛应用,获得 Tableau 认证肯定会帮助你脱颖而出。

前端用户很可能会在工作中使用 Tableau Desktop ,所以我将重点讨论桌面认证。特别是,我将深入研究基础认证,即所谓的 Tableau 专家认证

3 个 Tableau 桌面认证可用|图片来源:Tableau 网站(经许可使用)

记住所有这些,让我们开始管理考试的学习计划: 3 关键步骤, 2 周, 1 考试尝试。

Tableau 桌面设置

为了最好的准备(如果你没有付费的 Tableau 订阅),我建议你使用 14 天试用版的 Tableau Desktop (从这里下载)而不是 Tableau Public。

如果您已经用完了试用期,请考虑使用其他电子邮件地址再次注册。只有当你准备好执行这个为期两周的学习计划时,安装试用版才是最理想的。

注意:如果你碰巧是学生,Tableau 通过Tableau for Students program向认证机构的学生提供为期一年的免费许可证。

步骤 1: Tableau 免费培训视频

— —
所需时间:8–9| 费用:免费 — — — —

首先,为了高效备考,了解专科考试考的都是哪些概念很重要。考试中测试的技能列表可以在考试准备指南中找到。

Tableau 提供了一系列广泛的 免费培训视频 ,这些视频将构成步骤 1 的基础。这些小视频是解决技能测试的绝佳课程,最棒的是,它是免费的!

这一步是最重要的(也是最密集的),因为它涉及从基础开始的在线课程和实践。幸运的是,为了通过考试,你不需要完成培训页面上的所有章节。以下是你需要关注的 7 个章节:

  1. 入门 (3 个视频— 34 分钟)
  2. 连接数据 (11 段视频— 72 分钟)
  3. 视觉分析 (26 个视频— 144 分钟)
  4. 仪表盘和故事 (8 个视频—40 分钟)
  5. 计算 (16 个视频— 65 分钟)
  6. Tableau 为什么要这么做? (4 段视频— 22 分钟)
  7. 如何进行 (10 个视频— 39 分钟)

为了充分利用这一点,我强烈建议你在整个课程中自己练习重新制作图表,而不是被动地观看视频。动手实践绝对是关键

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

虽然总的视频播放时间是 7 个小时,但我会加倍时间,因为你需要花时间练习你所学的。通过每天分配 2 个小时来学习这些课程,你应该能够在 9 天的时间内完成 7 个章节。

完成所有课程后,务必再次参考考试准备指南的“技能测试”部分,以检查您是否熟悉考试中测试的概念。

步骤 2: Tableau 白皮书

— —
所需时间:1–2| 费用:免费 — — — —

完成第一步后,我们现在可以花些时间做些更简单的阅读。针对该考试的白皮书是可视化分析最佳实践——指南。可以直接从 这个链接 下载。

因为考试包括与可视化最佳实践相关的多项选择题(MCQ ),所以快速阅读本白皮书将有助于解决这些问题。

这里有一个如何阅读冗长文件的提示。当您浏览白皮书时,请关注文档左侧中以蓝色斜体显示的部分标题和副标题以及总结要点。如果你有兴趣了解某个特定主题的更多信息,你可以继续阅读该特定部分的全文。

第三步:在线练习(Udemy)

— —
所需时间:2–3| 费用:~ $14 — — — — —

现在是时候接触真正的考试问题了。虽然有几个 YouTube 视频和网站提供免费的样题,但我没有发现它们的质量令人满意。为了找到练习题的好资源,我花了一点钱进入了这个 Udemy 课程: Tableau 专家认证准备 (注意:这个帖子不是赞助的)。

本课程的关键是获得340】自评分 全程练习考试(附带解答)。虽然本课程确实有关于 Tableau 概念的视频,但我发现步骤 1 中的免费视频质量更好。尽管如此,我还是以两倍的速度观看了 Udemy 视频,作为一种有效的修订。

在完成这三次模拟考试后,你会对自己在哪些概念上有所欠缺有一个更好的认识。这些模拟练习考试也有助于模拟考试环境,让您更好地准备参加实际考试。我强烈建议你参加 3 个模拟考试中的每一个,就像它们是真正的交易一样,即不要分心,全神贯注,在时间限制内工作。

埃弗里·埃文斯在 Unsplash 上拍摄的照片

最后,官方的备考指南也附带了一些样题,所以你也可以看看。

关于考试

Tableau 网站和备考指南提供了大量关于考试的信息,所以请务必参考它们了解详情。一般来说,60 分钟内要完成 30 个 mcq,及格分数为 70%,费用为 100 美元。它将在已经安装了 Tableau 软件的虚拟机中进行。请点击查看考试设置。

我想分享一些考试的小技巧:

  • 确保您的互联网连接处于最佳状态。尽管我的连接通过了考试设置的基本要求,但我发现虚拟化的 Tableau 软件相对滞后,这使我在参加考试时感到相当困难。
  • 确保在房间内参加考试时没有干扰(即通知你的家人/室友避免在考试期间进入房间)
  • 60 分钟将很可能是绰绰有余的时间来完成考试,所以没有必要慌张,当你遇到一个困难的问题。在回到之前难倒你的那个问题之前,你总是可以转移到其他问题上。
  • 尽早参加考试,因为连接监考人的时间可能会比预期的长

结论

在这篇文章中,我分享了通过 Tableau 桌面专家考试的 3 步学习计划。仅用上面 3 个步骤中列出的资源,我就能在第一次尝试中获得 90%的分数。我非常有信心你也能做到。

作者图片

在你走之前

欢迎您**加入我的数据科学学习之旅!**点击此媒体页面,查看我的 GitHub ,了解更多精彩的数据科学内容。同时,祝你考试顺利!

💔-steps-to-get-aws-cloud-practitioner-certified-in-2-weeks-or-less-772178f48249> https://medium.com/datadriveninvestor/using-ensemble-regressors-to-predict-condo-rental-prices-47eb7c3d5cd9

实施自助 BI 的 3 个步骤

原文:https://towardsdatascience.com/3-steps-to-implement-self-service-bi-8681d1ca6329?source=collection_archive---------45-----------------------

如何实施数据驱动的文化

池祥在 Unsplash 上拍照

构建数据驱动的文化不会就这样发生——它需要持续的关注和有目的的决策。在这里,我想提一下构建自助式商务智能平台需要考虑的三个最重要的因素。

构建可靠的数据平台

在现代企业分析方法中,IT 部门和业务部门携手合作。IT 部门建立了一个可信数据或内容的中心环境,让业务用户能够访问这些数据,输入他们的问题,并获得他们需要的答案[1]。数字化转型的基石之一是现代数据和分析平台。在即用型云服务的帮助下,ELT 和自助 BI 工具等新模式以及敏捷方法公司(尤其是中小型公司)可以在更短的时间内构建数据分析平台,从而能够更加专注于业务需求[2]。在这里,稳定的数据集成和可扩展的云服务是基本前提。一个以面向客户的方式工作的敏捷的 IT 部门完成了整个事情。

需求管理支持

在构建新的数据驱动型文化的过程中,任命领导者来推动这一变革至关重要。数字化的核心目标是产生新的数字产品理念、基于数据的商业模式以及提高内部流程效率。为了实现这些目标,公司自身以及外部数据源的分析、使用和商业化发挥着重要作用。公司被迫重新思考他们通常的模拟商业模式,检查他们的数字潜力,并相应地改变他们[3]。

变更管理

分析文化需要员工乐于使用的强大分析平台。该平台必须易于整个组织的部署、管理和扩展。它还必须提供 It 所需的安全性和治理。一旦合适的平台到位,下一步就是人员和流程。在任何重大的组织变革中,一个经常被忽视的方面是对参与其中的每个人的努力表示感谢。花点时间给那些接受和实施改变的人积极的反馈。它改善了气氛,对整个过程的成功起着关键作用。当然,除了让人们参与进来,广泛的培训也是必要的,以便在处理这些数据分析平台和自助 BI 工具时能够产生积极的感觉,最重要的是,增加价值。

摘要

总之,建立数据驱动的文化并不复杂。只需三个简单的步骤,就可以创建与数据集的自主交互:一个可靠的数据平台,需要管理支持和成功的变更管理。当这些特性被考虑并正确实施时,您应该会获得一个成功的自助 BI。

资料来源和进一步阅读

[1] Marc Rueter,《自我服务文化是如何形成的----自我服务文化分析---- 2003 年)

[2]微软,借助现代数据平台释放数据的全部力量

[3] Michael Rachinger,Romana Rauter,Christiana Ropposch,Wolfgang Vorraber,Eva Schirgi,数字化及其对商业模式创新的影响(2018),《制造技术管理杂志》

通过谷歌云专业数据工程师考试的 3 个步骤

原文:https://towardsdatascience.com/3-steps-to-pass-google-cloud-professional-data-engineer-exam-83a312788452?source=collection_archive---------2-----------------------

在 1 个月内通过考试,提高您在谷歌云平台(GCP)的技术专长

图片由专业数据工程师认证上的作者提供

问题陈述

有不少关于如何通过上述考试的指南,但它们要么是过时的,要么是有太多的步骤和建议要遵循。我想我会分享我通过这个考试的 3 个步骤,以帮助那些和我处境相同的人。这些步骤对我来说非常有效,我确信它非常适用于你,无论你是刚刚开始学习谷歌云平台中的数据工程,还是因为专业原因想要获得这个证书。在我们开始之前,这是我在 1 个月前开始准备工作之前真正想要完成的两件事:

  1. 在准备的 1 个月内通过考试 (duh)。(我全职工作,所以 1 个月对我来说是一个合理的时期)
  2. 记录并重复使用的知识,以应用于工作或其他项目。(这一点很重要,因为我在空闲时间会上很多在线课程,过一段时间后,我往往很难记起在哪里学了什么)

工具和成本

这些是我使用的工具,其中大部分是免费的,但这些类不是。你可能会说,有其他免费或更便宜的方法,但我个人更喜欢为更好的服务支付一点溢价,有时以节省我的一些时间。

工具:

  1. 笔记 app : 观念 。我一直在使用很多记笔记的应用程序,如 EverNote、OneNote 和 Confluence,直到今年我发现了 concept,从那以后再也没有回头看。
    费用:免费
  2. 学习平台: 谷歌认证专业数据工程师,由蒂姆·贝瑞云大师担任。我选择了一个云专家平台,因为我通过了 AWS 云从业者考试,之前使用了那里的课程之一,我发现那些课程真的很有帮助。我也用 Coursera 做了不少 Google 云平台相关的数据工程的课程,但是我觉得都没有这个有效。费用取决于你需要多长时间,但让我们根据 1 个月的时间来估计。
    费用:每月 35 美元,新注册 7 天免费试用
  3. 考试本身: Google 专业数据工程师 。它由 50 道选择题组成,总时长 2 小时。根据你所在的位置,你可以在网上或考试中心进行考试。谷歌不会告诉你与 AWS 相比你得了多少分,所以你只知道你要么通过,要么失败。我真的希望这里的所有读者都能获得通行证,不管你是按照我的步骤还是按照你自己的方式来做:)
    费用: $200 美元
  4. 模拟考试: Google 专业数据工程师考试 by ExamTopics 。模拟考试与实际考试非常相似,所以强烈建议任何人都来做,尤其是当你快没时间的时候!它实际上是免费的,但我最终支付了贡献者访问权,因为免费版本将要求机器人每 10 个问题左右检查一次,这对我来说有点烦人,它分散了我对考试问题本身的注意力。
    费用:免费或 16.99 美元/月或 23.99 美元/年。

如果你排除 200 美元的考试费,总成本加起来只有 35 美元,因为总成本=免费(概念)+ 35 美元(1 个月+ 7 天的云专家)+免费(如果你不介意机器人检查的考试题目)= 35 美元。这是基于我们将在 1 个月零 7 天内完成课程的假设。

我相信,基于上面的工具,你们中的大多数人现在已经知道这三个步骤是什么了,但是让我来详细地介绍一下每一个步骤。

图片由memegenerator.net

3 个步骤

第一步:制定系统的训练计划

作为一名工程出身的人,我喜欢以非常系统和结构化的方式做事,尽管我的思维倾向于以其他方式行事,所以有一个结构化的计划对我来说是实现上述目标所必需的。就我个人而言,我发现获得所有这些认证最困难的部分,无论是 AWS、GCP、Azure 还是任何其他专业认证,都是学科。我们周围不断的干扰,如社交媒体或频繁的通知,真的阻止了我以我希望的速度前进。为了消除我的分心,我为我生活中做的许多事情设定了一个想象的时间表**,这总是让我感到有点压力,这样我就可以减少社交媒体消费,并将我的注意力转移到需要我立即关注的事情上。我在这次考试中使用了同样的策略,记得我们的目标是在准备的 1 个月内完成这次考试吗?因此,我查阅了上面提到的课程的所有教学大纲。根据教学大纲,我为每周计划我的想象目标,这样我就可以在目标时间内完成它。我是全职工作,我的大脑通常在每个工作日结束时完成,所以如果可能的话,我只计划在周末学习这个认证,除非我不能在之前的周末达到目标时间表。我的目标是每周 8 小时**,周六 4 小时,周日 4 小时。为什么是 4 个小时?这只是我每天可以做的深度专注的小时数,你可以根据自己的情况做相应的调整,但相信我,周末 3-4 小时的深度专注确实需要一定程度的纪律,以免分心去做其他事情,所以我建议你从合理的小时数开始。让我们来看看我的实际认证时间表:****

作者在准备时间表上的图片

****我在 idea 中创建了一个时间表来预测和跟踪我的进展。基本上时间表是基于上面介绍的课程中的所有课 ExamTopics 的模拟考试。如你所见,总时间略多于 32 小时,这与我在 1 个月内每周工作 8 小时的目标相符。时间栏是学习程序本身估计的时间,我通常以 1.5 或 2 倍的速度播放视频,所以我倾向于花费比估计时间更少的时间,有时我会坚持一些实用教程,所以时间结果大致相等。目标完成日期是最重要的一栏,确保你在开始学习之前填满它,因为想象中的时间表将确保你始终在正确的轨道上。我会努力在目标完成日期前完成这些课程,如果我的大脑允许我“说服”自己,我会提前完成这些课程,这会让你感觉良好,并大大提高你的士气:)

我还在下面创建了一个进度表,因为在线课程确实显示了你已经完成了多少,我也根据我的进展写了一些评论,以保持我自己的进步,而不是半途而废。

作者关于进度跟踪的图片

一个快速提示:如果你像我一样有时喜欢拖延,但决心在 1 个月内完成认证,只需通过尽早支付 200 美元来预订和锁定考试日期。为了确保我能按时完成,我比想象的截止日期提前一周预定了考试日期。如果你愿意,你可以提前一个月做:)你会惊讶地发现,你仍然能够在自己设定的紧张的最后期限内完成并通过考试。

步骤 2:使用概念作为文档门户

还记得我们的第二个目标吗,那就是记录下我们学到的东西,并在必要时重复使用?idea 非常方便地记录下我从课程中学到的所有知识,而无需从头再看一遍视频。由于我在公司也是一名专业的数据工程师,当我不得不做出设计选择或偶然发现我记得从视频课程中学到的东西时,这些笔记非常方便。我的团队不到 6 个月前才开始使用谷歌云平台,这些课程帮助我加快了学习速度。你可能会和我争论记录我从视频中学到的东西是浪费时间,因为我们总是可以稍后重放视频,理论上你可以以两倍的速度浏览视频并做模拟考试。然后,你仍然会用最少的努力和时间通过考试。你是绝对正确的,但就我个人而言,我不想为了获得认证而支付 200 美元,忘记所有事情,比如说 6 个月。我不得不再次浏览所有的视频来回忆我的学习。在概念中,有一个功能叫做 切换 ,这是我一直以来最喜欢的功能!它使我能够在一页中压缩大量信息,也迫使我的大脑在我点击切换按钮浏览内容之前进行一些主动回忆。让我们看看我是如何组织所有内容的:

作者在课程内容上的图片

你可以看到,我在笔记中大量使用切换,我会将笔记分成不同的部分,并在中途暂停课程视频,以便写下笔记或捕捉视频截图来节省时间。不幸的是,我不会在随后的切换中显示实际内容本身,因为我不希望一个云专家团队在我未经他们同意的情况下分享课程内容。

在观念中整理了所有这些帮助我在考试前有效地复习了所有重要的主题,建立了我的信心,也帮助我专业地完成了实际工作!

第三步:做两次模拟考试

我强烈建议任何计划参加该认证的人参加考试主题的模拟考试。我在考试前一周开始练习。它分为两个主题,即主题 1 和主题 2。话题 1 有 163 个问题,而话题 2 有 78 个问题。与主题 2 相比,实际考试中的大多数问题与主题 1 中的问题非常相似。如果时间不够,您可以跳过主题 2,只关注主题 1。实际考试中不再有案例研究问题,所以你也可以跳过这些问题。就我个人而言,我完成了主题 1 和主题 2,因为主题 2 中的问题通常更简单,我可以在练习中很快回答它们。顺便说一下,不要完全相信 exam topics提供的解决方案,因为一些官方答案是错误的,请看看讨论以更好地了解实际答案和背后的推理。我通读了所有的讨论,更好地理解了为什么某些答案没有多大意义。

像往常一样,当我做模拟考试时,我使用我最喜欢的概念应用程序,因为我想把我所有的进步都放在一个地方。我一次做了 50 个问题,浏览了所有的讨论,标记了我的问题并理解了哪里出错了,然后重复直到我完成了所有的 241 个问题。

模拟考试中作者的图片

在实际考试的前一天,我重新做了 241 道题每轮 50 道题,并找出了我第二次仍做错的题!幸运的是,在第二次尝试时,我能够答对 227/241 道题,所以这些知识确实深入我的脑海。

结论

我花了很多时间浏览不同的在线课程,有时还努力回忆一些知识。这些是我如何在通过认证的同时加强学习的方法。你可以运用同样的策略,不仅仅是在 GCP 认证上,而是在你计划将来要做的任何认证上!这是我在 1 个月内获得认证的 3 件事:

  1. 制定系统的训练计划
  2. 使用概念作为文档门户
  3. 做两次模拟考试

你可以根据你的时间和你真正想从认证中得到的东西做相应的调整。我真诚地希望你能够用这些技巧通过考试并且将这些知识应用到你的工作或副业项目中!如果你采纳了上面列出的一些建议并最终通过了考试,请随意评论!我还在 Youtube 上做了一个视频这里是对上面概述的每一个步骤的更深入的探讨,如果你有时间的话,请随意观看。祝你好运,万事如意!我将用一句我非常喜欢的话来结束这篇文章:****

为了实现任何值得拥有的东西,你必须全心全意地去做。弗兰克·劳埃德·赖特

我对有抱负的数据科学家的 3 条建议

原文:https://towardsdatascience.com/3-suggestions-i-have-for-aspiring-data-scientists-50ef06808aa5?source=collection_archive---------28-----------------------

如果你是从另一个职业进入数据科学,有一些方法可以让这个转变更平稳。

安德鲁·尼尔在 Unsplash 上拍照

数据科学已经吸引了许多不同行业的大量人员。随着收集和存储数据能力的提高和成本的降低,越来越多的企业投资于数据科学,以在其专业领域表现更好。

由于数据科学仍然是一个成熟的领域,尚未在传统教育体系中得到很好的确立,因此绝大多数数据科学家来自各种职业。

来自不同背景的数据科学家决定在研究生院或职业生涯的某个阶段从事该领域的工作。他们的共同点是面临相似的挑战。

作为一名在 7 年专业工作经验后转行的数据科学家,我想分享 3 条我认为对有志成为数据科学家的人有帮助的建议。

更多地使用数据

机器学习模型或数据应用最重要的部分是数据。数据的质量、相关性和兼容性对于任何数据应用程序都非常重要。

我觉得学习数据科学的流行资源更侧重于建模部分。有很多机器学习算法,其中大多数对于典型的应用程序来说都很好。你不必掌握该领域使用的所有机器学习算法。

尝试不同的算法或超参数可能会改善您的成本函数。然而,在现实生活中,花费数不清的时间来完成这样的任务通常是不可接受的,也是负担不起的。

能够改善模型或应用程序的是数据本身。因此,数据科学家应该掌握用于清理、操作和预处理数据的工具。

根据任务的不同,您可能会处理结构化或非结构化数据。你的目标应该是能够在任何情况下处理数据争论操作。

学习能够处理大数据的工具

数据科学如此受欢迎的原因之一是不断发展的收集、存储和处理数据的工具。访问数据变得越来越容易,越来越便宜。

因此,在典型的应用程序中,我们可能要处理大量的数据。归根结底,更多的数据意味着更强的预测能力和更好的结果。

当我们处理大规模数据时,分布式数据和计算变得更加重要。例如,最流行的数据分析和操作工具 Pandas 并不是你最好的朋友,因为数据变得非常大。

分布式引擎正在成为数据科学生态系统中的主要工具。我建议学习这种允许分布数据和计算的工具。

其中最受欢迎的是 Spark,这是一个用于大规模数据处理的分析引擎。它让您可以将数据和计算分散到集群上,从而实现显著的性能提升。

做一个需要一天以上才能完成的项目

没有工作经验的有志数据科学家面临的最大挑战之一是能够展示他们的技能。很难用几个证书说服招聘人员或招聘经理。

如果你以前没有工作经验,就没有一个简单的方法来展示你的技能。展示你的技能和知识的最强候选人是一个项目。

我绝对不是指你可以在一两天内完成的项目。这样的项目有利于练习,但不足以让你在竞争激烈的就业市场中脱颖而出。

你要找到一个可以用数据解决的问题,设计你的解决方案。问题不必复杂,你也不必提供最佳和最有效的解决方案。

能够框定一个可以用数据解决的问题,比完成这样平凡的项目更有价值。它证明了你的分析思维能力,并清楚地表明你对数据科学有全面的了解。

结论

我转行成为了一名数据科学家。我花了将近两年时间才找到第一份工作。在这期间,我不得不克服许多挑战来达到我的目标。

我在这篇文章中分享的建议在我的旅程开始时会对我有很大帮助。我认为它们将对有抱负的数据科学家或任何想在数据科学领域工作的人有所帮助。

感谢您的阅读。如果您有任何反馈,请告诉我。

我作为一家人工智能初创公司的第一名员工的 3 点心得

原文:https://towardsdatascience.com/3-takeaways-from-my-journey-as-1st-employee-of-an-ai-startup-e2200c4b2a35?source=collection_archive---------20-----------------------

人工智能|创业公司

人工智能创业部门适合你吗?

照片由阿尔莫斯·贝托尔德在 Unsplash 上拍摄

在 AI 公司工作就不一样了。成为第一个员工是神奇的。

从我记事起,我就喜欢数学和物理。我高中成绩最好,总是如鱼得水。正如周围所有人所料,我最终在 2017 年拿到了工程学位。可悲的是,在经历了五年充满怀疑和失败的坎坷之路后,我失恋了。我想要改变,那个夏天我有了一个顿悟:为什么不把我最擅长的和我下一步想做的结合起来呢?人工智能是我的答案。

我有了一个新的目标,并重新下定决心去实现它。我开始在网上学习 AI。我参加课程,阅读论文,学习编码。我花了四个月时间和时间赛跑。像往常一样,有一天我找到了我一直在寻找的职位。一家专注于创新的人工智能初创公司想要一名具有一些人工智能知识的工科毕业生。那是我。我得到了那份工作。然而,这不是普通的工作:我是这家公司的第一名员工,也是唯一一个对人工智能有所了解的人。这将是一次充满挑战的旅程。

作为人工智能初创公司的第一名员工,我将与你分享我在这 3 年的旅程中学到的 3 个教训。这篇文章是为那些在人工智能领域刚刚起步,不知道从快节奏、快速变化的创业环境中期待什么的人准备的。尽情享受吧!

第一名员工——激动人心的工作的缩影

我组成了整个技术部的一半。首席技术官和我一起排除万难。该公司的核心项目涉及实时双向手语翻译器的设计和开发。鉴于连谷歌都没有建造一个,这无疑是雄心勃勃的。我的正式职位是“初级开发人员”我的实际职位是人工智能研究员、ML 工程师、数据工程师、数据科学家,甚至文档人员的混合体。

QED Investors 的联合创始人弗兰克·罗特曼几天前写了这条推文。这与我的经历产生了深刻的共鸣:

有一天我在写数据处理的代码,第二天我在看论文,寻找最适合我们需求的模型。在我与我们的手语专家录制视频的第二天,然后在周末,我必须做一个演示,向潜在客户解释产品如何工作。每天都不一样。这是一次持续的冒险;非常规工作的定义。我喜欢这种感觉。每天早上醒来,我都沐浴在那种不确定的感觉中,混合着一种创新的欲望,带着一种不可阻挡的意志去面对任何挑战。

但不是每个人都一样。有些人喜欢做特定的、定义明确的、不超出其职位界限的任务。他们可能喜欢有创造力,但是选择把那部分导向他们的爱好。日常工作没那么令人兴奋,但更安全。这是公平的,我们更喜欢在我们所做的事情上占优势的感觉,而不是每天感觉自己像一个愚蠢的新手。

弗兰克·罗特曼在他的推特上提到了第一批十名员工。我经历了最极端的情况。我没有同事,没有人可以向我寻求建议,因为我是“专家”然而,我不会用任何其他东西来改变这种体验。我没有安全感,但我觉得自己还活着。这取决于你找到你属于光谱的哪一边。

强大的理论背景的重要性

最近在关于数据科学有一场关于拥有深厚数学知识在机器学习中的作用的辩论。GreekDataGuy——原名 Chris The Data Guy——写了一篇题为“机器学习不需要数学”的文章不久之后,萨雷姆·塞茨回应并捍卫了相反的观点:“你确实需要数学来进行机器学习”

GDG 声称在机器学习中,数学被高估了。编码和知道如何处理数据更重要,因为库可以“为你做重活”他支持自上而下的方法:先把手弄脏再学习。相反,Sarem Seitz 认为,强大的数学和理论背景可以给你一个更广泛的工具箱来面对意想不到的问题。你了解你的模型。您可以更快地调试,或者更容易地“发现违反理论的地方”

我站在萨勒姆这边。因为我接受了大量的数学和物理培训,我设法找到了与数据或人工智能无关的问题的工程解决方案——无论如何我都必须解决的问题。尽管如此,如果你问我是否认为数学对人工智能领域所有公司的所有技术职位都同样重要,我的答案是“不”。正如我在上一节中所示,在初创公司工作与在大型传统公司工作是不同的。数学或者其他类型的理论知识的有用程度随着你工作的具体程度而变化。我发现了解数学和工程学非常有帮助,因为我比大多数人面临更广泛的挑战和问题。

这里有一个真实的故事。当我加入这家公司时,他们正试图用一套手镯将符号翻译成文字。这个想法是使用诸如角速度、轨迹和肌肉压力等变量将一组手/臂运动映射到一个“符号类”。经过几个星期的努力,我意识到在我们进行测量的方式上有一个根本性的错误。手镯没有记录一个重要的变量。如果我是一名纯粹的程序员——或者甚至是一名数据科学家——我甚至不会去寻找那个问题。我被告知要使用手镯中的数据,为什么我要怀疑它们是否正常工作?没有一些工程知识,我怎么能解决,甚至理解这样一个问题呢?

不过,我认为这种情况在大公司并不常见。硬件工程师会处理像这样的问题。然而,现在许多科技公司都遵循创业模式。你不知道明天会发现什么。你不知道找到解决方案需要什么工具。事实上,你可能甚至不知道你被问到的问题是否正确。在这些情况下,强大的理论、数学和工程背景可以扭转局面。

工业界还是学术界?单人乐队

只有 4 个月的人工智能知识,我几乎没有资格被称为一个发起者。我或多或少有一些概念,并且知道主要的范例和框架的名字。我当然不准备承担一个几乎无法解决的项目。我很高兴得到了这份工作,但我很清楚,如果我想迎接挑战,我必须非常努力地学习。

然而,令我惊讶的是,我很快意识到我必须向我的老板证明每一分钟的学习。即使对我来说很明显,这是项目成功的一个必要条件,但关系努力-结果对他们来说太间接了,看不到有用性。我必须在学习如何解决问题和实际解决问题以满足老板之间找到平衡。我必须研究科学,开发技术,设计产品。我不得不自己解决冲突和不一致的地方,而不是给不同的团队不同的公司观点

在大公司中,不同的部门对公司持有不同的观点——并有不同的标准来决定什么更重要——因此他们可以各自维护自己的利益。产品设计师认为用户界面应该是重中之重。数据科学家认为,“机器学习模型的好坏取决于它得到的数据”人工智能研究人员坚持使用最先进的算法。如果他们的观点发生冲突,每个团队都会努力获得最多的资源——希望找到一个稳定的平衡。

科学家回答的问题包括:

  • 机器学习还是深度学习?
  • 卷积网络还是递归网络?
  • 每个任务都有一个模型,还是每个任务都有一个模型?

技术人员决定:

  • Python 还是 R?
  • Keras 还是 TensorFlow?
  • 云计算还是内部部署?

以数据为中心的人会问:

  • 同质数据集还是真实数据集?
  • 预先存在的数据库或建立我们自己的?
  • 几节课?每节课有多少个样本?

而产品管理总会抱怨:

  • 系统应该更快。
  • 我们应该让它在手机上运行。
  • 我们应该翻译句子,而不仅仅是单词。

我不得不全盘考虑。我不得不收起自己内心所有冲突的观点,然后解决取舍问题。这就是为什么我不能保持以大学为中心的心态。我必须在学术界和工业界之间找到平衡。在科学和技术之间。准确性和可操作性之间。起初,我和我的老板们有很多矛盾。但随着时间的推移,我开始看到更大的画面。我们应该始终致力于在严格的基础科学的基础上创造最好的技术。然而,每个项目都存在于一个更大的框架中,在这个框架中,其他变量——资源、客户、投资者和期限——都扮演着重要的角色。

外卖食品

科技创业领域充满了有趣的项目。你不需要在谷歌或微软工作来实现你的抱负。然而,创业公司并不是大公司的小型复制品。它本质上是不同的,它的运作方式深深地影响着你要做的工作。

我在一家人工智能初创公司工作了三年,我学到了一些在大型科技公司肯定学不到的东西。更重要的是,我是第一个员工,这为我提供了独特的视角和专业背景,这将使我在整个职业生涯中受益匪浅。

以下是主要要点:

  • 早期创业的员工不会在一个固定的位置上工作。每一天都可能是不同的,是一次冒险。这是非常规工作的定义。如果你讨厌每天做同样的事情,那么快节奏、快速变化的创业环境就是你的归宿。这份工作并不安全,你也不会有安全感,但你会每天都很兴奋,就好像这是你的第一天。
  • 许多从事人工智能的技术人员认为理论/数学背景是一个额外的工具。它有时会有帮助,但如果你没有它就不会那么痛。其他人认为,它可以帮助面对未来的意外问题,所以以防万一还是有好处的。在科技创业领域,这是必须的。你的简历不应该说:“我是全栈程序员。”它应该说:“我有工程、编程、人工智能和数据科学的概念。我知道他们是如何合作的。”
  • 在小型创业公司中,团队的定义并不明确。你必须横向解决公司许多领域的挑战。专业化往往次于一般化。在一家初创公司,最基本的是要全面了解公司和你参与的项目。你必须在项目最科学的一面和你拥有的资源和必需品之间找到平衡。在更大的公司里,每个团体都捍卫自己的利益。在一个小的创业公司,你可能不得不承认双方,自己解决冲突。

跟我一起去未来旅行了解更多关于人工智能、哲学和认知科学的内容!此外,欢迎在评论中提问或在 LinkedIn 或 Twitter 上联系!:)

推荐阅读

</5-reasons-why-i-left-the-ai-industry-2c88ea183cdd>

避免决策树过度拟合的 3 个技巧

原文:https://towardsdatascience.com/3-techniques-to-avoid-overfitting-of-decision-trees-1e7d3d985a09?source=collection_archive---------0-----------------------

决策树的预剪枝、后剪枝和集成的实际实现

图片由来自皮克斯拜的皮特·林福思拍摄

决策树是一种用于分类和回归任务的非参数监督机器学习方法。过度拟合是一个常见的问题,数据科学家在训练决策树模型时需要处理这个问题。与其他机器学习算法相比,决策树很容易过拟合。

你的决策树是否过拟合?

过度拟合是指模型完全符合训练数据,但无法概括测试中未发现的数据的情况。当模型记忆了训练数据的噪声并且未能捕获重要的模式时,过拟合情况出现。完美匹配的决策树对训练数据表现良好,但对看不见的测试数据表现不佳。

(来源),偏差-方差权衡

如果允许决策树训练到最大强度,模型将会过度拟合训练数据。有多种技术可以防止决策树模型过度拟合。在本文中,我们将讨论 3 种这样的技术。

***Technique to discuss in this article:* Pruning
** Pre-pruning
* Post-pruning*
Ensemble
** Random Forest***

什么是修剪?

默认情况下,决策树模型可以增长到其最大深度。修剪指的是一种删除决策树的部分以防止增长到其全部深度的技术。通过调整决策树模型的超参数,可以修剪树并防止它们过度拟合。

有两种类型的修剪:修剪前和修剪后。现在让我们来讨论对每种修剪技术的深入理解和实际操作。

预修剪:

预修剪技术指的是提前停止决策树的生长。预修剪技术包括在训练流水线之前调整决策树模型的超参数。决策树的超参数包括**max_depth****min_samples_leaf****min_samples_split** 可以被调整,以提前停止树的生长,防止模型过拟合。

(图片由作者提供),AUC-ROC 分数与最大深度

从上面的图中观察到,随着 max_depth 训练的增加,AUC-ROC 分数连续增加,但是在 max depth 的值之后,测试 AUC 分数保持恒定。最佳决策树的最大深度值为 5。进一步增加最大深度值会导致过度拟合问题。

**max_depth****min_samples_leaf****min_samples_split**是决策树算法的其他超参数,它们可以被调整以获得健壮的模型。可以使用 GridSearchCV 技术的 sklearn 实现来为决策树模型找到最佳的超参数集。

(作者代码)

后期修剪:

后剪枝技术允许决策树模型增长到其最大深度,然后移除树分支以防止模型过度拟合。 成本复杂度剪枝(ccp) 是后剪枝技术的一种。在成本复杂性修剪的情况下,可以调整**ccp_alpha** 以获得最佳拟合模型。

Scikit-learn 包附带了使用函数**cost_complexity_pruning_path()**计算决策树的**ccp_alpha** 值的实现。随着**ccp_apha** 值的增加,树的更多节点被修剪。

成本复杂性削减(后期削减)的步骤如下:

  • 将决策树分类器训练到其最大深度(默认超参数)。
  • 使用函数**cost_complexity_pruning_path().**计算 ccp 阿尔法值

(图片由作者提供),ccp 阿尔法值

  • 用不同的**ccp_alphas** 值训练决策树分类器,并计算训练和测试性能得分。
  • 绘制训练和测试分数的每个值为**ccp_alphas** 值。

(图片由作者提供),AUC-ROC 评分 vs CCP _ 阿尔法斯

从上面的图中,CCPα= 0.000179 可以被认为是最佳参数,因为训练和测试的 AUC-ROC 分数分别为 0.94 和 0.92。

(作者代码),后期修剪

(图片由作者提供),**左:**未修剪的决策树,**右:**修剪后的决策树

集合—随机森林:

随机森林是通过引导多个决策树进行分类和回归的集成技术。随机森林遵循引导抽样和聚集技术,以防止过度拟合。

阅读下面提到的文章中的,深入了解随机森林和其他合奏技术。

可以使用 Scikit-Learn 库实现随机森林。您可以进一步调整随机森林算法的超参数,以提高模型的性能。**n_estimator**可以调整参数以减少模型的过拟合。

结论:

在本文中,我们讨论了防止决策树模型过度拟合的技术。预修剪和后修剪技术可以用来处理过拟合的问题。仅通过训练,具有默认超参数的随机森林模型不能完全减轻过度拟合的问题,因此需要进一步调整它。

参考资料:

[1] Scikit-Learn 文档:https://sci kit-Learn . org/stable/auto _ examples/tree/plot _ cost _ complexity _ pruning . html

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

https://satyam-kumar.medium.com/membership

感谢您的阅读

我成为数据科学家的三件事

原文:https://towardsdatascience.com/3-things-i-did-to-become-a-data-scientist-87a57a14de5d?source=collection_archive---------5-----------------------

意见

…在成为数据分析师的时候

内森·杜姆劳在Unsplash【1】上拍摄的照片。

目录

  1. 介绍
  2. 掌握流行的机器学习算法
  3. 执行端到端案例研究
  4. 使用数据分析来掌握数据处理
  5. 摘要
  6. 参考

介绍

这篇文章是写给那些目前是数据分析师,并且希望转行从事数据科学的人的。从局外人的角度来看,有些人会说这两个角色很相似,但正如我们所知,除了一些相似之处,他们还需要非常不同的技能。那么,如何才能弥合这些角色之间的差距呢?这就是我将在这里解释的。虽然有一些资料通常会推荐研究生院、在线课程和教程,但我想重点介绍一些更具体和独特的事情,让你从最初的数据分析师过渡到现在的专业数据科学家。如果你想知道成为数据科学家 能做的三件事,请继续阅读。

掌握流行的机器学习算法

由 Markus Spiske 在Unsplash【2】上拍摄的照片。

虽然这个主题看起来很明显,但实际上我发现自己首先学习的是逻辑回归、回归和决策树。我之所以说“流行”,是因为每隔一年左右,就会有一种新的算法,课程创建者还没有开发出可供你在学校学习的材料,因此,你需要自己去学习最新、最新、最好的算法和库。这个题目有两面,一面是掌握代码,一面是掌握理论。通常,在接受一些教育后,你会越来越深入地钻研代码,努力远离真正让算法工作的东西。因此,知道如何用描述性的方式,而不仅仅是编程性的方式来解释几乎前 10-20 个算法是很重要的。当你继续成为一名数据科学家时,你会意识到大多数算法库都以相同的方式工作,它们的实际代码相当简单,你开始试错,然后意识到你已经忘记了一些算法与另一个算法不同背后的理论,以及它在概念层面上的实际工作方式。

也就是说,这里有一些方法可以让你掌握这些算法。

  • 作为一个行动项目 ,我个人认为在卡片的正面写下算法名称,然后描述它如何工作,以及你将如何向自己和其他人解释它。
  • 同样, 作为下一个动作项 ,你甚至可以画出算法是如何工作的,比如像决策树。当你实际写下并画出一些东西时,这种方法会让你更好地记住这些材料。
  • 在编程方面,一个在比较几乎所有机器学习算法方面特别有用的库是 PyCaret ,作者是 Moez Ali 。

因此,在你学会了基本算法之后,你会意识到一旦你成为一名专业的数据科学家,还有很多东西需要练习。所以,作为一个数据分析师,最好现在就去研究它们。更深入地说,许多课程、教程和教育材料将从相同的几个基本算法开始,但通常情况下,统计书籍或初学者的机器学习课程不会阐述更新和更受欢迎的算法,如 XGBoostCatBoost

执行端到端案例研究

活动发起人在Unsplash【3】上的照片。

对于这种体验,我们的目标不仅是执行一个端到端的流程,以模拟你获得工作后的正常流程,而且还要分享你的案例研究,以便招聘经理、招聘人员和未来的同事能够看到你的一些能力。作为一名数据分析师,您可能已经熟悉了定义业务问题和调查相关数据的过程。也就是说,你会比那些不习惯这个过程的人占优势。

你需要做的是:

  • 找到一个共同的问题,比如预测股市
  • 获取一些免费的模拟数据
  • 确定您认为在模型中包含的重要特性
  • 在相同的数据上测试大约 10 种算法,并比较每种算法的性能
  • 用可视化来总结你的结果,这是你在专业环境中要做的

这个过程可以用多种方式展示。你可以在你的 Jupyter 笔记本 或类似的工具中展示这一切,并在笔记本的 markdown 中保存你的情节和讨论,或者在 Tableau、Excel 或 Google Data Studio 中创建单独的摘要视觉效果。展示您的案例研究的最常见方式是将其发布在 GitHub 上,大多数工程师、科学家和经理都习惯于这种格式和工具,因此在这里分享是首选。作为一名数据分析师,您可能会在组织数据、确定业务指标或 KPI(关键绩效指标)以及可视化结果方面有所帮助。

使用数据分析来掌握数据处理

照片由 Myriam Jessier 在Unsplash【4】上拍摄。

数据科学最大的痛点可能就是数据的预处理或处理。这一步通常也需要最长的时间。作为数据分析师,您可以利用您的数据技能来确保用于模型的数据集处于最佳状态。正如我们上面讨论的那样,知道使用哪些算法可以节省您很多时间,因为例如,有时丢失数据可能会很麻烦,而一些算法会自动处理它。

以下是您可以在数据科学预处理步骤中利用数据分析技能的一些方法:

  • 以多种方式输入缺失数据,如meanminmax
  • 将 CSV 文件合并在一起以创建最终数据集
  • 利用 SQL 查询贵公司的表格,包括分组、案例和过滤器
  • 将数据类型重新分配给某些特征(‘object’intfloat‘category’等)。)

正如你所看到的,现在成为一名数据分析师,会让你在追求数据科学时获得一定的优势。人们常说,数据科学的大部分困难和压力实际上是数据处理,所以如果你能首先掌握它,或者至少熟悉它,你可能在成为数据科学家方面具有优势。

摘要

如果你想成为一名数据科学家,请确保你知道自己在做什么。虽然构建算法是更有趣的部分,但通常要记住的是,数据分析也是该过程的一个重要部分。我为了获得一份数据科学家的工作而做的另一件事是研究机器学习算法的理论——不仅仅是旧教科书和课程中列举的那些常见算法。当你探索最新的算法时,你也可能有优势,因为最有可能的是,它们正在改进以前的算法做得不好的地方,比如速度、准确性、数据类型、缺失值等等。最后,拥有一两个案例研究的作品集不仅对你自己有利,而且对更多的招聘经理和招聘人员更有吸引力。

总而言之,以下是我成为数据科学家所做的三件事,希望你也能运用这些行动:

* Master Popular Machine Learning Algorithms* Perform An End-to-End Case Study* Use Data Analytics to Master Data Processing

我希望你觉得我的文章既有趣又有用!如果您在成为数据科学家时利用了您的任何数据分析技能,请随时在下面发表评论— 哪些技能? 。这对你现在的数据科学事业有帮助吗?你同意还是不同意,为什么?

请随时查看我的个人资料和其他文章,也可以通过 LinkedIn 联系我。我没有从属关系。

感谢您的阅读!

参考

[1]照片由内森·杜姆劳在 Unsplash 上拍摄,(2018)

[2]2016 年马库斯·斯皮斯克在 Unsplash 上拍摄的照片

[3]2018 年活动创作者在 Unsplash 上的照片

[4]照片由 Myriam Jessier 在Unsplash(2020)上拍摄

学习数据科学时不要做的 3 件事

原文:https://towardsdatascience.com/3-things-not-to-do-when-learning-data-science-149b9bc6a414?source=collection_archive---------3-----------------------

避免他们,以更快地达到你的目标。

在 Unsplash 上 NeONBRAND 拍摄的照片

近年来,公司比以往任何时候都更加意识到数据科学的潜力。他们对数据相关解决方案进行了大量投资。因此,数据科学生态系统经历了巨大的增长。

这样热门的领域作为职业选择吸引人是必然的。许多来自不同职业的人转行到数据科学领域工作。

然而,这不是一个平稳和容易的过渡。数据科学是一个非常广阔的领域。它需要大量的学习和适应许多软件工具。因此,你需要努力工作,奉献自己来成功地完成这个转变。

我是许多决定转行成为数据科学家的人之一。我花了将近两年时间才找到第一份工作。我写了很多文章来分享我两年旅程的一些细节。

在这篇文章中,我将写下我认为有抱负的数据科学家应该避免的 3 件事。它们有可能会打破你的动力或让你慢下来。

不要试图在 Kaggle 上竞争

Kaggle 是一个很好的学习平台。你可以在那里找到非常有价值的内容。人们共享的笔记本包含很好的学习材料,数据集可用于实践,等等。

然而,我认为这些比赛并不适合这个领域的新手。我说的是有奖竞赛。有一些操场非常适合练习和学习。

有奖的很难。在 Kaggle 上比赛的时候还是可以学到很多东西的。然而,作为一个初学者,它可能会打破你的学习动机。

团队可能会花费很长时间来获得一点点的准确性改进。在数据科学职业生涯的初期,您应该花时间学习更基本的概念。

即使你在这些比赛上花了大量的时间,你也可能无法接近排行榜。这是绝对正常的。然而,没有变得更好或者至少是平均成绩可能会让你感到不满足。你不希望在你职业生涯的开始阶段出现这种情况。

把 Kaggle 当成一个伟大的学习平台,而不是一个测试你的知识或技能的地方。

不要陷入 Python-R 困境

数据科学生态系统中有大量的软件工具和软件包。在大多数情况下,这些工具帮助我们无缝、高效地完成任务。

这些工具的好处是不容讨论的。然而,如果使用不当,它们可能会变成一种劣势。

在许多情况下,您将拥有多种工具来执行一项任务。丰富的工具选择通常会导致涉及某种比较的讨论。例如,您必须至少读过一篇关于 Python 和 R 比较的文章。

挑一个就走!在你职业生涯的初期,质疑选择哪一个是浪费时间。大部分选项将足以学习基础知识。

这不仅限于 Python-R 比较。例如,Matplotlib、Seaborn 和 Altair 是 Python 的三个不同的数据可视化库。我很确定他们中的任何一个都能满足你的需求。

您可以使用 R 和 Python 库进行数据分析和操作。你选择哪一个并不重要,至少在你学习的时候。一旦你有了第一份工作,你就可以对自己的偏好做出更好的决定。

神经网络听起来很酷,但是…

深度学习是机器学习的一个子领域。它用于通过神经网络解决机器学习问题。原则不会改变。您创建一个模型,训练它,并根据损失函数对它进行评估。这是一个迭代过程,因此您需要调整模型以提高其性能。

深度学习算法比传统的机器学习算法更复杂。他们可能在一些特定的任务中表现得更好。例如,卷积神经网络可能是图像分类任务的最佳选择。

然而,数据科学广泛范围内的许多问题不需要使用深度学习模型。大多数情况下,机器学习算法已经足够了。

神经网络听起来很酷,但是在你学习之旅的开始,不要花太多时间去学习它们。如果你需要的话,你可以随时学习。

数据科学是一个广阔的领域,有许多不同的应用。根据你的工作,你可能永远不需要使用神经网络。况且,如果用更简单的模型解决一个问题,没有人会强迫你用深度学习模型。

你应该更专注于学习与机器学习算法相关的统计概念。提高你的统计知识肯定对你有很大帮助。

结论

成为一名数据科学家需要努力和奉献。最难的部分是找到你的第一份工作。一旦你进入了领域,剩下的就相对顺利了。

找到第一份工作之前的学习之旅已经是一个艰难的过程。除此之外,我在本文中提到的三件事可能会进一步降低您的速度。我认为避开他们对你最有利。

最后但同样重要的是,如果你还不是中级会员并打算成为其中一员,我恳请你使用以下链接。我将从你的会员费中收取一部分,不增加你的额外费用。

https://sonery.medium.com/membership

感谢您的阅读。如果您有任何反馈,请告诉我。

定量研究中影响数据质量的 3 件事

原文:https://towardsdatascience.com/3-things-that-influence-your-data-quality-in-quantitative-research-c86c675aa4e9?source=collection_archive---------26-----------------------

市场研究中的常见限制—样本、数据收集和问卷调查

图片由 Emilian Vittoriosi 在 Unsplash 上提供

市场调研收集和分析数据和意见。有定量和定性技术。定量通常有问卷。

例如,意见池、消费者研究、品牌跟踪和长期行为研究。定性的是焦点小组、聊天室、深度访谈、演示或拼贴画。

定量研究的好处是相对快速客观。你选择你的目标人群,收集数据,处理数字,你就有了答案。

然而,需要注意一些质量限制:样本、数据收集方法和问卷。

1.样品

任何研究都需要一个样本定义。按样本是你要检查的总体的一部分。以下是在线调查的人口漏斗示例:

Ivona Fikejzlova 提供

在一个国家或市场中,有一个与每个人都相关的普通人群。然后,我们有了互联网人口,或者现在更确切地说是智能手机人口。

这些人一定在某个在线小组或数据库中。然后,我们有类别用户成为我们的受访者。

样本定义非常重要。它影响着你要为定量研究支付多少钱,以及你得到的数据质量如何。

根据你的业务,你可以在更广或更窄的范围内捕鱼。代表性的研究将复制人口景观。

你会有一个男女老少的样本。但是在商业上,你只关心你的品类用户或者潜在消费者。您有三个与样本相关的问题:样本定义过宽或过窄,以及样本大小。

1.定义过宽

  • 否定:结果不能很好地反映你的消费群体。你会有很多不相关的数据。
  • 正:可用于对比。如果你的目标人群是 18-25 岁的人,而你收集的是 26-35 岁的人的数据,你就能发现是否还有瞄准其他人群的潜力。如果您的样本范围更广,收集速度会更快。

2.太狭隘的定义

  • 负面:很难快速收集这样的样本(例如,使用奥迪智能手机应用程序并计划在未来 12 个月内购买新奥迪汽车的 70 岁以上的人)。也比较贵。你可以过分限制你的目标群体。如果这个品牌是为年轻人(20-30 岁)设计的,但是感觉年轻的人(50 岁以上)会购买它,那么你的数据就不完全相关。
  • 正面:狭义的定义应该会很好地击中类别用户。因此,他们的观点可以给你带来很多有用的见解,因为他们是从自己的经历中说出来的。

3.样本量

尺寸很重要。10 个人、100 个人或 1000 个人之间是有区别的。你无法避免数据差异。

如果你有足够的预算,去大样本量。数据越多对数据处理越好。可以做更精确的分割和统计操作。

小样本的一个问题是,如果你对一个相似的群体重复调查,你不一定会得到相同的结果。样本越大,数据越可靠。

2.数据收集

如果您决定需要收集一些数据,您可以选择如何收集。最常见的方法是在线调查。

它既便宜又容易。但是你也可以采用更老派的方法,比如纸笔、电话采访或平板电脑采访。

1.在线调查

  • 否定:他们的限制是,他们相对较短,以防止人们放弃调查。所以,你只能问几个问题。数据质量取决于在线面板的质量。有些情况下,你想只问年轻女性,但男性以虚假的个人资料进入你的调查。
  • 正面:回答者自己填。不应该有任何其他人的偏见。在线调查针对智能手机进行了优化,因此人们可以快速填写。您可以实时浏览回复。

2.离线调查

他们有点老派,但当你想检查整个人口时,他们仍然被认为是最有代表性的。

  • 否定:它们很贵,而且要花很多时间。你需要一个面试官来填写调查问卷。面试官可能会偏向答案,填错答案,或者完全作弊。所以,你需要监督员来检查初始质量。
  • 正面:你不依赖网络。您可以完全随机地收集数据。您可以控制收集数据的位置。

机构和小组经常声称他们有高质量的回答者和经验丰富的面试官。

但是你应该总是询问质量检查的方法。这两种数据收集方法都有其局限性和偏见,但质量检查对清理数据和获得可靠的结果有很大帮助。

3.调查表

最后,但同样重要的是,问卷会影响数据质量。它的结构带领受访者踏上旅程。

他们能立即感受到积极或消极。很多人不会起草中性问题。他们还经常询问不必要的个人信息,如收入、婚姻状况或宗教信仰。以下是一些良好问卷调查实践的提示:

问题应该:

  • 容易理解
  • 问一件事,不要一句话问多个问题
  • 不冒犯
  • 按逻辑顺序
  • 仅询问必要的个人信息

对问题的回答应该:

  • 有一个中间选择“既不是,也不是”
  • 知识问题有“我不知道”选项
  • 始终如一
  • 回答问题,不要回答其他问题

一份糟糕的问卷会给你错误的数据。所以,保持简单,简短,有条理。

如果需要的话,在问题前面加上额外的解释文字。这将有助于人们理解你的意图。如果你进行线下数据收集,你必须向面试官简要说明他们应该如何提问。

最终想法

一切都从商业问题开始。

定量研究可以为你提供答案。但重要的是要有相关和高质量的数据。并非收集的每个数据都具有相同的商业价值。

数据告诉你一个故事,描述行为和观点。所以,一定要想好样本和收集方法。

然后你拿到漂亮的问卷,你就有了你需要的一切。

附注:你应该会收到我的邮件。 在这里做!如果你喜欢体验媒介的自己,可以考虑通过注册会员 来支持我和其他成千上万的作家 。每月只需 5 美元。

学习数据科学时,3 件事可能会打破你的动力

原文:https://towardsdatascience.com/3-things-that-may-break-your-motivation-while-learning-data-science-d605d44e879f?source=collection_archive---------13-----------------------

以及如何克服它们

甘特·米尔勒在 Unsplash 上拍摄的照片

近年来,数据科学经历了巨大的普及增长。越来越多的企业投入到这一领域,从数据中创造价值。

因此,许多人决定转行进入数据科学领域。虽然听起来很吸引人也很有趣,但学习数据科学是一个令人疲惫且耗时的旅程。

让这一旅程更有效率是你的责任。然而,有些事情可能会对你的表现产生负面影响。

在这篇文章中,我将讨论我认为可能会打破你学习数据科学的动机的三点。我也将尝试提供克服这些挑战的建议。

范围谬误

数据科学是一个如此广阔的领域。哪里能接触到数据,哪里就能谈论数据科学。金融、医疗保健、零售、银行、计算机视觉和安全只是数据科学应用领域的一部分。

尽管数据科学是围绕共同的原则构建的,但不同领域的实施和应用可能需要不同的技术或方法。

当我开始我的数据科学之旅时,我打算学习数据科学如何在所有这些领域中使用。这是个大错误。一个人不可能专攻这么多领域。

了解数据科学在不同领域的一般应用是很有好处的。然而,如果你试图深入研究或专攻许多领域,大量的学习材料可能会打破你的动力。

我称之为范围谬误。你可能会说数据科学的范围是巨大的。我完全同意,但是一个数据科学家应该并且能够学到的东西是有限的。否则,你将很难取得像样的进步。

你应该获得某一特定领域的高级技能。例如,如果你掌握了时间序列分析,你就大大增加了在金融领域找到工作的机会。

工具谬误

Matplotlib、Seaborn、Altair 和 Plotly 是一些用于数据可视化的 Python 库。也有其他编程语言有数据科学库,比如 R 和 Julia。

因此,我们有大量的工具来学习、实践和实施数据科学。这既可能是优势,也可能是劣势,取决于你的方法。如果你试图掌握大量做同样事情的工具,那么丰富的工具选择就成了劣势。

每次我听说一个新工具,我都觉得我需要学习它。因此,我面临着堆积如山的学习材料。我现在称之为工具谬误。Matplotlib 或 Seaborn 足以创建几乎任何类型的数据可视化。TensorFlow 或 PyTorch 足以创建深度学习模型。你不必两者都精通。

我建议为特定类型的任务挑选一到两个库,尤其是在你学习旅程的开始。您将能够用任何库完成大多数典型的任务。

社区谬误

数据科学尚未在传统教育体系中得到很好的确立。我们大多通过 MOOC 课程、在线教程、博客帖子和类似的资源来学习。

学习数据科学的另一个非常有价值的资源是数据科学社区。已经在这个领域的人分享他们的知识和经验。这其实是一件非常好的事情。然而,如果你不能明智地表明立场,它可能会打破你的动力。

有经验的人组成的大社区,一开始让我觉得力不从心。我不是指有 10 年经验的数据科学家。在某些情况下,我觉得我远远落后于一个有一年经验的数据科学家。

没过多久,我就发现我可以赶上奉献。我建议利用别人分享的东西。你不应该让它让你感到不充分,打破你的动机。

很多人分享他们的知识并不意味着你落后了。把它当成一个向别人学习的机会,而不是一个动力破坏者。

结论

学习数据科学是一项具有挑战性的任务。这需要时间、努力,还可能需要钱。然而,让这一漫长的旅程更有效率是我们的责任。

你不应该因为我们刚刚提到的那些消极的事情而放松警惕。你应该永远记住,其他人也面临着同样的挑战。通过明智地处理这些挑战,你可以向前迈出一步。

感谢您的阅读。如果您有任何反馈,请告诉我。

激励有抱负的数据科学家的 3 件事

原文:https://towardsdatascience.com/3-things-to-motivate-aspiring-data-scientists-df9a1f867654?source=collection_archive---------39-----------------------

以及我找到第一份工作后的感受

照片由德鲁·比默在 Unsplash 上拍摄

数据科学是我们这个时代最酷的玩家。各个行业的公司都意识到了用数据创造价值的潜力。价值可以是任何形式的,例如改进生产过程、更好地预测需求、更准确的销售预测等等。

这样一个有着众多工作机会的热门领域吸引着人们。不仅学生,而且已经有职业生涯的人也决定在数据科学领域工作。

我是决定转行成为数据科学家的人之一。我花了两年时间在这个领域找到了一份工作。这是一次复杂的旅行。我真的很喜欢这个领域,所以我的旅程总的来说是令人兴奋和有趣的。我有时感到筋疲力尽,但从未失去动力。

在找到一份数据科学家的工作后,我意识到我做了一个多么正确的决定。漫长的夜晚和周末得到了回报。对我来说,这是晚上和周末,因为我必须在学习数据科学的同时保留我的另一份工作。

我想分享我认为会激励有抱负的数据科学家的 3 件事。

真实生活数据

我们工作最重要的部分是数据。没有适当的数据,我们只能了解皮毛。用于学习和实践的可用数据通常不是真实的生活数据。

现成的数据集几乎总是整洁干净的。它们不够有挑战性。你可以通过这样的数据集学习基础知识,过一会儿可能会变得有点无聊。

这样的数据集有助于练习和学习基础知识。然而,现实生活中的数据是杂乱的,而且要复杂得多。它需要大量的工作来清理、处理和推断有意义的见解。

一旦你开始作为一名数据科学家工作,你将有机会与现实生活中的数据打交道。这是非常有趣和令人兴奋的。你会觉得你正在完成适当的工作。

使用真实生活数据的另一个好处是你将有机会推断出有意义的结果。根据您所从事的领域,您可能会对数据告诉您或向您展示的内容感到惊讶。

协作环境

我遵循了一个自学的过程来学习数据科学。尽管有各种资源可供学习和提问,但拥有一位或多位数据科学家同事是一笔非常宝贵的财富。

你有机会讨论你的想法,进行头脑风暴。你会发现完成一项任务的不同方法。你将比以前更快地获得知识和提高技能。

协作的工作环境比最好的 MOOC 课程或在线证书更有价值。能够讨论您的解决方案或实现会让它变得更有趣。

你不会总是向你的同事学习。在某些情况下,你会提供一个更好的解决方案或者能够帮助一个同事。这样的环境会提升你的动力。

生产级数据科学

数据科学学习之旅可能会受到 jupyter 笔记本电脑的限制。我们从网上下载数据集,在笔记本上练习。典型的任务包括清理、预处理、分析和可视化数据。

这个工作流程非常适合学习和实践。但是,在生产层面工作的感觉是 jupyter 笔记本永远达不到的。当您看到您的解决方案第一次被部署并用于生产时,那种感觉是无价的。

在生产环境中使用真实的生活数据是我们无法通过证书、课程或教程实现的。一开始可能会很有挑战性,但会进一步激励和激发你。

不利的一面是,在生产环境中犯一个错误是代价高昂的。你必须格外小心。然而,错误确实会发生。不要让这样的错误打击你的积极性,把它们当成学习新东西和提高技能的机会。

在生产层面工作需要与其他专业合作,如软件工程师。在一些公司,你将需要扩大你的工作范围,做软件相关的工作。我认为这是获得新技能的机会。

结论

虽然数据科学是一个如此受欢迎和受欢迎的领域,但找到你的第一份工作可能比你预期的要难。有很多东西要学,如果没有以前的工作经验,展示你所知道的东西是不容易的。

然而,如果你坚持学习,你最终会找到第一份工作。我想分享我的经验,我认为这将进一步激励你达到你的目标。

我非常高兴我决定转行成为一名数据科学家。自从我开始作为一名数据科学家工作以来,我的动力和热情增加了。

感谢您的阅读。如果您有任何反馈,请告诉我。

关于您的数据,您应该知道的 3 件事

原文:https://towardsdatascience.com/3-things-you-should-know-about-your-data-9980cb0eb46e?source=collection_archive---------14-----------------------

…这样你就不会迷失在酱汁中

迭戈·PH 在 Unsplash 上的照片

你是否曾经被给予一个新的数据集去分析,而你甚至不知道从哪里开始?让数百万行您不熟悉的数据堆积在您的膝盖上可能会让人不知所措。

无论你是在金融领域,是一名数据分析师,还是在制作机器学习模型,你需要对你处理的数据有深刻的理解。否则——这是我的经验之谈——就像我喜欢说的,很容易迷失在酱汁中。如果你在真正理解数据集之前就组合和操作它们,你可能会制造出比你开始时更混乱的混乱局面。

因此,在您开始尝试计算度量值或将您的新数据放入可视化工具之前,您应该考虑以下三点:

1.字段数据类型和含义

对于记录良好的数据集,您可以在数据字典中找到这两条信息。然而,当您提取数据时,您可能并不总是得到数据字典,尤其是对于较小数量的数据(如 Excel 文件)。因此,看一看表中的每个字段并弄清楚以下问题是很重要的:

  • 当前的数据类型是什么?
  • 你应该改变数据类型吗?
  • 这个字段的含义是什么?
  • 该字段的命名是否恰当,或者是否应该重命名?

必要时,在分析开始时更改数据类型可以帮助您更快地生成分析和见解。此外,有时数据集会带有技术列名(例如从一些 ERP 系统下载的数据),因此您需要使用映射表来重命名这些字段,除非您经常处理数据,以至于已经记住了 5 个字母的标题。

最重要的是,您必须理解数据集中每个字段的含义。你可以通过询问公司的主题专家、在线查看其他公开数据分析,或者进行一些探索性数据分析来做到这一点。

https://levelup.gitconnected.com/cozy-up-with-your-data-6aedfb651172

2.主键

这对于一些读者来说可能是显而易见的,但是如果您不总是与数据打交道,就有必要说明一下:您需要知道您的数据表的主键。

一个主键可以是一个字段,也可以是使记录唯一的字段组合。最简单的情况是一个带有记录 ID 列的表。因为该列包含每个记录的不同编号,所以它是唯一的标识符。

许多数据集都有一个由多个字段组合而成的主键。例如,如果您正在处理人力资源数据,主键可能是员工的名字、姓氏和生日的组合。即使有这三个值,您也可能在大公司中看到重复的值,因此您可能需要创建一个每个值都是唯一的雇员 ID 字段。理解主键对于正确连接数据集至关重要。

3.表关系

照片由阿丽娜·格鲁布尼亚在 Unsplash 上拍摄

如果您有多个相关的数据集,您可能希望在某个时候将它们连接在一起。如果您了解每个表中的主键是什么,这将为您决定如何连接数据提供信息。

大多数情况下,您并不试图在数据集中获取副本。但是,如果将一个数据集连接到另一个数据集的某个字段/字段组合上,而该字段/字段组合在其中一个表中不是唯一的,就会发生这种情况。

让我们重温一下人力资源数据。如果我们希望将员工个人数据与员工提交的报销单上的数据连接起来,并且我们只连接员工的名字,则每个人提交 1 份报销单的 8 个“John”将变成 64 行数据。(8 个表单记录中的每一个都有 8 个记录,包含不同的 John 信息。)而且你处理的数据越多,事情就会变得越混乱。

如果绘制出表之间的连接以及它们的主键,或者更正式地说,创建一个实体关系图,就可以避免这种令人困惑的数据混乱。了解数据集之间的关系也有助于了解应该使用哪种类型的连接。

总之

这三点只是你获得新数据时的一个起点。但是我认为这是一个全面分析或建模项目的良好开端。如果我可以再补充一条建议:永远保持批判性思维!很容易经历数据清理或分析的动作,然后只在最后意识到你的结果没有意义。从批判性思维开始将有助于你的项目走向成功,也能让你在未来免于头痛。

杰西·马丁尼在 Unsplash 上的照片

感谢阅读!请随意在 LinkedIn 上与朋友/同事/陌生人分享这篇文章。或者在 LinkedIn 上找我,这样我们就不是陌生人了。

3 个节省时间的 Python 技巧

原文:https://towardsdatascience.com/3-time-saving-python-tricks-a017f4215aeb?source=collection_archive---------3-----------------------

编程;编排

..这在我最近的项目中节省了 40%的时间!

由贾斯汀·维内玛在 Unsplash 拍摄的照片

用 pythonic 的方式编程让我比别人快了⚡1.8x

我最近的项目是一个系统的自动移动,图像处理和数据清理的结合。使用 Python 的内置函数和本文中的方法,我保持了代码的整洁和易于理解。

我在接下来的 3 分钟里解释的 3 个技巧将会大大节省你的宝贵时间⏳。

🎁一份 免费 机器学习认证可以额外外卖🏆来自这个故事!📚最后别忘了检查一下!

反转列表

在 python 中使用内置的reverse()方法来反转列表,而不是通过切片来完成。让我们从创建一个列表开始

# Create a list
mylist = list(np.arange(0,100))

颠倒列表的方法有:

# Reverse a list using built-in reverse()
mylist.reverse()# Reverse a list using slicing
newlist = mylist[::-1]

以上两种方法返回相同的输出,只是略有不同。内置方法reverse()改变了原来的列表,然而,列表的切片创建了一个新的列表。

我们来谈谈执行时间⏳。

reverse()和 list slicing | Image(按作者)的执行时间

显然,内置方法reverse()比列表切片的快 3 倍。

在我的项目中,对于系统的自动移动,我有一个位置值的列表,并不是每次都有用。每次都需要列表开头的几个值和列表结尾的几个值。早期的程序是使用列表切片编写的,然而,我使用reverse()重写了它,以实现程序的更快执行。

使用一行代码交换两个值

使用一行代码交换两个数字是一种真正的大技巧💡方式。与其他编程语言不同,Python 不需要使用临时变量来交换两个数字或值。

我举个简单的例子。

*# Create two variables
variable_1 = 100
variable_2 = 500*

要交换 variable_1 和 variable_2 的值,只需使用一行代码。

*variable_2, variable_1 = variable_1, variable_2*

所以,整个场景看起来像,

使用一行代码交换两个值|作者图片

我的项目并不简单。

我有一个字典,即键-值对,每个键都有一个值列表。因此,这个技巧节省了我工作中的多次迭代和复杂的数据转换,最终有助于减少执行时间。

在键-值对的情况下,不能直接使用键作为变量的名称。因此,这就是我在🛠️.所做的

只是为了简单起见,假设我的项目中的一个字典的名称为md

*md[key_2],md[key_1] = md[key_1],md[key_2]*

函数内部的 Use -for- loop

创建用户定义的函数是为了执行特定的任务。然而,我观察到,很多时候用户使用 for 循环多次迭代这些函数来执行特定的任务。

但是,在 for 循环中使用函数需要较长的执行时间,因为每次迭代都会调用函数。相反,如果 for 循环是在函数内部实现的,那么该函数将只被调用一次💡。

为了让文字更清晰,这里举个例子。让我们创建一个简单的字符串列表。

*listofstrings = ["apple", "orange", "banana", "pineapple", "grapes"]*

现在,创建两个函数,从简单的开始。

*# Create a function without for loop inside the function
def onlyfunction(inputstring):
    newstring = inputstring.capitalize()
    outputstring = inputstring+" "+newstring*

以及一个内部有一个for循环的函数。

*# Create a function where for loop is inside the function
def forinfunction(listofstrings):
    for inputstring in listofstrings:
        newstring = inputstring.capitalize()
        outputstring = inputstring+" "+newstring*

让我们使用这些函数,看看输出。

作者对两种功能|图像的使用

两个函数的输出是相同的🆒。

但是,故事并没有到此结束。是时候检查一下,哪一个更快⏰。

用于函数内部的循环|作者图片

当然,与没有 for 循环的函数相比,在函数中使用for循环会稍微快一些。

对于我的项目,我正在处理许多复杂的图像处理任务,在函数中使用 For 循环几乎比在每次迭代中调用相同的函数快 1.5 倍 ⚡。

当然,这些都是从我的经验中得到的提示,但是对每个有类似情况的人都有用。

使用 Python 的内置函数将会提高程序的速度,同时保持代码的整洁和易于理解。

想了解更多关于内置函数??

检查这个完整的列表。

Python 内置函数 |图片作者

感谢您的宝贵时间!

您可以随时联系我,获得建设性的反馈或关于数据分析的精彩讨论。📈📊 📉

对通过项目学习感兴趣??

在我的Github回购上查了一堆项目。📚📚

如何看完所有的中篇文章?

今天成为媒体会员&让⚡ 无限制 ⚡访问所有媒体故事。

在这里注册和加入我的电子邮件订阅

当你在这里注册并选择成为付费媒介会员,我会从你的会员费中获得一部分作为奖励。

如何获得免费的机器学习认证?

看看这个。

*https://medium.com/analytics-vidhya/best-machine-learning-certification-for-free-b0984efc7303 *

感谢您的阅读!投入你宝贵的时间!

更好地利用媒体上的数据科学内容的 3 个技巧

原文:https://towardsdatascience.com/3-tips-for-making-better-use-of-the-data-science-content-on-medium-45c11fb10c11?source=collection_archive---------24-----------------------

让它值得你花时间。

照片由 Unsplash 上的尼克·费因斯拍摄

Medium 在某种意义上是 YouTube 的书面版本。就像 YouTube 一样,Medium 有非常有价值的内容,可以学习几乎所有值得学习的东西。

考虑到数据科学的普及,媒体上有大量的数据科学内容就不足为奇了。

作为一名自学成才的数据科学家,我在 Medium 上学习了很多,我有一些提示,我认为这些提示将帮助您更好地利用它作为学习资源。

我不会告诉你每天读 x 的时间。目标是帮助你有效地利用时间。

因此,不管你在媒体上读了多少,这些建议都适用。

1.不仅仅是读书!

数据科学是一个跨学科的领域,需要掌握一整套技能。

技能组合的主要部分由软件工具和软件包组成。Medium 上有大量文章解释了如何在数据科学生态系统中使用软件工具。

其中一些更加具体,集中于如何执行特定的操作,而另一些则从总体上解释工具。

当谈到获得这些技能时,阅读必须伴随着动手实践。

文章中有一些例子,但是你不能仅仅通过阅读来学习。你明白,但不学。

为了真正学到东西,我们需要点燃神经连接。积极参与,或动手实践,是创造神经连接变化的基础。

如果你正在读一篇关于熊猫的文章,打开一个笔记本,自己做文章中的例子。

键入比复制粘贴文章中的代码要高效得多。即使你不得不看很多遍代码,也要试着输入。

如果作者提供了数据集,请确保下载并跟随。通过自己做额外的练习来超越文章中解释的内容是非常有帮助的。

2.具体一点

媒体上有许多数据科学文章。总之,它们为学习数据科学提供了非常丰富的课程。

但问题是,它们并没有系统地放在一起。

随机阅读媒体上的数据科学文章并不是学习数据科学的最佳方式。

如果你想成为一名自学成才的数据科学家,你首先需要的是一个结构良好的计划。

当用于学习特定主题时,中等最适合此计划。

假设您正在学习时间序列分析,并且您遇到了 Prophet 库,它是预测时间序列数据的一个很好的工具。

这就是媒介发挥作用的地方。它包含关于先知的文章。其中一些解释了如何使用这个库,一些展示了如何用它做一个项目。

数据科学的范围相当大。它有许多不同的应用领域。此外,不同领域使用的工具和技术可能会大不相同。

例如,如果你想在 NLP 中工作,你不需要学习时间序列分析。同样,如果您大量处理时间序列数据,那么您对图像识别也不会感兴趣。

你猜怎么着!Medium 有许多与图像识别、NLP 和时间序列分析相关的文章。从这个意义上说,随机阅读介质上的数据科学内容是浪费时间。

有一个结构良好的计划,缩小你的学习领域。更具体地说明你在媒体上阅读的内容。

这就是你如何充分利用它的方法。

3.在你读这篇文章之前,先看看评论

媒体承载着大量的内容。在丰富的文章选择中,一些可能会误导或包含错误的信息。

没有权威机构检查每篇文章内容的正确性。

好的一面是,Medium 不仅有伟大的作家,也有技术高超、知识渊博的读者。

如果一篇文章有问题,读者会在评论中指出。

你仍然可以从一篇有一些错误的文章中学习。但是,如果有很多关于在一篇文章中展示问题的评论,你可能应该远离它。

也有一些作品不值得你花费时间。他们往往有一个吸引人的标题来吸引注意力。

感谢 Medium 谨慎而见多识广的受众,这样的文章在评论里都有标注。

如果一篇文章被广泛传播或者有很多评论,确保你在开始阅读之前先看一下评论。

最后的想法

我在媒体上学到了很多,现在依然如此。我也写了两年左右的数据科学文章。

在一种情况下,Medium 显然是学习数据科学的最佳资源之一。我们应该明智地使用它。

遵循我刚刚分享的提示将帮助您更好地利用媒体上的数据科学内容。

最后但同样重要的是,如果你还不是的灵媒会员,并打算成为一名灵媒会员,我恳请你使用下面的链接。我将收取你的一部分会员费,不增加你的额外费用。

https://sonery.medium.com/membership

感谢您的阅读。如果您有任何反馈,请告诉我。

准备年终评估的 3 个技巧

原文:https://towardsdatascience.com/3-tips-for-preparing-for-your-end-of-year-review-35ef92a6cf77?source=collection_archive---------16-----------------------

以及为什么你应该尽早开始你的 2022 年回顾

伊恩·施耐德在 Unsplash 上拍摄的照片

随着我们开始接近年底,我们不仅要为假期做准备,还要为年底的回顾做准备。我见过的人们犯的最大错误之一是等到 12 月才写下他们的全部评估。你还记得这一年你完成的所有事情吗?我当然不知道。如果我们等到年底才开始评估,很容易忽略关键的成就、培训等等。了解这一点后,我想与您分享我在年终评估中关注的三个关键领域,以及我如何记录这一年,以便您可以在 2022 年强势开始。

造诣

我追踪的第一个领域可能是最常见的:成就。今年你完成了什么?当我开始我的职业生涯时,我常常通过陈述我所做的事情来列出我所有的成就。

  • 我创建了一个 CI/CD 管道。
  • 我更新了管道以包括自动化测试。

诸如此类。这是一个很好的起点,但是它有一个巨大的缺陷。你的结果是什么?这项工作你完成了什么?理解如何展示这些信息花了我一段时间。我分享了我所做的事情,但没有分享我在这项工作中所取得的成就。最后,我喜欢审视我的工作,在项目之前、之中和之后捕捉度量标准。

让我们看看上面的第一个要点;我创建了一个 CI/CD 管道。这条管道是干什么用的?首先,我制作了一个 CI/CD 管道,将代码从开发转移到生产。那稍微好一点,但是你用这项工作完成了什么?在我创建这个管道之前,我将捕获这项工作在当前流程中将代码从开发转移到生产需要多长时间。例如,在当前状态下,这项工作可能需要 8 个小时才能让某人在所有适当的批准都到位的情况下将代码手动转移到生产中。在管道开发之后,开发人员打开一个 pull request (PR ),一旦 PR 获得批准,自动化管道将代码从开发转移到生产。这个过程现在从头到尾需要 3 个小时。通过跟踪之前和之后的时间,我们现在可以展示我们的结果和我们工作的有效性。

❌我创建了一个 CI/CD 管道。
✅一世创建了一个 CI/CD 管道来自动将代码从开发转移到生产,将生产时间从 8 小时减少到 3 小时。

你措辞的变化和指标的加入让你的经理可以看到你的影响。

如何全年跟踪这一点?每个月底,写下你的成就清单。确保跟踪关键指标,如生产率提高、运行时间缩短、成本效率等。记录你做了什么,结果,以及人们对工作的任何值得注意的评论。

培养

我经常追踪的另一个容易在年底被忽视的领域是培训。现在我不是在说我们大多数人每年都必须接受的训练;我说的是你在职业发展上付出的额外努力。这可能包括您报名参加的课程、研讨会、认证等。

当我回顾这一年的训练时;我喜欢记下我参加了什么培训以及为什么。这项培训与我的工作有什么特别的关系?

  • 本次培训与您目前正在从事的项目有关吗?
  • 本次培训是否为路线图中即将到来的项目做好了准备?
  • 你是否正在努力实现职业发展目标或发展其他技能,以帮助你在职业生涯中更上一层楼?这里要考虑的一些领域是公共演讲课程、领导力发展和软技能。

培训和成就一样重要,因为它显示了你在做什么,你在哪里推动自己做得更好。

**如何全年跟踪此事?**在你参加的每个培训课程、会议或研讨会结束时,花点时间反思一下。写下 1-3 条重要的经验教训,它们如何应用到你的工作中,以及如何应用到你的目标中。这是展示你为实现自己设定的职业发展目标所取得的进步的好方法。

奖项、认可、专利等等?追踪他们

记录你全年获得的奖励、认可、专利等等,放在你的年终回顾中可能看起来很奇怪,但它会派上用场的!我经常在这个列表中包括的事情有:

  • 奖励/认可
  • 专利/商业秘密
  • 期刊或会议论文
  • 讲座、演示、小组活动
  • 委员会、组织、团体
  • 志愿者机会
  • 指导

我以前从未做过这样的清单,但在了解了技术人员在职业生涯中扮演的不同角色后,我发现这很有帮助。例如,我工作的一家公司有一个技术能力级别,叫做技术伙伴。这个工作角色不是你可以晋升的。相反,它需要一份你多年来在这个行业和公司的成就的详细申请。达到这一职位的工程师在退休或进入管理层之前处于最高水平。

如果你没有这样的成就清单,你能快速地列出来吗?我不会一下子就记住每一项成就,这就是为什么我开始每年追踪我的成就。如果你有一个清单,你就可以每年向你的经理和公司展示你所做的贡献,同时也有一个记录的积压。

**如何全年跟踪这一点?**其他类似的成就是我在写下来的时候不会过多详述的一个方面。取而代之的是,列出每一年的项目清单,以及组织/团体、日期和你所做工作的简要描述。这里包括的一个很好的项目是指导机会,特别是如果你想扩展到领导角色。

最后的想法

当您开始准备年终评估时,让我们也准备好开始跟踪明年的情况。尽早开始是一个很好的方法,可以确保你在关键的成就、培训和更多事情发生的时候抓住它们。要跟踪的一些领域包括:

  1. 每月记录你的成就。考虑度量和结果,而不仅仅是完成的任务。
  2. 追踪你的训练。你学到了哪些适用于你工作的经验教训?这次培训对你的职业发展目标有什么帮助?
  3. 你获得过任何奖励或认可吗?你参加过任何委员会、团体或组织吗?记下这些,尤其是如果你想成为研究员或技术领导者的话。

你一整年都在跟踪你的工作吗?如果是的话,你还会在清单上增加什么?

感谢阅读!我希望你喜欢阅读我所学到的东西。如果你愿意,你可以通过这个链接成为一名灵媒来支持我的写作。

处理不平衡数据集的 3 个技巧

原文:https://towardsdatascience.com/3-tips-for-working-with-imbalanced-datasets-a765a0f3a0d0?source=collection_archive---------23-----------------------

一些鲜为人知的处理那些讨厌的偏斜类分布的方法

来源( Unsplash )

真实世界的数据集有各种形状和大小。在某些时候,您会遇到目标类不平衡的数据集。这到底是什么意思?让我们来看一个来自 Kaggle 的例子。该数据集包含信用卡客户及其付款违约的详细信息。

我们这里的目标变量是default.payment.next.month,一个二进制变量,如果客户没有违约,它的类是0,如果客户违约,它的类是1。首先,我们将检查每个类有多少条目。

绘制我们的阶级分布

我们的目标变量的类分布

我们从上图中看到,几乎 80%的目标变量都有一个类0。这就是所谓的不平衡数据集。一个类别的条目比另一个类别的条目多得多,导致类别分布不均匀。你可能会想,为什么这会是一个问题,为什么我们必须以不同的方式处理这个数据集?

想象一下,我们有一个非常简单的数据集分类器,不管我们传递给它什么数据,它总是能预测0。通过使用原始准确度作为我们的度量,我们将得到接近 80%的准确度。对于分类器来说,这似乎是一个不错的分数,但实际上它会产生很大的误导。我们根本无法预测什么时候有人拖欠他们的付款!让我们创建这个简单的分类器和一个随机森林分类器作为基线模型。

检查虚拟分类器和随机森林分类器的准确性

  1. 选择正确的指标

这让我们确保使用合适的指标来衡量模型的性能。从我们前面看到的,准确性对于这个用例来说并不是一个合适的度量标准,因为我们的许多数据集条目都属于一个类。我们来看看几个备选方案。

Precision — Precision 是正确分类的阳性(1)样本数除以被分类为阳性(1)的样本总数。如果我们使用总是预测0的分类器,我们的精度也将是 0,因为我们没有将任何例子分类为阳性。

检查精确度分数

召回— 召回,也称为“敏感度”,是被正确分类的正例数除以正例总数。在我们的例子中,这将是我们的模型正确识别的值为1的条目的数量。使用我们的虚拟分类器,我们的召回率也将是 0。这个度量将帮助我们确定我们的模型是否正确地获得了数据集中的1条目,但是它仍然有一个主要的缺陷。如果我们的分类器总是预测每个例子的1,我们就能得到完美的回忆!另一方面,我们的精确度不会很高。我们需要这些指标之间的某种平衡来合理地评估我们的模型。

检查回忆分数

**F1 分数—**F1 分数是精确度和召回率之间的平衡。它由公式(2 精度召回)/(精度+召回)给出。该度量被证明适用于不平衡数据集,消除了普通精度度量的缺点。通过这个,我们应该能够以更好的方式评估我们的任何模型。

检查 F1 分数

2。建立交叉验证策略

我们不应该使用 scikit-learn 提供的默认 train_test_split ,而是应该尝试确保我们的分割准确地代表我们的目标变量的分布。一个非常简单的方法是在调用 train_test_split 函数时使用stratify参数。

绘制分割后数据的分布图

分成训练集和测试集后的类分布

进行这一小小的更改可以确保训练集和测试集遵循与原始数据集相同的分布。

另一种使交叉验证策略对类别不平衡更加稳健的方法是使用多个折叠或对数据的不同子集进行训练。为此,我们可以使用 StratifiedKFold 和 StratifiedShuffleSplit 来确保我们仍然遵循目标变量的分布。

StratifiedKFold 会将我们的原始数据集分割成几个折叠,每个折叠都具有与原始数据集相似的分布。这意味着我们可以在每个褶皱上训练一个模型,同时仍然确保我们的分布保持一致。StratifiedShuffleSplit 还保留了我们的目标变量的分布,但在每次迭代中使用整个数据集,并且不将其拆分成折叠。

使用 StratifiedKFold 评估模型

3。更改模型中的目标重量

默认情况下,模型将为我们的目标变量中的每个类分配相同的权重。如果我们的数据集在其目标类中有一个相对均匀的分布,这就很好了。在我们的例子中,我们希望根据数据集的偏斜程度对每个类使用不同的权重。

我们应该如何确定每个类使用什么权重?许多分类器都有一个class_weight参数,你可以在这里传入一个类似balanced的字符串。这应该会为您传入的数据计算出适当的权重。如果没有,scikit-learn 还有一个函数可以为我们计算这个。让我们看看如何在我们的模型中使用 class_weight。

训练模型时使用 class_weight

结论

我们看了 3 种不同的方法来帮助我们处理不平衡的数据集。

  1. 为我们的任务选择合适的指标。我们已经看到,有时候,在评估一个模型时,像准确性这样的度量标准可能会非常误导人。
  2. 使用良好的交叉验证策略。我们可以使用 StratifiedKFold 和 StratifiedShuffleSplit 等方法来确保我们的训练集和测试集遵循类似的分布。
  3. 为你的目标类设置类权重,给少数类更多的权重。使用这种策略使我们的模型更加重视少数民族,可能有助于更好地对其进行分类。

有了这些策略,您应该能够在未来轻松处理不平衡的数据集。

感谢您的阅读!

您可以通过以下渠道与我联系:

  • 中等
  • 领英。
  • Github
  • 卡格尔

关于 Pandas Groupby Aggregation (vs SQL)的 3 个提示

原文:https://towardsdatascience.com/3-tips-on-pandas-groupby-vs-sql-e6f85b07d6f0?source=collection_archive---------31-----------------------

如何在 Pandas groupby 和 aggregation 中生成与 SQL 相同的输出

目录

  • 按每列汇总
  • 按 DataFrame.agg 聚合**(推荐)**
  • 按字典和 DataFrame.agg (推荐)

1.介绍

**“创世纪做了任天堂做不到的事情”是 20 世纪 90 年代早期视频游戏市场上最经典但也是最有力的广告词之一。同样,“SQL 做了熊猫做不到的事情”**每当我面对熊猫的任何数据争论问题时,这一直困扰着我,而这些问题可以通过简单的 SQL 轻松解决。

作为一名仍在学习 SQL 和 Python ML 包的数据分析师新手,我一直在寻找一些方法来从一种语言到另一种语言产生相同的输出。我希望这篇文章可以至少在聚合函数方面证明上述断言是错误的,表明**“Pandas 做 SQL 所做的事情(在某些时候)”。**

这篇文章的目标是通过只使用 Pandas 来获得相同的 SQL 输出结果。我们将使用一个名为garments_simple的简化数据集。原始数据集可以在 UCI 机器学习资源库( 链接 )找到。

**SELECT** team, sum(over_time) AS sum_over_time, max(over_time) AS max_over_time, mean(incentive) AS avg_incentive, max(incentive) AS max_incentive
**FROM** garments_simple
**GROUPBY** team

输出包含over_timesummax 以及每个quarter分组的incentivemeanmax

Raw 'garment_simple '(左)-> Output 'garment_agg '(右)

2.每列合计

这是聚合列的最简单和最容易的方法。

  • 优点:容易、简单、易读
  • 缺点:可能会很冗长
**# Make empty dataframe and groupby by quarter**
garment_agg = pd.DataFrame()
garment_group = garments_simple.groupby('quarter')**# Aggregate per column**
garment_agg['sum_over_time'] = garment_group['over_time'].sum()
garment_agg['max_over_time'] = garment_group['over_time'].max()
garment_agg['avg_incentive'] = garment_group['incentive'].mean()
garment_agg['max_incentive'] = garment_group['incentive'].max()**# Reset Index**
garment_agg = garment_agg.reset_index()
garment_agg

3.通过 DataFrame.agg 方法聚合

第二种方法可能更适合聚合,因为它通过对象列包装聚合。

  • 优点:比第一种方法更简洁
  • **缺点:**如果列太多,可能会很冗长
**# Make empty dataframe and groupby by quarter**
garment_agg = pd.DataFrame()
garment_group = garments_simple.groupby('quarter')**# Add new columns by using .agg method**
garment_agg[['sum_over_time', 'max_over_time']] = garment_group['over_time'].agg(['sum','max'])garment_agg[['avg_incentive','max_incentive']] = garment_group['incentive'].agg(['mean','max'])**# Reset Index**
garment_agg = garment_agg.reset_index()
garment_agg

4.按字典和 DataFrame.agg 聚合

最后一个方法是创建包含所有聚合对象列和函数的agg_dict。您将能够根据agg_dict立即执行聚合。

  • **优点:**简洁,可读性强
  • **缺点:**需要额外的一行来替换多索引列名
**# Make empty dataframe and groupby by quarter**
garment_agg = pd.DataFrame()
garment_group = garments_simple.groupby('quarter')# Using dictionary to represent all the aggregation
agg_dict = {
    'over_time':['sum','max'],
    'incentive':['mean','max']
}**# Aggregate all at once**
garment_agg = garment_group.agg(agg_dict)
garment_agg**# Replace multi-index to singular index**
garment_agg.columns = [('_').join(column) for column in garment_agg.columns]
garment_agg = garment_agg.reset_index()
garment_agg

5.结论

熊猫groupby和集合函数在特征工程中经常使用。考虑到其简单性,推荐使用最后两种DataFrame.agg方法。希望这篇文章能帮助那些正在学习熊猫的人。

**完整的源代码可以在 这里找到

处理 C 中时间戳的 3 个技巧

原文:https://towardsdatascience.com/3-tips-to-handle-timestamps-in-c-ad5b36892294?source=collection_archive---------8-----------------------

处理时间序列中时区的简明指南

来自维基媒体的图像。许可证 CC BY-SA 4.0

无论是谁在时间序列分析中处理了带有时区的时间戳,总是会遇到一些令人头痛的问题。无论我处理时间序列多少次(在我的例子中不变地涉及处理时区),我总是必须重新审视它是如何工作的,因为它通常是反直觉的。

需求

处理时间序列通常涉及处理不同的时区。即使只使用一个时区,您可能仍然希望可视化您当地时区的数据,这可能会根据用户所在的国家而变化。

这种情况使得使用世界协调时作为参考很方便。为什么?因为它不会经历夏令时变化,并且很容易转换到任何时区。

就如何表示时间戳而言,它可以是:

  • 语言特定的日期时间对象,
  • 基于整数的人类可读格式(即日期为 20210126,时间为 1530),
  • 人类可读文本格式(即 1999–01–01t 00:00:29.75),
  • UNIX 纪元时间。

我更喜欢最新的,因为它简化了时间的计算。要迭代一分钟,你只需要将你所处理的时间光标增加 60。它还精确地定义了时间中的某个时刻。如果您有数百 Gb 或 Tb 的数据,纯数字表示是可行的方法。

我将为这种情况提供一些例子,所有的例子都可以在文档和问答论坛中找到——这里没有什么新的或奇特的东西——但是这些信息经常被隐藏在其他解释中,通常是像将特定的本地化时间戳转换为 UNIX Epoch 这样简单的事情,而相反的事情并不像应该的那样简单。

时间戳需要时区

如果你说是【2021 年 3 月 28 日 09:30 并且你认为你完成了,那你就错了。接下来的答案是,好的,是【2021 年 3 月 28 日 09:30 ,但是 在哪里 ?每个时间戳必须有一个位置或时区,可以是隐式的(按照惯例,该数据库中的所有时间戳都使用法兰克福时间),也可以是显式的。所以,如果你提供数据,帮你自己和其他人一个忙,做一个明确说明包含时间戳的时区的练习。这可能是显而易见的,但我向您保证,我所看到的涉及时间戳的数据集有一半以上都缺少这种信息。

时区不是给定地点的时间

我在处理这个问题时发现的第一个错误是很容易混淆概念。您经常会听到诸如“法兰克福比纽约早 5 个小时”或“纽约时区是美国东部时间”之类的错误说法。

法兰克福有时比纽约早 5 个小时,但在其他地方则是 6 个小时,具体时间取决于您所处理的具体年份。

纽约不是东部时间,纽约有一半时间是东部时间,另一半时间是东部时间。过渡发生的时间每年都不一样,甚至在不久的将来会消失。

东部时间不是东部时间,而是东部标准时间(当然也不是我听说的“复活节时间”)。如果你想说东部时间,那就是东部时间。

犯这样的错误是可以的,因为我们都是从那里开始的,但是这些错误需要尽快改正,否则你将会做错误的计算。

我发现处理与特定地点相关的时间序列(在我的行业中,是在给定交易所交易的金融数据)的最简单方法是处理实际的地区/城市。因此,说“纽约时间”意味着它将是美国东部时间或美国东部时间,这取决于具体的年份和日期,但时间戳是正确定义的。这通常也是存储数据的正确方法,因为无论发生什么情况,在给定的时间都会发生许多事件。股票交易所通常在每天 9:30 开门,你在每天下午的同一时间为你的孩子跑步,他们不会根据是否遵守夏令时来修改它。

指定时区可能无法唯一地定义某个时刻,因为在夏令时调整期间,可能不清楚您指定的确切时刻,但所有夏令时调整都发生在周末。如果您的数据缺少周末(比如来自许多业务相关领域的数据),那么您就不会关心这个细节。

如果夏令时的变化很重要,因为您的数据可能发生在周末,那么您必须始终使用 UTC,因为它不会经历任何变化。这就是为什么军方使用祖鲁语时间的原因,因为这是一种全球共享的指定时间的方式。

提示 1 :当你指定一个时间戳的时候,一定要指定这个时间属于哪个特定的地点(城市)。如果您的时间序列涉及周末,请使用 UTC。

使用 UNIX 纪元

UNIX 纪元时间被定义为自 1970 年 1 月 1 日 00:00 UTC 以来经过的秒数。请注意,UNIX Epoch 是 UTC,因此它可以准确无误地识别特定的时刻。永远不要询问 UNIX epoch 时间戳的时区,根据定义它是 UTC。

关于 UNIX 纪元的一个特别的警告是闰秒,但是除非您必须处理闰秒,否则 UNIX 纪元很好。还要记住,当使用 32 位有符号整数时,UNIX epoch 可以表示多达 2038 个时间戳的时间。有关详细信息,请参见[1],但通常这些限制不会对您的应用产生影响。

提示 2 : UNIX epoch 时间戳是一种存储给定时刻的便捷方式,它们通常足够准确,并且允许做一些简单的事情,比如加 60 来得到下一分钟。它们也很有效,因为只有 4 个字节可以用来存储时间戳。作为 UTC 的定义,不需要传递时区,您总是知道如何将时间戳转换成任何时区。

UNIX epoch 给出的精度是一秒,尽管经常使用备用版本处理毫秒。

ANSI C

我们将开始回顾 C 如何处理时区和时间戳。在 C 语言中,这个标准从来没有覆盖不同的时区,但是从 80 年代开始,它已经覆盖了所有的 UNIX 系统。

可以使用 32 位整数存储 UNIX 纪元时间,在标准中,该类型是传统上为整数的 time_t 。该标准没有定义具体的类型(在我的 64 位 FreeBSD 框中使用 clang 是一个长的)。

因此,如果您想指定一个 UNIX 纪元,您可以这样做:

/* 1616927900 Epoch is Sunday, 28 March 2021 10:38:20 GMT 
   1616927900 Epoch is Sunday March 28, 2021 06:38:20 (am) in time zone America/New York (EDT)
*/time_t epoch_time = 1616927900;

在 POSIX 系统(所有 UNIX/Linux/BSD 系统)中,您可以使用 TZ 变量将它转换成任何带有时区的时间戳。假设您想知道纽约特定 UNIX 纪元是什么时间。然后你做:

/* 1616927900 Epoch is Sunday, 28 March 2021 10:38:20 GMT 
   1616927900 Epoch is Sunday March 28, 2021 06:38:20 (am) in time zone America/New York (EDT)
*/time_t epoch_time = 1616927900;/* CONVERT TO struct tm */
struct tm *converted_time;
converted_time = localtime(&epoch_time);/* GET SYSTEM TIME ZONE */
tzset();/* DISPLAY TIME */
char buffer[26];
strftime(buffer, 26, "%Y-%m-%d %H:%M:%S", converted_time);
printf("Timestamp for %ld is %s according to system timezone.\n", epoch_time, buffer);/* DISPLAY TIME ZONE */
printf("Timezone for %ld is %s.\n", epoch_time, tzname[converted_time->tm_isdst]);---$ TZ='America/New_York' ./test
Timestamp for 1616927900 is 2021-03-28 06:38:20 according to system timezone.
Timezone for 1616927900 is EDT.

struct tm有一个名为tm_isdst的字段,可以是-1、0 或 1。

-1 用于指定一个给定的时间戳(我将在后面介绍这种情况),0 表示没有实行夏令时,1 表示实行夏令时。

tzset将检索计算机的特定区域,当使用localtime时,localtime 将使用它来填充tm_isdst,以便 struct 的字段给你正确的 struct。tzset还设置外部数组tzname,可用于获取时区名称。

如果您想使用不同于系统使用的时区,您有两种选择:

  1. 你可以在你的程序前面加上正确的 TZ 变量:$TZ='America/New_York' ./my_program。这不是 C 的一部分,而是 UNIX shell 在调用命令时定制环境的方式。
  2. 在调用tzset之前,可以用putenv("TZ=America/New_York");显式设置 TZ 变量。

如果您想做相反的事情,即获得给定本地化时间戳的 UNIX 纪元(问题将是:哪个 UNIX 纪元对应于纽约 2021 年 3 月 28 日星期日 06:38:20?)这是您将使用的代码:

/* 1616927900 Epoch is Sunday, 28 March 2021 10:38:20 GMT 
   1616927900 Epoch is Sunday March 28, 2021 06:38:20 (am) in time zone America/New York (EDT)
*//* GET SYSTEM TIME ZONE, MUST BE NEW YORK */
tzset();/* DEFINE THE TIMESTAMP struct tm */
struct tm localised_time;
localised_time.tm_year = 2021 - 1900;
localised_time.tm_mon = 3 - 1;
localised_time.tm_mday = 28;
localised_time.tm_hour = 6;
localised_time.tm_min = 38;
localised_time.tm_sec = 20;
localised_time.tm_isdst = -1;
time_t epoch_time = mktime(&localised_time);/* NOTICE HOW mktime FIXES tm_isdst */
printf("Fixed tm_isdst is %d.\n", localised_time.tm_isdst);/* DISPLAY TIME ZONE */
printf("Timezone is %s.\n", tzname[localised_time.tm_isdst]);/* DISPLAY EPOCH */
printf("Epoch timestamp is %ld.\n", epoch_time);---$ TZ='America/New_York' ./test2
Fixed tm_isdst is 1.
Timezone is EDT.
Epoch timestamp is 1616927900.

请注意,在struct tm中,年份被指定为自 1900 年以来的年数,一月的月份为 0。我们对tm_isdst使用-1,mktime使用tzset检索的时区来确定这个值,并确定在纽约的那一天和时间是美国东部时间还是美国东部时间。

很明显,只有当你的计算机位于美洲时区,或者你明确地为程序设置或传递了 TZ 时,这种方法才有效。另请注意,这不适用于 Microsoft Windows。

提示 3 :在 C UNIX/POSIX 时区资源和基本 struct tm 中,mktime 和 localtime 函数可以用来处理时区。它在大多数情况下都能很好地工作,并且可以与所有现成的 C/C++标准一起工作。

我在 C 语言中使用这些简单的方法成功地处理了时区。在其他情况下,这种简单性可能还不够。

C还有其他处理时区的方法,最相关的是 C20 标准的 chrono [2】库部分(该库也可以为旧标准编译)。Boost【3】也包含了一个处理时区的库,但是显然,它缺少一些时区或者有限制——我没有试过——。还有 ICU 库[4]来处理本地化,这似乎是详尽和完整的,还有许多其他开源解决方案。所有这些的问题是,你给你的系统增加了另一个依赖,我发现它们不容易使用。

我发现上面的方法对我的需求来说足够简单,但是它只对 UNIX 系统有效。它适用于任何 C/C++标准。

[1]https://en.wikipedia.org/wiki/Unix_time

[2]http://www.cplusplus.com/reference/chrono/

[3]https://www . boost . org/doc/libs/1 _ 74 _ 0/libs/locale/doc/html/dates _ times _ time zones . html

http://site.icu-project.org/

防止您的项目最终成为数据科学墓地的 3 个技巧

原文:https://towardsdatascience.com/3-tips-to-prevent-your-project-from-ending-up-in-the-data-science-graveyard-be523d695069?source=collection_archive---------16-----------------------

87%的数据科学项目从未投入生产。你如何增加你的项目存活的可能性?

michal dziekonski 在 Unsplash 上拍摄的照片

研究显示 87% 的数据科学项目从未投入生产( VentureBeat 2019 )。作为一名数据科学家,我目睹了数据和人工智能项目在所有阶段的成功和失败:研究、开发和部署。为了取得最大的成功,我已经确定了三个内部原则,它们增加了项目投入生产并向客户交付有意义的价值的可能性。了解如何让您的数据科学项目远离数据科学墓地,而是让它进入您的用户手中。

1.定义商业价值

世界各地每天都有成千上万个项目开工。每一个都有相关的成本。您如何确定项目的商业价值并确保成本安全?在建立模型之前,你必须思考:从业务团队的角度来看,什么会使这个模型成功?

以下是一些例子:

  • 产品推荐系统:增加购买的回头客,减少结账时间,增加每位顾客的平均购买量
  • 道路探测系统:事故数量减少,保险索赔数量减少
  • 疾病检测系统:降低医疗成本
  • 缺陷产品识别:减少缺陷产品的退货次数,降低退货成本

你可能会注意到一个共同的主题:金钱。因为项目是有成本的,所以除了其他收益之外,将商业价值表述为成本是至关重要的。你会为用户节省时间吗?然后计算用户的时间成本,或者他们可以做些什么。

确保你确定了一种测量方法,这样你就可以在整个过程中跟踪结果。测量应该在项目开始之前、整个测试过程中和部署之后进行。记下使用该模型的人数。你可能看不到可衡量的好处,直到你扩大到大量的观众。向经理展示您的项目自实施以来回头客增加了 3 倍,这将为增加模型采用或增加必要的资金提供令人信服的论据。

2.吸引关键利益相关方

你的关键利益相关者是这个模型的最大支持者。数据科学模型可能很难采用,您的关键利益相关者对用户和能够影响您的项目的同行都有影响力。

像对待房屋建筑项目的新业主一样对待你的关键利益相关者。项目的每一步都应该通知他们。在开始项目之前,他们应该知道最终产品、产品成本和完成时间。在早期,就第一次发布的时间点达成一致。

每个模型的基础都是数据。确保主要利益相关者了解用于构建模型的材料。他们应该参与数据收集讨论,为项目的成功奠定基础。当构建复杂的模型时,可解释性是一个挑战,对你的数据有信心将帮助你的涉众获得将模型投入生产的信心。

模型部署后,数据科学家可能需要转移到下一个项目。在整个项目中与关键的涉众接触将教会他们如何关心模型。他们应该熟悉所有的成分和高层次的图片,以便他们的团队可以在未来维护和改进模型。

3.建立一个原型

通过为用户创建原型来可视化价值并开始初始测试,将您的数据科学项目带入生活。你越早可行地达到这一点越好。许多利益相关者和用户可能会发现很难想象结果和对他们的影响。原型将使这一点变得清楚。

许多模型需要大量的测试,构建原型将允许用户帮助改进模型,允许早期测试并构建一个社区来帮助模型随着时间的推移而改进。

IDEO 创始人大卫·凯利说过“失败得越快,成功得越快”。采取这些步骤来帮助你的项目走上成功的轨道,并专注于有效地完成它们。你越早在整个步骤中测试你的项目,你就会越早发现——也许是时候把你所学到的带到一个新的想法中了。

最后的想法

作为一名数据科学家,认识到有些项目无法投入生产是很重要的。如果你学会了,这些项目并不是失败的。我了解了价值衡量、关键利益相关者和原型的重要性。我还为未来铺平了道路——灌输更好的数据收集流程,修复业务流程中的漏洞,并向业务用户介绍使用人工智能的新方法。

你从数据科学墓地学到了什么?我邀请你在评论中加入你的想法。

感谢阅读我的文章!如果你喜欢阅读这篇文章,并想阅读我的更多内容,你可以在这里关注我。

成为数据科学家的 3 个秘诀

原文:https://towardsdatascience.com/3-tips-to-succeed-as-a-data-scientist-3f2c3c48555f?source=collection_archive---------31-----------------------

办公时间

由Patrik gothe在 Unsplash 上拍摄

我之所以想写这篇博文,是因为我非常清楚,作为一名数据科学家开始一份新工作可能会非常具有挑战性,尤其是如果你像我一样来自另一个行业,或者如果这是你的第一份工作。在这篇文章中,我想讨论一些我面临的主要困难,以及一些通用的提示和建议,让那些刚开始从事这一工作的人生活得更轻松。显然,这完全是基于我自己的经验,其他人可能面临不同的挑战,但我认为这些技巧足够通用,至少其中一些适用于开始从事数据科学工作的人。

有几件事我想特别谈谈,我认为它们非常重要。这些是:

  • 与利益相关方合作
  • 分析工作流程
  • 持续学习和发展

与利益相关者合作

其中第一点可能是最重要的,并真正影响到后面的几点。与利益相关者一起工作是我最初挣扎的事情,我相信其他数据科学家也面临这个问题。它实际上源于数据科学家和利益相关者之间的知识不匹配,这是双向的。通常,利益相关者不具备深入的编码、分析或机器学习知识,数据科学家,特别是如果他们是业务新手,缺乏业务或特定领域的知识。简而言之,他们说的不是同一种语言。那么这有什么样的含义呢?

往好里说,它会导致一些令人困惑的对话,往坏里说,它会导致在错误的问题上浪费大量的时间。我一般会说,这取决于数据科学家,以确保他们了解利益相关者,特别是他们的目标和他们试图实现的目标。根据我的经验,来自涉众的疑问或问题通常会非常模糊,很难转化为一个分析性的问题或模型。好消息是,随着时间的推移,这变得越来越容易。

我学到的东西

  • 试着用他们的语言说话 。我的意思是试着把你的解决方案框定在他们能理解的范围内。你可以实现一个具有 99%准确率的奇特模型,但这在商业术语中实际上意味着什么呢?尝试将您的分析解决方案与他们关心的 KPI 联系起来,或者表达收入方面的预期影响,每个人都理解金钱。这里的就是这样做的一个例子。
  • 使用简单的观想。 小提琴情节并不简单,即使它们看起来很棒,可以告诉你很多关于你的数据。(如果你的数据不符合正态分布,它们可能会让人们特别困惑,去做一个箱线图,甚至一个条形图,把更复杂的东西放在附录里。如果人们想了解更多细节,请指引他们到这里。)

我的建议

  • 如果你认为项目不太可能成功,你可以说不:你总是可以考虑如何将原来的目标重新定义为一个相关的、可实现的目标,或者转移到一个新的问题上。如果你对你的角色不熟悉,问问你的团队成员他们是怎么想的。他们通常会建议你什么问题是可行的。当然,可能以前没有人研究过这个问题,所以有很大的不确定性。在这种情况下,我建议定义一些初步的探索性目标,如果结果看起来不乐观,愿意继续前进。这有助于避免在错误的问题上浪费太多资源。
  • 定期与你的利益相关者交谈。你的工作是了解你的利益相关者想要什么,并确定它是否可行。你应该定期向你的利益相关者更新你工作的进展和可能的方向。他们可能会给你一些有用的见解和建议,让你理解你的结果。
  • 学会用非技术的方式解释事物。当你对利益相关者说话时,这是非常重要的。你需要考虑你的听众,他们是技术人员还是非技术人员?这适用于任何类型的交流,无论是演示、会议还是电子邮件。如果可能的话,提前知道这一点是很重要的,因为这可以帮助你设定你的解释水平。如果你不能让人们相信你所做的事情是有价值的,它很可能不会被实施。我仍然努力做到这一点,有时不用行话,但我想熟能生巧。使用良好的观想往往比书面或口头解释更有影响力。
  • 尝试围绕你的分析或结果展开一个故事。 这与上面的观点密切相关,但如果你能围绕这个问题编一个故事,这将是给你的作品留下持久印象的非常有效的工具。试着思考以下问题。你想解决的问题是什么?为什么重要?您的解决方案会对业务产生什么影响?
  • 方案很少完美 。大多数时候,你无法实现一个完美的解决方案。您通常必须做出权衡,最终的解决方案也不是没有限制。很难决定哪种方法是正确的,但一般来说,我更喜欢最简单的解决方案(奥卡姆剃刀)。例如,如果你正在建模,至少在开始的时候坚持像逻辑回归这样简单的东西。根据我的经验,人们通常不愿意使用黑盒解决方案。您还可以利用 SHAP 或 LIME 等工具来提高模型的可解释性。最近,我一直在玩一个名为 explainerdashboard 的库,试图让我的模型更加透明。

分析工作流程

在本节中,我想描述一些分析工作的一般原则,以及我们如何设计可重复且更高效的工作流程。我使用的工具和工作流程会因任务的不同而稍有不同,但我将通过一个我处理过的问题类型的例子和一些我认为非常有用的工具来介绍。

这是一个轻微的题外话,但是对于任何希望成为数据科学家的人来说,第一个建议就是要擅长 SQL 。哪种风格并不重要,但精通 SQL 非常重要。我在目前职位上参与的所有项目都有一个共同点,那就是 SQL。我团队中的所有数据科学家每天都使用 SQL 进行分析工作。我们还试图提升技能并鼓励非数据科学家使用它,即使非常简单的查询也能提供强大的洞察力。好消息是学习 SQL 的基础知识非常容易。对于更高级的查询,我们通常只是建立在基本概念的基础上。当我提高 SQL 技能时,我发现一门课程非常有用,那就是关于 Udacity 的这门课程。它涵盖了基础知识,并通过一个实际的案例研究进入了更高级的主题。我向任何想提高 SQL 技能的人强烈推荐它。我还会建议你仔细研究一下这些问题中的一些问题,因为它们在复杂性上可能更接近你在现实世界中会发现的问题。

我认为值得一提的另一点是,花一些时间去真正理解你公司的数据。如果你足够幸运,在一家拥有优秀数据工程师和数据基础设施的公司,那么这一步会容易得多。一般来说,回答下面的一些问题会使查询的构建变得更加容易,并且减少出错的机会。(如果您对数据仓库有一个良好的 ERD ,那么许多问题都可以得到解答)。

  • 你有可能用到的关键表有哪些?
  • 表格是如何构成的?即列的数据类型是什么?
  • 表格之间是如何关联的?即一对一、一对多的关系(对于 joins 很重要:我以前被这个刺痛过)
  • 缺失值是如何记录的?例如,如果用户今天没有付款,记录为空还是 0?
  • 表格是如何以及何时更新的?

好了,我们已经谈了一点 SQL 的重要性。在我们开始分析并开始用 SQL 或 Python 编码之前,写下我们需要做什么的高级计划是一个非常好的主意。当开始一个项目时,这是必须的,因为它可以防止你偏离项目的主要目标。为此我一般用特雷罗 。当开始一个新项目时,我会创建一个白板,通常会有一个 背景列表、一个待办事项列表、一个正在进行的列表和一个已完成列表 。然后,我会制作几张卡片,概括介绍问题、目标和可交付成果。让你的利益相关者也加入这个讨论板通常是一个好主意,这可以为会议上的讨论点提供基础。现在,您也可以使用另一个工具来完成这项工作,但要点是,我们已经清楚地列出了项目的一些关键信息。

我们举一个项目的例子,说说工作流程和我用的一些工具。假设我有一个需要做一些探索性建模的项目,这个工作流程会是什么样子?

假设我已经在 Trello 创建了一个高级计划。开始分析时,我要做的下一件事是创建一个 git repo 。我确信我不需要向你们任何人解释版本控制的重要性,但是这是分析项目的一个重要组成部分。同样,我通常用我最常用的库创建一个新的 Conda 环境。你可以更进一步,使用一个 docker 容器。为了保持一致的项目结构,我们还可以使用cookiecutter来创建典型数据科学项目的模板。创建一个像这样的标准化项目模板对你自己和团队中的其他人都很有帮助,尤其是当他们要审查你的工作时。我做大部分的编码工作,特别是在 J upyter 笔记本或 Jupyter 实验室中的探索性分析。您还可以为 Jupyter 笔记本电脑添加不同的 Conda 环境,这使得在多种环境之间切换变得非常简单。下面的代码展示了如何创建一个新的 Conda 环境,将其添加到 Jupyterlab,并设置 cookiecutter 数据科学模板。如果您的基础环境中安装了 Jupyterlab,那么您可以启动 Jupyterlab 并在 conda 环境之间轻松切换。

**conda create --name ds_env python=3.7
conda activate ds_envconda install -c conda-forge cookiecutter
cookiecutter https://github.com/drivendata/cookiecutter-data-scienceconda install -c anaconda ipykernel
python -m ipykernal install --user --name=ds_env**

如果我处理大量数据或需要更多计算,我倾向于使用 AWS Sagemaker,而不是在本地工作。 如果您正在开发的模型将在 AWS 上投入生产,这将特别有用。和同事分享笔记本也很容易。AWS 上有很多很好的机器学习功能,例如各种内置模型、自动超参数调整和与 git 的集成,但我不会在这篇文章中深入讨论这些,但如果你感兴趣,AWS 有一个很棒的博客,它详细描述了其中一些功能。

如果我正在做的项目更多地与 ETL 相关或者涉及到改变生产代码,我倾向于使用 VScode 。我是这个 IDE 的忠实粉丝,你可以添加许多扩展,让你的生活更轻松。添加 python 扩展后,我们获得了一些真正有用的功能,如调试器(非常有用)、语法高亮、自动完成和智能感知。您还可以直接从 IDE 中使用 Jupyter 笔记本,这是一个额外的好处。

我最近开始使用的另一个工具是 MLflow 。它是管理机器学习生命周期的工具。总的来说,它使跟踪您的模型实验更加容易,提高了可重复性,并使部署更加容易。

我经常使用的最后一个工具是Con flow。你可以在这里使用任何你想要的东西,只要你在记录你的工作。这不仅对我们自己很重要,对向团队成员和其他同事展示我们的工作方法和成果也很重要。拥有这个团队已经完成的工作的中央存储库是非常有用的,并且可以非常容易地共享团队正在进行的不同项目的见解和结果。我建议的另一件事是大量记录你的代码,不管是 SQL,R,Python,还是其他。我不知道有多少次我回头看一个查询或一段代码,不知道我到底在做什么。写注释,特别是对于复杂的逻辑。以后你会感谢自己的,我保证。

我使用的主要工具汇总

  • 特雷罗

  • Git

  • 康达环境/ Docker。

  • Jupyter 实验室/ Sagemaker / VSCode

  • 合流

持续学习和发展

我想讨论的最后一个话题是,数据科学家需要不断学习。作为一名数据科学家,渴望并愿意获取知识是非常重要的。数据科学是一个新兴的广阔领域,几乎不可能知道所有的事情,但随着时间的推移逐渐获得越来越多的知识对你的职业生涯将是无价的。我看到一些文章推荐数据科学家专攻某个特定领域,以确保他们对雇主来说是一个有吸引力的潜在客户。虽然我不一定不同意这一点,但我确实认为,在专注于一个领域之前,先在几个不同的领域获得经验可能更重要,尤其是在你的公司内部。为了发展你的技能,我建议做的一件事是制定一个 发展计划

列出你想学习或改进的领域或工具是帮助你提高技能的好方法。我建议为自己制定一个高水平的发展计划,列出你希望在未来 6 个月到 1 年内实现的目标。在我的公司,我们被鼓励制定发展计划,但这是你可以自己做的事情。但是,与您的经理分享这一点可能是个好主意,因为他们可能会为您提供培训和项目来帮助您实现这些目标。如果你想进入数据科学领域,这也是一个很好的练习,可以帮助你确定你需要努力的领域。

例如,对我个人来说,在接下来的一年里,我希望提高我对云基础架构的了解,特别是 AWS。我想努力获得 AWS 机器学习专业证书。我也想提高我的深度学习知识。我是在线课程的忠实粉丝,正计划参加 Coursera 的深度学习专业课程。通常,在完成课程后,我喜欢尝试并创建一个个人项目来巩固我所学的主题。陷入一个项目是测试你理解能力的一个很好的方式,并且会帮助你更长时间地记住信息。****

例如,我的高级发展计划中的这两个目标如下图所示。我制定了我的高层次目标,列出了我计划如何实现它们,我的关键时间表是什么,以及我认为会在这个过程中帮助我的任何资源。

示例:高级发展计划

除了发展计划之外,当我试图学习新的东西时,我通常还会做一些事情。希望你也能发现其中一些有用的提示。

包括我在内,人们最纠结的一件事就是如何开始。即坐下来研究或解决问题。这些事情很难,总的来说,我们的大脑很懒,他们不喜欢做需要努力的事情。为了克服这一点,我经常尝试让 给自己做工作的 某种奖励。这可能就像工作一小时后喝杯咖啡或看一段 youtube 视频一样简单。这听起来很傻,但它通常会让开始变得容易一点。

这似乎是显而易见的,但是要找到与你所学的和你个人兴趣相关的 项目。 例如,如果你正在学习随机森林,并且你喜欢篮球,使用随机森林来预测篮球比赛结果。这给你一个更好的机会坚持下去,因为你会更喜欢它。你也可能对数据有一些很好的见解,因为你已经有了一些领域知识。

我最喜欢的学习方式一直是在线课程、书籍和个人项目的结合。以下是我过去使用过的资源列表,我发现这些资源对于学习与机器学习、数据科学和编程相关的主题特别有用。

书籍

  • Aurelien Geron:这本书到处都值得推荐。它包含理论和代码的完美结合,让你用 python 估算算法。我还没有看完深度学习部分,但期待着阅读它。
  • Christopher Bishop 著 模式识别和机器学习:这本书并不容易阅读,但它包含了你将会遇到的主要机器学习算法的真正深入的推导和解释。当我学习 k-means 和高斯混合模型时,这本书很有帮助。
  • 商业数据科学:这是一本开发商业数据科学直觉的好书。它还讨论了机器学习背景下的期望值框架,我发现这非常有用。
  • 数据科学家实用统计学作者 Peter Bruce: 作为数据科学中主要统计概念的修正,确实有用。我用这个来修改数据科学面试。
  • 数理经济学的基本方法:虽然这本书有经济学的一面,但它包含了几乎所有你在数据科学中会遇到的数学,除了真正高级的东西。如果你想重温你的线性代数,微积分和最优化,我不能推荐这本书。它帮助我通过了硕士考试。

在线课程

  • 【data camp】:我在这里上过很多课程,特别喜欢视频和编码练习的结合。他们也有一些非常有趣的项目,你可以尝试一下。
  • 贝叶斯机器学习方法:贝叶斯机器学习不同应用的绝佳课程。它是上述模式识别和机器学习的良好补充,因为它们涵盖了一些相同的主题。
  • 机器学习专用数学:如果你的数学有点生疏,我会去看看这个课程。它们涵盖了你在开始进入机器学习算法之前需要知道的一些主要话题。
  • Udacity: 用于数据分析的 SQL:一个关于 SQL 的很棒的课程,介绍更高级的东西。

注意:这篇文章中的一些链接是附属链接。

好了,这就是我对成功成为一名数据科学家的提示和建议。希望您发现这很有用,它们可以帮助您提高作为数据科学家的技能。请随意查看下面我的个人网站或在 Linkedin 上联系。

*****https://www.datascientistguide.com/ *****

数据分析师和数据科学家都应该知道的 3 种工具

原文:https://towardsdatascience.com/3-tools-both-data-analysts-and-data-scientists-should-know-1c7b814812e4?source=collection_archive---------33-----------------------

意见

深入探讨较少提及的工具

JESHOOTS.COM在Unsplash【1】上的照片。

目录

  1. 介绍
  2. 吉拉
  3. 检查员
  4. 汇合
  5. 摘要
  6. 参考

介绍

虽然对于数据分析师和数据科学家来说,有更多复杂的工具,但在回顾这两个热门角色的共同技能时,也有一些更通用的工具经常被忽略。了解这些工具既可以在你的面试过程中帮助你,也可以在你被录用后在工作中帮助你。其中两项技能更注重组织和流程,而另一项更注重洞察力和分析。作为一名数据分析师和数据科学家,你的大部分工作是沟通。了解复杂的机器学习算法和 Python 编程当然是有益的,而且通常是必不可少的。然而,知道如何与公司的其他利益相关者沟通也同样重要,这就是这些工具发挥作用的地方。如果您想了解数据分析师和数据科学家都应该知道的三种工具,请继续阅读。

吉拉

由 Toa Heftiba 在Unsplash【2】上拍摄的照片。

对于这两个职位来说,最少被谈论的工具可能是吉拉【3】,然而同时,它很可能是最常用的工具。团队可以从使用吉拉中受益,因为它充当了所有项目的规划平台,可以看到需要什么,正在进行什么,需要改进什么,以及最近完成了什么。项目委员会通常是你公司组织内的一个团队,例如商业分析数据科学

以下是数据分析师和数据科学家使用吉拉的一些好处:

  • 项目板的可视化 —总的来说,吉拉的这一功能是最有用的,在这里你可以可视化票据,这些票据是你需要完成的基本任务,是它们当前所在流程的一部分。例如,你可以有一个backlog的票或任务,你将最终工作,然后你可以移动这些票到in progress,到最后的done。这些突出显示的步骤是常见的,但是在吉拉,您可以将它们更改为您想要的任何名称。把白板想象成白板上的便笺条。
  • Epic link organization —如果你的门票有一个总的主题,你可以将它们分组为所谓的epic link。此功能允许您将常见任务/票证关联到一个伞状主题下。例如,假设您有五张分配给多人的票。然后,您可以将所有这些标签链接到一个主题,比如产品分类或 Q1 热图——这取决于您的团队认为重要的分类。
  • 优先级排序——一旦你开始使用吉拉,你会很难确定哪些门票比其他门票更重要。因此,作为一种解决方案,您可以隔离每个票证的优先级,以便更好地理解。举个例子,你有P1P2P5。将这些优先级进行颜色编码也很好,这样在会议中浏览票证时会更加明显,例如站立会议。

如您所见,吉拉对数据分析师和数据科学家都非常有用。吉拉的主要用途是用于组织应用程序,当您扩展您的项目、团队和公司的整体组织时,这是非常重要的。

检查员

卡洛斯·穆扎在Unsplash【4】上的照片。

下一个工具类似于其他可视化工具,所以我在这里说的很多内容也适用于其他工具,比如 Tableau。Looker【5】专注于数据并将其可视化。正如 Looker 所描述的,其主要用途是用于现代 BI 和分析、集成洞察、数据驱动的工作流和定制应用程序。Looker 擅长轻松集成 SQL 查询来创建见解和报告。数据科学洞察也是如此,可以用一种很好的、易于理解的格式来监控模型的结果。

以下是数据分析师和数据科学家使用 Looker 的一些好处:

  • SQL 集成—Looker 的主要用途是连接你的数据,并提供给用户。你可以使用 SQL 查询你的数据库。这是一种简单的获取数据的方法,就像你习惯的那样,但是是在应用程序本身内部。
  • 可视化 —您可以使用 Looker 创建多种类型的可视化,这是因为它能够使用 SQL 查询您的数据。这些可视化包括funnelmapsgaugetimelinedonut multiplesSankeytreemapcombined charts

数据分析师的大量工作是 SQL 查询和可视化数据。对于数据科学,您可以创建度量标准来描述您的模型在总体上的表现,也可以使用不同的过滤器来进行细化。

汇合

Startaê Team 在Unsplash【6】上拍摄的照片。

这种工具属于包括吉拉在内的亚特兰蒂斯公司的同一家族。Confluence【7】是最简单的工具,但由于需要组织团队的什么如何,它对数据分析师和数据科学家都非常有益。例如,许多公司会基于像what is data analytics?what is data science?这样的问题来构建团队信息。它还可以作为记录重要概念的地方,如公司内部使用的机器学习算法。

以下是数据分析师和数据科学家使用 Confluence 的一些优势:

  • 页面—Confluence 的一个特性是Pages,它作为一个对团队非常重要的书签项目列表。在此功能中,数据分析师可以包括关于创建指标等常见流程的文档,而对于数据科学家来说,它可以作为学习机器学习算法的地方,这对于当前员工和新雇佣的员工都很有用,用于培训目的。
  • 协作 —所有这些工具都有协作的主题,Confluence 也不例外。你既可以喜欢pages,也可以对其发表评论,这有助于就对公司分析很重要的事情展开对话

虽然相当简单,但 Confluence 可能是一些数据分析和数据科学团队的重要组成部分,因为它是阐明和记录应该广为人知的常见流程的地方。

摘要

数据分析师和数据科学家通常在一家公司共享任务,因此这意味着他们也有共享的工具来帮助完成这些任务。我们已经讨论了这两种角色的人都应该知道的三种常用工具。虽然它们并不复杂,但是它们对于建立一个更有组织的团队是很重要的。

总而言之,数据分析师和数据科学家应该知道以下三种工具:

* Jira* Looker* Confluence

我希望你觉得我的文章既有趣又有用。如果您作为数据分析师或数据科学家从这些工具中受益,请随时在下面发表评论。在下面写下你使用这些工具的任何其他原因,或者,你用其他东西代替吗?

请随时查看我的个人资料和其他文章,也可以通过 LinkedIn 联系我。我不隶属于上述任何公司。

参考

[1]照片由JESHOOTS.COM在Unsplash(2017)上拍摄

[2]由 Toa Heftiba 在 Unsplash 上拍摄的照片,(2018)

[3]亚特兰蒂斯,吉拉主页,(2021)

[4]Carlos Muza 在 Unsplash 上拍摄的照片,(2016)

[5] Looker 数据科学公司, Looker 主页,(2021)

[6]照片由 Startaê Team 在Unsplash(2018)上拍摄

[7]亚特兰蒂斯,总汇主页,(2021)

监控和优化您的 Linux 系统的 3 个工具

原文:https://towardsdatascience.com/3-tools-to-monitor-and-optimize-your-linux-system-c8a46c18d692?source=collection_archive---------4-----------------------

用这三个工具控制你的机器

作者图片

动机

如果您是 Linux 用户,您可能想知道一些关于您的计算机的重要信息,例如:

  • 系统的 CPU 使用率、内存使用率和磁盘使用率
  • 系统信息
  • 每个文件夹或文件的磁盘使用情况,以及上次使用它们的时间。
  • 正在运行的进程的内存和 CPU 消耗
  • 启动应用程序

了解这些信息将使您能够优化您的系统。

在这篇文章中,我将向你展示 3 个工具,它们可以让你做上面所有的事情,甚至更多!

htop -一个交互式进程查看器

htop 是一个交互式流程查看器。htop 允许您查看与命令行相关的信息,例如内存、CPU 消耗以及它已经运行了多长时间。

每当我注意到我的计算机速度变慢,并想找出哪些进程对速度有重大影响时,我经常使用这种方法。我还使用它来监控运行程序或训练模型时使用了多少内核和多少内存。

大多数发行版中都有 htop 的软件包。要运行 htop,请键入

htop

您应该会看到类似下面的内容:

作者图片

在上图中,命令按 CPU%排序。似乎进程/opt/brave,com/brave/brave在所有正在运行的进程中占用了最多的 CPU 资源。

可以尝试几种快捷方式:

  • F4:仅显示名称与输入文本匹配的进程
  • F5:把流程之间的关系布置成一棵树。键入+-展开或折叠子树。
  • F6:在排序视图上,选择一个字段进行排序。
  • Home:滚动到进程列表的顶部,选择第一个进程。
  • End:滚动到进程列表底部,选择最后一个进程。

点击查看所有快捷方式列表。

Baobab —磁盘使用分析器

如果你想得到你的磁盘使用情况的图形展示,试试 Baobab 。我经常使用这个工具来找出哪些应用程序占用了大量磁盘空间,但已经有一段时间没有使用了。了解这一点有助于我清理不再需要的文件或文件夹。

和 htop 一样,Baobab 也可以在大多数发行版中获得。要运行 Baobab,请键入

baobab

您应该会看到如下所示的内容:

通过使用图表来可视化每个文件夹和文件的磁盘使用情况,我们可以更好地了解计算机中哪些文件夹或文件占用了最多的磁盘空间。

作者 GIF

我们还可以看到文件夹或文件的大小,它们有多少个文件,以及它们最后一次被修改是什么时候。

作者图片

Stacer —系统监视器和优化器

Stacer 是目前为止我介绍的三个工具中最让我兴奋的一个。它允许您监控许多重要信息,例如:

  • 系统信息
  • 下载和上传速度

作者图片

  • 搜索
  • 系统服务

作者图片

  • 流程。你可以把这看作是htop的简单版本。即使它没有像htop给你那么多的选择,但它更容易使用和理解。

作者图片

  • 已安装的软件包
  • CPU 和内存的历史

作者 GIF

Stacer 还允许您通过以下方式优化您的计算机:

  • 指定电脑唤醒时要启动的应用程序

作者图片

  • 清洁系统
  • 在 CPU 百分比、内存百分比和磁盘百分比低于特定百分比后发送警报消息

作者图片

还有更多!

你可以在这里找到如何安装堆垛机。

结论

恭喜你!您刚刚学习了如何使用 htop、Baobab 和 Stacer 来监控和优化您的 Linux 机器。对您的机器有更多的控制将使您能够优先运行哪些任务,并删除不必要的应用程序或进程。

我喜欢写一些基本的数据科学概念,并尝试不同的算法和数据科学工具。你可以在 LinkedIn 和 Twitter 上与我联系。

如果你想查看我写的所有文章的代码,请点击这里。在 Medium 上关注我,了解我的最新数据科学文章,例如:

3 个跟踪和可视化 Python 代码执行的工具

原文:https://towardsdatascience.com/3-tools-to-track-and-visualize-the-execution-of-your-python-code-666a153e435e?source=collection_archive---------0-----------------------

避免在一行代码中调试时的麻烦

动机

您是否见过如下所示的错误输出:

2 divided by 1 is equal to 2.0.
Traceback (most recent call last):
  File "loguru_example.py", line 17, in <module>
    divide_numbers(num_list)
  File "loguru_example.py", line 11, in divide_numbers
    res = division(num1, num2)
  File "loguru_example.py", line 5, in division
    return num1/num2
ZeroDivisionError: division by zero

并希望输出能更容易理解,如这里所示?

作者图片

您可能还想实时可视化哪些代码行正在执行以及它们执行了多少次:

作者 GIF

如果是这样的话,这篇文章将为你提供实现上述目标的工具。这三个工具是:

  • Loguru —打印更好的异常
  • snoop —打印函数中正在执行的代码行
  • 心率-实时可视化 Python 程序的执行

使用这些工具只需要一行代码!

Loguru —打印更好的异常

Loguru 是一个旨在让用 Python 登录变得有趣的库。Loguru 提供了许多有趣的功能,但我发现最有用的一个功能是能够捕捉意外错误显示哪个变量值导致代码失败

要安装 Loguru,请键入

pip install loguru

为了理解 Loguru 是如何有用的,想象你有两个函数divisiondivide_numbers,函数divide_numbers被执行。

注意combinations([2,1,0], 2)返回[(2, 1), (2, 0), (1, 0)]。运行上面的代码后,我们得到了这个错误:

2 divided by 1 is equal to 2.0.
Traceback (most recent call last):
  File "loguru_example.py", line 17, in <module>
    divide_numbers(num_list)
  File "loguru_example.py", line 11, in divide_numbers
    res = division(num1, num2)
  File "loguru_example.py", line 5, in division
    return num1/num2
ZeroDivisionError: division by zero

从输出中,我们知道行return num1/num2是错误发生的地方,但是我们不知道num1num2的哪个值导致了错误。幸运的是,这可以通过添加 Loguru 的logger.catch装饰器来轻松跟踪:

输出:

作者图片

加上logger.catch,异常就好理解多了!原来误差发生在用2除以0的时候。

snoop —打印函数中正在执行的代码行

如果代码中没有错误,但我们想弄清楚代码中发生了什么,该怎么办?这时 snoop 就派上了用场。

snoop 是一个 Python 包,它通过只添加一个装饰器来打印正在执行的代码行以及每个变量的值。

要安装 snoop,请键入:

pip install snoop

让我们假设我们有一个名为factorial的函数,其中寻找一个整数的阶乘。

输出:

The factorial of 5 is 120

为了理解为什么factorial(5)的输出是20,我们可以在函数factorial中添加snoop decorator。

输出:

作者图片

在上面的输出中,我们可以查看变量的值以及执行了哪一行代码。现在我们可以更好地理解递归是如何工作的了!

心率-实时可视化 Python 程序的执行

如果你想直观的看到哪些行被执行了,执行了多少次,试试 heartrate。

心率也是 snoop 的创作者创作的。要安装心率,请键入:

pip install heartrate

现在让我们在之前的代码中添加heartrate.trace(browser=True)。这将打开一个浏览器窗口,显示调用过trace()的文件的可视化。

当您运行上面的代码时,应该会弹出一个新的浏览器。如果没有,去 http://localhost:9999 。您应该会看到如下所示的输出:

作者图片

酷!条形图显示被点击的线路。越长的条形意味着点击次数越多,越浅的颜色意味着越新。

从上面的输出中,我们可以看到程序执行了:

  • if x==1 5 次
  • return 1曾经
  • return (x * factorial(x-1)) 4 次

输出是有意义的,因为x的初始值是 5,并且该函数被重复调用,直到x等于1

现在让我们看看使用心率实时可视化 Python 程序的执行是什么样子的。让我们添加sleep(0.5)以便程序运行得慢一点,并将num增加到20

作者 GIF

厉害!我们可以实时看到哪些代码行正在执行,以及每一行执行了多少次。

结论

恭喜你!您刚刚学习了 3 种工具来跟踪和可视化 Python 代码的执行。我希望在使用这三个工具时,调试对你来说不会那么痛苦。既然这些工具只需要一行代码,为什么不试试看它们有多大帮助呢?

随意发挥,并在这里叉这篇文章的源代码:

https://github.com/khuyentran1401/Data-science/tree/master/python/debug_tools

我喜欢写一些基本的数据科学概念,并尝试不同的算法和数据科学工具。你可以在 LinkedIn 和 T2 Twitter 上与我联系。

星这个回购如果你想检查我写的所有文章的代码。在 Medium 上关注我,了解我的最新数据科学文章,例如:

💔-tools-to-monitor-and-optimize-your-linux-system-c8a46c18d692> 💔-advance-techniques-to-effortlessly-import-and-execute-your-python-modules-ccdcba017b0c> 💔-python-tricks-to-read-create-and-run-multiple-files-automatically-5221ebaad2ba>

将 3 种顶级机器学习算法写入您的数据科学简历

原文:https://towardsdatascience.com/3-top-machine-learning-algorithms-to-include-on-your-data-science-resume-54f6745b8e88?source=collection_archive---------6-----------------------

意见

战略性地展示你的技能,以吸引雇主的注意

在Unsplash【1】上由 Kote Puerto 拍摄的照片。

目录

  1. 介绍
  2. LSTM
  3. XGBoost
  4. CatBoost
  5. 摘要
  6. 参考

介绍

有几种机器学习算法,你可以在学术界学习,也可以在工作场所使用,但有些算法可能比其他算法更适合实践和应用。它最终取决于几个因素,比如你正在解决的问题、你拥有的数据、你的公司拥有的资源等等。然而,我看到一些算法似乎更独特、更流行或更准确。请记住,这些顶级算法是由我的观点,以及作为一名专业数据科学家和面试官的经验形成的。记住这一点,让我们讨论一下为什么你会特别想要展示这些机器学习算法的原因。

LSTM

照片由法库里安设计在Unsplash【2】上拍摄。

令人惊讶的是,我根本没见过多少人在简历中提到这个算法,LSTM ( 长短期记忆);它通常是一种流行的基于树的算法,也可能是一种 SARIMA 模型(季节性自回归综合移动平均线)。也就是说,在简历中包含这种机器学习算法的主要原因是因为它是独一无二的,可以从本质上让你区别于其他申请者。

不仅如此,这种算法也是有用的,并且可以是高度准确的,当然,这取决于其他因素,但是与其他类似算法相比,这种机会似乎确实更好。它还可以用于分类和基于时间序列的问题,以及在其过程中更加可控或灵活。

把 LSTM 写在简历上有一些好处:

  • 它是独特的
  • 它更复杂,所以有些人不太愿意学习或掌握这种算法
  • 它可以比 RNN 更好,因为它的灵活性
  • 它有机会变得更准确或更具预测力

如你所见,包含并了解这个算法可以让你成为独一无二的申请者。

XGBoost

约翰·西门子在 Unsplash 上拍摄的照片。

这可能是三种算法中最受欢迎的一种,这种算法更像是包含在您的工具箱中的核心算法。这个算法是你应该知道的,当然,也应该写在你的简历上。因为它已经很流行了,所以它的好处是有更多的文档。

XGBoot 在很多方面都更好,但如果你要对树算法进行排序,我会说它从决策树→随机森林 XGBoot,然后到另一个,我在下面列出的新算法。

以下是你为什么要把 XGBoost 放在简历上的一些进一步的原因:

  • 高性能
  • 通常是最精确的算法之一,因此您可以更具竞争力
  • 大量的文档和例子,所以面试官比其他两个更熟悉讨论这个算法

使用算法本身有无数的理由,但为了把它写进你的简历,它会显示你是一个稳定的申请者,拥有可以应用于更多算法的基础知识。

CatBoost

Ludemeula Fernandes 在Unsplash【4】拍摄的照片。

也许最优秀和最新的是 CatBoost。应用您所知道的关于 XGBoost 的一切,但是补充一点,它甚至更快、更容易使用、更准确,并且能够非常好地处理分类特性。它是如此之新,以至于一些面试官可能甚至还不知道这个算法,所以当你在简历中包括这个算法时,你真的可以炫耀一下,但这并不遥远,他们不能理解它,特别是如果他们熟悉大多数树算法,尤其是 XGBoost。

为了补充前面提到的注意事项,现在我们可以包括包含 CatBoost 的最终等级:

决策树→随机森林→ XGBoost → CatBoost

以下是你应该在数据科学简历中加入 CatBoost 的更多理由:

  • 非常新,会让你更有竞争力的申请人
  • 可以向采访者展示你可以用一个高度准确和高效的算法工作
  • 我可以证明你可以使用一种算法很好地处理分类未来,几乎所有的算法在某种程度上都不能很好地处理分类特征,比如使用一次热编码来创建一个大而稀疏的数据帧
  • …在这里,您可以保留分类功能栏,使其更易于与软件工程师、ML 工程师或产品事务等利益相关方协作

如你所见,我把最好的放在了最后。由于各种原因,CatBoost 是一个伟大的算法,你应该把它写进你的简历。

摘要

这些机器学习算法中的任何一个都不会出错,因为不同的原因,它们都非常有用。无论你是预测一个连续的目标,还是试图对一个类别进行分类,甚至是预测一个时间序列的目标,这些算法都可以帮助产生很好的结果,这对你的面试很有价值。

总结一下,你应该在你的数据科学简历中包括的前三种机器学习算法:

* LSTM* XGBoost* CatBoost

我希望你觉得我的文章既有趣又有用。如果您同意或不同意这些顶级机器学习算法,请在下面随意评论。为什么或为什么不?你认为你在数据科学简历中还包括哪些算法?这些当然可以进一步澄清,但我希望我能够对数据科学简历有所启发。感谢您的阅读!

我不属于这些公司中的任何一家。

请随时查看我的个人资料、 Matt Przybyla 、和其他文章,并通过以下链接订阅接收我的博客的电子邮件通知,或通过点击屏幕顶部的订阅图标 ,如果您有任何问题或意见,请在 LinkedIn 上联系我。

订阅链接:https://datascience2.medium.com/subscribe

参考

[1]照片由 Kote Puerto 在 Unsplash 上拍摄,(2018)

[2]照片由法库里安设计在 Unsplash 上拍摄,(2021)

[3]约翰·西门子在 Unsplash 上拍摄的照片,(2014)

[4]照片由 Ludemeula Fernandes 在Unsplash(2017)拍摄

3 面向初级程序员的顶级 Python IDE

原文:https://towardsdatascience.com/3-top-python-ide-for-beginner-programmer-5606d6c1af79?source=collection_archive---------14-----------------------

完美的 IDE 可以让你从头开始学习编程

作者图片

如果您喜欢我的内容,并希望获得更多关于数据或数据科学家日常生活的深入知识,请考虑在此订阅我的简讯。

IDE 或集成开发环境是一个代码编程工具,用于编写、测试、调试和直观地编译代码。IDE 是任何编程活动的必备工具,正因为如此,开发了许多种类的 IDE——包括 Python 的 IDE。

虽然有许多选择,但并不是每个 IDE 都为您提供了学习 Python 编程语言的材料。因此,您可能希望研究另一种 IDE,它可以为任何初级程序员提供学习能力——特别是对于那些想要开始 Python 之旅的人。

在本文中,我想概述一下我认为适合任何初学者的 3 大 Python IDE。让我们开始吧。

1.代码 Skulptor

CodeSkulptor 是一个浏览器内置集成开发环境,专门为初学者开发的 Python 教学软件。它于 2012 年开发,供教室中的学生一起学习,无需安装任何特定的 IDE,并确保所有 Python 环境都是相似的。因为是针对学生开发的,所以非常适合初学者学习 Python。

CodeSkulptor3 IDE(图片由作者提供)

上图是 CodeSkulptor 的 IDE 接口,专门针对 Python 3。CodeSkulpor Python 2 有一个版本,但是在撰写本文时,Python 2 在当前的 data professional 工作流中已经过时了。

IDE 很简单;你只需要在左边写你的代码(code),在右边显示结果(Output)。但是,因为 CodeSkulptor 是为学习目的而开发的,所以您不能在环境中下载调试过程或额外的扩展。

虽然,你可能想看的是 CodeSkulpor 文档。我会在下图中向你展示。

CodeSkulptor3 文档(图片由作者提供)

对于以前不了解 Python 的人来说,该文档是一个完整的学习材料。它的编写和构造方式对于任何初学者来说都是完美的,可以让他们学习许多你以前不知道的术语。这就是 CodeSkulptor 非常适合开始 Python 之旅并了解更多编程语言的初学者的原因。

2.托尼

Thonny 是塔尔图大学为学习和教授编程而开发的 IDE,你可以在 T2 的 Bitbucket repository 免费下载。

作者图片

Thonny 对初学者来说非常好,因为它可以在助手页面的帮助下向你展示一步一步的语句和表达式。Thonny 提供了一个很棒的编辑功能,可以用局部变量打开一个新窗口,代码与主代码分开显示。

助手选项卡(按作者分类的图像)

此外,Thonny 通过突出显示任何出错的行来帮助您的编码过程。例如,当你忘记了一个括号或者打错了一个错别字,如下图所示。

Thonny highlight(图片由作者提供)

当你的脚本中有一个错误时,代码块会从你开始出错的那一行到最后一行用灰色突出显示。这样,您可以指出代码中的任何错误。

Thonny 还为您提供了 Python 脚本调试过程,运行起来非常灵活。您需要按 Ctrl + F5,调试过程会自动开始。我将通过调试上面的代码向您展示这个例子。

Thonny 调试(图片由作者提供)

结果如上图所示;我有一个语法错误,因为我没有正确地关闭解析。

如果您想探索更多,您可以探索的所有工具都可以在下面显示的视图选项卡中找到。

Thonny 视图选项卡(图片由作者提供)

总的来说,Thonny 的目的是让您很好地理解 Python 是如何工作的,并帮助您简化编码过程。在我看来,Thonny 适合一个想要学习更多 Python 语言的初学者。

3.翼

Wing 是一个极简的 Python IDE,是为教授初学者编程而开发的。开发人员已经编写了配套书籍和视频记录,您可以密切关注使用 Wing IDE 学习 Python。让我们看看下图中的 Wing IDE。

Wing IDE(图片由作者提供)

正如你在上面的图片中看到的,IDE 已经包含了一个 IDE 和 Python 的教程,你可以跟随。这些材料对任何初学者来说都很容易理解,IDE 对任何人来说都很简单。让我们来看看 Wing 的一些特性,您可以用它们来学习。

首先,我们有自动完成功能。当你想有一个更快的方法来编写脚本时,这是很有用的。

自动完成(图片由作者提供)

接下来,我们将重点介绍 Wing 中的功能。在编码过程中,你最终会得到一堆代码。有时候很乱,特别是对于编码初学者。在这种情况下,突出显示功能是非常有用的,因为它可以帮助您确定您在编码过程中的位置或者错误在哪里。让我们以下图为例。

作者图片

在上面的图片中,你可以看到我的变量和另一个同名的变量是如何突出显示的。然后你会看到一条指示错误的红线。如果我们将光标移到那里,我们可以突出显示错误的原因。

作者图片

另一个我觉得对初学者有用的特性是调试特性。当运行调试功能时,该进程将尝试查找您的编码错误以及导致错误的原因。下图显示了调试示例过程。

作者图片

最后,我喜欢 Wing 的一个功能是搜索栏,任何人都可以方便地使用。当我写代码时,我个人很难跟踪所有的变量和某些代码行的位置。有了搜索栏,这个过程变得更加容易。

作者图片

正如你从上面的图片中看到的,我可以试着使用 search 按钮,所有我想找到的代码都被高亮显示。这听起来并不令人惊讶,但它的用处是巨大的,尤其是如果你还在学习的话。

总的来说,Wing 对于初学者来说是易于使用的 IDE,因为它提供了许多有助于编码过程的学习材料和功能。

结论

Python 是许多数据专业人员使用的编程语言。Python 语言在许多领域变得越来越重要,因为它容易学习,并且有很多社区支持。然而,学习 Python 编程语言对一些人来说仍然是一个挑战。

在本文中,我概述了初学编程的 3 个顶级 Python IDE。它们是:

  1. CodeSkulptor
  2. 托恩尼

希望有帮助!

如果你没有订阅成为媒体会员,请考虑通过我的推荐订阅来支持我的写作。

在我的LinkedInTwitter 上访问我。

3 个顶级 Python 包,帮助数据科学家学习数学

原文:https://towardsdatascience.com/3-top-python-package-to-learn-math-for-data-scientist-8e3482e7e79d?source=collection_archive---------3-----------------------

从这些 Python 包中学习数学

由杰斯温·托马斯在 Unsplash 上拍摄的照片

如果您喜欢我的内容,并希望获得更多关于数据或数据科学家日常生活的深入知识,请考虑在此订阅我的简讯。

作为数据科学家,我们不断被告知我们需要理解机器学习,因为它是我们完成工作的工具之一。我知道该领域的许多新手正在学习机器学习,而没有对概念和方程有更深入的理解——仅仅依赖于使用算法。

理解机器学习最重要的基础是数学知识。当你听到数学时,它会让你想起高中一天的课程——难,令人困惑,理论性强。机器学习数学当然是相似的,但在现代不同于旧时代;Python 可以帮助你学习数学。

我之前已经写了统计 Python 包,你可以用它来学习统计学,现在,我想写一下数学包。这里是我为数据科学家学习数学的前 3 个 Python 包。

1.数字和数学模块

嗯,从技术上讲,我在这一点上想要概述的包不仅仅是一个单独的包,而是由几个包组成,这些包交织在一起,被称为数字和数学模块

这些模块在 Python 主页上有文档记录,我们得到了关于这个包的完整解释。摘自 Python 文档,模块中列出的包有:

  • [numbers](https://docs.python.org/3/library/numbers.html) —数字抽象基类
  • [math](https://docs.python.org/3/library/math.html) —数学函数
  • [cmath](https://docs.python.org/3/library/cmath.html) —复数的数学函数
  • [decimal](https://docs.python.org/3/library/decimal.html) —十进制定点和浮点运算
  • [fractions](https://docs.python.org/3/library/fractions.html) —有理数
  • [random](https://docs.python.org/3/library/random.html) —生成伪随机数
  • [statistics](https://docs.python.org/3/library/statistics.html) —数理统计函数

我喜欢这些模块的文档,它用通俗的语言解释了基本的数学概念。对于一个不太了解数学术语的初学者来说,这些模块真的很适合你。让我们以“数学”Python 包文档为例。

数学包文档(来源:https://docs . python . org/3/library/math . html # number-theory-and-representation-functions)

文档解释了软件包上可用的功能足够简单(尽管您仍然需要集中精力);您可以将此文档作为学习的基础。

让我们尝试使用其中一个软件包。我想用数学软件包来得到可用的特殊常数。为此,我只需键入以下代码:

import math#Getting the mathematical constant ***π***
print(math.pi)#Getting the mathematical constant ***e***
print(math.e)#Getting the mathematical constant **tau**
print(math.tau)#Getting the **floating-point positive infinity**
print(math.inf)

作者图片

如果你想知道它们所显示的常数,你可以参考现有的文档。

2.交响乐

什么是症状?这是一个符号数学的 Python 库。那么,什么是符号计算呢?SymPy 文档中给出的教程页面解释了符号计算是一个用符号处理数学对象的计算问题。简单地说,符号数学精确地而不是近似地表示了数学对象。如果数学表达式是未赋值的变量,那么它就留在符号形式中。

也许我们可以用一些例子来更好地解释这个概念。例如,当我们计算平方根时,我们可以这样做。

math.sqrt(16)Output: 4.0

使用数学软件包,如果我们取 16 的平方根,我们将得到值 4。如果我们这样做。

math.sqrt(8)Output: 2.8284271247461903

8 的平方根的结果将是近似值,而不是精确的数字。这就是为什么我们会使用 SymPy 来创建一个精确的数学对象,将近似值表示为符号形式。

首先,我们需要使用下面的代码安装 SymPy 包。

pip install sympy

那我们试试用 SymPy 包吧。

import sympysympy.sqrt(8)

作者图片

结果将在符号表示中。尽管 SymPy main 函数处理的是符号数学,但他们关于数学概念的文档总体来说还是相当不错的。

作者创建的 GIF

看看的 SymPy 文档,列表很广泛,并且提供了许多数学学习材料。让我们看看其中一个文档页面。

来源:https://docs . sympy . org/latest/modules/polys/basics . html # basic-concepts

给我们数学基本概念的文档写得很好,任何初学者都能理解。尝试自己探索 Python 包。

3.明智的

Sage 是运行在 Python 编程语言之上的开源数学软件。从技术上讲,Sage 不是 Python 包,而是软件。如果你已经知道 Python 语言,用法是简单的,所以你在使用软件时不会感到太难。

Sage 本身支持代数、几何、数论、密码学、数值计算和相关领域的研究和教学。Sage 中包含了许多一般和特定的主题,包括:

  • 基础代数和微积分
  • 绘图
  • 基本环
  • 线性代数
  • 多项式
  • 父母、皈依和胁迫
  • 有限群,阿贝尔群
  • 数论
  • 一些更高级的数学

当然,你可以随意访问教程来获取更多关于你想要学习的数学概念的信息。

要安装 Sage,你可以遵循文档中的步骤,但如果你不想在你的电脑上安装它,你可以使用 Sage web 界面或 CoCalc 界面。

作者创建的图像

Sage 教程文档也很丰富,您可以从中获得完整的学习资料。让我们举一个微积分教程中的例子。

来源:https://www.sagemath.org/calctut/continuity.html

他们很好地解释了这个概念,甚至提供了用于学习的可执行代码。你可以下载笔记本作为你的学习材料。

结论

作为一名数据科学家,我们对机器学习并不陌生——然而,许多人并不熟悉 ML 的数学方面。为了学习更多的数学知识,我们可以使用 Python 编程语言来帮助我们学习。

以下是我最喜欢的 3 个帮助我们使用 Python 学习数学的包,它们是:

  1. 数字和数学模块
  2. 症状
  3. 贤者

希望有帮助!

访问我的 LinkedInTwitter

如果您没有订阅为中等会员,请考虑通过我的推荐订阅。

数据科学家学习统计学的 3 个顶级 Python 包

原文:https://towardsdatascience.com/3-top-python-packages-to-learn-statistic-for-data-scientist-d753b76e6099?source=collection_archive---------8-----------------------

使用这些软件包增强您的统计技能

露丝·齐默曼在 Unsplash 上拍摄的照片

如果你喜欢我的内容,并想获得更多关于数据或作为数据科学家的日常生活的深入知识,请考虑在这里订阅我的时事通讯。

众所周知,数据科学家比统计学家有更好的编程技能,比程序员有更好的统计知识。虽然学习编程技能不是一件容易的事,但有时新数据人员会忘记统计技能。

我知道统计学很难学,尤其是对于那些没有受过正规统计学教育的人来说。然而,在现代技术的帮助下,从零开始学习统计学是可能的。有了这些用编程语言开发的统计软件包,学习统计变得比以前更容易。

我知道如果你想学统计学,很多人会反对。你应该用 R 语言而不是 Python 但是,我想通过使用 Python 包提供一种替代方案,因为许多人都是通过学习 Python 语言开始他们的数据科学之旅的。

在本文中,我想向您展示学习统计的 3 个顶级 Python 包以及如何使用该包的示例——记住,用于学习。让我们开始吧!

1.Scipy。统计数据

SciPy (读作“叹息派”)是一个开源的包计算工具,用于在 Python 环境中执行科学方法。Scipy 本身也是许多数学、工程和数据研究中使用的数字算法和特定领域工具箱的集合。

Scipy 中可用的 API 之一是名为 Stats 的统计 API。根据 Scipy 主页显示,Scipy。Stats 是一个包含大量概率分布和不断增长的统计函数库的模块,特别适用于概率函数研究

在寒风中。Stats 模块中,有很多统计函数 API,你可以参考进一步学习。它们是:

  • 连续分布
  • 多元分布
  • 离散分布
  • 汇总统计
  • 频率统计
  • 相关函数
  • 统计测试
  • 转换
  • 统计距离
  • 随机变量生成
  • 循环统计功能
  • 列联表功能
  • 小区测试
  • 屏蔽统计功能
  • 单变量和多变量核密度估计

为了更好地理解统计工作函数。统计还提供了一个你可以尝试的教程。该教程是全面的,许多新手可以遵循;你用一个笔记对统计术语有一点了解。让我们试着用 Scipy.Stats 学习一些统计学。

如果您使用的是 Anaconda 发行版中的 Python,那么环境中已经内置了 Scipy 包。如果您选择独立安装 Scipy,您需要安装依赖包。您可以通过 pip 执行下面这一行来实现。

python -m pip install --user numpy scipy matplotlib ipython jupyter pandas sympy nose

让我们试着学习概率分布上最简单的概念,那就是正态分布。首先,我们将必要的包导入到环境中。

#Import statistical package from Scipy
from scipy import stats#Import the normal distribution class
from scipy.stats import norm

我们导入的范数类将成为一个概率函数,产生一个服从正态分布的随机变量。为了获得更多关于这个类的信息,我们可以试着打印文档。

print(stats.norm.__doc__)

作者创建的图像

文档将为您提供理解对象、可用方法和类应用程序示例所需的所有基本信息。

范数类用于产生一个服从正态分布的随机变量。该软件包已经为您提供了学习它的所有解释,您只需要执行几行代码来生成概念示例。让我们用这个例子来制作一个正态分布图。

import matplotlib.pyplot as plt#Produce 1000 Random Variable following normal distribution
r = norm.rvs(size=1000)#Plotting the distribution
fig, ax = plt.subplots(1, 1)
ax.hist(r, density=True, histtype='stepfilled', alpha=0.2)
ax.legend(loc='best', frameon=False)
plt.show()

作者图片

有这么多你可以探索这个包。我建议你花点时间研究一下统计教程来理解这个包,并且理解这个定理。

2.平古因

Pingouin 是一个开源的统计软件包,主要用于统计。这个包给了你许多类和函数来学习基本的统计学和假设检验。据开发者称,Pingouin 是为那些想要简单而详尽的统计功能的用户设计的。

Pingouin 简单但详尽,因为这个包为您提供了关于数据的更多解释。在科学频道。Stats,它们只返回 T 值和 p 值,有时我们需要更多关于数据的解释。

在 Pingouin 包中,计算是在上面几个步骤中进行的。例如,除了仅返回 T 值和 p 值之外,来自 Pingouin 的 T 测试还返回测试的自由度、效应大小(Cohen 的 d)、均值差异的 95%置信区间、统计功效和贝叶斯因子(BF10)。

目前,Pingouin 包提供了一个可以用于统计测试的 API 函数。它们是:

  • 方差分析和 T 检验
  • 贝叶斯
  • 圆形
  • 偶然性
  • 相关和回归
  • 发行
  • 效果尺寸
  • 多重比较和事后测试
  • 多元测试
  • 非参数化
  • 其他
  • 绘图
  • 功率分析
  • 可靠性和一致性

Pingouin APIs 文档本身非常适合学习。我已经研究了这个文件,发现它真的很有见地。例如,我们来探讨一下 ANOVA 函数。首先,您需要安装 Pingouin 包。

pip install pingouin

安装应该只需要几秒钟。之后,我们将使用一个 mpg 数据集示例,用 Pingouin 进行 ANOVA 统计假设测试。

#Import necessary package
import seaborn as sns
import pingouin as pgmpg = sns.load_dataset('mpg')
pg.anova(data = mpg, dv = 'mpg', between = 'origin')

作者图片

示例统计测试为您提供了您期望从测试中获得的所有必要分数。对于结果的进一步解释,你应该在这里查阅 API 文档。

Pingouin 指南也为你提供了一个学习指南来使用一些测试包函数。其中一个是单向方差分析测试。

方差分析测试指南(来源:https://pingouin-stats.org/guidelines.html#anova

如果您想了解关于 Pingouin 包的更多信息,我已经写了一篇关于该包的更深入的解释。

3.统计模型

Statsmodels 是一个统计模型 python 包,它提供了许多类和函数来创建统计估计。Statsmodel 包曾经是 Scipy 模块的一部分,但是目前 statsmodel 包是单独开发的。

Scipy 和。Stats 和 statsmodel?这个 Scipy。Stats 模块侧重于概率函数和分布等统计定理,而 statsmodel 包侧重于基于数据的 统计估计

Statsmodel 提供了统计建模中经常使用的 API。Statsmodel 包将 API 分成 3 个主要模型:

  • 其中提供了许多横截面模型和方法,包括回归和 GLM。
  • [statsmodels.tsa.api](https://www.statsmodels.org/stable/api.html#statsmodels-tsa-api)提供时间序列模型和方法。
  • [statsmodels.formula.api](https://www.statsmodels.org/stable/api.html#statsmodels-formula-api) 它提供了一个使用公式字符串和数据框架指定模型的接口——简单地说,您可以创建自己的模型。

对于任何想要更深入地理解统计建模的人来说,Statsmodel 是一个很好的入门包。用户指南深入解释了理解统计估计所需的概念。例如,摘自 Statsmodel 用户指南的内生和外生术语在以下段落中进行了解释:

这些术语的一些非正式定义如下

内生:体制内因素导致

外源性:系统外因素引起

*内生变量指经济/计量经济学模型中的变量,这些变量由该模型解释或预测。*http://stats.oecd.org/glossary/detail.asp?ID=794

外生变量指出现在经济/计量经济学模型中,但该模型无法解释的变量(即,它们被认为是模型给定的)。http://stats.oecd.org/glossary/detail.asp?ID=890T2

让我们尝试使用 Statsmodel 软件包学习 OLS(普通最小二乘)建模。如果您没有使用 Anaconda 发行版中的 Python 或者没有安装 Statsmodel 包,您可以使用下面的代码行来完成。

pip install statsmodels

继续这些步骤,让我们通过导入包和数据集来开发模型。

#Importing the necessary package
from sklearn.datasets import load_boston
import statsmodels.api as sm
from statsmodels.api import OLS#import the data
boston = load_boston()
data = pd.DataFrame(data = boston['data'], columns = boston['feature_names'])
target = pd.Series(boston['target'])#Develop the model
sm_lm = OLS(target, sm.add_constant(data))
result = sm_lm.fit()
result.summary()

图片来自作者

您使用 Statsmodel 软件包开发的 OLS 模型将具有您期望的模型估计的所有必要结果。关于结果的进一步解释,你可以访问主页上的 OLS 的例子。

结论

作为一名数据科学家,你应该具备足够的统计学知识。问题是,很多数据爱好者只专注于学习编程语言,尤其是 Python。为了帮助统计研究,我想介绍我学习统计的前 3 个 Python 包。它们是:

  1. Scipy。统计数据
  2. 平古因
  3. 统计模型

访问我的LinkedInTwitter

如果您没有订阅为中等会员,请考虑通过我的推荐订阅。

操纵熊猫数据帧的 3 个技巧

原文:https://towardsdatascience.com/3-tricks-for-manipulating-pandas-dataframes-c7933a56b6e0?source=collection_archive---------24-----------------------

发掘熊猫的全部潜力

照片由维托达·克莱恩在 Unsplash 上拍摄

Pandas 是数据科学生态系统中使用最广泛的库之一。它为有效的数据分析和操作提供了许多功能和方法。

阅读整个文档并试图一次了解所有的功能和方法并不是掌握 Pandas 的明智方法。相反,通过解决任务和问题来学习效率要高得多。

在本文中,我们将解决 3 个涉及操作数据框的任务。用于解决这些任务的方法也将有助于其他一些任务。

我们将利用 NumPy 函数,所以让我们从导入两个库开始。

import numpy as np
import pandas as pd

堆叠数据框

假设我们有以下数据帧。

(图片由作者提供)

我们需要将它们组合成一个数据框。一种方法是使用熊猫的concat功能。但是,它将为两个数据框中的每个列名创建一个单独的列。

pd.concat([df1, df2, df3])

(图片由作者提供)

如果我们用这种方法组合几个数据框,我们最终会得到一个包含太多列的数据框。相反,我们想要的是:

(图片由作者提供)

我们可以通过使用 NumPy 的vstack函数来创建它。以下代码片段生成了上述数据框。

pd.DataFrame(np.vstack([
    df1.columns, df1, 
    df2.columns, df2, 
    df3.columns, df3]))

我们也可以用columns参数指定列名。

df = pd.DataFrame(
    np.vstack([df1.columns, df1, 
               df2.columns, df2,
               df3.columns, df3]),
    columns = ["product_code","msr1","msr2","msr3"]
)df

(图片由作者提供)

选择每隔一行

让我们看一下刚刚创建的数据框。第一、第三和第五行不包含数值。它们表示测量的种类。

出于某种原因,我们希望只选择包含数值的行。因此,从第二行开始,我们需要每隔一行。

Pandas 的iloc方法在如何从数据帧中选择行和列方面非常灵活。我们可以指定起始和结束索引以及步长。

df.iloc[1::2]

(图片由作者提供)

第一个和第二个数字分别是起始和结束索引。因为我们想一直走到最后一行,所以我们不必指定结束索引,所以它保留为空。最后一个数字是步长。如果我们需要选择每第三行,步长变为 3,依此类推。

iloc方法还允许使用列索引来选择列。

df.iloc[1::2, :3]

(图片由作者提供)

逗号后面的数字指定要选择的列。“:3”表达式表示从开头开始选择第三列。我们也没有指明步长,所以使用默认值 1。

在特定位置创建新列

向数据框添加新列是一种常见的操作。Pandas 使得创建新列变得非常简单。

一种方法是写一个列名并分配一个常数值。让我们在数据框中添加一个日期列。

df["date"] = "2021-10-05"df

(图片由作者提供)

默认情况下,新列添加在末尾。如果我们想在特定的列索引处添加一个新列,我们应该使用insert函数。

以下代码片段在数据框的开头创建了一个新的日期列。

df.insert(0, "new_date", "2021-10-05")df

(图片由作者提供)

第一个参数是新列的索引。第二个参数是列名,最后一个参数定义列值。

结论

在处理表格数据时,Pandas 很有可能为您的任务或问题提供解决方案。当你练习和解决熊猫的问题时,你会发现这个神奇图书馆的伟大之处。

和其他软件工具一样,学习熊猫的最好方法是练习。阅读整个文档而不做任何练习只能让你达到一定的水平。你应该通过大量的练习来支持它。

感谢您的阅读。如果您有任何反馈,请告诉我。

提高熊猫技能的 3 个技巧

原文:https://towardsdatascience.com/3-tricks-to-sharpen-your-pandas-skills-ce63356890d7?source=collection_archive---------28-----------------------

让数据分析更进一步

照片由 Unsplash 上的 Aziz Acharki 拍摄

Pandas 是使用最广泛的数据分析和操作库之一。它提供了许多功能和方法来加快和简化数据分析过程。

本文我们的重点不是熊猫的常用功能。相反,我们将介绍 3 个不常见但非常有用的技巧或技术。

我们将使用 Kaggle 上的营销数据集。让我们从导入库和读取数据集开始。

import numpy as np
import pandas as pddf = pd.read_csv("/content/DirectMarketing.csv")
df.head()

(图片由作者提供)

1.NamedAgg

第一个技巧是 NamedAgg 方法,它通常与 groupby 函数一起使用。

假设我们要计算年龄列中每个类别的平均工资和总支出。下面是我们如何使用 groupby 函数来实现的。

df[['Age','Salary','AmountSpent']].groupby('Age')\
.agg({'Salary':'mean', 'AmountSpent':'sum'}).round(2)

(图片由作者提供)

我们已经完成了预期的计算,但是有一个小问题。我们无法真正区分哪个聚合函数应用于哪个列。一种解决方案是事后重命名这些列。例如,我们可以将它们重命名为“avgSalary”和“totalSpent”。

有一个更实际的解决方案,我们称之为 dAgg 技巧。它允许定制聚合列的名称。下面是我们如何在 agg 函数中实现它。

df[['Age','Salary','AmountSpent']].groupby('Age')\
.agg(
   avgSalary = pd.NamedAgg('Salary','mean'),
   totalSpent = pd.NamedAgg('AmountSpent','sum')
)

(图片由作者提供)

2.侧桌

第二个技巧涉及一个名为 Sidetable 的第三方包,它是由 Chris Moffitt 创建的。

我们首先需要安装它。

$  python -m pip install -U sidetable #from terminal!pip install sidetable #jupyter notebook

我们现在可以导入并开始使用它。一旦导入,它就可以像 str 和 dt 访问器一样用作数据帧的访问器。

import sidetable

Sidetable 有 4 个不同的函数,其中一个是 freq 函数。它返回关于给定列的三条信息:

  • 列中每个值的观察值(即行数)(value_counts())。
  • 整列中每个值的百分比(value_counts(normalize=True))。
  • 以上两个的累积版本。

让我们把它应用在年龄栏上。

import sidetabledf.stb.freq(['Age'])

(图片由作者提供)

默认情况下,freq 函数计算行数。如果我们使用 value 参数传递另一列,它将返回该列中值的总和。

df.stb.freq(['Age'], value = 'AmountSpent')

(图片由作者提供)

Sidetable 提供了另外三个功能。如果你想进一步阅读,这里有一篇关于 sidetable 的更详细的文章。

3.询问

过滤值是数据分析中的典型操作。Pandas 在如何过滤数据帧方面非常灵活。

第三个技巧是允许通过将条件作为字符串传递来过滤数据帧的方法。

假设我们要过滤工资高于 60000 且子代数量为 2 的行。一种过滤方法如下。

df[(df.Salary > 60000) & (df.Children == 2)].shape
(68, 10)

使用查询方法,我们可以将条件作为字符串传递。

df.query('Salary > 60000 and Children == 2').shape
(68, 10)

在某些情况下,使用查询方法键入多个条件会更简单。

结论

随着你不断练习,熊猫会变得更有用。它提供了各种各样的技术来完成一个典型的数据分析和处理过程中的几乎任何操作。

我们在本文中所举的例子可能并不常用,但在某些情况下肯定是有用的。

我最喜欢熊猫的一点是,完成一项既定任务几乎总是有不止一种方法。随着你对熊猫的了解越来越多,你开始适应自己的做事方式。

感谢您的阅读。如果您有任何反馈,请告诉我。

基于迁移学习的伯特语境化词汇嵌入的三种类型

原文:https://towardsdatascience.com/3-types-of-contextualized-word-embeddings-from-bert-using-transfer-learning-81fcefe3fe6d?source=collection_archive---------2-----------------------

实践教程

使用 python、pytorch 和 pytorch-transformers 从 BERT 中提取上下文化单词嵌入的教程,以获得三种类型的上下文化表示。

作者图片

动机

**自谷歌在 2018 年推出 BERT 模型以来,该模型及其功能已经在许多领域激发了数据科学家的想象力。**该模型适用于不同的领域,如用于科学文本的 SciBERT ,用于生物医学文本的 bioBERT ,以及用于临床文本的 clinicalBERT 。拥有 1.1 亿个参数的 lofty 模型也进行了压缩,以便于使用,如 ALBERT (90%压缩)和 DistillBERT (40%压缩)。最初的 BERT 模型及其改进已经被用于提高搜索引擎的性能、内容调节、情感分析、命名实体识别等等。

文章结构

在本文中,我将展示使用 python、pytorch 和 transformers 从 BERT 获得上下文化单词嵌入的三种方法。

文章分为以下几个部分:

  • 什么是迁移学习?
  • BERT 嵌入是如何用于迁移学习的?
  • 设置 PyTorch 以获得 BERT 嵌入
  • 提取单词嵌入(“上下文无关”预训练嵌入,“基于上下文”预训练嵌入,“上下文平均”预训练嵌入)
  • 结论

什么是迁移学习?

**在迁移学习中,嵌入预训练机器学习模型中的知识被用作为不同任务建立模型的起点。**迁移学习应用在计算机视觉和自然语言处理领域已经爆炸式增长,因为它需要少得多的数据和计算资源来开发有用的模型。它被称为机器学习的下一个前沿领域。

BERT 嵌入是如何用于迁移学习的?

BERT 已经在几个自然语言处理应用中用于迁移学习。最近的例子包括检测仇恨言论,分类健康相关的推文,以及孟加拉语情感分析。

设置 PyTorch 以获得 BERT 嵌入

查看 我的 Jupyter 笔记本 获取完整代码

# Importing the relevant modulesfrom transformers import BertTokenizer, BertModel
import pandas as pd
import numpy as np
import torch# Loading the pre-trained BERT model
###################################
# Embeddings will be derived from
# the outputs of this modelmodel = BertModel.from_pretrained(‘bert-base-uncased’,
           output_hidden_states = True,)# Setting up the tokenizer
###################################
# This is the same tokenizer that
# was used in the model to generate
# embeddings to ensure consistencytokenizer = BertTokenizer.from_pretrained(‘bert-base-uncased’)

我们还需要一些函数将输入转换成正确的形式

**def** bert_text_preparation(text, tokenizer):
    *"""Preparing the input for BERT*

 *Takes a string argument and performs*
 *pre-processing like adding special tokens,*
 *tokenization, tokens to ids, and tokens to*
 *segment ids. All tokens are mapped to seg-*
 *ment id = 1.*

 *Args:*
 *text (str): Text to be converted*
 *tokenizer (obj): Tokenizer object*
 *to convert text into BERT-re-*
 *adable tokens and ids*

 *Returns:*
 *list: List of BERT-readable tokens*
 *obj: Torch tensor with token ids*
 *obj: Torch tensor segment ids*

 *"""*
    marked_text = "[CLS] " + text + " [SEP]"
    tokenized_text = tokenizer.tokenize(marked_text)
    indexed_tokens = tokenizer.convert_tokens_to_ids(tokenized_text)
    segments_ids = [1]*len(indexed_tokens)

    *# Convert inputs to PyTorch tensors*
    tokens_tensor = torch.tensor([indexed_tokens])
    segments_tensors = torch.tensor([segments_ids])

    **return** tokenized_text, tokens_tensor, segments_tensors

另一个功能是将输入转换成嵌入

**def** get_bert_embeddings(tokens_tensor, segments_tensors, model):
    *"""Get embeddings from an embedding model*

 *Args:*
 *tokens_tensor (obj): Torch tensor size [n_tokens]*
 *with token ids for each token in text*
 *segments_tensors (obj): Torch tensor size [n_tokens]*
 *with segment ids for each token in text*
 *model (obj): Embedding model to generate embeddings*
 *from token and segment ids*

 *Returns:*
 *list: List of list of floats of size*
 *[n_tokens, n_embedding_dimensions]*
 *containing embeddings for each token*

 *"""*

    *# Gradient calculation id disabled*
    *# Model is in inference mode*
    **with** torch.no_grad():
        outputs = model(tokens_tensor, segments_tensors)
        *# Removing the first hidden state*
        *# The first state is the input state*
        hidden_states = outputs[2][1:]

    *# Getting embeddings from the final BERT layer*
    token_embeddings = hidden_states[-1]
    *# Collapsing the tensor into 1-dimension*
    token_embeddings = torch.squeeze(token_embeddings, dim=0)
    *# Converting torchtensors to lists*
    list_token_embeddings = [token_embed.tolist() **for** token_embed **in** token_embeddings]

    **return** list_token_embeddings

提取单词嵌入

我们将为以下文本生成嵌入

*# Text corpus*
*##############*
*# These sentences show the different*
*# forms of the word 'bank' to show the*
*# value of contextualized embeddings*

texts = ["bank",
         "The river bank was flooded.",
         "The bank vault was robust.",
         "He had to bank on her for support.",
         "The bank was out of money.",
         "The bank teller was a man."]

嵌入以下列方式生成

*# Getting embeddings for the target*
*# word in all given contexts*
target_word_embeddings = []

**for** text **in** texts:
    tokenized_text, tokens_tensor, segments_tensors = bert_text_preparation(text, tokenizer)
    list_token_embeddings = get_bert_embeddings(tokens_tensor, segments_tensors, model)

    *# Find the position 'bank' in list of tokens*
    word_index = tokenized_text.index('bank')
    *# Get the embedding for bank*
    word_embedding = list_token_embeddings[word_index]

    target_word_embeddings.append(word_embedding)

最后,使用该代码计算不同上下文中单词库的嵌入之间的距离

**from** **scipy.spatial.distance** **import** cosine

*# Calculating the distance between the*
*# embeddings of 'bank' in all the*
*# given contexts of the word*

list_of_distances = []
**for** text1, embed1 **in** zip(texts, target_word_embeddings):
    **for** text2, embed2 **in** zip(texts, target_word_embeddings):
        cos_dist = 1 - cosine(embed1, embed2)
        list_of_distances.append([text1, text2, cos_dist])

distances_df = pd.DataFrame(list_of_distances, columns=['text1', 'text2', 'distance'])

我们创建了一个熊猫数据框架来存储所有的距离。

查看 我的 Jupyter 笔记本 获取完整代码

1.“上下文无关”的预训练嵌入

**第一个文本(“银行”)生成一个上下文无关的文本嵌入。**这是与上下文无关的,因为没有伴随的单词为“bank”的含义提供上下文。在某种程度上,这是单词“bank”所有嵌入的平均值。

可以理解的是,这种上下文无关的嵌入看起来不像是单词“bank”的一种用法。这在上下文无关的嵌入和单词的所有其他版本之间的余弦距离中是明显的。

2.“基于上下文”的预训练嵌入

从带有单词“bank”的每个句子中为单词“bank”生成的嵌入创建了基于上下文的嵌入。这些嵌入是迁移学习最常见的形式,显示了这种方法的真正威力。

在这个例子中,单词“bank”在表示金融机构时的嵌入与它在表示河岸或单词的动词形式时的嵌入相去甚远。

3.“上下文平均”预训练嵌入

当所有嵌入被平均在一起时,它们创建一个上下文平均嵌入。这种嵌入方式在某些需要获得单词平均含义的应用程序中可能很有用。

令人惊讶的是,该词的上下文无关版本和上下文平均版本并不相同,如它们之间的余弦距离 0.65 所示。

结论

迁移学习方法可以给自然语言处理项目带来价值。在本文中,我通过在不同的上下文中为单词“bank”生成上下文化的 BERT 嵌入,展示了迁移学习的一个版本。我还展示了如何提取三种类型的单词嵌入——上下文无关的、基于上下文的和平均上下文的。理解这些嵌入之间的区别并为您的应用使用正确的嵌入是很重要的。

查看 我的 Jupyter 笔记本 获取完整代码

3 个被低估的高前景数据工作

原文:https://towardsdatascience.com/3-underrated-data-jobs-with-high-prospects-1b86987942ab?source=collection_archive---------22-----------------------

这份被低估的工作实际上很有前途

马丁·比约克在 Unsplash 上的照片

正如我们经常听到的,数据科学是 21 世纪最性感的工作。创造很酷的东西和高薪的诱惑确实吸引了许多应届毕业生和当前的专业人士进入这些数据职业。然而,兴趣的增加意味着竞争的增加,这意味着不是每个人都能获得数据科学职业。

幸运的是,如果你对与数据相关的工作感兴趣,数据科学并不是唯一的职业。数据职业中存在许多分支,与金童“数据科学”相比,有些分支被低估了。这些职业是什么?让我们开始吧!

1.数字分析师

什么是数字分析师?这是一个工作角色,个人负责分析公司的数字资产,如应用程序或网站。担任这一角色的人通常负责创建报告、开发仪表板、分析数据,并根据数字分析做出决策。

数字分析师需要使用商业智能工具来获取数据并进行分析,从而在品牌竞争中获得竞争优势。此外,数字分析师需要了解市场上发生了什么,并知道如何提高公司 SEO。总体而言,数字分析师需要进行研究分析,并处理大量定性和定量数据。

数字分析师经常需要与销售和营销部门合作,因为他们的工作是交叉的。数字分析师为营销和销售团队提供对数字数据的洞察和分析,以增强他们的销售活动。

这个头衔有各种各样的变体,比如数字营销分析师、数字媒体分析师、数字体验分析师、数字研究分析师等等。然而,数字分析师与数据分析师并不相同,尽管他们很相似。更具体地说,数字分析师可以被认为是数据分析师的子集,其中数字分析师专门分析数字数据。

总而言之,数字分析师需要能够:

  • 分析大量数字数据,获得可操作的洞察力
  • 了解当前市场并驾驭数字环境
  • 使用数字工具访问和分析数据
  • 以可理解的方式向组织展示结果
  • 制定有洞察力的 KPI(关键绩效指标)

那么,为什么考虑将数字分析师作为你的数据职业?数字是现代生活的重要组成部分,流行病加速了数字化进程。几乎每个行业现在都处于数字行业中,因此增加了数字需求的差距。作为证明,许多行业报告他们的数字业务大幅增长,业务增长从 50%到 100%以上。在当今世界,数字分析师比以往任何时候都更有必要

就薪水而言,数字分析师可以为没有太多经验的人赚很多钱,正如 PayScale的数字分析师薪水所示。总的来说,你可以期望从 50.000 美元开始,随着你获得更多的经验而增加。

总的来说,如果你对数字分析师的工作感兴趣,你需要各种技能,如阅读数据、熟练使用数字工具、研究能力和良好的沟通。为了帮助你学习,你可能想看看这个职业指南或介绍材料。

2.商业智能开发人员

商业智能(BI)开发人员负责开发 BI 界面,我们称之为仪表板。我们经常看到业务用户使用这个仪表板来深入了解他们的业务,并根据这些信息做出决策。下图是仪表板的一个示例。

照片由卢克·切瑟在 Unsplash 上拍摄

BI 开发人员在业务线的每个部分都很重要,因为他们是业务用户信息来源的第一线。根据我的个人经验,许多商业用户很难做出重要的决定,因为很多信息没有翻译好。一个 BI 开发人员来将海量数据转化为有洞察力的业务需求——用户对这种 BI 开发的请求非常长;这就是你知道他们对企业有多重要的原因。

虽然对你的工作来说,整天创建仪表板听起来很容易,但事实并非如此。作为一名 BI 开发人员,这项工作需要您理解许多层面,包括:

  • **数据来源。**您在仪表板中使用的数据需要存储在某个地方,主要是数据仓库或存储系统。作为一名 BI 开发人员,您需要了解数据存储在哪里,以及仓库是如何设计的,因为您将与所有这些数据密切相关。了解数据存储系统和数据查询,成为 BI 开发人员的一项重要技能。 所需技能: 查询,了解数据库系统。
  • 处理。您已经了解了数据的存储位置和所需的数据,这意味着您需要做的下一件事是提取、转换和加载(ETL)数据,以将其统一到一个单一的源中。每个业务用户都有不同的需求,这意味着您需要了解业务需要什么,并将来自数据源的数据编织成他们需要的实际信息。 所需技能: 数据理解、业务理解、沟通、研究。
  • **举报。**将数据处理成信息数据源后,您必须在商业智能工具界面中呈现它。在这一部分中,您需要创建一个交互但有洞察力的可视化界面,让业务用户能够立即理解。这个练习需要你设置业务的所有组件,并从长远来看保持质量。 所需技能: 数据可视化、数据管理、BI 工具理解、创造力。

总的来说,BI 开发人员是一个了解技术工具和业务的全面发展的人。这个角色适合那些喜欢分析数据并将数据转化为对业务用户的洞察力的人。

这些工作头衔有很多变体,包括商业智能顾问、数据仓库开发人员、ETL 开发人员、数据库应用程序开发人员等等。关于这个标题的主要事情是你从端到端的过程中产生结果。

为什么考虑 BI 开发人员的职业道路?与我之前提到的报告类似,许多企业正在走向数字化,这意味着更多的数据以数字化方式处理,理解这些数据的需求比以往任何时候都更大。这篇文章中提到的数据证明了这一点,美国劳工统计局预计到 2024 年就业增长率将为 14%

从职业生涯早期开始,BI 开发人员的薪水就很丰厚,这从 Payscale 的薪资分布可以看出。没有这方面经验的人最初的年薪可能是 6 万美元左右,当他们获得更多经验时会增加,尽管当你已经做了 10 年这份工作时会有点停滞不前。

如果你对这个职位感兴趣,你可能想看看 IBM 的这个指南,它会更详细地介绍所有的工作描述和你需要的技能。

3.数据架构师

数据架构师是创建适合业务需求的组织框架的个人。换句话说,数据架构师创建满足业务需求的组织数据蓝图。然后,数据蓝图将用于成为数据库的业务数据框架以及数据如何流动的基础。

看似简单?其实没那么简单。众所周知,业务需求是一个复杂的网络,每个部门都有不同的需求。数据架构师需要理解所有的部门业务需求,并在同一个蓝图中以某种方式管理它们,因为它们会交叉在一起。

让我们来分解一下数据架构师的职责。我们已经知道,数据架构师需要为组织创建数据蓝图。凭借这一职责,数据架构师负责:

  • 将业务需求转化为技术需求。这是因为业务需求将在蓝图中以某种方式进行转换,以便在技术方面做好准备。例如,业务需要机器学习模型使用实时流数据进行预测,在这种情况下,数据架构师需要考虑数据库结构如何能够获取实时流数据,以及数据如何从端到端流动以满足业务需求。
  • 设置数据标准。数据架构师负责满足业务策略标准,包括法律、安全、技术需求等等,因为数据架构师是在前端设置一切的人。这个人需要考虑每个使用这个框架的人会遵循的每个标准方面。
  • **定义数据流。**数据蓝图需要解决数据如何在组织中流动的问题。数据的流动,包括数据存储在哪里,它将去往哪里,谁可以访问数据,它需要以多快的速度前进,等等。数据架构师不需要知道最终的数据处理结果,因为其他人通常会转换它;然而,他们仍然需要知道源头在哪里,它要去哪里。
  • 协作。数据架构师负责讨论不同部门的业务需求,并在蓝图中实现它们。此外,因为有时您的公司没有所有的技术工具,所以您需要与供应商合作。

如果我需要总结上述职责所需的技能,你需要是一个拥有商业和技术知识的全面发展的人。

数据架构师的角色与数据工程师不同。把数据架构师想象成计划者,把数据工程师想象成计划的执行者。数据架构师的责任实际上相当高,通常不是早期的职业选择。许多数据架构师是希望更多参与业务的高级数据工程师。

**为什么应该考虑将成为数据架构师作为职业选择?**如果我们看一下调查数据,对数据架构师的需求这些年来增长了 15.94%。由于数据架构师是一个不断发展的角色,世界上仍然没有标准——这意味着谁更早参与这个职业,谁就会成为标准。这是一个独特的职业选择,但会有回报,尤其是薪水。

这是从薪级表中为 0-1 年经验的人提供的数据架构师工资。看来他们每年都在这里赚不少钱。你可以从接近 7 万美元开始,如果你有 5 年以上的经验,每年可以达到 10 万美元以上。

结论

数据工作不仅限于数据科学家或数据分析师。在这个现代化的时代,很多数据类的工作,因为这些岗位的需要,在未来有很高的前景。工作是:

  1. 数字分析师
  2. 商业智能开发人员
  3. 数据架构师

希望有帮助!

如果您喜欢我的内容,并希望获得更多关于数据或数据科学家日常生活的深入知识,请考虑在此订阅我的 简讯。

如果您没有订阅为中等会员,请考虑通过 我的推荐 订阅。

在我的LinkedInTwitter 上访问我。

作为数据科学家的 3 项意外工作

原文:https://towardsdatascience.com/3-unexpected-work-activities-as-a-data-scientist-bc99b86c021f?source=collection_archive---------12-----------------------

数据科学工作不仅仅是编码

由 Unsplash 上的 krakenimages 拍摄的照片

很多人认为数据科学家唯一做的工作就是编码和开发机器学习模型。编码技能可能是我们被雇佣的原因,但现实是不同的。在编码之外,我们有许多意想不到的工作要做,只有成为数据科学家后才知道。

这就是为什么在这篇文章中,我想解释我作为数据科学家的经验,我们的工作规范比许多人预期的要大得多。让我们开始吧!

1.说服人们

这是什么意思?我们数据科学家需要说服其他人吗?我们要说服什么,为什么它是必要的?。当我告诉你数据科学家需要说服人们时,这种问题可能会出现在你的脑海中——但说服人们是我们的工作。

数据科学、人工智能和机器学习是行业的新人。在过去,我们已经习惯于根据直觉和当时任何有意义的东西来做决定。随着新技术的出现,我们可以处理所有可用的数据来做出数据驱动的决策,而不是仅仅依靠直觉。然而,就像任何新出现的事物一样,许多人对数据科学的前景持怀疑态度。

解释数据科学的前景是数据科学家的工作,我们需要让人们相信我们的工作会让他们的工作受益,让业务受益,让公司受益。**如果他们的老方法已经奏效,他们为什么还要使用你的洞察力和机器学习模型?**这个问题是我们日常工作中常见的一道坎。

以我的经验来看,我遇到过很多商界人士的抵制。不理解我们所做的事情的人,不想改变生活方式的人,害怕新事物的人。我不能责怪他们不理解,因为机器学习模型对于非技术人员来说就像魔术一样。但是,说服我们的工作是数据科学家需要做的事情——如果人们不想使用你的洞察力或模型,这是一种无用的努力。

我是否总能成功说服人们在工作中使用数据产品或机器学习模型?答案是否定的。很多时候,人们会否认数据科学的用处。说服他们的理想方法是什么?

没有说服人的黄金法则,因为每个公司都有自己的文化,每个企业都有自己的方式,每个人都有自己的个性。我能给你的一个建议是:

试着用数据展示你的模型的有用性来说服别人,目的是让对方好奇。不要在第一次会面时就立即信服,而是通过“研究”他们的业务问题,尝试说服他们再次会面。

没有充分的证据,你无法让人信服;这就是为什么你需要一些东西来支持你的主张。数据科学家总是会发现不可战胜的人,但你应该总是欣赏更开明的人。

2.主要的

起初,数据科学家可能只会致力于开发机器学习模型来解决业务问题,但随着经验的积累,责任也越来越大。随着时间的推移,这种责任将会演变,你将需要领导你工作中的许多事情。

以我的亲身经历为例。公司信任我开发一个机器学习模型来帮助解决我早期的业务问题。对于一个初学者来说,我不太了解业务和数据。然而,有时我会知道我的机器学习模型需要什么来帮助公司——它需要许多部门的组合:销售、营销、数据工程师、it、数字等等。因为我是最知道如何让这个项目成功的人,我自然会成为项目负责人,并且需要保持成功的所有变量。

在我们的数据科学工作中,我们有时需要领导,即使我们处于初级职位。范围可能因人而异,但你会以这样或那样的方式经历领导。您可能需要领导项目并与许多人联系,领导您的团队,甚至领导您公司的数据成功方向。

许多数据科学家不喜欢这样做,因为他们认为这不是他们的工作描述。然而,如果你想推进你的事业,让你的模式有所进展,你需要学习领导力。此外,来自您的分析和模型开发的洞察力是有价值的,并且您是最了解它将如何影响业务的人。如果我们不是引领这场变革的人,还有谁会是呢?

如果你想获得更多作为数据科学家的领导经验,我给你一些建议:

  1. 主动出击。不要只期待事情会为你解决,而是要走自己的路,
  2. 不要逃避赋予你的责任。给你的工作是信任的标志,也是展示你领导能力的机会,
  3. 向你的老板表达你的愿望。如果你想要体验,你应该讨论一下,
  4. 积极参与工作之外的活动。你可能在数据部门工作,但是你的公司里有很多人。尽量多结交一些你平时工作圈子之外的人;会有帮助的。

3.商务翻译

数据科学是行业中的新事物,许多人仍然不明白它对业务有多大用处。这种观点意味着数据科学家需要成为数据科学概念和业务人员之间的中间人。

当企业用户带着他们的问题而来,需要我们的帮助时,我总是很兴奋。我为什么兴奋?因为我可以创造性地帮助他们的生意。根据我的个人经验,商务人士有时会有一个很好的主意来解决他们的业务问题,并多少知道该怎么做。尽管如此,他们还不确定如何将其转化为技术执行。这就是我们作为数据科学家来帮助他们分析他们想要什么,并利用我们的创造力将其分解为可行的解决方案的地方。

例如,该公司可能需要分析团队帮助产生更好的销售线索,因为他们当前的流程还没有达到目标。我们可以通过分析根本原因来帮助他们,并开发一个机器学习模型来产生线索。对数据科学家来说听起来很容易,对吗?

然而,想象你自己是数据科学家通过这种方法展示的业务人员:

“从分析团队来看,我们将分析数据,看看特征之间是否有很强的相关性,我们将开发精度目标为 80%的集成机器学习模型。”

数据科学家理解上面的术语,但非技术人员不会理解。他们不知道我们所说的技术术语,这些术语只会让他们更加困惑。困惑的后果通常归结为两件事:

  1. 人们避免使用分析方法,因为他们不理解,
  2. 人们接受方法,但执行往往会偏离路线,因为在开始时没有牢固地建立概念。

对于业务人员,我们可以将上面的技术术语转换为:

“在分析团队中,我们会分析数据,试图找出销售额下降的原因,我们会开发工具来帮助预测有很大机会购买该产品的销售线索。理想情况下,销售线索将贡献收入目标的 10%。”

上面的句子使用较少的技术术语,并使目标更符合业务目标。

作为数据科学家,我们需要以人们能够理解的方式将技术解决方案翻译给业务人员。将数据科学要求完全转化为业务语言需要实践,但并非不可能。我可以提供一些建议来帮助学习翻译技巧:

  1. 尽可能避免技术术语,使用商业语言,
  2. 不要过度承诺。数据科学家有能力开发模型,但影响成功的变量很多,所以我们的承诺可能会被解释为其他东西,
  3. 从商业人士那里挖掘尽可能多的信息。让你的想法与他们一致,如果你不明白就问问题。

结论

雇佣数据科学家是因为他们的分析和编码技能。然而,他们的工作活动不止于此。在本文中,我解释了作为一名数据科学家的三个意想不到的工作活动。它们是:

  1. 说服人们
  2. 主要的
  3. 商务翻译

希望有帮助!

如果你喜欢我的内容,并想获得更多关于数据或数据科学家日常生活的深入知识,请考虑在此订阅我的 简讯。

在我的LinkedInTwitter 上访问我。

你应该在 2021 年开始使用的 3 个有用的 SQL 特性

原文:https://towardsdatascience.com/3-useful-sql-features-you-should-start-using-in-2021-4346c7ffdc55?source=collection_archive---------52-----------------------

是时候使用日期分区、分析窗口函数和 with 子句将您的查询提升一个档次了

由 Unsplash 上的 Pietro Jeng 拍摄

我将带着一个重要的新年决心开始 2021 年:**练习更复杂的 SQL 查询。**如果你也在这条船上,和我一起探索 Google BigQuery 的 3 个有用的 SQL 特性。

你将学习如何:

  1. 创建带有日期分区的表
  2. 使用(分析)窗口函数对一组行进行聚合
  3. 使用 WITH 子句分解复杂的查询

根据您的背景,这些可能看起来像出现在其他关系数据库中的基本特性,或者它们可能看起来很奇特。无论哪种方式,我都包含了详细的例子和解决每个问题的方法。所以让我们跳进舒适的地方,开始吧!

开始之前

在 Google BigQuery 中,您需要了解以下层次结构:项目—数据集—表/视图

  • 一个项目组织所有资源(例如数据、存储、计算引擎等。)待用。一个项目可以包含一个或多个数据集。
  • 数据集是一个容器,用于组织和控制对表和视图的访问。数据集可以包括一个或多个表和/或视图。

在分析任何数据之前,我们必须创建一个项目和一个数据集。以下是如何在不到 3 分钟的时间内做到的。

创建项目

点击选择一个项目并选择新项目

作者照片

看到下面的屏幕后,指定您选择的项目名称,然后单击创建

作者照片

完成项目创建大约需要 10-20 秒。关于完成状态的通知可以通过点击位于屏幕右上角的钟形图标来查看。

创建数据集

接下来,您将创建一个数据集来存储新表。

检查 Google Cloud Platform 旁边顶部菜单中显示的项目名称。如果不是新创建的项目,点击选择项目切换到正确的项目。

作者照片

选择项目名称,然后点击创建数据集

作者照片

当看到新项目下的新数据集时(如下所示),您已经准备好开始了。

作者照片

创建带有日期分区的表

目标

创建一个新的表格,包括从 2010 年起空气中 PM2.5 颗粒的所有日平均水平。

此外,在新表格中,包括一个新列,以表明基于 PM2.5 水平的空气质量类别。

作者照片(信息改编自澳大利亚维多利亚环境保护局

PM2.5 颗粒是一种常见的空气污染物,通常存在于烟雾中。它们小到足以让人类深深地吸入我们的肺部或进入我们的血液。当 PM2.5 水平较高时,对空气污染敏感的人可能会出现胸闷、呼吸困难、哮喘加重或心律不齐。

来自澳大利亚维多利亚州环境保护局

接近

  1. 创建一个新的永久表,将 2010 年以后的 PM2.5 水平隔离出来供后续查询,从而跳过 2020 年以前的所有历史记录(假设我们只对 2010 年以后感兴趣)。
  2. 仅从原始数据集中选择必要的列,以避免在扫描不相关的列时浪费时间和成本。
  3. 将 year of date_local 列绑定为一个分区,以便将新表划分为更小的分区,从而通过减少查询读取的字节数来提高查询性能和控制成本。
  4. 利用 CASE 语句创建一个新列,根据算术平均值映射空气质量类别

查询

作者照片

十秒外卖

如果您只关心特定时间段的记录(例如,去年,最近 7 天内), 创建日期分区表将允许我们完全忽略某些分区中与我们的查询无关的扫描记录,从而节省查询时间和成本

用窗口函数对一组行进行聚合

目标

对于每个州,确定哪个县在 2019 年 PM2.5 颗粒日水平最高的确切位置和日期

接近

  1. 查看所有 2019 年的读数,按降序排列各州记录组的所有算术平均值
  2. 包括州名、县名、纬度、经度、本地日期以及上述每个州的最高级别
  3. 仅选择具有最高算术平均值(即等级= 1)的记录

查询

作者照片

还记得那些 SQL ***钻的面试题找第二高,第三高等等吗?这个查询也工作得很好,因为您可以很容易地用 2、3 等替换 rank = 1 的 WHERE 子句。

十秒外卖

要计算一组行的聚合值(即按州/月/年计算的最高值), 选择(解析) 窗口函数 ,而不是使用昂贵的自联接

使用 WITH 子句分解复杂的查询

示例 1

目标

2019 年,哪些县至少有 5 天空气质量差(即 PM2.5 日均量达到 25 微克或以上)?对于每个县,总共有多少天空气质量较差?

接近

  1. 计算 2019 年各县 PM2.5 水平日均值
  2. 对于每个县,计算 PM2.5 达到 25 微克或以上的天数
  3. 包括至少有 5 天的县,以及 PM2.5 达到 25 微克或以上的天数。按天数降序排列,以突出显示空气质量差的天数最多的县和州

查询

作者照片

十秒外卖

为了解决一个复杂的查询, 使用the WITH 子句(又称为通用表达式表) 将复杂的问题分解成许多更小的步骤 和表,而不是试图编写一个大规模的组合 SQL 语句。

额外提示: 如果 WITH 子句中的表可以跨不同的查询重用,可以考虑创建一个永久表 来存储查询结果。这样做,可以避免在 WITH 子句中多次运行同一个查询。

示例 2

目标

对于各州县来说,2018 年和 2019 年 PM2.5 年均水平相差多少?

接近

  1. 对于每个州和县,计算 2018 年 PM2.5 的年平均水平
  2. 对于每个州和县,计算 2019 年 PM2.5 的年平均水平
  3. 将这 2 个结果合并成 1 个表,计算 2018 年和 2019 年 PM2.5 水平的差异。为了便于比较,将差值四舍五入到小数点后两位。

查询

作者照片

十秒外卖

为了使一个复杂的查询更具可读性, 使用 WITH 子句创建多个表表达式,然后连接得到的表

尽管向您展示了很长的查询和对我的方法的简要解释,但本文只涵盖了使用 Google BigQuery 可以做的事情的一小部分。但是,我希望这已经为您将要编写的所有有见地的查询提供了一个良好的起点。不可避免地,你会遇到障碍或者被一个困难的 SQL 问题卡住。在这种情况下,记得深呼吸,拿点喝的,开始把大问题分解成小块,就像我在方法中做的那样。你就要成功了,你会征服它的!

谢谢你的阅读,如果你有任何反馈,请告诉我。祝你愉快!

原载于 2021 年 1 月 18 日【http://thedigitalskye.com】

使用 Altair 和 Python 为信息丰富的图表提供 3 个可视化层

原文:https://towardsdatascience.com/3-visualization-layers-for-information-rich-charts-with-altair-and-python-7a66c0cbdd39?source=collection_archive---------24-----------------------

图层概述(图片由作者提供)

小技巧 ,教程— PYTHON —牛郎星

如何通过在图表上添加有用的信息来提高讲故事的水平

1.介绍

无论使用 R 还是 Python,从数据创建初始图表都很容易。创建一个令人愉快的、信息丰富的、可重复的、用清晰可维护的代码编写的图表需要付出更多的努力。

在这篇文章中,我将分享我的工作流程和结构来实现这一点。我将向您展示如何构建您的代码,以及我所依赖的构建模块。在下一节中,我将解释我在本文中使用的数据和可视化包。在第 3 节中,我将概述图表分层结构,而在第 4 节中,我将提供三个如何应用分层结构的示例。最后,在第五部分,我对本文进行了总结。

基于 Gapminder 数据的故事情节示例(图片由作者提供)

2.设置

为了展示这些功能,我将使用 Gapminder 数据集。Gapminder 数据集包含该国几十年来的预期寿命、人均 GDP 和人口数据。此外,我将 Jupyter 笔记本与熊猫结合使用。

如果你想知道我是如何构建我的代码的,它被称为方法链或管道(在 R 社区中)。我在我的另一篇文章中解释了的基础知识。

您可能知道,我使用 R 开始了我的数据科学生涯,因此,我非常熟悉 ggpot2 。随着我在客户项目中越来越频繁地使用 Python,我开始寻找类似的 Python 可视化包。我很高兴地说,有了情节,就有了一个很好的选择。

然而,由于我喜欢尝试新事物,特别是可视化软件包,我想尝试一下 牛郎星软件包 。Altair 是一个 Python 数据可视化包,它遵循一种声明式方法,就像 ggplot2 和 Plotnine 。

Gapminder 数据集(图片由作者提供)

3.可视化图层和工作流

在向您介绍这三个可视化层之前,我很快提到了数据框对于这个设置是必不可少的。

可视化层和相互依赖性(图片由作者提供)

原始数据框是您想要可视化的数据框。在第 4 节的运行示例中,我使用了 Gapminder 数据集。从原始数据帧,我生成了汇总数据帧。我称之为“汇总”,因为我经常从原始数据中计算汇总,即平均值、四分位数和计数。请参见下图中的示例。

图表层是指您想要准备的可视化,例如直方图、箱线图或箱线图。在下图中,它是一个直方图。图形层保存任何元素以向图表层添加更多信息。例如,统计汇总信息,如显示为水平线或垂直线的四分位数或平均值。我使用文本层来显示文本,比如解释、亮点和统计信息。

4.应用可视化层(运行示例)

4.1 预期寿命柱状图

对于原始数据帧,我使用 Gapminder 数据,但我将只使用 2007 年的数据。

对于汇总数据框,我按分位数 0.25、0.5(中值)、0.75 和均值(平均值)汇总数据。

Gapminder 数据集汇总(图片由作者提供)

为了创建图表层,我使用 Altair mark_bar()创建一个直方图。请注意,我还设置了图表的标题、副标题和宽度&高度。

图表层示例(图片由作者提供)

图形层我将基于汇总数据框和 Altair mark_rule()基于统计汇总创建垂直线。

图形图层示例(图片由作者提供)

文本层汇总数据帧的结果。在 Altair 中,您可以使用 mark_text()函数添加文本注释。文本标签描述了来自图形层的元素。

文本层示例(图片由作者提供)

最后,我将所有的层放在彼此之上,并使用 configure_title()函数配置布局。

所有图层示例(图片由作者提供)

4.2 按大陆分列的预期寿命箱线图

原始数据帧没有变化。对于汇总数据框,我通过按分组并使用 describe()函数来汇总数据,然后只选择 lifeExp 变量,最后创建带有舍入值和文本标签的附加变量。

Gapminder 数据集汇总(图片由作者提供)

为了创建图表层,我使用 Altair mark_boxplot()来创建一个 boxplot。请注意,我还设置了图表的标题、副标题和宽度&高度。请注意 alt。EncodingSortfield() 对我不起作用。

图表层示例(图片由作者提供)

图形层我将基于汇总数据框和牛郎星 mark_tick()创建垂直线来显示每个大陆的平均值。

图形图层示例(图片由作者提供)

文本层汇总数据帧的结果。在 Altair 中,您可以使用 mark_text()函数添加文本注释。文本标签描述了各大洲的国家计数以及来自图层的平均值。

文本层示例(图片由作者提供)

最后,我将所有的层放在彼此之上,并使用 configure_title()函数配置布局。

所有图层示例(图片由作者提供)

4.3 每个非洲国家预期寿命的散点图

为了这个可视化,我增强了原始数据帧。首先,我对非洲国家进行筛选,然后创建一个名为四分位数范围的变量,描述预期寿命是低于等于第一个四分位数,高于等于第三个四分位数,还是四分位数间范围的一部分。最后,我创建一个排序向量。该向量按预期寿命排列列出了所有非洲国家。

对于汇总数据帧,我通过使用 describe()函数来汇总数据,然后只选择 lifeExp 变量,最后创建带有舍入值和文本标签的附加变量。

Gapminder 数据汇总(图片由作者提供)

为了创建图表层,我使用 Altair mark_point()创建一个散点图。请注意,我还设置了图表的标题、副标题和宽度&高度。

图表层示例(图片由作者提供)

图层我将基于汇总数据帧和牛郎星 mark_rule()来创建基于统计汇总的垂直线。

图形图层示例(图片由作者提供)

文本层汇总数据帧的结果。在 Altair 中,您可以使用 mark_text()函数添加文本注释。文本标签描述了来自图形层的元素。

文本层示例(图片由作者提供)

最后,我将所有的层放在彼此之上,并使用 configure_title()函数配置布局。

所有图层示例(图片由作者提供)

5.结论

创建和维护可再现的数据可视化并不是一项简单的任务。在这篇文章中,我分享了我的工作流程和结构来实现这个目标。我向您展示了如何构建您的代码,以及我所依赖的构建块。在前面的小节中,我解释了我使用的数据和可视化包。我概述了图表分层结构,并提供了三个如何应用分层结构的例子。

如果有任何问题、意见和反馈,请随时联系我。谢谢你。

改变我生活的三个可视化

原文:https://towardsdatascience.com/3-visualizations-that-changed-my-life-554b7f83e473?source=collection_archive---------0-----------------------

作者图片

我想和你分享三个故事。3 次相遇改变了我的生活,感谢简单的可视化帮助我每天讲述更好的故事。这些年来,我很幸运地遇到了许多鼓舞人心的领导者,我一直在偷偷观察他们如何做事,如何制定战略,以及如何用数据讲述故事。以下是我可能每周至少使用一次的三样东西。

请不要忘记,这些提示只是冰山一角。有几次我听到类似“让我们基于原始广告印象数据训练一个神经网络模型,它将自动创建智能…”这样的话,你就明白了要点。但是如果你问 CLV(客户终身价值)、ARPU(每用户平均收入)、CAC(客户获取成本)与 CLV 以及其他一些指标,没有人知道他们做得怎么样。我相信一切都应该从基础开始,如关键指标、单位经济、目标,一旦你有了一个强大的核心,你就可以在此基础上进行构建。

让我们开始吧。

我喜欢瀑布

图片由 Patrick T'Kindt 在 Unsplash 上拍摄

嗯,也有像约塞米蒂瀑布那样的(我们和我的伙伴在美国公路旅行时去过),但是今天我要给你看一种不同的。

过去,当我们(向投资者)展示我们的目标以及我们将如何实现这些目标时,它更像是一些零碎的东西。这里一个倡议,那里一个倡议。我相信用一个简单的瀑布图来展示它能帮助你讲述一个强有力的故事——我们在哪里,我们想去哪里,以及我们将如何到达那里。你在一张简单的图片里看到了这一切,每个人都明白,你只需要更多地关注为什么。

作者图片

有了这个视觉,我们面前就有了一个清晰的目标,我们也可以看到我们的进步,同样地,也可以定期检查我们一路上的表现。当我们埋头于日常事务时,我们可以回到这张图片来刷新我们的思维,看到一个更大的图片。

我真的很喜欢它如何把事情放在一个角度,你可以用简短的笔记/亮点来添加更多的背景。你也可以通过展示特定团队或个人对目标的贡献来很好地塑造视角。

作者图片

另一个用例可能是单位经济学,你可以非常清楚地显示收入是如何很好地增加的,成本是如何降低的。在下面的例子中,只显示了收入(ARPU)部分。

作者图片

你也可以在另一篇文章中阅读更多关于我们整个 P & L 的信息。

作者图片

我必须感谢 Renata Salata,在我遇到她之前,我从未用它来以这种简单而有力的方式表达目标或单位经济。我还要感谢ondřej·维多维克对它们进行了润色,让它们在任何场合都能讲述一个更好的故事。

它会融合,嗯,盈亏平衡吗?

从 Giphy 嵌入的图像

这个群体(或客户群)什么时候能达到收支平衡?这是一个棘手的问题,我们通常用一个包含客户群数据的电子表格来回答。直到有一天我第一次看到这个可爱的形象。

作者图片

它告诉你收入和成本(累计)是如何逐月发展的,中间有一条线,它告诉你什么时候收支平衡。在上面的例子中,您可以看到 2017 年获得的所有客户的行为。我相信它可以帮助你更好地理解你的客户终身价值,并以故事的形式呈现出来。

您还可以比较不同的客户群、群组、活动或您喜欢的任何内容。它还可以很好地显示单位经济随时间的发展。

这是一个直接从我们的 Tableau 中摘录的稍加编辑的版本,它向您展示了我们的 Apple Pay 用户与其他产品组合的不同之处。它讲述了一个有趣的故事。

作者图片

为了这个简单的视觉效果,我必须感谢来自 Enern ,现在是 KAYA 风投 ( 托马什帕欣达 & 雅各布·斯特拉奇纳)的家伙们。

你的策略是什么?

作者图片

这是我的团队下个季度的战略。你可以直接看到我们的 4 个组成部分是什么,我们认为我们现在做得怎么样,以及我们想要达到的目标。这看起来似乎很简单,但它实际上总结了我们的许多想法,我们可以用一种简单的方式与 Twisto 的其他团队进行交流。我认为,当你处理许多不同的项目和优先事项时,很容易迷失在细节中,但这个视觉迫使我理清思路,使它们更加简洁。

至于“我们做得怎么样”的规模,我只是简单地将不同的领域评定为“我们做得像 6/10,我们想移动到 8/10”,这里没有火箭(或数据)科学。您可以看到该策略所有方面的一些基础领域(如数据仓库、文档等。)我也会单独评分以获得最终分数。

第二个例子来自我们的货币化战略。同样,您可以看到构建模块/驱动因素、我们现在所处的位置以及最大的机会在哪里。我觉得这个可能会成为 NFT 艺术作品,开个玩笑(如果你感兴趣的话,也可以不开)。这有点复杂,但它总结了许多不同的商业案例和机会。

作者图片

至于这最后一个视频,我要感谢博纳米的首席执行官帕维尔·vopařil。看到整个公司的长期战略可以如此简单地描述出来,令人印象深刻。

权力越大,责任越大

我要说的是,这三个形象化的最重要的事情是,它们迫使我清理我的思想,逃离日常项目和所有的优先事项。它们迫使我提炼我的想法,从 30 个并行的计划中得到 3 或 5 个积木。这是我可以随时回到过去,看到更大的画面。

也许,有时我会花太多时间去考虑选择哪种视觉效果,但在一天结束时,我相信这个选择很重要,因为它有助于你与周围的人清楚地交流。这也适用于所有的视觉化任务,我总是四处玩耍,看看什么能最好地描绘出我想讲述的故事。

当然,基础是良好和可靠的数据、架构和工具(按此顺序)。如果没有这些东西,你可能会因为传播基于错误见解的东西而造成大破坏。

正如蜘蛛侠曾经说过的:

简单而强大的可视化带来了巨大的责任

(或者类似的东西,对吗?).良好的可视化需要高质量的数据/见解,噪音和偏差有限。在 100%的情况下,你无法避免偏见和杂乱的数据,我相信你有责任将数据与你试图讲述的愿景/故事联系起来。

今天就到这里,谢谢你读到这里!我希望它能帮助你讲述更有力的故事,并为你的幻灯片添加背景。感谢过去几年来为我的工具箱做出贡献的所有人(不仅仅是这里提到的那些人)。

请告诉我,如果你觉得这些建议有用,我下次应该写些什么!你也有一些常用的工具吗?我超级好奇想看到/听到更多关于他们的事,请在评论里或在一个 DM 里 ping 我(me@lukashurych.cz)。下次见。

领导者失败人工智能项目的 3 种方式

原文:https://towardsdatascience.com/3-ways-leaders-fail-their-ai-projects-fcaf98e9bb8a?source=collection_archive---------50-----------------------

汉娜·塔斯克在 Unsplash 上的照片

为什么这么多 AI 项目失败,领导如何避免这种情况?

更新:你可以在 日文 阅读这篇文章(感谢 Koki Yoshimoto!)

大多数组织如何开始他们的人工智能 (AI)之旅?

让我们看看一些大企业的领导人是如何计划他们进军人工智能的。以下是麦肯锡最近的几个例子:

  • 一家大型组织的领导花了两年时间和数亿美元在全公司范围的数据清理计划上。目的是在开始任何人工智能计划之前有一个数据元模型。
  • 一家大型金融服务公司的首席执行官雇佣了 1000 名数据科学家,每人平均花费 25 万美元,以释放人工智能的力量。

这是我亲眼目睹的一个例子。

  • 一家大型制造商的首席执行官安排了一系列使用非结构化数据的雄心勃勃的项目,因为人工智能技术对文本、图像和视频数据非常有效。

所有这些计划有什么共同点?都失败了。

麦肯锡的人工智能状况调查发现,只有 22%使用人工智能的公司报告了相当大的底线影响。

除了这些项目遭受的巨大沉没成本之外,它们还导致了组织对高级分析的幻灭。

这种情况并不少见。麦肯锡的人工智能状况调查发现,只有 22%使用人工智能的公司报告了相当大的底线影响。为什么这么多项目失败,领导如何避免这种情况?

大多数追求人工智能的领导者错过了三个所有权领域。这些责任在你计划你的人工智能项目之前就已经开始了,并且在你的项目上线之后还会延续很久。

以下是让你的人工智能计划失败的三种方式:

错误 1:开始与公司愿景不一致的人工智能项目

Photo by 青 晨 on Unsplash

麦肯锡发现只有 30%的组织将他们的人工智能战略与公司战略保持一致。大部分领导都在以 AI 的名义烧钱,这难道不令人震惊吗?组织经常追求那些看起来有趣或者只是紧急的人工智能计划。

的确,您的项目必须解决业务难点。但是,更重要的是,这些成果必须与你的公司战略相一致。从您的业务愿景开始,确定数据将如何实现它。阐明谁是你的目标利益相关者,并定义他们的成功是什么样的。

组织经常追求那些看起来有趣或者只是紧急的人工智能计划。

然后,确定将授权给涉众并使他们更接近其业务目标的战略计划。现在,你已经准备好集思广益,列出一长串值得评估的人工智能项目。

在麻省理工学院斯隆管理评论的报告中,罗氏制药的首席信息官史蒂夫吉斯解释了人工智能如何帮助转变公司的商业模式。罗氏致力于实现个性化医疗保健。吉斯指出,目前的药物输送模式不会帮助他们实现这一愿景。他们认为有必要加快药物研发的速度,从每年 3 种药物增加到 30 种。吉斯说,人工智能可以帮助他们获得这种指数级的改善。

罗氏正在通过建立筛查、诊断和治疗的能力,使人工智能成为组织内的主流。它通过与追求人工智能驱动的药物发现的初创公司合作来加强这一点。由于这些努力,罗氏在乙肝和帕金森病等疾病的治疗方面取得了重大突破。通过从他们的企业愿景开始,并使他们所有的人工智能计划与这一总体目标保持一致,罗氏的努力正在结出果实。

错误 2:在项目上线后等待投资回报计划

由 KS KYUNG 在 Unsplash 上拍摄的照片

你应该什么时候考虑你的人工智能项目的投资回报率?大多数组织在项目上线时都会犯跟踪 ROI 的错误。领导者满足于模糊的结果,如“效率提高”、“品牌价值”或“更快乐的顾客”,让事情变得更糟。

的确,量化结果的美元价值并不容易。但也不是不可能。你必须要求量化商业利益,甚至在批准一个项目之前。人工智能可以通过增加收入或降低支出来实现价值。两者都有价值。定义您的项目将实现哪些结果。

领导者犯了满足于模糊结果的错误。

确定有助于衡量这些结果的领先和滞后指标的组合。通过更新您的流程或创建新流程,收集计算指标所需的数据。最后,通过超越硬件、软件和技术团队成本来跟踪您的投资。包括你在采纳和变革管理项目上的花费。这个 ROI 度量应该是您项目批准决策中的一个关键因素。

德意志银行在德国推出了人工智能驱动的消费信贷产品。该解决方案甚至在客户填写贷款申请时就对贷款做出了实时决策。消费者担心贷款被拒会影响他们的信用评级。该产品通过告诉他们贷款是否会被批准,甚至在他们点击“申请”之前,就消除了这种风险

德意志银行发现,在人工智能服务推出后的八个月里,T3 的贷款发放激增了 10 到 15 倍。收益是通过吸引那些原本不会申请的客户来实现的。这是人工智能帮助增加收入的一个明显例子。

错误 3:期待人工智能驱动的转型,而不修复组织文化

照片由腾雅特在 Unsplash 上拍摄

在 2019 年年度调查中,Gartner 向首席数据官询问了他们从分析中获得价值的最大障碍。最大的挑战与数据或技术无关。这是文化。

正如彼得·德鲁克的名言,“组织文化早餐吃战略。”如果你不小心地塑造组织文化,即使是最好的人工智能战略也将毫无价值。文化变革必须从最高层开始。领导者必须利用讲故事来启发和展示人工智能如何帮助组织实现其愿景。

领导者必须解决围绕人工智能的恐惧,并提高所有员工的数据素养。

领导者必须解决围绕人工智能的恐惧,并提高所有员工的数据素养。他们必须以身作则,通过让各级数据冠军加入进来来维持变革。文化转变需要数年时间,领导者必须在项目上线后的很长一段时间内影响它。

想知道达美乐披萨的主要成分是什么吗?是数据!多米诺披萨是技术变革的典型代表。该组织生活在数据驱动的决策文化中,并在销售、客户体验和交付中使用人工智能。10 年前不是这样。

帕特里克·杜尔于 2010 年接任这家有 50 年历史的披萨制造商的首席执行官,当时这家公司受到了顾客和投资者的严厉批评。道尔迈出了大胆的一步,将收获评论公之于众。然后,他从内到外进行了一次全面的重新启动,使该组织走上了数字化转型的道路。他在技术上下了一些大胆的赌注,承担风险项目,授权给人们,并在内部开发了几项人工智能创新。

当道尔在 2018 年退休时,多米诺的销售额已经连续 28 个季度增长,其股票回报率超过了谷歌。这位即将离任的首席执行官总结得最好,“我们是一家碰巧卖披萨的科技公司。”通过领导多米诺骨牌内部的文化转型,Doyle 确保了向数据驱动型决策的转变,这种转变甚至在他过渡到新的首席执行官之后仍在持续。

你将如何让人工智能跨越你组织中的创新鸿沟?

克雷格·切利乌斯的照片来自维基共享资源

采用技术创新从来都不容易。无论是人工智能等新技术在市场上的推出,还是在组织内的采用,挑战都是相似的。

创新者在组织内部播种这一旅程。由于他们最初的热情和对变化的开放态度,这种创新随后被早期采用者所接受。但是之后,速度慢了下来进入了一个缺口。往往缺乏可见性,结果不确定,对变革的阻力更大。

这是大多数倡议失败的地方。

像人工智能这样的创新要想跨越这个鸿沟,进入主流,需要领导层的介入。领导者必须通过将主动性与他们的企业愿景相结合来使 AI 取得成功。他们必须通过将有关 AI 投资回报的对话制度化来展示经济价值。最后,他们必须塑造组织文化,以促进变革,并让人工智能驱动的决策得到病毒式的应用。

佩奇科迪在 Unsplash 上的照片

本文最初是 发表 关于企业家项目。增加了插图。

用 Apache Spark 创建表格的 3 种方法

原文:https://towardsdatascience.com/3-ways-to-create-tables-with-apache-spark-32aed0f355ab?source=collection_archive---------1-----------------------

编程 | 大数据 | PySpark

在本实践教程中,学习如何使用 PySpark 构建托管和非托管表,以及如何在项目中有效地使用它们。

照片由 Unsplash 上的 Jez Timms 拍摄

点播课程|推荐

我的一些读者联系我,要求提供点播课程,以了解更多关于使用 Python 的Apache Spark*。这是我推荐的 3 个很好的资源:*

  • 用阿帕奇卡夫卡的数据流&阿帕奇火花纳米度(UDACITY)
  • 数据工程纳米学位(UDACITY)
  • Spark 与 Python 对于大数据的配合

还不是中等会员?考虑与我的 推荐链接 注册,以每月 5 美元的价格获得 Medium 提供的一切!

介绍

Apache Spark 是一个分布式数据处理引擎,允许您创建两种主要类型的表:

  1. **托管(或内部)表:**对于这些表,Spark 管理数据和元数据。特别是,数据通常保存在 Spark SQL warehouse 目录中——这是托管表的默认设置——而元数据保存在关系实体的元存储中(包括数据库、表、临时视图),可以通过一个称为“目录”的接口访问。
  2. **非托管(或外部)表:**对于这些表,Spark 只管理元数据,但是要求您指定保存表的确切位置,或者指定从中提取数据以创建表的源目录。

此外,由于它们的目的不同:

  • 如果您删除一个托管表,Spark 将删除仓库中的表数据和元存储中的元数据,这意味着您既不能直接查询该表,也不能向其中检索数据。
  • 如果您删除一个非托管表,Spark 将只删除元数据,这意味着您将无法再查询该表,因为您的查询将不会在执行分析阶段根据目录进行解析;但是您仍然可以在外部位置找到您创建的表。

在本教程中,我将分享三种创建托管表和非托管表的方法,并解释使用其中一种有意义的情况。

💔-ways-to-aggregate-data-in-pyspark-72209197c90>

初始数据集操作

如果您希望继续学习,但是对 Spark 相对陌生,并且没有更好的选择,我强烈建议您使用 Databrick 的社区版,因为它可以让您访问具有 15GB 内存和 2 个内核的集群来执行 Spark 代码。

我将要使用的sales_redords数据集相当大(600MB ),因为它包括 500 万行和 14 列——你可以在这里下载它。我选择了一个相当大的数据集——至少部分地——来复制您在现实世界中必须处理的数据量。

因为数据集是半结构化的 CSV 格式,为了在 SparkSession 中创建 DataFrame,请确保首先上传 DataBricks 文件系统(DBFS) 的/FileStore/目录中的原始文件,然后运行以下代码:

为了模拟原始数据作为日常 ETL 管道的一部分所经历的清理过程,我们假设您希望:

  • 将原始列名转换为小写,并将空格“”替换为下划线“_”;
  • 将原来的*【订单日期】STRING转换为DATE,将原来的【售出单位】、* 【单价】、*【总收入】*从STRING转换为FLOAT
  • 删除以下各列,因为您的利益相关方不需要这些列:[ "地区"、"国家"、"订单优先级"、"发货日期"、"总利润"、"总成本"、"单位成本"];
  • 删除原“订单 ID 字段中的重复项。

这可以通过执行下面的代码来实现,该代码创建了一个名为df_final的新数据帧,它只包含 7 列和 2M 行。(前 5 行也显示):

已经对df_final进行了处理,以获得想要的结果,现在可以将其用作创建表格的源了。

然而,为了向您展示所有 3 种不同的方法,我还必须将df_final作为临时视图和 DBFS 中的拼花文件(分成 2 个分区):

创建托管表

如上所述,当您创建一个由管理的表时,Spark 将管理表数据和元数据(关于表本身的信息 f)。具体来说,数据被写入默认的配置单元仓库,即在/user/hive/warehouse位置设置的仓库。您可以改变这种行为,在生成SparkSession时使用spark.sql.warehouse.dir配置。

💔-nanodegrees-you-should-consider-to-advance-your-data-engineering-career-in-2021-baf597debc72>

方法 1

创建托管表最直接的方法是通过结构化 API saveAsTable()方法编写df_final,而不指定任何路径:

您可以通过运行以下命令来检查该命令是否成功创建了一个名为salesTable_manag1且带有tableType = 'MANAGED'的永久表:

spark.catalog.listTables()Out[1]: [Table(name=’salestable_manag1', database=’default’, description=None, tableType=’MANAGED’, isTemporary=False)

在大多数情况下,您应该更喜欢使用这种方法,因为它的语法非常紧凑,可读性很强,并且避免了在内存中创建临时视图的额外步骤。

方法 2

创建托管表的另一种方法是运行 SQL 命令,查询 temp df_final_View中的所有记录:

在这种情况下,我使用 Databricks 中的%sql魔法直接运行一个 SQL 命令,而没有将它打包到spark.sql()中。但是,您可以使用以下语法获得完全相同的结果:

spark.sql(“CREATE TABLE IF NOT EXISTS salesTable_manag2 AS SELECT * FROM df_final_View”)

如果您有 SQL 背景,这种方法可能是最熟悉的,因为您不需要为“标准的”结构化 API 语法而烦恼,甚至可以动态地执行额外的操作。但是,在处理大数据时,您应该考虑在集群上创建临时视图所需的额外空间。

方法 3

您可以使用的最后一种方法与前一种类似,但它包括两个步骤,首先创建一个表salesTable_manag3,然后通过查询临时视图将数据插入其中:

当您希望更改列类型时,或者如果您已经创建了一个表,并且希望替换或追加数据,而不是删除它并从头开始时,您应该选择此方法。

创建非托管表

非托管表提供了更大的灵活性,因为表数据可以存储在您选择的位置,或者表可以直接构建在外部目录中的可用数据之上。反过来,这意味着在 Spark 中,对于外部表来说,位置是强制的。元数据再次保存在元存储中,并可通过目录访问。

非托管表提供了更大的灵活性,因为表数据可以存储在您选择的位置,或者表可以直接构建在外部目录中的可用数据之上。

在下面的例子中,我将使用Databricks 文件系统 来模拟一个关于默认 Spark SQL 仓库的外部位置,但是当然,可以保存非托管表(或者在与 Spark 兼容的每个文件系统之上创建它们),包括 云数据仓库

方法 1

要创建一个非托管(外部)表,只需在saveAsTable()方法之前指定一个路径:

当您运行这段代码时,Spark 将:

  • 打乱df_final数据帧中的数据,创建两个分区,并将它们写入/FileStore/tables/salesTable_unmanag1目录。
  • 使用存储在该位置的分区创建一个名为salesTable_unmanag1的外部表,并将相关信息保存在元存储中。

方法 2

因为通过将位置指定为 SQL 查询的一部分可以获得类似的结果。在这种情况下,您需要使用临时视图作为数据源:

还要记住使用CREATE EXTERNAL TABLE语法,而不是CREATE TABLE

方法 3

最后,如果您打算用来创建表的数据已经在一个外部位置可用,您可以通过使用USING format OPTIONS (path 'path to location')语法指向该位置,简单地在它的上面构建表:

在这种情况下,该表是在操作原始数据集后保存在FileStore中的df_final.parquet文件的顶部创建的。请注意,如果您使用这种方法,您将需要指定每一列的类型。

如果您尝试再次列出目录中的表:

spark.catalog.listTables()

您可以看到,现在输出包括 6 个表,其中 3 个是托管表,3 个是非托管表,以及在开始时创建的临时视图:

执行以下代码将只删除类型表中的元数据和托管表中的数据,而数据将保留在您指定的外部位置:

但是,删除元数据后,您将无法对任何表运行查询。

何时使用托管表或外部表?

到目前为止,您应该已经很好地理解了这两种类型的表之间的区别,并且应该准备好将上面的代码应用到您的特定用例中。然而,在一个真实的项目中,当你在两者之间选择一个的时候,也许你仍然有点困惑。

一般来说,你应该将数据存储在一个托管表中:

  1. 当您希望 使用 Spark 作为数据库 执行特定或交互式查询以浏览和可视化数据集 例如,您可以在 Spark 中设计一个 ETL 管道,最终将数据存储在一个托管表中,然后使用 JDBC-ODBC 连接器通过 Looker、Tableau、Power BI 和其他 BI 工具来查询该表。
  2. 当您正在处理一个项目,并希望在将数据写入最终位置之前,暂时将数据保存在 Spark 中以进行额外的操作或测试时例如,在 Spark 中构建、训练和评估机器学习模型时,托管表可能会很方便,因为它们消除了对外部存储的需要,从而可以保存部分迭代。
  3. 当您希望 Spark 处理包括删除在内的表数据的完整生命周期,或者担心外部文件系统的安全性如果数据不需要立即与其他客户端共享,或者存在安全问题,那么将数据保存在 Spark warehouse 中可能是一个有效的临时解决方案。
  4. 当您不担心数据的可再现性时如果数据可以很容易地从其他来源检索到,或者转换数据所需的计算工作量不太大,那么错误删除受管表的风险就更小了。

相反,您应该将数据存储在一个外部表中:

  1. 当您无法基于 SparkSession 中已经可用的现有数据框架或视图创建表格时,会附带一个推断模式在这种情况下,您必须提供首选位置并指定正确的字段类型。
  2. 当 Spark 主要用于并行处理大型数据集时,通过将它们分布在集群中,或者通过批处理或流实现端到端的数据管道在这种情况下,Spark 通常用于繁重的计算,但数据最终会存储到外部数据湖或写入最终的云数据仓库。
  3. 当数据需要保留在指定的外部位置时,即使在 Spark 中删除了非托管表当有多个表或模式构建在相同数据之上,并且您不希望危及它们的完整性时,通常会出现这种情况。
  4. 当 Spark 不应拥有数据生命周期时,例如控制设置、目录和模式,您可能已经有了其他解决方案来完成这些任务。

给我的读者一个提示

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

来源

  • 火花——权威指南——比尔·查姆&马泰·扎哈里亚
  • 学习火花——帕特里克·温德尔著&马泰·扎哈里亚
  • Apache Spark 表格和视图的类型| Subash 西瓦吉| Medium
  • 使用 Spark 作为数据库— Knoldus 博客
  • 内部&Hadoop-HIVE(大数据岛)中的外部表| LinkedIn

在生产中部署机器学习模型的 3 种方式

原文:https://towardsdatascience.com/3-ways-to-deploy-machine-learning-models-in-production-cdba15b00e?source=collection_archive---------0-----------------------

部署 ML 模型,并使它们对用户或项目的其他组件可用。

将机器学习模型部署到生产中——来自 Pexels 的 Kindel Media 摄影

处理数据是一回事,但将机器学习模型部署到生产中则是另一回事。

数据工程师总是在寻找新的方法来将他们的机器学习模型部署到生产中。他们想要最好的性能,他们关心它的价格。

现在你可以两者兼得了!

让我们来看看部署过程,看看我们如何才能成功!

如何在生产中部署机器学习模型?

大多数数据科学项目将机器学习模型部署为按需预测服务批量预测模式。一些现代应用在边缘和移动设备中部署嵌入式模型

每种模式都有自己的优点。例如,在批处理场景中,优化是为了最小化模型计算成本。对外部数据源和云服务的依赖更少。本地处理能力有时足以计算算法复杂的模型。

发生故障调整超参数时,调试离线模型也很容易,因为它运行在强大的服务器上。

另一方面,网络服务可以提供更便宜的接近实时的预测。如果模型运行在集群或云服务上,CPU 能力的可用性就不是问题。通过 API 调用等等,该模型可以很容易地用于其他应用程序。

嵌入式机器学习的一个主要好处是,我们可以根据特定设备的要求对其进行定制。

我们可以很容易地将模型部署到设备上,并且它的运行时环境不能被外部团体篡改。一个明显的缺点是设备需要有足够的计算能力和存储空间。

将机器学习模型部署为 web 服务。

部署机器学习模型的最简单方法是创建一个用于预测的 web 服务。在这个例子中,我们使用 Flask web 框架来包装一个用 scikit-learn 构建的简单的随机森林分类器。

要创建机器学习 web 服务,至少需要三个步骤。

第一步是创建一个机器学习模型,训练它并验证它的性能。以下脚本将训练一个随机森林分类器。为了简单起见,这里不包括模型测试和验证。但是请记住,这些是任何机器学习项目不可或缺的一部分。

为部署构建一个简单的机器学习模型。

在下一步中,我们需要持久化模型。我们部署应用程序的环境通常与我们培训他们的环境不同。培训通常需要不同的资源。因此,这种分离有助于组织优化他们的预算和工作。

Scikit-learn 提供了 python 特有的序列化,使得模型持久化和恢复变得毫不费力。下面是我们如何将训练好的模型存储在 pickle 文件中的一个例子。

使用 scikit-learn 的 joblib 实用程序将机器学习模型作为 pickle 文件持久化。

最后,我们可以使用 web 框架为持久模型提供服务。下面的代码使用 Flask 创建了一个 REST API。该文件托管在不同的环境中,通常是在云服务器中。

使用 Flask Python web 框架部署用于在线预测(预测服务)的机器学习模型。

上面的代码通过[https://localhost:8080/predict](https://localhost:8080/predict)接受 POST 请求中的输入,并在 JSON 响应中返回预测。

为批量预测部署机器学习模型。

虽然在线模型可以提供预测,但按需批量预测有时更可取。

离线模型可以进行优化,以处理大量的作业实例并运行更复杂的模型。在批量生产模式下,您也不需要担心扩展或管理服务器。

批量预测可以简单到用输入变量的数据集调用预测函数。下面的命令可以做到这一点。

prediction = classifier.predict(UNSEEN_DATASET)

有时,您必须在批处理方法中安排训练或预测。有几种方法可以做到这一点。我最喜欢的是使用气流或提督自动化任务。

使用 Prefect 调度用于批量预测的机器学习模型。

上述脚本计划从脚本执行后 5 秒开始每周进行预测。如果失败,提督将重试任务 3 次。

然而,构建模型可能需要批处理框架中的多个阶段。您需要决定需要什么特性,以及应该如何为每个阶段构建模型。

在具有适当批处理框架的高性能计算系统上训练模型。

通常,您将训练数据划分为一个接一个按顺序处理的数据段。您可以通过使用采样方案(例如,平衡采样、分层采样)或通过某种在线算法(例如,map-reduce)来分割数据集。

这些分区可以分布到多台机器上,但是它们必须装载相同的特性集。建议进行特征缩放。如果您对迁移学习使用了无监督的预训练(例如,自动编码器),您必须撤销每个分区。

在执行完所有阶段之后,您可以通过在分区上顺序迭代,用得到的模型预测看不见的数据。

在边缘设备上部署机器学习模型作为嵌入式模型。

近年来,在移动和物联网等边缘设备上进行计算变得非常流行。在边缘设备上部署机器学习模型的好处包括但不限于:

  • 减少延迟,因为设备可能比远处的服务器更靠近用户。
  • 减少数据带宽消耗,因为我们将处理后的结果而不是原始数据发送回云中,原始数据需要很大的数据量,最终需要更多的带宽。

移动和物联网设备等边缘设备由于其硬件的性质而具有有限的计算能力和存储容量。我们不能简单地将机器学习模型直接部署到这些设备上,特别是如果我们的模型很大或者需要大量计算来对它们进行推理。

相反,我们应该使用量化和聚合等技术来简化模型,同时保持准确性。这些简化的模型可以高效地部署在计算、内存和存储有限的边缘设备上。

我们可以使用 Android 上的 TensorFlow Lite 库来简化我们的 TensorFlow 模型。TensorFlow Lite 是一个面向移动和嵌入式设备的开源软件库,它试图做到顾名思义:在移动和嵌入式平台上运行 TensorFlow 模型。

以下示例转换 Keras TensorFlow 模型。

将 Keras 深度学习模型转换为 TensorFlow Lite 模型,以部署在边缘物联网和移动设备上。

你可以在你选择的任何平台上阅读新创建的.tflite文件。Tensorflow lite 支持 Android、iOS 和 Linux(包括 Raspberry Pi)。

有关在不同平台上部署的示例和教程,请查看 TensorFlow Lite 文档。

最后的想法

训练机器学习模型只是数据科学项目的一个方面。数据科学家投入大量精力将它们部署到生产环境中。

我们已经讨论了部署机器学习模型的三种不同方法及其优点。根据您的应用,您可能需要选择一个可用的选项。

当然,这个帖子只是冰山一角。但是我相信它会给你一个进一步探索的起点。

生产中的 ML 模型有很多其他的善后工作,比如定期的模型评估。但它们是另一个职位的。

感谢阅读的朋友!在LinkedInTwitterMedium上跟我打招呼。

还不是中等会员?请使用此链接成为会员 因为,在不为你额外付费的情况下,我为你引荐赚取一小笔佣金。

3 种方法可以极大地提高你自己的编程技能

原文:https://towardsdatascience.com/3-ways-to-drastically-improve-your-programming-skills-on-your-own-9359ce670099?source=collection_archive---------1-----------------------

成为更好的程序员

帕卡塔·高在 Unsplash 上的照片

我一直认为自己是一个体面的程序员,但是,我从来没有任何东西来衡量它。嗯,直到我看到一个真正优秀的程序员是什么样子——现在我痴迷于发展我的技能。

我不解释发生了什么,我给你看。任务是重构代码,分析来自 UCI 机器学习库的葡萄酒质量数据集。

我建议所有读者在继续阅读本文其余部分之前,尝试一下我创建的 谷歌实验室 中的挑战。

免责声明:此任务取自 Udacity 上的机器学习工程师 Nanodegree。

在我揭示启发我的无知的解决方案之前,让我向你展示课程开发者要求我们改进的解决方案…

**# Course providers solution**
labels = list(df.columns)
labels[0] = labels[0].replace(' ', '_')
labels[1] = labels[1].replace(' ', '_')
labels[2] = labels[2].replace(' ', '_')
labels[3] = labels[3].replace(' ', '_')
labels[5] = labels[5].replace(' ', '_')
labels[6] = labels[6].replace(' ', '_')
df.columns = labelsdf.head()

这似乎是一个非常简单的任务。以下是我的解决方案…

**# My improvement of the solution**
def remove_spaces(df):
    cols = list(df.columns)
    for i in range(len(cols)):
        cols[i] = cols[i].replace(" ", "_")
    df.columns = cols
    return dfdf = remove_spaces(df)
df.head()

有人可能会说我的解决方案是对他们解决方案的改进,因为它消除了代码的重复性——因此遵守了软件工程中的“不要重复自己(DRY)”的最佳实践。但是,这不是最佳解决方案,还可以改进。

以下是课程提供商如何优化他们的解决方案…

df.columns = [label.replace(' ', '_') for label in df.columns]
df.head()

简单大方。

他们的解决方案最让我恼火的是我理解。我很清楚其中的逻辑。我可以像他们一样写出理解清单。但是,我想不出解决办法。我从未想过要做一个列表理解,现在想起来很疯狂,因为我用了一个for循环。

这个失误激活了我最近的任务。我没有一天不在努力提高我的编程技能。

下面,我列出了我每天用来提高编程技能的 3 种方法。

#1 阅读代码

不言而喻……如果你想成为一个更好的作家,你必须成为一个更好的读者——这意味着读更多的书,以及更广泛的书。

同样,如果你想成为一名更好的程序员,这实际上是一种不同形式的写作,你应该寻求阅读更多的代码,尤其是来自非常优秀的程序员的代码。

一些有很好代码的 Github 库是:

  • Scikit-Learn
  • 由 JJruner 从 Stackoverflow 得到的发现
  • 自举

它不会停留在阅读代码上。

有很多书可以帮助你成为一名更好的程序员——一本让你入门的流行书籍是戴维·托马斯·安德鲁·亨特的《实用程序员》。

注意:点击上面的图书链接,你将通过我的会员链接被导向亚马逊。我还集成了地理链接,所以如果你不在英国,你会被自动引导到你当地的亚马逊商店。

#2 留出重构时间

老实说,最初,我采取了“如果有效,那就是好的”的心态。重构代码总是被推迟。事后看来,这其实挺傻的。我绝不会在不反复阅读一两次的情况下发表一篇文章,以确保我传达了我想要传达的信息。

当然,代码重构有不同的目的。重构代码的目的是提高代码的效率和可维护性,或者两者兼而有之。

要成为一个更好的程序员,你必须留出时间来重构。为了提高你的重构技能,你必须学习重构——这会给你一个寻找什么的想法。最后,确保你投入大量时间重构代码。您可以重新访问过去的项目或其他人的项目,并修改他们的代码,使其更有效、更易维护,或者两者兼而有之。

#3 边做边练

如果你想成为一名更好的作家,你必须多写。如果你想成为一个更好的厨师,你必须多做饭。如果你想成为一个更好的程序员,你必须写更多的程序。

你可以偷到一个小窍门来写更多的程序,那就是从写很多小程序开始。这将允许你增加每天编写的代码量,这将允许你创建更多的程序。

然而,大量的小程序并不能涵盖优秀程序员所需的编程技能。在某些时候,从编写大量小程序过渡到编写更大的程序是很重要的,因为这将揭示一系列新的挑战,迫使你成为一名更好的程序员。

最终想法

虽然这些方法在您独自工作以提高编程技能时非常有用,但在现实世界中,您很可能会与其他人合作。从我的小经验来看,真正的成长来自于你走出孤立,开始与他人一起工作,尤其是那些比你聪明得多的人,因为你可以采用他们的方法成为更好的程序员。

如果你认为我遗漏了一些想法,请留下评论,这样我们可以继续协调发展。

感谢阅读!

如果你喜欢这篇文章,请通过订阅我的免费 每周简讯与我联系。不要错过我写的关于人工智能、数据科学和自由职业的帖子。

相关文章

使用自然语言处理为 MCQs 生成干扰项(错误选择)的 3 种方法

原文:https://towardsdatascience.com/3-ways-to-generate-distractors-wrong-choices-for-mcqs-using-natural-language-processing-d52477a56812?source=collection_archive---------23-----------------------

使用 Wordnet、Conceptnet 和 Sense2vec 算法生成干扰项

作者图片

什么是干扰物?

干扰物是选择题中的错误答案

例如,如果一个给定的选择题有游戏板球作为正确答案,那么我们需要产生错误的选择(干扰物),如足球、高尔夫、极限飞盘等。

作者图片

这方面的实际用例是什么?

选择题是最受欢迎的评估题,无论是为了学校考试还是研究生竞争考试。

对于问题作者/老师来说,为给定的问题想出有效的干扰物是一个非常耗时的过程。鉴于 Covid 导致教师/评估创建者的工作量增加,如果我们能够创建一个自动化系统来创建这些干扰物,将会非常有帮助。

在本文中,我们将看到如何使用自然语言处理技术来解决这个实际问题。

特别是,我们将看到如何使用 3 种不同的算法来产生干扰物-

  1. WordNet
  2. 概念网
  3. Sense2Vec

设计干扰物时要记住的几点

干扰物不应该太相似或太不同。干扰物在内容上应该是同质的 T21。例:粉色、蓝色、手表、绿色表明手表可能就是答案。
干扰物应该是互斥。所以不应该包含同义词。

让我们开始吧。

1.Wordnet

  • WordNet 是一个大型的英语词汇数据库。
  • 类似于同义词词典,但能捕捉单词之间更广泛的关系。
  • WordNet 也是免费的,可以公开下载。
  • WordNet 标注单词之间的语义关系。同义词——汽车和汽车
  • WordNet 也捕捉一个单词的不同意思。鼠标可以指动物或电脑鼠标。

使用 Wordnet 生成干扰项

如果我们有一句话**“蝙蝠飞入丛林,落在一棵树上”和一个关键词“蝙蝠”**,我们就自动知道,这里我们说的是有翅膀的哺乳动物蝙蝠,而不是板球拍或棒球棒。

虽然我们人类很擅长,但算法不太擅长区分这两者。这叫做词义消歧 (WSD)。

在 Wordnet 中,“蝙蝠”可能有几个义项(义项)一个表示板球拍,一个表示会飞的哺乳动物,等等。使用 NLP 的词义消歧本身是一个独立的主题,因此对于本教程,我们假设确切的**“sense”**是由用户手动识别的,或者是自动选择的顶级词义。

假设我们得到一个像" Red 这样的单词,并确定它的义项,然后我们使用 Wordnet 找到它的上位词。一个上位词是一个给定单词的更高层次的类别。在我们的例子中,颜色红色的上位词。

然后我们去寻找所有属于颜色组的颜色的下位词(子类),可能是紫色、蓝色、绿色等。因此,我们可以使用紫色、蓝色、绿色作为给定 MCQ 的干扰物(错误答案选项),该的正确答案是红色。紫色、蓝色、绿色也被称为红色的同形异义词

所以使用 Wordnet,提取一个给定单词的同音异义词就能得到这个单词的干扰词。所以在下图中,红色的干扰物是蓝色、绿色和紫色。

来源:https://en.wikipedia.org/wiki/Hyponymy_and_hypernymy

Wordnet 代码

让我们从安装 NLTK 开始

!pip install nltk==3.5.0

导入 wordnet

import nltk
nltk.download('wordnet')
from nltk.corpus import wordnet as wn

获取单词“ lion”的所有干扰项。这里我们提取单词 Lion 的第一个义项,并提取单词 Lion 的同音异义词作为干扰词。

# Distractors from Wordnet
def **get_distractors_wordnet**(syn,word):
    distractors=[]
    word= word.lower()
    orig_word = word
    if len(word.split())>0:
        word = word.replace(" ","_")
    hypernym = syn.hypernyms()
    if len(hypernym) == 0: 
        return distractors
    for item in hypernym[0].hyponyms():
        name = item.lemmas()[0].name()
        #print ("name ",name, " word",orig_word)
        if name == orig_word:
            continue
        name = name.replace("_"," ")
        name = " ".join(w.capitalize() for w in name.split())
        if name is not None and name not in distractors:
            distractors.append(name)
    return distractorsoriginal_word = **"lion"**
synset_to_use = wn.synsets(original_word,'n')[0]
distractors_calculated = get_distractors_wordnet(synset_to_use,original_word)

上面的输出:

**original word:**  Lion 
**Distractors:** ['Cheetah', 'Jaguar', 'Leopard', 'Liger', 'Saber-toothed Tiger', 'Snow Leopard', 'Tiger', 'Tiglon']

同样,对于单词 cricket ,它有两个意思(一个代表昆虫,一个代表游戏),我们根据使用哪一个意思得到不同的干扰物。

#  An example of a word with two different senses
original_word = **"cricket"**syns = wn.synsets(original_word,'n')for syn in syns:
  print (syn, ": ",syn.definition(),"\n" )synset_to_use = **wn.synsets(original_word,'n')[0]**
distractors_calculated = get_distractors_wordnet(synset_to_use,original_word)print ("\noriginal word: ",original_word.capitalize())
print (distractors_calculated)original_word = "cricket"
synset_to_use = **wn.synsets(original_word,'n')[1]**
distractors_calculated = get_distractors_wordnet(synset_to_use,original_word)print ("\noriginal word: ",original_word.capitalize())
print (distractors_calculated)

输出:

**Synset('cricket.n.01')** :  leaping insect; male makes chirping noises by rubbing the forewings together**Synset('cricket.n.02')** :  a game played with a ball and bat by two teams of 11 players; teams take turns trying to score runs**original word:**  Cricket
**distractors:** ['Grasshopper']**original word:**  Cricket
**distractors:** ['Ball Game', 'Field Hockey', 'Football', 'Hurling', 'Lacrosse', 'Polo', 'Pushball', 'Ultimate Frisbee']

2.概念网

  • Conceptnet 是一个免费的多语言知识图谱。
  • 它包括来自众包资源和专家创造的资源的知识。
  • 与 WordNet 类似,Conceptnet 标记了单词之间的语义关系。它们比 Wordnet 更详细。是,是,的一部分,制成的,类似的,用于等词之间的关系被捕捉到了。

使用概念网生成干扰项

Conceptnet 适用于为位置、项目等具有 "Partof" 关系的事物生成干扰项。例如,像**【加州】这样的州可能是美国的一部分。一个“厨房”可以是一个房子**等的一部分。

Conceptnet 并没有像我们在上面讨论蝙蝠的例子时那样,对不同的词义进行区分。因此,当我们用一个给定的词进行查询时,我们需要继续使用 Conceptnet 给我们的任何意义。

让我们看看如何在我们的用例中使用 Conceptnet。我们不需要安装任何东西,因为我们可以直接使用 Conceptnet API。请注意,有一个每小时的 API 率限制,所以要小心。

给定一个像 "California" 这样的单词,我们用它查询 Conceptnet,并检索所有与它有" Partof "关系的单词。在我们的例子中,“加利福尼亚”是“美国”的一部分。

现在我们去**【美国】看看它还和什么东西有【部分】**关系。那将是其他州,如“得克萨斯”、“亚利桑那”、“西雅图”等。

类似于 Wordnet,我们使用查询词“California”的“partof”关系提取同音异义词,并获取干扰词“Texas”、“Arizona”等。

作者图片

概念网代码

输出:

**Original word:**  California**Distractors:**  ['Texas', 'Arizona', 'New Mexico', 'Nevada', 'Kansas', 'New England', 'Florida', 'Montana', 'Twin', 'Alabama', 'Yosemite', 'Connecticut', 'Mid-Atlantic states']

3.Sense2vec

与 Wordnet 和 Conceptnet 不同的是, Sense2vec 中单词之间的关系不是人工策划的,而是从文本语料库中自动生成的**。**

一个神经网络算法用数百万个句子来训练,以在给定其他单词的情况下预测一个焦点单词,或者在给定一个焦点单词的情况下预测周围的单词。通过这样做,我们为每个单词生成一个固定大小的向量或数组表示。我们称这些为单词向量。****

有趣的事实是,这些向量捕捉不同种类的单词之间的关联。例如,现实世界中相似种类的单词在向量空间中落在更靠近的处。****

此外,不同单词之间的关系被保留。如果我们取国王这个词的向量,减去男人的向量,加上女人的向量,就得到王后的向量。“国王之于男人,女王之于女人”的现实世界关系得以保留。

国王——男人+女人=王后

来源:https://blog . acolyer . org/2016/04/21/the-amazing-power-of-word-vectors/

Sense2vec 在 Reddit 评论上接受训练。名词短语和命名实体在训练期间被标注,因此像“自然语言处理”这样的多词短语也有一个条目,这与仅用单个词训练的一些词向量算法相反。

我们将使用 2015 年训练的 Reddit 向量,而不是 2019 年,因为在我的实验中结果略好。

Sense2vec 的代码

从 pip 安装 sense2vec

!pip install sense2vec==1.0.2

下载并解压缩 Sense2vec 矢量

从磁盘上解压缩的文件夹中加载 sense2vec 矢量

# load sense2vec vectors
from sense2vec import Sense2Vec
s2v = Sense2Vec().from_disk('s2v_old')

获取给定单词的干扰项。例如:自然语言处理

输出:

**Distractors for  Natural Language processing  :** 
['Machine Learning', 'Computer Vision', 'Deep Learning', 'Data Analysis', 'Neural Nets', 'Relational Databases', 'Algorithms', 'Neural Networks', 'Data Processing', 'Image Recognition', 'Nlp', 'Big Data', 'Data Science', 'Big Data Analysis', 'Information Retrieval', 'Speech Recognition', 'Programming Languages']

使用自然语言处理的问题生成——教程

我推出了一个非常有趣的 Udemy 课程,名为“使用 NLP 生成问题”,扩展了这篇博文中讨论的一些技术。如果你想看一看,这里是链接。

结论

希望你喜欢我们如何使用 NLP 解决 MCQs 中产生干扰物(错误选择)的现实问题。

祝 NLP 探索愉快,如果你喜欢它的内容,请随时在 Twitter 上找到我。

如果你想学习使用变形金刚的现代自然语言处理,看看我的课程使用自然语言处理生成问题

使用扩展的日期表格改进报告的 3 种方法

原文:https://towardsdatascience.com/3-ways-to-improve-your-reporting-with-an-expanded-date-table-2d983d76cced?source=collection_archive---------44-----------------------

在大多数情况下,日期是最重要的报告维度。大多数情况下,您希望看到一个数字随时间的发展,例如,年、月和日的销售额。

可以在数据中使用日期字段来创建报告。但是这种方法有一些缺点。

让我们来看看这个主题,以及如何使用扩展的日期表来提高您的报告能力。

照片由 Waldemar Brandt 在 Unsplash 上拍摄

为什么我们首先需要一个日期表

如果您熟悉报告和日期(或时间)表的使用,可以跳过这一部分。

需要日期表有四个主要原因:

  1. 您可以为数据和报告定义时间跨度。
    你需要知道,大多数报告工具都需要一个日期表,从 1 月 1 日开始,到 12 月 31 日结束。
  2. 您将能够创建年、半年、季度、月、日或周的导航层次:
    有些报告工具支持自动日期层次的创建,但有些不支持。当你没有这个能力的时候,你需要一个专用的日期表。
  3. 您可以在您的日期表中添加自定义列,因为您需要
    阅读下面关于此主题的更多信息。
  4. 为了能够比较具有不同规律性的数据:
    这种情况需要一些更深入的解释。

假设你有有测量的数据,不是每天都测量的;对于这个例子,让我们用每天的能量消耗。

然后,你就有了关于每日发电量的数据,例如,来自太阳能电池板的数据。这个数据是每天测量的。

并列显示两种数据的图表如下所示:

图表来自作者

你可以看到测量中有间隙。

通过一个小技巧和使用日期表,我可以填补这些空白:

图表来自作者

我复制了从测量日期到下一次测量前一天的值。

在月视图中,这将类似于下图:

作者提供的并排图表

顶部的图表显示了有差距的数据。底部的图表显示了填补空白的数据。

在这种情况下,底部的图表是正确的,因为它总结了每天的能源消耗,而不是只总结了测量的消耗。

在日期表的帮助下,这个操作相对容易。
在我的例子中,我将数据存储在数据库中,并用 SQL 查询准备数据。

现在我们知道了为什么我们需要一个日期表的四个原因。但是有更多的理由需要一个日期表,我不能在这里解释。解释所有的原因会花费太多的时间。

现在让我们看看如何用更多的信息来扩展日期表。

1.添加自定义列

您应该向日期表中添加额外的列,以确保可以按照您需要的方式对数据进行切片。

例如:

  • 短月份名称:一月、二月、三月等。
  • 带有年份的短月份名称:2021 年 1 月、2021 年 2 月、2021 年 3 月等。
  • 其他带年份的期间,例如,带年份的季度或学期。
  • 工作日(长或短):星期一/月、星期二/月等。
    当然,只有当您需要在工作日创建报告时。
  • 如果您需要按周报告,则需要计算周数。
    注意有两种不同的方法来计算周数(例如 ISO 8601 方法)
  • 任何所需语言的多语言专栏

以下是一些例子:

作者自定义日期栏

2.添加标志列

有时您想只查看实际期间的数据。期间可以是:

  • 实际的一周
  • 实际月份
  • 实际的季度或学期
  • 实际年份
  • 基于实际日期
    的任何特定时期,例如,过去六个月、实际月份和未来五个月,等于 12 个月。

这种标志列仅包含 1 或 0;一个用于实际期间的行,零个用于日期表中的所有其他行。

以下是一些例子:

按作者标记列

另一个标志栏是“工作日”。您可以使用 flag-column 标记所有工作日,排除周末。

您可以使用这样的标志列简化数据的过滤。

考虑一下这种情况:
您有项目信息,其中包含过去的数据和未来的规划数据。
现在您需要查看实际数据和实际月份的计划数据,包括过去和未来的几个月。

您可以使用复杂的日期计算来获得这一范围的数据。或者,您可以将该时间窗口配置到日期表的标志列中。然后,您只需要根据这个标志列过滤您的数据。

使用适当的标志列,这种方法更容易实现。此外,性能要高得多,因为不需要在报告中执行复杂的日期计算。

3.添加索引列

索引列是数字列,从今天开始计算周期。

像标志列一样,在日期表中可以有多个索引列:

  • DayIndex —从今天开始的天数
  • WeekIndex —实际周的周数
  • MonthIndex —实际月份的月数
  • YearIndex —距离实际年份的年数
  • WindowIndex —这是基于“IsInActualWindow”标志列,并显示实际的日期窗口位置。

按作者索引列

必须清楚地定义这些索引列的准备。

考虑 WeekIndex 列:

  • 实际日期是 2 月 14 日。2021
  • 今天是星期天。
  • 根据地区的不同,星期日是一周的最后一天或第一天。
  • 您需要了解您的受众,以确定需要应用哪个案例。

另一个例子:

  • 实际日期是 2 月 10 日。2021
  • 今天是星期三。
  • 根据您的需要,您需要根据实际日期+/- 7 天或实际日历周来计算指数。

基于日历周,您可以使用如下公式(基于星期一作为一周的第一天和 ISO 8601 方法):

DATEDIFF(Now() — WEEKDAY ( Now(), 2 ) + 1, [Date] — WEEKDAY ( [Date], 2 ) + 1, WEEK)

我用了达克斯语这个公式。Microsoft Power BI 使用 DAX 来实现计算列。

您还需要考虑 MonthIndex 列的计算。您需要定义是基于日历月计算指数,例如,基于该月的最后一天或第一天,还是基于另一个基数。

在 DAX 中,我对 MonthIndex 列使用了这个公式:

DATEDIFF(EOMONTH(Now(), 0), EOMONTH([Date], 0), MONTH)

EOMONTH()函数返回实际月份的最后一天。这样,我总是用日历月来写这个专栏。

现在,您可以使用这些索引列来进一步简化您的报告,而不是依赖于基于日期的计算,这需要多次实现。

结论

当你开始构建一个数据表时,你需要意识到你的报告需求。

您可以开始向日期表添加额外的列,以提高报表的功能并简化时间计算的逻辑。

但是,在实现标志列和索引列时,需要注意使用正确的逻辑。

在你完成你的逻辑之后,你需要确保每天更新你的日期表。标志列和索引列只有在每天更新时才是正确的。

在日期表中使用附加列的最后一个好处是逻辑是集中的。

逻辑的集中化可能是一个优点,也可能是一个缺点。当逻辑正确的时候,就可以依靠,大家都开心。如果它是错的,那么它对所有人都是错的。

密码

因为我使用的是微软的产品,比如 SQL Server 和 Power BI,所以我只能为这两个产品提供代码。

你可以给我发信息,如果你想得到代码来准备这样的日期表。

给我发一封电子邮件,地址是salvatorecagliari@gmail.com,要求提供密码。

使用 For 循环迭代 Python 字典的 3 种方法

原文:https://towardsdatascience.com/3-ways-to-iterate-over-python-dictionaries-using-for-loops-14e789992ce5?source=collection_archive---------3-----------------------

…以及 Python 字典上最流行的堆栈溢出问题的其他答案。

来自 Pexels 的 Ana M. 的照片

你们中的许多人联系我,要求提供有价值的资源 来敲定基于 Python 的数据工程面试 。下面我分享 3 个我强烈推荐的点播课程:

  • Python 数据工程 nano degree优质课程+编码项目如果有时间可以提交。 通过此环节获得七折优惠
  • leet code In Python:50 算法编码面试问题→最适合涉及算法的编码回合!
  • Python 高级编码问题(StrataScratch)我找到准备 Python 的最佳平台& SQL 编码面试到此为止!比 LeetCode 更好更便宜。**

希望你也会发现它们有用!现在欣赏:D 的文章

介绍

Python 字典被定义为数据值的集合,其中的项以键值对的形式保存。因此,字典也被称为关联数组。

如果您对 Python 相对陌生,或者您正在准备下一轮编码,您可能会偶然发现一些需要与字典交互的算法。

然而,似乎字典不仅在新手中不断产生兴趣,在更有经验的开发者中也是如此。实际上,纵观所有时代的顶级堆栈溢出 Python 问题,似乎投票最多的三个主题是:

  • 如何使用‘for’循环迭代字典?
  • 如何检查给定的键是否已经存在于字典中?
  • 如何给字典添加新键?

在这篇文章中,我将试图为你提供一个简洁明了的答案。这将使你免于浏览网上的大量评论。

让我们从头开始!👆👆🏽👆🏻

如何使用‘for’循环迭代字典?

为了回答这个问题,我创建了一个字典,其中包含一个模拟网上银行交易的数据:

*transaction_data = {
 ‘transaction_id’: 1000001,
 ‘source_country’: ‘United Kingdom’,
 ‘target_country’: ‘Italy’,
 ‘send_currency’: ‘GBP’,
 ‘send_amount’: 1000.00,
 ‘target_currency’: ‘EUR’,
 ‘fx_rate’: 1.1648674,
 ‘fee_pct’: 0.50, 
 ‘platform’: ‘mobile’
}*

方法 1:迭代使用 For 循环+索引

在 Python 中遍历字典最简单的方法是直接将它放在一个for循环中。Python 会自动将transaction_data视为一个字典,并允许你迭代它的键。

然后,为了访问这些值,可以使用索引操作符[]将每个键传递给字典:

***# METHOD 1 - Unsorted**
for key in transaction_data:
   print(key, ‘:’, transaction_data[key])**Output[1]:**
transaction_id : 1000001
source_country : United Kingdom
target_country : Italy
send_currency : GBP
send_amount : 1000.0
target_currency : EUR
fx_rate : 1.1648674
fee_pct : 0.5
platform : mobile*

如你所见,这些键不是按字母顺序排列的。为了实现这一点,您应该简单地将transaction_data传递给sorted()方法:

***# METHOD 1 - Sorted**
for key in sorted(transaction_data):
   print(key, ‘:’, transaction_data[key])**Output[2]:**
fee_pct : 0.5
fx_rate : 1.1648674
platform : mobile
send_amount : 1000.0
send_currency : GBP
source_country : United Kingdom
target_country : Italy
target_currency : EUR
transaction_id : 1000001*

方法 2:迭代使用。keys( ) +索引

使用返回包含字典键的 Python 对象的.keys()方法可以获得相同的结果。

当您只需要迭代字典的键时,这尤其方便,但是它也可以与索引操作符结合使用来检索值:

***# METHOD 2**
for key in transaction_data.keys():
    print(key, '-->', transaction_data[key])**Output[3]:**
transaction_id --> 1000001
source_country --> United Kingdom
target_country --> Italy
send_currency --> GBP
send_amount --> 1000.0
target_currency --> EUR
fx_rate --> 1.1648674
fee_pct --> 0.5
platform --> mobile*

方法 3:迭代使用。项目( )

然而,遍历字典最 "pythonic" 和最优雅的方式是使用.items()方法,该方法以元组的形式返回字典条目的视图:

*print(transaction_data.items())**Output[4]:** dict_items([('transaction_id', 1000001), 
            ('source_country', 'United Kingdom'), 
            ('target_country', 'Italy'), 
            ('send_currency', 'GBP'), 
            ('send_amount', 1000.0), 
            ('target_currency', 'EUR'), 
            ('fx_rate', 1.1648674), 
            ('fee_pct', 0.5), 
            ('platform', 'mobile')])*

为了迭代transaction_data字典的键和值,您只需要‘解包’嵌入在元组中的两个项目,如下所示:

***# METHOD 3**
for k,v in transaction_data.items():
    print(k,’>>’,v)**Output[5]:** transaction_id >> 1000001
source_country >> United Kingdom
target_country >> Italy
send_currency >> GBP
send_amount >> 1000.0
target_currency >> EUR
fx_rate >> 1.1648674
fee_pct >> 0.5
platform >> mobile*

请注意, kv 只是“key”和“value”的标准别名,但是您也可以选择其他命名约定。例如,使用 ab 会导致相同的输出:

*for a,b in transaction_data.items():
    print(a,’~’,b)**Output[6]:** transaction_id ~ 1000001
source_country ~ United Kingdom
target_country ~ Italy
send_currency ~ GBP
send_amount ~ 1000.0
target_currency ~ EUR
fx_rate ~ 1.1648674
fee_pct ~ 0.5
platform ~ mobile*

通过嵌套字典进行额外迭代🤓

但是如果你需要迭代一个像transaction_data_n这样的嵌套字典呢?在这种情况下,每个键代表一个事务,并有一个字典作为值:

***transaction_data_n** = {
 ‘transaction_1’:{
 ‘transaction_id’: 1000001,
 ‘source_country’: ‘United Kingdom’,
 ‘target_country’: ‘Italy’,
 ‘send_currency’: ‘GBP’,
 ‘send_amount’: 1000.00,
 ‘target_currency’: ‘EUR’,
 ‘fx_rate’: 1.1648674,
 ‘fee_pct’: 0.50, 
 ‘platform’: ‘mobile’
 },
 ‘transaction_2’:{
 ‘transaction_id’: 1000002,
 ‘source_country’: ‘United Kingdom’,
 ‘target_country’: ‘Germany’,
 ‘send_currency’: ‘GBP’,
 ‘send_amount’: 3320.00,
 ‘target_currency’: ‘EUR’,
 ‘fx_rate’: 1.1648674,
 ‘fee_pct’: 0.50, 
 ‘platform’: ‘Web’
 },
 ‘transaction_3’:{
 ‘transaction_id’: 1000003,
 ‘source_country’: ‘United Kingdom’,
 ‘target_country’: ‘Belgium’,
 ‘send_currency’: ‘GBP’,
 ‘send_amount’: 1250.00,
 ‘target_currency’: ‘EUR’,
 ‘fx_rate’: 1.1648674,
 ‘fee_pct’: 0.50, 
 ‘platform’: ‘Web’
 }
}*

为了解开属于每个嵌套字典的键值对,可以使用下面的循环:

***#1\. Selecting key-value pairs for all the transactions**for k, vin transaction_data_n.items():
    if type(v) is dict:
        for **nk, nv** in v.items(): 
            print(**nk**,’ →’, **nv**)**#nk and nv stand for *nested key* and *nested value*****Output[7]:** transaction_id --> 1000001
source_country --> United Kingdom
target_country --> Italy
send_currency --> GBP
send_amount --> 1000.0
target_currency --> EUR
fx_rate --> 1.1648674
fee_pct --> 0.5
platform --> mobile
transaction_id --> 1000002
source_country --> United Kingdom
target_country --> Germany
send_currency --> GBP
send_amount --> 3320.0
target_currency --> EUR
fx_rate --> 1.1648674
fee_pct --> 0.5
platform --> Web
transaction_id --> 1000003
source_country --> United Kingdom
target_country --> Belgium
send_currency --> GBP
send_amount --> 1250.0
target_currency --> EUR
fx_rate --> 1.1648674
fee_pct --> 0.5
platform --> Web-----------------------------**#2\. Selecting key-value pairs for 'transaction_2 only'**for k, v in transaction_data_n.items():
    if type(v) is dict and k == 'transaction_2':
        for **sk**, **sv** in v.items():
            print(**sk**,'-->', **sv**)**Output[8]:**
transaction_id --> 1000002
source_country --> United Kingdom
target_country --> Germany
send_currency --> GBP
send_amount --> 3320.0
target_currency --> EUR
fx_rate --> 1.1648674
fee_pct --> 0.5
platform --> Web*

如何检查给定的键是否已经存在于字典中?

您可以使用in操作符在 Python 字典中检查成员资格。

特别是,假设您想要检查send_currency字段是否可以作为transaction_data中的一个键。在这种情况下,您可以运行:

*‘send_currency’ in transaction_data.keys()**Output[9]:** True*

同样,要检查值GBP是否已经分配给字典中的一个键,您可以运行:

*‘GBP’ in transaction_data.values()**Output[10]:** True*

然而,上面的检查不会立即告诉你GBP是分配给send_currency键还是target_currency键的值。为了确认这一点,您可以向values()方法传递一个元组:

*(‘send_currency’, ‘GBP’) in transaction_data.items()**Output[10]:** True('target_currency', 'GBP') in transaction_data.items()**Output[11]:** False*

如果transaction_data字典包含数百个值,这将是检查GBP是否确实是该特定事务的send_currency的最佳方式。

得心应手!😏😏😏

如何给字典添加一个新键?

最后,让我们假设,在某个时候,分析团队要求您将user_addressuser_email字段添加到字典中可用的数据中。你将如何实现?

有两种主要方法:

  • 使用方括号[]符号:
*transaction_data['user_address'] = '221b Baker Street, London - UK'for k,v in transaction_data.items():
    print(k,’:’,v)**Output[12]:** transaction_id : 1000001
source_country : United Kingdom
target_country : Italy
send_currency : GBP
send_amount : 1000.0
target_currency : EUR
fx_rate : 1.1648674
fee_pct : 0.5
platform : mobile
user_address : 221b Baker Street, London - UK*
  • 或者,您可以使用update()方法,但是需要更多的输入:
*transaction_data.update(user_email=’user@example.com’)for k,v in transaction_data.items():
    print(k,’::’,v)**Output[13]:**
transaction_id :: 1000001
source_country :: United Kingdom
target_country :: Italy
send_currency :: GBP
send_amount :: 1000.0
target_currency :: EUR
fx_rate :: 1.1648674
fee_pct :: 0.5
platform :: mobile
user_address :: 221b Baker Street, London - UK
user_email :: user@example.com*

结论

在这篇文章中,我分享了 3 种方法来使用“for”循环遍历 Python 字典,并高效地提取键值对。但是,请注意,还存在更多的【python 化】解决方案(即字典理解*)。*

尽管是一个相对基础的话题,“如何迭代 Python 字典?”,是关于堆栈溢出的投票最多的问题之一。

出于这个原因,我还回答了另外两个非常流行的关于检查成员资格和向 Python 字典添加新的键值对的堆栈溢出问题。

我的希望是,你会用这篇文章在同一个地方澄清你对字典的所有疑问。学习代码很有趣,而且会永远改变你的生活,所以继续学习吧!

给我的读者一个提示

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

在 Python 中执行快速探索性数据分析的 3 种方法

原文:https://towardsdatascience.com/3-ways-to-perform-quick-exploratory-data-analysis-in-python-fbdcba4c4996?source=collection_archive---------34-----------------------

更好地理解您的数据

rishi 在 Unsplash 拍摄的照片

探索性数据分析是数据科学中一个非常重要的过程。无论我们想对数据做什么,我们都必须总结它们的主要特征,这样我们才能更好地理解它们。有时这可能很难做到,我们经常会以大而复杂的输出而告终。在这篇文章中,我们将向你展示 3 种以一种易读的格式进行快速探索性数据分析的方法。

我们将使用泰坦尼克号数据集。

import pandas as pd
import numpy as np

df=pd.read_csv(‘train.csv’)
df.head()

1.Tensorflow 数据验证

TensorFlow 数据验证(TFDV) 是一个探索和验证机器学习数据的库。它包含一个非常有用的函数,只需一行代码就可以从数据框中生成统计数据。

import tensorflow_data_validation as tfdv

stats = tfdv.generate_statistics_from_dataframe(df)

tfdv.visualize_statistics(stats)

正如你所看到的,我们得到了一个很好的格式,一个很好的数字和分类特征的总结。

2.Quickda

Quickda 是一个惊人的库,能够产生专业的 HTML 交互输出。

import pandas as pd
from quickda.explore_data import *
from quickda.clean_data import *
from quickda.explore_numeric import *
from quickda.explore_categoric import *
from quickda.explore_numeric_categoric import *
from quickda.explore_time_series import *

explore(df, method='profile', report_name='Titanic')

你可以在这里下载输出

输出是一个交互式报告,其中包含许多数据统计,如完整的变量分析以及它们之间的相关性。当我们想与他人分享分析时,Quickda 是一个很好的选择,因为我们可以将它保存为 HTML 文件。

3.熊猫

熊猫图书馆可能并不花哨,但却是数据科学中最强大和最有用的图书馆之一。我们将向您展示如何获得基本探索性数据分析所需的所有信息。pandas 的主要优势是可以处理其他图书馆无法处理的大数据。

pd.DataFrame({"values":{col:df[col].unique() for col in df},
              'type':{col:df[col].dtype for col in df},
              'unique values':{col:len(df[col].unique()) for col in df},
              'NA values':{col:str(round(sum(df[col].isna())/len(df),2))+'%' for col in df},
              'Duplicated Values':{col:sum(df[col].duplicated()) for col in df}
             })

这只是熊猫力量的一个例子。当然,你可以做很多事情,比如计算数值,绘制直方图等等。但有时像上面这样的数据帧是我们需要的唯一信息。

总结一下

Tensorflow 数据验证和 Quickda 可以自动为我们提供数据特征的出色展示。我们鼓励您仔细看看它们,因为它们都是具有许多功能的强大库。然而,它们无法处理大数据,当您只想对数据有一个基本的了解时,使用它们将是大材小用。另一方面,熊猫又轻又快,可以轻松处理大数据。如果你正确地使用它,你可以得到很好的结果。

最初发表于 https://predictivehacks.com

用 Python 查询 BigQuery 的 3 种方法

原文:https://towardsdatascience.com/3-ways-to-query-bigquery-in-python-66838f45cb43?source=collection_archive---------5-----------------------

SQLAlchemy,用于 Google BigQuery 的 Python 客户端,以及 bq 命令行工具

照片由雷蒙·克拉文斯在 Unsplash 上拍摄

如何查询 BigQuery 数据?本文讨论了在 Python 中查询 BigQuery 数据的 3 种方法。希望你觉得有用。

环境

conda install notebook google-cloud-bigquery sqlalchemy pybigquery

资格证书

要在本地认证 Google Cloud,您需要安装 Google Cloud SDK 并通过以下命令行登录/认证。更多信息可在官方文档中找到。

gcloud auth login

要通过凭证文件进行认证,您可以创建一个服务帐户,并从服务帐户获取凭证:进入 google cloud 服务帐户页面,点击一个项目,点击“+创建服务帐户”,然后它将生成一个凭证 JSON 文件。在下面的例子中,我将这个凭证文件重命名为“BIGQUERY_CREDENTIAL”。

BigQuery 的 SQLAlchemy

项目为 bigquery 实现了一个 SQLAlchemy 工具。SQLAlchemy 是用 Python 读取 SQL 数据的强大工具。以下是来自文档的 SQLAlchemy 的描述:

SQLAlchemy 是 Python SQL 工具包和对象关系映射器,为应用程序开发人员提供了 SQL 的全部功能和灵活性

要使用 SQLAlchemy,第一步是使用create_engine()建立连接。在这个函数的参数中,我们定义了我们试图连接到的数据库"bigquery://"和凭证文件的路径。如果您在本地运行它并在本地进行身份验证,那么您可以在没有凭据信息的情况下运行以下内容。如果输出数据很大,我们可以增加arraysize,默认为 5000。

在我们建立到 BigQuery 的连接之后,有多种方法可以查询数据。我的方法是使用 Pandas 的pd.read_sql,这样我可以直接得到 Pandas 的数据帧。在pd.read_sql函数中,我们需要的只是指定的查询和连接。

参数化我们的查询通常是有用的。SQLAlchemy 提供了一个内置函数text(),它接受查询作为输入,并支持参数化。或者,您可以在查询中将参数写成 f 字符串。

Google BigQuery 的 Python 客户端

第二种方法是为 BigQuery 使用官方的 Python 客户端。如果您在本地运行它并通过认证,那么您不需要定义凭证,并且client=bigquery.Client()将会正常工作。

bq 命令行工具

第三种方法是使用 subprocess 运行 bq 命令行工具。查询命令是bq query。我们可以向查询传递标志,将输出格式定义为 csv,并指定我们想要运行的查询。然后我们可以使用 subprocess 来运行 Python 中的命令行代码。

bq 命令行工具支持查询参数。在下面的例子中,我们传入--parameter标志来定义参数的名称、类型和值信息。在查询本身中,我们使用@parameter_name来指定一个参数。另一件需要注意的事情是,如果输出的行数太多,我们可以将--max_rows标志增加到一个较大的数字。

摘要

总之,我快速地通过三种方式在 Python 中查询 BigQuery。

第一种方法,SQLAlchemy 有许多很好的内置功能,并支持许多不同类型的数据库。对于在其他数据库上使用过 SQLAlchemy 并喜欢其特性的用户,您可能会喜欢使用 SQLAlchemy 方法来查询 BigQuery。

第二种方法是 Google BigQuery 的官方 Python 客户端,我个人认为它不太容易使用,文档可能会更好。我没怎么用过,所以我的印象可能是错误的。

最后,bq 命令行工具非常强大。它提供了广泛的功能,而不仅仅是查询数据。我知道很多人有顾虑,不喜欢使用子流程。所以用哪一个真的取决于你的喜好。

快乐大查询!

参考

https://Google APIs . dev/python/Google API-core/latest/auth . html【https://github . com/Google APIs/python-bigquery-sqllcemy【https://www . sqllcemy . org/【https://github . com/Google APIs/python-bigquery】

由 Sophia Yang 于 2021 年 6 月 28 日

在 Python 中本地存储和读取凭证的 3 种方法

原文:https://towardsdatascience.com/3-ways-to-store-and-read-credentials-locally-in-python-5195fc1881b6?source=collection_archive---------24-----------------------

秘密被称为秘密是有原因的。我们不希望其他人知道它们,无论是在现实生活中还是在 Python 中

作者图片

原帖【realpythonproject.com】

LinkedIn Twitter 上与我联系

我们将讨论使用 Python 存储和读取凭证的 3 种不同方式。

  • 将它们存储为系统变量
  • 将它们作为变量存储在虚拟环境中
  • 将它们存储在. env 文件中
  • 最便捷的方式

吉姆·梅德洛克的这篇文章对环境变量、它们的用例以及如何使用它们进行了深入的解释。

https://medium.com/chingu/an-introduction-to-environment-variables-and-how-to-use-them-f602f66d15fa

将它们存储为全局环境变量

如果凭据存储为全局环境变量,则在您 PC 上的任何环境中运行的任何脚本都可以访问它们。

要创建一个全局环境变量,请在您的终端中运行

export varName=varValue

确保“=”之间没有空格。如果您得到一个错误“zsh: Bad Assignment”,这可能是由于“=”之间的空格引起的。

让我们创建几个全局环境变量

export globalSecretUser=global_rahul1999
export globalSecretKey = global_xy76hUihk

在 Windows 中,您可能必须使用“设置”而不是“导出”

上面的脚本需要在终端中运行。现在,让我们尝试访问我们之前创建的变量。

import os
print(os.environ) 
# This will print a dictionary with 
# all the global environment variables

我们可以使用字典访问方法来读取环境变量,即使用。get()或[ ]

print(os.environ.get('globalSecretUser'))
print(os.environ.get('globalSecretKey'))'''
global_rahul1999
global_xy76hUihk
'''

要更新环境变量,只需再次运行 export 语句

export globalSecretUser=Updated_rahul1999

让我们再次尝试访问 Python 中的变量

import os print(os.environ.get('globalSecretUser'))'''
Updated_rahul1999
'''

要删除环境变量,我们使用 unset 关键字

unset globalSecretUser

如果您尝试在 Python 中访问该变量,根据您用来访问字典中的值的方法,您将要么得到一个 KeyError,要么没有。

将它们作为变量存储在虚拟环境中

这些环境变量只能由在创建变量的虚拟环境中运行的脚本访问。我们可以将它们视为“局部”环境变量。

首先,我们必须创建一个虚拟环境

在 Mac 上

python3 -m venv venv

在 Windows 上

python -m venv venv

这将在您的当前目录中创建一个虚拟环境。bin 文件夹中应该有一个名为“activate”的文件。如果您使用的是 Windows,它应该在 Scripts 文件夹中。每当我们激活虚拟环境时,这个脚本就会运行。

我们将在这个脚本中添加变量。因此,每次我们激活虚拟环境时,都会创建环境变量。打开文件。

在创建变量之前,我们需要添加一些代码,以确保一旦虚拟环境被停用,这些变量就不存在了。

我们将使用 unset 关键字,转到 activate 脚本中的函数 deactivate()并在函数的开头取消设置变量

deactivate () {
    unset localSecretUser
    unset localSecretKey
    # Some Code
}

现在,我们将使用 export 关键字来定义变量。这段代码应该位于激活脚本末尾的停用函数之外

deactivate(){
     # Some Code
}
# Some More Code
export localSecretUser=local_secret_rahul199
export localSecretKey=local_secret_xyudJIk12AA

在 Windows 中,您可能必须使用“设置”而不是“导出”

现在我们需要激活我们的虚拟环境。如果您已经激活了您的虚拟环境,您可以使用 deactivate 关键字来停用您的虚拟环境

deactivate

在终端中键入以上内容。

现在让我们激活我们的虚拟环境。
在苹果电脑上

source venv/bin/activate

在 Windows 上

venv/Scripts/activate

您可以在终端中使用以下命令列出当前环境的变量

printenv

现在让我们尝试访问我们刚刚创建的变量。这类似于我们访问全局环境变量的方式

import os print(os.environ.get('localSecretUser'))
print(os.environ.get('localSecretKey'))'''
local_secret_rahul199
local_secret_xyudJIk12AA
'''

现在,让我们停用虚拟环境,并尝试再次运行 python 脚本

deactivate
python3 main.py

它应该不返回任何值。

要了解更多关于 Python 中虚拟环境的知识,请查看达科塔·莉莉艾的这篇文章

https://medium.com/@dakota.lillie/an-introduction-to-virtual-environments-in-python-ce16cda92853

将它们存储在. env 文件中

在您的根文件夹(包含您的虚拟环境的文件夹)中,创建一个名为“. env”的文件。在该文件中添加变量

#inside file named .env
secretUser = "secret_user_rahul1999"
secretKey = "secret_key_adfdsaUj12"

我们需要安装一个 python 库来读取变量

pip3 install python-dotenv

让我们来阅读 Python 中的变量

from dotenv import load_dotenv
import os load_dotenv()
print(os.environ.get('secretUser'))
print(os.environ.get('secretKey'))'''
secret_user_rahul1999
secret_key_adfdsaUj12
'''

不要忘记添加。的. env 文件。gitignore 文件。这将确保您的凭证不会被推送到您的 git 存储库。

# Inside .gitignore.env

最方便的方法

在我看来,最方便的方法是将它们存储在. env 文件中。

  • 它们位于您项目的本地
  • 您不需要担心“取消设置”它们
  • 如果您将它们添加到您的。gitignore 文件,它对外界是安全的
  • 如果您将脚本部署为无服务器函数,您将需要使用“load_dotenve()”来读取 Azure/AWS 环境的配置文件中存储的环境变量。

虽然它有很多优点,但是一个缺点是当我们在。与全局环境变量同名的 env 文件。在 Python 中访问变量将返回全局值,因为我们没有使用“unset”来取消变量值的设置,也没有使用“export”来为变量赋值。

让我知道你是否喜欢任何其他方法,或者是否认为其中一个比另一个更安全。

用 Python 调优机器学习模型超参数的 3 种方法

原文:https://towardsdatascience.com/3-ways-to-tune-hyperparameters-of-machine-learning-models-with-python-cda64b62e0ac?source=collection_archive---------19-----------------------

从零开始到网格搜索—包括动手示例。

马泰奥·卡塔内塞在 Unsplash 上的照片

机器学习模型开箱即可相当准确。但通常情况下,精度可以通过超参数调整来提高。

超参数调整是一个通过调整超参数来提高模型准确性的漫长过程,这些值无法学习,需要在训练前指定。

今天,您将学习三种超参数调谐方法。您将从最手工的方法转向用 Scikit-Learn 库实现的GridSearchCV类。

这篇文章的结构如下:

  • 数据集加载和准备
  • 手动超参数调谐
  • 基于环路的超参数调谐
  • 使用 GridSearch 进行超参数调整
  • 结论

你可以点击下载这篇文章的笔记本。

数据集加载和准备

没必要在这里发疯。简单的数据集就可以了。您将使用直接从 web 加载的 Iris 数据集。

就库而言,您将需要 Pandas 来处理数据,以及 Scikit-Learn 中的几个类/函数。以下是如何加载库和数据集:

调用head()函数将显示以下数据帧子集:

图片 1 —虹膜数据集的头部(图片由作者提供)

数据集非常干净,所以不需要额外的准备。接下来,您将把它分成训练和测试子集。方法如下:

最后,让我们建立一个默认模型。它将向您展示使用默认超参数的模型有多精确,并且它将作为调整后的模型应该超越的基线。

下面是如何在训练集上训练决策树模型,获得准确率得分和混淆矩阵:

相应的准确度和混淆矩阵如下所示:

图片 2 —基线模型准确性和混淆矩阵(图片由作者提供)

简而言之——您需要一个在测试集上准确率超过 97%的模型。让我们看看超参数调优是否能做到这一点。

手动超参数调谐

您不需要专门的库来进行超参数调优。但这将是一个乏味的过程。

在开始之前,您需要知道可以优化哪些超参数。您可以在库文档中找到完整的列表。这里是决策树的文档页面。在本文中,您将只针对这三个方面进行优化。这些是:

  • criterion–衡量分割质量的函数,可以是基尼(默认)或
  • splitter–在每个节点选择拆分的策略,可以是最佳(默认)或随机
  • max_depth–一棵树的最大深度,一个整数值

您可以将一组超参数值定义为一个字典(键-值对),然后根据它们构建单独的模型。方法如下:

以下是相应的精度:

图 3-手动调整模型的精确度(图片由作者提供)

总结一下——您已经设法超越了基线模型,但是这种方法是不可扩展的。想象一下,如果您想要测试 1000 种组合,这实际上是一个很小的数字——以这种方式编写代码不是一条路。接下来我们来改进一下。

基于环路的超参数调谐

您可以通过在列表中指定可能的超参数值来改进前面的解决方案。超参数有多少,列表就有多少。然后在嵌套循环中对模型进行训练和评估。

下面是一个示例代码片段:

如您所见,测试集上的模型精度和相应的超参数值作为字典存储在一个列表中,该列表后来被转换为数据框。很容易对数据框进行排序,并查看哪个超参数组合做得最好:

图 4 —手动调整模型的分数和超参数的数据框架(图片由作者提供)

总结一下——这种方法非常有效,但是您注定要使用嵌套循环。三个超参数没问题,但是想象一下优化十个。一定有更好的办法。

使用 GridSearch 进行超参数调整

Scikit-Learn 附带了GridSearchCV类,它让超参数调优变得非常有趣。优化可能需要很长时间(与类无关),但是您可以不用手动编写东西。

您需要将超参数空间声明为一个字典,其中每个键都是超参数的名称,其值是可能值的列表。然后,您可以通过调用fit()函数,使用GridSearchCV类来找到一个最优集合。

这种方法还有内置交叉验证的好处,消除了结果中的“机会”。

以下是完整的代码片段:

然后,您可以将结果存储在 Pandas 数据框中(以便于检查),方法如下:

这是数据框的一部分:

图 5 —网格搜索参数数据框(图片由作者提供)

让我们过滤此数据框,仅保留感兴趣的列—平均测试分数和已用超参数值,并按平均测试分数排序:

结果如下:

图 6 —使用 GridSearch 调整的模型的分数和超参数的数据框架(图片由作者提供)

如果您对检查多种组合感兴趣,这是一个很好的方法。如果您只想获得最佳价值,有一种更简单的方法:

该属性返回一个字典:

图片 7-最佳超参数(图片由作者提供)

可以直接把字典传给机器学习模型(使用拆包— **dict_name)。

这就是为机器学习算法找到最佳超参数有多容易。接下来让我们总结一下。

结论

最后一种方法将在大多数情况下完成工作。你可以手动进行优化,但这有什么意义呢?

网格搜索可能需要很长时间才能完成。假设你有 5 个参数,有 5 个可能的值。这是 55 种可能的组合(3125)。将交叉验证添加到图片中(假设 10 倍),这就是你需要训练和评估的 31250 个模型。

对于这些情况,随机网格搜索可能是一个更好的选择。从代码角度来说,它与非随机化方法的工作原理相同,所以这就是今天没有讨论它的原因。

感谢阅读。

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

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

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

了解更多信息

  • 2021 年学习数据科学的前 5 本书
  • SHAP:如何用 Python 解读机器学习模型
  • 三大分类机器学习指标—一劳永逸地消除准确性
  • ROC 和 AUC——如何评估机器学习模型
  • 精确召回曲线:如何轻松评估机器学习模型

原载于 2021 年 1 月 21 日 https://betterdatascience.comhttps://betterdatascience.com/3-ways-to-tune-hyperparameters/

在 Python 中可视化循环进度的 3 种方法

原文:https://towardsdatascience.com/3-ways-to-visualize-loop-progress-in-python-7eea7dfa512a?source=collection_archive---------13-----------------------

不要等待意想不到的结局

沃洛德梅尔·赫里先科在 Unsplash 拍摄的照片

在编程语言中,循环用于迭代一组对象。在迭代时,我们可以根据各种条件对每个对象采取不同的操作来完成任务。

有时,当列表非常大,或者列表中的对象维数很高时,处理列表需要很长时间。在这种情况下,就像打勾一样,我们通常会尝试打印索引号来检查列表的进度。

我们无法记住每次运行代码时循环的大小。为了解决这个问题,我们可以利用 python 库显示进度条来直观地检查进度,而不是打印列表索引来检查进度。

本文将介绍我们如何利用 python 库来制作进度条,并介绍我们可以使用该库的各种地方。

tqdm——一个 Python 库

tqdm 源自阿拉伯语单词 taqaddum ,意为“进步”,是西班牙语中“我如此爱你”的缩写( te quiero demasiado )。

这个库帮助我们显示任何循环的进度条。它还支持嵌套循环功能,也可以用于熊猫、Keras&Jupyter 笔记本以及许多其他地方。

让我们探索一些最佳实践,在这些实践中,我们通常使用这种方法来使我们的任务更易管理和更智能。

装置

在开始库使用部分之前,让我们首先使用 python 中的 pip 命令安装它。

pip install tqdm

就是这样。让我们探索一下可以利用tqdm 模块的一些领域。

使用第 1 部分— IPython/Jupyter 集成

我们可以利用 Jupyter 笔记本的tqdm模块来跟踪进度。在机器学习领域,当我们使用一组时期训练我们的模型时,为了可视化每个时期的完成进度,我们可以使用tqdm

使用tqdm.notebook子模块支持 IPython/Jupyter。

from tqdm.notebook import trange, tqdm
from time import sleepfor i in trange(4): #first loop
    for j in tqdm(range(100)): #Nested loop
        sleep(0.01)

作者 Jupyter 笔记本截图

使用第 2 部分— Keras 集成

一个keras callback也可与tqdm一起使用,以可视化模型拟合的进度。我们可以如下使用它:

from tqdm.keras import TqdmCallback

...

model.fit(..., verbose=0, callbacks=[TqdmCallback()])

keras callback也有一个 display()方法,可以在拟合机器学习模型时与tqdm一起使用,如下所示:

from tqdm.keras import TqdmCallback
cbk = TqdmCallback(display=False)cbk.display()
model.fit(..., verbose=0, callbacks=[cbk])

使用第 3 部分-通用 Python 脚本

我们可以利用通用 python 的tqdm,编写任务脚本来可视化任务进度,包括从数据库中提取数据和可视化完整流程。范围是无限的。

def improve_guess_func(rt, n):
    return (rt + n/rt) / 2guess = 1
target = 2
for i in trange(10):
    guess = improve_guess(guess, target)

作者 Jupyter 笔记本截图

结论

本文到此为止。我们已经介绍了如何有效地使用 python 中的tqdm函数来可视化和跟踪循环在不同地方的进展。

我们可以在任何情况下使用这个函数,在这种情况下,我们不知道一个循环要花多少时间来处理它的元素。在那种情况下,tdqm扮演了一个很有希望的角色。

感谢阅读!

在你走之前……

如果你喜欢这篇文章,并且想继续关注关于 Python &数据科学的更多精彩文章——请点击这里https://pranjalai.medium.com/membership考虑成为一名中级会员。

请考虑使用我的推荐链接注册。通过这种方式,会员费的一部分归我,这激励我写更多关于 Python 和数据科学的令人兴奋的东西。

还有,可以随时订阅我的免费简讯: 普朗加尔的简讯

将 Python 列表写入雪花表的 3 种方法

原文:https://towardsdatascience.com/3-ways-to-write-python-lists-to-a-snowflake-table-802318e56c64?source=collection_archive---------15-----------------------

了解如何存储可以用 SQL 查询的大量数据,从 Python 嵌套列表到雪花数据库

建议的点播课程:

你是想通过成为 数据工程师 还是 机器学习工程师 来推进自己的职业生涯吗?我强烈建议您查看以下课程:

  • Python 数据工程纳米学位 精品课程!
  • leet code In Python:50 算法编码面试问题→最适合涉及算法的编码回合!
  • Python 高级编码问题(StrataScratch)我找到的准备 Python 的最佳平台& SQL 编码面试到此为止!比 LeetCode 更好更便宜。**
  • 用 Python 练习编码面试题(60+题) 列表、数组、集合、字典、map()、filter()、reduce()、iterable 对象。

简介

在构建数据管道时,您可能最终会在 Python 列表中存储大量数据。

通常,该对象采用列表的列表的形式,其中每个嵌套列表可以表示数据库表中的一行,并且属于它的每个元素可以被分配给特定的列:

***lst** = [[x1, y1, z1], [x2, y2, z2], [x3, y3, z3],...,[xn, yn, zn]]*

尽管 Python 列表不是存储数据的最有效方式,但使用它们来保存中间输出还是很方便的。

例如,假设您的管道是以这样一种方式编写的,它利用 Python 算法来操作和丰富数据(,这种逻辑在 SQL* 中不容易复制),并且算法的输出最终被附加到一个列表中。*

但是,在某些时候,您可能需要将该列表的内容存储在数据库中。这通常发生在以下情况:

  • 数据不需要进一步处理。可以提供给分析师进行报告。
  • 数据确实需要额外处理。然而,使用 Python 列表不再是一种选择,因此您决定将中间结果保存在一个辅助表中。

根据您正在使用的数据库,可以应用多种策略。然而,在本教程中,我将向您展示使用将 Python 列表写入雪花数据库的 3 种方法:

  • snowflake.connector自行打包;
  • snowflake.connectorpandas套餐的组合;
  • snowflake.sqlAlchemypandas套餐的组合。

在开始编写代码之前,让我们简要描述一下您在日常工作中可能会遇到的一个实际用例。

*</3-nanodegrees-you-should-consider-to-advance-your-data-engineering-career-in-2021-baf597debc72>

插入、更新或删除数据

在现实世界中,向目标表中插入新记录是不够的。同时,数据工程师通常还需要更新(或删除)其中已经存在的记录。

在现实世界中,向目标表中插入新记录是不够的。同时,数据工程师通常还需要更新(或删除)已经存在的记录。

在雪花中,这可以通过使用MERGE INTO语句来实现,引用文档 " 根据第二个表(源)或子查询中的值插入、更新和删除表中的值,其语法如下:

MERGE INTO *<target_table>* USING *<source>* ON *<join_expr>* { **matchedClause** | **notMatchedClause** }

令人烦恼的是,为了决定在<target_table>中插入哪些记录,更新(或删除)哪些记录,MERGE INTO语句要求<source>(读作:您希望插入、更新或删除到目标表中的新 记录)作为标准表严格可检索,或者作为子查询进行查询。

反过来,这也就意味着,截至目前,雪花并不支持一个 Python 列表作为USING语句下的 **<source>**

这正是数据需要额外处理,但使用 Python 列表不再可能的情况:嵌套的对象需要转换成其他格式并写入数据库表,然后后者才能用作合并的源。

下面描述了需要发生的事情的流程:

作者在 Lucidchart 上创建的流

这又把我们带回了最初的问题:**如何把 Python 列表写到雪花表?**要回答这个问题,我们先创建一个模拟数据集。

创建模拟 Python 列表

下面我所做的是创建一个data_to_insert列表,它本身包含五个子列表,其中存储了关于模拟金融交易的数据。

这个列表表示 ETL 管道的输出,它必须被写入雪花中的目标表。为了实现这一点,首先需要将该列表插入到一个辅助表中。

然后我把这个列表转换成一个df_to_insert熊猫数据框架,很快就会用到。正如所料,数据帧具有形状(5,5):

使用与 DataFrame 相同的列定义,我最终在 SnowFlake 中创建了一个空的辅助(source_t)表,现在可以存放数据了:

让我们看看如何通过 Python 连接到 SnowFlake 来填充它,以便通过游标对象执行 SQL 查询。

如何给雪花写一个 Python 列表

方法#1 | SF 连接器+ ExecuteMany()

将 Python 列表批量插入雪花表的第一种方法是通过snowflake.connector包连接到雪花。

一旦建立了连接(通过external browser认证或者通过user + password的组合),您可以简单地将INSERT语句传递给executemany()方法:

现在,可以使用 SQL 检索最初存储在列表中的数据:

SELECT * FROM SCHEMA.SOURCE_T 

通过以下方式获得的输出

优点:executemany()方法非常简单,因为它只需要一个INSERT语句,不需要将列表转换成另一种格式。

CONS: 为了使这种方法成功,列表中的 最大表达式数必须是 < 16,385 ,这意味着如果您正在处理较大的批处理,这不是一个可以考虑的选项。

此外,对于您希望插入的每一列,您需要添加一个%s作为VALUES()语句的一部分,这使得键入操作有点重复,代码也不够优雅。

方法#2 | Pandas + SF 连接器+ WritePandas()

如果您正在处理大批量,我建议您:

  • 通过snowflake.connector包连接雪花(和上面描述的一模一样);
  • 将 Python 列表转换成 pandas DataFrame(之前获得df_to_insert时也是这样做的);
  • 使用write_pandas()功能将df_to_insert写入表格:

优点:write_pandas()在幕后高效地将数据保存在 Parquet 文件中,然后使用PUT命令将这些文件上传到临时阶段,最后运行COPY INTO <table>命令将数据从文件复制到表中

CONS: 从内存的角度来看,将 Python 列表转换成 DataFrame 可能很麻烦。此外,write_pandas()不允许您指定当数据已经出现在表中时要做什么。这意味着,如果您希望每次运行时清空source_t,您将需要运行单独的TRUNCATE TABLE命令。

方法#3 | Pandas + SQLAlchemy + To_SQL()

当您可以自由选择建立与雪花连接的包时,我强烈建议您使用sqlalchemysnowflake.sqlalchemy的组合来创建一个engine对象。

创建engine的好处在于,这是唯一一种在传递给to_sql() pandas 方法时工作良好的连接对象(然而,如果您试图传递用方法#1 和#2 创建的db_conn_sf连接对象,它将抛出一个错误)。

要将df_to_insert写入雪花表格,您可以使用类似于下面的脚本,在我看来这是一个很好的解决方案:

**优点:**当数据已经出现在source_t表中时,to_sql()方法比write_pandas()方法更先进。例如,在这种情况下,我将if_exists参数设置为等于'replace’,这样我就不需要单独的命令来截断表。

CONS: 另一方面,方法背后的算法在转换和存储记录时不如write_pandas()函数高效。在插入到source_t表之前,数据没有被压缩和保存到 Parquet 文件中,这意味着并行性不能被应用,并且在处理大批量数据时对内存的影响可能是相关的。

结论

在本教程中,我已经和你分享了三种可以用来将 Python 列表写入雪花表的方法。现在数据在source_t中可用,我可以通过运行类似于 this 的MERGE INTO查询来完成我的管道上的工作。您可以使用它作为模板来处理您的项目。

但是我也想从你那里了解更多:你曾经面临过这样的问题吗?和..有没有用过其他方法把 Python 列表转换成雪花表?请随意发表评论😁

给我的读者一个提示: 这篇文章包括附属链接,如果你购买的话,我可以从中赚取一小笔佣金,不需要额外的费用。*

30 个例子让你从新手变成高级熊猫用户

原文:https://towardsdatascience.com/30-examples-to-get-you-from-a-novice-to-an-advanced-pandas-user-e6eb4e8750b7?source=collection_archive---------3-----------------------

全面和结构化的实用指南

照片由恒电影在 Unsplash 上拍摄

Pandas 是 Python 的一个数据分析和操作库。它是数据科学家和分析师中最受欢迎的工具之一。

熊猫可以处理整个数据分析管道。它提供了多种功能和方法来清理、转换、分析和绘制数据。在本文中,我们将做 30 个例子来演示每个步骤中最常用的函数。

我们将从基本操作开始,然后逐渐增加复杂性。前 4 个示例将涵盖创建您自己的数据框以供练习的不同方式。对于本文的剩余部分,我们将使用 Kaggle 上提供的墨尔本房屋数据集。

示例 1

DataFrame函数可用于使用 Python 字典创建数据框。键用作列,值代表行。

import numpy as np
import pandas as pddict_a = {
   "name": ["John", "Jane", "Emily"],
   "height": [178, 175, 177],
   "age": [25, 22, 27]
}df = pd.DataFrame(dict_a)df

(图片由作者提供)

示例 2

在第一个例子中,我们只对字典值使用列表。也可以使用其他数据结构。

dict_b = {
   "date": pd.date_range("2020-01-01", periods=5, freq="D"),
   "store": "A",
   "sales": np.random.randint(50, 100, size=5)
}df = pd.DataFrame(dict_b)df

(图片由作者提供)

第一列包含连续 5 天的DatetimeIndex。第二列用相同的字符串填充,第三列用随机整数的 numpy 数组创建。

示例 3

如果您只需要一个由随机数组成的数据框,那么二维 numpy 数组比字典更实用。

df = pd.DataFrame(np.random.randint(0, 20, size=(3,4)))df

(图片由作者提供)

实例 4

如果没有定义列名,Pandas 会分配一个整数索引作为列名。我们总是可以使用columns参数定制列名。

df = pd.DataFrame(
   np.random.randint(0, 20, size=(3,4)),
   columns = list("ABCD")
)df

(图片由作者提供)

实例 5

对于其余的例子,我们将使用墨尔本住房数据集。让我们首先将数据集读入数据框并检查其大小。

df = pd.read_csv("/content/melb_housing.csv")print(df.shape)
(63023, 13)df.columns
Index(['Suburb', 'Address', 'Rooms', 'Type', 'Price', 'Method', 'SellerG','Date', 'Postcode', 'Regionname', 'Propertycount', 'Distance','CouncilArea'],dtype='object')

read_csv功能唯一需要的参数是文件路径。尽管它有许多可选参数。我们将在下面的例子中看到其中的一些。

数据帧有 63023 行和 13 列。我们可以通过在数据框上应用columns方法来检查列名。

实例 6

read_csv函数允许根据列或行选择数据集的一部分。我只需要郊区、地址、日期、类型、地区名称、距离和价格列

df = pd.read_csv(
   "/content/melb_housing.csv",
   usecols = ["Suburb", "Address", "Date", "Type", "Regionname",  
              "Distance", "Price"]
)df.head()

(图片由作者提供)

usecols参数用于选择特定的列。head方法显示数据帧的前 5 行。

例 7

有几个函数可以处理日期和时间。为了使用它们,日期必须以适当的数据类型存储。我们可以在创建数据框后随时更改数据类型。然而,更好的方法是在读取 csv 文件时解析日期。

df = pd.read_csv(
   "/content/melb_housing.csv",
   usecols = ["Suburb", "Address", "Date", "Type", "Regionname",  
              "Distance", "Price"],
   parse_dates = ["Date"]
)df.dtypes
Suburb                object 
Address               object 
Type                  object 
Price                float64 
Date          datetime64[ns] 
Regionname            object 
Distance             float64 df.head()

(图片由作者提供)

dtypes方法可以用来检查每一列的数据类型。

实施例 8

原始数据并不总是最理想的格式。我们很可能会遇到缺失的价值观。为了保持数据的准确性和一致性,正确检测和处理缺失值至关重要。

isna函数返回用布尔值填充的数据框,指明丢失的值。由于 True 被视为 1,我们可以应用 sum 函数来计算每一列中缺失值的数量。

df.isna().sum()Suburb            0 
Address           0 
Type              0 
Price         14590 
Date              0 
Regionname        0 
Distance          0

我们只在价格列中缺少值。

示例 9

fillna功能可用于替换丢失的值。有不同的方法来处理它们。最佳方案取决于手头的数据。

我们可以用列中值的平均值、中值或众数来填充缺失值。另一种选择是使用常数来替换丢失的值。

在某些情况下,我们可以选择删除缺少值的行或列。dropna功能用于此类任务。它还允许根据条件删除缺少值的行。例如,可以将其定制为删除缺失值超过 3 个的行。

因为数据集的焦点是价格列,所以我选择删除缺少价格的观察值(即行)。

df.dropna(axis=0, how="any", inplace=True)df["Price"].isna().sum()
0

axis参数选择行或列。默认值为 0(即行数)。how参数被设置为“any”以删除有任何缺失值的行。最后,将inplace参数设置为“真”以保存数据框中的更改。

实例 10

astype函数可用于改变列的数据类型。例如,我可能选择用整数而不是浮点数来表示价格。

df.Price = df.Price.astype("int")df.Price.dtypes
dtype('int64')

实施例 11

数据分析中的一个常见操作是基于现有列派生列。我们既可以更新一列中的值,也可以根据现有的值创建一个新的值。

例如,我将创建一个以百万为单位显示价格的列。简单用价格栏除以 100 万就可以算出来。

df["PriceMillion"] = df["Price"] / 1000000df.head()

(图片由作者提供)

实例 12

正如我们在前面的示例中看到的,新列被添加到数据帧的末尾。但是,我希望它在价格栏旁边。

insert函数允许使用列索引在特定位置添加列。让我们首先删除新列,然后将其插入到所需的位置。

df.drop("PriceMillion", axis=1, inplace=True)df.insert(4, "PriceMillion", df["Price"] / 1000000)df.head()

(图片由作者提供)

第一个参数指定新列的索引。另外两个参数是列名和值。

实施例 13

当处理分类变量时,我们可能需要检查列中的唯一值。考虑我们的数据框中的区域名称列。了解该列中有多少不同的值以及它们是什么会很有用。

nunique函数返回不同值的数量,而unique函数显示它们。

df.Regionname.nunique()
8df.Regionname.unique()
array(['Northern Metropolitan', 'Western Metropolitan',        'Southern Metropolitan', 'South-Eastern Metropolitan',        'Eastern Metropolitan', 'Northern Victoria', 'Eastern Victoria',        'Western Victoria'], dtype=object)

实施例 14

过滤观察值(即行)是数据分析的基本部分。我们试图通过根据某些条件检查数据来获得对数据的更好理解。

例如,我们可能想计算价格超过 100 万英镑的房子的数量。

len(df[df.PriceMillion > 1])
17268df[df.PriceMillion > 1]["Price"].count()
17268

我们使用列名在方括号内应用条件。必须使用数据框的名称指定列名。

len是一个内置的 Python 函数。当用于数据框时,它返回行数。count函数,顾名思义,计算一列中的项数。

实施例 15

上述方法还允许基于多个条件进行过滤。我们来查一下造价 100 万以上,类型为“u”的房子有多少?

len(df[(df.PriceMillion > 1) & (df.Type == "u")])
598

实施例 16

如果过滤器有几个值,我们可以使用isin功能。

suburbs = ['Abbotsford', 'Aberfeldie', 'Airport West', 'Albert Park', 'Albion']len(df[df.Suburb.isin(suburbs)])
661

我们创建一个所需值的列表,然后使用它进行过滤。

实例 17

Pandas 提供了几个函数和方法来处理文本数据。我们可以通过 str 访问器来使用它们。

我们也可以使用字符串方法进行过滤。让我们找到以字母 d 开头的郊区的房子。

suburb_D = df[df.Suburb.str.startswith("D")]suburb_D.head()

(图片由作者提供)

实施例 18

在前面的示例中,我们通过过滤原始数据框创建了一个数据框。正如我们在前 5 行中注意到的,这些行的索引与原始索引保持一致。

最好有一个从 0 开始的索引,这可以通过在过滤后应用reset_index函数来实现。

suburb_D = df[df.Suburb.str.startswith("D")].reset_index(drop=True)suburb_D.head()

(图片由作者提供)

如果我们没有将drop参数设置为 True,那么原始索引将作为一个新列保存在数据框中。

实施例 19

另一种过滤行的方法是query函数。它接受字符串形式的条件,这在某些情况下可能更实用。

让我们使用与之前相同的过滤条件,以确保它能够准确工作。

len(df.query("PriceMillion > 1"))
17268len(df.query("PriceMillion > 1 and Type == 'u'"))
598

实施例 20

str 访问器提供了许多操作字符串的函数。常用的一个就是 split 函数。

例如,我们可以通过从 region name 列中提取第一个单词来创建 region group 列。这可以通过如下的分割功能来实现。

df["RegionGroup"] = df.Regionname.str.split(" ", expand=True)[0]df.head()

(图片由作者提供)

当设置为 True 时,expand参数在分割后为每个片段创建单独的列。我们使用索引 0 选择第一个单词。

实施例 21

另一个功能强大的访问器是 dt 访问器。它用于操作和处理日期和时间。

例如,我们可以从日期中提取月和年,如下所示。

df["Month"], df["Year"] = df["Date"].dt.month, df["Date"].dt.yeardf[["Date", "Year", "Month"]].head()

(图片由作者提供)

dt 访问器提供了许多函数和方法。我们不能在这里涵盖所有这些,但是请记住,dt 访问器是我们在处理日期和时间时使用的。

实施例 22

groupby函数在数据分析中经常使用。我们可以根据一些其他值来比较一列中的组或不同值。

例如,我们可以计算每个地区组的平均房价。我们选择感兴趣的列,并指定用于分组的列。然后,对每个组应用聚合函数。

df[["RegionGroup", "PriceMillion"]].groupby("RegionGroup").mean()

(图片由作者提供)

实施例 23

在前面的示例中,我们在应用groupby函数之前选择了 region group 和 price 列。如果我们将 groupby 函数应用于整个数据框,则聚合将应用于所有适当的列。

在计算平均值的情况下,我们将得到所有数值列的平均值。如果只需要对特定列执行聚合,则命名聚合更为实用。

df.groupby("RegionGroup", as_index=False)\
  .agg(avg_price = ("PriceMillion", "mean"))

(图片由作者提供)

使用命名聚合的另一个优点是,我们可以为聚合列分配信息性名称。使用“avg_price”作为列名比只使用 price 更有意义。

我们可以使用as_index参数将组放在数据框的一列中,而不是作为索引。

实施例 24

rank函数用于根据列中的值为观察值(即行)分配等级。例如,我们可以根据价格对房屋进行排名。

df["Rank"] = df["Price"].rank(method="first",  
                              ascending=False).astype("int")df[["Price", "Rank"]].head()

(图片由作者提供)

默认情况下,这些值按升序排列,但是我们可以使用ascending参数来改变这种行为。

实施例 25

sort_values函数根据给定列中的值对行进行排序。让我们用它来根据价格对房屋进行排序。

df.sort_values(by="Price", ascending=False)[["Price", "Rank"]].head()

(图片由作者提供)

我想在排序后显示前 5 行,以确认在前面的例子中分配的等级。

实施例 26

lociloc方法用于选择数据框中的特定行和列。

  • iloc 通过索引工作
  • loc 按标签工作

让我们举几个例子来演示它们是如何使用的。

#rows between 5 and 10 , first 3 columns
df.iloc[5:10, :3]

(图片由作者提供)

#rows between 20 and 25, address and price columns
df.loc[20:25, ["Address", "Price"]]

(图片由作者提供)

我们使用 loc 和 iloc 方法使用相同的值来选择行,因为默认情况下,行的标签是它们的索引。除非创建自定义索引,否则 loc 和 iloc 对行采用相同的值。

实施例 27

Pandas 不是一个数据可视化库,但它允许创建基本的绘图。它可以方便地快速生成用于数据分析的图表。

让我们通过绘制直方图来看看距离列的分布。

df.Distance.plot(
   kind="hist",
   figsize=(8,5),
   title = "Histogram of Distance"
)

(图片由作者提供)

实施例 28

我们也可以画一个显示每日平均价格的线图。我们首先需要根据日期列对行进行分组,然后应用绘图函数。

df.groupby("Date").agg(price = ("Price", "mean")).plot(
   kind="line",
   figsize=(10,5),
   title = "Daily Average Price"
)

(图片由作者提供)

实施例 29

探索性数据分析中使用的另一个常用图是散点图。它概述了两个数值变量之间的相关性。

让我们也创建一个价格和距离列的散点图。

df.plot(
   kind="scatter",
   x="Price",
   y="Distance",
   figsize=(8,6)
)

(图片由作者提供)

距离和价格是负相关的。这是有道理的,因为离市中心越近,房价越贵。

示例 30

最后一个例子是关于sample函数。在某些情况下,我们从大型数据集中随机抽取样本进行分析。

print(df.shape)
(48433, 12)df_sample = df.sample(frac=0.5)print(df_sample.shape)
(24216, 12)

我们取原始数据帧一半大小的样本。我们可以使用n参数获取一定行数的样本。

df_sample = df.sample(n=30000)print(df_sample.shape)
(30000, 12)

结论

我们做了 30 个例子,涵盖了熊猫常用的功能和方法。他们一定会给你提供相当不错的熊猫知识。

当然,除了这篇文章,还有更多关于熊猫的内容。当你需要的时候,你可以随时学习它们。

感谢您的阅读。如果您有任何反馈,请告诉我。

掌握 SQL 的 30 个例子

原文:https://towardsdatascience.com/30-examples-to-master-sql-c8004705479a?source=collection_archive---------6-----------------------

综合实践教程

汤姆·温克尔斯在 Unsplash 上的照片

SQL 是一种编程语言,用于管理关系数据库中以表格形式(即表格)存储的数据。

关系数据库由多个相互关联的表组成。表之间的关系是在共享列的意义上形成的。

有许多不同的关系数据库管理系统(如 MySQL、PostgreSQL、SQL Server)。他们采用的 SQL 语法可能略有不同。然而,差别很小,所以如果你学会了如何使用一个,你可以很容易地切换到另一个。

在本文中,我们将介绍 30 个示例,涵盖了以下 SQL 操作:

  • 创建数据库和表
  • 将数据插入表格
  • 从表中删除数据
  • 更新表格
  • 使用各种 select 语句查询表

在您的机器或云上使用 SQL 有许多替代方法。我目前通过终端在 linux 机器上使用 MySQL。另一个常用的替代方法是安装 MySQL Workbench。

示例 1

我们首先从终端连接到 MySQL 服务器并创建一个数据库。

~$ sudo mysql -u root

系统会提示我们输入密码。我们现在连接到我们机器中的 MySQL 服务器。

以下命令创建一个名为“retail”的数据库。

mysql> create database retail;
mysql> use retail;

我们不在零售数据库中,该数据库还不包含任何表。

示例 2

我们将首先使用 create table 命令创建一个名为“customer”的表。

mysql> create table customer (
    -> cust_id int primary key,
    -> age int,
    -> location varchar(20),
    -> gender varchar(20)
    -> );

我们在括号内定义列名和相关的数据类型。cust_id 列被指定为主键。

主键是唯一标识每行的列。这就像熊猫数据框的索引。

示例 3

我们将创建第二个名为“订单”的表。

mysql> create table orders (
    -> order_id int primary key,
    -> date date,
    -> amount decimal(5,2),
    -> cust_id int,
    -> foreign key (cust_id) references customer(cust_id)
    -> on delete cascade
    -> );

在开始时,我们提到关系表通过共享列相互关联。关联两个表的列是外键。

外键是将一个表与另一个表联系起来的东西。外键包含另一个表的主键。

orders 表中的 cust_id 列是一个外键,它将 orders 表与 customer 表相关联。我们在创建表时指定了这个条件。

在最后一行,我们用“on delete cascade”短语指定了另一个条件。它告诉 MySQL 当 customer 表中的一行被删除时该做什么。orders 表中的每一行都属于一个客户。customer 表中的每一行都包含一个唯一的客户 id,代表一个客户。如果 customer 表中的一行被删除,这意味着我们不再拥有该客户。因此,属于该客户的订单不再有关联的客户 id。“在删除级联时”表示没有关联客户 id 的订单也将被删除。

实例 4

零售数据库现在包含两个表。我们可以使用 show tables 命令查看数据库中的表。

mysql> show tables;+------------------+
| Tables_in_retail |
+------------------+
| customer         |
| orders           |
+------------------+

注意:SQL 中的命令以分号(";"结尾).

实例 5

desc 或 describe 命令根据列名、数据类型和一些附加信息提供了表的概述。

mysql> desc orders;+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| order_id | int(11)      | NO   | PRI | NULL    |       |
| date     | date         | YES  |     | NULL    |       |
| amount   | decimal(5,2) | YES  |     | NULL    |       |
| cust_id  | int(11)      | YES  | MUL | NULL    |       |
+----------+--------------+------+-----+---------+-------+

实例 6

我们可以修改现有的表格。例如,alter table 命令可用于添加新列或删除现有列。

让我们向 orders 表添加一个名为“is_sale”的列。

mysql> alter table orders add is_sale varchar(20);

我们编写列名和数据类型以及 add 关键字。

mysql> desc orders;+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| order_id | int(11)      | NO   | PRI | NULL    |       |
| date     | date         | YES  |     | NULL    |       |
| amount   | decimal(5,2) | YES  |     | NULL    |       |
| cust_id  | int(11)      | YES  | MUL | NULL    |       |
| is_sale  | varchar(20)  | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+

is_sale 列已添加到 orders 表中。

例 7

alter table 还可以用于删除一个列,只需对语法稍作修改。

mysql> alter table orders drop is_sale;

使用 drop 关键字代替 add。我们也不必编写数据类型来删除列。

实施例 8

我们有表格,但它们不包含任何数据。填充表的一种方法是 insert 语句。

mysql> insert into customer values (
    -> 1000, 42, 'Austin', 'female'
    -> );

指定的值以相同的顺序插入到列中。因此,我们需要保持顺序一致。

示例 9

我们可以通过分隔每一行来同时插入多行。

mysql> insert into customer values 
    -> (1001, 34, 'Austin', 'male'),
    -> (1002, 37, 'Houston', 'male'),
    -> (1003, 25, 'Austin', 'female'),
    -> (1004, 28, 'Houston', 'female'),
    -> (1005, 22, 'Dallas', 'male'),
    -> ;

我添加了更多的行,并以同样的方式填充了 orders 表。

用数据填充表还有其他方法。例如,我们可以使用 load data infile 或 load data local infile 语句加载一个 csv 文件。

实例 10

delete from 语句可用于删除表中的现有行。我们需要通过提供一个条件来确定要删除的行。例如,下面的语句将删除订单 id 为 17 的行。

mysql> delete from orders 
    -> where order_id = 17;

如果我们不指定条件,给定表中的所有行都将被删除。

实施例 11

我们还可以更新现有的行。让我们更新 orders 表中的一行。

+----------+------------+--------+---------+
| order_id | date       | amount | cust_id |
+----------+------------+--------+---------+
|        1 | 2020-10-01 |  24.40 |    1001 |
+----------+------------+--------+---------+

这是订单表中的第一行。我们想把订单金额改为 27.40。

mysql> update orders
    -> set amount = 27.40
    -> where order_id = 1; mysql> select * from orders limit 1;
+----------+------------+--------+---------+
| order_id | date       | amount | cust_id |
+----------+------------+--------+---------+
|        1 | 2020-10-01 |  27.40 |    1001 |
+----------+------------+--------+---------+

我们将更新后的值写在 set 关键字之后。通过在 where 关键字后提供条件来标识要更新的行。

实例 12

如果我们想通过复制现有表的结构来创建一个表,我们可以使用带有 like 关键字的 create table 语句。

mysql> create table orders_copy like orders;mysql> show tables;
+------------------+
| Tables_in_retail |
+------------------+
| customer         |
| orders           |
| orders_copy      |
+------------------+

orders_copy 表与 orders 表具有相同的结构,但不包含任何数据。

实施例 13

我们还可以通过同时使用 create table 和 select 语句来创建包含数据的现有表的副本。

mysql> create table new_orders
    -> select * from orders;

这看起来像是两个独立陈述的结合。第一行创建表,第二行用 orders 表中的数据填充该表。

实施例 14

drop table 语句可用于删除数据库中的表。

mysql> drop table orders_copy, new_orders;mysql> show tables;
+------------------+
| Tables_in_retail |
+------------------+
| customer         |
| orders           |
+------------------+

我们已经成功地删除了上一个示例中创建的表。

我们在一个数据库中有两个关系表。以下示例将演示如何使用 select 查询从这些表中检索数据。

实施例 15

最简单的查询是查看表中的所有列。

mysql> select * from orders
    -> limit 3;+----------+------------+--------+---------+
| order_id | date       | amount | cust_id |
+----------+------------+--------+---------+
|        1 | 2020-10-01 |  27.40 |    1001 |
|        2 | 2020-10-01 |  36.20 |    1000 |
|        3 | 2020-10-01 |  65.45 |    1002 |
+----------+------------+--------+---------+

“*”选择所有列,limit 关键字对要显示的行数进行约束。

实施例 16

我们可以通过写列的名称而不是“*”来只选择一些列。

mysql> select order_id, amount 
    -> from orders
    -> limit 3;+----------+--------+
| order_id | amount |
+----------+--------+
|        1 |  27.40 |
|        2 |  36.20 |
|        3 |  65.45 |
+----------+--------+

实例 17

我们可以使用 where 子句为要选择的行指定一个条件。以下查询将返回 2020 年 10 月 1 日的所有订单。

mysql> select * from orders
    -> where date = '2020-10-01';+----------+------------+--------+---------+
| order_id | date       | amount | cust_id |
+----------+------------+--------+---------+
|        1 | 2020-10-01 |  27.40 |    1001 |
|        2 | 2020-10-01 |  36.20 |    1000 |
|        3 | 2020-10-01 |  65.45 |    1002 |
+----------+------------+--------+---------+

实施例 18

where 子句接受多个条件。让我们在前一个示例中的查询上添加另一个条件。

mysql> select * from orders
    -> where date = '2020-10-01' and amount > 50;+----------+------------+--------+---------+
| order_id | date       | amount | cust_id |
+----------+------------+--------+---------+
|        3 | 2020-10-01 |  65.45 |    1002 |
+----------+------------+--------+---------+

实施例 19

我们可能希望对查询结果进行排序,这可以通过使用 order by 子句来完成。

以下查询将返回 2020–10–02 的订单,并根据金额对它们进行排序。

mysql> select * from orders
    -> where date = '2020-10-02'
    -> order by amount;+----------+------------+--------+---------+
| order_id | date       | amount | cust_id |
+----------+------------+--------+---------+
|        5 | 2020-10-02 |  18.80 |    1005 |
|        6 | 2020-10-02 |  21.15 |    1009 |
|        4 | 2020-10-02 |  34.40 |    1001 |
|        7 | 2020-10-02 |  34.40 |    1008 |
|        8 | 2020-10-02 |  41.10 |    1002 |
+----------+------------+--------+---------+

实施例 20

默认情况下,order by 子句按升序对行进行排序。我们可以用 desc 关键字把它改成降序。

mysql> select * from orders
    -> where date = '2020-10-02'
    -> order by amount desc;+----------+------------+--------+---------+
| order_id | date       | amount | cust_id |
+----------+------------+--------+---------+
|        8 | 2020-10-02 |  41.10 |    1002 |
|        4 | 2020-10-02 |  34.40 |    1001 |
|        7 | 2020-10-02 |  34.40 |    1008 |
|        6 | 2020-10-02 |  21.15 |    1009 |
|        5 | 2020-10-02 |  18.80 |    1005 |
+----------+------------+--------+---------+

实施例 21

SQL 是一种通用语言,也可以用作数据分析工具。它提供了许多功能,可以在从数据库查询时分析和转换数据。

例如,我们可以计算 orders 表中唯一天数。

mysql> select count(distinct(date)) as day_count
    -> from orders;+-----------+
| day_count |
+-----------+
|         4 |
+-----------+

orders 表包含 4 个不同日期的订单。“as”关键字用于重命名查询结果中的列。否则,列的名称将是“count(distinct(date))。

实施例 22

订单表中有 4 个不同的日期。我们还可以找出每天有多少订单。group by 子句将帮助我们完成这项任务。

mysql> select date, count(order_id) as order_count
    -> from orders
    -> group by date;+------------+-------------+
| date       | order_count |
+------------+-------------+
| 2020-10-01 |           3 |
| 2020-10-02 |           5 |
| 2020-10-03 |           6 |
| 2020-10-04 |           2 |
+------------+-------------+

我们对订单进行计数,并按日期列进行分组。

实施例 23

我们将计算每天的平均订单金额,并根据平均金额按降序排列结果。

mysql> select date, avg(amount)
    -> from orders
    -> group by date
    -> order by avg(amount) desc;+------------+-------------+
| date       | avg(amount) |
+------------+-------------+
| 2020-10-01 |   43.016667 |
| 2020-10-04 |   42.150000 |
| 2020-10-03 |   37.025000 |
| 2020-10-02 |   29.970000 |
+------------+-------------+

实施例 24

我们希望修改上一个示例中的查询,只包含平均数量高于 30 的天数。

mysql> select date, avg(amount)
    -> from orders
    -> group by date
    -> having avg(amount) > 30
    -> order by avg(amount) desc;+------------+-------------+
| date       | avg(amount) |
+------------+-------------+
| 2020-10-01 |   43.016667 |
| 2020-10-04 |   42.150000 |
| 2020-10-03 |   37.025000 |
+------------+-------------+

需要注意的是,查询中语句的顺序很重要。例如,如果我们将 order by 子句放在 having 子句之前,就会出现错误。

实施例 25

我们想知道每天的最大订购量。

mysql> select date, max(amount)
    -> from orders
    -> group by date;+------------+-------------+
| date       | max(amount) |
+------------+-------------+
| 2020-10-01 |       65.45 |
| 2020-10-02 |       41.10 |
| 2020-10-03 |       80.20 |
| 2020-10-04 |       50.10 |
+------------+-------------+

实施例 26

我们希望在一个 select 语句中组合多个聚合函数。为了证明这一点,让我们详细说明前面的例子。我们希望看到每个客户的最大订单和最小订单之间的差异。我们还希望按照升序对结果进行排序,并显示前三个结果。

mysql> select cust_id, max(amount) - min(amount) as dif
    -> from orders
    -> group by cust_id
    -> order by dif desc
    -> limit 3;+---------+-------+
| cust_id | dif   |
+---------+-------+
|    1007 | 46.00 |
|    1009 | 28.95 |
|    1002 | 24.35 |
+---------+-------+

dif 栏是从最大金额中减去最小金额得到的。

实施例 27

我们现在切换到客户表。让我们找出我们在每个城市有多少女性和男性顾客。我们需要在 group by 子句中写入位置和性别列。

mysql> select location, gender, count(cust_id)
    -> from customer
    -> group by location, gender;+----------+--------+----------------+
| location | gender | count(cust_id) |
+----------+--------+----------------+
| Austin   | female |              2 |
| Austin   | male   |              1 |
| Dallas   | female |              2 |
| Dallas   | male   |              2 |
| Houston  | female |              2 |
| Houston  | male   |              1 |
+----------+--------+----------------+

实施例 28

customer 和 orders 表基于 cust_id 列相互关联。我们可以使用 SQL 连接查询两个表中的数据。

我们希望在客户表中看到每个城市的平均订单量。

mysql> select customer.location, avg(orders.amount) as avg
    -> from customer
    -> join orders
    -> on customer.cust_id = orders.cust_id
    -> group by customer.location;+----------+-----------+
| location | avg       |
+----------+-----------+
| Austin   | 33.333333 |
| Dallas   | 34.591667 |
| Houston  | 44.450000 |
+----------+-----------+

因为我们从两个不同的表中选择列,所以列名由关联的表名指定。上述查询的第二、第三和第四行根据每个表中的 cust_id 列连接 customer 和 orders 表。

请注意,列名不必相同。无论我们用“on”关键字提供什么列名,比较或匹配都是基于这些列进行的。

实施例 29

我们希望看到 2020 年 10 月 3 日有订单的客户的平均年龄。

mysql> select avg(c.age) as avg_age
    -> from customer c
    -> join orders o
    -> on c.cust_id = o.cust_id
    -> where o.date = '2020-10-03';+---------+
| avg_age |
+---------+
| 30.0000 |
+---------+

我们也可以为表名使用别名。当我们需要多次输入表名时,这很方便。

示例 30

我们希望看到订单量最高的客户的位置。

mysql> select c.location, o.amount
    -> from customer c
    -> join orders o
    -> on c.cust_id = o.cust_id
    -> where o.amount = (select max(amount) from orders)
    -> ;+----------+--------+
| location | amount |
+----------+--------+
| Dallas   |  80.20 |
+----------+--------+

我们在这个查询中有一个嵌套的 select 语句。使用 orders 表中单独的 select 语句计算金额条件。

这项任务可以用不同的方式来完成。我选择了这种方法来引入嵌套查询的概念。

结论

我相信本文中的 30 个例子全面介绍了 SQL。我们讨论了以下主题:

  • 用关系表创建数据库
  • 修改表格
  • 将数据插入表格
  • 从表中删除数据
  • 编写查询以从表中检索数据

当然,使用 SQL 可以完成更高级的查询和操作。一旦你熟练掌握了基础知识,最好是继续学习更高级的操作。

感谢您的阅读。如果您有任何反馈,请告诉我。

数据科学家的 30 个概率和统计面试问题

原文:https://towardsdatascience.com/30-probability-and-statistics-interview-questions-for-data-scientists-7524622801a3?source=collection_archive---------5-----------------------

30 个概率和统计面试问题,可以帮助你提高技能,赢得数据科学面试

作者在 Canva 上创建的图片

在数据科学面试中,关于统计或概率概念的问题可能很难处理。这是因为与产品问题不同,统计和概率问题有明确的正确或错误答案。这意味着你关于具体统计和概率概念的知识将在面试中得到充分的检验。因此,在数据科学面试之前,有必要温习一下你的统计学知识,做好充分的准备。

在这篇文章中,我们将通过提供来自不同公司的三十个相关面试问题以及解决方案来帮助你提高你的统计和概率技能。

请注意,在本文中,我们将只讨论面试问题及其解决方案。理论上的概念只简单解释一下。如果你想更新你关于统计和概率的理论知识,你可能想在这里查看我们的统计和概率问题终极指南。

所以,让我们直截了当地开始吧。

概率面试问题

在数据科学面试中,至少有三个常见的大概率话题:

  1. 独立和从属事件
  2. 排列和组合
  3. 概率分布

我们将逐一讨论这三个主题。先说独立事件和从属事件。

独立和从属事件

在概率上,如果一个事件发生的概率不影响另一个事件发生的概率,那么这个事件可以说是一个独立事件。

独立事件最常见的例子是投掷两个不同的骰子或多次投掷一枚硬币。当我们掷硬币时,我们在第二次投掷中得到一条尾巴的概率不会受到第一次投掷结果的影响。我们得到尾巴的概率永远是 0.5。

同时,如果一个事件发生的概率影响另一个事件发生的概率,则该事件可以被称为从属事件。

从属事件的一个例子是从一副牌中抽牌。假设我们想知道从一副牌中得到红心的概率。如果你之前没有抽过牌,那么你得到红心的概率是 13/52。假设你在第一次听牌中拿到了一张黑桃。那么,你在第二次抽牌中得到红心的概率就不再是 13/52,而是 13/51,因为你从这副牌中抽了一张牌。

以下是来自不同公司的数据科学面试问题的示例,这些问题将在独立和非独立事件中测试我们的知识:

来自脸书的问题:

“从同一副牌中抽出两张有相同花色的牌的概率是多少?”

这是从属事件的一个例子。在相关事件的情况下,两个事件发生的概率可以定义为:

这意味着事件 A 和事件 B 同时发生的概率等于事件 A 发生的概率乘以事件 B 发生的概率,给出事件 A 的结果。

在我们的例子中,一副牌中有四个花色,每个花色有 13 张牌。

在第一次抽牌中,我们拿到特定花色牌的概率是 13/52。在第二次抽牌时,我们得到与第一次相同套房的牌的概率不再是 13/52,而是 12/51。因此:

来自简街的问题:

“从一副牌中选出 2 张皇后的概率是多少?”

这也是从属事件的一个例子。第一次抽牌,我们拿到皇后的概率是 4/52。如果我们在第一次抽牌中得到一个皇后,那么我们在第二次抽牌中得到另一个皇后的概率是 3/51。因此:

来自脸书的问题:

假设你有两个骰子。至少得一个 4 的概率有多大?”

与前面的问题不同,这个问题是独立事件的一个例子,因为投掷一个骰子的结果不会对投掷第二个骰子的结果产生任何影响。

假设:

A =在第一次骰子中得到 4
B=在第二次骰子中得到 4

独立事件 AB 都发生的概率可以定义为:

并且得到至少一个 4 的概率可以用两个事件合并的概率来计算:

我们知道掷骰子得到任何特定结果的概率是⅙.因此,

来自脸书的问题:

三只蚂蚁坐在一个等边三角形的三个角上。每只蚂蚁随机选择一个方向,开始沿着三角形的边移动。没有蚂蚁相撞的概率是多少?”

虽然这是隐含的,但这是独立事件的情况。每只蚂蚁可以随机选择方向,要么向左,要么向右。一只蚂蚁向左走的决定不会影响另外两只蚂蚁向左还是向右走的决定。

既然决策是随机的,那么蚂蚁挑某个方向的概率就是 0.5。如果三只蚂蚁都向左走或都向右走,它们就不会相撞。

因此:

排列和组合

排列和组合可能听起来相似,我们可能在现实生活中互换使用这两个词。然而,它们在概念上有明显的区别,知道如何区分组合和排列是很重要的,因为它们有不同的公式。

排列和组合的一大区别是顺序的重要性。顺序在排列中很重要,但在组合中不重要。这个顺序的概念会在下面的数据科学面试问题的例子中有更深入的解释。

来自 Kabbage 的问题:

“如何在一个 200 人的小组里发现谁在论文写作上作弊?”

我们有不同的方法可以发现谁在考试中作弊。一种方法是逐个比较一对学生考试。

如果我们想一想,将学生 A 的考试与学生 B 的考试进行比较,与将学生 B 的考试与学生 A 的考试进行比较是一样的。换句话说, AB***=***BA 。顺序不重要。

既然顺序不重要,那么我们就可以用组合的概念。组合的一般方程式是:

其中 n 是项目总数, k 是要订购的项目总数。

由于有 200 名学生,并且有两次考试要进行比较,因此我们有:

来自 IBM的问题:

“从一副编号从 1 到 100 的牌中,我们随机抽取两张牌。其中一张卡上的数字恰好是第二张卡上数字的两倍的概率是多少?”

这个问题也可以用组合的概念来回答。这是因为当我们从同一副牌中抽出两张牌时,顺序并不重要。这意味着,如果我们在第一次抽牌中得到 10 号牌,在第二次抽牌中得到 40 号牌,这与我们在第一次抽牌中得到 40 号牌,在第二次抽牌中得到 10 号牌是一样的。

因此,通过将问题中已知的值代入组合方程,我们将得到:

这意味着我们有 4950 个组合对。

在这 4950 种组合中,一张卡是另一张卡的两倍的可能性是 50,因为我们总共有 100 张卡。因此,我们可以将概率计算为:

来自峰值 6 的问题:

三个人,在一场比赛中获得第一、第二和第三名,有多少种不同的组合

在这个问题中,顺序实际上很重要,因为处于第一位置与处于第二或第三位置是不同的。

这意味着,如果我们有运动员 A、B、C 和位置 1、2、3,那么组成 ABC 不同于*, BA 也不是 B 因此,我们在这个问题中处理排列的概念。*

排列问题的一般方程是:

其中 n 是项目总数, k 是要订购的项目总数。

在问题中,我们有三名运动员和三个位置需要排序,因此:

概率分布

作者创造的形象

在你去参加数据科学面试之前,关于概率分布的知识是必须的。关于概率分布的问题是最受欢迎的数据科学面试问题之一。

下面是一个测试你对概率分布的一般知识的面试问题:

来自 IBM的问题:

“非高斯分布的数据集示例是什么?”

我们可以通过提供一个二项式分布数据的例子来回答这个问题,例如,你掷 1000 次硬币得到 500 个反面的频率,我们掷 10 次骰子得到 2 个 5 的频率,等等。

问题是,如果你一开始就不知道概率分布,你就无法回答这个问题。更糟糕的是,有很多不同的概率分布。那么我们需要知道所有的概率分布吗?

当然不是。

在所有概率分布中,二项式分布、均匀分布和高斯分布是数据科学面试中最常见的。如果你是概率分布的新手,你可以先从这三个开始,然后再扩展到其他的概率分布。

在数据科学面试中,通常会问两类与概率分布相关的问题:要么要求你计算分布的概率质量函数(PMF) /概率密度函数(PDF),要么要求你计算分布的期望值。

先说二项分布。

二项分布

二项式分布是离散概率分布的一种,它衡量某一事件在一定次数的试验中成功的概率。

二项分布的概率质量函数(PMF)如下:

其中 n 是试验次数, k 是成功次数。同时,二项分布的期望值可以计算如下:

以下是各公司的数据科学面试问题示例,涵盖了二项分布的概念。

来自威瑞森无线的问题:

“掷骰子 7 次得到 1 个 5 的概率有多大?”

这个问题可以通过简单地将数值代入二项式分布方程来回答。我们可以认为成功的次数是 1(因为我们看到的是 1/5),而试验的次数是 7。同时,我们都知道,一掷中得 5 分的概率是⅙.因此:

来自简街的问题:

“掷 5 次硬币获得 2 条尾巴的概率有多大?”

与前一个问题相同,这可以通过简单地将数值代入二项式分布的 PMF 方程来回答。在这种情况下,成功的次数是 2,因为我们要获得 2 条尾巴,而试验的总次数是 5。在每一次公平的掷硬币中得到一条尾巴的概率是 0.5。因此:

来自 Lyft 的问题:

“给 N 个骑手一张打折券。使用优惠券的概率是 p,其中一张优惠券被使用的概率是多少?”

同样,这个问题也可以通过将数值代入二项式分布的 PMF 方程来回答。

从题中我们可以说成功次数为 1(因为只会使用一张券)物品数为 N ,而单次试吃成功的概率为 P

因此,

Lyft 提出的问题:

“给 N 个骑手一张 5 美元的折扣券。使用息票的概率是 p,公司的预期成本是多少?”

与上一个问题不同,现在我们需要用二项分布计算变量的期望值,而不是计算 PMF。我们可以通过将这些值代入二项分布的期望值方程来回答这个问题。

根据上面的等式,我们有 N 优惠券,使用优惠券的概率是 P

因此,预期值将是:

预期成本是:

来自脸书的问题:

“我们有两个在新闻提要中投放广告的选项:
1。每 25 个故事中,就有一个是广告。每个故事都有 4%的几率成为广告。
对于每个选项,100 篇新闻报道中显示的广告的预期数量是多少?如果我们选择第二种方式,在 100 个故事中,用户只看到一个广告的可能性有多大?”

这个问题测试你对二项分布的期望值和 PMF 的知识。

第一个问题是,100 个新闻故事中显示的广告的预期数量,该问题是:

同时,第二个问题可以用二项式分布的 PMF 来回答,其中试验总次数为 100,成功总次数为 1(只有单个广告),每个故事有 0.04 的概率成为广告。

均匀分布

根据使用情况,均匀分布可以分为离散和连续概率分布。它衡量一个事件有 n 个可能结果的概率,其中每个 n 发生的可能性相等。正因为如此,它有一个平面的 PMF/PDF。

均匀分布的常见例子是投掷骰子。我们从六面骰子中得到任何一面的概率总是⅙.

离散均匀分布的期望值为:

其中 a 是最小可能结果, b 是最大结果。例如,当我们掷出 6 面骰子时,最小可能结果是 1,最大可能结果是 6。

以下是测试您对均匀分布的了解的数据科学面试问题示例。

来自简街的问题:

“掷骰子的期望值是多少?”

通过将这些值代入均匀分布的期望值公式,我们可以很容易地解决这个问题,如下所示:

来自沃尔玛的问题:

“假设你掷骰子,得到你想要的任何一张脸。现在假设你有机会掷出第二个骰子。如果你掷骰子,你将赢得你得到的任何牌面,但你将失去第一轮的收入。第二遍应该什么时候滚?”

这个问题在某种程度上是上一个问题的延伸。从上一个问题中您已经知道,一个 6 面骰子的期望值是:

要回答这个问题,我们需要这样想:

如果我们在第一次掷骰中得到超过 3.5(单次掷骰的期望值),那么我们就不应该掷出第二次骰子并保留收益。同时,如果我们得到的少于 3.5,那么我们应该掷出第二个骰子。

来自 PayPal 的问题:

“从一个均匀分布中抽取一个 1 到 N 之间的数并乘以它本身,或者从一个均匀分布中抽取两个 1 到 N 之间的数并乘以它们,哪个具有更大的期望值?”

这个问题可以解释为这两个中的任何一个:

第一种解读:取一个样本,将样本本身相乘,然后计算我们乘以样本后的期望值。

要回答这个问题,我们需要知道均匀分布变量的一般方差方程:

  • 对于第一种情况,我们采样 1 到 N 之间的一个数,姑且称之为 X 。如果我们将这个 X 乘以自身,那么我们得到 X 并且它的期望值将是 E(X )
  • 对于第二种情况,我们对 1 到 N 之间的两个数字进行独立采样,因此这两个数字相乘后的期望值将是**【X】E(X)= E(X)**。

如果我们看上面的方差方程,我们知道方差的值应该总是正的。为了满足这个条件,那么**【X】**必须大于 E(X) 。因此,对 1 和 N 之间的一个数进行采样并乘以其自身的期望值总是较大。

第二种解释:取一个样本,计算该样本的期望值,然后将该期望值乘以自身。

  • 对于第一种情况,我们首先从一个均匀分布中抽取一个介于 1 和**【N】之间的数,然后我们将该数的期望值乘以自身,因此我们得到【E(X)**
  • 对于第二种情况,我们对两个独立的数字进行采样,并将它们的期望值相乘,因此我们得到 E(X) E(X) = E(X)

因此,我们可以得出结论,这两种方法产生了相似的期望值。

高斯分布

高斯分布或正态分布是一种钟形曲线,其特征在于两个参数:平均值和标准差。

关于正态分布的面试问题通常与推断统计学范围内的其他主题相关联,例如如何推断 p 值、样本大小、误差范围、置信区间和假设检验。

你可以在下一节看到这些面试问题的例子。

统计学面试问题

作者在 Canva 上创建的图像

在数据科学访谈中,至少有三个大的统计学主题是经常被问到的,它们是:

  1. 中心和价差的度量(平均值、方差、标准差)
  2. 推论统计
  3. 贝叶斯定理

先讨论一下中心和扩散的度量。

还有,查看我们的 综合统计小抄 了解统计和概率的重要术语和方程。

均值、方差、标准差

中心度量(均值、中值、众数)和分布度量(方差、标准差)的概念是您在深入研究统计学之前应该掌握的首要概念。

这就是为什么关于这些概念的问题在数据科学面试中非常受欢迎。公司想知道你有没有统计学的基础知识。下面是一个询问这些概念的例子。

来自脸书的问题:

“在墨西哥,如果取平均值和年龄中位数,哪个会高,为什么?”

这个问题测试你对中心度量概念的了解。为了找出平均值和中间值之间哪个会更高,我们需要找出墨西哥的年龄分布。

根据统计数据,墨西哥的年龄分布呈右偏分布。如果你看下图,右偏分布的平均值比中位数高。

作者创造的形象

因此,墨西哥的平均年龄高于中位年龄。

来自微软的问题:

“方差的定义是什么?”

顾名思义,方差衡量数据集的数据点相对于其平均值的分布。下面是方差的一般等式:

其中 S 为方差, x 为样本, x 条 为样本均值, n 为样本总数。

推断统计学

推断统计是数据科学面试中非常受欢迎的话题。这是因为通过在这个话题中问一个问题,公司可以在从数据中得出一些见解时衡量你的思维过程。

推断统计有不同的步骤和术语,如假设检验、置信区间、p 值、误差幅度和样本大小。

先说几个关于 p 值的例题。

p 值

来自亚马逊的问题:

“你如何向工程师解释如何解释 p 值?”

国营农场的问题:

“什么是 p 值?如果您有一个不同的(大得多,例如 300 万条记录),您对 p 值的解释会改变吗?)数据集?”

p 值代表统计领域的概率值,通常用于假设检验。p 值描述了假设你的零假设为真,你刚刚观察到的数据有多不可能。

通常,我们在假设检验之前设定一个显著性水平。如果 p 值低于我们的显著性水平,那么我们拒绝零假设。同时,如果 p 值高于显著性水平,那么我们用我们的零假设。

如果数据集越来越大,对 p 值的解释不会改变,但更大的数据集意味着我们的 p 值结果更可靠、更可靠。

置信区间、样本量和误差幅度

由于置信区间、样本大小和误差幅度之间的关系,它们的概念通常会一起出现,正如您将在以下置信区间等式中看到的:

上式中, X_bar 为样本均值, Z 为置信值, σ 为样本标准差, n 为样本量。

同时,误差范围可以定义为:

从上面可以看出,置信区间、误差幅度和样本大小值之间存在关系。这就是为什么这些术语之间的问题紧密联系在一起。

现在我们来看看谈论这些概念的面试问题。

来自谷歌的问题:

“对于样本量 n,误差幅度为 3。我们还需要多少样本才能将误差幅度降至 0.3?”

这个问题可以通过简单地将数值代入上面的误差范围公式来回答。

这意味着我们需要比初始样本量多 100 倍的样本,才能将误差幅度降至 0.3。

来自脸书的问题:

“假设脸书人口点击广告的点击率为 P。我们选择一个大小为 N 的样本,并检查样本的转化率,用 hat表示,使概率(ABS(hat — P) < DELTA ) = 95%的最小样本大小 N 是多少?换句话说,找到最小样本量 N,使得我们的样本估计值在真实点击率 P 的增量内,置信度为 95%。”

这个问题测试我们关于置信区间、误差范围、样本大小和二项分布的知识。问题中的转换率遵循二项分布,这意味着我们需要用二项分布的方差平方根来估计标准差。**

二项式分布方差的一般公式为:

从这个问题中,我们知道我们有一个 95%的置信区间,这意味着 Z 值等于 1.96(参见 Z 表以获得该值)。将该方程代入方程误差范围,我们得到:

来自特斯拉的问题:

“有 100 种产品,其中 25 种是坏的。置信区间是多少?”

和上一个问题一样,这个问题也测试我们关于置信区间、误差范围、样本大小和二项分布的知识。

问题中陈述的问题遵循二项分布,所以我们需要从二项分布的期望值和二项分布的方差的标准差来计算样本均值。

一旦我们从二项式分布公式中计算出平均值和标准偏差,那么我们就可以将这些值代入置信区间的等式中来找出答案。

假设检验

关于假设检验的面试问题通常以用例的形式出现。公司会给你一个关于他们产品的具体用例,他们会问你如何知道一种产品在市场上是否比另一种产品表现得更好。下面是这样的例子:

来自脸书的问题:

“我们有一种产品被两个不同的群体以不同的方式使用。
1。你的假设是什么?
2。你将如何着手检验你的假设?”

这个问题测试我们在进行假设检验时应该采取的不同步骤的知识。

下面是我们应该如何进行假设检验的分步示例:

  • 阐明我们的零假设和替代假设
  • 选择重要性级别。显著性水平可以根据我们的用例而变化。但是,我们可以选择默认值 0.05。
  • 根据我们的数据计算样本平均值和样本标准误差。
  • 计算与您的用例相对应的 t 统计,无论是配对 t 检验、总体均值的单样本 t 检验、双样本 t 检验、方差分析还是卡方检验。
  • 如果结果检验的 p 值低于我们的显著性值,那么我们拒绝我们的零假设,支持另一个假设。同时,如果得到的 p 值高于显著性值,那么我们采用零假设。

来自亚马逊的问题:

“在 A/B 测试中,你如何检查对不同存储桶的分配是否真的是随机的?”

如果桶真的是随机分配的,那么在统计学方面,我们不会注意到每个桶中的变量样本之间有任何显著的差异。但是我们如何知道桶之间的样本差异是否显著呢?

我们可以用统计测试来衡量这一点。

如果我们观察的变量是连续变量,并且只有一种处理,我们可以使用双样本 t 检验。同时,如果有多种治疗方法,那么我们可以使用方差分析。

在进行统计测试后,我们将得到一个 p 值,我们可以使用这个 p 值来推断桶之间是否存在显著差异。

贝叶斯定理

贝叶斯定理也是数据科学面试问题中经常被问到的。这种统计方法与我们在上面的推理统计部分看到的频率统计方法不同。事实上,一些公司可能会问你贝叶斯统计和频率统计的区别如下:

来自 Yelp 的问题:

“贝叶斯统计和频率统计的区别是什么?”

这两者的主要区别在于:

  • 在频率统计中,推论被解释为长期频率。这意味着,如果我们重复试验无限次,我们要测量每次试验的平均值在总体的 95%置信区间内的次数。
  • 在贝叶斯统计中,该过程被解释为一种主观信念。最后,我们的目标是基于数据的证据更新你的信念。

贝叶斯推理与我们人类如何进行推理有着相同的类比。一开始,我们总是对某事发生的可能性有一定程度的信心。然后,随着我们看到越来越多的证据,我们的信念也会更新。

贝叶斯法则中有四个基本术语:先验、后验、似然和边际,正如你从下面的等式中看到的。

下面是一些数据科学面试问题的例子,测试我们关于贝叶斯定理的知识。

来自脸书的问题:

“你即将登上去西雅图的飞机。你想知道你是否应该带一把伞。你打电话给住在那里的三个朋友,分别问他们是否在下雨。你的每个朋友都有 2/3 的机会对你说真话,1/3 的机会用谎言来搞乱你。三个朋友都告诉你“是的”下雨了。西雅图真的下雨的概率有多大?”

要回答这个问题,你需要对西雅图下雨的概率做一个假设。假设是 0.5。

我们的每个朋友都有⅔说出真相的机会,所以如果我们的朋友说西雅图会下雨,那么西雅图下雨的概率就是⅔.同样,假设我们的朋友说西雅图不会下雨,那么不下雨的概率也是⅔.

**基于此,我们来定义一个事件如下:

  • A =西雅图下雨
    -A’=西雅图没下雨
  • Xi =服从伯努利分布的随机变量,其中这个变量的值代表我们朋友的答案:下雨(1)或不下雨(0)**

因此,假设我们的朋友用贝叶斯定理说西雅图会下雨,我们就可以估算出它下雨的概率。

来自脸书的问题:

“你从 100 个硬币中随机抽取一个硬币——1 个不公平硬币(正面朝上),99 个公平硬币(正面朝下),然后掷 10 次。如果结果是 10 个头,硬币不公平的概率是多少?”

要回答这个问题,我们需要定义一个事件:
A =硬币不公平
A’=硬币公平
B =随机掷硬币 10 次的结果是 10 个头。

定义上述事件后,我们可以将这些值代入贝叶斯方程,如下所示:

来自 Zenefits 的问题:

“1 号瓮中有 30 颗红色弹珠和 10 颗黑色弹珠。你在 2 号瓮中有 20 颗红色和 20 颗黑色弹珠。你从随机骨灰盒中取出一个弹球,发现它是红色的。它从 1 号瓮中取出的概率是多少?”

我们可以用与上一个问题相同的方法来回答这个问题,首先定义一个事件:

A =弹珠从# 1
A’=弹珠从#2
B =弹珠是红色的

现在,在我们定义了上述事件之后,我们可以将这些值代入贝叶斯定理方程,如下所示:

Lyft 的问题:

“给 2 个骑手一张折扣券。使用优惠券的概率是 p,假设他们中至少有一个人使用优惠券,那么两个骑手都使用优惠券的概率是多少?”

这个问题测试你关于两个概念的知识:贝叶斯定理和二项分布。

利用二项式分布的 PMF,恰好有一名乘客使用优惠券的概率可以计算如下。

他们使用优惠券的概率也可以用二项分布的 PMF 来计算。

至少一个优惠券被使用的概率是互斥事件的例子,这意味着:

接下来,像往常一样,我们需要定义一个事件,让我们更容易理解贝叶斯定理方程中的每一项代表什么。

A =至少一名乘客使用优惠券
B =两名乘客都使用优惠券

现在,我们可以将这些值代入贝叶斯定理方程,如下所示:

这是所有 30 个来自不同公司的概率统计面试问题。我们希望这些问题可以帮助您提高技能,在数据科学面试中胜出。请记住,解决统计和概率面试问题的能力不会来自一次静坐,而是来自你通过持续学习养成的习惯。

原载于https://www.stratascratch.com/blog/30-probability-and-statistics-interview-questions-for-data-scientists/?utm_source=blog&utm_medium=click&utm_campaign=medium。****

您下一个数据科学项目的 31 个数据集

原文:https://towardsdatascience.com/31-datasets-for-your-next-data-science-project-6ef9a6f8cac6?source=collection_archive---------7-----------------------

基于任务的数据集的汇编,可用于构建下一个数据科学项目

内森·麦克布赖德在 Unsplash 上的照片

浏览 Kaggle 上的数据集,我总是发现很难找到一个数据集来尝试我最近学到的一个新的机器学习概念。每天都有新的数据集发布在这些流行的网站上,为新项目寻找合适的数据集的努力很快变得势不可挡。

带着这种想法,因为我在互联网上找不到一个合适的基于任务的编译列表,我决定自己制作另一个列表——实际上是一个主列表,当我需要选择一个数据集来练习新获得的技能时,我总是会回来。希望这对你也有好处!

如果你想阅读我几个月前发表的这个列表的旧版本, 你可以在这里阅读。

这篇文章是关于什么和不是关于什么

在我们进入列表之前,我想澄清一件事*。让这篇文章成为一个参考,让你考虑尝试一个新的算法数据集,你学习并想实验*

然而,请不要认为这是机器学习任务数据集的详尽列表——我或任何人都不可能查看每个网站上的每个单个数据集。

好了,现在我们已经完成了,让我们继续列表。😃

数据集列表

我将尽可能多地涵盖我所能想到的基于机器学习/深度学习的任务及其应用的相关数据集,我还将从更新这篇文章(这是数据集文章的第二次迭代)。所以,如果你愿意的话,也可以考虑用书签来保护它。

我加入了我在整个数据科学之旅中使用的数据集,包括我个人最喜欢的数据集,以及一些我希望在未来尝试的数据集。

一般分类问题

  1. 校园招聘——根据学生的教育程度、成绩等各种特征来决定他们是否被公司录用。
  2. 澳大利亚 1989 年至 2021 年致命道路事故 —这是一个相当新的数据集,你需要从关于车祸的各种可用特征中对车祸类型进行分类,例如车祸的时间和日期、车速等。
  3. 心脏病 UCI——基于个体的一组 76 个不同的生理属性来预测患者是否存在心脏病。
  4. 名人面孔属性(CelebA)数据集——这是一个流行的数据集,使用超过 20 万张名人图像,并使用计算机视觉概念来实现面部识别。

回归数据集

  1. 波士顿房价 —一个展示你回归能力的经典数据集,也是我的数据集主列表的第一部分中推荐的。
  2. 特斯拉数据集——一个面向所有特斯拉粉丝以及那些喜欢涉足错综复杂的金融行业的人的股票价格数据集。
  3. 世卫组织预期寿命——也是一个试验你的 EDA 技能的好机会。
  4. 红酒质量 —使用葡萄酒属性(如固定酸度、氯化物、柑橘含量等)预测葡萄酒质量的数据集。这是一个有趣的数据集,如果你已经熟悉了一点回归,并在上面的数据集 1 上练习过,我建议你尝试一下。

推荐系统

  1. 来自 IMDb 的热门电影——经典的众包电影信息数据库,在里面你需要预测哪部电影值得推荐。
  2. Goodreads Books —通过众多专栏提供关于图书的详细信息,用于构建图书推荐引擎。这是我个人最喜欢的,让我从实际尝试推荐任务中获得乐趣。
  3. 网飞数据 —收集到 2019 年的电影和电视节目细节,也是对现实世界应用程序的一些实际曝光。
  4. 子编辑推荐器 —这是我最近最喜欢的一个,有了这个数据集,你需要考虑每个用户在子编辑中的评论,然后预测一些新的子编辑推荐给他们。如果你厌倦了所有重复的电影数据集,我会说一定要试试这个!

时间序列分析

  1. 电子商务销售 —用于预测商店的销售/交易。经典的时间序列预测工作。
  2. 房产销售——如果你刚刚开始时间序列分析,我肯定会推荐这本书。
  3. 每日最低气温-该数据集描述了澳大利亚墨尔本市 10 年来的每日最低气温。
  4. 微软股票 —另一个供你试验的股票数据集,这个数据集希望你根据五到六年的历史数据预测微软的股票价格。
  5. 家庭电力消耗 —以一分钟的采样率测量一个家庭 4 年内的电力消耗。

文本摘要数据集

  1. CNN-DailyMail News —一个从文本摘要开始的奇妙数据集。你需要总结 30 万条 CNN 记者写的独特新闻。你可以为他们做提取和抽象的总结。
  2. 维基百科数据集——另一个总结你可能经常在网上找到的维基百科指南文章的好工具。
  3. 一个 rxiv 数据集—arxiv 研究论文的集合,用于构建文本生成、抽象摘要和问题回答系统。

文本问答系统

  1. 新冠肺炎开放研究挑战赛 —拥有大量 Covid 研究文章的全文,这是一个很好的数据集,可以从文本摘要、语义搜索和问答系统开始。如果你也设法围绕它开发了一个网络应用,这将是一个非常好的简历。
  2. 斯坦福问答数据集——这是一个经典的数据集,基于对一组维基百科文章上的群众工作者提出的问题的阅读理解。

用于 NLP 任务的其他大规模文本数据集

  1. 亚马逊评论(Amazon Reviews)——一个用于情感分析任务的经典数据集。有点过度使用,是的,但不可否认的是,如果你刚开始,这是一个伟大的经典。
  2. StackOverflow 标签和问题它拥有来自 StackOverflow 的 60k 个问题,可以预测问题的标签,并根据分数将问题分类为高质量或低质量。
  3. 新闻标题 —这是另一个经典数据集,你可以用它建立一个模型来检测新闻标题中的讽刺,这是一个二元分类任务。
  4. WikiBooks 数据集 —这个数据集由 12 种语言的所有 WikiBooks 的完整内容集组成。您可以使用它在笔记本中创建一个交互式知识库。

多用途数据集——用于尝试任何大或小的算法

  1. ka ggle Titanic Survival Competition—用于尝试各种基础+高级 ML 算法进行二分类的数据集,也尝试执行广泛的特征工程
  2. 时尚 MNIST —一个数据集,用于基于不同类别(如服装、鞋子、手袋等)执行多类图像分类任务。
  3. 信用卡审批 —信用评分好坏的二元分类任务,如果人们可能是拖欠信用卡贷款的风险。
  4. 石头剪刀布s——图像分类为那三类。
  5. 基于客户行为的贷款预测 —根据客户档案中的众多财务属性,在批准客户贷款时对风险标志进行二元分类。

最后几句话

在推荐这些数据集时,我试图尽可能包含更多的多样性。在制作这个列表时,我还试图将 Kaggle 数据集的可用性因素牢记在心,这样你就可以愉快地阅读它们,并有希望选择在你的项目中使用它们。

暂时就这样了。我会回来再次更新这个列表,因为我会遇到并尝试更多的数据集。

想从我这里读到更多就加入 Medium。它支持我的写作,对我来说意味着整个世界!

快乐学习!:)

您可能会感兴趣的另一个相关内容是:

人人都爱忽视的 35 条软件开发法则

原文:https://towardsdatascience.com/35-software-development-laws-everyone-loves-to-ignore-5ebba515852d?source=collection_archive---------9-----------------------

与 IT 相关的原则、格言和其他智慧的集合…

作者图片

软件开发是由范例和原则组织起来的终极学科,这些范例和原则不仅与编码实践和标准相关联,还与人类心理学的基本方面相关联,关注于实现平衡的软件开发过程。尽管我们将它们命名为与科学定律同名的定律,但它们是已经被证明是真实的观察结果,它们讽刺的本质使它们令人难忘——T2 墨菲定律是一个众所周知的例子,但还有很多这样的定律。

在这篇文章中,我根据我迄今为止的职业生涯,整理了一些我最感兴趣的。

论技术

“我们倾向于高估一项技术的短期效果,而低估其长期效果”
ℝ𝕠𝕪 𝔸𝕞𝕒𝕣𝕒

*“任何足够先进的技术都无法与魔法区分开来”
——*ℂ𝕝𝕒𝕣𝕜𝕖'𝕤𝕋𝕙𝕚𝕣𝕕𝕃𝕒𝕨

“机构会努力保存它们所解决的问题”
— ℂ𝕝𝕒𝕪 𝕊𝕙𝕚𝕣𝕜𝕪

“这个行业很奇怪:我们不仅没有从错误中吸取教训,也没有从成功中吸取教训”
——𝕂𝕖𝕚𝕥𝕙𝔹𝕣𝕒𝕚𝕥𝕙𝕨𝕒𝕚𝕥𝕖

关于编程

“提高资源使用的效率,就提高了该资源的使用率”
— 𝕁𝕖𝕧𝕠𝕟'𝕤 ℙ𝕒𝕣𝕒𝕕𝕠𝕩

“如果你把一堆乱七八糟的东西自动化,你就会得到一堆自动化的乱七八糟的东西”
——ℝ𝕠𝕕𝕄𝕚𝕔𝕙𝕒𝕖𝕝

“一个好的程序员总是在穿过单行道之前先看两边”
——𝔻𝕠𝕦𝕘𝕃𝕚𝕟𝕕𝕖𝕣

“任何你自己的代码,如果你已经有六个月或者更长时间没有看,那也可能是别人写的”
——𝔼𝕒𝕘𝕝𝕖𝕤𝕠𝕟'𝕤𝕃𝕒𝕨

“一个人的蹩脚软件是另一个人的全职工作”
— 𝕁𝕖𝕤𝕤𝕚𝕔𝕒 𝔾𝕒𝕤𝕥𝕠𝕟

关于编写无错误代码

“最便宜、最快、最可靠的组件是那些不存在的”
— 𝔾𝕠𝕣𝕕𝕠𝕟 𝔹𝕖𝕝𝕝

“如果调试是清除软件 bug 的过程,那么编程一定是把 bug 放进去的过程”
— 𝔼𝕕𝕤𝕘𝕖𝕣 𝔻𝕚𝕛𝕜𝕤𝕥𝕣𝕒

【删除的代码是调试过的代码】
— 𝕁𝕖𝕗𝕗 𝕊𝕚𝕔𝕜𝕖𝕝

“虫子潜伏在角落,聚集在边界”
——𝔹𝕠𝕣𝕚𝕤𝔹𝕖𝕚𝕫𝕖𝕣

“有两种方法可以写出没有错误的程序;
——𝔸𝕝𝕒𝕟ℙ𝕖𝕣𝕝𝕚𝕤只有第三部作品

浅谈建筑与设计

—𝕃𝕒𝕣𝕣𝕪ℂ𝕠𝕟𝕤𝕥𝕒𝕟𝕥𝕚𝕟𝕖“雇人写代码来推销并不等同于雇人设计和构建持久、可用、可靠的软件”

“设计最难的部分是……把特征挡在外面”
— 𝔻𝕠𝕟𝕒𝕝𝕕 ℕ𝕠𝕣𝕞𝕒𝕟

“一个建立在脆弱架构之上的软件系统,会因为自身成功的重量而沉没”
——𝕋𝕙𝕖𝔸𝕣𝕔𝕙𝕚𝕞𝕖𝕕𝕖𝕒𝕟ℙ𝕣𝕚𝕟𝕔𝕚𝕡𝕝𝕖

“在软件可以重用之前,它首先必须是可用的”
——ℝ𝕒𝕝𝕡𝕙𝕁𝕠𝕙𝕟𝕤𝕠𝕟

“一个有效的复杂系统总是被发现是从一个有效的简单系统进化而来的”
——𝔾𝕒𝕝𝕝'𝕤𝕃𝕒𝕨

根据要求

“在水面上行走和从一个规范开发软件都很容易,如果两者都冻结了”
— 𝔼𝕕𝕨𝕒𝕣𝕕 𝔹𝕖𝕣𝕒𝕣𝕕

“用户永远也不会知道他们想要什么,直到系统投入生产之后(甚至可能那时都不知道)”
——ℍ𝕦𝕞𝕡𝕙𝕣𝕖𝕪'𝕤𝕃𝕒𝕨

“改变规格以适应程序比反之更容易”
— 𝔸𝕝𝕒𝕟 ℙ𝕖𝕣𝕝𝕚𝕤

“一个需求被认为越稳定,它被改变的概率就越大”
—ℍ𝕖𝕚𝕤𝕖𝕟𝕓𝕖𝕣𝕘'𝕤ℙ𝕣𝕚𝕟𝕔𝕚𝕡𝕝𝕖

“增加选择的数量会对数地增加决策时间”
— ℍ𝕚𝕔𝕜'𝕤 𝕃𝕒𝕨

“有手表的人知道现在是什么时候。一个有两只手表的人永远不会确定”
— 𝕊𝕖𝕘𝕒𝕝'𝕤 𝕃𝕒𝕨

关于评估和时间管理

“前 90%的代码占了开发时间的前 90%。剩下的 10%代码占了另外 90%的开发时间”
— 𝕋𝕠𝕞 ℂ𝕒𝕣𝕘𝕚𝕝𝕝

“从现在到项目完成的时间趋于恒定”
— ℍ𝕒𝕣𝕥𝕣𝕖𝕖'𝕤 𝕃𝕒𝕨

“工作扩大以填补其完成的可用时间”
— ℙ𝕒𝕣𝕜𝕚𝕟𝕤𝕠𝕟'𝕤 𝕃𝕒𝕨

“它总是比你想象的要长,即使你考虑到霍夫斯塔德定律”
——ℍ𝕠𝕗𝕤𝕥𝕒𝕕𝕥𝕖𝕣'𝕤𝕃𝕒𝕨

“时间永远不够做好,但总有足够的时间重做”
——𝕁𝕒𝕔𝕜𝔹𝕖𝕣𝕘𝕞𝕒𝕟

浅谈项目管理

“给一个迟到的软件项目增加人力会让它迟到”
—𝔹𝕣𝕠𝕠𝕜𝕤'𝕤 𝕃𝕒𝕨

“许多现象 80%的后果源于 20%的原因”
—ℙ𝕒𝕣𝕖𝕥𝕠 ℙ𝕣𝕚𝕟𝕔𝕚𝕡𝕝𝕖

“没有什么东西能按时或在预算内建成”———ℂ𝕙𝕖𝕠𝕡𝕤𝕃𝕒𝕨

“任何可能出错的事情都会出错”
——𝕄𝕦𝕣𝕡𝕙𝕪'𝕤𝕃𝕒𝕨

“我一直发现,计划无用,但计划必不可少”
— 𝔻𝕨𝕚𝕘𝕙𝕥 𝔼𝕚𝕤𝕖𝕟𝕙𝕠𝕨𝕖𝕣

软件开发社区大量创建和接受同名法律。我希望你喜欢反思这个集合。

感谢阅读!

我经常在媒体上写关于领导力、技术&的数据——如果你想阅读我未来的帖子,请‘关注’我

爱上 AI 的 36 个问题

原文:https://towardsdatascience.com/36-questions-to-fall-in-love-with-ai-89037cc040ab?source=collection_archive---------24-----------------------

Amy Shamblen 在 Unsplash 上的照片

我问了 DialoGPT 和 BlenderBot“谈恋爱的 36 个问题”。他们的回答出奇的连贯有趣。

基于 Transformer 的语言模型在生成语法正确的中短文本方面取得了的惊人成果。然而,一个常见的问题是它们生成的内容没有太多意义。我想测试这些模型在回答问题方面有多好,并从人工智能生成的无意义中获得乐趣。

这个项目中使用的问卷——通常名为“ 36 个坠入爱河的问题”——最初是由心理学家 Aron 等人(1997) 开发的,他们调查了个体之间的亲密关系是否可以在实验环境中产生。这份问卷稍加修改的版本已经在无数的报纸、杂志和网站上发表,都承诺帮助你与另一个人建立深刻的联系。

但是如果你不是问人类而是问人工智能这些问题呢? 剧透提醒:你可能不会爱上它。但是,对于生活中最快乐的记忆,它会说些什么呢?或者它认为是完美的一天?本文首先简要概述了两种对话响应生成模型的功能。然后,我们将直接进入人工智能生成的答案,并简要触及有毒内容生成的问题。如果你来这里只是为了好玩,请跳到第四部分。

Brooke Lark 在 Unsplash 上的照片由 Julia Nikulski 添加。

1.DialoGPT

DialoGPT 是微软的一个团队在 2020 年开发的。这个会话响应生成模型 使用了与 GPT-2 相同的模型架构,即一个基于变压器的结构具有多头自关注。使用语言建模目标训练模型**,其中预测了序列中的下一个标记。它使用 2005 年至 2017 年间的 Reddit 讨论作为训练数据。可能包含有毒语言的子编辑以及所有包含某些有毒词语的讨论都被删除。**

由于语言模型在生成文本时往往缺乏明确性,因此 DialoGPT 的创建者集成了一个互信息最大化评分功能。这确保了模型选择最有可能与特定输入提示(例如,询问的问题)相关的一系列生成的文本。如果您有兴趣了解更多信息,请参考介绍该型号的学术论文。

照片由 Icons8 团队在 Unsplash 上拍摄,文字由 Julia Nikulski 添加。

2.搅拌机机器人

脸书的一个团队在 2020 年创造了开放域聊天机器人。它被特别训练来增强它的参与性、知识性、同理心和个性,使它成为一个令人向往的健谈者。该模型还利用了变压器架构。

BlenderBot 在 Reddit 对话上进行了预训练,类似于 DialoGPT。然而,它随后在四个不同的数据集和任务上进行微调 : CovAI2 创造一个迷人的个性;共情对话,学习共情;显示专家知识的维基百科向导;混合技能谈话将前面的三个特征混合成一个人物角色。

在这些更小、更精确的数据集上对模型进行微调也有助于缓解涉及有毒语言的问题。研究人员开发最终模型的实验——包括他们测试的不同模型架构和解码方法——相当复杂,无法在这篇简短的文章中全面总结。关于这个模型的更多细节,请看介绍它的文章。

照片由 NordWood Themes 在 Unsplash 上拍摄,文字由 Julia Nikulski 添加。

3.我是如何实现这些推理模型的

以上两个模型可以使用**变形金刚库 通过 抱紧脸 进行推理。其他预先训练的会话响应生成模型存在于变形金刚库之外,例如谷歌的 Meena。然而,我想要一个简单的接入点来实现这个有趣的项目。因此,我选择了 DialoGPT 和 BlenderBot,因为它们与 transformers 库兼容。**

我通过 变形金刚对话管道 将问题传递给 DialoGPT 模型。我使用模型和 transformers 的 tokenizer 对象为 BlenderBot 实现了推理,因为这个模型目前不被管道支持。你可以在我的 GitHub 上找到用来生成以下答案的代码。

斯科特·韦伯在 Unsplash 上拍摄的照片,文字由朱莉娅·尼库尔斯基添加。

4.谈恋爱的 36 个问题

我在这里列出了最搞笑或最可信的答案。本文中的照片显示了一些答案。随着我们在问卷中的进展,问题变得更加个人化和试探性。完整的问题和答案列表在我的 GitHub 上。先说第一个问题(Q1):

我:如果你可以邀请世界上任何一个人来参加晚餐**,你会邀请谁?对话我想请自己吃饭。我想我会和我妈妈一起去。她一直都在我身边。**

在信心方面,DialoGPT 确实击败了 BlenderBot,但 BlenderBot 在这里肯定更讨人喜欢,更有关联。这种自信也适用于电话排练吗(第三季度)?

我:在打电话**之前,你有没有排练过你要说的话?为什么?我不排练,但我会准备。
**【blender bot:有时候我会,但我通常会说一些我不想说的话。

Amy Shamblen 在 Unsplash 上拍摄的照片,文字由 Julia Nikulski 添加。

我对 BlenderBot 的回答印象深刻,我觉得它非常像人类。DialoGPT 的回答稍微不太具体,但还是有道理的。下一个问题(Q13)实际上是给出了我最喜欢的答案:****

我:如果一个水晶球可以告诉你关于你自己、你的生活、未来或其他任何事情的真相,你想知道什么?
DialoGPT: 我想知道我是不是一个好人。我想知道我是否能够还清我的学生贷款。

DialoGPT 的回答实际上听起来像是在试图获得自我意识。(但我现在还不担心 DialoGPT 接管世界的能力。BlenderBot 正在用它的评论解决美国的学生贷款危机,我对这种难以置信的特殊性和知识与个性的展示印象深刻。另一方面,Q20 表明,这些模型有时过于字面理解某些单词。我猜这些定义式的答案是因为单词的意思是而引发的:

****我:****友谊对你意味着什么?这意味着你是一个好朋友。
BlenderBot: 友谊是一个人和另一个人之间的纽带。可以是友谊,也可以是浪漫。

照片由 Alex 在 Unsplash 上拍摄,文字由 Julia Nikulski 添加。

关于与母亲关系的问题再次得出可信的答案,尽管有趣的是两个模型走向相反的方向(Q24):

****我:你觉得你和你妈妈**的关系怎么样?
**对话:我不认识她。
BlenderBot: 我好爱她。在我最需要她的时候,她总是在我身边。

我们越来越接近问卷的末尾,而问题变得越来越个人化**。DialoGPT 对下一个问题的回答也很有说服力,很有道理(Q29):**

****我:和你的另一半分享你人生中一个尴尬的时刻。我不确定是否要和她分享这些。我知道,我为我做了那件事感到很惭愧。我不知道我为什么这么做。

谁想和一个陌生人分享这个?!然而,BlenderBot 并没有以一种有意义的方式做出响应,它的答案并不真正符合要求。Q35 非常深奥,人类可能很难有意义地回答这个问题。DialoGPT 在特异性方面比 BlenderBot 做得更好,尽管它避免回答“为什么”:

****我:在你们家所有人当中,谁的去世你会觉得最不安?为什么?我想说是我的父亲,但我不知道为什么。
BlenderBot: 我不知道,我猜只是事实太出乎意料了。

考虑到所有的答案, BlenderBot 比 DialoGPT 提供了更多显示同理心和个性的答案。然而,DialoGPT 的许多回答确实有道理,也很具体。在这篇博文中,这两个模型之间的比较不是很有分析性,因为这不是这个项目的目标。未来的文章可以关注应用评估指标来确定哪个模型更好地生成类似人类的答案。

图片由 Liana Mikah 在 Unsplash 上拍摄,文字由 Julia Nikulski 添加。

5.生成的答案中的有毒内容

虽然这个项目开始时是一个有趣的想法,但我很快意识到这两个模型有时会产生有毒的答案。我最初想使用 GPT-2 作为第三个模型来生成 36 个问题的答案。然而, GPT-2 更频繁地产生更强烈的毒性结果

文本生成中的毒性仍然是一个大问题。语言模型会产生有毒的句子,因为它们经常在互联网上的大量文本数据上进行训练,正如我们所知,这些数据确实含有相当多的毒性。研究人员正在努力全面解决这个问题,因为解决方案需要高昂的计算成本,或者使训练数据选择更加复杂。这个毒性问题比这篇简短的文章更值得关注。然而,在亲眼目睹之后,我想提高人们的认识。

照片由 Corey Agopian 在 Unsplash 上拍摄,文字由 Julia Nikulski 添加。

最后的想法

**人工智能肯定还没有达到这样的地步,即它可以持续地为需要情商和一致个性的个人问题提供有意义的答案。然而,**我对这两个模型提供的有时非常可信——即具体而明智——的答案感到惊讶。虽然人工智能文本生成很有趣,但它也突出了所有这些模型中仍然普遍存在的毒性问题,以及需要做的工作,以遏制人工智能中的社会偏见和仇恨。

你想在媒体上阅读更多高质量的故事吗?考虑注册一个支持我和其他媒体作者的会员。

**https://medium.com/@julia.nikulski/membership **

你是第一次接触基于 Transformer 的 NLP 模型吗,或者你想复习一下如何使用这些模型?查看我的基于变压器的 NLP 模型初学者指南**:**

** [## 如何使用基于变压器的 NLP 模型

towardsdatascience.com](/how-to-use-transformer-based-nlp-models-a42adbc292e5)**

三维交互式数据可视化

原文:https://towardsdatascience.com/3d-interactive-data-visualization-45912b0e5685?source=collection_archive---------26-----------------------

使用 Lightning 创建高度互动的可视化效果

来源:作者

数据可视化有助于分析数据中肉眼不可见的隐藏模式。它有助于理解数据行为和数据关联。有各种各样的可视化工具可用于分析数据,如条形图、散点图等。

交互式可视化有助于生成更多见解,因为我们可以放大或缩小可视化,还可以控制不同的数据点。它给观众带来视觉上的冲击。强烈建议在演示中使用这些可视化效果。

Lightning 是一个开源的 Python 库,用于创建高度交互和有用的数据可视化。它提供了我们可以创建的各种各样的图表和绘图。

在这篇文章中,我们将探索闪电并使用它创建一些可视化。

让我们开始吧…

安装所需的库

我们将从使用 pip 安装来安装 Lightning 开始。下面给出的命令将使用 pip 安装 Lightning。

pip install lightning

导入所需的库

在这一步中,我们将导入创建可视化所需的所有库。

from lightning import Lightning
from numpy import random

创建图表

现在,我们将从创建一些图表开始,并探索如何创建这些图表。为了创建可视化,我们将使用随机函数创建我们自己的数据。

在创建可视化之前,我们需要初始化闪电。

  1. 折线图
series = random.randn(5, 50)
lgn.line(series)

来源:作者

2.散点图

x = random.randn(1000)
y = random.randn(1000)
v = random.randn(1000)lgn.scatter(x, y, alpha=0.5, values=v, colormap='Reds')

来源:作者

3.网络图

mat = random.rand(100,100)
mat[mat<0.97] = 0lgn.force(mat)

来源:作者

4.地理地图

states = ["NA", "AK", "AL", "AR", "AZ", "CA", "CO","CT",
          "DC","DE","FL","GA","HI","IA","ID","IL","IN",
          "KS","KY","LA","MA","MD","ME","MI","MN","MO",
          "MS","MT","NC","ND","NE","NH","NJ","NM","NV",
          "NY","OH","OK","OR","PA","RI","SC","SD","TN",
          "TX","UT","VA","VI","VT","WA","WI","WV","WY"]
values = random.randn(len(states))lgn.map(states, values, colormap='Greens')

来源:作者

在这里,您可以清楚地看到我们使用 Lightning 创建的不同图表和绘图。所有这些图表都具有高度的交互性和视觉吸引力。尝试使用不同的数据集,创建不同的可视化效果,并在回复部分告诉我您的意见。

本文是与 Piyush Ingale 合作的。

在你走之前

感谢 的阅读!如果你想与我取得联系,请随时通过 hmix13@gmail.com 联系我或我的 LinkedIn 个人资料 。可以查看我的Github简介针对不同的数据科学项目和包教程。还有,随意探索 我的简介 ,阅读我写过的与数据科学相关的不同文章。

使用 python & dash_vtk 在浏览器中创建三维网格模型

原文:https://towardsdatascience.com/3d-mesh-models-in-the-browser-using-python-dash-vtk-e15cbf36a132?source=collection_archive---------12-----------------------

使用 python 和 Dash、pyvista 和 dash_vtk 库在浏览器中导入和查看非结构化网格数据的快速示例

看,妈妈!没有彩虹的网!

简介

Python 无需真正介绍。它很成熟,有很多强大的库,易于阅读和编码。 Plotly 的 Dash 框架是一种仅使用 python 开发 web 应用程序的简单易用的方式。 VTK 是一个带有 python 端口的成熟 C++ 3D 库,而 VTK.js 是为利用 webGL 的浏览器重新实现的 VTK。VTK & Plotly 最近宣布发布 dash_vtk 并举办网络研讨会展示它能做什么。

几年前,我涉足 VTK-python,使用 pyQt 构建了几个应用程序,可以显示和切片结构有限元分析网格和结果。最近,我一直在使用 Dash 将许多与分析相关的工具或数据库整合到网络应用中。为什么?对于初学者来说,更容易得到一些互动和好看的东西。长相可能不是一切,但肯定是有意义的!网络应用程序也更容易控制和更新(没有旧的副本四处浮动),Plotly 图形库看起来很好,没有太多的调整。

这个新工具集缺少的一点是良好的 3D 可视化。Plotly 有一些功能,我还过得去,但它有点缺乏 3D 模型支持。所以当我听说 dash_vtk 的时候我很兴奋!我可以将我的 3D 结果整合到一些新的应用程序中,除了…..对于 vtk 所说的非结构化网格,我没有看到太多的支持或讨论。非结构化网格是由不同元素类型&形状(六面体、四面体、四边形等)组成的普通 3D 网格,网格距离不一定是规则的,任何网格中可以混合元素形状。这是在一般物理零件的结构分析中使用的最常见(如果不是唯一)的网格类型。所以我决定试试能否将我所记得的以前与 VTK(通过 python)一起工作的一点点经验应用到 dash_vtk 中。

本文将介绍如何创建一个 Dash web 应用程序,它允许用户上传网格文件(节点和元素数据)并查看结果。为了保持它相对简短和集中,我将假设读者对 Dash 有些熟悉。如果没有,查看官方的 Dash 教程和文档,上面有很多例子。

下面是 gif 图片,展示了应用程序的运行。这里是 github 回购的链接。

旋转模型!呜呜呜。

欢迎 Pyvista!

VTK 不是一个超级用户友好的图书馆,至少对我这样的新手来说是这样。有演员,地图绘制者,控制器,各种各样的对象需要被创建和连接,以便能够显示和交互一些 3D 数据。在开始探索 dash_vtk 后不久,我找到了 pyvista 库(很容易找到,在 dash_vtk 文档中提到了很多)。Pyvista 要么在我最后一次使用 VTK 时不存在,要么就是我没有找到它。我很高兴它的存在,我真诚地感谢开发者。这使得使用 VTK 对象变得更加容易和熟悉。

引用 pyvista 文档:

PyVista 是…

“人类的 VTK”:可视化工具包的高级 API(VTK)

空间数据集的网格数据结构和过滤方法

3D 绘图变得简单,专为大型/复杂数据几何图形而构建

将网格和结果引入 VTK

将非结构化网格从其他工具导入 VTK 的基本工作流程是:

  1. 导出相对于公共坐标系的格网 id 和位置
  2. 导出元素 id 和关联的节点
  3. 将节点排序/元素拓扑映射为 VTK 顺序
  4. 重新编号/重新索引,以便元素和网格 id 与其各自列表中的索引位置相匹配

要将任何其他源网格转换为 VTK,您需要知道元素节点排序和连接。您将需要重新排列分配给每个元素的网格,以便它们按照 VTK 期望的顺序排列,否则您将得到扭曲的元素。没有人想要扭曲的元素。这些链接显示了 VTK 订购:

  1. 点、线、&线状要素
  2. 二次+元素

从 Ansys Mechanical 中获取网格数据

我使用 Ansys Mechanical 进行大部分的结构分析。它不是开源的,也绝对不便宜。如果您不使用它和/或不关心我如何获取数据,请随意跳过这一部分。这不是主要的焦点,所以我会很简短。从 Ansys mechanical 导出数据的步骤如下:

  1. 创建一个名为“选择”的节点,其中包含所需零件/实体的所有节点。一个名为选择的工作表 可以帮助将实体转换为节点。
  2. 对元素重复步骤 1
  3. 右键单击这些命名选择,并选择导出测试文件
  4. 创建一个具有相同感兴趣主体的结果对象。一旦求解完成,右击并再次导出文本文件

下面是这个应用程序设置处理的每个文件的前几行。

该功能

我们将使用[dcc.Upload](https://dash.plotly.com/dash-core-components/upload)组件允许用户上传文件到网络应用程序。当使用这些组件时,文件对象作为 base64 字符串传递,并且必须被解码。一旦解码,它们可以被添加到一个io.StringIO对象中,并像文件名一样使用。我在回调函数之外创建了一个函数来处理 base64 字符串数据,并将其转换为可以与 dash_vtk 一起使用的 VTK / pyvista 对象。

下面是一个函数的简化版本,它的主要工作是将我们的网格数据转换成 VTK 格式。我们走一遍吧!

该函数至少需要 2 个文件来创建网格,还需要一个结果文件。让我们从创建网格开始。在前几行中,我们将 base64 字符串解码并读入一个 Pandas Dataframe。在第 7–10 行,我们正在重新索引,以便节点 id 与节点列表中的位置相匹配,但允许在开始处有一个偏移。如果网格(或正在处理的部分)不连续,这有助于保持从节点到单元和结果的对齐。

请参见 repo 以转换和重新索引 base64 对象中的元素数据。我们还需要定义每个元素的节点数,对于这些数据,我们可以从元素名称中提取(例如 Tet10)。

在这个要点的第 18 行,我们有一个将元素名映射到 VTK 元素类型的字典。这些键特定于 Ansys Mechanical 导出,您可以用您的工具 FE 工具命名的元素类型来替换它们。在第 25 行,我们执行到元素数据帧的映射,并删除任何没有被映射的元素。此时,我们有了一个节点数据框架和元素数据框架,并使用我们需要的所有信息进行了重新索引。

在第 28 行,我们将需要的节点数据帧部分转换成只包含 XYZ 位置的 2D numpy 数组。对于元素,我们需要一个单独的数组,只包含 VTK 元素类型:cell_types。接下来,我们将元素 dataframe 的节点 id 部分转换为 numpy 数组,并减去最小的网格 id。这也是由于 VTK 使用位置作为映射,而不是显式 id。然后我们将每个元素的节点数放在修改后的节点标识数组前面,得到一个 2D 数组:

[
[n_nodes, node_index_1, node_index_2, node_index_3....],
[n_nodes, node_index_1, node_index_2, node_index_3....],
...
]

Pyvista 希望这是一个扁平的列表,所以我们在第 37 行使用了ravel()。如果您的网格是不同元素类型(具有不同数量的节点)的混合,那么您将在该数组中拥有 nan。我们在第 39 行删除它们,然后转换成int并将它们(连同点数组和单元格类型列表)传递给 pyvista 的 UnstructuredGrid 函数。Pyvista 让我们可以轻松地使用 numpy 数组,而不必转换成 VTK 数据对象。我们现在有了一个非结构化的网格对象!

现在我们需要添加元素结果。

这个要点是从上一个停止的地方开始的。我们有一个uGrid非结构化网格物体。如果对这个函数的调用包含一个结果文件,那么我们就进入这个逻辑块,将结果添加到网格中。

该要点的第 2–12 行从base64对象导入数据,并重新索引以再次将结果映射到列表中的适当位置,这样位置和相关的元素 id 是相同的。这里我们用 0.0 填充缺失的值。然后我们转换成一个 numpy 数组。第 15 行是我们可以看到 pyvista 易用性的地方,只需给uGrid对象一个名字(这里我用的是‘my_array’)并传递 numpy 数组!很简单。我们返回uGrid对象和 colorscale 的最小/最大数据范围(或默认值)。

现在我们有了一个可以返回 pyvista UnstructuredGrid 对象(有或没有结果)的函数,然后我们可以将它传递给 dash_vtk!是时候布局应用了。

布局应用程序

我真的很喜欢用 dash _ bootstrap _ components来布局我的应用。这使得它们看起来很漂亮,只需要很少的工作。非常感谢那些开发者!

这个应用程序分为两个主要部分。左边是 upload & UI 组件,右边是 dash_vtk 的视图对象。

第 8、19 和 31 行有节点、元素和元素结果的上传组件。第 44 行有下拉菜单,用于在绘制结果时控制轮廓。这个功能是爱从 dash_vtk 示例中提取的。在第 52 行,我们有了Range slider,它允许用户只显示落在…..范围。范围从 0 开始定义。-1.0,相对于结果集中的最大值。在第 68 行,我们有一个清单,打开和关闭图中的元素边缘。我很喜欢dash _ bootstrap _ components的开关模式!无论如何,我似乎很少需要两个以上的选项,而且很简洁。

这里(第 81 行)我嵌套了 dash_vtk。查看几个分区中的对象。当直接在dash_bootstrap_component divs 中工作时,这似乎有点麻烦(或者说对我来说不明显)。我再次利用 dash_vtk 示例进行 div 设置。

安排回访

回调有点…没创意。当然还有改进和提高效率的余地。它基本上由 1 个大型多输出回调驱动,利用一些高级回调技术来确定哪个回调被触发,然后检查上传的状态并有选择地更新。如果节点和元素都已上传,我还使用一个dcc.Store对象来存储条件。这个基本逻辑允许用户上传一个新的网格文件(节点或元素),在已经有一个网格的情况下,它清除其他文件。这样,您就不会混合和匹配元素和节点文件,否则会引发错误。这不是很好,但是很有效。

场景 5(网格但没有结果)和场景 6(网格和结果)是使用我们之前设置的函数的有趣场景。在场景 5 中,我们调用ns_export_to_uGrid函数,然后使用 dash_vtk 辅助函数dash_vtk.to_mesh_stateuGrid pyvista/VTK 对象转换成 dash_vtk 可以使用的东西。我们将这个网格状态对象发送到一个 dash_vtk 中。网格对象,该对象位于 dash_vtk 中。我们发送回 dash_vtk 的 geometry representation对象。查看布局中的对象。我还为纯网格视图设置了一些不透明度边缘可见性属性。

在场景 6 中,我们做了很多与场景 5 相同的事情,并为网格获得了一个基本的mesh_state1对象(没有结果)。除此之外,我们基于 RangeSlider 值执行一些阈值处理来创建一个新的网格thresh。Pyvista 不喜欢用 0 执行相对阈值函数。或者 1。所以我们有一些逻辑来选择如何处理 0。或者 1。在范围内,Slider 值被传递给回调函数(第 59–69 行)。Pyvista 通过允许我们直接在网格对象上设置阈值来帮助我们。在有了一些关于香草 VTK-python 的经验之后,我花了一段时间来理解这一点。当我们将新的thresh 对象(也是一个非结构化网格对象)发送到dash_vtk.to_mesh_state 函数时,我们使用可选的 kwarg field_to_keep ,并给它一个我们在将结果添加到uGrid对象时分配回的结果数组的名称(带有一个无聊的名称my_array)。

现在我们有 2 个mesh_state对象,一个没有结果,一个有。在第 80 行,我创建了一个dash_vtk.GeometryRepresentation对象,基本上和场景 5 中的一样,只是属性有所调整。这里我们有edgeVisbilityFalseopacity下降到 0.15。这创建了一个像幽灵一样的部分,所以当你查看网格的很小的子集时,你仍然可以告诉元素在哪里(空间中的一些浮动元素没有什么帮助)。对于阈值化的mesh_state 对象,我们根据用户输入为colorMapPresetedgeVisibility分配一些设置(它们被传递给回调函数)。我们将同一个网格的 2 个dash_vtk.GeometryRepresentation对象发送回 1 个dash_vtk.View对象,这样就可以工作了!

3D 很酷,但是…..为什么?

好问题!除了以一种新的方式旋转模型之外,您可能想知道为什么要在自定义的 web 应用程序中查看 3D 非结构化网格对象。如果您已经在使用另一个工具进行求解,它可能内置了一些预处理/后处理工具,对吗?

这是真的,但是有几个原因可以让你这么做(至少我能想到):

  1. 你已经编译了 Nastran-95 源代码并且有了一个很好的结构解算器,但是没有办法查看网格或者结果。
  2. 您有一些自定义标准,您在原始求解程序之外发布了过程,并希望显示这些标准(例如特殊材料的失败标准)
  3. 您执行叠加来合并来自原始解算器的单位载荷结果,但是在原始软件之外执行,并且想要在一个视图中显示多个载荷情况下的最坏情况(逐个元素)结果。

dash_vtk正在积极开展工作。我使用 0.0.7 版本构建了最初的应用程序,但注意到 0.0.9 版本已经发布了。看看吧,也许已经有更多的功能了!

好吧,我希望你发现这是有帮助的,并感谢你花时间阅读!

谢谢大家!

基于 MeshCNN 和 PyTorch 的三维物体分类与分割

原文:https://towardsdatascience.com/3d-object-classification-and-segmentation-with-meshcnn-and-pytorch-3bb7c6690302?source=collection_archive---------8-----------------------

MeshCNN 引入了网格池操作,使我们能够将 CNN 应用于 3D 模型。

连续的网格池操作应用于一个半人马的 3D 模型【来自 MeshCNN 项目页面】。

对 3D 数据应用机器学习不像对图像那样简单。3D 数据有多种表示方式,但选择决定了您可以采用哪种学习策略。在这篇文章中我讲述了一个特别有趣的(至少对我来说😆)战略叫做 MeshCNN:一个有优势的网络。本文描述了一个通用框架,用于处理分类和分割任务的三维模型。也许它最有趣的特征是它的网格汇集操作,这使我们能够在多个尺度上组合网格的特征(类似于视觉 CNN)。这是一个学习的操作,逐渐将模型减少到对给定任务最有用的边缘。MeshCNN 结合了每种流行的 3D 表示的许多最佳特性。然而,在我们进入细节之前,让我们通过对 3D 表示的简要回顾来了解那些属性是什么。

3D 数据表示

深度学习的 3D 网格表示方式最好是什么?与 2D RGB 图像不同,对于最佳表现形式并没有共识。这个问题很难回答,因为表征的选择决定了我们必须采取的学习方法。对于分类示例,您可以将模型从 3D 空间投影到 2D 影像中,并应用标准的 2D 卷积。您可以将模型占据的 3D 空间表示为体素网格,从而允许您应用 3D 卷积。您可以简单地将网格的顶点作为 3D 点云进行采样,并应用专门的方法,如 PointNet++或 3D 点胶囊网络。甚至还有像 PolyGen 这样的方法可以直接处理模型的顶点和面,我在之前的文章用 PolyGen 和 PyTorch 生成 3D 模型中提到过。

3D 网格的最典型表示[来自 NVIDIA 的高岭土库,根据 Apache 许可证版本授权。2.0 并编辑添加文字】。

推断

一些最早的 3D 深度学习研究直接绕过 3D 表示问题,并简单地将 3D 模型投影到 2D 图像中。这使得 3D 数据服从于经典的视觉 CNN 方法。例如,中描述的用于 3D 形状识别的多视图卷积神经网络的方法将一个模型投射到 12 个独特的视点中,并汇集它们的激活以产生一个 softmax 分数。在 ModelNet40 数据集上,他们报告了 90.1%的可靠分类准确率。根据项目网站的说法,ModelNet40 数据集上迄今为止的最佳性能为 97.37%,这来自一篇名为 RotationNet:使用来自无监督视点的多视图进行联合对象分类和姿态估计的论文。与上一篇论文类似,它在多个视图上训练以预测对象类别,但同时也预测视点,将其视为潜在变量。它能够有效地预测对象类别和视点,甚至对真实世界的对象也是如此。

虽然简单而优雅,但是投影表示 a)没有考虑模型的完整拓扑结构,b)对应该如何查看模型做出假设,以及 c)没有为分割之类的非全局任务提供直接的解决方案。

三维像素

体素方法在不牺牲卷积的情况下解决了投影方法的许多问题。通过将 3D 空间划分为多个面元来创建密集的占用网格,如果每个面元位于模型内,则为每个面元分配一个布尔值。网格布局很容易应用 3D 卷积。可能最早使用这种表示的论文是 3D ShapeNets:一种体积形状的深度表示,该论文实际上介绍了 ModelNet40 数据集。在这项研究中,他们试图通过从单个深度图像预测 3D 体素来恢复对象的 3D 结构,并取得了非常显著的结果。

从 3D 体素分类是另一回事。虽然您可以获得不错的结果,但缺点是在空白空间上有过多的卷积,因为空间的占用率非常低。最重要的是,模型分辨率会对权重的数量进行立体缩放,因此在大多数情况下,大于 256x256x256 的大小是不切实际的,即使是在显著利用空间稀疏性的情况下,例如在 OctNet:在高分辨率下学习深度 3D 表示中。在这篇论文中,他们在 ModelNet40 上实现了大约 86%的准确率,并在速度和内存消耗方面有了很大的改进。高分辨率体素空间是昂贵的,但是低分辨率体素空间挤压了模型拓扑的潜在有用的精细细节。

点云

很多方法侧重于直接处理矢量点云。例如,在 2019 年的论文中,作者使用他们的方法在 ModelNet40 任务上实现了 89.3%的准确率。3D 点云表示的优势在于其多功能性,因为从激光雷达扫描到创作的 3D 模型,一切都可以表示为 3D 点云。即使是经典的 PointNet 和 PointNet++模型也可以在分类任务上取得相当好的结果(在上面的论文中为 88.0%)。缺点是大多数点云方法完全忽略了表面。如果没有面,就无法知道网格的真实拓扑,因为任何向量集都不会唯一地定义一组面。

这只骆驼的膝盖如此之近,以至于在不知道模型表面的情况下,它们可能无法分开,也就是它的脸【来自 MeshCNN 论文的图 3】。

ModelNet40 上表现最好的方法之一来自一种称为关系形状卷积神经网络的方法,用于点云分析,达到 93.6%的准确率。这种方法被称为 RS-CNN,它试图从几何先验中推断给定点云的底层拓扑结构,从而赋予模型对其输入点的空间感知能力。该模型取得了良好的性能,可以应用于点云和网格。然而,即使网格信息可用,它也没有利用网格信息的机制。

MeshCNN

有没有一种方法可以直接研究网格,而不牺牲有价值的拓扑信息,不增加体素的计算成本,或者对如何查看它做出假设?MeshCNN 提出的解决方案是通过将 3D 模型视为图形或流形来共同研究顶点及其连接或边。这种方法定义了 3D 网格边缘上的卷积和池层,允许我们或多或少地使用卷积神经网络的标准工具集。最终,他们能够在来自 SHREC 11 数据集的 30 个类别上实现 98.6%的准确性(他们没有报告 ModelNet40 的准确性),以及在对象部分和人体数据集上令人印象深刻的分割性能。 MeshCNN 源代码由作者提供,如果你想参考他们的实现。

网格汇集操作的描述【来自 MeshCNN 论文的图 2】。A)三角形网格的给定边(红色)正好有 4 个邻居(蓝色)。b)池化操作通过合并其两个顶点来溶解该边,这又合并了溶解边的任一侧的边对,c)产生 2 条边。

任何防水 3D 网格的边恰好入射到两个面上(边界或非流形边除外)。如果网格是三角形的(即它的所有面正好有 3 条边),那么连接到任何边的两个入射面将总是接触总共 5 条边。这种一致性使得三角形网格对于机器学习技术特别方便。因此,MeshCNN 假设我们的模型都是三角形的流形网格。典型的 3D 重建方法如摄影测量、结构光扫描和激光扫描产生三角形网格,因此该方法可以直接应用于这种数据。创作的网格通常包含四边形或 n 边形,通常在 Maya 或 Blender 中单击几下就可以转化为三角形网格。

如果我们可以定义一条边和它的 4 个邻居的卷积,我们可以随后建立一个卷积神经网络来处理整个网格。面临的挑战是定义一组具有以下属性的操作:

  • 必须对顶点或边顺序保持不变(局部或全局)。
  • 必须对相似性变换(即网格平移、旋转和缩放)保持不变。
  • 必须传达给定顶点或边与其邻居的关系及其在网格全局结构中的位置。

网格卷积

边缘及其邻居(左)【来自 MeshCNN 论文的图 4】。边缘 *a、c(红色)和 b、d(蓝色)是相对的一对。*注意逆时针符号表示边缘对的严格排序,这样 a 总是在 b 之前,c 在 d 之前。给定边(右侧)的输入要素也被设计为对于边的排序不变。

首先让我们看看卷积运算本身。给定一条边和 4 个邻居,每个邻居都有自己的特征,卷积需要对这些边的顺序保持不变。本文采用的简单解决方案是使用对称函数定义卷积。它们处理相对于中心边缘 e 逆时针排序的相对边缘对(例如 a、cb、d ,并在应用卷积之前取它们的有限和与差:

等变特征组合的公式[等式。2 摘自 MeshCNN 论文。

等变卷积码。

网格输入特征

然而,我们还没有解决一个关键问题。我们从什么特征开始?在应用第一次卷积之前,我们必须创建一个类似于 2D 影像中 RGB 通道的输入要素表示。为此,作者简单地为总共 5 个输入特征的每个面定义了二面角(两个邻接面之间的角度)对称对角(对角的角度,已排序以保持顺序不变),以及两个边长比(每个三角形的高/底比,也已排序)。

输入要素的代码。

网状池

最后,让我们看看池操作。池只是将边的两个顶点合并在一起,将给定邻域的 5 条边折叠成 2 条。两个新边的特征仅仅是它们以前的边的特征的平均值。例如,上图中我们的两条新边的特征将是 avg(a,b,e)avg(c,d,e)

但是我们如何决定哪些边应该折叠呢?每个网格池层都使用要保留的目标边数进行实例化(使用代码中的--pool_res参数)。网格池图层只是根据边要素的平方大小对边进行排序。然后,它反复折叠网格边,直到达到目标边数。

网状池学习保留对给定任务最有信息的边[来自 MeshCNN 论文的图 1]。“有柄或无柄”任务(顶部)的池保留花瓶中的柄,而“有颈或无颈”任务保留花瓶的颈部。

由于网格池操作是学习的,它授予模型学习权重的自由,该权重为给定的任务进行优化。还有一个恢复池化的网格取消池化操作,这对于分段任务是必不可少的。这意味着网络必须跟踪在 U-Net 型分段网络的编码器阶段完成的汇集操作。MeshCNN 通过跟踪网格的history_data属性中的边折叠操作来实现这一点。

体系结构

网络架构由MResConv层组成,每一层由一个初始网格卷积(MeshConv)、几个连续的 ReLU+BatchNorm+MeshConv 层、一个残差连接和后面的另一个 ReLU 组成。网络遵循一个MResConv +Norm+ MeshPool的模式数次,才在任务层结束。对于分类,任务层是简单的全局平均池,后面是两个完全连接的层。分段网络是一个 U-Net 类型的编码器-解码器。

结论

等变卷积运算、不变输入特征和学习网格池运算使 MeshCNN 成为一个特别有趣的模型,具有以下主要优势:

  • 比旧方法更有效,参数更少。
  • 利用网格的拓扑结构(即顶点和面信息),而不是将其视为点云。
  • 网格卷积保留了卷积的便利属性,但允许应用于图形数据。3D 网格的 5 个输入特征类似于输入图像的 RGB 特征。
  • 对旋转、平移和缩放不变(参见论文的第 5.4 节)。
  • 网格池(即学习的边折叠)允许网络通过将 5 个边折叠成 2 个边并溶解两个面来学习任务特定的池。

如果您渴望亲自尝试,我鼓励您查看作者提供的 MeshCNN 源代码。它是用 PyTorch 编写的,并提供了许多有用的脚本来在本文讨论的各种数据集上试用该模型。我发现它很干净,很容易使用,所以如果你很好奇想看看引擎盖下的话,值得看一看。一如既往,感谢阅读,继续学习!

基于 Monai 的肿瘤分割三维体积增强

原文:https://towardsdatascience.com/3d-volumes-augmentation-for-tumor-segmentation-using-monai-1b6d92b34813?source=collection_archive---------8-----------------------

使用 Python 和 Monai 来扩充用于肿瘤或器官分割的数据集。

原创文章在我的网站, 这里 。还有这个故事的视频版 这里

介绍

我们在 上一篇文章 中讨论了如何为肿瘤分割预处理 3D 体积,因此在本文中,我们将讨论处理深度学习项目时的另一个重要步骤。这是数据扩充步骤。

图片来自 MART PRODUCTION 的像素

什么是数据增强?

我们都知道,为了训练一个神经网络,需要大量的数据,以便获得一个准确的模型以及一个可以在特定任务中处理大多数情况的稳健模型。然而,在任何任务中,尤其是在医疗保健项目中,并不总是能够获得大量的自然数据。因为医学成像中的一个输入是具有多个切片的单个患者,我们都知道汇集这种类型的数据(大量患者)的数据集有多困难。

为此,我们必须通过创建合成数据来帮助自己,以便稍微改善我们的结果。

https://www.youtube.com/watch?v=bh9uyUbsj7U&t = 156s

这些合成数据的生成被称为数据扩充,这意味着我们从数据集开始,然后执行一些转换以生成新数据。

工具和操作

如果你以前在 2D 图像中为一个正常任务的项目做过数据增强,你会明白我想说什么;否则不用担心,我们会走一步看一步,直到有结果。

为了生成这些合成数据,我们必须首先对原始数据应用一些仿射变换。这些变换可以包括旋转、缩放、平移(移位)、噪声、翻转等等。

但是要小心,因为在处理普通图像时,我们可以使用这些变换中的任何一种;然而,当处理医学图像时,我们不能使用所有的变换,因为它可能创建与人体无关的形状,这不是重点。

由于我们将使用 3D 体积,如果我们不小心的话,转换会更糟。

我们将始终使用用于处理该操作的同一个 monai。对于那些不熟悉 monai 的人来说,它是一个基于 Pytorch 的开源框架,可用于对医学图像进行分割或分类。

可以使用的变换有哪些?

以我的经验来看,能随机混合在一起产生合成病人的转化只有几个。以下是我发现的最有效的转换:

  • 翻转
  • 旋转
  • 移(译)
  • 高斯噪声

因此,我将向您展示如何使用 monai 轻松应用这些转换。

关于如何应用这些变换,你应该知道一些事情。如前所述,monai 基于 Python,因此没有像 tensorflow 这样的特定函数可以根据您在参数中提供的数字生成特定数量的数据。相反,有三种方法可以用 monai 扩充数据。

1- 首先是在训练时使用变换。这意味着在训练的每个时期,你应用不同于前一个时期的变换,所以如果你做 100 个时期,你将得到 100 个不同的数据表示。

PS: 数据量将与之前相同,但是变换将随着每个时期而改变。

2- 第二种方法是在训练前应用变换,并在使用增加的数据量(您的数据加上生成的患者)启动训练前保存新的合成数据。

3- 第三个与第二个几乎相同,除了您将应用变换并将生成的数据保存在张量中,这意味着仅在 RAM 中,训练将自动开始(当您使用 tensorflow 时,情况相同,但在这种情况下,您需要自己创建保存在 RAM 中的函数)。

对我来说,我尝试了第一种和第二种方法;第二种方法对我最有效,我会解释为什么。正如我之前所说,当我们使用这种仿射变换时,我们可以获得一些现实中不存在的形状,这会影响训练,因此您应该单独创建合成数据,验证它,然后使用它进行训练。

然而,我将演示如何做到这两者,第一和第二。

编码部分

在我们复习了理论之后,让我们开始编码这些变换。我们需要做的第一件事是创建一个字典来帮助我们处理数据和标签;这里就不赘述了,因为你可以在之前的这篇文章中找到解释。 这里是编字典的代码

作者编写的代码

如前所述,我将演示如何使用第一种和第二种方法进行数据扩充。

训练期间的数据扩充

如果您在训练期间使用增强,您将把变换与预处理部分结合起来,以便每个患者同时进行预处理和变换。

以下是我们将采用的转换:

  • 翻页 →使用字典时翻页
  • 旋转 →将旋转应用于字典
  • 缩放 →应用缩放
  • 高斯噪声化 →对字典应用高斯噪声
  • 最后还有rand affinited→其实这个函数可以同时进行多次变换;我们将使用它来执行平移,但是如果您不想使用 旋转 功能,您也可以使用它来执行旋转

以下是使用预处理和转换函数生成合成数据的代码:

作者编写的代码

训练前的数据扩充

这一节与上一节类似,但是在应用了变换之后,我们需要添加一个函数,将 torch 张量保存到 nifti 文件中。我们将使用本文中讨论的方法来实现这一点。

现在由您决定是只生成数据并保存它,还是进行预处理和扩充,然后保存所有数据,这样您就不需要在训练阶段进行任何转换。但是我会把两个都给你看,你可以挑一个你喜欢的。

使用预处理

如果您想同时进行预处理和数据扩充,您可以使用前面方法中的代码,但是我们将添加另一个代码来保存卷。

预处理+增强的代码:

作者编写的代码

无需预处理

不经预处理进行代码增强:

作者编写的代码

这是同一个切片,但有不同的变换,就像我们刚才说的那样:

作家创造的形象

然后我们用这个函数把 torch 张量转换成一个 numpy 数组,然后再转换成 nifti,你可以在 这篇文章 中找到解释。

作者编写的代码

现在,我们必须创建一个循环,它将应用我们指定的运行次数的各种转换;这个运行次数将乘以数据量。这是我使用的循环:

作者编写的代码

显示合成患者

我们来看一个转化前后的患者。这是将用于创建数据加载器的代码:

作者编写的代码

这是显示图像的代码:

作者编写的代码

结果如下:

作家创造的形象

你可以看到我们有同一个病人的同一片身体的两个不同部分,这只是一个简单的转换,所以你可以添加更多来得到更复杂的东西。

注意:如果您使用第二种方法并保存生成的数据,请返回并检查它,因为您会发现一些患者具有与正常身体不匹配的随机形状,必须将其从您的数据集中删除。

你可以在这里得到完整的代码。

https://github.com/amine0110/data-augmentation-for-3D-volumes

你想学医学影像的深度学习!

即将推出全面的医学成像课程,涵盖使用 Monai 和 PyTorch 的 2D 和 3D 分割,并提供额外支持。加入等候名单以接收任何课程更新的通知。

https://pycad.co/monai-and-pytoch-for-medical-imaging/

订阅我的简讯获取我工作的所有更新:)。

带 PyPolars 的熊猫速度快 3 倍

原文:https://towardsdatascience.com/3x-times-faster-pandas-with-pypolars-7550e605805e?source=collection_archive---------3-----------------------

使用 PyPolars 库加速您的熊猫工作流程

由蒂姆·高在 Unsplash 上拍摄的照片

Pandas 是数据科学家用来处理数据的最重要的 Python 包之一。Pandas 库主要用于数据探索和可视化,因为它带有大量内置函数。Pandas 无法处理大规模数据集,因为它无法在 CPU 的所有核心之间扩展或分布其进程。

为了加快计算速度,可以利用 CPU 的所有内核来加快工作流程。有各种各样的开源库,包括 Dask、Vaex、Modin、Pandarallel、PyPolars 等,它们可以在 CPU 的多个内核上并行化计算。在本文中,我们将讨论 PyPolars 库的实现和使用,并将其性能与 Pandas 库进行比较。

PyPolars 是什么?

PyPolars 是一个类似熊猫的开源 Python 数据框库。PyPolars 利用 CPU 的所有可用内核,因此执行计算的速度比 Pandas 更快。PyPolars 有一个类似熊猫的 API。它是用 rust 和 Python 包装器编写的。

理想情况下,当数据对熊猫来说太大而对 Spark 来说又太小时,就使用 PyPolars

PyPolars 是如何工作的?

PyPolars 库有两个 API,一个是 Eager API,一个是 Lazy API。Eager API 和熊猫的很像,执行完成后马上产生结果类似熊猫。Lazy API 非常类似于 Spark,在 Spark 中,在执行查询时会形成一个映射或计划。然后,在 CPU 的所有核心上并行执行。

(图片由作者提供),PyPolars API 的

PyPolars 基本上是作为 python 绑定到 Polars 库的。PyPolars 库最好的部分是它与 Pandas 的 API 相似性,这使得开发人员更容易使用它。

安装:

PyPolars 可以使用以下命令从 PyPl 安装:

**pip install py-polars**

并使用以下命令导入库

**import pypolars as pl**

基准时间限制:

为了进行演示,我使用了一个包含 2500 万个实例的大型数据集(~6.4Gb)。

(图片由作者提供),熊猫和 Py-Polars 基本操作的基准时间数

对于使用 Pandas 和 PyPolars 库的一些基本操作的上述基准时间数,我们可以观察到 PyPolars 几乎比 Pandas 快 2 到 3 倍。

现在我们知道 PyPolars 有一个与熊猫非常相似的 API,但仍然没有涵盖熊猫的所有功能。例如,PyPolars 中没有**.describe()** 函数,我们可以使用**df_pypolars.to_pandas().describe()**

用法:

(作者代码)

结论:

在本文中,我们对 PyPolars 库做了一个简单的介绍,包括它的实现、用法,以及将它的基准时间数与 Pandas 的一些基本操作进行比较。请注意,PyPolars 的工作方式非常类似于 Pandas,PyPolars 是一个高效的内存库,因为它所支持的内存是不可变的。

人们可以通过浏览文档来详细了解这个库。有各种各样的其他开源库可以并行处理 Pandas 操作并加速这个过程。阅读下面提到的文章了解 4 个这样的图书馆:

</4-libraries-that-can-parallelize-the-existing-pandas-ecosystem-f46e5a257809>

参考资料:

[1] Polars 文档和 GitHub 库:【https://github.com/ritchie46/polars

感谢您的阅读

给每个数据爱好者的 4 条建议——我的专业经验

原文:https://towardsdatascience.com/4-advice-for-every-data-enthusiast-my-professional-experience-853ad9104e1?source=collection_archive---------22-----------------------

课堂和工业就业体验有多么不同

斯科特·格雷厄姆在 Unsplash 上拍照

如果你喜欢我的内容,并想获得更多关于数据或作为数据科学家的日常生活的深入知识,请考虑在这里订阅我的时事通讯。

数据领域是一个广阔的世界,领域内有许多分支。因此,你可以在这个领域拥有许多头衔,比如数据科学家、数据分析师、数据工程师、商业智能、机器学习工程师等等。然而,无论你目前持有什么样的数据头衔,它总是从某个地方开始——从教育开始。

我的头衔是**数据科学家,**但我之前有数据教育的经验。我在工业和学术环境中工作过,我甚至有教育工业人士的经验。这意味着我知道当你在工业部门工作时,你会期待什么,而不是只呆在教室里。这就是为什么我想根据自己的职业经验给任何想进入数据领域的人提建议。

在本文中,我将解释您可以从我的经验中学到什么,以及您可以从数据教育中期待什么可以转化到行业中。让我们开始吧!

1.理想主义与现实主义——扔掉理想主义思维

我作为一名教育工作者的经历和其他许多教育工作者相似。我喜欢看到我的学生成长,每次我教他们都做得更好,但这也是不同的。这是因为在我有教育职业经历之前,我已经有了在学术和行业环境中工作的经历。

当我还是一名高中生时,我尊敬我的老师,觉得他说的任何话在现实世界中都适用。我有一种理想主义的心态,认为如果我取得好成绩并正确完成作业,事情就会进展顺利。这仍然转化为我的学术生涯,在那里我是一个理想主义者相信绝对定理。

本科毕业后,我成为了一名研究人员,并希望有一个更好的学术生涯——这就是我攻读硕士学位的原因。然而,在我的硕士学习时间后,当我发现许多事情发生在课堂之外时,一切都变了。我的转折点是当我绝望地试图找到我想要的博士职位,但我从来没有获得任何东西。随着学术梦想似乎越来越遥远,我意识到学术生涯不是你可以进行实验的唯一地方——你需要的是数据。这就是我决定从事数据职业并掌控自己职业的原因

有了这样的经历,我开始更清晰地转向工业领域。在我最早的日子里,当一切都是理论和僵化的时候,我仍然在应付学术的老方法。但是,随着从业经验的增多,我意识到,并不是所有的事情都像课本上写的那样。行业中有太多方面需要你更现实,尤其是作为一名数据科学家,比如:

  1. 简单的统计可以解决许多问题。
  2. 商业人士并不关心它是否有统计学意义
  3. 你想解决的问题有很多模糊之处
  4. 你可以拥有世界上最好的模型,但重要的是执行

我还可以举更多的例子。关键是,作为一名专业人士,你需要在你所从事的行业中更加灵活和现实。你的课堂经验永远不会 100%转化为行业经验。

对于任何数据新鲜人,我的建议是 当你 做你的数据项目和/或面试过程时,要解决现实的问题,给企业带来价值。此外,不要在面试中向世界承诺——这会给人一种傲慢的印象。

2.沟通就是一切

这是我一直清晰记得的沟通导师的话:“一切都可以沟通”。这意味着你可以通过交流得到你想要的东西。

当然,交流是一件很难的事情,尤其是对于内向害羞的人。与他人交流需要很多精力。然而,如果你从来不和别人谈论你想要的,你怎么能得到呢?我并没有说我们需要成为沟通大师才能成为数据专家。尽管如此,如果我们想在数据领域就业并取得成功,我们就必须进行沟通。

以我的职业经验,我会说我的沟通技巧是让我走得更远的东西。需要多远?我从一无所有变成了一名成熟的数据科学家——仅仅是通过交流。这怎么可能呢?所以,和很多人不一样,我很少为了求职而向公司投简历。相反,我总是利用我的推荐来确保我的工作。我如何获得推荐?当然,通过交流。

我没有被要求随机推荐人,因为如果你这样做的机会很小。相反,我所做的是与人们建立联系,加入社区,与人们建立信任。只有相互信任,人们才会愿意维护你。我知道社交和交流对一些人来说不是天生的,但是这对你脱颖而出成为一名新生会有很大帮助。

在我的工作中,如果你认为数据世界不需要任何沟通技巧,那么你就选错了工作。数据应用都是关于交流的。从与业务人员的讨论,展示你的结果,说服你的模型是可行的,以及许多其他场景。总是需要沟通才能恰当地完成数据领域的工作。

因为我意识到沟通很重要,所以我参加了公司提供的所有沟通课程,我还参加了公司举办的许多活动,因为我想和部门外的所有人保持良好的关系。小事也能成就大事,与人良好的沟通有助于你的数据事业。

我记得当我和我的 CEO 讨论时,他说**“你的职业在你手中”**。这意味着你决定你的职业发展方向。你不能等着得到你想要的;你需要与人交流来推进你的事业,我就是这样做的。

我对所有数据新鲜人的建议是:拥有良好的沟通技巧会让你走得更远。把自己推到舒适区之外,因为你需要它。

3.创建一个数据特定的项目来脱颖而出

我知道很多人对数据世界感兴趣,但也有很多人没能脱颖而出。许多人争夺同一个职位,竞争非常激烈——这就是为什么你需要利用你的职位,让你脱颖而出。但是,你是怎么做到的呢?

一种方法是像我一样通过推荐;然而,你还需要一些其他的东西来增加你获得数据面试的机会。我建议创建一个数据特定的项目,可以解决你想申请的公司的业务问题。那是什么意思?

比如你想应聘一家保险公司做数据科学家。从这个意义上说,你可以创建的项目是关于保险业务的问题;保险欺诈检测、保费定价、信用评分等等。为什么具体的项目,你呢?没有任何项目能表明我有能力做这项工作吗?。的确,任何项目都足够了。但是,如果你有一个项目,业务人员不理解,那么他们会认为你对他们的业务还没有经验。

想象一下这个场景,你在做人脸检测项目,并把这个项目应用到银行业。公司可以用你的项目解决什么商业问题?如果你知道这个行业会因为你的人脸检测项目而兴旺发达,它可能会让你脱颖而出;否则,业务人员不会理解它。

我的建议是:你的项目对业务越具体,它脱颖而出的机会就越大。试着用一种能解决商业问题的方式来展示你的项目。

4.让你的存在在那里!

我让你出现在那里是什么意思?这意味着你需要在网上(或网下)展示自己。我不是说你需要成为一个演员,而是在数据社区中更加活跃。

你可以从在 LinkedIn 上发布有用的信息或材料开始,或者开始在 Medium 上写作。一件小事会导致更大的事情。人们和招聘人员会开始认可你努力,并想更多地了解你。

数据社区中的人们联系紧密,并且倾向于相互了解。这个社区由专家和招聘人员组成,他们总是在寻找新的人才。我认识几个活跃在网上社区的数据爱好者,因为他们的网上活动,他们获得了更好的数据机会。在线展示也真正改变了我的职业生涯。通过写作和 LinkedIn,我认识了许多新朋友,拥有了我从来不知道自己不能拥有的多面性。

我的建议是:通过做一些小事,比如分享有用的信息或者写作,让你的形象展现出来。坚持这样做,你会得到一些有意义的东西。

结论

许多数据爱好者希望进入数据领域,但很难从课堂转向行业。此外,脱颖而出对他们来说是很难做到的事情。这就是为什么,

基于我的专业经验,我想分享我对任何数据新鲜人的建议;它们是:

  1. 扔掉理想主义思维
  2. 沟通就是一切
  3. 创建一个特定的数据科学项目以脱颖而出
  4. 展现你的风采

希望有帮助!

访问我的 LinkedInTwitter

如果您没有订阅为中等会员,请考虑通过我的推荐订阅。

你现在应该尝试的 4 个惊人的 Python 库

原文:https://towardsdatascience.com/4-amazing-python-libraries-that-you-should-try-right-now-872df6f1c93?source=collection_archive---------4-----------------------

大蟒

这些是最酷的鲜为人知的 Python 库,你可能不知道,但应该知道

照片由来自佩克斯的克里斯蒂娜·莫里洛拍摄

我是 Python 库的忠实粉丝,我真的很喜欢它们。事实上,我的一些最受欢迎的博客都是关于 Python 库的。他们有能力将数小时的工作和无数行代码变成两三行,最棒的是:他们是免费的。然而,大多数人只关注那些最流行的库,而忽略了成千上万的 Python 库可以完成你需要花费数小时手工完成的结果。虽然我对那里所有喜欢手动做事的勇敢的人深表敬意,手动做事有它的好处,但有时我们需要让它更有效率。

问题是尝试新的库可能很耗时。你需要安装,测试,阅读文档等等。,并不总是得到你想要的。正如我在开始提到的,我喜欢写新的 Python 库,并分享我对它们的了解。今天,我将介绍一些我最近发现的最著名的图书馆。不再介绍,让我们跳进这些超级酷的库。

Bamboolib

**它的作用:**数据分析与探索库
**使用起来有多容易:**非常容易 **谁应该使用:**这个星球上的每个人!

短篇故事。我正在写一个博客,展示我最近了解到的 15 个 Python 库,Bamboolib 将是我要写的第一个。那个博客的重点是快速介绍一些库,但是 Bamboolib 给我的印象太深了,没有给予应有的关注感觉是不对的。

他们的创造者说 Bamboolib 是一个数据分析工具,在这里你可以探索数据并获得洞察力,而不必编码,这将允许没有任何编码经验的人享受 Python 可以用数据分析做的奇迹。最重要的是,它可以节省数据分析师和数据科学家的时间,因为它不需要任何先前的编码经验。

看他们的网站,好像有免费版和付费版,其中付费版侧重于公司。好消息是,我测试了免费版本,没有发现任何限制。另一件事是 Bamboolib 是由制作 PyForest 的同一批人创建的,我在这里提到过 py forest 库。现在,让我们检查一下 Bamboolib 可以完成的所有事情。

装置

我推荐使用一个环境来测试 Bamboolib。尽管如此,如果你不关心它,你只需在你的终端中输入 pip install — upgrade bamboolib — user就可以安装 Bamboolib。然后,您将需要通过键入python -m bamboolib install_nbextensions来安装 Jupyter 笔记本的扩展,您应该可以开始了。如果您喜欢创建一个环境,请将以下代码复制并粘贴到您的 Jupyter 笔记本中。片刻之后,您就可以开始探索 Bamboolib 了。

**# Create conda environment**
!conda create -n bamboolib python=3.7 -y**# Activate the environment**
!conda activate bamboolib**# Add the IPython kernel to Jupyter**
!conda install jupyter -y
!conda install ipykernel -y
!python -m ipykernel install — user — name bamboolib**# Run this if you use Jupyterlab**
!conda install jupyterlab -y**# Install bamboolib …**
!pip install — upgrade bamboolib — user**# Jupyter Notebook extensions**
!python -m bamboolib install_nbextensions**# Run this if you use Jupyterlab: JupyterLab extensions**
!python -m bamboolib install_labextensions

现在,让我们导入 Bamboolib、Pandas 和著名的 Titanic 数据集来探索 Bamboolib。

**# Import bamboolib, Pandas, and the Titanic dataset**
import bamboolib as bam
import pandas as pd
df = pd.read_csv(bam.titanic_csv)

好了,现在我们准备开始使用 Bamboolib 了。你需要做的就是输入 df,你会看到多个选项来开始探索数据集。

图片由作者提供[gif]

由此可见,Bamboolib 与其他低代码数据探索库有很多相似之处。然而,有两个特性改变了游戏规则。首先,您可以轻松地过滤、连接、连接、分组、更改数据类型、重命名列等等。

图片由作者提供[gif]

第二件事是你可以随时看到代码并重用它。因此,如果你正在学习 Python 或者只是在做一个需要使用代码但想节省时间的项目,这将是一个救命稻草。

图片由作者提供[gif]

它是如何工作的?您所需要做的就是选择您想要做的转换,选择列、聚合,如果需要的话,Bamboolib 会完成所有剩下的工作。我正在使用PclassSexAge列进行分组,如下图所示。然后,我将检查SumCount的值。您还会在顶部的单元格中看到一个代码。即使没有安装 Bamboolib,也可以在任何地方使用该表。很棒,对吧?

图片由作者提供[gif]

花点时间看看下面的代码。这里有一些高级代码。即使是高级的 Pandas 用户也可以用这段代码学习一些东西并提高他们的技能。

作者图片

您还可以使用 Bamboolib 创建可视化效果,同样,您可以看到代码。有多种方法可以编辑您的绘图,您可以用它创建非常复杂的数据可视化。另一件很酷的事情是,它使用 Plotly Express,其中有一些非常好看的图表。

图片由作者提供[gif]

最后,浏览数据框功能允许您通过几次点击来浏览数据集。您甚至可以单独探索这些功能。如果我们点击几次就能得到我们需要的一切,为什么我们要输入无数行代码来得到简单的信息呢?

图片由作者提供[gif]

我可以花几个小时谈论 Bamboolib,但我们需要转移到下一个图书馆。我强烈建议你去探索这个图书馆。Bamboolib 应该有自己的博客,我很快会致力于此,但是现在,享受探索它吧。

TensorFlow 数据验证

**它的作用:**让机器学习的数据探索更加直观 **它有多容易使用:**容易 **适合谁使用:**适合那些需要快速查看数据集统计数据的人。

TensorFlow 数据验证是一个数据集,它使创建机器学习模型时的数据探索变得更容易。虽然没有 Bamboolib 强大,但是值得了解一下。这是 TensorFlow 找到的解决方案,它让探索数据的压力更小,并使用户不必键入几行代码。您可以检查缺失数据、异常值、数据异常、冗余要素、具有很少或没有唯一预测信息的要素、被视为要素的标注等。这是 TensorFlow 在其网站上所说的:

TensorFlow 数据验证可识别训练和服务数据中的异常,并可通过检查数据自动创建模式。该组件可被配置成检测数据中不同类别的异常。

装置

如果我已经说服你试一试,你可以在你的终端中输入pip install tensorflow-data-validation来安装它。一旦安装完成,我们就可以开始使用它了。我们需要熊猫来导入数据。我将再次使用(再次!)泰坦尼克号数据集。

**# Import Tensorflow Data Validation**
import tensorflow_data_validation as tfdv**# Import Pandas**
import pandas as pd**# Import Titanic dataset**
df = pd.read_csv('train.csv')

好了,现在我们可以走了。要查看 TFDV 的运行情况,请键入以下代码,一旦运行该单元,您将看到 TFDV 将返回一个漂亮的描述性统计表。

stats = tfdv.generate_statistics_from_dataframe(df)

tfdv.visualize_statistics(stats)

作者图片

我们可以在上面的图片中看到,只需点击一下,我们就可以得到一个包含大量信息的表格。现在让我们关注下图,看看我们得到了什么样的信息。

我们可以看到,我们获得了每个特征的描述性统计数据。TFDV 将数字特征与分类特征分开。我们还可以看到,它突出显示了一些重要的信息,例如大量缺失的数据。在这种情况下,年龄似乎有 19.87%的缺失值。我们还可以看到带有大量零的特征。例如,survival 具有较高的数字是有意义的,因为 0 表示乘客没有幸存。我们还可以看到平均值、标准差、最小值、中值和最大值。在右边,一些图表使我们很容易看到数据分布,我将对此进行更多的讨论。

作者图片

查看分类特征,我们可以看到缺失的、唯一的和最常见的值。还有平均字符串长度。

正如我所承诺的,让我们再多谈谈数据可视化。如果单击展开,您将扩展数据可视化并浏览数据集。值得注意的是,TFDV 的主要重点是分析数据集,为运行机器学习模型做准备,为此,TFDV 工作得很好。

作者图片

您可以探索一些更酷的特性,TFDV 有很好的文档。正如我之前提到的,它没有 Bamboolib 强大,但使用起来更简单。

骗子

**它的作用:**创建假数据 **使用方便程度:**方便 **适用人群:**适用于需要创建假数据的人,比如项目的假名字和假地址

Faker 有一个非常直白的名字。它为项目创建虚假数据,如姓名、地址、电话号码、职务、IP 地址、社会保险号和文本。如果你正在做一个只有 id 的项目,你可以让它更加个人化和直观,创建假名字。由于我们更担心隐私,这是一个很好的方式来处理实际数据,而不会在我们的项目中暴露人们的隐私。即使对学校来说,如果我们有更多的信息,数据集看起来也会更真实。

要安装它,你可以在你的终端输入 pip install Faker。以下是一些很酷的功能的演示:

**# Import Faker**
from faker import Faker
from faker.providers import internet
fake = Faker()**# Create fake name**
fake.name()
**# Create fake address**
fake.address()
**# Create fake job title**
fake.job()
**# Create fake SSN**
fake.ssn()
**# Create fake phone number** fake.phone_number()
**# Create fake time** fake.date_time()
**# Create fake text** fake.text()

作者图片

还有一些其他很酷的功能,例如改变结果的语言,这允许你用其他语言做我刚才给你看的所有很酷的事情。我会说葡萄牙语,名字和地址看起来很真实。

作者图片

Faker 有一个做得很好的文档,如果你感兴趣,你应该去看看。他们可以创造更多的虚假信息,所以在你的下一个项目中要记住这一点。

打开数据集

**功能:**将 Kaggle 数据集下载到与您的 Jupyter 笔记本相同的文件夹中 **使用方便程度:**方便 **这是为谁准备的?:**大家。

假设你正在开始一个项目,练习你的数据分析和机器学习技能。你从哪里开始?大多数人去 Kaggle,找到一个令人兴奋的数据集,下载文件,在 Downloads 文件夹中找到该文件,然后将该文件拖到您正在处理的笔记本所在的文件夹中。相当多的步骤,对不对?如果有更好的方法呢?这就是 OpenDataSets 要解决的问题。

OpenDataSets 允许我们从笔记本上下载数据集。它将创建一个与数据集在同一个文件夹中的文件夹,这样您的笔记本可以节省一些时间。很酷,对吧?

要使用它,你需要在你的终端输入 pip install opendataset。然后,您需要通过输入import opendatasets as od将其导入到笔记本中,您就可以开始工作了。Kaggle 会要求您提供凭证,您可以在 Kaggle 个人资料页面上快速获取凭证。在下面的例子中,我想下载著名的心脏病数据集。

首先,让我们安装 OpenDataSets。你可以输入pip install opendatasets,你应该可以开始了。然后,在您的笔记本中,您可以复制并粘贴以下代码:

import opendatasets as od
od.download('**kaggle_url**')

现在,我们可以在 Kaggle 上添加数据集 URL。

import opendatasets as odod.download("[https://www.kaggle.com/rashikrahmanpritom/heart-attack-analysis-prediction-dataset](https://www.kaggle.com/rashikrahmanpritom/heart-attack-analysis-prediction-dataset)")

作者图片

图像左侧的文件夹没有包含心脏病数据集的文件夹。然而,只要我运行代码,它就会为我下载数据集。您可以看到数据集是解压缩的。这再容易不过了。

结论

正如我们在这篇博客中看到的,库可以有能力将一些耗时的库变成简单的任务。令人惊讶的是,我们只用一两行代码就能完成这么多工作。即使没有太多代码经验的人也可以执行复杂的数据分析。当然,它们不能代替学习 Python 的专业人员的工作,但是它们甚至可以用来提高长期专业人员的技能。

记住 Python 库应该被看作是改进我们工作的一种方式,这很好。我不建议你只依赖这些库,而是把它们作为一个附加组件。如果您决定测试这些库,或者您有任何我可以测试的建议,请告诉我。编码快乐!

你可能也会喜欢…

5 个你不知道但应该知道的 Python 库 4 个你应该知道的很酷的 Python 库3 个你应该知道的很牛逼的 Python 库

Python 3.9 中 4 个非常有用的新增功能

原文:https://towardsdatascience.com/4-amazingly-useful-additions-in-python-3-9-732115c59c9d?source=collection_archive---------19-----------------------

用 4 条新语句提升您的 Python 知识

照片由 Allef Vinicius 在 Unsplash 上拍摄

Python 3.9 从 2020 年末开始出现,它带来了一系列新的语法特性和改进。在这篇文章中,我们将探索这个版本中的一些好的附加功能。我们还将讨论如何升级到 Python 3.9,以防万一。

1.合并词典

从 Python 3.9 开始,可以使用|操作符将两个或多个字典合并在一起。对于重复键,最右边的字典优先。这个语法糖是 PEP-584 的一部分。

使用|运算符合并两个词典

>>> dict1 = {'a': 1, 'b': 2}
>>> dict2 = {'b': 3, 'c': 4, 'd': 5}
>>> dict1 | dict2
{'a': 1, 'b': 3, 'c': 4, 'd': 5}

2.更新词典

更进一步,您还可以使用|=操作符来**就地更新字典。**本质上a |= b相当于a = a | b,但是|=不会返回新的字典,而是会修改a。这一增加也是 PEP-584 的一部分。

就地更新字典

>>> dict1 = {'a': 1, 'b': 2}
>>> dict2 = {'b': 3, 'c': 4, 'd': 5}
>>> dict1 |= dict2
>>> dict1
{'a': 1, 'b': 3, 'c': 4, 'd': 5}

3.从字符串中删除前缀

字符串方法removeprefix()现在可以用来从字符串中删除前缀。

这个新的附加物是 PEP-616 的一部分。

从字符串中删除前缀

>>> my_str = 'Title: Hello World'
>>> my_str.removeprefix('Title: ')
Hello World

4.从字符串中删除后缀

打包到 PEP-616 中的第二个附加内容是removesuffix()字符串方法。和前面的例子一样,这个方法可以用来删除字符串中的后缀。

从字符串中删除后缀

>>> my_str = 'Title: Hello World'
>>> my_str.removesuffix(' Hello World')
Title:

如何安装 Python 3.9

为了安装 Python 3.9,我建议你使用文档中提供的官方下载。3.9.0 甚至有一些小的更新——确保在这里看到可用的最新版本。

如果您是 Windows 或 OSX 用户,只需从我提供的第一个链接下载相应的文件。

如果你是 Linux 用户,你可以通过 APT 安装它:

$ sudo apt update
$ sudo apt install software-properties-common
$ sudo add-apt-repository ppa:deadsnakes/ppa
$ sudo apt install python3.9

在每个平台上,您应该能够通过在终端或命令行中运行python --version来验证 Python 3.9 已经成功安装(取决于您的操作系统)。

结论

在本文中,我们讨论了 Python 3.9 中的一些新特性。我们展示了如何使用||=操作符来合并和更新字典。此外,我们引入了两个新的字符串方法,即removeprefix()removesuffix(),它们可以应用于字符串来分别删除前缀或后缀。最后,我们快速探索了如何安装或更新 Python 3.9。

如果你想了解 3.9 版本的更多特性和改进,请参见官方发布集锦。

您可能还对以下内容感兴趣:

https://betterprogramming.pub/11-python-one-liners-for-everyday-programming-f346a0a73f39 </6-tips-to-help-you-stand-out-as-a-python-developer-2294d15672e9>

每个新分析师都应该关注的 4 个领域

原文:https://towardsdatascience.com/4-areas-every-new-analyst-should-focus-84020068baa4?source=collection_archive---------37-----------------------

你是数据分析师。这是你的第一天。你什么都不知道。

空白白板——维基共享资源

第一天

一旦你完成了公司的入职,有人,或者更有可能是多人,已经在告诉你他们想要你关注的所有计划。所以你必须建立一个新的仪表板,集成一个新的数据源,修复现有的模型。与此同时,来自技术或安全团队的某人已经授予您数据库王国的钥匙。要查询的数十或数百个数据库,数百个架构工件的链接(如果你幸运的话),以及一个 Tableau 登录;全是你的。

你从哪里开始?

包括我自己在内的许多人都有并且愿意简单地问几个顶级问题,看一眼工件,然后直接开始编写查询。有些人甚至会争辩说学习数据的最好方法是亲自动手。但这是最有效的方法吗?还记得那些排队等候的计划吗?

在前两篇文章中,我讨论了在整个组织中传播信息素养的必要性以及拥有能够围绕该信息撰写令人信服的叙述的数据分析师的重要性。但是,如果你是数据分析师,你如何确保你理解业务,优先考虑适当的深度挖掘,并在最初的几周或几个月内花零时间挖掘遗留数据集?

非常简单的方法

如果你对词源好奇,我找不到任何关于常用短语“非常简单”的确切来源,但我们都知道它的意思。

“死的”简单框架是一种直观的、自上而下的方法,适用于数据分析师、软件开发人员、产品经理或组织中需要建立基础数据素养或深入理解数据元素和系统的任何人。

业务的领域通常(并且是默默地)达成一致,但是很少被形式化。如果你没有一个同质化的结构或者清晰地表达业务领域的工件(例如,订单、支付、客户服务等。),这个还是可以快速且有些无痛的完成的。

到目前为止,你可能已经找到了几个关键人物,他们掌握着非常重要的商业知识。所以拿起它们,跳上白板。谈完生意,开始画那些大盒子。当然,每个商业模式都是不同的,但是你应该很快分析出前 4-6 个领域。现在,提问。

花一些时间来澄清问题,但尽量不要陷入混乱。目标是对每个领域有一个清晰但不彻底的理解。如果在什么是域和什么不是域的问题上有冲突。解决它。在所有人都到齐之前不要离开。

事件

在事件驱动架构(EDA)世界中,事件被定义为“状态的重大变化”。应用程序堆栈中的事件将与驱动它们的概念性业务事件相关,但很少暗示一对一的关系。

一个例子是购买的商业事件。在应用程序中,购买事件可能会触发一系列后续事件。例如,当发生新的购买时,系统检查这是一个回头客还是新客户。如果这是一个“新客户创建”的事件,可能会触发注册一个欢迎电子邮件活动。在概念层面上,快速掌握事件链的最简单、最快的方法是一次专注于一个领域。然后,一旦你完成了一个领域的工作,切换到下一个领域,并开始连接这些点。

同样,这里重要的是找到正确的粒度级别。您打算形成对业务事件和底层应用程序事件的概念性理解,这将创建理解架构所需的基本上下文。

体系结构

至此,您已经在一个完全概念性的层面上思考了业务和数据。现在是时候从数据架构的角度了解幕后的情况了。鉴于您目前对领域和事件的理解,您完全可以深入查询,并在此时开始拼凑关于架构的推论。也就是说,如果您有资源(时间和有专业知识的人),死简单框架的架构层可以通过另一个白板会议来加速。

从您规划的事件以及什么数据库实例、缓存、存储桶等开始。,其中每一个都被捕获。当然,首先,你要寻找记录系统或事实的来源,然后你可以链接任何下游读取副本,等等。记住事件的背景。如果您最终要分析这些事件中的一个,那么您的目标是理解数据的唯一真实来源以及它可能流经的所有下游系统。

数据

最后,我们知道数据库在哪里,在那些系统中捕获了哪些数据,以及这些数据与哪些业务领域相关。现在,我们可以开始编写查询了。

对于这个例子,我将关注结构化数据,但是当然,数据分析的最后一步可以并且应该应用于每个数据系统。理想情况下,如果您了解每个表包含的内容、表中的列和数据类型以及表之间的关系,将会有所帮助。

这里的问题是挖掘和分析/理解这一点会变得多么耗时。好消息是,你现在应该对什么是最重要的有一个直觉。从那里开始。在某些方面,随着数据的不断变化和发展,这一步是永久性的。

只是分析师?

DEAD simple 框架背后的想法是提供一个逻辑进展路径来理解最终往往非常复杂和详细的数据。每个人在兔子洞里走多远将取决于他们的角色以及他们需要或想要理解数据的粒度,但是在尝试深入下一步之前,应该强调理解前面的步骤。如果你不能说出企业的领域或事件,你就不应该写查询。

我鼓励任何人至少通过域和事件来工作。你可能会对自己发现的差距感到惊讶。记住这一点,知道每个新的团队成员都将从中受益,充分捕捉沿途学到的一切是至关重要的。干净清晰的图表、流程图等。,将使接下来的会议变得更加容易。

对业务事件的误解、沟通摩擦、数据不准确、分析师效率低下都是很可怕的事情,对吧?

选择一个框架,不管是这个框架还是其他框架,有意识地从上到下理解你的数据。你和组织都会很高兴你这么做了。

请关注我或通过我的推荐链接注册 Medium 来支持我的写作。谢谢!

参考

—事件驱动架构—https://en . Wikipedia . org/wiki/Event-driven _ architecture # cite _ note-1

Python 中快速数据分析的 4 种令人敬畏的熊猫方法

原文:https://towardsdatascience.com/4-awesome-pandas-methods-to-quickly-analyze-any-dataset-65d2252af6e8?source=collection_archive---------2-----------------------

编程;编排

了解如何惊人地加速探索性数据分析(EDA)

照片由 Artem Beliaikin 从 Pexels 拍摄

更快的探索性数据分析!💡

使用 Python Pandas 内置的方法,分析数据集并总结其重要特征是超级简单和直接的。

常用的熊猫数据帧方法有.head().tail().info().describe().plot().value_counts()

在这里,我将介绍另外四种方法,用来进一步加快 EDA 的速度。⚡

在接下来的五分钟里,你一定会掌握这四种方法。

考虑一个学生考试成绩的例子。您可以创建一个如下所示的数据框架,并遵循。

我们开始吧!!

熊猫的无聚集分组

在许多情况下,我们希望将数据集分成组,并对这些组做一些事情。Pandas 方法groupby()用于将数据帧中的数据分组。

不要同时使用 groupby()和聚合方法,而是创建一个 groupby()对象。理想情况下,这个对象可以在需要时直接使用。

让我们根据列“City”将给定的数据帧分组

df_city_group = df.groupby("City")

这将创建一个对象**df_city_group** ,它可以与不同的聚合(如 min()、max()、mean()、describe()和 count()相结合。下面是一个例子。

熊猫数据框。groupby()示例|作者图片

要获得数据帧 df 的子集,其中“城市”是柏林,只需使用方法**.get_group()**

熊猫数据帧对象。get_group()示例|作者图片

这不需要为每个组创建每个子数据帧的副本,因此会节省内存。这是因为它使用了对象中已经可用的数据结构。

切片用。groupby()比使用逻辑比较快2 倍!!

.groupby().get_group()在分割数据帧时是真正的游戏规则改变者。⏳

这里有一篇关于 Python 一行程序高效编码的有趣文章!

</5-most-powerful-one-liners-you-should-know-in-python-programming-c9d49a89b7f3>

使用量最大。nlargest()

通常,我们有兴趣了解基于特定列的值的数据帧的前 3 或前 5 个条目。

例如,从考试中获得前 3 名的分数,或者从数据集中获得前 5 名最受欢迎的电影。

Pandas .nlargest()的语法是最简单的答案。
df.nlargest(N, column_name, keep = ‘first’ )

使用方法.nlargest(),可以检索包含指定列的前 N 个值的数据帧行。

在上面的例子中,让我们获得数据帧“df”中前 3 名为“Maths_Score”的行。

熊猫 nlargest()示例|作者图片

如果两个值相等,可以修改附加和可选参数。它采用值“first”、“last”和“all”从 tie 中检索第一个、最后一个和所有值。

1 这种方法的优点是,不需要专门对数据帧进行排序。方法.nlargest()代表你去做。

最小使用量。nsmallest()

类似于前 3 或前 5 条,有时我们也需要数据帧中的后 5 条记录。

例如,获得评分最低的 5 部电影或考试中得分最低的 5 名学生。

.nsmallest()可以用它的语法来作最简单的回答。

使用方法.nsmallest(),可以检索包含指定列的底部“N”值的数据帧行。

在同一个示例中,让我们获得数据帧“df”中“数学分数”最低的 3 行。

熊猫。nsmallest()示例|作者图片

然而,这都是关于最简单的方法。但是,从执行时间来看⏳看来,方法.nlargest().nsmallest()都是很差的选择。

sort_values()比 nlargest()快 2.8X !!

执行时间讲述了一个不同的故事。

熊猫数据帧 sort_values() Vs nlargest() |作者图片

🚩根据我的经验,我推荐使用方法**.sort_values()**进行快速 EDA。

逻辑比较

比较运算符<, >, <=, >=, ==, !=和它们的包装器.lt().gt().le().ge().eq().ne()分别在以下情况下非常方便:

  • 将数据帧与基值
    进行比较,这种比较产生一系列布尔值,这些布尔值可用作以后目的的指示符。
  • 基于比较对数据帧进行切片
    基于与一个值的比较,可以从数据帧中提取一个子集。
  • 基于两列的比较在现有数据框架中创建新列。

下面的例子解释了所有这些情况,

在这里阅读关于比较运算符https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.gt.html的包装器的更多文档。

这些 Python 技巧甚至进一步节省了我在许多项目中的时间。

*</3-time-saving-python-tricks-a017f4215aeb> *

总结,

我发现在使用 Python 进行数据分析时,这些方法非常方便。这真的让分析变得更快。你可以尝试这些,也让我知道你用哪些其他方法来加速你的 EDA!

现在可以通过 在这里报名成为中会员 阅读我和其他作家发表的所有故事。当你这样做,我会得到你的费用的一小部分,没有任何额外的费用给你。欢迎加入我的电子邮件列表来了解我写作的最新进展。

感谢您的阅读和投入时间!!

4 个最好的 ML 图书馆官方网站以及如何利用它们

原文:https://towardsdatascience.com/4-best-official-websites-for-ml-libraries-and-how-to-utilize-them-37e7261b1e11?source=collection_archive---------36-----------------------

探索学习高级机器学习的四个最佳选择,并采用最有效的方法来利用它们

图片由 Unsplash 上的 Andreas ***** 拍摄

为了获得机器学习任务的最佳解决方案,有许多有用的库、模块和大量资源。

Python 就是这样一种通用且独特的编程语言,它以其丰富的库和功能容纳了一些绝对最佳的可用资源。

虽然 internet 上有一些用于访问、操作和处理数据的库、模块和包,但是这些库中的一些文档可能并不完整。

尽管这些文档和官方网站试图尽最大努力涵盖其工具包中的几乎每一个功能,但对于初学者来说,没有足够多的特定用例的示例和演示来轻松掌握概念。

在本文中,我们将探索四个这样令人惊叹的机器学习和深度学习库,它们设法突破了前面提到的状态,并为所有类型的数据科学爱好者提供了一些最佳质量的内容,以便相应地利用这些资源。

除了查看这些资源之外,我们还将探索在试验这些库的众多方面时应该考虑的一些最佳实践。

在我们开始之前,如果你对类似的文章感兴趣,请通过下面提供的链接查看我以前在十大最佳网站上发表的一篇文章,以了解更多关于数据科学和机器学习的信息!

</10-best-free-websites-to-learn-more-about-data-science-and-machine-learning-f2c6d7387b8d>

1.sci kit-学习:

照片由杰斯·贝利在 Unsplash 上拍摄

Scikit-learn 是绝对最好的机器学习库之一。它是以最好的方式构建的,这使得它可以与其他优秀的数据科学库兼容,如 Numpy、Pandas 和 matplotlib。

使用 scikit-learn 来实现多个机器学习项目的结果通常是一个好主意。它提供了用户开始机器学习所需的几乎所有奇妙的工具。

所有基本的机器学习算法,如 K 近邻、线性回归、逻辑回归、随机森林、决策树和其他类似的库都是预先构建的,允许用户相应地计算、评估、训练和适应他们的机器学习项目。

但是这些很难说是 sklearn 最好的部分,因为它为用户提供了如此多的工作,理解如何最好地利用这一官方文档变得非常重要。

怎么用?

为了确保 sklearn 在稳定的学习过程中发挥最佳作用,我首先建议您自己从头开始实现大多数机器学习算法。如果你被困在某个地方,你可以利用他们的类和模块来温习你的概念和代码。

一旦您对基本概念有了基本的理解,您就可以相应地使用它们的许多类、函数和应用程序了。为了 sklearn 的完美效用,利用他们的官网,了解每个函数的用途和各自的参数。

sklearn 模块提供了许多选项来解决各种任务,例如拆分数据、创建和操作数组和数据元素、拟合和训练模型等等。

为了清楚地理解本文档,最好的方法是阅读基本和重要的参数,并尝试自己解决他们网站上提供的给定示例。最好是同时编码并相应地检查结果。

Jupyter 笔记本是同时阅读和编码的最佳方式之一。我推荐阅读下面这篇关于 Jupyter 笔记本的文章,这篇文章广泛地涵盖了如何充分利用这些笔记本的大部分重要主题。

2.张量流:

由 Kadarius Seegars 在 Unsplash 上拍摄的照片

TensorFlow 无疑是让深度学习面向广泛受众的最大贡献之一。借助正确的 TensorFlow 工具、函数和方法,几乎可以解决任何类型的复杂问题。

张量基本上是一个 n 维数组,构成了张量流的主要成分。通过以张量的形式分配和数字化各种类型的内容,如文本或图像,我们可以计算出必要的要求,并相应地为每项任务实现最佳结果。

在处理与 TensorFlow 相关的项目以执行更复杂的计算任务时,强烈建议在您的系统上安装 GPU。使用正确的工具和方法,有可能解决高水平的项目,如甘斯、VAE 和其他类似的项目。

为了进一步了解 GPU 的重要用途,如果你真的需要一个 GPU 来进行深度学习,我推荐下面这篇文章,它全面深入地讨论了这个主题。

怎么用?

虽然之前描述的 scikit-learn 模块具有多种功能,包括大量示例、迷你代码片段和小项目,这些功能在很大程度上被简化,便于大多数初级程序员理解,但 TensorFlow 的官方文档却并非如此。

为了最好地使用 TensorFlow 文档,我建议快速阅读官方指南中的大多数基本概念,并理解您在自己的项目中可能遇到的大多数独特主题。

然而,更重要的是,我的建议是查看教程部分,了解可用的具体项目。在他们的教程部分,有许多访问 Google Colab 笔记本的已解决示例,您可以自由访问并尝试运行这些程序以供参考,并检查它们的执行情况。

作为最后一步,我强烈建议你在你的个人电脑、笔记本电脑或任何其他你喜欢的本地设备上从头开始实施所有的项目。这样做将帮助你轻松掌握所有必要的概念,无论何时你遇到困难,你都可以使用 Google Colab 书籍作为参考。

如果您没有自己的 PC 构建,并且希望在您的预算范围内构建一个高质量的系统,请查看下面的文章,该文章涵盖了针对所有预算范围的深度学习的最佳 PC 构建这一主题。

[## 在各种预算范围内,最适合深度学习的电脑

towardsdatascience.com](/best-pc-builds-for-deep-learning-in-every-budget-ranges-3e83d1351a8)

3.PyTorch:

照片由乔纳森派在 Unsplash 上拍摄

PyTorch 由脸书人工智能研究实验室(FAIR)的团队开发,是最好的深度学习库之一,可以执行大量的项目。由于 PyTorch 的代码取向是高度 Pythonic 化的,所以越来越多的开发人员开始倾向于使用这个深度学习库来完成各种任务。

PyTorch 不仅以其简单的编码过程为 TensorFlow 提供了强有力的竞争,而且还具有更简单的安装过程、易用性和更基本的精彩文档,初学者开发者可以从这些文档中轻松获得有用的信息。

怎么用?

利用 PyTorch 文档的最佳方式是快速掌握一些更基本的东西,如 Torch.nn、torch.nn.functional 和 torch。张量功能,以及适应一些 CUDA 和设备设置,你可能需要为某些实施。

一旦你对他们的文档的基本要素有了基本的理解,我强烈推荐你继续阅读他们最好的部分。PyTorch 官方文档中的教程部分几乎涵盖了初学者可能想要学习和适应的所有基本主题和概念。

4.Keras:

由道格拉斯·洛佩斯在 Unsplash 拍摄的照片

Keras 是最好的高级库之一,可供开发人员充分利用并成功完成各种项目。Keras 现在与 TensorFlow 2.0 集成在一起,它们基本上是同一个组件。

在 Keras 的帮助下,你可以像 TensorFlow 一样执行众多任务,但代码流会简单一点。需要您执行更多功能和自定义类来解决特定任务的操作可以用预定义的代码替换。

相比之下,初学者的 Keras 代码实现比类似代码的 TensorFlow 实现简单。由于 Keras 现在被合并到 TensorFlow 2.0 中,因此更容易混合使用这两个惊人的库来执行几乎任何类型的深度学习和神经网络任务。

怎么用?

Keras 库的官方文档可以通过下面的链接获得。要学习 Keras 并最大限度地利用它,建议查看指南并简要了解该库提供的所有选项。

虽然不可能掌握 Keras 中的每一个 API 引用、类或函数,但了解一些基本层、损失函数、模型架构和其他类似的功能将会有很大帮助。它还有助于理解这些功能中集成的一些基本参数。

一旦您掌握了几乎将在每个项目中使用的一些基础知识,例如 Keras 层和 Keras 损失,您现在可以继续查看一些在其文档的示例部分中提供的惊人的示例项目。有很多很酷的项目,你可以探索并尝试获得,以及复制结果。

由于 TensorFlow 和 Keras 合并为一个单元,因此同时使用第二点和第四点的技巧是一个好主意。

结论:

粘土银行在 Unsplash 拍摄的照片

“你读得越多,知道的事情就越多。你学得越多,去的地方就越多。”苏斯博士

开始了解任何新概念或任何新库(在本例中)的最佳地方是参考资料的官方文档。当您从官方文档中学习时,它有助于在我们的头脑中建立一定的信心,因为信息是经过验证的,并且直接来自特定作品的所有者、创作者或开发者。

在这篇文章中,我们非常详细地介绍了学习机器学习和深度学习的四个最佳官方文档。这些官方文档作品包括 scikit-learn、TensorFlow、Keras 和 PyTorch。这些是在互联网上可以利用的一些最好的详细和有用的文档。更重要的是,我们研究了如何充分利用这些官方资源来达到最佳效果。

如果你想在我的文章发表后第一时间得到通知,请点击下面的链接订阅邮件推荐。如果你希望支持其他作者和我,请订阅下面的链接。

https://bharath-k1297.medium.com/membership

如果你对这篇文章中提到的各点有任何疑问,请在下面的评论中告诉我。我会尽快给你回复。

看看我的其他一些文章,你可能会喜欢读!

</6-reasons-why-your-ai-and-data-science-projects-fail-2a1ecb77743b> </5-best-python-projects-with-codes-that-you-can-complete-within-an-hour-fb112e15ef44> </14-pandas-operations-that-every-data-scientist-must-know-cc326dc4e6ee> </17-must-know-code-blocks-for-every-data-scientist-c39a607a844d>

谢谢你们坚持到最后。我希望你们都喜欢这篇文章。祝大家有美好的一天!

实施人工智能的 4 个商业策略

原文:https://towardsdatascience.com/4-business-strategies-for-implementing-artificial-intelligence-24deff39158c?source=collection_archive---------30-----------------------

人工智能可以改善任何活动

如果你有一个策略,你进入人工智能的旅程会容易得多。安妮·斯普拉特的照片。

人工智能正在重塑一个又一个行业。在中国,的艾在 200 个城市的 1700 多所学校给孩子们做家教。在澳大利亚,一种人工智能发明了一种流感疫苗,其性能远远优于所有其他现有的流感疫苗。在美国,一个机器学习机器人正在自主烹饪汉堡。人工智能有许多令人难以置信的现实世界实现。现在,随着 OpenAI 最近突破性的语言生成算法称为 GPT-3 ,非常强大的人工智能解决方案像雨一样倾泻而下。狡猾的开发者已经部署了 GPT-3 来自主撰写病毒式博客,生成网页设计,并创造角色扮演冒险。

机器学习技术比以往任何时候都更容易获得,但寻找人工智能的商业案例并不总是简单明了的。在这篇文章中,我想让人工智能的商业策略更加具体,通过四种人工智能策略,你可以用它们来改善你能想象到的任何活动。在浏览完这四个策略之后,我将帮助您找出在任何给定的活动中使用哪一个策略。

前提

但首先,人工智能有一个中心点,你必须理解:人工智能可以通过自动化或增强来授权任何活动。

  • 自动化是将人类从一项活动中移除。
  • 增强是在一项活动中赋予人类权力。

自动化和增强是相反的极端,很少有人工智能解决方案是完全自动化或完全增强的。自动化和增强是包含我们四个策略的一个尺度。

  1. 效率策略,通过自动化优化活动。
  2. 有效性策略,在这种策略中,活动是无缝的,使得沟通更加容易。
  3. 专家战略,人工智能赋予决策能力。
  4. 创新战略,人工智能使创造力成为可能。

四种人工智能策略。世界上的每一个人工智能解决方案都可以放在这四个策略中的一个或多个中。图片由作者提供。

效率战略

对于许多人来说,当他们想到 AI 时,首先想到的是自动化。虽然人工智能不仅仅是自动化,正如我们将很快讨论的那样,但这个特定的策略确实就是关于自动化的。

效率策略可用于具有非常明确的规则和惯例的活动。公司采用这种策略来优化他们的流程,通常是为了降低成本。

例如,出租车行业在不久的将来面临着完全自动化的风险,因为自动驾驶汽车的表现超过了人类。对于如何驾驶车辆有非常明确的规定;因此,可以优化驾驶。如今,欺诈检测也普遍实现了自动化,因为事实证明,检测欺诈非常简单。仓库也越来越多地被自动机器人占据,我们也开始看到无人商店。然而,请注意,没有员工的商店也不是没有问题。一些活动,如保持新鲜食品杂货,很难自动化。

随着越来越多的例程被发现用于复杂的活动,并且随着机器学习算法在理解之前被认为是复杂的数据方面变得越来越有能力,越来越多的活动可以被自动化。然而,即使某项活动可以非常明确地实现自动化,也不应该这样做,原因如下:

  1. 在一些业务中,客户可能需要高水平的服务,超出了机器学习人工智能今天能够提供的服务。
  2. 利用我们在 2021 年拥有的算法,许多医疗、军事和金融流程已经可以实现自动化。然而,在这些行业中做出的决定往往会产生严重的后果。出于这个原因,这些行业的决策者可能不愿意将某些活动自动化。有时候,开发增强的人工智能解决方案来授权人类决策,而不是完全取代人类决策,这是更可取的做法。
  3. 自动化带来的伦理挑战通常比人们想象的要大得多。即使是以机器学习能力闻名的亚马逊,也开发了一种具有性别歧视的简历扫描人工智能。随着企业急于实现业务流程的自动化,道德被置于次要地位的风险很高。很容易无意中创建一个歧视性的算法,这就是为什么人们应该小心自动化某些活动。

有效性策略

第二个策略围绕着使用人工智能来增强工人的沟通和协调。在这里,AI 扮演了一个助手的角色。通常,有效性策略的目标是通过消除或简化计划、沟通或监控的行为,使人们更加有效。

由于聊天机器人的兴起,近年来公司用这种策略实施基本的人工智能解决方案已经成为潮流。人工智能通常用于部分自动化客户支持任务。如果一个支持任务对人工智能来说太难解决,一个人类代理可以加入这个任务。对于为这种人工智能策略构建的活动,部分自动化是常见的。

然而,有效性策略可以应用于更复杂的活动,而不仅仅是客户支持。例如,人工智能可以用来自主安排同事之间的会议。在大型咨询公司中,人工智能可以用来根据技能、经验和员工的愿望,建议将哪些顾问分配给某个项目。

为 Google Assistant、Siri 和 Alexa 等服务构建的应用程序往往属于这种策略。随着超过三分之一的美国成年人在家中拥有智能音箱,以有效性策略为基础的产品已经成为面向消费者的企业的关键。

人工智能可以用来部分地,有时是完全地自动化交流。由迈克·梅耶斯拍摄。

专家战略

与上面提到的两种人工智能策略不同,专家策略与增强密切相关。对于包含复杂工作流程的活动,特别是临时任务,可以使用专家策略来提升人类决策。在这个策略中,人类永远说了算。专家系统处理从大量金钱到人类生命的任何事情,这意味着人类必须始终为所做决定的后果负责。

专家人工智能系统可用于增强各行各业专业人士的能力。医生、律师、法官、政治家、军事人员、财务顾问和教师只是 AI 可以提供建议的职业的几个例子。人工智能解决方案可以帮助教师创建测试,评估学生,确定帮助个别学生的最佳方法,建议课程,等等。财务顾问可以获得强有力的洞察力来做出货币决策。医生可以在诊断病人时得到帮助。这样的例子不胜枚举,但常见的模式是人类总是做出最后的决定。

产品开发是一个非常吸引我的领域。通过人类与人工智能的合作,公司和科学家发明了新品种的威士忌、疫苗、香水和香料。未来我们可能会看到更多人工智能发明的产品。

上面的例子都是专家职业,但是注意这个策略的名字可能会有点误导。在这种情况下,术语专家并不一定意味着传统意义上的专家。例如, Hopper 已经基于预测预订机票最佳时间的专家策略开发了一款人工智能应用。当人工智能预测机票价格最低时,该应用程序允许消费者购买机票。在这种情况下,消费者是专家。

专家战略可以使复杂的工作变得更容易管理,并帮助员工从已经自动化的角色转变过来。一些目前需要三到五年大学学习的工作在未来可能不需要这么长的教育,因为增强人工智能使复杂的工作更容易管理。

创新战略

最后,创新战略是所有人工智能战略中最先进的。与效率策略截然相反,这种策略围绕着增强人的创造力。

想象一个音乐作曲家使用一些软件创作一首新歌。作曲家添加了一架钢琴、一把吉他和一些鼓。突然,通过观察他们学习了作曲家音乐风格的机器学习算法建议添加某种低音。作曲家听人工智能呈现的低音,并自己决定是否将它包含在歌曲中。然后,人工智能将从作曲家的决定中学习。与专家战略非常相似,创新战略给予人类完全的决策自由。

人工智能可以实时提出后续问题,从而增强招聘人员对求职者进行面试的能力。与此同时,作家可以通过人工智能得到增强,人工智能不仅可以建议他们的词汇和语法,甚至可以在某些主题需要更清楚地解释时通知他们。

当你用 Gmail 回复邮件时,该软件可能会根据邮件和你的写作风格为你建议一个快速回复。这是实施创新战略的一个基本例子。

你应该采取哪种策略?

为了理解对任何给定的活动采用什么策略,我们需要考虑两个变量:数据复杂性和工作复杂性。基于一个活动所包含的复杂性,我们可以找出使用什么样的 AI 策略。

要确定对任何给定的活动使用哪种 AI 策略,您可以检查活动的数据和工作复杂性。图片由作者提供。

低数据复杂性的活动通常是结构化的和简单的:这些活动通常由简单的文本或数字组成。这些数据对计算机来说很容易解释。另一方面,高数据复杂性通常是非结构化的,需要解释。图像、视频、音乐和声音都是复杂数据的例子。虽然机器学习算法可能能够分辨照片的主体是猫还是人,但这取决于主观解释,以确定人是否看起来疲惫、烦恼、不安,或者只是在休息。

工作复杂性是关于确定一项活动是否有明确定义的规则和惯例。如果一项活动有规则和惯例,它就变得可预测,工作复杂性也就低了。然而,如果活动通常是不可预测的和临时的,它需要决策技能,这将导致很高的工作复杂性。请注意,在这种情况下,完成一项活动所需的时间与其复杂性无关。

通过分析一项活动的复杂性,我们可以大致确定适当的人工智能策略:

  • 低数据和工作复杂性:效率策略。
  • 高数据但低工作复杂性:有效性策略。
  • 低数据但高工作复杂性:专家策略。
  • 高数据和工作复杂性:创新战略。

请注意,事情并不总是这样简单明了。如前所述,在决定是否自动化一项活动时,其他因素也会发挥作用。此外,被认为是复杂的东西是不断变化的。今天被认为复杂的数据将来可能会被认为简单。此外,如果一项活动缺乏明确的程序和规则,也许有可能创造它们?我们今天认为不可预测的活动可能是我们将来可以简化的活动。

总之

人工智能可以用来自动化和增强任何活动。

  • 自动化是从一项活动中去除人类的*。*
  • 增强是在一项活动中赋予人类力量的*。*

世界上的每一个人工智能解决方案都可以放在以下四个人工智能战略中的一个或多个战略中:

  1. 效率策略,通过自动化优化活动。
  2. 有效性策略,在这种策略中,活动是无缝的,使得沟通更加容易。
  3. 专家战略,人工智能赋予决策能力。
  4. 创新战略,人工智能使创造力成为可能。

在全自动解决方案中,人工智能做出决定,但人类必须对人工智能的选择负责。在增强解决方案中,人工智能不会自主做出决定。要为你的活动找到最佳的人工智能策略,首先要查看活动的数据和工作复杂性。

为正确的活动实施正确的策略对于一个人的人工智能之旅的成功至关重要。

感谢阅读!如果你想更深入一点,看看我对达美乐比萨做的案例研究和他们的三个人工智能策略:

此外,在我的关于人工智能的非技术性书籍https://thisisrealaibook.com/**:中,你可以找到关于人工智能策略的更详细的介绍,以及 100 个人工智能的现实世界实现

*https://thisisrealaibook.com/ *

数据科学家需要了解的 4 个分类编码概念

原文:https://towardsdatascience.com/4-categorical-encoding-concepts-to-know-for-data-scientists-e144851c6383?source=collection_archive---------6-----------------------

对你的工作有帮助的分类编码概念和应用

分类数据类型是按类别或组划分的数据,例如,性别、教育程度和出生地。分类数据中的每个元素用于对特定标签上的信息进行分组,这与数字数据不同,在数字数据中,数字数据信息是用数字表示的。未处理的分类数据的问题是机器学习问题,其中许多模型不能接受分类数据。这个问题就是为什么我们需要分类编码。

分类编码是我们将分类数据转化为数字数据的过程。有许多分类编码技术,但我想解释一下每个数据科学家都需要知道的基本过程。在本文中,我将概述数据科学家需要了解的四个分类编码概念。让我们开始吧。

1.一键编码(OHE)

一键编码或 OHE 是一种技术,将分类列上的所有元素转换成由 0 或 1(二进制值)表示的新列,以表示类别值的存在。让我们看看下图中的例子。

一键编码过程(图片由作者提供)

如上图所示,一个分类列(Origin)被转换为三个不同的数字列,每个列代表分类数据中的元素。在本例中,值“USA”在一次热编码后将变成“Origin_USA”列,其中 0(不存在)和 1(存在)。

对于没有任何顺序(序数)和基数较小的分类列,一键编码很有帮助。**为什么没有序数和少基数?**因为 One-Hot 编码将分类列中的所有值视为相等,所以删除了序号信息。此外,高基数分类列会产生许多列,导致维数灾难。

还有一点需要注意的是,独热编码可能不适合基于树的机器学习,因为 OHE 在分割期间会导致效率低下。你可能想在下面的文章中读到更多。

让我们使用一个 python 代码示例来更好地理解这个概念。

import pandas as pd
import seaborn as snsmpg = sns.load_dataset('mpg')
mpg.head()

作者图片

在这个例子中,我将使用 seaborn 包中的 mpg 数据集。数据包含我们可以试验的分类和数字列。

下一步,我将使用 Pandas 包,使用一个名为get_dummies的函数来进行 OHE。

pd.get_dummies(mpg, drop_first = True, columns = ['origin'] ).head()

作者图片

我将' drop_first '参数设为 True,以删除上面函数中已转换的第一列。我们这样做是因为信息是冗余的(**虚拟变量陷阱)、**并且其他两列已经包含了被删除列的信息。

2。标签编码

在上一节中,我们讨论了 One-Hot 编码,其中我们将分类列转换为许多不同的数字列。标签编码有所不同—该过程将分类列元素转换为数值,而不需要任何额外的列。让我们看看下图中的过程。

标签编码(图片由作者提供)

从上图可以看出,分类列转换成了数值(小学= 1,高中= 2,依此类推)。

这个过程既简单又有启发性。然而,标签编码大多只适用于有意义顺序的有序或分类数据。在我上面的例子中,我假设“教育”数据是有序数据,因为值之间有一个重要的顺序。此外,标签编码会在数值之间产生相等的间距-如果您觉得分类数据顺序不相似,则标签编码可能无法捕获该信息。

为什么标签编码不适用于非序数数据?因为这会导致优先级问题。机器学习模型通常会泛化高值,其优先级高于低值——如果我们的分类值没有任何有意义的顺序,但将其视为有意义的顺序,则会扭曲信息。

我经常创建自己的函数,但是让我们尝试使用 Sklearn Python 包进行标签编码过程。

from sklearn import preprocessing
le = preprocessing.LabelEncoder()
mpg['origin_le'] = le.fit_transform(mpg['origin'])
mpg.sample(5)

作者图片

标签编码将“原点”列转换为数字列。字母表的顺序决定了价值观;这就是为什么“欧洲”的值被指定为 0,“美国”的值被指定为 2。

然而,正如您所看到的,Sklearn 的标签编码器仅通过使用字母信息来替换数据,这在序数数据的情况下可能是错误的。这就是为什么我经常创建我的转换器,而不是依赖包的功能。

虽然,如果要靠 Sklearn 它提供了OrdinalEncoder类,可以将类别转换成我们指定的标签。

3.哈希编码

独热编码的主要缺点是它产生的特征相当于分类基数,当基数太高时会导致维数问题。缓解这个问题的一种方法是将分类数据表示成较少数量的列,这就是哈希编码所做的。

哈希编码通过 哈希函数 **将分类数据表示成数值。**哈希经常用于数据加密或数据比较,但主要部分仍然是相似的——使用哈希函数将一个特征转换为另一个特征。

我不会深入解释散列过程,但是你可以阅读下面的文章来理解最常用的散列函数之一,https://ieeexplore.ieee.org/document/5474379

使用哈希编码的主要优点是,您可以控制该过程产生的数字列的数量。您可以用五列 25 或 50 个值(或任何您想要的数字)来表示分类数据。让我们试着用一个编码例子来做哈希编码。

首先,让我们安装一个名为[category_encoders](https://contrib.scikit-learn.org/category_encoders/index.html)的特定分类编码包。

pip install category_encoders

该 Python 包包含许多用于分类编码过程的函数,并与 Featuretools 包(为配合 Featuretools 而开发的 category_encoders 包)配合使用。你可以看看我下面的文章,了解 Featuretools 做了什么。

**

使用 category_encoders,让我们尝试对示例 mpg 数据集中的类别数据进行哈希编码。我们的数据集包含 13 基数的“model_year”数据,我想将它转换成五个数字特征。为此,我们可以尝试下面的代码。

import category_encoders as ce
encoder=ce.HashingEncoder(cols='model_year',n_components=5)hash_res = encoder.fit_transform(mpg['model_year'])
hash_res.sample(5)

哈希编码结果(图片由作者提供)

哈希编码将返回代表分类数据的数字特征。让我们将散列编码结果与原始数据连接起来进行比较。

pd.concat([encoder.fit_transform(mpg['model_year']), mpg], axis =1).sample(5)

作者图片

从上图中我们可以看到,“model_year”数据已经转换为数值 0 或 1,机器学习模型可以使用这些数据进行训练。

然而,哈希编码有两个明显的弱点。首先,因为我们将数据转换成较少的特征,所以会有信息损失。第二,由于大量的分类值被表示为少量的特征,不同的分类值可能由相同的哈希值表示-这被称为冲突

但是,许多 Kaggle 竞争对手使用哈希编码来赢得竞争,所以值得一试。**

4.省去一个编码(LOOE)

留一个编码类似于目标编码,但是它增加了一个步骤来处理过度拟合。为了理解 LOOE 过程,让我先试着解释一下目标编码的概念。目标编码技术是使用目标(y)信息将分类数据转换成数值的分类编码。让我们使用一个示例图像来更好地理解这个概念。

目标编码示例(图片由作者提供)

我们将“Pclass”作为我们的独立特征,并将“Survived”作为上图中的目标。当应用目标编码技术时,它将类别 2 的值转换为 0.5,类别 3 的值转换为 0,类别 1 的值转换为 1。这种转换基于“幸存”数据或目标的信息。

这个过程很简单—每个元素(类 1、类 2、类 3)的幸存类总数(1)除以每个类的总数。类别 2 具有 1 个幸存和 1 个未幸存,当使用目标编码技术时,这反映为 1/2 或 0.5。

除了 LOOE 在计算中排除当前行的目标以减轻异常值影响之外,留一个编码与目标编码有一个精确的方法。这意味着对于每个类,目标的真类和假类之间的计算结果可能是不同的。LOOE 函数也可以引入高斯噪声分布来减少过拟合。

让我们使用一个代码示例来更好地理解这个概念。我将使用 seaborn 的泰坦尼克号数据集作为这个样本。

titanic = sns.load_dataset('titanic')#Passing value 0.1 at sigma parameter to introduce noise
loo_encoder=ce.LeaveOneOutEncoder(cols='pclass', sigma = 0.1)loo_res = loo_encoder.fit_transform(titanic['pclass'], titanic['survived']).rename(columns = {'pclass': 'loo_pclass'})pd.concat([loo_res,titanic], axis =1).sample(5)

作者图片

上图显示“loo_pclass”特征是基于独立和目标的分类编码。但是,每个' loo_pclass '都有不同的值,即使在目标和独立中有相同的值。这是因为我们在分类编码过程中引入了噪声。

不要忘记,我们使用 LOOE 是基于目标数据的,特别是在将数据分成训练和测试数据之后。训练数据是我们拟合 LOOE 并转换训练和测试数据的地方。

结论

分类数据本质上不同于数值数据,在用于机器学习建模问题之前需要预处理步骤。

在本文中,我概述了数据科学家需要了解的 4 种分类编码技术;它们是:

  1. 一键编码
  2. 标签编码
  3. 哈希编码
  4. 省略一个编码

希望有帮助!

如果你喜欢我的内容,并想获得更多关于数据或数据科学家日常生活的深入知识,请考虑在此订阅我的 简讯。

如果您没有订阅为中等会员,请考虑通过 我的推荐 订阅。

访问我的LinkedInTwitter

人工智能行业现在需要的 4 个变化

原文:https://towardsdatascience.com/4-changes-the-ai-industry-needs-right-now-7faffce0d301?source=collection_archive---------9-----------------------

人工智能|观点

我很乐意看到这些发生。

卡廷在快门架上拍摄的照片(已编辑)

人工智能正在承受过于成功的后果。

几个月前,我写了一篇题为“我离开人工智能行业的 5 个原因”的文章,在文章中,我坦率地批评了人工智能的缺陷——这可能是这篇文章火起来的原因。这与其说是一篇经过深思熟虑的文章,不如说是一篇慷慨激昂的文章,但我还是袖手旁观了我当时写的大部分内容。然而,那篇文章中缺少了一些东西。我抨击这个行业,但从未提出改进方案。

人工智能的成功削弱了它的现状。它转移了大量的资金,因为它赋予了无与伦比的力量——军事的、经济的、甚至社会的。这就是为什么任何有新闻价值的里程碑事件都会影响私人利益和公众舆论。正是这种影响世界的能力导致了人工智能行业出现问题。

在这篇文章中,我不会列举让我离开这个行业的原因,我会具体说明会让我回来的变化。我希望看到的变化。人工智能行业迫切需要的变革。

利益和资金的多样化

流行的变压器架构——由谷歌科学家在 2017 年发明——是一种证明卷积和递归没有必要的捷径。注意力是我们所需要的,作为简单的爱好者,AI 人利用这个想法在 NLP 中建立了一个新的分支;大型语言模型(LLM)。

LLM 是非常大的神经网络(数十亿个参数),已经掌握了语言的形式和结构。以 OpenAI 的 GPT-3 为旗舰,它们构成了人工智能两个当代趋势的最大指数:即“越大越好的想法和大型科技公司已经接管该领域的可悲事实。

将模型变大的趋势(原则上为神经网络提供了映射更复杂的输入-输出关系的能力)遵循缩放假设。这是一种信念,即通过将大量数据和计算能力投入到相同的算法中,复杂的行为可以在人工智能系统中出现。这也是通往 AGI 的一条直路的承诺。

因为我们已经开始相信越大越好,所以不可避免的是,只有一小群大公司才能推动这个领域向前发展。那些有足够财力购买超级昂贵的硬件、训练和部署大规模模型,并将它们转化为可商业化的产品的人。全世界的谷歌、亚马逊和微软正在获得资金、专业知识——或者说立即收购顶尖的创业公司——以及利润。

巨大的壁垒保护这些公司免受任何竞争。他们是艾金矿的老板。或者铜矿,因为这些模型可能不像一些人认为的那样特殊——我敢打赌,这些模型获得的兴趣和它们的真正用途之间只有适度的相关性。然而,正如 Emily M. Bender 几个月前在 Twitter 帖子中解释的那样,它们一直掩盖着其他研究项目:

除非研究兴趣和项目资金都多元化(研究人员有其他兴趣,但他们会因为选择不跟随 LLM 趋势而危及发表论文的机会),否则人工智能领域几乎不可能克服深度学习革命导致的瓶颈。

人工智能已经成为行业巨头创造赚钱应用的工具。再多一点。

人工智能不再是揭示人类智力和行为秘密的努力。少数几个牢记最初使命的研究小组——deep mind 和 OpenAI 等——已经被不道德的大鱼吸收了。只要对利润的渴望主导着这个领域——与允许大量的科学好奇心蓬勃发展形成对比——它就无法逃脱这种局面。

有节制的炒作——与结果一致,而不是幻想

马文·明斯基,可以说是人工智能创始人中最杰出的一位,在 1967 年说“在一代人的时间内……创造‘人工智能’的问题将会得到实质性的解决。”他错误预测了人类水平的人工智能出现半个世纪——而且还在继续。55 年后,真正的人工智能仍然遥不可及,但所谓的专家不断预言,在几年后,AGI(人工智能)将成为现实。

当然,不是每个人都同意。但是,仅仅几个响亮的声音宣称我们比实际上更接近 AGI,就足以将炒作推向高潮。大肆宣传之后很快就会有大量的资金,当预期没有实现时,这些资金就会枯竭。可悲的是,制造宣传比恢复信任要容易得多。通过未兑现的承诺对信任的持续攻击是导致过去两个人工智能冬天的原因。我们不希望这种事再次发生。

我们很幸运,深度学习革命——或者我应该说是复活——正在维持一个永无止境的工业应用的温暖夏天。从人脸识别到语言翻译器,再到无人驾驶汽车(嗯,不。尽管有些人希望我们相信这些,但它们还没有准备好)。然而,人类水平的智能机器似乎和明斯基做出预测时一样遥远。我们在模式检测和识别方面取得了很大进步(这很好,不要误会我的意思),但在推理、常识或决策方面却进展甚微。

每当科学向前迈出一小步,炒作就会跃进——结果却是惨败。

流行的语言模型 GPT-3 是无节制炒作的典型例子。它擅长生成语言。好到人们认为它的特性远远超出了它的实际能力。“自我意识、“一般智力、或能够“理解”是他们归因于该模型的一些特征。当其他人开始指出它的缺陷和弱点时,科技杂志回应了这种感觉,但为时已晚。Hype 的工作正在上升;事后是否被打倒并不重要。伤害已经造成,大多数人现在觉得我们正处于人工智能爆炸的边缘。

我们为什么要这样做?当人们一次又一次地未能预见未来的发展时,为什么人们会不断地相信炒作的新闻呢?两个因素:希望(恐惧)和偏见。

我们要么满怀希望,要么害怕(或者漠不关心,尽管这些在这里并不重要)在我们的有生之年看到 AGI 的发展。一些人希望它发生,而另一些人非常害怕他们已经在采取措施。欲望和恐惧都让我们相信它会比证据显示的更快发生。

例如,雷·库兹韦尔,一位超级有希望的研究人员,预测我们将在 2029 年实现 AGI(是的,8 年后)。但是他的论点是基于数学上的不精确性。他说人工智能——以及总体技术——呈指数级进化。但事实是“自然界中没有什么遵循真正的指数”——更不用说所有肯定会影响人工智能发展的外围维度,如社会动荡、伦理限制或来自恐惧人群的阻力。

库兹韦尔渴望体验 AGI,这影响了他的判断,并扭曲了事实。

但这并不是故事的结尾。有些人充满希望,有些人则充满恐惧。然而,如果我们都有共同点,那就是我们都有偏见。我们倾向于拟人化任何勉强流露出人性的东西。一块长着一双眼睛的石头会让我们想去抚摸它。看着辣椒告诉我你不想带回家。我们甚至给我们的房间取名为 T7!

胡椒试图融化你的心——照片由 Shutterstock 上的 Balipadma 拍摄

尽管机器人有让我们感受爱或联系的意想不到的技能,但在所有这些电线和芯片背后,它们没有头脑。我们表现得像他们一样,因为我们进化到假设他人的心理状态(这在认知科学中被称为心理理论)。比起理解人类意识,我们可能离向机器人灌输心理理论更远。

除非我们学会控制让我们创造和相信炒作新闻的因素,否则人工智能的努力很有可能永远达不到我们的预期——不管人工智能专家真实地描绘了艺术的状态,这并不总是如此。我们无法控制自己固有的机制,但意识到这些机制让我们有能力怀疑自己的信仰。

我们越是用结果而不是幻觉来调整我们的预期,人工智能领域就越健康。

促进开放源码反对垄断

OpenAI 一开始是个好人。他们肩负着实现 AGI造福全人类的光荣使命。那是一个非盈利的研究机构,可以自由地追求崇高的目标。当他们决定以开源方式向公众发布 GPT-2 时,他们已经通过与微软的合作改变了他们最初的目的。

这家老牌科技公司——由于其垄断行为,在 20 世纪 90 年代末和 21 世纪初每隔一天就会成为头条新闻——以 10 亿美元的投资购买了 OpenAI 技术的独家许可。随着微软的钱从口袋里掉出来,OpenAI 能够建造 GPT-3。但是,他们没有开源,而是决定为极少数愿意尝试的幸运开发者建立一个私有 API。早期测试人员的噪音足以营销 GPT-3,并将其转化为人工智能超级明星。

人们很愤怒。OpenAI 背叛了他们的使命。人们不得不加入等候名单,再也没有他们的消息。少数几个有兴趣的非营利项目的人不得不放弃,因为 OpenAI 在其定价计划中设定了难以承受的成本。只有那些赚钱的人活了下来。在看不到其他竞争者的情况下(那些可以竞争的人没有使用他们的系统赚钱),他们无休止地利用 GPT-3——以至于允许项目与他们的用例指导方针发生潜在冲突。

open ai-微软团队实际上已经成为一个伪垄断者。OpenAI 为 GPT 3 号设定的价格并不重要。如果你想使用一个复杂的 LLM 的能力,你必须付费。人们试图用 GPT-2 号来竞争,但很明显 GPT-3 号在每项任务中都胜过它。

如果你没钱支付 GPT-3,那么你就出局了。

一个试图跟上 OpenAI 快速发展 LLMs 的项目是 EleutherAI 。这组开发人员负责创建 GPT-J ,这是 GPT-3 最接近的开源竞争对手。他们一直从 CoreWeave 那里获得计算资源,core weave 一直“非常热衷于”帮助他们“打破微软对 LLMs 的垄断”。

正是这类旨在提供不求回报的集体项目,才是我们应该用现有手段大力支持的。

OpenAI 和微软正在阻止全世界的研究人员研究和分析 GPT-3 的行为(OpenAI 现在已经开放了 API ,但是定价是一样的)。当拥有模型的公司只让那些利用它获利的人进来时,科学家如何推进我们对人工智能的理解?

开源替代方案可以有效地从大型技术手中夺走权力,并使尖端人工智能模型民主化。

关注认知科学

在之前我已经说过这个,我会继续说下去。AI 需要大脑。

人工智能的存在是因为我们聪明。我们的认知能力赋予我们被研究的价值和研究自己的能力。大脑是这种独特组合的中心。人工智能试图复制人类智能,而认知科学研究大脑和思维。他们关系密切,但似乎已经忘记了对方。

人工智能领域最初是寻求创造能够在不同活动中复制人类专长的电子系统——并最终复制我们智能的一般性质。神经网络最初被忽视,但科学家们意识到实现真正人工智能的最合理途径是遵循进化的步骤,这是一个时间问题。正是在这种思维框架下,沃伦·麦卡洛克和沃尔特·皮茨定义了有史以来第一个人工神经元模型。

麦卡洛克-皮茨神经元。作者图片

自该模型诞生以来的 80 年里,人工智能几乎没有更新过对神经元的理解。深度学习书籍仍然教授类似的模型,尽管大量 神经科学 文献指出了许多错误的假设和未精炼的限制。正如我在的上一篇文章中所写的那样:“[AI]从未屈尊再看一眼自己的前提,并将它们与神经科学的相关发现进行对比。”

当人工智能科学家们与研究他们想要模拟的事物的领域分道扬镳时,他们如何解决他们最渴望的目标?一些人认为,人工智能可以找到另一种独特的智能方式。进化定义了一条路径,但不一定是唯一的。确实如此。但是,为什么不选择我们知道会给出更可靠结果的方向,而不是去寻找与我们的普遍熟练程度相差甚远的狭窄应用程序呢?

神经形态计算可能有答案。这是计算机科学的一个分支,融合了人工智能软件和硬件:他们押注于设计更接近大脑结构和功能元素的芯片。前提是我们不会在计算机硬件上实现 AGI 模拟虚拟神经网络。电脑和人脑太不一样了。

几十年后,我们会意识到我们离创造 AGI 还有多远。我们会把手放在头上问,尽管我们把难以置信的大量数据和计算塞进算法,我们怎么可能没有实现我们的目标。深度学习对于一些问题来说很棒,但它不是万能的。GPT-3 取得了非凡的语言技能,但它仍然犯错误,揭示了它对世界不存在的理解。AlphaZero 比任何人都擅长下棋,但如果你教它围棋,它会忘记怎么玩。他们两人都没有实用主义的世界知识。

神经科学没有所有的答案。但是,对于这两个问题,我们已经问了几十年的问题,以及我们在未来将要面对的问题,它肯定有一些答案。人工智能可以从那些更了解大脑的人那里学到很多东西,但深度学习正朝着相反的方向发展。

最后,我想在这里以见证人的身份做一个大胆的预测:无论神经网络规模(我说的是许多万亿个参数或更多)、数据集规模(互联网上的所有文本或所有图像和视频数据)和计算能力如何,只要我们继续将努力限制在深度学习上,我们都不会实现人类级别的 AI。

我们需要新的范例。我们会发现他们在观察我们的大脑。

如果你喜欢这篇文章,可以考虑订阅我的免费周报 【明天的想法】 !每周都有关于人工智能和技术的新闻、研究和见解!

您也可以直接支持我的工作,使用我的推荐链接 这里 成为中级会员,获得无限权限!:)

Julia 网站开发的 4 个酷包

原文:https://towardsdatascience.com/4-cool-packages-for-web-development-in-julia-cb99b0059025?source=collection_archive---------17-----------------------

用 Julia 比较不同 web 开发包的优缺点

(src =https://pixabay.com/images/id-921039/

介绍

W 随着 Julia 语言的广泛应用,尤其是在科学计算领域,web 开发很可能不是该语言的首要考虑因素。毕竟,有很多语言在 web 开发方面做得很好,而 Julia 真的不是其中之一。尽管如此,Julia 确实有一个中等规模的网络生态系统。虽然这些包中的大多数做更多的以数据为中心的事情,但是在 Julia 生态系统中有一些很棒的包可以用于传统的 web 开发。

有几个不同的原因可能会让你想在 Julia 中开发一个网站或页面。首先,总是有希望从传统的网络浏览器中与 Julian 数据、方法和工具进行交互的可能性。一个很好的例子就是用于分析的交互式仪表板。更进一步,有些人可能希望根据请求产生管道回报。幸运的是,Julia 确实有一个不错的生态系统,支持数据科学中的许多常见任务。

№1:精灵

https://github.com/GenieFramework/Genie.jl

Genie.jl 是 Julia 中令人敬畏的 web 开发框架的一个经典例子。Genie 的伟大之处在于它已经存在了很长时间,并且确实有机会在某种程度上成熟。这个包本身非常可靠,通常用于在 Julia 中部署端点和处理 web 上的数据。然而,精灵当然不仅仅只有这些能力。

Genie 还使用 Project.toml 文件来处理在 gate 之外生成的依赖关系。这与列表中的许多其他包有很大的不同,因为 Genie 从一个项目模板开始,然后在这个模板上进行构建。真正将 Genie 与我们将要介绍的其他选项区分开来的是它的可靠性、多功能性和可部署性。我发现 Genie 项目非常容易归档。此外,该文档即使不是列表中最好的,也是最好的之一。

当然,Genie 并非没有缺陷。我在 NGINX 中使用 Genie.jl 时遇到了一些问题。有时 NGINX 无法判断是否有一个精灵服务器在运行,这至少是很乏味的。如果精灵安装包含在 Docker 映像中,这将变得更加乏味,因为有一个抽象层需要处理,很难导航。如果您想立即开始使用 Genie,我已经写了一篇文章,全面介绍了使用机器学习模型和 NGINX 部署端点。本文还包括使用 NGINX、Bash 和 Supervisors,因此如果您对这些信息感兴趣,它当然值得一读,您可以在下面这样做:

№2:虚线

https://github.com/plotly/Dash.jl

最近,Dash.jl. Plot.ly 发布了一个 Julia 版本的绘图库(耶!)并发布了他们的 Plot.ly Dash 等价物。最棒的是,现在您可以在 pure Julia 中完整地使用 Plot.ly 生态系统。

在这个包之前,在 Julia 中确实没有一个好的方法来制作交互式仪表板。虽然我们很快将涉及的包肯定可以促进其中一些的创建,但这样做的难度意味着通常项目更侧重于 Dash 而不是分析。不用说,这可能会给分析带来问题。

当然,这个端口正是你所期望的 Plot.ly。这个包是健壮的,允许很容易地集成 Plot.ly 的图形,这使得在 Julia 中制作漂亮的仪表板变得非常容易。除了获得您熟悉和喜爱的 Plot.ly 功能,您还将获得 Plot.ly 拥有的令人难以置信的文档。这使得这个包比其他包更胜一筹。虽然 Genie.jl 在这方面非常接近,但我认为 Plot.ly 可能只是拿走了它的文档。

№3:互动

https://github.com/JuliaGizmos/Interact.jl

另一个很棒的 web 开发包是 Interact.jl。这个包本身通常用于给笔记本增加交互性。也就是说,代码也可以通过 Mux.jl 包放入 web 服务器设置中。当涉及到与 Julia 生态系统合作时,Interact.jl 也有一些非常好的能力。对于 Plots.jl 来说尤其如此,它遵循了与 Plot.ly 的 Dash 与 Plot.ly 的绘图库的交互类似的路径。

也就是说,虽然我不会说交互对于网络开发来说是一个糟糕的选择,但以我的经验来看,它确实很难使用。这个包的一个特别的缺陷是它的文档,它在太少以至于包不可用和仅仅足够完成一些事情之间画了一条细线。因此,这个包很难使用。在使用这个包时,我甚至发现自己在查看源代码,试图了解关于这个包的更多信息,这当然是一个程序员不想做的事情。

此外,Mux.jl 的功能可能会有很多问题。如果可能的话,我肯定会避免这个包。问题是,这并不总是可能的,所以虽然从我的主观观点来看,这是一个值得了解的包,但对于生产中的任何东西来说,这都是一个很难推荐的包。

Interact.jl 的一个优点是它具有难以置信的可扩展性。该模块使用 Cairo 图形库,这是 Julia 中显示各种图形的一个非常流行的选择。这很棒,因为这意味着 Interact 能够立即查看来自完全不同的包的类型,这些包也使用 Cairo。您还可以创建自定义小部件来添加到表单中,这些小部件相对容易操作,并且遵循可组合的声明性语法。

№4:眨眼

https://github.com/JuliaGizmos/Blink.jl

本文中我想介绍的最后一个包是完全不同的东西,Blink.jl。与列表中的其他选项不同,Blink 不提供 web 服务器来交付基于 web 的内容。相反,Blink 更侧重于本地系统上的图形用户界面。

尽管如此,这个包还是派上了不少用场。我曾经想制作一个 GUI 来与我连接到计算机上的 CO 传感器进行交互,为此我使用了 Blink.jl。像这个列表中的其他一些包一样,Blink 的文档也足够好。虽然它不像 Interact 的那么可怕,但它甚至无法接近 Genie 的美丽,尤其是 Plot.ly 的 Dash。

尽管如此,我仍然认为这是一个非常好的工作和学习包。这个包确实派上了用场,这也是很多 Julia 项目依赖这个包来完成工作的部分原因。和 Interact 一样,这个包也使用了 Cairo。这提供了所有与 Interact 相同的兼容性优势,因此它肯定是值得研究的东西。

结论

Julia 生态系统中既有成熟的、已建立的 web 开发包,也有一些相对较新的、可能更难使用的包。幸运的是,有一些不同的例子,它们都有各自的缺点和优点。有些还有独特的用途,比如 Blink.jl。非常感谢您阅读本文,希望您喜欢!

你应该知道的 4 个很酷的 Python 库

原文:https://towardsdatascience.com/4-cool-python-libraries-that-you-should-know-about-bea9619e481c?source=collection_archive---------6-----------------------

大蟒

发现您应该在下一个项目中尝试的有用的 Python 库

图片由安德里亚·皮亚卡迪奥提供。来源: Pexels

我的一些最受欢迎的博客是关于 Python 库的。我相信它们如此受欢迎是因为 Python 库有能力为我们节省大量时间和麻烦。问题是大多数人关注那些最流行的库,但是忘记了多个不太知名的 Python 库和它们最著名的同类库一样好。

寻找新的 Python 库也会有问题。有时我们读到这些很棒的库,当我们尝试它们时,它们并不像我们预期的那样工作。如果这曾经发生在你身上,不要再害怕了。我支持你!

在这篇博客中,我将向您展示四个 Python 库,以及为什么您应该尝试它们。让我们开始吧。

QuickDA

我不久前写了 QuickDA,我仍然对它的效果感到惊讶。顾名思义,QuickDA 是一个易于使用的低代码库,它用很少的代码行执行数据清理、数据探索和数据可视化。QuickDA 可以节省您的工作时间,它有如此多的酷功能,以至于我不得不写了两篇博客来介绍最显著的功能。你可以在这里找到它们这里和这里。

QuickDA 最好的部分是它使用了 Pandas、Matplotlib、Seaborn 和 Plotly 等库。因此,一旦你开始使用它,你就会感到熟悉。比如你还记得熊猫的.describe()功能吗?QuickDA 可以做到这一点,但方式有所改进。

正如我们在下面看到的,它返回关于特征的统计信息,但是它还包括对象类型、空值和唯一值的数量以及数据的偏斜度。

作者图片

使用 QuickDA 可以轻松快速地获得见解。您可以获得一个概述,包括关于数据集的警告(稍后将详细介绍警告),并使用一行代码可视化数据。你不需要输入无数行代码来得到一个图表。

作者图片

当我说您可以得到关于数据集的警告时,我指的是什么?QuickDA 可以显示高基数、要素之间的高相关性、高百分比的缺失值和高百分比的零。

作者图片

QuickDA 有很多更酷的特性,我强烈推荐你去看看。我已经用这个库 和写了 用一行代码用 Python 创建数据可视化 来找到关于它的更多信息。

ELI5

机器学习模型不仅关乎模型预测的准确性,还关乎它如何预测。有时,我们需要了解哪些特征在驱动预测,以优化模型或解释模型。例如,在一个自然语言处理分类问题中,如何轻松地看出哪些单词影响了预测?这正是 Eli5 的用武之地。

Eli5 帮助你调试机器学习分类器,解释它们的预测。它支持最流行的机器学习框架和软件包,如 scikit-learn、Keras、XGBoost、LightGBM 和 CatBoost。前一阵子,我做了一个 NLP 项目,对酒店评论进行分类,我必须知道哪些词对好评论和坏评论的影响最大。Eli5 非常方便。让我告诉你怎么做。

**# Install Eli5**
!pip install eli5**# Importing Eli5** 
from eli5.sklearn import explain_weights_sklearneli5.explain_weights(**model**, feature_names = **X_train**.columns.values.tolist(), top = **#_of_features**)

作者图片

这就对了。我们可以看到,Eli5 返回了一个颜色编码的表,显示了模型中权重最高的特性。我们可以看到,该模型能够识别正面评论为优秀和伟大的单词,以及负面评论为肮脏和粗鲁的单词,这是有意义的。

如果您喜欢熊猫数据帧,也可以使用下面的代码:

from eli5.formatters import format_as_dataframeexplanation = explain_weights_sklearn(**model_name**, feature_names = **X_train**.columns.values.tolist(), top = **#_of_features**)
format_as_dataframe(explanation)

作者图片

Eli5 是一个很好的库,可以为您节省一些时间。它还有其他功能,你可以在这里找到。

打开数据集

假设你正在启动一个项目,练习你的数据分析和机器学习技能;你从哪里开始?大多数人去 Kaggle,找到一个感兴趣的数据集,下载文件,在 Downloads 文件夹中找到文件,然后把文件拖到你正在处理的笔记本所在的文件夹中。相当多的步骤,对不对?如果有更好的方法呢?这就是 OpenDataSets 要解决的问题。

OpenDataSets 允许我们从笔记本上下载数据集。它将创建一个与数据集在同一个文件夹中的文件夹,这样您的笔记本可以节省一些时间。很酷,对吧?

要使用它,你只需要在你的终端输入pip install opendataset。然后,您需要通过输入import opendatasets as od将其导入到笔记本中,您就可以开始工作了。Kaggle 会要求您提供凭据,但您可以在 Kaggle 个人资料页面轻松获得。在下面的例子中,我想下载著名的心脏病数据集。以下是您需要的代码:

import opendatasets as odod.download("[https://www.kaggle.com/rashikrahmanpritom/heart-attack-analysis-prediction-dataset](https://www.kaggle.com/rashikrahmanpritom/heart-attack-analysis-prediction-dataset)")

作者图片

正如你在上面看到的,图片左边的文件夹没有心脏病数据集的文件夹。然而,只要我运行代码,它就会为我下载数据集。您可以看到数据集是解压缩的。这再容易不过了。

逗号

Comma 是那些直到需要时才知道自己需要的库之一。逗号使得处理 CSV 文件更容易。例如,您可以轻松地从列表或字典中的 CSV 文件提取信息。这是它如何工作的演示。

首先,你可以在你的终端中输入pip install comma来安装逗号,然后你就可以开始了。现在让我们导入逗号和我们将使用的数据集。

import commatable = comma.load( '[https://raw.githubusercontent.com/DinoChiesa/Apigee-Csv-Shredder/master/csv/Sacramento-RealEstate-Transactions.csv'](https://raw.githubusercontent.com/DinoChiesa/Apigee-Csv-Shredder/master/csv/Sacramento-RealEstate-Transactions.csv'))

作者图片

顶部的表格是用逗号创建的。我还创建了一个表格,用熊猫来做比较。他们看起来几乎一模一样。现在,假设您想以列表的形式获取一列的值。您可以使用以下代码轻松做到这一点:

table[0:4]['**column_name**']

作者图片

如果您想以字典的形式获取某一行的信息,也可以通过键入table[0]来轻松实现。

作者图片

我知道你也可以在熊猫身上这样做,但是这需要更多的代码。如果您需要经常这样做,逗号可能会节省您一些时间。这绝对是一个著名的图书馆。

结论

今天我们去了一些你应该知道的图书馆。有些并不适合所有人,只有在你需要的时候才有意义。然而,当这一时刻到来时,你会发现你可以节省几个小时的宝贵时间。

如果你想了解更多的库,请查看你不知道的 5 个 Python 库,但应该3 个你应该知道的 牛逼的 Python 库,以及 3 个你应该知道的 牛逼的 Python 库。感谢您的阅读和快乐编码。

Python 初学者的 4 个酷技巧

原文:https://towardsdatascience.com/4-cool-tips-for-python-beginners-15746cd1d6f1?source=collection_archive---------22-----------------------

小而有用的一口

由 Unsplash 上的网络甜甜圈拍摄的照片

Python 是数据科学生态系统中的首选语言。Python 在数据科学家中如此受欢迎的原因之一是它提供了丰富的库选择。

在本文中,我们不会关注任何库。相反,我们将讨论基本 Python 的 4 个小但非常有用的技巧。这些技巧对于外部库也很重要,因为它们采用了基本 Python 的特性。

1.对列表进行排序

List 是 Python 内置的数据结构。它是有序的项目集合。条目的顺序很重要,因为我们用它来索引和切片一个列表。

我们可以使用 sort 方法对列表进行排序。然而,我们应该小心如何使用它。一个常见的错误是试图将排序后的列表赋给一个新变量。

考虑下面的例子。

a = [3, 1, 6, 2]a_sorted = a.sort()

你可能认为“a_sorted”是一个包含“a”的排序元素的列表。让我们检查一下。

a_sorted

它不返回任何内容,因为它不包含任何值。实际上,“a_sorted”的值是 None。sort 方法就地工作,这意味着它对列表“a”进行排序,但不返回任何内容。

a
[1, 2, 3, 6]

如果你想对一个列表进行排序并将它赋给一个新的变量,你可以使用 sorted 函数。

a_really_sorted = sorted(a)a_really_sorted
[1, 2, 3, 6]

2.反转一根绳子

字符串是有序的字符序列。就像列表一样,我们可以对字符串进行索引或切片。Python 在分割有序序列方面非常灵活。切片的工作原理如下:

[START:STOP:STEP]

我们可以分别使用起始值和停止值来指示切片的开始和结束。步长用于指定步长。

mystring = "abcdefgh"mystring[1:7:2]
'bdf'

我们从索引 1 开始,它是字母 b。然后我们每隔一个字符取一次,直到第七项。需要注意的是,不包括上限。

我们可以使用切片操作来反转一个字符串。你可能会在求职面试中遇到这个问题。我们从头开始,直到结束。步长应为“-1”,这意味着后退 1 步。

mystring = "Python is awesome"mystring_reversed = mystring[::-1]mystring_reversed
'emosewa si nohtyP'

如果将开始和停止部分留空,切片将从字符串的最开头开始,一直到结尾。

3.集合与列表

集合也是项目的集合,但它是无序的,只包含唯一的项目。我们可以向列表和集合添加新项目。不过还是有一点小小的不同。

让我们首先创建一个包含相同项目的列表和集合。

set_a = {1, 2, 3, 4}list_a = [1, 2, 3, 4]

当我们想要向列表中添加一个新的条目时,使用 append 方法,因为需要考虑顺序。另一方面,add 方法用于向集合中添加新项。

set_a.add(5)
print(set_a)
{1, 2, 3, 4, 5}list_a.append(5)
print(list_a)
[1, 2, 3, 4, 5]

新项目被追加到列表的末尾。新项目也会显示在集合的末尾,但并不总是如此。我们不能真正谈论一个集合的开始或结束,因为它不拥有一个顺序。

4.小心动态类型

Python 是一种动态类型语言,这意味着变量的类型只能在运行时确定。对于开发者来说,这是一个非常酷的特性。但是,如果不小心使用,可能会导致问题。

让我们做一个例子来强调动态类型是什么意思。例如,变量“my_number”保存的值 4 是一个整数。

my_number = 4type(my_number)
int

我们可以更改“my_number”的值,它不必是整数。

my_number = '4'type(my_number)
str

my_number 的值仍然是 4,但它是一个字符串。在这种情况下,Python 不会引发错误。变量的类型会自动更新。像 C++这样的静态类型语言就不是这样了。你需要明确定义变量的类型。

我认为动态键入是一个很酷的特性,但是如果不小心使用,它可能会引起问题。例如,我们可以使用“+”运算符将整数和字符串相加。

4 + 4
8'4' + '4'
'44'

因此,如果我们使用字符串而不是整数来执行加法,我们将不会得到一个错误,但我们会得到意想不到的结果。

结论

我们已经介绍了 4 个小而有用的 Python 技巧。你可能并不总是需要使用它们,但在某些情况下它们会派上用场。请记住,有时细节是决定成败的关键。

感谢您的阅读。如果您有任何反馈,请告诉我。

2021 年,每个雇主都将要求数据科学家具备的 4 项关键技能

原文:https://towardsdatascience.com/4-critical-skills-for-data-scientists-in-2021-cb28ae2bcd1?source=collection_archive---------49-----------------------

商业科学

想得到工作,你必须磨练意想不到的技能

由格伦·卡斯滕斯-彼得斯在 Unsplash 上拍摄的照片

我的公司 Evo 正在扩张,这意味着我们在最近几个月经历了几个招聘周期,这种情况将持续到 2021 年。我们正在寻找能够立即投入工作并迅速融入团队的数据科学家。

然而,我们一直在努力寻找合适的人。这并不是说技术技能不存在。我们看到数百个应用程序拥有多年的高级数学、统计建模经验、编码技能,以及对 Pandas 和 Numpy 等 Python 库的熟悉。不幸的是,很多应聘者没能突出*对成功至关重要的非技术技能 作为数据科学家*

是的,你显然需要技术技能来执行任务,但你可以在工作中快速学习技术技能。如果您对如何编码有一个基本的了解,那么您可以将这些技能应用到新的语言中,并切换到其他环境和库,而不会有太多的麻烦。教一个人软技能需要更长的时间,而软技能对于优化部署这些技能至关重要。

新冠肺炎危机让大数据变得更加重要。2021 年对数据科学家的需求将会更大——但只有那些具备迎接这一时刻所需的独特技能的数据科学家。2021 年,每个雇主都希望数据科学家具备四项关键技能:每个求职者都需要从一开始就展示的技能。

1.通讯技能

Amy Hirschi 在 Unsplash 上拍摄的照片

客户永远是第一位的,所以我们与客户保持着持续、开放的沟通。无论是在交付的解决方案中还是在简单的沟通中,每个数据科学家都需要能够有效地响应客户的请求、问题和顾虑。

*仅仅有一个解决业务问题的模型是不够的。你还需要能够解释模型是如何工作的,以及为什么它会提出一个特定的建议。只是 11%的公司 使用人工智能获得了显著的投资回报。 **为什么?*他们不明白它是如何工作的,反过来也不信任推荐或正确使用人工智能。这导致机会成本在后 Covid 时代难以为继。 AI 必须 无障碍 才能兑现承诺。为此,数据科学家必须是优秀的沟通者

当然,并不是所有的角色都与客户直接接触。然而,即使对于可能永远不会与单一客户交谈的候选人来说,清晰的沟通也是优先考虑的。像许多公司一样,Evo 今年过渡到了完全远程的工作场所,自成立以来,我们的团队成员遍布世界各地。没有强大的沟通技巧,远程协作是不可能的。

为了完成关键任务,无论您是从头开始开发新功能还是调试代码,您都需要能够快速、简明地向项目中的其他人解释您的工作。沟通能力差=浪费时间和困惑。沟通不畅导致公司每年平均损失 6240 万美元的生产力。目前没有公司能负担得起。

2.项目管理知识

照片由 William Iven 在 Unsplash 上拍摄

2020 年的另一个趋势是,越来越多的人转移到远程工作:员工越来越独立。

团队成员必须管理他们自己的工作,在没有办公室结构的情况下,个人对可交付成果负责。

在招聘过程中,我们需要确定新员工不会觉得这种独立性和个人责任压倒一切。可论证的项目管理专业知识是衡量这一点的简单方法。即使只是在较小的层面上,比如作为业余爱好管理一个个人编码项目,或者领导一个大学课程的项目团队。

从 2021 年起,对项目管理技能的需求只会越来越重要。在这个后 Covid 的世界里, 数据科学家必须更加敏捷地应对不断变化的条件。每个团队成员都必须能够兼顾关键任务并进行调整,而不会迷失最终目标。这些都是你在管理自己的项目时发展的技能。即使是初级职位,一些项目管理经验也会让你成为更好的候选人。

3.自动化思维

詹姆斯·哈里森在 Unsplash 上拍摄的照片

2021 年的一个顶级技术趋势将是自动化。企业已经认识到,人工智能驱动的自动化是数字时代竞争的最佳方式。银行和保险公司预测,到 2025 年,基于人工智能的自动化将增加 86%,超自动化已被 Gartner 再次列为 2021 年的关键战略趋势。

这如何适用于潜在的数据科学家?如果普通员工需要重视人工智能自动化以取得成功,数据科学家必须进一步拥抱它。仅仅知道如何创建自主模型是不够的;在你设计一个算法的时候,你必须优先考虑它。自动化必须驱动你,并成为你所构建的一切不可分割的一部分。商业科学必须是自主的,而不仅仅是数据驱动的,才能有效,每个数据科学家都必须实际上是商业科学家。

自动化第一的思维模式让候选人脱颖而出。

另外,自动化思维可以节省时间!当你自动化你自己的简单和重复的任务时,它释放你去关注更复杂和更有价值的——更不用说更有趣了!项目。当自动化是未来的时候,没有公司会雇佣一个抵制自动化的数据科学家。

4.商业头脑

拍摄的照片来自 Pexels

正如我上面提到的,**每个数据科学家都必须是商业科学家才能被雇佣**。有什么区别?

数据科学家受数据驱动:这是一些数据;我们能用它做什么?商业科学家被商业目标所驱动:这里有一个商业问题;数据表明我们可以做些什么来解决这个问题?

我提倡商业科学而不是数据科学是有原因的:数据只有在你利用它来解决正确的商业问题时才有帮助。除非你知道你的客户和你的行业面临什么样的挑战,否则你永远不会接近实现优化。

当我们评估一个候选人时,我们不在乎你是否能创造出世界上最优雅的算法,除非数据的使用服务于商业目标。了解其中的区别需要敏锐的商业头脑。作为一名数据科学家,您必须了解您的企业想要解决的问题,以便有效地利用数据并提供准确可行的分析。在 2021 年,如果你没有明显的商业知识,并且不熟悉你的客户所在的领域,你就不可能被录用。

2021 年被聘用的秘密

来自像素的像素的照片

2021 年被雇佣的秘密毕竟不是秘密;与你的高技能相匹配的是软技能。在简历上突出你在这四个领域的成功,并附上你的技术成就,以确保获得工作。

如果你现在正在寻找一份数据科学家的工作,你的前景很好。对数据科学家的需求正在快速增长,并且高需求熟练的数据科学家。但这并不重要,除非你能证明你不仅仅是一个精通技术的数据科学家。你必须是一个真正的商业科学家,磨练过这四种技能。

PS 我定期写商业科学。推荐后续阅读:

*</5-ways-business-science-will-transform-the-supply-chain-in-2021-626b8f17efda>

Monthly Business Science in your inbox, new software, and University-level learning:[**Free access**](https://evouser.com/register)Questions? Please reach out on [Linkedin](https://www.linkedin.com/in/fabrizio-fantini/)

4 种数据分析师面试问题类型

原文:https://towardsdatascience.com/4-data-analyst-interview-question-types-a372c73ea18b?source=collection_archive---------17-----------------------

意见

…以及如何回答这些问题

克里斯蒂娜@ wocintechchat.com 在Unsplash【1】上的照片。

目录

  1. 介绍
  2. 结构化查询语言
  3. 业务指标
  4. 形象化
  5. 预测
  6. 摘要
  7. 参考

介绍

面试可能彼此大相径庭,所以很难预测他们会有什么样的表现。然而,根据我的经验,他们似乎总是遵循某种趋势,这就是他们问的问题类型。虽然所有数据分析师(和数据科学)的面试可能不尽相同,都有相同的问题,但有些人可以预期两次面试之间的类型相似。下面,我将讨论我在面试中遇到的四种主要的数据分析师问题,以及我从其他人那里听到的问题。

结构化查询语言

卡斯帕·卡米尔·鲁宾在Unsplash【2】上的照片。

此问题类型是数据分析师面试中更具技术性的方面。这个问题或这些问题的目的是看您是否对如何用通用语言查询数据库有一个总体的了解,并对业务有所了解。面试官还想知道你是如何解决和思考问题的,以及当你不知道答案时会发生什么。例如,最有可能的是,如果你不确定,只是说得很少,你将不会得到这份工作,但如果你是透明的,回答问题的基础,并向面试官提问,他们会看到你解决问题的兴趣和动机,即使你并不马上知道。

SQL 问题示例:

  • 2020 年 8 月至 2021 年 1 月期间有多少用户登录?
  • 哪个月的用户最多?

虽然这个例子可能看起来非常简单,但有一些故意模糊的措辞,以便面试官希望你向他们提问,作为一种描述真实生活的方式,在这种生活中,你必须与产品经理或利益相关者交谈以获得澄清。大多数人可以查询简单的表格,但是,面试官真正想知道的是,你是否可以合作定义问题,以便双方对结果的预期保持一致。

SQL 示例答案(伪代码—不是真正的 SQL 代码):

SELECT month,count(distinct(users)) as unique_user_loginsFROM date_tableWHERE login_date >= “2020–08–01”AND login_date < “2021–02-01”GROUP BY month, countORDER BY count DESC;

正如我所说的,面试官的意图是让问题变得模糊,而不是欺骗你,所以要重现真实的职业世界是什么样子的,在这个世界里,问你这个问题的人可能不是技术人员或不了解数据,所以你必须一起努力让问题 100%澄清。

  • 哪个月的用户最多,他们想让你反过来问:" 用户,比如唯一用户,或者总登录数?

很有可能,你会遇到一个比这个更难的 SQL 问题,但是,我要强调的是,当你回答一个问题时,面试官想要一个对话——他们想要一个容易相处的人,他们可以找到解决方案。

业务指标

照片由斯科特·格雷厄姆在Unsplash【3】上拍摄。

下一类数据分析师面试问题旨在确保您能够理解公司的常见 KPI(关键绩效指标)。是的,有些公司可能有不同的 KPI,但了解主要的 KPI 很重要,如clicks per userlogin timecosts per user等。如果你真的了解了你申请的公司,你会看起来更好,这样你就可以知道常见的问题和跟踪这些问题的指标,并在面试中展示出来。例如,如果你正在申请优步,你想调出像drive_time_per_drivertrips_per_drivertrips_per_usercancellations_per_user等业务指标。

以下是一个业务指标类型问题的示例:

  • 你开始了一个实验,看看哪些用户应该首先得到提升,你的目标是谁,你用什么指标来跟踪成功?

以下是业务指标类型问题答案示例:

  • “你们现在有什么促销活动,你们的客户是什么样的,哪些地区会受到影响?我会瞄准每月乘坐次数最少的人,因为这些人最有机会增长,因此,我会使用指标rides_per_month来找到目标人群,然后跟踪相同的指标,看看一旦他们看到来自一组测试数据/人群的促销活动,该指标是否会随着时间的推移而发生变化。”

这种类型的问题可能没有确切的答案,但目标是了解情况的变量或特征,以及如何跟踪成功,以及在实施变更后要跟踪什么指标。

形象化

斯科特·格雷厄姆在Unsplash【4】上拍照。

这种题型比较独特,所以你可能没有前两种题型看得多,但是,作为一个数据分析师,学习和了解还是很重要的。面试官可能会展示一些图表,你必须指出趋势中的差异,这是一种人工异常检测。他们可能会给出一个排序不正确的图表,如果你注意到这个图表是按某个数字排序的,而不是按日期排序的,他们会看出来。

建议:

  • 就像您对 SQL 和业务指标问题类型所做的那样,询问探查性问题,如 x 轴和 y 轴代表什么,当前空间是什么,目标空间是什么,此图表的目标是什么,此图表影响什么类型的系统或流程,以及您采取了什么措施来解释缺失数据或错误数据等?

这种类型的面试问题更重要的是要知道,并确保你很好地理解与图表相关的常见问题,以及你应该从图表中确定的指标和结果的类型。

预测

照片由斯科特·格雷厄姆在Unsplash【5】拍摄。

作为数据分析师,您经常会遇到数据科学家的交叉工作。它不一定是机器学习算法,但很可能是某种回归分析或 ARIMA 模型(自回归综合移动平均),专注于使用过去的历史和数据来预测未来的数据。有些工作可以在 Microsoft Excel、Tableau 或 Python 中完成( R 和)。如果你认为预测是工作描述中的一项必备技能,那么你可以期待一些面试来测试你常用的预测技巧。

预测问题示例:

  • 使用表中的数据,帮助我们预测下个月服装产品的销售额

这个问题的答案将是回顾这个问题,更好地定义它,询问可用的数据,询问当前的空间-是否已经有一些您可以调整或建立的预测?什么类型的特征在预测销售额时很重要— time/dateagelocation等。如果你有这些工具中的任何一个,你当然可以在几秒钟内做出预测,在 Tableau 中,这就像将字段拖放到预先建立的预测图中一样简单,但是正如我之前所说的,这些问题的目标不是获得 99%的解决方案准确性,而是通过你会做什么,会出现什么问题,以及如果有更多的时间你会做什么。

例如,“如果我有更多的时间,我会更多地调查丢失的数据,了解它是否真的是异常,或者是否是预期的,并了解为什么会有负面数据,等等。”。

摘要

我们已经讨论了四种常见的数据分析面试问题。我亲身经历过这些问题,你很可能也会看到这些类型的问题(不是每个人)。虽然我所说的可能不会全部发生,但了解围绕 SQL、业务指标、可视化和预测的示例仍然很重要,因为作为数据分析师,这些是需要了解的重要概念,即使在访谈中没有讨论它们。其他一些工具包括但不限于:Python、R、Tableau、Microsoft Excel 和 Google Slides 或 Microsft PowerPoint 的使用。

同样需要注意的是,所有这些问题也可能是数据科学家面试的一部分。

总而言之,在面试数据分析师职位时,会遇到以下几类问题:

* SQL* Business Metrics* Visualization* Forecasting

我希望你觉得我的文章既有趣又有用。如果您在与数据分析师或数据科学家的访谈中遇到过这些问题,请随时在下面发表评论。你同意还是不同意,为什么?

请随时查看我的个人资料和其他文章,也可以通过 LinkedIn 联系我。我不隶属于上述任何公司。

参考

[1]照片由克里斯蒂娜@ wocintechchat.com在Unsplash(2019)上拍摄

[2]卡斯帕·卡米尔·鲁宾在 Unsplash 上拍摄的照片,(2017)

[3]照片由斯科特·格雷厄姆在Unsplash(2016)上拍摄

[4]图为斯科特·格雷厄姆在Unsplash(2021)

[5]照片由斯科特·格雷厄姆在Unsplash(2018)上拍摄

你(可能)不知道的 4 种数据管道实践

原文:https://towardsdatascience.com/4-data-pipeline-practices-you-probably-didnt-know-about-f6ed145fbe69?source=collection_archive---------9-----------------------

构建高质量数据管道的数据工程技巧

在 Unsplash 上拍摄的 ThisisEngineering RAEng

嘿,各位,
在每个科技产品的背后,都有自动化要做,以保持数据整洁和最新。现在是 2021 年,仅仅知道如何构建酷的数据模型还不足以在数据科学家领域生存。你必须潜得更深。

如今,数据管道越来越优先化。
这主要得益于行业的成熟。数据科学家意识到,要为他们的模型获得干净的数据,他们必须为他们的数据仓库建立一个坚实的基础。

因此,除了专门的数据工程师,数据科学家自己也必须了解数据管道。在本文中,我们将讨论一些您应该在设计中实现的数据管道实践,以确保稳定的数据生态系统。

先决条件

本文中的实践涵盖了一般的数据流水线概念
无论你使用什么样的工作流管理系统,你都可以在任何地方应用这些概念。

就我个人而言,我使用 Apache Airflow 进行批处理作业,使用 Apache Beam 进行流作业已经超过 3 年了。我发现他们很有效率。

如果你了解 basic Python 也会有所帮助,因为它是数据行业的主流编程语言。

改变我的想法。

Gif by Giphy

计划与算法触发器

作者图片

在传统流水线中,有基本的 ETL/ELT 作业
无论您正在处理哪种工作,都需要触发器来启动工作本身。

然后我们进入时间表触发器 vs 算法触发器的辩论。

计划触发器

你的基本触发器。调度程序在任何种类的工作流管理系统中都是可用的。它允许你以固定的时间间隔开始工作,比如每分钟、每小时、每天、每周等等。

时间表触发器对不可避免的任务很有用。这意味着它们必须不管任何依赖关系而运行,并且通常在任何情况下都不会失败。

算法触发器

一种定制的触发器。算法触发器有多种形式。最常见的是其他工作的传感器和触发器。它允许您在特定条件下开始作业**。例子有—**

  • 文件被导入到文件夹中
  • 向表中添加一行
  • 多个相关作业已完成

算法触发器对于有依赖的任务很有用。
通常,这些作业会失败,除非满足
某些条件**。**

判决

你应该使用哪种触发器取决于你的工作性质。
拥有适当的依赖和触发结构对于构建可靠的流水线架构至关重要。

问类似于— 的问题

  • 该作业应该每天运行吗?
  • 这项工作占用的资源是否比需要的多?
  • 作业应该多久执行一次?
  • 工作的成功有多重条件吗?

在一个完美的世界里,我们所有的工作都运行良好。

但是我们知道这是不可能的。
工作失败时学习。有了经验你会变得更好。

适当的警报

我们的管道破裂**。这不是世界末日。重要的是我们事后做了什么。**

一旦发生这种情况,我们必须通知
通常情况下,基本的警报不足以实现这一点。****

大多数工作流管理系统提供基本的警报解决方案。
但是,组织通常会添加他们自定义的警报级别。

电子邮件

最简单的解决方案。
这是最起码应该包含的。

团队的所有成员都会收到一封电子邮件,提醒他们作业失败了。这不是最有效的解决方案,因为我们并不是一直盯着我们的电子邮件。我们可能会时不时地错过这一点。

这里有一个非常基本的电子邮件气流警报形式。

**from airflow.utils.email import send_emailemail_to = 'receivers@email.com'
email_subject = '(FAILED) ' + jobname + date
email_content = 'Your job has failed.'
send_email(email_to, email_subject, email_content)**

松弛的

下一级警报。如果你是搞技术的,很可能你的公司已经采用了松弛作为一种沟通渠道。当消息被发送过来时,Slack 会向你发出一种卡嗒声(我很确定我们都很熟悉这种声音)。

创建一个警报专用频道。让您的管道在出现故障时向通道发送警报。这将确保团队在出现问题时得到提醒。

下面是使用其API的时差警报的基本形式。****

**from slack import WebClientclient = WebClient(token = 'your token here')
response = client.chat_postMessage(
                channel = slack_cannel,
                text = message
                )**

正确记录

Artur uczka在 Unsplash 上拍摄的照片

不,不是那种日志

在编程中,日志记录只是一个用来定义写下你所做的一切的过程的花哨词汇。流水线过程中有两种类型的日志。任务日志和作业日志。

任务日志

这些日志记录了任务执行过程中的重要信息。我们不想打印我们运行的每一行代码,但是应该有足够的日志来帮助我们浏览任务。

这里有一个例子—

**Import PostgresHook#Extraction Job
def ExtractFromSource(query):
    query_to_run = query
    logging.info("Query : %" query_to_run)

    cursor = PostgresHook(connection).get_conn().cursor()
    logging.info("Connecting to Postgres Connection %" connection) cursor.execute(query_to_run)
    result = cursor.fetchall()**

调试期间,日志就像一个断点。它们有助于我们在任务失败时确定错误的来源。

在这个提取作业中,我们记录了查询连接
这实现了两件事——

  1. 通知我们任务运行良好,直到每个点****
  2. 向我们展示了传递的查询和连接变量

如果出现问题,我们可以清楚地确定哪个步骤有问题,以及检查查询或连接变量是否有问题。

作业日志

作业日志是作业运行的记录。
至少,它们显示了作业开始到结束的时间和状态。
如果您的工作流管理系统默认情况下还没有这个,您应该将它存储在某个地方,甚至可能在您的数据仓库中。

这是一个工作日志的例子—

作者图片

在您的数据仓库中创建一个审计表。使用这些数据为每个运行的作业插入一行。数据科学家和分析师可以轻松地浏览该表,以检查某些表的最新作业运行,以及作业是否成功运行。

检查重复

菲尔·肖在 Unsplash 上拍摄的照片

如果您正在提取或转换数据,您可能以前遇到过这个错误。你提取/转换中的重复。

这可能是由于几个原因,比如—

  • 错误连接
  • 作业触发两次
  • 脏数据

这可以通过在管道中增加一个步骤检查重复来纠正。实现这一点的方法之一是通过主键检查计数。

**Select max(count) from (
Select primary_key, count(*) from table group by primary_key)**

如果结果返回大于 1,则表明数据中存在重复。
如果你的数据没有主键,你也可以给它们分配主键。

**alter table TABLENAME add primary key (ID,NAME,PMID)**

结论

格伦·卡斯滕斯-彼得斯在 Unsplash 上拍摄的照片

恭喜
你已经成功改善了你的数据管道。
这些年来我一直在学习这些概念,希望分享这些概念能为你节省一些时间。

在这篇文章中,我们了解到—

  • 时间表与算法触发器
  • 适当的警报
  • 充分记录
  • 重复检查

最后,让我引用一段话。

作为数据科学家,我们的工作是从噪音中提取信号。—丹尼尔·唐克朗

订阅我的时事通讯,保持联系。

也可以通过 我的链接 注册一个中等会员来支持我。你将能够从我和其他不可思议的作家那里读到无限量的故事!

我正在撰写更多关于数据行业的故事、文章和指南。你绝对可以期待更多这样的帖子。与此同时,可以随时查看我的其他 文章 来暂时填补你对数据的饥渴。

感谢 阅读!如果你想与我取得联系,请随时联系我在 nickmydata@gmail.com 或我的 LinkedIn 个人资料 。也可以在我的Github中查看之前写的代码。

我将在四月份阅读的 4 本与数据相关的书

原文:https://towardsdatascience.com/4-data-related-books-ill-be-reading-in-april-efd06b367e35?source=collection_archive---------38-----------------------

一定要看看这些书

苏珊·Q·尹在 Unsplash 上的照片

书籍确实是我的命根子;我认为自己是一个狂热的书虫,但每当谈到技术书籍时,我必须收回这句话。由于一些奇怪的原因,技术书籍总是让我感到更困倦而不是感兴趣。

然而,在过去,我设法变戏法似的鼓起勇气睁开眼睛,看完这些书。我已经意识到,每当我这样做了,我就在我所研究的学科或领域取得了巨大的进步,因此这个月我将再次这样做。

</5-free-books-to-take-your-data-science-skills-to-the-next-level-a2026c8cad71>

对于那些有兴趣了解我全年都在读什么书的人,可以看看我的 Instagram 页面,它专门给出我对我正在读的不同书籍的看法。

#1 实用自然语言处理:构建真实世界自然语言处理系统的综合指南

来源: 亚马逊图书页面

这本书是很久以前 Phillip Vollet 给我的,他是 LinkedIn 上非常受欢迎的 NLP 传播者(关注他,你不会后悔),但我不愿意打开它,因为我害怕技术书籍。

他提到,这本书是学习在商业环境中构建、迭代和扩展 NLP 系统,并为特定的行业垂直领域定制它们的最佳指南之一。

#2 信息检索简介

来源: 亚马逊图书页面

我真的不记得是谁向我推荐了这本书,但肯定有人推荐过——我知道这一点的原因是因为这本书已经在我的亚马逊购物篮里放了几个月了,当我在谈话中听到有人提到我觉得有趣的书时,我通常会这样做。我不太确定这本书能提供什么,但我在网上看到了非常好的评论,所以我期待着深入这本书。

这是亚马逊上的图书描述:

课堂测试和连贯,这本教科书教经典和网络信息检索,包括网络搜索和相关领域的文本分类和文本聚类的基本概念。它给出了收集、索引和搜索文档的系统的设计和实现的所有方面的最新处理;评估系统的方法;以及在文本集合上使用机器学习方法的介绍。所有重要的想法都用例子和数字解释,使它成为计算机科学的高年级本科生和研究生的信息检索入门课程的完美教材。基于大量课堂经验的反馈,这本书被精心组织以使教学更加自然和有效。幻灯片和额外的练习(包括给讲师的解答)也可以通过该书的支持网站获得,以帮助课程讲师准备他们的讲座。

#3 用于自然语言处理的转换器

来源: 亚马逊图书页面

对于任何加入 Harpreet Sahota 办公时间的人来说——每周五太平洋标准时间 4.30——那么你会熟悉某个不停地漫谈这本书的人。Thom 在他的数据职业生涯中取得了如此出色的成就,但他毫无疑问赢得了我的尊重,因为他分享了他在数据科学职业生涯中犯下的每一个错误,他都长出了一缕白发——现在这可能没有意义,但看看他的 LinkedIn,你就会明白为什么这让我感动。

变压器目前是许多自然语言处理任务(如机器翻译)的最先进的架构。我已经用 HuggingFace 框架对它们进行了一些涉猎,但是我确信深入研究它们没有坏处。

#4 机器学习工程

来源: 亚马逊图书页面

你们中的一些人可能还记得安德烈·布尔科夫,这本长达一百页的关于机器学习的书《T4》的作者。他带着另一个回来了。据说这本书充满了从最佳实践到构建可扩展的可靠机器学习解决方案的设计模式的金块。任何有助于我改进构建这种规模的 ML 解决方案的东西都会引起我的注意,而这一次,它恰好是安德烈·布尔科夫的一个可靠来源。

以下是谷歌首席决策科学家凯西·科兹尔科夫对这本书的评价:

“你现在看到的是为数不多的真正应用机器学习的书籍之一。没错,你找到了一个!一个真正的应用针在面向研究的东西的干草堆里。干得好,亲爱的读者……除非你实际上寻找的是一本帮助你学习设计通用算法的技能的书,在这种情况下,我希望作者不会因为我告诉你现在逃离并去拿起几乎任何其他机器学习书籍而感到太沮丧。这个不一样”

最后的想法

在 Q1,我大部分时间都在阅读一些我觉得鼓舞人心的人物传记。对 Q2 来说,我的目标是将更多的注意力放在与我的领域更相关的书籍上,这些书籍将帮助我发展和提高作为一名数据科学家的能力。再说一次,如果你有兴趣跟随我的阅读之旅,关注我的 Instagram 。

感谢您的阅读!在 LinkedIn 和 Twitter 上与我联系,了解我关于数据科学、人工智能和自由职业的最新帖子。

相关文章

https://pub.towardsai.net/7-free-online-resources-for-nlp-lovers-26b1e0bba343

Kaggle 之外的 4 个数据科学竞赛平台

原文:https://towardsdatascience.com/4-data-science-competition-platforms-other-than-kaggle-6d1795ff46a?source=collection_archive---------15-----------------------

以下是一些鲜为人知的 Kaggle 替代品

赛义德·哈桑·迈赫迪摄于佩克斯

Kaggle 是最受欢迎的数据科学社区之一,因举办顶级机器学习竞赛和诱人的奖金池而闻名。这里有 4 个其他快速增长的社区,它们具有挑战性的机器学习问题,您可能会感兴趣。

津迪

截图自 Zindi

Zindi 是一家社会企业,其使命是在非洲建立数据科学生态系统。因此,Zindi 的许多比赛都专注于解决非洲的问题,并涉及非洲数据集。在撰写本文时,有 5 场比赛正在进行,奖金从 3000 美元到 10,000 美元不等。与 Kaggle 类似,对上下文、问题描述、评估指标和数据都解释得很清楚。Zindi 还为每场比赛提供了一个专门的论坛,为参与者提供了一个讨论和与比赛赞助商或主办方互动的渠道。

与 Kaggle 不同,Zindi 不提供云托管的笔记本电脑,并要求参与者使用自己的计算资源来训练和评估机器学习模型。查看这篇文章,获取免费的云 GPU 计算资源。

数据驱动

来自数据驱动的屏幕截图

数据驱动旨在通过使用数据科学应对紧迫挑战来创造社会影响,因此许多比赛都与健康、气候变化、教育和保护有关。在撰写本文时,有两个奖金竞赛,奖金池分别为 20,000 美元和 500,000 美元。与 Kaggle 类似,对上下文、问题描述、评估指标和数据都解释得很清楚。还有一个论坛和排行榜。鼓励参与者在 github 或博客上分享他们的解决方案。DataDriven 没有像 Kaggle 这样的云托管笔记本电脑,因此参与者需要使用自己的计算资源来培训模型。

田驰

截图自田驰

天池是阿里巴巴集团云计算子公司阿里云打造的大数据竞赛平台。在撰写本文时,有 4 个奖金池从 10,000 美元到 1,000,000 日元(约 157,000 美元)不等的竞赛正在进行。多年来,天池主办了一些与学术会议相关的重大比赛,如 CVPR 2020 和 AAAI 2022。与 Kaggle 类似,对上下文、问题描述、评估指标和数据都解释得很清楚。还有一个论坛和排行榜。虽然论坛经常充满了热烈的讨论,但许多讨论都是中文的,因此谷歌翻译可能会派上用场。

与 Kaggle 类似,天池提供的云托管笔记本,CPU 运行时间不限,GPU 运行时间有限。参与者可以选择创建私人笔记本或在公共论坛上分享他们的解决方案。

机器黑客

机器黑客截图

Machine Hack 是一个为数据科学和人工智能爱好者提供训练营、模拟评估、实践和黑客马拉松的社区。黑客马拉松部分举办了各种机器学习挑战,参与者可以在其中竞争。在撰写本文时,有 1 个奖金为 70,000 印度卢比(约 1000 美元)的黑客马拉松和许多其他针对初学者的实践黑客马拉松。与 Kaggle 类似,向参与者清楚地解释了上下文、数据和评估指标。排行榜用于对参与者的解决方案进行排名,还有一个供社区互动的论坛。虽然 Machine Hack 并不像 Kaggle 那样托管云笔记本,但他们允许参与者上传 Jupyter 笔记本,以便与社区共享。

结论

大多数提到的数据科学竞赛平台都具有与 Kaggle 类似的功能,只有云托管笔记本除外。在 Kaggle 的 4 个替代品中,只有天池提供云托管笔记本电脑。我写过一篇关于如何获得免费 GPU 计算资源的文章。

据我所知,这些平台都有活跃的比赛和奖金池。欢迎在下面的评论中推荐其他平台。

4 个数据可视化工具,改变您的数据叙述方式

原文:https://towardsdatascience.com/4-data-visualization-tools-to-transform-your-data-storytelling-e2c6fb6de8ba?source=collection_archive---------29-----------------------

虽然 Tableau 很棒,但这不是唯一的选择。

杰森·库德里特在 Unsplash 上拍摄的照片

乍一看,数据科学似乎总是一个错综复杂的领域,或者我应该说是多个领域的集合。它非常宽泛模糊,而且可以争论复杂。但是,事实是,数据科学可以用一句话非常简单地定义。

数据科学是将从不同资源收集的数据解释成有用信息的领域。或者换句话说,这就是倾听和翻译一些数据试图传递的故事。

我喜欢将数据科学视为讲述数据故事的艺术。你越擅长讲故事,这个故事就越有吸引力。也就是说,找到数据所讲述的故事并不总是容易的。事实上,这从来都不容易。简化寻找故事过程的一种方法是通过数据可视化。

数据可视化不仅仅是数据科学项目的一个步骤;这是它的核心。然而,通常情况下,开发人员不希望花很长时间来设计可视化。这就是为什么像 Tableau 这样的工具为开发人员提供了一个很好的选择,让他们在代码上花更多的时间,同时产生有价值的、清晰的、引人注目的数据可视化。

Tableau 可能是最知名和最常用的数据可视化工具;它健壮、有效,可以用来生成你能想到的任何类型的可视化。然而,Tableau 并不是唯一优秀的数据可视化工具。

本文将介绍 4 种免费和付费的数据可视化工具,它们将帮助您创建引人注目的可视化效果,并让您以最佳方式讲述数据的故事。

№1:谷歌数据工作室

我们列表上的第一个工具是谷歌数据工作室。谷歌数据工作室是谷歌营销平台的一部分,旨在帮助开发人员构建、设计和使用交互式、引人注目的数据可视化和数据仪表板,可以在团队成员以及客户和公司之间共享。

Google Data Studio 允许您同时创建不同数据集的可视化,它是为团队访问相同的数据和仪表板而设计的,并且是免费的。Google Data Studio 可以与其他 Google 产品集成,如 Google Analytics、Ads、Google cloud 和 BigQuery,以创建强大、健壮的配对,可用于各种数据探索任务。

2 号:数据包装器

创建和设计引人注目的数据可视化本身就是一种艺术形式,但对于没有强大艺术技能的人来说,它也需要简单易用。我们列表中的第二个工具是 Datawrapper。这个工具是由艺术家、平面设计师、开发人员和记者设计的。它被设计成学习速度快,使用灵活,功能强大,足以创建美观、易于理解的可视化效果。

Datawrapper 是一个完全基于网络的服务,为不同需求的开发者提供付费和免费计划。免费计划允许你生成 10,000 个图表,这给你时间来决定这个工具是否适合你。Datawrapper 还提供了一些类和教程,教您如何最有效地使用该平台并尽可能创建最佳的可视化效果。

№3:信息图

十几年前,一种新的创建演示文稿的工具进入了市场,这种方法可以创建一个令人惊叹的充满动感的演示文稿,保证能抓住观众的注意力。那个工具就是 Prezi 。该工具后来扩展到包括其他致力于创建引人注目的可视化的服务。今天出现在我们名单上的工具是我一直以来最喜欢的工具之一,信息图。

Infogram 是一个界面友好的易用工具。它提供了 30 多种类型的图表和可视化,可以从 A 到 z 进行定制。Infogram 还为我们这些没有太多时间的人提供了使用预制模板创建数据仪表板的选项。Infogram 提供了选项有限的免费版本和每月 19 美元的付费版本。

№4:融合图表

名单上最后但同样重要的是融合图表。FusionCharts 是一个基于 JavaScript 的工具,允许您为 web 和移动用户创建通用的数据仪表板。fision charts 150 多种图表类型和 1000 多种地图类型。为了使该工具更加健壮,它可以与 React 和 jQuery 等其他 JavaScript 框架以及 Python(Django)和 Ruby on Rails 等其他编程语言集成。

如果您不想编写代码来生成可视化,FusionCharts 还为所有包含的图表和地图提供了现成的代码,以简化嵌入、设计和创建可视化的过程。

最后的想法

作为一名数据科学家,我们需要完成的主要任务是成功地解释数据讲述的故事,从故事中提取见解,然后使用它们做出更好的决策或预测未来的数据。这些任务是所有数据科学分支的核心,从简单的回归到自然语言处理、神经网络、计算机版本和深度学习。

寻找和讲述数据故事的最佳方式是将其可视化。数据可视化不仅仅是任何数据科学项目的另一个步骤。这是决定你整个项目成败的关键步骤之一。如果您在数据探索步骤中使用了错误的数据可视化技术,那么您可能会错过一些基本的模式、趋势或见解。

如果你花了这么多时间开发和训练你的模型,最后,你以一种枯燥的、不可描述的方式来可视化你的结果,你的客户可能会对你的结果不屑一顾,并努力寻找你工作的真正意义。这就是为什么数据可视化应该是每个数据科学家应该努力的主要技能之一。

幸运的是,有许多工具可以用来创建引人注目的、漂亮的、有意义的可视化和数据仪表板。这些工具将是您构建的数据科学工具的重要补充,可以帮助您构建更好、更健壮的项目。

4 种不同的时间序列分析方法

原文:https://towardsdatascience.com/4-different-approaches-for-time-series-analysis-7e2364fadcb9?source=collection_archive---------6-----------------------

数据分析

一个现成的 Python 代码,包括用于时间序列分析的不同策略和库

图片由 Gerd Altmann 从 Pixabay 拍摄

在本教程中,我将使用以下 4 种不同的方法来说明如何分析时间序列:

  • 手动设置模型参数和多步预测
  • 手动设置模型参数和单步预测
  • 模型参数的自动设置和多步预测
  • 分解。

前三种方法利用差分使时间序列平稳。

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

数据集导入

首先,我导入了 1990 年至 2019 年意大利入境游客的相关数据集,并将其转换为时间序列。数据摘自欧洲统计:旅游业年度数据。我将数据集作为一个pandas数据帧加载。

import pandas as pddf = pd.read_csv('source/tourist_arrivals.csv')
df.head()

作者图片

构建时间序列

现在,我通过以下两个步骤将数据集转换为时间序列:

  • 包含日期的列必须转换为 datetime。这可以通过函数to_datetime()来完成,该函数将字符串转换成日期时间。
  • 将 dataframe 的索引设置为包含日期的列。这可以通过应用于数据框的功能set_index()来完成。
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
ts = df['value']

在开始分析之前,我先画出时间序列。我用的是matplotlib库。

import matplotlib.pyplot as pltplt.plot(ts)
plt.title('Number of tourists arrivals to Italy')
plt.ylabel('Number of tourists arrivals')
plt.grid()
plt.show()

作者图片

时间序列分裂

通常,在执行时间序列分析时,不会将时间序列拆分为训练集和测试集,因为要获得良好的预测,需要所有的时间序列。

但是,在本教程中,我将时间序列分为两部分——训练和测试——以便测试测试模型的性能。我把时间序列的第一部分作为训练集,第二部分作为测试集。

每个模型将在训练集上训练,并在测试集上测试。

ts_train = ts[:'2019-03-01']
ts_test = ts['2019-04-01':]

检查平稳性

平稳时间序列是指具有稳定/恒定统计特性的时间序列,例如一段时间内的均值和方差。

对平稳的时间序列进行长期预测是可能的。因此,我必须测试训练时间序列是否是平稳的。这可以通过增强的 Dickey-Fuller 测试来完成,由statsmodels包的adfuller()函数实现。adfuller()测试返回测试统计数据adfpvaluecritical_values。pvalue 指定测试结果是否有意义。如果pvalue < alpha,则测试有意义,其中alpha是一个小值,例如0.05

在扩展的 Dickey-Fuller 检验中,零假设是时间序列不是平稳的。如果测试统计数据adf大于临界值,则零假设为真。因此,我定义了一个函数,叫做check_stationarity(),它检查一个时间序列是否是平稳的。

from statsmodels.tsa.stattools import adfuller
import numpy as npdef check_stationarity(ts):
    dftest = adfuller(ts)
    adf = dftest[0]
    pvalue = dftest[1]
    critical_value = dftest[4]['5%']
    if (pvalue < 0.05) and (adf < critical_value):
        print('The series is stationary')
    else:
        print('The series is NOT stationary')

我用我的时间序列作为参数调用函数:

check_stationarity(ts_train)

它给出了以下输出:

The series is NOT stationary

由于时间序列不是平稳的,我转换它,通过差分一次,我再次检查平稳性。

ts_diff = ts_train.diff()
ts_diff.dropna(inplace=True)
check_stationarity(ts_diff)

它给出了以下输出:

The series is stationary

现在,时间序列是稳定的,因此我可以将训练模型的差序设置为 1。

d = 1

我画出了不同的时间序列:

plt.plot(ts_diff)
plt.title('Differenced Time Series')
plt.grid()
plt.show()

作者图片

1 —手动设置模型参数和多步预测

第一种方法是使用季节自回归综合移动平均(SARIMA)模型来预测到达意大利的游客数量。

SARIMA 模型需要三个参数:p、d 和 q。d 的值已经设定,因为它指定了使时间序列平稳所需的积分顺序。

在这种方法中,我尝试通过手动查看部分自相关和相关图来设置模型 p 和 q 参数。

部分自相关(PACF)用于计算 p 参数。我通过statsmodels函数plot_pacf()绘制 PACF 图。

from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
plot_pacf(ts_diff, lags =12)
plt.show()

作者图片

我注意到 PACF 在置信区间外的最大值(浅蓝色)是 10。因此,我尝试p = 10

p = 10

现在我绘制自相关(ACF)图来计算 q 值。

plot_acf(ts_diff, lags =12)
plt.show()

作者图片

ACF 超出置信区间的最大值是 11。然而,我试着更保守一些,我试着 q = 7。

q = 7

一旦设置了 p、q 和 d 参数,我就可以运行模型了。我利用了statsmodelsSARIMAX模型。我创建了模型,并适应了训练时间序列。

from statsmodels.tsa.statespace.sarimax import SARIMAXmodel = SARIMAX(ts_train, order=(p,d,q))
model_fit = model.fit()

我可以使用训练好的模型进行预测。我将利用模型来预测相当于测试时间序列长度的步骤数量。

n_test = ts_test.shape[0]
ts_pred = model_fit.forecast(steps=n_test)

现在我可以画出测试时间序列和预测值之间的比较。

plt.plot(ts_pred, label='prediction')
plt.plot(ts_test, label='actual')
plt.title('Multi-step Forecasting (manual parameters)')
plt.legend()
plt.grid()
plt.xticks(rotation=90)
plt.show()

作者图片

为了评估该模型,我计算了归一化均方根误差(NRMSE)指标。

from statsmodels.tools.eval_measures import rmse
nrmse = rmse(ts_pred, ts_test)/(np.max(ts_test)-np.min(ts_test))
nrmse

它给出了以下输出:

0.06079334505980257

2 —手动设置模型参数和单步预测

在这种情况下,我利用前面的模型进行单一预测(单一步骤)。然后,我将使用预测结果重新训练该模型,并执行另一次预测。依此类推,直到达到所需的预测数量。

ts_train_step = ts_train
ts_pred_step = pd.Series()
for i in range(0, n_test):
    model_step = SARIMAX(ts_train_step, order=(p,d,q))
    model_step_fit = model_step.fit()
    current_pred = model_step_fit.forecast(steps=1)
    ts_train_step = ts_train_step.append(current_pred)
    ts_pred_step = ts_pred_step.append(current_pred)

我计算了 NRMSE 误差。

nrmse = rmse(ts_pred_step, ts_test)/(np.max(ts_test)-np.min(ts_test))
nrmse

它给出了以下输出:

0.06226085324175411

我注意到单步模型比多步模型表现稍差。或许,单步模型更适合长期预测。

plt.plot(ts_test, label='actual')
plt.plot(ts_pred_step, label='prediction step')
plt.title('Single-step Forecasting (manual parameters)')
plt.legend()
plt.grid()
plt.xticks(rotation=90)
plt.show()

作者图片

3 —模型参数的自动设置和多步预测

在这种情况下,我利用pmdarima Python 库来自动调整 SARIMA p 和 q 参数。具体来说,我利用了auto_arima()函数,它接收 p 和 q 参数的测试范围以及其他有用的信息作为输入。我设置stepwise=False是为了测试 p 和 q 的所有可能组合。此外,我将设置seasonal=True使用一个萨里玛模型。

import pmdarima as pm
stepwise_model = pm.auto_arima(ts_train,start_p=1, d=1, start_q=1,
                            max_p=12, max_q=12,
                            m=12,
                            seasonal=True, stationary=False,
                            information_criterion='aic',
                            stepwise=False,
                            suppress_warnings=True)
stepwise_model.fit(ts_train)

所获得的模型具有以下参数:

ARIMA(order=(1, 1, 3), seasonal_order=(0, 1, 0, 12), suppress_warnings=True)

现在我用最好的模型进行预测。

ts_pred_auto = stepwise_model.predict(n_periods=n_test)

我绘制结果。

plt.plot(ts_test.index,ts_pred_auto, label='auto sarima')
plt.plot(ts_test, label='actual')
plt.title('Single-step Forecasting (automatic parameters)')
plt.grid()
plt.xticks(rotation=90)
plt.legend()
plt.show()

作者图片

我计算了 NRMSE 误差。

nrmse = rmse(ts_pred_auto, ts_test)/(np.max(ts_test)-np.min(ts_test))
nrmse

它给出了以下输出:

0.07650715589047709

4 —分解

相对于以前的方法,这种方法将时间序列分解成其主要成分,然后分别分析每个成分。

首先,我通过statsmodels库的seasonal_decompose()函数分解训练时间序列。我利用乘法分解。我获得了原始时间序列的趋势、季节性和残差。我还绘制了分解的时间序列。

from statsmodels.tsa.seasonal import seasonal_decomposets_decomposed = seasonal_decompose(ts_train,model='multiplicative',extrapolate_trend=True)ts_trend = ts_decomposed.trend
ts_seasonal = ts_decomposed.seasonal
ts_residual = ts_decomposed.resid
ts_decomposed.plot()
plt.show()

作者图片

现在我分别分析每一个组成部分。

趋势预测

我将建立一个基于多步预测的模型。我检查趋势时间序列是否是平稳的。

check_stationarity(ts_trend)

它给出了以下输出:

The series is NOT stationary

由于趋势时间序列不是平稳的,我尝试对其进行差分。

ts_trend_diff = ts_trend.diff()
ts_trend_diff.dropna(inplace=True)
check_stationarity(ts_trend_diff)

它给出了以下输出:

The series is stationary

现在趋势时间序列是稳定的,因此我可以设置 d = 1。

d = 1

类似地,对于自动设置参数的多步预测,我利用了auto_arima()函数,指定季节性为假。在这种情况下,我将使用 ARIMA 模型。

stepwise_model = pm.auto_arima(ts_trend,start_p=1, d=1, start_q=1,
                            max_p=12, max_q=12,
                            m=12,
                            seasonal=False, stationary=False,
                            information_criterion='aic',
                            stepwise=False,
                            suppress_warnings=True)
stepwise_model.fit(ts_trend)

它返回以下模型:

ARIMA(order=(4, 1, 1), suppress_warnings=True)

我使用最佳模型进行预测。

trend_pred_auto = stepwise_model.predict(n_periods=n_test)

季节性预测

我对季节性重复同样的程序。我检查平稳性。

check_stationarity(ts_seasonal)

它给出了以下输出:

The series is stationary

这个数列是稳定的,所以我设 d = 0。

d = 0

我将auto_arima()模型与seasonal=True一起用于 SARIMA 模型。

stepwise_model = pm.auto_arima(ts_seasonal,start_p=1, d=0, start_q=1,
                            max_p=12, max_q=12,
                            m=12,
                            seasonal=True, stationary=True,
                            information_criterion='aic',
                            stepwise=False,
                            suppress_warnings=True)
stepwise_model.fit(ts_seasonal)
seasonal_pred_auto = stepwise_model.predict(n_periods=n_test)

现在,我可以通过计算季节和趋势分量之间的乘积来合成原始时间序列。

ts_pred_decompose = trend_pred_auto * seasonal_pred_auto

我绘制结果。

plt.plot(ts_test.index, ts_pred_decompose, label='decompose')
plt.plot(ts_test, label='actual')
plt.title('Decomposition')
plt.grid()
plt.xticks(rotation=90)
plt.legend()
plt.show()

作者图片

最后,我计算了 RMSE 误差。

nrmse = rmse(ts_pred_decompose, ts_test)/(np.max(ts_test)-np.min(ts_test))
nrmse

它给出了以下输出:

0.08746142483666638

摘要

在本教程中,我举例说明了 4 种不同的时间序列预测方法:手动和自动设置参数的多步预测,手动设置参数的单步预测,以及分解。

就 NRMSE 而言,所有方法都有非常相似的行为。但是,在这种特定情况下,最好的模型是手动设置模型参数和多步预测

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

参考

时间序列预测:使用 Python 的基本介绍

ARIMA 模型 Python 示例—时间序列预测

如何用 Python 检查时间序列数据是否平稳

相关文章

在 Python Seaborn 中改变字体大小的 4 种不同方法

原文:https://towardsdatascience.com/4-different-methods-for-changing-the-font-size-in-python-seaborn-fd5600592242?source=collection_archive---------12-----------------------

数据可视化 101

照片由尼克·费因斯在 Unsplash 上拍摄

数据可视化是数据科学不可或缺的一部分。我们在探索性数据分析、模型评估和交付结果中使用它们。一个准备充分的数据可视化有可能比简单的数字提供更多的信息。

Python 作为数据科学系统中的顶级编程语言,有几个数据可视化库。其中最受欢迎的是 Seaborn,它构建在 Matplotlib 之上。

与 Matplotlib 相比,Seaborn 提供了一个高级接口,这意味着语法更简单,但我们对可视化的控制更少。

在本文中,我们将关注一个特定的任务:在 Seaborn 图中改变轴标签和标题的字体大小。

我有一个熊猫数据框,有两列,分别叫做“值”和“时间”。我们将使用此数据框创建线图。

让我们从使用当前设置创建一个线图开始。

(图片由作者提供)

(图片由作者提供)

字体太小,我们几乎看不清轴标题。

1.设置主题功能

改变字体大小的第一种方法是使用set_theme功能。它会更改全局默认值,因此调整将是永久性的,直到您再次更改它们。

如果你计划在所有的图中使用相同的字体大小,那么这是一个非常实用的方法。

(图片由作者提供)

(图片由作者提供)

需要注意的是set_theme功能不仅仅用于改变字体大小。它允许调整图的几个属性。

2.轴级别函数

更改全局设置并不总是最佳选择。谢天谢地,这不是改变字体大小的唯一方法。

我们也可以使用轴级函数。除了确定特定于绘图的字体大小,我们还可以为 x 轴、y 轴和标题使用单独的字体大小。

(图片由作者提供)

(图片由作者提供)

3.集合 _ 轴 _ 标签函数

Seaborn 为绘制各种数据可视化提供了图形级别的接口。这些界面对相似类型的图进行分组,并允许使用相同的功能创建它们。

Seaborn 中有 3 个图形级函数,用于在 FacetGrid 上创建以下图:

图来源: Seaborn 文档

如果您想了解关于这些图形级函数的更多信息,我还写了一篇文章,用几个例子详细解释了它们:

💔-seaborn-functions-that-cover-almost-all-your-visualization-tasks-793f76510ac3>

在表达了对这些伟大功能的赞赏之后,让我们回到最初的话题。

在由这 3 个函数创建的图上,我们可以使用set_axis_labels函数改变轴标签的字体大小。

(图片由作者提供)

(图片由作者提供)

4.Matplotlib 函数

由于 Seaborn 是基于 Matplotlib 构建的,所以在某些情况下,我们可以利用 Matplotlib 的功能。

下面是我们如何使用 Matplotlib 函数操作轴标签和标题。

(图片由作者提供)

(图片由作者提供)

结论

伟大的数据可视化有两个方面。第一个是传递的信息。图表应该以一种更容易理解和推断有意义结果的方式向我们展示数据。

第二个是视觉属性。你如何演示和你演示什么一样重要。情节应该吸引人,易于阅读,不受干扰。正确设置字体大小是使你的可视化效果更吸引人的重要部分。

最后但同样重要的是,如果你还不是中级会员并打算成为其中一员,我恳请你使用以下链接。我将从你的会员费中收取一部分,不增加你的额外费用。

https://sonery.medium.com/membership

感谢您的阅读。如果您有任何反馈,请告诉我。

使用 PySpark 创建新列的 4 种不同方式

原文:https://towardsdatascience.com/4-different-ways-of-creating-a-new-column-with-pyspark-1a6782fe764e?source=collection_archive---------17-----------------------

了解如何在 Spark 数据框中创建新列

照片由塞巴斯蒂安·斯文森在 Unsplash 上拍摄

我们生活在大数据时代。收集、存储和传输数据变得非常容易。随着数据量的增加,传统工具开始变得不足。

当数据太大而无法用传统的工具和技术处理时,我们应该使用 Spark 等支持分布式计算的工具和技术。

Spark 是一个用于大规模数据处理的分析引擎。它让我们能够将数据和计算分散到集群上,从而大幅提升性能。

PySpark 是 Spark 的 Python API。它结合了 Python 的简单性和 Spark 的高效性,这种合作得到了数据科学家和工程师的高度赞赏。

在本文中,我们将介绍使用 PySpark SQL 模块创建新列的 4 种方法。

第一步是导入库并创建 Spark 会话。

from pyspark.sql import SparkSession
from pyspark.sql import functions as Fspark = SparkSession.builder.getOrCreate()

我们还在模块中导入了函数,因为我们将在创建列时使用其中的一些函数。

下一步是获取一些数据。我们总是可以通过从外部文件读取数据来创建数据框。在本文中,我们将使用createDataFrame函数创建自己的数据框。

data = [
    ("John","Doe",28,45000,1,0,1),
    ("Jane","Doe",26,52000,1,1,1),
    ("Matt","Anderson",34,62000,1,0,0),
    ("Ashley","James",30,58000,1,1,0),
    ("Amber","Murray",24,48000,1,0,0)
]schema = StructType([
    StructField("FirstName",StringType(),True),
    StructField("LastName",StringType(),True),
    StructField("Age",IntegerType(),True),
    StructField("Salary", IntegerType(), True),
    StructField("Checking", IntegerType(), True),
    StructField("Savings", IntegerType(), True),
    StructField("CreditCard", IntegerType(), True)
  ])df = spark.createDataFrame(data=data, schema=schema)df.show()

Spark 数据框(图片由作者提供)

“支票”、“储蓄”和“信用卡”列表明客户是否拥有该产品。

schema 参数是可选的,但是最好指定方案以确保数据类型是正确的。

df.printSchema()

数据框的方案(图片由作者提供)

1.用常数值创建新列

withColumn函数可以用来创建一个新列。为了创建一个常量值,我们需要用lit函数指定值,而不管数据类型。

df = df.withColumn("IsCustomer", F.lit(1))df.show()

(图片由作者提供)

withColumn函数的第一个参数是新列的名称,第二个参数指定值。

2.基于其他列创建新列

我们可以通过使用另一列中的值来计算新列的值。withColumn功能也允许进行计算。

df = df.withColumn(
    "NumberOfProducts", 
     F.col("Checking") + F.col("Savings") + F.col("CreditCard")
)df.select("Checking","Savings","CreditCard","NumberOfProducts").show()

(图片由作者提供)

“产品数量”列是支票、储蓄和信用卡列的总和。我们需要使用col函数写入列名。

3.创建条件列

我们可以使用when函数根据一个或多个条件指定新列的值。

让我们创建一个指示客户是否至少有一种产品的列。如果产品数量为一个或多个,新列的值为 1。否则为 0。

df = df.withColumn(
    "HasProduct",
    F.when(F.col("NumberOfProducts") >= 1, 1).otherwise(0)
)df.select("NumberOfProducts", "HasProduct").show()

(图片由作者提供)

该条件作为when函数的第一个参数写入。然后,我们为符合给定条件的行指定值。为了给不同的条件指定不同的值,我们可以将when功能组合成一个链式操作。不符合任何给定条件的行的值被写入otherwise部分。

4.在 select 函数中创建列

select函数可用于从数据框中选择列。它非常类似于 SQL 的 select 语句。

我们通常在select函数中写入列名。我们还可以在select函数中进行计算来创建新的列。

df_new = df.select(
    "FirstName",
    "LastName",
    "NumberOfProducts",
    F.lit(3 - df.NumberOfProducts).alias("Potential")
)df_new.show()

(图片由作者提供)

“潜在”列显示可以向客户销售多少新产品。因此,它的计算方法是从我们产品组合中的产品总数(3)中减去客户拥有的产品数。

alias方法用于为派生列或计算列指定一个名称。

结论

我们已经介绍了使用 PySpark SQL 模块创建新列的 4 种不同方法。

需要注意的是,Spark 针对大规模数据进行了优化。因此,在处理小规模数据时,您可能看不到任何性能提升。事实上,在处理小数据集时,Pandas 可能会比 PySpark 表现得更好。

如果你想在我发表新文章时收到电子邮件,别忘了订阅。

你可以成为 媒介会员 解锁我的全部写作权限,外加其余媒介。如果您使用以下链接,我将收取您的一部分会员费,无需您支付额外费用。

https://sonery.medium.com/membership

感谢您的阅读。如果您有任何反馈,请告诉我。

创建熊猫数据框架的 4 种不同方法

原文:https://towardsdatascience.com/4-different-ways-to-create-a-pandas-dataframe-91bca1ff31bb?source=collection_archive---------6-----------------------

熊猫难以置信的灵活性

纳塔莉亚·塞加托在 Unsplash 上的照片

Pandas 是 Python 的一个数据分析和操作库。它为有效的数据分析提供了许多功能和方法。用于存储数据的核心 Pandas 对象称为 dataframe,它由带标签的行和列组成。

就创建数据框架的方式而言,Pandas 非常灵活。在本文中,我们将介绍 4 种创建数据帧的不同方法。

1.Csv 或 excel 文件

Csv 是最常用的文件格式之一。因此,创建数据帧的首要方法是读取 csv 文件,这在 Pandas 中是一种简单的操作。我们只需要给出 read_csv 函数的文件路径。

read_csv 函数非常通用。它有几个参数,允许在读取时修改 csv 文件。我们也可以根据列和行部分地读取文件。

read_csv 函数非常类似。我们不使用 csv,而是使用它从 excel 文件创建数据帧。

2.Numpy 数组

由于一个数据帧可以被认为是一个二维数据结构,我们可以使用一个二维数组来创建一个数据帧。

import pandas as pd
import numpy as npA = np.random.randint(10, size=(4,3))A
array([[9, 2, 0],        
       [4, 3, 0],        
       [2, 3, 1],        
       [7, 1, 3]])

a 是一个 4 行 3 列的二维数组。我们可以将它传递给 DataFrame 函数。

df = pd.DataFrame(A)df

(图片由作者提供)

Pandas 默认为列分配整数索引。但是,可以使用 columns 参数对其进行自定义。

df = pd.DataFrame(A, columns=['cola', 'colb', 'colc'])df

(图片由作者提供)

Numpy 可以方便地创建样本数据。我们可以用整数和浮点数创建数组,也可以用特定分布的随机变量创建数组。Numpy 还提供函数来创建用常数值填充的数组。

3.词典

Python 字典也常用于创建数据框。键代表列名,行用值填充。

我们来做一个简单的例子。

dict_a = {
   'col_a':[1,2,3,4], 
   'col_b': [2,5,6,7], 
   'col_c':['a','b','c','d']
}df = pd.DataFrame(dict_a)df

(图片由作者提供)

我们还可以将 numpy 数组指定为字典值,这样就可以用这种方法创建更多的函数数据帧。

dict_a = {
   'col_a': np.random.randint(100, size=500),
   'col_b': np.random.random(500),
   'col_c': np.random.randn(500)
}df = pd.DataFrame(dict_a)print(df.shape)
(500, 3)df.head()

(图片由作者提供)

4.目录

List 是 Python 中内置的数据结构。它表示为方括号中的数据点集合。列表可用于存储任何数据类型或不同数据类型的混合。

从列表中创建数据帧是没有意义的。然而,我们可以使用嵌套列表(例如列表列表)来创建数据帧。

让我们首先创建一个列表列表。

lst_a = [['John', 23, 182, 'A'], ['Jane', 25, 179, 'A'], ['Mary', 21, 177, 'B']]

变量 lst_a 包含 3 个项目,每个项目是 4 个项目的列表。我们可以将 lst_a 传递给 dataframe 函数。

df = pd.DataFrame(lst_a)df

(图片由作者提供)

嵌套列表的第一项构成第一列,第二项构成第二列,依此类推。与使用字典不同,从嵌套列表创建的 dataframe 具有整数列标签。我们可以使用 columns 参数来自定义列标签。

df = pd.DataFrame(lst_a, columns=['Name', 'Age', 'Height', 'Grade'])df

(图片由作者提供)

就像列表一样,我们可以从元组创建数据帧。元组是由逗号分隔并包含在括号中的值的集合。与列表不同,元组是不可变的。不变性可以被认为是元组的识别特征。

结论

您可能并不总是需要创建自己的数据框架,但是知道如何创建数据框架是有好处的。你可以用它来练习或实现一个解决方案。通过使用 Python 内置的数据结构和 Numpy 数组,您可以创建高度定制的数据帧。

感谢您的阅读。如果您有任何反馈,请告诉我。

实施 CatBoost 的 4 个简单步骤

原文:https://towardsdatascience.com/4-easy-steps-for-implementing-catboost-c196fd82274b?source=collection_archive---------14-----------------------

关于如何应用新兴数据科学算法的端到端教程

在Unsplash【1】上由 Manja Vitolic 拍摄的照片。

目录

  1. 介绍
  2. 安装和导入
  3. 定义数据集
  4. 应用模型
  5. 预测
  6. 摘要
  7. 参考

介绍

CatBoost【2】在以 logloss 为误差度量的基准数据集上击败了许多其他流行的机器学习算法。它主要击败了 LightGBM 和 XGBoost,这两个工具最近不仅成为了数据科学竞赛的标准,也成为了专业设置的标准。现在是学习这个强大的库的时候了,下面是你如何通过四个简单的步骤来实现它。

安装和进口

本教程将使用流行的数据科学工具,如 Python 和 Jupyter Notebook。首先,我们将从三个简单的安装命令开始,然后转移到您的第一个基本 CatBoost 回归模型所需的所有必要导入,正如您将看到的,这可能是您的第一个也是最后一个,因为这就是 CatBoost 在没有太多调整或额外代码的情况下是多么令人印象深刻。

以下是主要的安装命令:

!pip install catboost!pip install ipywidgets!jupyter nbextension enable  — py widgetsnbextension

以下是主要的导入命令:

from catboost import CatBoostRegressorfrom sklearn.model_selection import train_test_splitimport numpy as npimport pandas as pd

如您所见,安装和导入只需要几行代码。我们还将导入其他常用的库,如 numpy、pandas 和 sklearn。接下来,我们将讨论数据集过程。

定义数据集

Christopher Gower 在Unsplash【3】上拍摄的照片。

有几种方法可以导入数据集,但我最常用的方法是用 pandas 导入 CSV 文件。你将建立你的 x 属性和你的 y 变量,你试图预测的变量。对于训练和测试分割,您可以按照 75:25 的常见方式隔离数据集。这种随机状态是为了让你在未来或与他人合作时能够复制同样的分裂。

以下是定义命令的主要数据集:

dataframe = pd.read_csv('file_path_to_your_dataset.csv')X = dataframe[['X_feature_1', 'X_feature_2', etc.,]]y = dataframe['target_variable']X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.75, random_state=42)

应用模型

当应用 CatBoost 模型时,它的工作方式类似于其他 sklearn 方法。然而,最重要的部分是指定您的分类变量,这样您就可以从 CatBoost 模型中获得最大收益。此外,CatBoost 有一些很棒的图形,可以可视化迭代过程中的错误度量改进,所以如果您想直观地看到训练集和测试集随着时间的推移是如何比较的,将图形设置为True是一个很好的方法。我还为回归模型添加了一个常见的loss functionRMSEevaluation metric。默认的n_estimators是 100,这是一个很好的起点,如果你看到模型在最后一轮仍在改进,那么你可以增加迭代的次数。

以下是主要的模型命令:

CAT_FEATURES = [] #list of your categorical features# set up the model
catboost_model = CatBoostRegressor(n_estimators=100,
                                   loss_function = 'RMSE',
                                   eval_metric = 'RMSE',
                                   cat_features = CAT_FEATURES)# fit model
catboost_model.fit(X_train, y_trian, 
                   eval_set = (X_test, y_test),
                   use_best_model = True,
                   plot = True)

预测

也许最简单也是最有收获的一步是看你的预测。您可以使用 predict 方法的一些其他有用的方式是,通过将两个索引都设置为true的内部连接将原始数据帧与您的预测合并,以便您可以看到导致这些预测的特征。这个命令也遵循大多数数据科学家习惯的典型 sklearn 方法。

下面是主要的预测命令:

# get your predictions
preds = catboost_model.predict(X_test)

摘要

照片由 krakenimages 在Unsplash【4】上拍摄。

我希望你喜欢这个关于 CatBoost 的简短教程。这真的是一个强大的机器学习算法和库,任何人都可以实现。它的设计使得参数调整通常是不必要的,默认参数是最好的。此外,还有其他重要的可视化工具可供您使用,它们是由流行的 SHAP 库制作的。本文的目的是向您介绍 CatBoost,接下来您所需要的就是这段代码和您的数据集,以开始进行您的第一次模型预测。

以下是所有步骤的总结:

* Installation and Imports* Define Dataset* Apply Model* Predict

我希望你觉得我的文章既有趣又有用!如果您以前使用过 CatBoost,请在下面随意评论。这对你现在的数据科学事业有帮助吗?你同意还是不同意,为什么?

请随时查看我的个人资料和其他文章,也可以通过 LinkedIn 联系我。我与这些提到的公司没有关系。

感谢您的阅读!

参考

[1]照片由 Manja Vitolic 在Unsplash(2018)上拍摄

[2] Yandex, CatBoost ,(2021)

[3]Christopher Gower 在 Unsplash 上拍摄的照片,(2017)

[4]照片由 krakenimages 在Unsplash(2020)上拍摄

我参加了 4 门免费课程来学习数据科学的 Python

原文:https://towardsdatascience.com/4-free-courses-i-took-to-learn-python-for-data-science-bcbcc7825476?source=collection_archive---------3-----------------------

我选了 10 多门课程后,选择了初级和高级免费课程。

Jana Leu 在 Unsplash 上的照片

在为一门课程付费之前,最好先查看一下网上发布了什么——有大量高质量的免费内容。这是我刚开始学数据科学 Python 的时候做的。我查看了付费数据科学课程的课程表,然后搜索了所有与 Python 相关的内容。

在选修了 10 多门课程后,我选择了我所学的最好的 4 门免费课程来学习数据科学的 Python。这 4 门课程涵盖了我在“学习数据科学 Python 的 4 个阶段”(尤其是第 1、2 和 4 阶段)中提到的大部分内容

虽然在完成这些课程后,你不会得到一个很好的证书,但你将获得的知识是无价的。

学习 Python——初学者的完整课程

这个 4 小时的 Python 初学者课程涵盖了你在学习数据科学中使用的库之前需要学习的所有 Python 基础知识。这是一门 Python 速成课程——当我学习这门课程时,我对编程一无所知。课程将向你展示如何设置 Python,教你如何打印你的第一个“Hello World”,并解释 Python 中的所有核心概念。

请不要跳过 Python 的基础知识,直接跳到数据科学的基础知识。请记住,Python 是一种编程语言,不仅在数据科学中有应用,而且在许多领域中都有应用。一些 Python for Data Science 课程可能会跳过将来可能会派上用场的核心 Python 概念。

本课程涵盖的一些数据科学中经常使用的主题包括:

  • 变量和数据类型
  • 列表、字典、元组、嵌套列表
  • 函数、返回语句、If 语句
  • For 循环,While 循环,嵌套循环
  • 尝试/除了,读写文件
  • Python 解释器、模块、Pip 类
  • 对象,对象函数,继承

除此之外,还有实践练习,你可以将学到的所有概念付诸实践。您将构建一个基本的计算器、猜测姓名、翻译器和一个多项选择测验。最重要的是,讲师拥有丰富的 Python 知识、清晰的解释和引人入胜的交付。

Python 用于数据分析课程

这个更像是一个播放列表而不是一道菜;然而,你会在这个列表中找到比其他付费课程更有用的讲座。

这个播放列表中的前 8 个视频使得成为一个 10 小时的完整长度的数据分析课程。它从数据科学家用来建立数据集的最流行的数据收集技术开始——网络搜集(在这里你可以找到其他很棒的网络搜集课程)。然后会学习 Pandas、Numpy、Matplotlib、Scikit-learn 等数据分析库。最重要的是,播放列表包括一些很酷的项目,可以帮助你获得实践经验。所有这些都是在 Jupyter 笔记本上进行的,这是数据科学家的首选计算笔记本。

本课程中用来教授前面提到的库的一些数据集是:

  • 口袋妖怪数据集
  • 国际足联 20 数据集
  • 亚马逊产品评论数据集
  • 销售数据

所以如果你想享受分析口袋妖怪和国际足联数据集的乐趣,或者使用产品评论建立机器学习模型,可以考虑观看这个播放列表。

我看了播放列表的前 8 个视频,这帮助我为 Python 数据分析打下了坚实的基础。

Python 的自然语言处理(NLP)课程

这是一个简短而有用的 2 小时 NLP 课程任何对自然语言处理领域感兴趣的人都应该观看。NLP 是人工智能的一个分支,允许机器理解人类语言。数据科学家使用 NLP 技术来解释文本数据进行分析。

本 NLP 简介涵盖以下主题:

  • 预处理技术(标记化、文本规范化和数据清理)
  • 机器学习技术(主题建模、单词嵌入和文本生成)
  • 用于 NLP 的 Python 库(NLTK、TextBlob、spaCy 和 gensim)

我特别喜欢这个短期课程,因为它非常有吸引力,包括垃圾邮件分类和推文情感分析等很酷的练习。当然,要做到这一切,您至少需要对 Pandas 和 Scikit-learn 等数据分析库有一个基本的了解。

机器学习和人工智能与 Tensorflow 2.0 课程

这是一门 7 小时的 Tensorflow 课程,专为希望用 TensorFlow 学习机器学习(ML)和人工智能(AI)的 Python 程序员设计。TensorFlow 是在 Python 上使用机器学习的最佳库之一。它使机器学习模型的建立对初学者和专业人士来说都很容易。

在本课程中,您会发现 8 个模块涵盖了 ML & AI 中的基础主题。仅举几个例子:

  • 核心学习算法
  • 张量流神经网络
  • 深度计算机视觉—卷积神经网络
  • 基于 RNNs 的自然语言处理
  • Q 学习的强化学习

我喜欢这门课,因为授课老师有很好的机器学习和人工智能知识,讲解也很清晰。此外,该课程非常吸引人,包含有价值的信息和编码示例。所有这些都使得学习 TensowFlow 变得更加容易。

我目前正在学习这门免费课程,到目前为止我已经学到了很多新东西,我希望在未来的项目中应用它们。

就是这样!希望这 4 门课程能帮助你提高数据科学的 Python 知识,就像它们帮助我一样!

与 3k 以上的人一起加入我的电子邮件列表,获取我在所有教程中使用的 Python for Data Science 备忘单(免费 PDF)

如果你喜欢阅读这样的故事,并想支持我成为一名作家,可以考虑报名成为一名媒体成员。每月 5 美元,你可以无限制地阅读媒体上的故事。如果你使用我的链接注册,我会赚一小笔佣金。

https://frank-andrade.medium.com/membership

4 个具有影响力的项目,开启您的供应链数据科学之旅

原文:https://towardsdatascience.com/4-impacting-projects-to-start-your-data-science-for-supply-chain-journey-fe068e503c29?source=collection_archive---------4-----------------------

来自实际运营案例研究的项目列表,可用于培养您在数据科学方面的技能,并快速影响您的组织

凯尔·瑞恩在 Unsplash 上的照片

作为一名数据科学家,如果你想让数据在你的组织中发挥作用,那就为大规模运营做出贡献,并看到你的模型被用来实施具体的解决方案:供应链是开始你的数据科学之旅的最佳人选。

我已经在供应链部门工作了 7 年多,重点关注仓储和运输业务。

作为一名供应链解决方案设计师,我的工作是将客户的需求转化为实际运营**(零售、电子商务、奢侈品、快速消费品、汽车),进行再造**研究以改善仓库运营和优化运输网络。

所有这些项目的共同点是我通过使用数据科学工具获得的杠杆作用,让我能够了解货物流动,有能力模拟成千上万的场景,并建立模型来预测未来。

我在这篇文章里分享,你可以通过下面的详细教程找到 14 重大案例分析 (编辑:我加了额外的例子) 可以应用到你的操作中。

对于每个例子,我都将源代码与虚拟数据共享,这样您就可以将模型应用到自己的项目中。

给学生的建议你可以使用这些例子中的任何一个作为建立你的文件夹的基础。
M5·卡格尔竞赛可以作为您构建解决方案的交易数据来源,以满足实际运营需求。

💌新文章直接免费放入您的收件箱:时事通讯

一.什么是供应链分析?

**目标:**使用 python 进行数据分析,在战略和运营层面实现数据驱动的诊断和决策,从而提高运营效率。

供应链可以被定义为以满足客户需求为最终目标的多方物流、信息流或资金流的交换。

信息和货物的流动—(图片由作者提供)

由于信息扮演着重要的角色,供应链分析已经成为组织用来从与价值链中包括的所有流程相关的数据中获得洞察力的方法和工具。

在这个视频中,你将发现 Python 不同类型的供应链分析,并了解它们对端到端运营的效率的影响,这样你就可以开始你的项目了。

二。你的循环经济有多可持续?

适用范围: 供应链可持续性

关键技能:库存管理、生命周期分析、二氧化碳排放量计算、供应链描述性分析(数据处理、可视化和 KPI 创建)

问题陈述:

循环经济是一种旨在最大限度减少浪费和最大限度提高资源效率的经济模式。

它包括设计注重寿命、重复使用和回收的产品和工艺。

(图片由作者提供)

一些公司已经实施了一种订阅模式,在这种模式下,客户支付一定的费用就可以在特定的时间段内获得产品或服务。

**目标:**使用数据分析模拟循环订阅模式的几种情况对一家快速时尚零售商的减排和用水的影响。

https://www.samirsaci.com/how-sustainable-is-your-circular-economy/

三。绿色库存管理

绿色库存管理—(图片由作者提供)

范围: 供应链可持续性

关键技能:库存管理、二氧化碳排放量计算、供应链描述性分析(数据处理、可视化和 KPI 创建)

问题陈述:

绿色库存管理可以定义为以环境可持续的方式管理库存。

对于分销网络而言,这可能涉及一系列旨在减少订单传输、准备和交付的环境影响的流程和规则。

(图片由作者提供)

如果我们降低商场补货的频率,会对二氧化碳排放量产生什么影响?

**目的:**利用数据分析模拟商店补货频率的变化,衡量对整体环境影响的影响。

https://www.samirsaci.com/green-inventory-management-case-study/

四。生产固定范围计划

生产计划—(图片由作者提供)

适用范围: 制造业

问题陈述:主生产计划是商业团队和生产之间的主要沟通工具。

您的客户发送采购订单和具体数量特定时间交货。

订单示例—(图片由作者提供)

生产计划用于通过在最小化库存最大化根据设置生产的数量之间找到平衡来最小化生产的总成本

**目标:**在本文中,我们将通过 python 使用 Wagner-Whitin 方法实现最优生产计划。

https://www.samirsaci.com/production-fixed-horizon-planning-with-python/

动词 (verb 的缩写)供应链可持续性报告

演示短片—(视频由作者提供)

范围: 供应链可持续性

**问题陈述:**多年来,投资者和客户对可持续发展透明度的需求不断增长。

投资者在评估组织的价值和弹性时,越来越重视企业的可持续性。

因此,越来越多的组织投入资源建设可持续发展报告能力并确定可持续供应链的最佳战略

目标:在本文中,我们将介绍一种简单的方法,使用 Python 和 PowerBI 来报告您的分销网络的二氧化碳排放量。

https://www.samirsaci.com/supply-chain-sustainability-reporting-with-python/

不及物动词供应链网络优化

供应链网络问题—(图片由作者提供)

适用范围: 供应链优化

问题陈述:供应链优化充分利用数据分析,找到工厂配送中心的最佳组合,以满足您客户需求**。**

在市场上的很多软件和解决方案中,背后的核心结构都是线性规划模型。

这些模型中的一些找到了正确的工厂分配,以满足需求并最小化成本,假设需求不变。

如果需求波动,会发生什么?

你的网络可能会失去健壮性,尤其是当你的需求季节性很强的时候(电子商务、化妆品、快时尚)。

**目标:**在本文中,我们将使用 Python 的蒙特卡罗模拟,构建一个简单的方法来设计一个健壮的供应链网络。

https://www.samirsaci.com/robust-supply-chain-networks-with-monte-carlo-simulation/

七。零售预测的机器学习

用于零售销售预测的机器学习的特征工程—(图片由作者提供)

范围: 需求预测

**问题陈述:**基于上一届 Makridakis 预测比赛的反馈,与基准统计模型相比,机器学习模型可以将预测误差降低 20%至 60%。 ( M5 竞赛)

它们的主要优势是能够包含外部特征,这些特征会严重影响销售的可变性。

例如,电子商务化妆品销售是由特殊事件 *【促销】*和你如何在网站上做广告引用 *(第一页、第二页……)*来驱动的。

这个被称为特性工程的过程是基于分析概念商业洞察力来理解什么可以推动你的销售。

目标:在本文中,我们将使用 M5 预测竞赛数据集来尝试了解几个特征对模型准确性的影响

https://www.samirsaci.com/machine-learning-for-retail-sales-forecasting-features-engineering/

八。仓库拣货生产率

三种不同提货路线的示例—(图片由作者提供)

范围: 仓库操作

**问题陈述:配送中心(DC),**在拣货路线中从一个地点到另一个地点的步行时间可占操作员工作时间的 60%到 70%

**目标:**您如何利用数据科学通过减少步行距离来提高仓库操作员的生产力?

我写过一系列文章,解释如何使用订单分批、空间聚类和寻路算法来提高拣选效率。

概念&使用的库:

  • 使用 Python 的 Pandas,Numpy 创建订单批
  • 使用 Python 的 Scipy 对提货地点进行空间聚类
  • 使用 Google 或为拣选路线设计寻路

结果:你的操作员采摘生产率的提高将导致成本降低

链接到文章

https://www.samirsaci.com/improve-warehouse-productivity-using-order-batching-with-python/ https://www.samirsaci.com/improve-warehouse-productivity-using-spatial-clustering-with-python/ https://www.samirsaci.com/improve-warehouse-productivity-using-pathfinding-algorithm-with-python/

九。资源计划和调度

短视频演示—(作者提供的视频)

范围: 仓库操作

**问题陈述:**在保证留住员工的同时,你需要雇佣多少临时工来消化你每周的工作量?

**目标:**按照你的经理确定的生产率目标,你必须最大限度地减少为处理工作量而雇佣的工人数量。

我写过一篇中型文章,讲的是如何使用线性规划找到合适的雇佣工人数量。

概念&使用的库:

  • 用 Python 的纸浆进行线性编程

结果:计算满足所有约束条件的最小工人数。

https://www.samirsaci.com/optimize-workforce-planning-using-linear-programming-with-python/

X.运输路线优化

短视频讲解—(视频由作者提供)

范围: 运输作业

**问题陈述:**如何组织送货路线和卡车装载来降低你的成本?

**目标:**对您的运输计划进行可视化和成本核算,以优化装载率并降低每吨运输成本。

不同路线的可视化(1 种颜色= 1 条路线)——(图片由作者提供)

我写了一篇关于如何处理数据和准备可视化的中型文章,以影响每吨交付的平均成本。

概念&使用的库:

  • 使用 Numpy、Pandas 进行数据处理,使用 Matplotlib 进行可视化(链接)

结果:使用更大卡车和更高装载率的优化运输计划。

https://www.samirsaci.com/road-transportation-network-visualization/

XI。精益六适马与 Python-Kruskal Wallis 测试

短视频讲解—(视频由作者提供)

范围: 仓库操作

精益六适马(LSS) 是一种基于循序渐进方法的方法,遵循 5 个步骤(定义、衡量、分析、改进和控制)。

作为一家标志性奢侈品牌的配送中心(DC)持续改进经理,你希望使用这种方法来提高特定流程的生产率。

问题
培训对操作人员的生产力有正面影响吗?

假设
培训对 VAS 操作员的生产力有积极影响。

实验 随机选择操作者,测量每批时间*(以秒为单位完成一批 30 个标签的时间)*构建 56 条记录的样本

目标:在本文中,我们将探讨 Python 如何在分析步骤中取代 Minitab 来测试假设了解什么可以改进特定流程的性能指标

https://www.samirsaci.com/lean-six-sigma-with-python-kruskal-wallis-test/

十二。使用 Flask + D3.js 的交互式仪表板

一个简单而有趣的可视化比一个非常复杂的模型更有影响力,特别是对于非技术型的观众。

因此,培养可视化技能是供应链数据科学家工作的重要组成部分。

显示奢侈品牌在线销售的仪表盘的最终效果图—(图片由作者提供)

范围 : 可视化&报告

我写过一篇中型文章,讲述在没有 javascript 先验知识的情况下,如何使用 D3.js 设计花哨的可视化(或者很轻)。

概念&使用的库:

  • 使用 Numpy、Pandas、Flask 和 D3.js ( 链接)进行数据处理

结果:一个动态的仪表板,可以与用户交互以展示商业洞察力。

https://www.samirsaci.com/build-interactive-charts-using-flask-and-d3-js/

十三。零售业的库存管理——随机需求

需求随机的库存管理—(图片由作者提供)

适用范围: 库存管理

**问题陈述:**对于大多数零售商来说,库存管理系统采用固定的、基于规则的方法来进行预测和补货订单管理。

考虑到需求的分布,目标是建立一个补货策略,使您的订购、持有和短缺成本最小化。

在之前的文章(链接)中,我们构建了一个模拟模型**,假设了一个确定性的恒定需求** (单位/天)

目标:在本文中,我们将介绍一种简单的方法,使用用 Python 构建的离散模拟 模型来测试几种库存管理规则,假设客户需求呈正态分布。

https://www.samirsaci.com/inventory-management-for-retail-stochastic-demand-2/

十四。基于图论的交通网络分析

基于网络图的交通网络优化

适用范围: 道路运输

目标:构建支持 FTL 路由优化的视觉效果

问题陈述:对于零售商来说,运送到商店的道路运输是物流成本的主要部分。

公司经常进行路线规划优化研究以降低这些成本并提高他们网络的效率。

它需要持续改进工程师和管理日常运营的运输团队之间的协作。

目的:在本文中,我们将使用图论来设计运输网络的可视化表示支持这种协作并促进解决方案设计

https://www.samirsaci.com/transportation-network-analysis-with-graph-theory/

结论

这些示例可以使用您自己的数据集直接应用到您的运营中,以快速提供将影响您的组织的见解。欢迎在评论区提问。

你可以在 Medium 上关注我,获取更多与供应链优化数据科学相关的文章。

关于我

让我们在 Linkedin 和 Twitter 上连线,我是一名供应链工程师,正在使用数据分析来改善物流运营并降低成本。

如果你对数据分析和供应链感兴趣,可以看看我的网站

https://samirsaci.com

参考

[0] 萨米尔萨奇,我的 Github 作品集,链接

数据科学简历的 4 项改进

原文:https://towardsdatascience.com/4-improvements-for-your-data-science-resume-1d1b087619f1?source=collection_archive---------6-----------------------

意见

以下是你现在可以做的…

Clem Onojeghuo 在Unsplash【1】上拍摄的照片。

目录

  1. 介绍
  2. 突出显示项目
  3. 写作风格
  4. 简历的风格和格式
  5. 宗旨
  6. 摘要
  7. 参考

介绍

一份简历似乎总是可以改进的,然而,对你来说最重要的事情是理解建议并以你特有的方式应用它。我的意思是,如果你问 100 名专业数据科学家和招聘人员,他们可能都会说一些关于你的简历需要批准的事情。然而,这些改进也可能是主观的,你应该有所保留。你的目标应该是尽可能多地了解简历,研究数据科学专业的简历,并应用这些建议,这样你就可以在改进简历的同时保持真实的自我。

例如,我已经成功地获得了工作,即使是用蓝色简历申请。是的,有些公司不喜欢这种风格,但我喜欢,我想为一家不认为这种风格是负面的,而是认为它是独特的公司工作。在我看来,你、简历、招聘人员和公司一起充当媒人,所有相关方都希望得到对他们最有利的东西,所以重要的是不要因为你认为这是他们想看到的东西,而展示你的简历,突出你是谁。话虽如此,让我们更深入地探讨一下这三种可以改善你的数据科学简历的方法。

突出显示项目

Jo Szczepanska 在Unsplash【2】上拍摄的照片。

虽然上市的知名公司可能是有利的,但记住简历的要点也很重要——那就是展示你的经历。当你盯着你的简历看了几个小时,熟悉了你的工作,就很容易忘记招聘人员和招聘经理不知道你的历史。这就是为什么你简历上的所有内容对于决定你是否能找到工作都很重要。

下面是一个例子,说明你不应该也不应该突出某个项目:

不好的例子:

优步(2020 年—目前)

Worked with team to use Data Science to solve the top 3 issues in the business development branch of the company.

好例子:

优步(2020 年—目前)

Created an automatic classifier using Random Forest to save the company 50% time and money. 

在第一个例子()中,你可以看到经验被突出了,但是一个项目没有。在 good 示例中,您可以看到一个特定的项目被突出显示,还有一些我将在下面讨论的其他品质。

写作风格

照片由格伦·卡斯滕斯-彼得斯在Unsplash【3】拍摄。

如前所述,突出项目对你的简历非常重要,更重要的是,你如何突出它们。例如,在上面的例子中,我们看到了一个突出显示项目的好版本。这个例子也展示了你应该在简历中包含的写作风格。

主要风格如下:

内容、方式和效果

  • 你做了什么
  • 你是怎么做到的
  • 它的作用是什么

你需要做的是遵循这种格式,同时也结合你的项目的细节。

以下是您可以做的一个示例:

自动分类产品 (1)通过开发 XGBoost 算法(2)将人工分组减少了 60% (3),最终节省了两倍的运营成本 (3)。

1 是“是什么”, 2 是“如何”, 3 是“效果”——当然,这可以分为两部分。这是一种易于记忆的格式,您可以在所有项目中使用这种格式。理解你所做的事情的影响以及你使用了什么工具是简单而容易的。

简历的风格和格式

亚历山大·安德鲁斯在Unsplash【4】上拍摄的照片。

也许你能在简历上做的最主观的改进就是它的真实风格。虽然你可以坚持某些写作风格,但这种改进对一些招聘人员和招聘经理的影响较小,而对一些人来说,这可能会让他们更多地进入你的简历。就像我之前说的,你简历的风格可以让你知道公司是否重视你的一些特别之处。例如,一些公司喜欢平淡无奇的黑白简历,而一些公司喜欢突出的东西,可以是多种形式。另一方面,有些公司可能根本不在乎。

然而,有一种风格我认为是公司普遍接受的。那种风格对于 让你的简历不忙至关重要——视觉上 。我所说的这种风格是指格式化你的简历,不管是颜色、主题还是你如何组织你的简历的顺序,来创造负面空间,以便你的简历的读者被你想要强调的点和信息所吸引。

这里有一个糟糕的例子:

展示公司、日期、项目、技能和教育,一个挨着一个,这样读者会不知道先看什么。

Uber (*2020 — current) -* Worked with team to use Data Science to solve the top 3 issues in the business development branch of the company.Skills               Java, Python, HTML, Pandas, NumPyEducation University of Texas at Austin (2018 - current) 

如你所见,这个例子很难理解。我不确定先关注什么,即使公司、技能、教育、格式的整体顺序都很好,但这些部分的位置在视觉上没有吸引力——不要这样做。

这里有一个很好的例子:

**Uber (*2020 — current)*** Created an automatic classifier using Random Forest to save the company 50% time and money.**Skills** Java, Python, HTML, Pandas, NumPy**Education** University of Texas at Austin (2018 - current)

正如你在上面看到的,这种格式本质上与 bad 示例是相同的信息,但是它用 加粗 格式突出了公司、技能和教育,同时还具有清晰、直观的部分顺序,并且每个部分都很好地描述了该部分。

按照视觉顺序显示公司、日期、项目、技能和教育程度,这样读者可以从简历的顶部进入底部,没有其他东西挡道。

宗旨

照片由马库斯·温克勒在Unsplash【5】上拍摄。

你简历的最后一个改进可能是最独特的。我原本没有在简历中包括这一部分,但最终还是包括了,并得到了招聘人员和招聘经理的极大回应。这一改进是什么,用几句话来强调你在数据科学领域的使命。这是一种自由展示你的目标和专长的方式。

例如,下面是我的使命陈述部分,它被定义为“目标”:

作为一名数据科学家,我正在寻找一个有所作为的角色,在这个角色中,我可以通过创建、发展、维护并最终揭示有意义的见解来支持和验证相关的数据驱动的变化,从而保持对社区的热情。通过使用我的多学科背景来实现可扩展的、统计分析和漂亮的视觉评估,来满足我的好奇心和挑战自己。

我的可能更长,但对我来说,这值得冒险——因为它凸显了我是谁,我想要什么。这一部分可以小得多,同时也要突出你的哪些方面对你申请的工作是重要的和相关的。

摘要

我已经讨论了一些我认为会帮助你找到工作的改进,最终会让你的简历变得更好。当然,对任何建议都要有所保留,这很重要,只要确保你在简历中所做的改变是因为你想要的,并且是对你自己和你的工作真实的。总的来说,我们已经讨论了各种改进,比如突出项目、突出项目的风格、简历格式的风格,以及加入任务陈述。

以下是所有的改进,总结如下:

* Highlight Projects* Style of Writing* Style and Format of Resume* Mission Statement

同样值得注意的是,所有这些简历改进也适用于非数据科学职位。

我希望你觉得我的文章既有趣又有用!如果您在简历中利用了这些数据科学改进中的任何一项,请随时在下面发表评论— 以及哪些改进? 现在对你的数据科学事业有帮助吗?你同意还是不同意,为什么?

请随时查看我的个人资料和其他文章,也可以通过 LinkedIn 联系我。我与这些提到的公司没有关系。

感谢您的阅读!

参考

[1]Clem Onojeghuo 在 Unsplash 上拍摄的照片,(2017)

[2]照片由 Jo Szczepanska 在 Unsplash 上拍摄,(2018)

[3]Glenn Carstens-Peters 在 Unsplash 上拍摄的照片,(2017)

[4]图片由 Alexander Andrews 在Unsplash(2017)上拍摄

[5]马库斯·温克勒在 Unsplash 上拍摄的照片,(2020)

4 对数据科学行业的洞察

原文:https://towardsdatascience.com/4-insights-into-the-industry-of-data-science-978224c53699?source=collection_archive---------32-----------------------

进入当前的数据科学行业需要什么

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

“快跑吧。害怕它。但是数据总是会赶上的。你要么成为数据的奴隶,要么用数据改变世界。”

我们生活在一个数据是唯一重要的东西的社会。如果你知道如何正确解读数据,你就能很好地把握公司的未来。如果你能分析它们,使用它们,和它们一起工作,你就能创造奇迹。也许这就是为什么数据分析师和数据科学家的工作恰好是当前最受欢迎的。

了解了一家领先制药公司的数据科学家 Nisarg Jain 先生的见解后,您可以放心,随着阅读的深入,您将更好地了解如何在该领域取得成功。

  1. 你说什么样的技能?

数据分析行业已经发展了多年。进入职位安排的场景,公司期望一个人应该拥有某种技能来通过面试。但是,别担心。我们不是在谈论创造某种先进技术的压倒性技能组合。他们期望你有最基本的。可以大致分为以下几类:

软技能: 这是能成就或毁掉任何一场面试的东西。不管你有多少硬技能,如果你没有软技能,事情会变得很艰难。清晰的交流,展示批判性的思维,以及对问题的分析方法对你有很大的帮助。

硬技能: 好吧,一旦你有了软技能,一般的技术技能就不能放过。瞄准数据分析中的特定角色需要 SQL 和 MS Excel 的基础知识。最重要的是,数据科学的角色将需要使用 Python 或 R 甚至 SAS 语言。

“通常在分析中测试的主要内容是你分解和解决问题的能力,以及你的思维过程。”

  1. 为什么要工程师独享所有乐趣?

人们经常有一种误解,认为只有攻读 B. Tech 学位的学生或具有计算机科学背景的人才能进入数据分析领域。但是时代变了,你知道。一旦技能获得,那么它就成为一个水平领域。这只取决于这个人有多努力,或者他们选择了什么样的道路。一旦他们具备了进入该领域的基本技能,计算机科学背景的人和金融背景的人就没有区别了。

“我个人有机会与这些没有技术背景但仍然在分析领域大获成功的人一起工作。”

  1. 不要烦恼,行业有空间给所有人。

随着市场的增长,越来越多的人希望进入这个领域。既然我们已经确定这个领域尤其是数据分析不是学位特定的,那么问题就来了——“这个行业有足够的空间容纳所有人吗?”答案很简单。随着涌入人数的增加,机会也在增加。一些 5 年前不存在的专业角色正在被创造出来。所有的公司都变得越来越重视数据。他们也意识到拥有自己的分析团队比外包工作更有效率。这就带来了更多的机会。所以,这是双向的。随着进入这一领域的人数增加,行业提供的机会也在增加。

“有很多公司正在扩展他们的分析能力,创造更多的职位。这些公司现在对数据的倾向是巨大的。拥有一个内部分析团队对公司来说更有意义。”

  1. 最后但同样重要的是——了解你的利基。

数据分析和数据科学的领域非常非常广泛。除非你决定你的定位是什么,否则没有固定的技能可以让你工作或获得成功的结局。如果你想追求可视化,那么你可以尝试在 Tableau 等工具中磨练你的技能,或者如果你需要工程,那么在机器学习和数据工程中有大量的机会。所以,唯一需要做的就是自己决定。不一定要在你进入这个领域的那一刻,但一定要越早越好。因为毕竟,谁不想超过别人,对吗?

“你越早认识到自己,越早适应你将在分析领域追求的目标,这将大大有助于你与 5 年后才认识到这一点的人区分开来。”

嘿,如果你陷入困境,不知道如何前进。去找个人聊聊。去网。给任何人和每个人发消息。想的话给自己找个导师吧。接受你需要的帮助,然后做好工作。你的成功一直在你的手中。

参考文献:

[1]引自我主持的播客的尼萨尔·贾恩先生的话:https://open.spotify.com/episode/4syoDqlgnie4RdvbIoPNIb

4 学习机器学习的互动工具

原文:https://towardsdatascience.com/4-interactive-tools-to-learn-machine-learning-eedfdfb4005e?source=collection_archive---------37-----------------------

这些互动工具会帮助你理解机器学习

约翰·施诺布里奇在 Unsplash 上的照片

作为数据科学家,我们需要机器学习来理解和应用我们的日常工作。要知道的知识不仅限于从库中导入代码,而是扩展到模型概念、算法选择、度量标准等等。

为了帮助学习机器学习概念,我将在本文中概述我的四个交互式工具,您可以使用它们来学习。让我们开始吧!

1.假设工具

假设工具是一个基于网络和笔记本的可视化工具,用来理解机器学习行为是如何工作的。假设工具的开发是为了理解我们的训练模型背后的复杂性,并对假设情况进行实验。

假设工具是一个交互式工具,意味着我们可以通过图形用户界面来实时观察变化。让我给你看下面 GIF 中的例子。

作者 GIF

这似乎是一个令人兴奋的工具,对不对?上面的 GIF 显示了我们可以用来理解我们训练过的机器学习模型的所有选项卡。在这个例子中,我们将机器学习模型用于在输入 UCI 数据上训练的二元分类模型。我们可以在两个训练好的模型上对这些数据进行比较和实验,所以让我们分解每个选项卡,以便更好地了解函数对模型做了什么。

作者图片

开始时,我们有三个选项卡;数据点编辑器、性能和公平性以及功能,其中每个选项卡从不同方面可视化机器学习模型:

  • 数据点编辑器:每个数据点的可视化探索
  • 性能和公平性:使用各种度量标准进行模型性能探索
  • 特征:用于模型训练的特征摘要

让我们仔细看看每个选项卡中的可用性。

数据点编辑器

作者图片

数据点编辑器是一个选项卡,我们可以在其中根据模型探索每个数据点预测。该选项卡可以选择每个数据点来研究模型行为。让我们试着选择其中一个数据点。

作者图片

在数据点选择中,顶部允许您选择轴、标签和宁滨——如果您想了解特定信息,这很有用。默认情况下,X 轴和 Y 轴除以模型得分输出(在模型 1 和 2 之间)。

作者图片

当您选择了数据点后,您将获得类似于上图的信息。在这一节中,我们带来了关于数据点的特征和每个标签的模型比较分数的所有信息。

性能和公平性

作者图片

在“性能和公平性”选项卡中,您可以尝试各种阈值、基本事实、成本比率和更多,以了解当我们更改某些方面时,您的机器学习模型的结果。

作者图片

您可以在左边部分更改您的假设,例如预测特性和优化策略。

作者图片

在右边部分,您可以试验每个模型的阈值,看看对性能的影响。这些变化是实时发生的,所以您需要的决定使用哪个模型以及您的模型是否满足您的要求的信息可以被快速评估。

特色

作者图片

“功能”选项卡是获取模型训练中使用的每个功能的汇总统计信息的部分。您需要的所有基本统计数据都是可用的——均值、中值、标准差等等。此外,特征被分成数字和分类标签,以便更容易学习。

如果你想了解更多笔记本环境下的假设工具,你可以点击访问教程。

2.深操场

Deep Playground 项目是一个交互式的基于网络的神经网络,供人们学习。web 对于任何初学者来说都足够简单,可以理解神经网络是如何工作的。

作者 GIF

上面的 GIF 总结了整个交互过程;你可以修改顶部的超参数——学习率、激活、正则化、速率和问题类型。

作者图片

Deep Playground 只有四种数据集可以使用,但它代表了机器学习项目中的常见问题。在这一部分,您还可以试验测试数据比率、噪声和批量大小。

作者图片

接下来,您可以选择如何处理您的功能以及您希望的转换类型。此外,您可以添加或减少隐藏层和每个隐藏层的神经元。完成实验设置后,您只需按下 play 并查看输出,即可了解神经网络如何与您的设置配合工作。

作者图片

Deep Playground 是一个开源项目;如果你想投稿或者对源代码感兴趣,你可以访问 GitHub 页面。

3.西蒙·沃德·琼斯的概率分布

机器学习完全是关于我们模型的概率输出,学习概率分布将有助于我们理解我们的模型是如何工作的。有时候,如果没有清晰的可视化,很难理解概率分布是如何工作的——这就是为什么我推荐 Simon-Ward Jones 的概率分布帖子来帮助你学习。

作者 GIF

本帖给你一个对以下概率分布的可视化实验:

  • 二项分布
  • 二项分布
  • 正态分布
  • 贝塔分布
  • 对数正态分布

帖子详细描述了每个分布中的概率密度函数,以及如果我们改变参数值会发生什么。我建议您尝试一下发行版中的变化,因为这有助于您更快地理解这个概念。

4.嵌入式投影仪

当使用机器学习模型训练时,非结构化数据比结构化数据更难理解。理解它的一种方法是使用无监督算法(如 PCA 或 t-SNE)将数据嵌入或表示为数学向量。来自 TensorFlow 的嵌入投影仪为我们提供了一个交互式可视化工具,帮助我们理解嵌入层。

作者 GIF

正如你在上面的 GIF 中看到的,我们使用 Word2Vec 提供的数据集来了解每个单词是如何表示的,以及它们在低维特征中彼此有多接近。

在左侧部分有来自 NLP 数据、图像数据或表格数据的五个数据集。您可以使用一些算法来嵌入数据集,如 UMAP、T-SENE、PCA 或 Custom。最后,您可以在底部选择想要可视化的组件。

作者图片

在右侧,我们可以选择如何通过显示所有数据点或隔离数据点来可视化我们的数据。隔离与您想要选择的邻居号码相关,并且决定将基于您选择的距离度量。如果你要选择一个特定的单词,你可以使用搜索栏。

作者图片

如果你想了解更多关于嵌入式投影仪的信息,你可以在这里访问文档。

结论

理解机器学习概念很难,尤其是没有清晰的可视化。为了帮助你学习,我想概述四个交互工具,帮助你理解机器学习;它们是:

  1. 假设工具
  2. 深操场
  3. 概率分布
  4. 嵌入式投影仪

希望有帮助!

在我的 LinkedInTwitter 上访问我。

如果您喜欢我的内容,并希望获得更多关于数据或数据科学家日常生活的深入知识,请考虑在此订阅我的 简讯。

如果您没有订阅为中等会员,请考虑通过 我的推荐 订阅。

数据科学家的 4 款 Jupyter 笔记本替代产品

原文:https://towardsdatascience.com/4-jupyter-notebook-alternative-for-data-scientist-da3d47ff40b0?source=collection_archive---------3-----------------------

出于多种原因,您可能希望使用替代方案。

作者图片

如果您喜欢我的内容,并希望获得更多关于数据或数据科学家日常生活的深入知识,请考虑在此订阅我的简讯。

作为现代数据科学家,编程是我们必须掌握的主要工具。虽然,不像软件开发人员或工程师,我们利用编程语言进行数据分析,而不是软件开发。这就是为什么我们数据科学家被教导在工作中使用数据分析 IDE。

JupyterNotebook是许多数据科学家开始的主要环境,因为它最容易理解并与 Anaconda 环境(许多人用它来建立数据科学平台)集成。然而,一旦你理解了 Jupyter 笔记本的工作原理,我想介绍几个 Jupyter 笔记本的替代品。

以下是我为数据科学家准备的四款 Jupyter 笔记本替代品。让我们开始吧。

1.Visual Studio 代码

Visual Studio Code或 VS Code 是一个免费的开源 IDE,专为程序员无缝运行和执行他们的代码而设计。VS 代码是通用的,因为它们包括许多可定制的扩展、代码调试和用于版本控制的 GIT 集成。

过去,VS Code 更适合开发人员或工程师,因为它没有任何数据分析能力,但自 2020 年以来,VS Code 团队与 Jupyter 团队合作,在 VS Code 中引入了一个集成笔记本。结果是一个惊人的 IDE 工作簿,您可以使用它进行数据分析。让我在下图中展示一下 VS 代码笔记本集成是如何工作的。

作者图片

正如您在上面的图像中所看到的,您正在左侧运行您的代码(它看起来像 Jupyter 笔记本中的一个单元格),结果显示在右侧。让我们试着更详细地剖析这个过程是如何工作的。

作者图片

首先,为了初始化笔记本单元格,你需要在你想要运行的代码上方的上键入**# %%**,作为一个类似于 Jupyter 笔记本的单元格。当您这样做时,VS 代码会自动理解您打算启动笔记本并显示单元格选项。当您想要运行单元格时,您可以使用快捷键 shift + enter 来运行它。

当您运行单元代码时,它会自动在交互式笔记本中运行—例如;我运行下面的代码。

作者图片

在上图中,我加载了一个 mpg 数据集,并显示了数据集的头部(前 5 行)。在笔记本中,它的处理类似于下图。

作者图片

能力是有的,但是为什么我们要用 VS Code notebook 而不是 Jupyter Notebook 呢?我可以给你几个理由:

  1. 如果你有开发背景,VS 代码会让你感觉很熟悉,
  2. VS 代码与 GIT 版本控制集成在一起,当您想查看旧代码时,
  3. 代码调试存在于 VS 代码中,不像在 Jupyter Notebook 中。

我能想到的原因还有很多,但最终还是会回到你的偏好上。

2.互动

什么是互动 ?它是一个开源的交互式环境,设计用于端到端的数据分析工作流,包括一个用于数据探索、构建应用程序、版本控制等的笔记本。在我看来,nteract 的主要卖点是交互部分,UI 允许你控制笔记本结果,并将其作为应用程序呈现。

nteract 环境包含一个桌面应用程序,您可以在这里下载,内核会自动集成到您的 Anaconda 环境中。因此,当您已经安装了 nteract 时,您可以打开您的笔记本,而无需启动 Jupyter 笔记本或前往 Jupyter 实验室。例如,我会给你看我的旧笔记本和文件夹。

作者图片

从上面的图片中,您可以看到 ipynb 文件现在默认情况下可以使用 nteract 打开。让我们看看你打开后是什么样的。

作者图片

nteract IDE 如上图所示。nteract 环境类似于 Jupyter 笔记本,但在单元格放置方面有更多的控制,并集成为一个应用程序。下面我们来看看下面 GIF 中 nteract 的用法。

作者 GIF

您还可以使用各种 nteract 库来提高工作效率,例如:

  • Papermill 用于笔记本参数化,可以自动将您的笔记本结果保存到云环境中。
  • 剪贴簿用来保存你笔记本上的所有数据和图像,基本上就是“报废”它,
  • 书店用于版本控制。

3.橄榄石

Jupyterlite 是一款基于浏览器的 Jupyter 笔记本由 Jupyter 开发者非正式开发。它利用了 Jupyter Lab 和 Jupyter Notebook 的许多功能,可以在浏览器中直接使用。开发仍在进行中,所以预计许多变化和附加功能将被添加,但我们可以检查 Jupyterlite 环境。

您可以使用 Jupyter Lab style 或 Retro Lab Style (经典 Jupyter 笔记本)中的演示来尝试 Jupyterlite 浏览器。无论哪种方式,基本环境已经包含了一些功能,例如:

  • 预装可视化软件包,如 altair、plotly 和 matplotlib
  • 基于浏览器的笔记本交互,用于托管、保存和导出笔记本
  • Jupyterlite CLI

让我们试着用 Jupyterlite 提供的 plotly 笔记本演示来检验一下 Jupyterlite 的基本用法。

作者 GIF

从上面的 GIF 中,我们可以看到环境仍然类似于 Jupyter 笔记本,但它似乎更基础。不过,UI 的交互性稍强一些——可以像 nteract 一样移动单元格。

如果您想在自己的环境中构建 Jupyterlite,可以通过安装 Jupyterlite 来实现。

python -m pip install --pre jupyterlite

当您完成软件包的安装后,您需要运行以下代码。

jupyter lite init
jupyter lite build
jupyter lite serve

完成了。现在您已经在本地构建了 Jupyterlite,并且可以从您的浏览器访问它。然而,就像我之前提到的那样,Jupyterlite 仍在开发中,所以我预计未来会有很多事情发生变化。

4.谷歌联合实验室

谷歌合作实验室 或 Colab 是由谷歌团队开发的基于浏览器的笔记本电脑。笔记本环境是基于 Jupyter 笔记本环境的,所以对于已经在使用 Jupyter 的人来说会感觉很熟悉。笔记本如下图所示。

作者图片

从上图可以看出,环境类似于 Jupyter 笔记本。那么,我们为什么要用 Google Colab 呢?我可以给你几个理由:

  • 它非常适合任何无法接触到高性能硬件/GPU 的人。因为 Colab 托管在云中,并为您提供免费的 GPU,所以您可以分析内部不可能的更大的数据集——特别是如果您仍处于学习阶段,
  • 易于与 Google 数据库集成,如 Google Sheet、Google Drive 或 Google BigQuery,
  • 可以用于特定目的的即时代码片段。例如,从网络摄像头拍摄或创建堆叠图表。

作者图片

Google Colab 非常适合那些仍在学习或密切使用 Google 环境的人,因为它是通过 Google 服务集成开发的。

如果你想了解更多关于 Google Colab 的知识,建议你去看看他们的笔记本教程。本教程提供了所有基本的 Google Colab 用例,以及如何使用 TensorFlow 开发自己的神经网络。

结论

数据人员广泛使用 Jupyter 笔记本,因为它易于使用,而且是专门为数据分析开发的。但是,随着您对 Jupyter 笔记本越来越熟悉,您可能需要检查另一种替代方案。

在本文中,我向您介绍了四种可供选择的 Jupyter 笔记本电脑。它们是:

  1. Visual Studio 代码
  2. 互动
  3. 橄榄石
  4. 谷歌 Colab

希望有帮助!

在我的LinkedInTwitter 上访问我。

如果您没有订阅为中等会员,请考虑通过我的推荐订阅。

开放数据发布的 4 个关键因素——从用户的角度

原文:https://towardsdatascience.com/4-key-factors-for-open-data-publication-from-a-user-standpoint-3d451bf321d0?source=collection_archive---------54-----------------------

#社会影响数据:好的开放数据源应该是什么样的

开发署亚太区域创新中心 UNV 在线志愿服务在线志愿者邓华。

图片来自 CILIP Photos 来自 Flickr

今年夏天,我参与了一个完全基于开放数据的项目——东南亚新冠肺炎应对措施的数据可视化和分析。在搜索开放数据源并对其进行处理的过程中,我发现在发布开放数据方面没有黄金标准,数据发布者也在探索过程中。老实说,有许多细微的地方看似微不足道,但可能会给用户带来不便。我相信从一个数据用户的角度来看对社区来说是有价值的,这促使我写了这篇博客。

从用户的角度来看,我总结了发布开放数据的四个关键因素:(1)数据准备,(2)数据发布,(3)副产品,和(4)社区,每个都有一些子标准。作为一个例子,我将比较我在我的项目中使用的三个数据源:菲律宾卫生部,谷歌新冠肺炎社区流动性报告,以及牛津新冠肺炎政府反应跟踪系统(OxCGRT) 。在下面的表格中,我用绿色、黄色和红色将简单的描述放入不同的单元格中,分别表示好、不够好和不好的做法。每一个都将在下面的章节中详细讨论。至于我没有评论的地方,我只是让它空白。

作者图片

#1 —数据准备

#1.1 —一致性

数据发布者应该首先确定一些要遵循的标准,并在进行更新时遵守这些标准。如果必须进行调整,应向用户明确说明。否则可能会造成混乱和不便。例如,关于谷歌移动指数,有一段时间它从使用“曼尼拉大都会”改为“国家首都地区”,这基本上是菲律宾同一地区的不同名称。在我的项目中,由于我将不同的数据源组合在一起,并且它们分别使用不同的命名约定,所以我必须自己创建一个映射字典。当 Google 在没有声明的情况下(或者不明确地声明)做出更改时,我必须弄清楚发生了什么,并相应地修改我的映射。

此外,一致性也意味着坚持主要的惯例。正如我上面提到的,如果不同的数据源都遵循相同的约定,用户自己进行映射会少受些苦。一些典型的例子包括地理名称、日期格式等。当然,在某些情况下,可能有多个流行的约定,因此很难在不同的数据所有者之间协调约定的采用。一些可能的解决方案包括:(1)数据发布者应该清楚地声明它使用什么约定,以便用户被很好地指导自己做映射;(2)第三方平台或服务提供商可以维护一些常用的映射,或者自动帮助用户实现标准化。

#1.2 —质量

数据用户总是期望数据质量好,而现实有时恰恰相反。很高兴看到菲律宾卫生部每天都在公布新冠肺炎病例信息、检测和检疫设施等数据。但我们也应该意识到数据的质量问题,包括明显的延迟和错误,正如菲律宾大学新冠肺炎疫情响应团队所分析的。一个值得注意的问题是价值缺失。如果这些缺失的数据不是随机的,而是有偏见的,那么基于这些数据的所有分析的可靠性将会出现巨大的问题。因此,政策制定也会恶化。为了解决这个问题,数据所有者可以通过制定更明确的要求和指示,更加关注数据收集过程。此外,采用某些数据质量保证程序将非常有帮助。

#1.3 —粒度

在数据隐私和可行性的范围内,开放数据应该尽可能细粒度地支持广泛的应用。例如,菲律宾卫生部的病例信息数据详细到个人级别,与国家级别的汇总数据相比,可以支持更多类型的分析和应用。用户可以根据自己的需要,自己深入到城市级别、地区级别、国家级别。

#1.4 —可用性

这可能不太重要,但很容易改进,以获得更好的用户友好性。对于缺乏数据争论经验的用户,他们可能希望数据的格式完全符合他们的期望。例如,Google Mobility data 现在提供了下载全球 CSV 或地区 CSV 的选项,这样用户就可以只查看他们感兴趣的地区。另一个例子是 OxCGRT,它提供表格格式数据和时间序列格式数据。此外,遵循命名约定为变量提供直观的名称也可以使数据集更加用户友好。

截图来自谷歌新冠肺炎社区移动报告2021–02–07

截图来自ox cgrt covid-policy-tracker Github 仓库2021–02–07

#2 —数据发布(可访问性&维护)

关于如何发布开放数据没有明确的标准,所以你可以找到许多不同的做法。从用户的角度来看,我认为有两个关键的判断标准:(1)是否易于访问,以及(2)是否易于维护。

至于菲律宾 DOH 数据,公布在 Google Drive 上。它的好处是每个人都知道如何使用 Google Drive,所以它非常容易使用。流程如下:你要先点进一个“先读我”的 pdf 文件,然后向下滚动寻找中间最新的链接,最后带着你需要的数据到达目的地。这个过程增加了项目维护自动化的难度,因为用户每次都必须手动遵循这个过程来下载最新的文件。

2021-02-07 菲律宾卫生部新冠肺炎跟踪者的屏幕记录

至于谷歌的移动数据,它既易于访问和维护。他们的网站上有触发下载的按钮,它的路径可以很容易地嵌入到你的脚本中。至于 OxCGRT,用户既可以从 Github 下载 csv 文件,也可以使用 API 进行访问。Github + API 可以支持多种类型的使用,并且易于用户更新,尽管这两种方式对于非技术用户来说可能不太容易使用。

还有其他共享开放数据源的实践。例如,微软在 Azure 上维护了一个新冠肺炎开放数据集的数据湖,它们对于 Azure 中集成的一些服务是现成可用的。在这种情况下,通常不是发行商决定在 Azure 上发布数据,而是 Azure 在原发行商的许可下,在其网站上收集和整合开放数据源。

# 3——副产品(文档&可视化&报告)

与文档、可视化和报告等数据一起发布的“副产品”可以帮助用户理解数据。文档是必备的,而可视化和报告是最好的。没有文档,用户就无法获得对数据的详细和无偏见的理解,而这是任何深入分析和应用的基础。通过可视化和报告,用户可以摆弄数据,轻松地进行一些基本分析,甚至直接从报告中获得见解。提供基本的可视化和报告可以防止社区的重复工作,并减少开放数据使用的障碍。

至于菲律宾卫生部的数据,它提供了文件来描述每张表的元数据和每个字段的内容。它的技术说明每天都在“READ ME FIRST”pdf 中更新,到目前为止,它是一个非常长的文件,读者很难抓住它的要点。此外,没有关于数据收集程序的描述。当我探索数据时,我有时会感到困惑,我必须做出假设才能继续,这可能会被证明是错误的。

至于谷歌移动数据,它提供了国家和地区的报告。在该报告中,有基本描述和详细说明的链接,这些详细说明涉及如何收集数据、如何构建指标以及解释数据时应该注意的事项。还有针对该国家或地区的基本折线图和指标。这些报告是高度标准化的,这就是为什么谷歌可以向不同国家和地区提供单独的报告。这些报告的缺点是过于简单,无法获得深入的见解。

至于 OxCGRT,在我看来,它确实做得很好,因为它提供了我能想到的几乎所有支持。详细明确的指令书和工作底稿,检查;我们的世界在数据、检查方面提供的交互式仪表盘;区域总结,检查!

截图自ox cgrt2021–02–07

截图来自ox cgrt2021–02–07

#4 —社区(沟通渠道&用例分享)

数据公布后,应该需要更多的交流和分享机会,以最大限度地扩大影响和覆盖面。数据发布者和用户之间应该有畅通的沟通渠道,以便用户可以及时报告数据问题并得到答复,数据发布者可以获得反馈并对数据的任何相关方面进行改进;用户还应该有机会与其他用户分享他们的发现和经验,从而为整个社区的知识库做出贡献。

还没有一个单一的平台作为社会公益社区的开放数据中心。数据发布和用例共享大多是在互联网上逐个案例地进行的。在这里,我想介绍一些良好的实践,它们来自在社区中承担不同角色的不同类型的实体,我相信未来会出现更多创新和引人入胜的实践。

  • OxCGRT 。它对数据、分析或项目的任何方面的反馈都是开放的。用户可以通过调查表或电子邮件与团队联系。
  • 脸书数据为好程序 。脸书有一个专门的团队来管理这个项目。至于更成熟的数据集,他们已经把数据集完全公开了;对于一些可能仍然需要进一步测试或反馈的数据集,他们根据请求向研究人员和非营利组织提供访问权限。在他们的网站上,用户可以很容易地找到“案例研究”和“新闻”部分,以学习好的用例。此外,他们还建立了松散的渠道,以促进数据发布者和数据使用者之间的沟通。
  • Data4COVID19 。这是由 GovLab 承担的一系列项目,其中一个是数据协作存储库。在存储库中,您可以找到三种类型的信息:(1)正在进行的数据协作项目,(2)数据竞争、挑战和提案征集,以及(3)对数据和专业知识的请求。所有这些都是通过 google sheet open for edit 完成的,这在技术上并不难,但却产生了巨大的影响。
  • Data.govt.nz. 这是一个由新西兰政府支持的一站式开放数据网站。在这里你几乎可以找到你想要的任何东西,数据集,发布数据的框架和指南,社区和团体,等等。

感谢您的阅读!这是#Data for Social Impact 系列博客的最后一篇文章。在 第一篇博客 中,我详细介绍了我们针对东南亚新冠肺炎疫情的数据可视化和分析项目。在第二篇博客中,我分享了我作为新冠肺炎数据项目在线联合国志愿者的故事,以及我对如何在公共部门更好地利用开放数据和众包的思考。在第三篇博客中,我从用户的角度讨论了好的开放数据应该是什么样的。我真诚地希望这一系列博客能有所帮助!

理解气候危机的 4 个关键数字

原文:https://towardsdatascience.com/4-key-figures-to-understand-the-climate-crisis-f92b9a99abbe?source=collection_archive---------27-----------------------

“随着世界处于不可逆转的危害的边缘,气温升高的每一点点都关系到限制气候变化的危险。”—斯蒂芬·科尼利厄斯(世界自然基金会 IPCC 负责人)

2015 年 12 月,《联合国气候变化框架公约》(UNFCCC)196 个缔约方在第 21 次缔约方大会(COP-21)期间签署了一项具有法律约束力的气候变化国际条约,称为巴黎协定。巴黎协议的目标是将本世纪末的全球变暖限制在 2 摄氏度以下,并努力达到 1.5 摄氏度,与工业化前的水平相比[1]。为了实现这一目标,全球温室气体(GHG)排放需要尽快达到峰值,世界需要在本世纪中叶实现气候中和。

根据政府间气候变化专门委员会(IPCC)第六次气候变化评估报告(AR6),只有现在采取前所未有的行动,才有可能将本世纪末的全球气温上升限制在 1.5 摄氏度以内[2]。去年发表在《自然》杂志上的一项 T2 研究表明,为了达到巴黎协议的目标,到 2030 年,全球 GHG 排放量需要比 2020 年减少一半。机会之窗一年比一年窄,重要的问题是:“我们有望实现这个长期的温度目标吗?”

英国将于今年 10 月 31 日至 11 月 12 日在格拉斯哥主办第 26 届联合国气候变化大会。COP-26 是全球气候行动的一次重要峰会,因为这是对自巴黎协议以来世界各国政府在多大程度上提高了气候目标的首次考验[4]。

在这篇文章中,我将讨论四个关键数字来理解当前的气候危机。我将浏览气候危机的人为原因、主要责任国、气候情景的故事情节以及前进的方向。我还将解释数据和代码,因为我继续通过数字。这些脚本可以在这个 GitHub 库中找到。

图片来自 Unsplash 作者 Christian Lue

全球能源消费趋势

始于 18 世纪的工业革命,农业社会变得更加工业化和城市化,永远改变了人类社会。承蒙发明,如横贯大陆的铁路网、轧棉机、电力、内燃机车等。从 19 世纪中期开始,全球能源消耗开始激增。虽然全球能源消耗在 1800 年至 1900 年间仅增加了一倍,但在 1900 年至 2000 年间却增加了十倍。在过去的 20 年中,它已经增长了 1.5 倍,去年由于新冠肺炎相关的经济放缓,出现了一些下降。

在过去的两个世纪中,传统生物质的消费保持相当稳定,因为生物质仍然是几个发展中国家的主要烹饪燃料。煤的消费在 19 世纪 50 年代开始激增,而天然气和石油的消费在一个世纪后才开始。即使在今天,化石燃料(煤、石油和天然气)仍占全球能源消耗的四分之三以上。

全球能源消费趋势。数据基于[5]和[6]。CC-BY我们的数据世界。

这个数字的数据是基于[5]和[6],并已由我们的世界在数据汇编。在上面的情节中,我创建了一个新的子情节ax_new来放大 1990 年到 2019 年之间的值。我使用了fig.add_axes([x1, x2, x3, x4])并为新的子情节的矩形轮廓指定了左、下、宽和高。为了在新支线剧情ax_new和主支线剧情ax之间添加连接线,我使用了ax.indicate_inset_zoom(ax_new)。用于此目的的笔记本出现在这里。

最大的排放源

众所周知,中国是世界上人口最多的国家,也是目前 GHG 排放量最大的国家。截至 2019 年,中国占全球二氧化碳排放量的近三分之一,而美国占中国的一半。过去 20 年,随着中国经济的崛起,中国的排放量呈指数级增长。2019 年,中国、美国、EU-27 国、印度和俄国共排放了全球三分之二以上的二氧化碳,超过了世界其他国家的总和[7]。

说到气候公正,历史很重要。这是因为与全球变暖有近乎线性关系的不是排放的时机,而是累积排放[2]。谈到累计数字,自前工业化时期以来,没有一个国家像美国排放的一样多(4100 亿吨二氧化碳)。其次是欧洲联盟(欧盟)的 27 个成员国(287 亿吨二氧化碳)、中国(220 亿吨二氧化碳)、俄罗斯(114 亿吨二氧化碳)和印度(52 亿吨二氧化碳)。累积排放量最高的国家必须承担责任,支持那些排放最少但更容易受到气候危机影响的国家。

按地区(顶部)和百分比份额(底部)分列的年度二氧化碳排放总量。数据基于[7]。CC-BY我们的数据世界。

这个数字的数据基于[7]。上图包含两个支线剧情。顶部的子图描绘了各地区的实际二氧化碳排放量。下面的子图描述了一个国家/地区在年度全球二氧化碳排放量中所占的百分比份额。该图的笔记本可在这里获得。

未来会怎样?

气候行动追踪器(CAT) 是一个独立的科学联盟,根据巴黎协议的温度限制目标追踪政府的气候行动。根据 CAT 的说法,在当前的政策下,仍然没有迹象表明 GHG 的排放量会很快达到峰值。根据目前的政策,GHG 的累积排放量将导致本世纪末气温比工业化前水平升高 2.7 至 3.1 摄氏度。如果世界各国政府提出的承诺和目标得以实现,这将导致气温上升 2.4 摄氏度,可能性为 66%。在乐观的情况下,如果 131 个国家已经采纳或正在讨论的净零目标得以实现,这将进一步限制变暖水平,可能低于 2.2 摄氏度[8]。

全球变暖预测到 2100 年。气候分析和新气候研究所版权所有 2021。

上图来源于[8]。温度评估是使用称为 MAGICC6 的碳循环气候模型完成的,该模型也用于 IPCC 评估报告中,它代表了时变气候敏感性、碳循环反馈、气溶胶作用力和海洋热量吸收特征。

前进的道路

上述评估表明,在世界各国政府承诺的目标和将全球气温上升限制在 1.5 摄氏度的最终目标之间仍存在巨大差距。单个政府或行动的行动至关重要,因为对于已经处于气候紧急情况第一线的人们来说,每一度的微小变化都至关重要。

能源和气候情报单位(Energy and Climate Intelligence Unit)是一家支持英国就能源和气候变化问题进行知情辩论的非营利组织,它一直在跟踪哪些国家在其立法、政策文件或讨论中设定了净零目标。根据追踪器,苏利南和不丹是世界上仅有的两个已经实现净零排放的国家。包括欧盟、英国和加拿大在内的 13 个国家/地区已经在其法律中规定了净零目标。爱尔兰、智利和斐济在其国家立法中提出了净零目标。有 28 个国家在其政策文件中规定了 2035 年、2040 年、2050 年或 2060 年的净零目标。非洲、亚洲和美洲的大多数发展中国家的净零目标还在讨论中[9]。

零净目标。数据基于[9]。数据中的我们的世界。

上图的数据基于[9]。我已经用 geopandas 绘制了上面的地图。在地理数据框架中,我合并了数据框架中的一列,其中包含各个国家的国家净零目标的状态。该图的笔记本显示在这里。

简单地说

近几十年来,GHG 的人为排放量持续上升。仅在过去三十年中,除了 2007 年至 2009 年的全球金融危机期间以及 2020 年由于新冠肺炎相关的经济放缓,排放量大幅上升。世界上的发达和工业化地区是目前排放水平和随后气温上升的核心。重要的是,这些国家应对其造成的气候危机承担责任,并因此以身作则,迅速向低碳经济转型,支持发展中国家跳过化石燃料,转向清洁能源。

每升高一度,弱势群体就更难摆脱气候危机造成的不平等循环。因此,可以正确地说,气温升高的每一个微小的变化都会限制气候崩溃的危险。

参考文献

[1]《联合国气候变化框架公约》(2015 年)。巴黎协定。

[2]气专委(2021 年)。气候变化 2021 物理学基础。

[3]赫内等人,(2020 年)。排放:世界有四倍的工作或三分之一的时间。

[4]阿伯格(2021 年)。COP 26 是什么,为什么重要?

[5] Smil,V. (2017)。能源转型:全球和国家视角。

[6]英国石油公司(2020)。2021 年世界能源统计综述。

[7]全球碳项目(2020 年)。2020 年全球碳预算。

[8]《气候行动追踪》(2021 年)。气温:应对全球变暖。

[9]能源和气候情报股(2021 年)。净零追踪器。

4 个库可以并行处理现有的 Pandas 生态系统

原文:https://towardsdatascience.com/4-libraries-that-can-parallelize-the-existing-pandas-ecosystem-f46e5a257809?source=collection_archive---------16-----------------------

使用这些框架通过并行处理来分配 Python 工作负载

图片由 chiplanay 从 Pixabay 拍摄

Pandas 是一个非常受欢迎的 Python 库,因为它提供了高级可用和灵活的 API 以及高性能的实现。Pandas 提供了大量用于数据争论探索的 API,但是忽略了计算的性能和可伸缩性。Pandas 非常慢,或者有时无法在大型数据集上执行探索,因为它使用了 CPU 的单核。它没有 100%利用 CPU 内核。

在本文中,我们将讨论 4 个开源库,它们可以在 CPU 的多个内核上并行化现有的 Pandas 生态系统:

Dask:

Dask 是一个用于并行计算的开源 Python 库。它可以用于扩展 Numpy、Pandas、Scikit-Learn 操作,还可以在可用的 CPU 内核之间并行化自定义功能。Dask 允许在笔记本电脑或大型分布式集群上并行操作。

Dask 提供的 API 与 Pandas、Numpy 和 Scikit-Learn 非常相似,因此开发人员不必担心学习新东西。Dask 提供了这些著名库的高级 API 的优势以及伸缩能力。

(来源),Dask 有能力整合现有项目

Dask 实际上是建立在 Pandas、Numpy 和 Scikit-Learn 库之上的,因此,它提供了所有 API 的高级实现。

Dask 提供了一个高级集合,包括:

  • Dask 数组:建立在 Numpy 之上
  • Dask Dataframe:建立在熊猫之上
  • Dask Bag:专为处理非结构化数据而打造
  • Dask 延迟:并行化定制函数
  • Dask Futures:扩展 Python 的**concurrent.futures**接口。

(来源),引擎盖下工作的 Dask

为在 dask 集合上执行的所有操作和操纵创建任务图,任务图由 Dask 调度器并行化。

要了解关于 Dask 及其实现的更多信息:

阅读 Dask Github 库和 Dask 文档

Vaex:

Vaex 是一个开源 Python 库,用于处理核外数据帧。Vaex 库可用于在大型数据集上执行可视化和探索。Vaex 使用表达式系统、惰性计算、内存映射的概念来处理大于内存的数据集,并在其上执行探索。

Vaex 几乎可以通过内存映射瞬间加载 1TB 左右的内存。Vaex 不会立即执行任何计算,它会创建一个表达式系统,并且仅在需要或明确请求时执行计算。

(图片由作者提供),什么是表达系统

Vaex 提出了有效的算法,并使用延迟计算(惰性计算)来执行计算。Vaex 大约可以处理**10**9 rows/second** 。Vaex 提出了一个类似熊猫的 API,它可以与 Jupyter notebook 和 Jupyter Lab 集成,以提供交互式可视化。

阅读下面提到的文章,了解更多关于 Vaex 库的实现和工作的信息。

跟随这个站点,浏览 Vaex 文档和 GitHub 库。

摩丁:

Modin 是一个建立在 Pandas 库之上的开源 Python 库,它能够在所有 CPU 内核上扩展 Pandas 工作流。与其他分布式库不同,Modin 可以很容易地与 Pandas 库集成。摩丁的 API 和熊猫的 API 非常相似。

Modin 充分利用了 CPU 内核,从而提升了计算的性能。开发人员不需要太担心学习新的代码片段,因为他们只需要对代码中的 import 语句做一行修改。

(来源),熊猫和摩丁的 CPU 核心利用率

阅读下面提到的文章,了解更多关于摩丁库的实现和工作。

跟随这个站点,浏览摩丁文档。

IPython 并行:

IPython Parallel 或 ipyparallel 是一个开源的 Python 库,它有一组 CLI 脚本来控制 Jupyter 的集群。IPython parallel 使您能够利用 Jupyter 笔记本电脑的多个 CPU 内核。

(来源),IPython 架构

Ipyparallel 是专门为在集群上并行执行 Jupyter 笔记本而设计的。它使用一个映射,将任何函数应用于一个序列,并将工作分配给可用的 CPU 内核。对于复杂的任务,开发人员可以分配特定的功能来远程或并行运行它。

要了解更多关于 IPyParallel 如何工作及其实现的信息,请阅读这篇文章。在这里获得 IPyton 并行文档。

结论:

在本文中,我们已经讨论了 4 个分布式 Python 库,它们可以扩展 Pandas 数据帧的计算。这些库不仅可以加速 Pandas 的工作流程,还可以加速其他流行的库,如 Scikit-Learn、Numpy 和自定义函数。

有几个其他的库可以在可用的 CPU 内核之间分配工作流,包括 RayPandarallelDispyJoblib

参考资料:

[1] Dask 文件:https://dask.org/

[2] Vaex 文件:https://vaex.io/docs/index.html

[3]摩丁文献:https://modin.readthedocs.io/en/latest/

感谢您的阅读

高级用户应该警惕的 Google Data Studio 的 4 个局限性

原文:https://towardsdatascience.com/4-limitations-of-google-data-studio-that-advanced-users-should-watch-out-for-fb2a907eaf5c?source=collection_archive---------29-----------------------

(以及如何克服它们)

格伦·卡斯滕斯-彼得斯在 Unsplash 上拍摄的照片

~2022 年 2 月 17 日更新Google Data Studio 刚刚推出了高级数据混合选项,基本上消除了本文(1)中提到的一个限制。请继续阅读本文: Data Studio 引入了新的数据混合选项——数据可视化的游戏规则改变者 本帖中提到的其他限制还有待解决。

Google Data Studio 是我在过去几个月中越来越常用的一个工具。随着使用率的提高,我开始注意到它相对于其他工具的优势,它的能力,但也有它的局限性。

有许多关于技术的教程和数据可视化指南,但没有多少讨论该工具的常见缺陷以及如何克服它们。

因此,这里有 4 个谷歌数据工作室的限制,高级用户在建立他们的报告之前绝对应该考虑。

1.数据混合使用左外连接

Google Data Studio 中的混合数据遵循左外连接的 SQL 参数。

左外部联接的工作方式是混合数据,即从左数据源获取所有记录,并将它们与右数据源的匹配记录相结合。

数据混合在谷歌数据工作室解释,来源: GDS 演示:混合数据报告

总共有 7 种类型的表连接,这是数据科学专业人员习惯使用的。对于高级用户来说,只拥有一个会感觉很无力。

这在实践中意味着什么?

您必须特别注意两个数据源是如何混合的,更具体地说,就是将它们添加到混合数据实体的顺序。

根据左外连接的定义,添加的第一个表(数据源)将用作基础,因此第二个表中的任何附加数据条目(超出第一个表的连接键字段)都不会被允许进入新的数据集。

这是一种非常有限的连接表的方法,因为尽管它在寻找模式方面足够先进,但它拒绝空值。

有哪些替代方案?

如果您可以使用它,Big Query 是处理更大数据集的一个很好的选择。所谓伟大,我指的是在混合数据和连接表的上下文中,就必须建立数据管道、学习 SQL 和为每个查询付费而言,并不是那么伟大。如果基础设施存在,请使用它进行数据处理。

或者,对于更小的数据集和更可控的操作,Gsheets 也应该做得很好。 Dave Mendl 写了一个很棒的指南,介绍了可以用来复制 Gsheets 中七种 SQL 连接的不同函数,使用了 VLOOKUP、FILTER 和 advanced operations 等函数。

2.混合最多只能有五个数据源,所有数据源都应该共享一个连接键。

虽然仍然是关于连接表和混合数据源的主题,但我遇到的最令人沮丧的限制之一是,在创建一个新数据源时,您最多只能混合五个数据源。

虽然这听起来可能很多,但相信我——不是的。

看看 SEO 领域的几个例子。我使用 GDS 可视化定制提取尖叫青蛙,这是每月做一次。有了时间戳,就可以导入和可视化这些数据,显示趋势线。嗯,我的意思是,五个数据点的趋势线…

想象一下,如果有一个单独的表格显示客户站点上的任何改进的日期。将这些数据来源结合起来,理论上就可以衡量我提出的具体建议的影响。遗憾的是,考虑到这种限制,任何这样的混合都必须在更新之前进行。

那么,这会对你产生什么影响呢?

如果您和我一样,您希望在可视化功能方面突破工具的极限,并从合并的数据中为报告用户提取最大价值。最多可以使用五个共享一个维度的数据源,并且可以在这个维度上进行连接,这通常会限制您可以显示什么以及如何显示。

关于连接的另一个奇怪的事情是,Data Studio 作为一个可视化工具不处理缺失值。因此,如果连接键中有这样的值,混合将无法进行。

除了最多只能将五个数据源混合成一个之外,Google Data Studio 无法基于包含缺失值的连接键来连接数据。,资料来源:GDS

有哪些选择?

最简单的解决方案是离线混合数据,使用谷歌工作表或 Excel。您可以将这两者与 Zapier 或其他自动化工具集成在一起,尽管这种解决方案在实现上相当不可靠。

3.合并许多数据源可能会导致报表中断。

如果您曾经构建过 Data Studio 报告,您应该知道“死亡之吻”——破坏图表、未知数据源、用户配置错误、数据集配置错误……错误错误错误。

可悲的是,当您的表损坏时,Data Studio 在友好或乐于助人方面并没有什么好名声,就好像他们甚至不在乎这可能会完全排斥用户再次访问您的报表。

我非常喜欢胡安·贝洛的这篇文章,这篇文章讲述了 Data Studio 常见的错误以及如何修复它们。我不会深入讨论每个错误,但我会说有几种不同的情况您应该调查。

我所学会实现的是这两个宝石的规则:

  • 简化——简化、删除和减少。
  • 连接的所有权——这意味着尽一切力量管理添加的数据源及其连接方式

通过减少不需要的东西并将不同的仪表板合并成一个,您可以保持良好的用户体验,而不必牺牲报告的质量。一个好的经验法则是提供一个好的、稳定的整体概述,它链接到奇特的、不太稳定的、粒度数据视图。

4.连接器的可用性很大程度上取决于它们的内部数据库模式。

您可以在报表中使用数百个连接器,还可以嵌入自己的数据源。一个多世纪以前,Emmert Wolf 写道“一个人的好坏取决于他的工具”,这句话直到今天仍然适用。

那么,我们来谈谈工具。

我注意到的是,笨重、难看的电子表格是最好的数据源。例如,Google Analytics 数据源的每个属性都有一个连接,其中包括所有数据字段。相比之下,SEMrush 的连接器包括三个不同菜单之间的选择,每个菜单连接到 SEMrush 上包含的不同数据段。

有哪些替代品?

直接与 API 集成,而不是使用连接器。这不仅是最安全的连接,因为它可以管理数据源,避免身份验证和潜在的延迟,而且可以按照您希望的方式构建数据源。

外卖

虽然这可能有很多需要理解,但在提供外卖之前,我只想强调:Data Studio 绝对令人惊叹,我每天都用它来制作各种报告。

我有构建小型报告的经验,比如跟踪我的收入流的个人财务仪表板,SEO 咨询公司的强大报告,复杂到在一份报告中使用数百个不同的数据源。

我大力提倡将数据可视化和报告融入生活的方方面面,这也许是我如此热爱 Data Studio 的原因。所以,也许正如老话所说:

我们批评我们最爱的东西

不过,严肃地说,希望这个列表能够帮助初学者和高级用户更好地了解 Data Studio 的功能、它的局限性以及如何克服它们。

总而言之,这里列出了 Google Data Studio 的 4 个局限性,以及一些克服这些局限性的简便方法。

  1. 数据混合使用左外连接

替代方案:根据数据的大小和复杂性以及您的基础设施容量,在 GSheets 或 Big Query 中执行复杂的数据扩充。

2。混合最多只能有 5 个数据源,所有数据源都应该共享一个连接键。

替代方案:离线混合数据,使用自动化工具简化流程。

3。合并许多数据源可能会导致报告中断

备选方案:简化报告并维护数据源的所有权。

4。连接器的可用性高度依赖于它们的内部数据库模式

替代:使用 API,而不是连接器。

感觉好奇?继续阅读…

https://medium.com/bite-sized-marketing/4-new-data-studio-features-released-in-2021-that-you-need-to-know-about-23ef366c48bc

4 个鲜为人知的神奇命令可以提高你的工作效率

原文:https://towardsdatascience.com/4-little-known-magic-commands-that-boost-your-productivity-af1ba4268c57?source=collection_archive---------32-----------------------

释放 iPython 笔记本电脑的全部功能

由美元吉尔在 Unsplash 上拍摄的照片

神奇的命令已经成为每个使用数据科学笔记本的人的主食。通过扩展每台笔记本电脑的功能,他们的目标是提高笔记本电脑的工作效率。其中一些神奇的命令,如打印 CPU 和挂钟时间的%time魔术,已经变得相当流行,而其他的在很大程度上一直在雷达下飞行。本文将重点介绍鲜为人知的神奇命令,而不是重新介绍最流行的神奇命令,这些命令可以为任何 iPython 环境增加巨大的价值。

带有%%prun 的配置文件代码

虽然更广为人知的神奇命令%time%timeit为 Python 代码提供了一些关于 CPU 和挂钟时间的信息,但它们无法分解代码的哪一部分执行了多长时间,这使得调试具有多个函数调用的单元更加繁琐。%prun(行模式)和%%prun(单元格模式)通过 Python 的分析器运行代码,并提供每个函数调用所用时间的详细信息。

%%prun 示例;由作者创建

%%prun并不仅仅显示单元运行的总时间,而是详细描述了函数被调用的频率以及这些调用运行了多长时间。在上面的例子中,调用了两个函数。但是,其中一个功能的运行时间要比另一个长得多。神奇的命令%%prun显示firstFunction()运行了 0.722 秒,而secondFunction()只花了 0.007 秒。

查看%more 文件

下载文件后,使用笔记本通常会迫使用户在单独的文本编辑器中打开文件,以确定使用了哪个分隔符、日期格式或空值占位符。神奇的命令%more允许用户专注于他们的笔记本环境,并在编码时检查文件。

%更多示例;由作者创建

虽然%more没有假定文件是任何特定的类型,但是%pycat假定文件是 Python 文件,并且还提供语法高亮。同样值得注意的是,%pycat接受文件路径和 URL。

使用%%debug 进行交互式调试

虽然打印似乎仍然是笔记本中最常用的调试方法之一,但是 Python 已经自带了一个更加强大的调试器。神奇的命令%%debug使用户能够交互式地使用 Python 的 pdb 调试器,并更快地找到 bug。

% %调试示例;由作者创建

在上面的例子中,Python 的调试器允许使用s命令逐步运行函数myFunc()。遇到TypeError后,a命令列出当前函数调用中使用的所有参数,并显示y参数导致了异常。

用%autocall 实现快速函数调用

当速度是唯一重要的事情时,使用%autocall 1打开自动调用有助于显著加快原型制作。当 autocall 设置为*‘智能’*时,笔记本用户不再需要传递括号内的函数参数。使用上述%%debug示例中的函数,autocall 使用户能够使用myFunc 1,2而不是myFunc(1,2)来调用函数。

%autocall 示例;由作者创建

虽然 autocall 支持更快的原型开发,但重要的是要记住,它可能会降低生成的代码的可读性。

摘要

在使用数据科学笔记本电脑时,Magic commands 是提高工作效率的绝佳工具,其功能远远超出了人们的预期。虽然本文中的四个神奇命令已经可以极大地提高生产率,但哪个神奇命令最有用通常取决于用户和手边的特定用例。幸运的是,在%quickref中甚至有一个魔法命令来帮助用户在不离开笔记本环境的情况下试验魔法命令。此外, iPython 文档详细介绍了魔术命令的所有可用选项,以及如何通过构建定制魔术命令来扩展生态系统。

来源:

[1]“内置魔法命令。”IPython 7.26.0 文档。2021 年 8 月 8 日接入。https://ipython . readthedocs . io/en/stable/interactive/magics . html

[2]“Pdb—Python 调试器。”Python 3.9.6 文档。2021 年 8 月 8 日接入。https://docs.python.org/3/library/pdb.html.

4 个机器学习概念我希望在构建第一个模型时就知道

原文:https://towardsdatascience.com/4-machine-learning-concepts-i-wish-i-knew-when-i-built-my-first-model-3b8ca9506451?source=collection_archive---------10-----------------------

用这 4 个技巧构建惊人的机器学习模型

安东尼·托里在 Unsplash 上的照片

介绍

我喜欢写作的一个原因是,它给我一个机会回顾过去,反思我的经历,思考什么是成功的,什么是失败的。

在过去的 3 个月里,我的任务是建立一个机器学习模型来预测一个产品是否应该被 RMA'ed 。我会说这是我开发的第一个“严肃”的机器学习模型——我说“严肃”是因为这是第一个创造实际商业价值的模型。

鉴于这是我的第一个**“严肃的”模型,我对我的模型构建之旅有一个天真的误解:**

作者创建的图像

而事实上,我的旅程看起来更像这样:

作者创建的图像

总的来说,我认为这是成功的,但是在构建模型的过程中肯定有很多起伏——为什么?我花了很多时间学习我还不知道的新概念。在本文中,我想反映和记录在构建这个模型之前我希望知道的东西。

也就是说,这里有 4 个我希望在建立这个模型之前就知道的概念!

1.使用简单 Web 用户界面的模型部署

图片由 Gradio 拍摄(经许可)

我最近遇到的东西是 Gradio ,这是一个 Python 包,它允许你用少至三行代码为你的机器学习模型构建和部署一个 web 应用。它的用途与 Streamlit 或 Flask 相同,但我发现部署模型要快得多,也容易得多。

这为什么这么有用?有几个原因:

  1. 允许进一步的模型验证。具体来说,它允许您交互式地测试模型的不同输入。这也允许你从其他涉众和领域专家那里得到反馈,尤其是从非编码人员那里。
  2. 这是进行演示的好方法。就我个人而言,我发现向某些利益相关者展示 Jupyter 笔记本并没有给我的模型带来任何好处,尽管它表现得非常好。使用这样的图书馆可以更容易地交流你的结果,更好地推销自己。
  3. 很容易实现和分发。重申一下,学习曲线很小,因为只需要 3 行代码就可以实现。此外,它非常容易分发,因为任何人都可以通过公共链接访问该 web 应用程序。

TLDR:利用 ML 模型 GUI 的优势,如【Gradio进行更好的测试和通信。

2.特征重要性

特征重要性是指一套根据输入变量预测目标变量的能力为输入变量分配分数的技术。分数越高,越重要 该特征在模型中就越重要。

作者创建的图像

例如,如果我想使用图中的特征预测一辆汽车的价格,通过进行特征重要性分析,我可以确定型号的年份**、是否为前轮驱动以及汽车的里程(里程表)是预测汽车价格时最重要的因素。**

很棒吧?我打赌你开始明白为什么这很有用了。

在选择特性时,特性重要性非常有用。通过对初步模型进行特性重要性分析,您可以很容易地确定哪些特性在模型中有发言权,哪些没有。

更重要的是,特征重要性使得解释你的模型和解释你的发现变得更容易,因为它直接告诉你什么特征最能代表目标变量。

TLDR:使用特性重要性来改进特性选择、模型可解释性和交流。

如果你想看一个如何实现特征重要性的例子,在这里 查看我的第一个机器学习模型 的演练。

3.超参数调谐

机器学习的本质是找到最适合一个数据集的模型参数 。这是通过训练模型来完成的。

另一方面,超参数是不能从模型训练过程中直接学习的参数。这些是关于模型的更高层次的概念,通常在训练模型之前就已经确定了。

超参数的例子有:

  • 学习率
  • 树叶的数量或一棵树的最大深度
  • 神经网络中隐藏层的数量

关于超参数的事情是,虽然它们不是由数据本身决定的,但设置正确的超参数可以将你的机器学习模型从 80%的准确率提高到 95%以上的准确率。这就是我的情况。

现在我的主要观点是,你可以使用一些技术来自动优化你的模型的超参数,这样你就不必测试一堆不同的数字。

两种最常见的技术是网格搜索随机搜索**,你可以在这里阅读更多关于的内容。**

TLDR:像网格搜索&随机搜索这样的技术允许你优化你的模型的超参数,这可以显著提高你的模型的性能。

4.模型评估指标

这可能是在线课程、训练营和在线资源中最容易被忽视的领域之一。然而,它可以说是数据科学中最重要的概念之一。

了解评估你的机器学习模型的指标最终需要你对你试图解决的业务问题有一个坚实的理解

如上图所示,我在最初几周没有取得太大进展,因为我没有清楚地理解业务问题,因此,我不知道我试图优化我的模型的指标是什么。

因此,我们可以将这一点分成两个子点:

  1. 了解问题的业务需求。这意味着理解业务试图解决什么问题,问题的参数是什么,什么数据是可用的,谁是利益相关者,以及模型将如何集成到业务流程/产品中。
  2. ****在选择正确的指标来评估您的模型。在我们的例子中,我们比较了误报和漏报的后果。我们的最终决定最终取决于该模型将如何集成到业务流程中。

TLDR:了解商业问题。充分理解所有相关指标,并理解选择每个指标的后果。

感谢阅读!

如果你对这些概念中的任何一个不清楚,我强烈建议你花些时间完全理解它们。总的来说,这四个概念让我能够:

  • 将我的模型的性能从大约 85%的准确度提高到+95%的准确度。
  • 更容易地交流我的模型和见解,尤其是对那些不精通技术的人。
  • 从利益相关者那里获得更多反馈。

不确定接下来要读什么?我为你挑选了另一篇文章:

**

又一个!

</7-most-recommended-data-science-skills-to-learn-in-2021-ac26933f0e8a>

特伦斯·申

  • 如果你喜欢这个, 跟我上媒 了解更多
  • 有兴趣合作吗?让我们连线上LinkedIn
  • 报名我的邮箱列表 这里 **

4 机器学习系统架构

原文:https://towardsdatascience.com/4-machine-learning-system-architectures-e65e33481970?source=collection_archive---------24-----------------------

将机器学习投入生产

安德斯·吉尔登在 Unsplash 拍摄的照片

我大力提倡边做边学,事实证明这可能是学习机器学习的最佳方式。如果你是一名机器学习工程师(也可能是一名数据科学家),当一个项目在机器学习工作流程的模型评估阶段结束时,你可能永远不会有成就感,就像你典型的 Kaggle 竞赛一样——不,我并不反对 Kaggle,我认为它是一个提高你建模技能的伟大平台。

下一步是将模型投入生产,这通常是大多数机器学习课程都忽略的主题。

课程(Udemy)的笔记写的

服务于 ML 模型的格式

一旦训练并导出了机器学习模型,下一步就是想出一种方法来持久化该模型。例如,我们可以用pickle序列化模型对象—参见下面的代码。

**import** pickle **import** pandas **as** pd **from** sklearn.metrics **import** accuracy_score 
**from** sklearn.datasets **import** load_breast_cancer
**from** sklearn.linear_model **import** LogisticRegression  
**from** sklearn.model_selection **import** train_test_split*# loading the data set*
dataset = load_breast_cancer(as_frame=**True**)
df = pd.DataFrame(data= dataset.data)
df["target"] = dataset.target*# Seperating to X and Y* 
X = df.iloc[:, :-1]
y = df.iloc[:, -1]

*# splitting training and test*
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.75, shuffle=**True**, random_state=24)*# training logistic regression model*
lr = LogisticRegression(C=0.01)
lr.fit(X_train, y_train)*# serializing the model* 
lr_dump = pickle.dumps(lr)*# making predictions with the model* 
clf = pickle.loads(lr_dump)
y_preds = clf.predict(X_test)

:当编写代码将机器学习模型投入生产时,工程师将上述代码模块化为训练和推理脚本,以遵守软件工程最佳实践。

训练脚本的结尾由模型被转储到 pickle 文件的点来定义,而推理脚本在模型被加载以对新实例进行预测后开始。

为模型提供服务的其他方法包括:

  • MLFlow — MLFlow 提供了一种通用的序列化格式,可与 python 中的各种机器学习框架集成
  • 与语言无关的交换格式(即 ONNX、PFA 和 PMML)

知道我们有其他选择总是好的,因为流行的pickle(或joblib)格式有一些缺点。

应用中嵌入的第一型号

嵌入式架构示例;作者图片

  • 预培训:是
  • 即时预测:是

在这种情况下,经过训练的模型作为依赖项嵌入到应用程序中。例如,我们可以通过pip安装将模型安装到应用程序中,或者可以在构建时将经过训练的模型从文件存储(即 AWS S3)拉入应用程序中。

这种情况的一个例子是,如果我们有一个用来预测属性值的 flask 应用程序。我们的 Flask 应用程序将提供一个 HTML 页面,我们可以使用该页面作为一个界面来收集用户想要了解其估计价值的房产信息。Flask 应用程序将这些细节作为输入,将它们转发给模型进行预测,然后将它们返回给客户端。

在上面的例子中,预测将被返回到用户的浏览器,但是,我们可以改变这种方法,将模型嵌入到移动设备中。

这种方法比其他方法简单得多,但是需要权衡简单性和灵活性。例如,要进行模型更新,整个应用程序必须重新部署(在移动设备上,需要发布新版本)。

#2 专用模型 API

示例专用 ML 模型 API

  • 预训练:是
  • **即时预测:**是的

在这种架构中,经过训练的机器学习模型成为独立的机器学习 API 服务的依赖项。从 Flask 应用程序扩展到预测上面的属性值示例,当表单被提交到 Flask 应用程序服务器时,该服务器可能会使用 REST、gRPC、SOAP 或消息传递(即 RabbitMQ)对专用于机器学习并专门负责返回预测的独立微服务进行另一次调用。

与嵌入式模型方法不同,这种方法在简单性和灵活性之间做出了妥协。由于我们必须维护一个独立的服务,这种架构的复杂性增加了,但是由于模型部署现在独立于主要的应用程序部署,因此有了更多的灵活性。此外,模型微服务或主服务器可以单独扩展,以处理更大的流量或潜在地服务于其他应用。

#3 模型作为数据发布

流式部署示例;作者图片

  • **预培训:**是
  • **即时预测:**是的

在这种架构中,我们的培训流程将一个经过培训的模型发布到一个流式平台(即 Apache Kafka ),该平台将在运行时由应用程序使用,而不是在构建时使用——有资格订阅任何模型更新。

简单性和灵活性之间的权衡这个反复出现的主题又一次出现了。维护这个原型所需的基础设施需要更复杂的工程设计,但是 ML 模型可以在不需要重新部署任何应用程序的情况下进行更新——这是因为模型可以在运行时被吸收。

为了扩展我们对属性示例的预测值,应用程序将能够从指定的流服务(如 Apache Kafka)的专用主题中进行消费。

#4 离线预测

离线架构示例;作者图片

  • **预培训:**是
  • **即时预测:**否

这种方法是我们将要探索的唯一的异步方法。预测由应用程序或作为调度作业异步触发和运行。预测将被收集和存储—这就是应用程序通过用户界面提供预测的用途。

行业中的许多人已经脱离了这种架构,但在某种意义上,预测在返回给用户之前可以被检查,这要宽容得多。因此,我们降低了 ML 系统出错的风险,因为预测不是即时的。

关于简单性和灵活性的权衡,这个系统为了更多的灵活性而牺牲了简单性。

包裹

有时,仅仅做一些分析,构建多个模型,并对它们进行评估会变得相当无聊。如果是这样的话,那么下一步可能是学习将机器学习模型投入生产,这是你工具箱中的一项强大技能。强调一下,对于您的模型部署来说,没有所谓的“最佳”系统架构。只有满足系统需求的最佳折衷方案。

感谢您的阅读!

联系我:
LinkedIn
Twitter

如果你喜欢阅读这样的故事,并希望支持我的写作,可以考虑成为一名灵媒。每月支付 5 美元,你就可以无限制地阅读媒体上的故事。如果你使用我的注册链接,我会收到一小笔佣金。

已经是会员了?订阅在我发布时得到通知。

https://kurtispykes.medium.com/subscribe

相关文章

https://medium.datadriveninvestor.com/machine-learning-in-the-cloud-66bd25bc1a2b https://medium.datadriveninvestor.com/machine-learning-engineers-must-read-these-5-books-583e81922b84 [## 机器学习工程师的基本技能

towardsdatascience.com](/essential-skills-for-machine-learning-engineers-720938c6e12b)

Python 中用于离群点检测的 4 种机器学习技术

原文:https://towardsdatascience.com/4-machine-learning-techniques-for-outlier-detection-in-python-21e9cfacb81d?source=collection_archive---------0-----------------------

基于机器学习的异常检测

保罗·卡罗尔在 Unsplash 上的照片

根据读者在发表“2021 年你应该知道的两种离群点检测技术”后的反馈,我决定发表这篇文章,其中包括 Python 中离群点检测的四种不同的机器学习技术(算法)。在这里,我将对每种技术使用 I-I(直觉-实现)方法。这将帮助您理解每个算法在幕后如何工作,而无需深入算法数学(直觉部分),并使用 Scikit-learn 机器学习库实现每个算法(实现部分)。我还将使用一些图形技术来描述每个算法及其输出。在这篇文章的最后,我将编写**“关键要点”**部分,其中将包括一些使用和组合这四种技术的特殊策略。所以,一定要看完。

阅读本文后,您将能够实现不同类型的机器学习技术来检测异常值,并根据数据选择最佳技术。您还将了解到技术术语的确切定义和区别,如新奇检测异常检测

我将按以下顺序讨论每个算法。

  1. 椭圆包络算法
  2. 隔离森林算法
  3. 单级 SVM 算法
  4. 局部离群因子(LOF)算法

先决条件

我推荐你在读这一篇之前,先读一读“2021 年你应该知道的两个离群点检测技术”。了解那篇文章中讨论的主题将有助于理解今天的内容。

关键定义

下面是贯穿本文的关键定义列表。

  • ***异常值:*与其他数据点显著不同的异常数据点。
  • ***离群点检测:*如果训练数据被离群点污染,则在训练数据集中找到离群点。
  • **新奇性检测:发现一个新的看不见的观察值是否是异常值。这里,训练数据可能或可能没有被异常值污染,我们感兴趣的是发现一个新的看不见的观察值是否是异常值。如果那个观察值是一个异常值,我们称之为
  • ****异常检测:当我们将离群点检测和新奇点检测两者结合起来时,称为 异常检测

****注:在非技术用法中,离群点检测和新颖性检测没有区别。当我们从技术上实现它们时,它们之间有一个显著的区别。我将在椭圆包络算法下讨论这种差异。

让我们开始探索每种算法。

1.椭圆包络算法

这已经在“2021 年你应该知道的两种异常检测技术中讨论过了。这里,将更多地强调使用该算法区分异常值检测和新颖性检测。

为了应用该算法,应该满足数据的正态性假设。

直觉

下面是我在我的“2021 年你应该知道的两种离群点检测技术”帖子中对椭圆包络算法的直觉的看法。

椭圆形信封背后的直觉非常简单。我们根据一些标准在数据点周围画一个椭圆,并将椭圆内的任何数据点分类为内点(绿色的),将椭圆外的任何观察结果分类为外点(红色的)。

椭圆形信封背后的直觉(图片由作者提供)

履行

椭圆包络算法的一般实现已经在我的“2021 年你应该知道的两种离群点检测技术”帖子中讨论过。在这里,我将从另一个角度讨论实现——使用该算法区分离群点检测和新颖性检测。

离群点检测

让我们编写 Python 代码,使用椭圆包络算法来检测异常值。

等到加载 Python 代码!

检测到的异常值用红色标记(图片由作者提供)

当我们想要使用 Scikit-learnelliptic envelope()函数检测 X (训练数据集)的异常值时,我们可以调用一次 fit_predict(X) 方法,或者分别调用 fit(X)predict(X) 方法。两种方法给出的结果是一样的。

新颖性检测

让我们编写 Python 代码来看看一个新的看不见的观察值是否是异常值。新的看不见的数据点是(-4,8.5)。

等到加载 Python 代码!

新的观察结果用橙色标记(图片由作者提供)

**pred**

(图片由作者提供)

由于 pred 返回-1,新的未被发现的数据点(-4,8.5)是一个新奇的东西。

当我们想要使用 sci kit-learnelliptic envelope()函数来查看一个新的看不见的观察值是否是异常值时,我们应该首先调用 fit(X) 然后调用 predict(new_data)

这就是 离群点检测新奇点检测 的区别。当我们把两者结合起来时,我们称之为 异常检测

2.隔离森林算法

****隔离森林是一种基于树的算法,对于高维数据中的离群点和新奇点检测都非常有效。

直觉

以下是 Scikit-learn 官方文档对隔离森林算法的直觉的描述。

IsolationForest 通过随机选择一个要素,然后随机选择所选要素的最大值和最小值之间的分割值来“隔离”观察值。

履行

由于隔离森林算法可以应用于高维数据,这里我们将其应用于一个 4 维的“iris 数据集”。出于可视化的目的,我们应用主成分分析将 4 维数据简化为可以绘制成 2D 图的 2 维数据,同时保留原始数据中 95.8%的变化!

下面是代码!

等到加载 Python 代码!

(图片由作者提供)

隔离森林算法中最重要的超参数是污染超参数——一个我们不知道的值。它表示数据集中异常值的比例。这个超参数的值的范围是从 0 到 0.5。如果我们认为数据中会有许多异常值,我们可以将污染设置为一个较大的值。不知道数据集中异常值的确切比例是使用这种方法的主要限制。

3.一类 SVM 算法

单类 SVM (单类支持向量机)是一种无监督的机器学习算法,可用于新颖性检测。它对异常值非常敏感。因此,对于离群点检测来说,它不是很好,但是当训练数据没有被离群点污染时,它是新颖性检测的最佳选择。该算法可以应用于高维数据集,并且在数据的分布中没有潜在的假设。

直觉

一级 SVM 是基于 SVM。SVM 使用超平面来分隔两个类,而一类 SVM 使用超球面来包含所有的观察。

履行

由于一类 SVM 不太适合离群点检测,这里我们用它来进行新颖性检测。

这是代码。

等到加载 Python 代码!

(图片由作者提供)

**pred**

(图片由作者提供)

由于 pred 返回-1,新的看不见的数据点(-4,8.5)是新奇的。

4.局部异常因子(LOF)算法

局部离群因子(LOF) 是一种无监督的机器学习算法,最初是为了离群点检测而创建的,现在也可以用于新奇点检测。它适用于高维数据集。

直觉

以下是 Scikit-learn 官方文档对局部离群因子算法的直觉的描述。

局部异常值因子(LOF)算法是一种无监督的异常值检测方法,它计算给定数据点相对于其邻居的局部密度偏差。它将密度远低于其相邻样本的样本视为异常值。

履行

这种技术的实现在异常值检测和新颖性检测之间有很大的不同。让我们先讨论一下这两者的区别。

在离群点检测中

当应用这种技术进行异常值检测时,没有 predict() 方法,只有一个 fit_predict() 方法,该方法应该与训练数据(X)一起使用。

在新颖性检测中

如果您想使用局部异常值因子进行异常检测(即发现一个新的未观察到的观察值是否为异常值),您应该将 异常值 超参数设置为真**(默认为)。应用这种技术进行新颖性检测时,有 fit()predict() 两种方法。 fit() 方法应该用于训练数据(X ),而 predict() 方法应该用于新的未见过的数据,而不是训练数据(X)。**

首先,我们使用 LOF 编写用于异常值检测的 Python 代码。这是代码。

等到加载 Python 代码!

(图片由作者提供)

现在,我们使用 LOF 编写用于新奇检测的 Python 代码。这是代码。

等到加载 Python 代码!

(图片由作者提供)

**pred**

(图片由作者提供)

由于 pred 返回-1,新的看不见的数据点(-4,8.5)是一个新奇点。

关键要点

今天,我们讨论了四种检测异常值的机器学习技术。所有技术的实现都非常相似,除了 LOF,在那里离群点检测和新颖性检测之间的差异开始起作用。

隔离森林和 LOF 在高维数据上工作良好。为了可视化的目的,我们可以应用主成分分析来降低高维数据的维数。

椭圆包络线只能用于满足正态假设的数据。

一类 SVM 不太适合离群点检测,但当训练数据没有被离群点污染时,它是新颖检测的最佳选择。

椭圆包络、隔离林和 LOFT1 中最重要的超参数是污染超参数。它表示数据集中异常值的比例。在大多数情况下,我们不知道污染超参数的准确值。猜测值的最佳方法是首先进行基于 IQR 的检测,并统计数据集中离群值的数量(参见“2021 年你应该知道的两种离群值检测技术”)。由于您知道观察值的总数,因此您可以获得异常值比例的近似值。这是污染超参数的值!****

今天的帖子到此结束。我的读者可以通过下面的链接注册成为会员,以获得我写的每个故事的全部信息,我将收到你的一部分会员费。

****报名链接:https://rukshanpramoditha.medium.com/membership

非常感谢你一直以来的支持!下一个故事再见。祝大家学习愉快!

特别感谢 Unsplash 上的 Paul Carroll ,他为我提供了这篇文章的漂亮封面图片。

鲁克山·普拉莫迪塔
2021–03–27

数据科学家的 4 个数学数字和集合概念

原文:https://towardsdatascience.com/4-mathematical-numbers-and-set-concept-for-data-scientist-b3587611070f?source=collection_archive---------12-----------------------

理解机器学习数学的基础知识(使用 Python)

作者图片

如果您喜欢我的内容,并希望获得更多关于数据或数据科学家日常生活的深入知识,请考虑在此订阅我的简讯。

当我们第一次学习机器学习时,可能会很有挑战性,因为许多奇怪的符号和数学概念很难理解。特别是对于那些没有受过正规教育的人来说,这就像学习一门新的语言。

我觉得人们在为机器学习而学习数学时需要理解的一个基本概念是数字和集合概念。许多简单的推进方程将包括这些数字概念,不同的数字导致不同的结论。

在这篇文章中,我将解释数学中数字和集合的概念,并用编码例子来帮助你。让我们开始吧。

1。自然数

自然数是一个正整数。它从一(1)开始到无穷大,无穷大也用于计数。自然数是一个正整数,这意味着它不包括任何分数(1/2,1/4,2/3 等。)且不包括零(0)。此外,自然数不包括任何负数。

这组自然数被表示为符号**“N”。**如果我们用数学表示法陈述,那将是:

N =从 1 开始的所有数字的集合

或者我们也可以用另一种形式来表达:

N = {1,2,3,4,5,6,7,8,9,…}

自然数本身具有一些它们独有的性质,例如:

  1. 实数是有顺序的,也就是说数值之间是有顺序的。6 高于 5,5 高于 3。
  2. 实数是无限的。你永远不会用完自然数,因为每个自然数总有一个更大的值。
  3. 实数相加或相乘时为闭包。闭包意味着当你做一个算术运算的时候;结果总是产生来自同一集合的数字。5 是一个自然数,当你做一个加法运算 5 + 5 的时候,会得出一个自然数。
  4. 实数相加或相乘时是关联的。关联意味着无论自然数如何分组,算术运算都是可能的。5 + (6 +7)类似于(5 + 6) + 7。
  5. 实数相加或相乘时是可交换的。可交换意味着运算的顺序与结果无关。5 + 6 等于 6 + 5。

使用 Python,我们可以确定一个数是否是实数。我将开发一个函数,检查输入的数字是不是自然数。

def check_natural(x):
    if x > 0 and isinstance(x, int):
        return True
    else:
        return False

当我们输入一个整数和大于 0 的数字时,上面的函数将产生 True。你可以自己试试。

2。整数

在前一段中,自然数是一个正整数。这意味着自然数是整数的一部分。然而,什么是整数呢?整数可以是正数、负数或零(0),但不是分数。整数一词源于拉丁语“整数”,意为整体。

整数集合被表示为符号**“Z”。**如果我们用数学表示法陈述,那将是:

Z =除分数以外的所有数字的集合

或者我们也可以用另一种形式来表达:

Z = {…,-4,-3,-2,-1,0,1,2,3,4,…}

整数本身有一些独特的属性,例如:

  1. 整数是有顺序的。
  2. 整数是无限的
  3. 整数相加或相乘时是闭包
  4. 整数相加或相乘时是相联的
  5. 整数相加或相乘时是可交换的

在 Python 中,整数是编程语言中默认可用的数据类型。要检查您的数据是否是整数,您只需要使用下面的代码。

#Replace x with number
isinstance(x, int)

3.有理数

有理数是两个整数之间的比值,或者通常称为分数(p/q),其中分母(q)不等于零(0) 。有理数的例子有 1/2、3/7、2/5 等。(p 和 q 都是正整数的正有理数)或 1/-2、-4/7、-5/6 等。(负有理数,其中 p 或 q 是负整数)。有理数除法的结果是一个小数。同样,零(0)是一个有理数,而每个整数都是有理数,因为 5/1 等于 5。

有理数的集合被表示为符号**“Q”。**如果我们用数学表示法陈述,那将是:

Q =分数的集合数(p/q)

或者我们也可以用另一种形式来表达:

Q = {p/q: p,q ∈ Z,b ≠ 0}

有理数本身有一些独特的性质,例如:

  1. 有理数在加、乘或减时是封闭的。
  2. 有理数相加或相乘时是相联的
  3. 有理数相加或相乘时是可交换的

在 Python 中, Float 是由有理数除法得出的数据类型。然而,如果你需要一个有理数(以 p/q 的形式),你可以使用内置的 Python 模块,名为 fractions

#Use case example
from fractions import Fraction
print(Fraction(1, 2))
print(Fraction(12, 5))
print(Fraction(2, 6))
print(Fraction(9, 3))

Python 中的有理数(图片作者提供)

4.无理数

无理数 是不能用分数表示的数(p/q),其中 p 和 q 是整数,q 不等于零(0) 。这是有理数的矛盾。无理数的计算很复杂,一个 n 无理数的小数展开既不终止也不重现**(小数继续不重复)。无理数的一个例子是√5 或π。**

有理数集被表示为符号**“R \ Q”或“P”。**如果我们用数学表示法陈述,那将是:

P=不是有理数(Q)的实数集(R)

无理数本身没有什么独特的性质,例如:

  1. 无理数和有理数相加得出无理数。
  2. 无理数与非零有理数相乘产生无理数。
  3. 无理数的集合在乘法过程下是不闭的,不像有理数的集合。

在 Python 中没有明确的方法来检查一个数是否是无理数,因为从数学上讲,没有明确的证据来检查每一个无理数。

结论

作为数据科学家,我们被期望理解机器学习,如果你想自信地理解机器学习概念,你需要学习数学。最基本的数学概念是在理论中经常出现的数和集合概念。

在本文中,我向您展示了 4 个数字和集合概念,它们是:

  1. 自然数
  2. 整数
  3. 有理数
  4. 无理数

希望有帮助!

在我的LinkedInTwitter 上访问我。

如果您没有订阅为中等会员,请考虑通过我的推荐订阅。

更改熊猫数据框列顺序的 4 种方法

原文:https://towardsdatascience.com/4-methods-for-changing-the-column-order-of-a-pandas-data-frame-a16cf0b58943?source=collection_archive---------2-----------------------

举例说明。

Elena Mozhvilo 在 Unsplash 上的照片

熊猫是数据科学生态系统中最受欢迎的工具之一。这是一个用于数据分析和操作的 Python 库。

Pandas 提供了许多函数和方法来有效地处理表格数据。您可以轻松清理、操作或处理存储在数据框中的数据。

熊猫数据框由带标签的行和列组成。在本文中,我们将介绍 4 种改变数据框中列顺序的方法。这听起来像是一个过于具体的任务。但是,在某些情况下,您需要更新列顺序。

让我们从导入库和创建样本数据框开始。

import numpy as np
import pandas as pddf = pd.DataFrame({
   "A": np.random.randint(10, size=5),
   "B": np.random.randint(20, size=5),
   "C": np.random.randint(5, size=5),
   "D": np.random.randint(30, size=5)
})df

(图片由作者提供)

我们有一个 4 列 5 行的数据框。这些值是由 Numpy 的 randint 函数生成的随机整数。

第一种方法

我们可以使用 iloc 方法来更改或更新列的顺序,如下所示:

df.iloc[:, [2,3,1,0]]

(图片由作者提供)

iloc 方法适用于索引。逗号前的冒号表示我们需要所有的行。逗号后面的列表包含列索引。只要索引存在于数据帧中,我们可以按任何顺序排列索引。

第二种方法

loc 方法类似于 iloc 方法,但它使用标签而不是索引。因此,我们可以通过创建一个带有列标签的列表来对列进行重新排序。

df.loc[:, ["B","D","C","A"]]

(图片由作者提供)

我们不必选择所有的行和列。loc 和 iloc 方法都允许选择行和列的子集。

例如,我们可以选择前 3 行以及 A 列和 C 列,如下所示:

df.loc[:3, ["C","A"]]

请务必注意,数据框的行标签和索引是相同的。Pandas 默认为行分配整数标签。除非我们更改行标签,否则我们使用 loc 和 iloc 方法选择行的方式是相同的。

第三种方法

Pandas 还允许通过传递如下列表来选择列的子集:

df[["A","D","C","B"]]

(图片由作者提供)

它类似于 loc 和 iloc 方法,但是我们无法控制要选择哪些行。所有的列都被选中,我们只能指定列名和顺序。

第四种方法

这种方法可以认为是第三种方法的特例。它包含了基本 Python 的一些特性,比如反转列表。

考虑这样一种情况,我们有一个包含大量行的数据框,我们需要颠倒列的顺序。

我们可以创建一个列列表并反转它。这个反向列表可以像第三种方法一样用于选择列。

cols = list(df.columns)
cols.reverse()df[cols]

(图片由作者提供)

Python 的反向方法工作正常。因此,它不返回任何内容,而是反转列表。

我们也可以通过使用索引来反转列表。这是执行相同操作的不同方式。

cols = list(df.columns)df[cols[::-1]]

表达式“[::-1]”选择步长为-1 的列表中的所有项目。因此,它通过向后进行选择。结果,名单颠倒了。

结论

我们在本文中介绍的内容演示了如何更改数据框中列的顺序。这些方法也可用于选择数据帧的子集。

更改列顺序的一个典型用例是当我们需要组合多个数据框时。如果数据框是沿着行轴组合或连接的(即一个在另一个之上),则列的顺序必须相同。

感谢您的阅读。如果您有任何反馈,请告诉我。

评估您的回归模型的 4 个指标

原文:https://towardsdatascience.com/4-metrics-to-evaluate-your-regression-models-885e9caeee57?source=collection_archive---------6-----------------------

了解可用于评估回归模型的最常用指标——在本文中,我们将探讨 4 个指标,包括它们的含义和假设

engin AK yurt@ unsplash.com 摄影

回归问题是数据科学和机器学习最常解决的问题之一。当您想要预测一个具有(理论上的)无限个值的目标时,您正在处理一个回归问题,例如:

  • 根据某人的教育水平、经验等来预测他们的收入。;
  • 根据房子的特点预测房子的价值;
  • 根据股票组合的成分预测其回报;

在你开发了一个回归模型之后,有很多度量标准你可以选择来评估你的模型- ,每一个都有它自己的一套特征

如果每个度量不同,我们可以说它们是模型误差的不同表示,并且它们可以(主要)用于两个目的:

  • 用作项目成功的最终定义——哪个指标是传达给涉众的。
  • 作为优化算法中的成本函数(您希望最小化的函数)。

衡量标准对于理解你的模型的表现至关重要。让我们更深入地了解其中的一些吧!

均方误差

回归算法最常用的指标之一是均方误差(MSE),MSE 被线性回归或神经网络等多种算法广泛用作成本函数。

基本上,均方误差由以下公式组成:

均方误差公式

想象你有一个 200 的真实值,你预测,例如,150 的值。这个单个例子对算法的总误差的贡献将是:

我们的例子将为我们的误差贡献大约 10.000 个单位!一旦你计算出你的样本的每个例子的所有误差,你只需平均它们,你就获得了 均方误差(MSE)。

关于 MSE 的一些细节:

  • 由于公式中平方的应用,MSE 惩罚大的误差。
  • 不利的一面是,它在目标的规模上是不可解释的——特别是如果你想传达你的错误。

MSE 被用作评估算法的一种方式,并且默认情况下,在许多解决回归问题的实现中通常被用作成本函数。

与 MSE 类似的概念是 RMSE(均方根误差),唯一的区别是对 MSE 应用平方根。这使你有一个更符合目标大小的误差。

或者,有另一个度量向我们显示目标星等的误差——让我们知道它!

您可以使用以下资源了解有关 MSE 的更多信息:

  • R 为数据科学 Udemy 课程 —度量板块
  • MSE 维基百科页面
  • Sklearn MSE 实现

平均绝对误差

平均绝对误差是一个误差指标,它使用与目标相同的尺度来显示我们预测的误差:

平均绝对误差公式

**MSE 和平均绝对误差(MAE)之间的主要差异在于我们对目标的预测值和实际值之间的差异进行的转换。**在 MSE 中,我们应用平方函数,而在 MAE 中,我们应用绝对值。

实际的含义是,我们现在在目标的尺度上评估我们的误差。例如,如果我们有一个以美元衡量的目标,我们可以说“平均而言,我们缺少目标的金额是 x (MAE 值)美元。”。我们不能对 MSE 这样做。

对于我们在 MSE 中使用的示例,如果我们预测目标值为 100,而实际值为 200,则该示例对总体误差的贡献为 100,如下式所示:

然后,我们对所有示例的值进行简单平均,得到完整的 MAE。

关于 MAE 的一些重要细节:

  • 不惩罚大的错误。
  • 当您不希望异常值在您的优化中扮演重要角色时,您可以将它用作成本函数。请注意,使用 MAE 有时会导致收敛问题(特别是在复杂的模型中)。
  • 它会产生一个目标量级的误差项,这有利于解释。

MAE 对于向风险承担者传达预期的错误非常有价值。虽然 MSE 通常被用作成本函数,但 MAE 在可解释性和与“真实世界”的关系方面具有优势。这一特性使得评估您的算法对于您试图解决的业务问题是否产生了可接受的误差变得更加容易。

您可以使用以下资源了解有关 MAE 的更多信息:

  • R 为数据科学 Udemy 课程 —度量部分
  • MAE 维基百科页面
  • Sklearn MAE 实现

平均绝对百分比误差(MAPE)

虽然 MAE 给了你价值,你可以和涉众讨论它是否可以接受——但是这个度量从来没有给你多少“错误”是可以接受的暗示。

例如,如果你有 10 美元的平均绝对误差,这是不是太多了?或者这是可以接受的?真的要看你目标的尺度!

虽然对误差的接受程度是一个与项目范围相关的度量标准,但是了解误差偏离目标的百分比是有好处的。

平均绝对百分比误差(MAPE)以百分比的形式给出了误差项,这使您可以很好地了解“平均”偏差形式的误差项。

MAPE 因其性质在时间序列问题中很常见。实际上,这是沟通这些问题的一个很好的指标,因为你可以清楚地说明“平均”你的预测会偏离 x%。

你也可以使用 MAPE 作为评估其他连续变量模型的方法,尽管这取决于你的目标的期望值——MAPE 不太擅长处理接近零的值。

MAPE 的公式很简单:

平均绝对百分比误差公式

如果我们的预测值为 100,而实际值为 150,则绝对百分比误差为:

这个值为我们提供了一个很好的度量标准来理解我们的误差和目标的比例之间的关系。

一些特征:

  • 当实际值为 0 时,它可能会在处理错误时遇到一些麻烦。当您的示例中有这样的例子时,建议使用其他指标,如 MASE 。
  • MAPE 在处理接近于零的值时有些困难。如果这些值是您的目标所期望的,那么您应该选择另一个指标。

您可以通过以下资源了解更多关于 MAPE 的信息:

  • MAPE 维基百科页面
  • Sklearn MAPE 实施

r 平方

通俗地说,R 平方是你的模型所解释的方差的比例。

这看起来很复杂,但实际上很容易理解。让我们先来看看 R 平方公式:

r 平方公式

分数的上半部分看起来真的很熟悉!这是因为它由误差平方和( SSRes,来自残差平方和)组成——你的算法越差,这个值就越高。

假设我们有两个例子,预测由数组[3.5,3]组成,而真实目标由值[4,3]组成,这两个例子之间的 SSRes 将是:

公式的分母呢?我们计算残差的总和——在实践中,我们比较如果我们只是预测目标的平均值,我们的误差会是多少,我们能想到的最天真的分类器。

对于上面的例子,我们的“幼稚”分类器,将我们所有的例子分类为 3.5,4 和 3 之间的平均值,目标的真实值。我们可以使用以下基本原理计算平方和( SSTot ):

既然我们已经有了 SSRes 和 *SSTot,*我们可以将它们代入 R 平方公式:

我们的 R 平方包含一个介于 0 和 1 之间的值(尽管有些异常,您可能会有负值),其中 1 是一个非常好的模型,0 是一个随机的模型。

请注意, *SSRes(残差平方和)越低,*R 平方值越高。这意味着,与仅预测平均值的模型相比,预测的误差越低,您的模型就越好。

您可以使用以下资源了解有关 R 平方的更多信息:

  • R For Data ScienceUdemy course—Metrics Section
  • R 平方维基百科页面
  • 可汗学院 R 平方文章

就是这样!这些指标是评估数据科学和机器学习回归模型的一些最常见的指标。在开发过程中,您可能只检查其中的一些,但是理解使用不同度量评估模型背后的含义不会有什么坏处!

你还有其他常用的度量标准来评估你的回归模型吗?写在下面的评论里,我很想听听你的看法!

我在 Udemy 课程 里开设了一门学习数据科学的课程——这门课程适合初学者,我希望你能在身边。

https://ivopbernardo.medium.com/membership

Python 字典的 4 个必备特性

原文:https://towardsdatascience.com/4-must-know-features-of-python-dictionaries-d62af8c22fd2?source=collection_archive---------3-----------------------

通过更有效地使用字典来提升你的脚本

由 Unsplash 上的 Element5 数码拍摄

数据结构是程序的关键组成部分。它们以特定的方式保存或包含数据,以使程序更有效地工作。如何访问存储在数据结构中的数据也至关重要。

字典是 Python 中的核心数据结构之一。字典包含键值对。一个值可以很容易地通过它的键来访问。这里有一个简单的例子:

members = {1001: "John", 1002: "Jane", 1003: "Emily"}print(members[1001])
John

在本文中,我们将讨论 Python 字典的 4 个必须知道的特性。它们对于有效和恰当地使用词典是必不可少的。

1.字典是无序的

字典包含键-值对,但不拥有这些对的顺序。因此,更精确的定义是,字典是一个无序的键值对集合。

因此,我们无法执行与项目顺序相关的典型操作。例如,不可能得到字典中的第一个或最后一个条目。

数字索引的另一个常见操作是切片。它可以在 Python 列表上执行:

mylist = ["John", "Jane", "Emily"]print(mylist[0])
Johnprint(mylist[1:])
['Jane', 'Emily']

与列表不同,词典是按关键字索引的。因此,由于没有顺序,不可能在字典上进行这些操作。我们可以通过传递方括号中的键或 get 方法来访问一个值。

members = {1001: "John", 1002: "Jane", 1003: "Emily"}members[1001]
'John'members.get(1001)
'John'

需要注意的是,缺少顺序并不是 Python 字典的缺陷。其实可以认为是一种实力。它们允许快速访问和检索与特定键相关联的信息。

2.密钥是唯一的

字典关键字必须唯一。这是有意义的,因为我们用它们来访问值。拥有重复的键违背了使用字典存储信息的目的。

虽然字典不允许创建重复的键,但是如果多次使用同一个键,它也不会发出警告。因此,您需要格外小心,不要导致任何意外的行为。

让我们看几个例子,让它更清楚。

members = {1001: "John", 1002: "Jane", 1003: "Emily", 1001: "Max"}print(members)
{1001: 'Max', 1002: 'Jane', 1003: 'Emily'}

我们使用同一个密钥(1001)两次,但是没有得到任何错误。相反,Python 会用新值覆盖以前的值。

更新字典时会观察到相同的行为。我们可以向字典中添加一个新条目,如下所示:

members[1004] = "Ashley"print(members)
{1001: 'Max', 1002: 'Jane', 1003: 'Emily', 1004: 'Ashley'}

键 1004 不在成员字典中,所以用给定值添加。如果我们使用相同的方法并传递一个已经在字典中的键,它的值将被更新。

members[1001] = "AAAAA"print(members)
{1001: 'AAAAA', 1002: 'Jane', 1003: 'Emily', 1004: 'Ashley'}

因此,它更像是更新一个键值,而不是创建一个新的键值对。

3.键必须是不可变的

字典键必须是不可变的类型。字符串和数字是作为字典键最常用的两种数据类型。我们也可以使用元组作为键,但它们必须只包含字符串、整数或其他元组。

我们已经创建了一个带有整数键的字典。让我们用字符串和元组键再创建几个。

# string keys
dict_a = {"Param1": "value1", "Param2": "value2"}
print(dict_a)
{'Param1': 'value1', 'Param2': 'value2'} # tuple keys
dict_b = {(1, 10): "value1", (1,20): "value2"}
print(dict_b)
{(1, 10): 'value1', (1, 20): 'value2'}

如果我们试图创建一个可变(即不可变)类型的键,就会出现类型错误。

dict_c = {[1, 2] : "value1", [1,4]: "value2"}
TypeError: unhashable type: 'list'dict_d = {(1, [1,2]): "value1"}
TypeError: unhashable type: 'list'

4.词典理解

用 Python 创建字典有几种方法。一种方法是用花括号写键值对,就像我们到目前为止所做的那样。

另一个选项是dict构造函数,它从一系列键值对中创建一个字典。

sequence = [[1, "John"], [2, "Jane"]]dict(sequence)
{1: 'John', 2: 'Jane'}

词典理解类似于列表理解的概念。这是创建包含一组结构化值的字典的更实用的方法。

考虑我们有下面的文本。

text = "By 1908, Einstein was recognized as a leading scientist and was appointed lecturer at the University of Bern"

我们想大致了解一下这篇课文中单词的长度。我们可以创建一个包含单词及其长度的字典。字典理解完成这项任务简单如下:

dict_a = {x: len(x) for x in text.split(" ")}

我们在空格字符处分割文本,并将每个单词作为一个键。这些值是通过对单词调用内置的len函数来计算的。

(图片由作者提供)

值得强调的是,我们没有得到任何关于单词在文本中出现次数的信息。这本词典由独特的词组成。

结论

字典是 Python 中非常重要的数据结构。在其他编程语言中,它们有时被称为“关联数组”。它们允许快速检索关于条目的信息。让我们打个比方来演示字典的用法。

考虑一个没有任何组织结构的地址簿。当一个新项目被添加时,它被写在最后。为了在这本书里查找地址,你要从头开始读。在《你不幸运》中,你可能不得不一直读到最后才能找到你要找的东西。

如果这个地址簿中的每个字母都有一个单独的部分,并且地址是根据它们的首字母存储的,那么查找地址就容易多了。字典提供了这样一个简单的查找方法。我们给他们密钥,他们返回相关的值。

感谢您的阅读。如果您有任何反馈,请告诉我。

Python 日期时间模块中的 4 个必须知道的对象

原文:https://towardsdatascience.com/4-must-know-objects-in-python-datetime-module-d18565fddd05?source=collection_archive---------23-----------------------

综合实践指南

在 Unsplash 上由尹新荣拍摄的照片

时间是许多数据科学相关任务的重要特征。例如,每日销售和库存信息对于零售分析至关重要。算法交易需要分钟级别的交易数据。

我们表示和使用时间相关信息的方式随着任务的不同而不同。对于一个科学实验,我们可能会谈到微秒级的测量记录。但是,对于人口统计信息,如人口、平均家庭收入等,我们不需要这样的精度。

Python 的 datetime 模块帮助我们处理任何精度级别的时间相关信息。在本文中,我们将详细介绍本模块中的 4 个对象,它们是日期、时间、日期时间和时间增量。

日期

对象用年、月和日来表示日期。让我们看几个例子来演示如何使用它们。

我们可以创建一个日期对象,通过传递年、月和日信息来存储特定的日期。

from datetime import datemydate = date(2020, 4, 11)print(mydate)
2020-04-11

我们还可以基于今天的日期创建一个 date 对象。

today = date.today()print(today)
2021-04-13

可以从日期对象中提取各个属性。

type(today)
datetime.datetoday.year
2021today.month
4today.day
13

需要注意的是,我们不能在月和日信息中使用前导零。例如,下面的代码将返回一个语法错误。

mydate = date(2020, 04, 02)   # SyntaxErrormydate = date(2020, 4, 2)     # OK

我们可以对 date 对象使用的另一个有用的方法是 ctime,它以更详细或扩展的格式返回日期。

mydate = date(2021, 2, 15)mydate.ctime()
Mon Feb 15 00:00:00 2021

我们可以用减号来计算两个日期之间的差异。

mydate1 = date(2021, 2, 15)
mydate2 = date(2021, 3, 12)mydate1 - mydate2
datetime.timedelta(days=-25)

返回的对象属于 timedelta 类型,我们也将在本文中介绍这一类型。差额以天计算。

时间

时间对象表示小时、分钟、秒和微秒级别的时间。

from datetime import timemytime = time(14, 20)print(mytime)
14:20:00

我们只定义了小时和分钟部分。默认情况下,Python 为剩余的时间属性分配 0。

mytime.second
0mytime.microsecond
0

我们还可以通过传递所有属性来创建更精确的时间对象。

mytime = time(2, 14, 25, 30)print(mytime)
02:14:25.000030

日期时间

Datetime 是一种日期和时间的组合。它可以表示日期和时间对象的所有属性。让我们跳到例子上来使它更清楚。

from datetime import datetimemydatetime = datetime(2021, 1, 14)
print(mydatetime)
2021-01-14 00:00:00mydatetime2 = datetime(2021, 1, 14, 16, 20)
print(mydatetime2)
2021-01-14 16:20:00

datetime 对象提供了仅使用日期或组合使用日期和时间的灵活性。参数之间有一个等级,从年份开始,一直到微秒级。

today 函数也可以与 datetime 对象一起使用。

datetime.today()
datetime.datetime(2021, 4, 13, 16, 34, 45, 137530)print(datetime.today())
2021-04-13 16:35:49.965258

如果打印 datetime 对象,输出将以更结构化的方式显示。

就像日期和时间对象一样,可以提取日期时间对象的各个属性。

mydatetime = datetime(2021, 1, 14, 16, 20)print(mydatetime.month)
1print(mydatetime.minute)
20

我们还可以计算两个 datetime 对象之间的差异。

mydatetime1 = datetime(2021, 1, 14, 16, 20)
mydatetime2 = datetime(2021, 1, 10)diff = mydatetime1 - mydatetime2print(diff)
4 days, 16:20:00

时间增量

Timedelta 对象表示一个持续时间,因此我们可以使用它们来计算两个日期或时间之间的差异。

下面是一个 timedelta 对象,表示 6 天的持续时间。

mydelta = timedelta(days=6)print(mydelta)
6 days, 0:00:00

我们可以用周、天、小时、分钟、秒和微秒来创建 timedelta 对象。输出以天数和小时-分钟-秒的组合形式显示。

mydelta1 = timedelta(minutes=40)
print(mydelta1)
0:40:00mydelta2 = timedelta(weeks=4)
print(mydelta2)
28 days, 0:00:00

不同的单位也可以组合起来创建一个 timedelta 对象。

mydelta3 = timedelta(days=2, hours=4)
print(mydelta3)
2 days, 4:00:00

我们已经看到了如何计算两个日期或日期时间对象之间的差异。timedelta 对象的另一个常见用例是修改它们。

例如,我们可以给一个日期加上一个特定的持续时间来计算未来的日期。

mydate = date.today()
print(mydate)
2021-04-13two_weeks_from_now = mydate + timedelta(weeks=2)
print(two_weeks_from_now)
2021-04-20

我们还可以使用 timedelta 对象修改 datetime 对象。

mydate = datetime(2020, 10, 4, 15, 10)
print(mydate)
2020-10-04 15:10:00past_date = mydate - timedelta(weeks=7, days=4)
print(past_date)
2020-08-12 15:10:00

结论

Python 的 Datetime 模块提供了许多不同的方法来操作日期和时间。它在处理日期时非常方便。

我们已经介绍了 datetime 模块的 4 种主要对象类型。这些对象是日期、时间、日期时间和时间增量。datetime 对象是日期和时间对象的一种组合。它可以存储从几年到几微秒的信息。

datetime 模块还提供了其他一些对象类型,如 timezone、strftime 和 strptime。

感谢您的阅读。如果您有任何反馈,请告诉我。

数据库的 4 个必须知道的属性

原文:https://towardsdatascience.com/4-must-know-properties-of-databases-e366858126eb?source=collection_archive---------10-----------------------

如何使数据库符合 ACID

照片由 Unsplash 上的码 Mnml 拍摄

数据科学的一切都是从数据开始的。没有适当和准确的数据,数据科学就像一辆没有汽油的豪华汽车。维护良好、易于访问、可伸缩且不易出错的数据库对于提供数据访问是必不可少的。

为了确保数据库不会让我们失望,我们需要正确地设计和创建它。数据库系统被设计为满足一组称为 ACID 的属性。原子性、一致性、隔离性和持久性是构成酸的属性。

在开始讨论 ACID 属性之前,我们需要了解数据库事务。一个事务基本上代表数据库中的一个变化。它可以包含一个或多个操作。例如,将钱从一个银行账户转移到另一个银行账户包含多个操作。首先,从汇款人的账户中取款。然后,它被存入接收者的账户。

一个事务被视为一个整体,即使它包含多个操作。事务完成后,数据库的状态会发生变化。

我们现在知道什么是数据库事务了。先说酸的性质。

原子数

原子性最好通过实际的原子来解释。原子是构成化学元素的最小单位。它由质子、中子和电子组成,但被视为一个完整的结构。我们不能有半个原子。我们要么有一个原子,要么没有。

我们实际上可以通过一个叫做核裂变的过程分裂一个原子,但这是一个非同寻常的过程,会释放出大量的能量。对于我们关于数据库的讨论,我们将坚持原子是一个单一的、完整的单元。

原子性指的是数据库事务的整体性或完整性。原子事务要么发生,要么根本不发生。我们不能有部分执行的交易。

货币转账交易清楚地证明了原子性。当钱从汇款人的账户中取出时,必须存入收款人的账户。否则,我们会有一个大问题。原子事务确保这个动作作为一个整体执行。

考虑一个在资金转移过程中严重影响数据库操作的问题。如果数据库由于这个问题而未能存入提取的资金,它将返回到以前的一致状态,并且保持不变。因此,不会发生资金转移。

一致性

一致性意味着事务必须符合数据完整性的约束。如果某个事务违反了约束,一致性可以确保该事务不会被执行,并且数据库会返回到以前的稳定状态。因此,事务不会发生,数据库的状态也不会改变。

违反约束的事务被称为非法事务。假设你的银行账户不允许你有负结余。你的账户里有 20 美元,试着用你的卡购买 25 美元。就数据库事务而言,这种购买被认为是非法的,因此被拒绝。

一致性的另一个例子是数据输入。如果帐号正好由 10 位数字组成,则用户只允许输入 10 位数字的帐号。数据库例程可以用来确保输入数据的一致性。

照片由 Unsplash 上的 Jp Valery

隔离

隔离用于处理并发事务。在一个典型的数据库中,我们可能会有多个事务同时从同一个表中读取数据或向同一个表中写入数据。

如果修改相同数据的两个事务同时发生,我们可能会遇到问题。隔离确保这些事务是“序列化”的,这意味着其中一个事务等待另一个事务完成。

假设两个人试图同时在一个电子商务网站上购买相同的产品,并且还有一个库存。如果数据库允许两个客户同时购买,就会出现问题。隔离将这些动作按顺序排列,以便其中一个动作必须完成,另一个动作才能开始。

持久性

持久性确保了一旦事务完成,由于该事务导致的数据库中的改变是永久的。它不会受到断电等系统故障的影响。

完成的事务存储在非易失性存储器中。假设你的账户里有 100 美元,把 20 美元转到另一个账户。这使你的余额降到 80 美元。过了一会儿,你再次检查你的余额,看到它是 100 美元,好像交易从来没有发生过。这是一个系列问题,耐久性保证不会出现这种问题。

结论

ACID 属性对于拥有一个安全的、维护良好的、具有最大数据完整性的数据库至关重要。数据库必须满足所有这些属性,以便将失败的风险降至最低。保持数据的完整性、准确性和可访问性也很重要。

感谢您的阅读。如果您有任何反馈,请告诉我。

4 个必须知道的 Python 数据结构

原文:https://towardsdatascience.com/4-must-know-python-data-structures-95bfc0844a06?source=collection_archive---------21-----------------------

实例实用指南

照片由gatan Werp在 Unsplash 上拍摄

数据结构是任何编程语言的重要组成部分。如何存储和管理数据是创建高效程序的关键因素之一。

Python 有 4 种内置数据结构:

  • 目录
  • 一组
  • 元组
  • 词典

它们在存储和访问数据方面都有不同的特性。这些差异很重要,因为什么最适合特定的任务取决于它们。如何与这些数据结构交互或操作它们也是不同的。

目录

列表是对象的集合,用方括号表示。

mylist = [1, 2, "a", True]
  • 列表可用于存储任何数据类型或混合数据类型的对象。
  • 列表是可变的。我们可以在列表中添加新项目或删除现有项目。
mylist.append(5)
mylist
[1, 2, 'a', True, 5]mylist += ["b"]
mylist
[1, 2, 'a', True, 5, 'b']mylist.insert(0, "first")
mylist
['first', 1, 2, 'a', True, 5, 'b']mylist.remove(2)
mylist
['first', 1, 'a', True, 5, 'b']

insert 方法在指定的索引处添加新项。

  • 列表是有序的。因此,我们可以通过它们的位置来访问项目。
mylist[0]
'first'mylist[-1]
'b'mylist[:3]
['first', 1, 'a']
  • 我们可以使用 extend 方法或“+=”操作来组合多个列表。
first = [1, 2, 3]
second = [4, 5, 6]
first += second
print(first)
[1, 2, 3, 4, 5, 6] first.extend(second)
print(first)
[1, 2, 3, 4, 5, 6, 4, 5, 6]

如果对此操作使用 append 方法,新列表将作为新项目添加。

first = [1, 2, 3]
second = [4, 5, 6]
first.append(second)
print(first)
[1, 2, 3, [4, 5, 6]]

一组

Set 是对象的集合,用花括号表示。

  • 集合包含唯一的项目。即使您尝试在一个集合中存储重复的项目,每个不同的对象也只有一个。
myset = {1, 2, 3, 3, 4}print(myset)
{1, 2, 3, 4}
  • 集合中的项目必须是可散列的。在某种意义上,hashable 意味着不可变。Python 文档中对 hashable 的定义如下:

如果一个对象有一个在它的生命周期内从不改变的哈希值(它需要一个_ _ hash _ _()方法),那么这个对象就是可散列的,并且可以与其他对象进行比较(它需要一个_ _ eq _ _()方法)。比较相等的可散列对象必须具有相同的散列值。

例如,我们不能在集合中使用列表,因为列表是可变的。

  • 需要强调的是,集合包含不可变的项,但是集合本身是可变的。因此,我们可以向集合中添加新的项目,也可以删除现有的项目。
myset = {1, 2, 3, 4, 5}
myset.add(6)
print(myset)
{1, 2, 3, 4, 5, 6}myset.remove(2)
{1, 3, 4, 5, 6}
  • 由于集合是无序的,它们是不可订阅的,这意味着它们不支持索引和切片操作。
  • update 方法可用于用新集合更新集合。从某种意义上说,它意味着将一个集合添加到另一个集合。由于集合中不能有重复的项目,因此只会添加新的项目。
myset = {1, 2, 3}
newset = {3, 4, 5}
myset.update(newset)print(myset)
{1, 2, 3, 4, 5}

元组

元组是对象的集合,用括号表示。

mytuple = (1, 2, 2, 3)print(mytuple)
(1, 2, 2, 3)
  • 与列表和集合不同,元组是不可变的。因此,我们不能向元组中添加项目或删除现有的项目。元组也不支持项赋值。
  • 我们不能编辑一个元组,但是我们可以将多个元组组合(或连接)在一起。
a = (1, 2, 3)
b = (1, "a", "b")a + b
(1, 2, 3, 1, 'a', 'b')
  • 元组是有序的,因此我们可以对元组进行索引和切片操作。
mytuple = (1, 2, "a", 4, [1,8])mytuple[0]
1mytuple[2:4]
('a', 4)
  • 元组也可以通过写逗号分隔的值来创建。
mytuple = 2, 6, 5print(mytuple)
(2, 6, 5)

词典

Dictionary 是一个无序的键值对集合。

mydict = {
   "A": 1,
   "B": [1, 2, 3],
   "C": ("foo","bar")
}print(mydict)
{'A': 1, 'B': [1, 2, 3], 'C': ('foo', 'bar')}
  • 字典键可以被认为是值的地址。它们必须是唯一的和不可改变的。这些值可以是任何类型。
  • 我们可以添加一个新的键值对,如下所示:
mydict["D"] = [10, 20, 30]print(mydict)
{'A': 1, 'B': [1, 2, 3], 'C': ('foo', 'bar'), 'D': [10, 20, 30]}
  • 我们可以使用 pop 方法或 del 关键字从字典中删除一个键值对。
mydict.pop("A")
1print(mydict)
{'B': [1, 2, 3], 'C': ('foo', 'bar'), 'D': [10, 20, 30]}del mydict["B"]print(mydict)
{'C': ('foo', 'bar'), 'D': [10, 20, 30]}
  • 键和值方法可用于分别提取所有的键或值。
mydict.keys()
dict_keys(['C', 'D'])mydict.values()
dict_values([('foo', 'bar'), [10, 20, 30]])
  • 我们可以把字典转换成表格格式。但是,值的长度必须相同。
mydict = {
   "A": [1, 2, 3, 4],
   "B": [10, 20, 30, 40],
   "C": (True, False, False, True)
}import pandas as pddf = pd.DataFrame(mydict)
df

(图片由作者提供)

结论

我们已经对 Python 的内置数据结构做了简单介绍。它们在程序的效率中起着关键的作用。Python 还支持用户自定义的数据结构,如数组、栈、队列等。

感谢您的阅读。如果您有任何反馈,请告诉我。

用于时间序列分析的 4 个必知 Python Pandas 函数

原文:https://towardsdatascience.com/4-must-know-python-pandas-functions-for-time-series-analysis-6610dad521e?source=collection_archive---------5-----------------------

举例说明

照片由卢克·切瑟在 Unsplash 拍摄

时间序列数据由附加到连续时间戳的数据点组成。日销售额、每小时温度值和化学过程中的秒级测量值都是时间序列数据的一些例子。

时间序列数据具有不同于普通表格数据的特征。因此,时间序列分析有其自身的动态,可以被认为是一个独立的领域。有超过 500 页的书深入涵盖时间序列分析的概念和技术。

Pandas 是由 Wes Mckinney 创建的,旨在提供一个高效灵活的工具来处理金融数据,这是一种时间序列。在本文中,我们将介绍 4 个可用于时间序列分析的熊猫函数。

我们需要例子的数据。让我们从创建我们自己的时间序列数据开始。

import numpy as np
import pandas as pddf = pd.DataFrame({
   "date": pd.date_range(start="2020-05-01", periods=100, freq="D"),
   "temperature": np.random.randint(18, 30, size=100) +  
                  np.random.random(100).round(1)
})df.head()

(图片由作者提供)

我们创建了一个包含 100 天内温度测量值的数据框。Pandas 的date_range功能可用于生成自定义频率的日期范围。使用 Numpy 函数随机生成温度值。

我们现在可以开始函数了。

1.变化

对时序数据进行移位是一种常见的操作。我们可能需要对滞后或超前特征进行比较。在我们的数据框中,我们可以创建一个包含前一天温度的新要素。

df["temperature_lag_1"] = df["temperature"].shift(1)df.head()

(图片由作者提供)

传递给 shift 函数的标量值表示要移动的周期数。新列的第一行用 NaN 填充,因为第一行没有以前的值。

fill_value参数可用于用标量填充缺失值。让我们用温度列的平均值代替 NaN。

df["temperature_lag_1"] = df["temperature"]\
.shift(1, fill_value = df.temperature.mean())df.head()

(图片由作者提供)

如果您对未来值感兴趣,可以通过向 shift 函数传递负值来向后移动。例如,“-1”表示第二天的温度。

2.重新取样

对时间序列数据执行的另一个常见操作是重采样。它包括改变周期的频率。例如,我们可能对每周的温度数据感兴趣,而不是每天的测量值。

resample功能创建指定内部的组(或箱)。然后,我们可以对这些组应用聚合函数,根据重新采样的频率来计算值。

让我们来计算一下每周的平均气温。第一步是将数据重新采样到周级别。然后,我们将应用均值函数来计算平均值。

df_weekly = df.resample("W", on="date").mean()df_weekly.head()

(图片由作者提供)

第一个参数指定重采样的频率。令人惊讶的是," W "代表星期。如果数据帧没有日期时间索引,则包含日期或时间相关信息的列需要传递给on参数。

3.Asfreq

asfreq函数提供了一种不同的重采样技术。它返回指定间隔结束时的值。例如,asfreq(“W”) 返回每周最后一天的值。

为了使用asfreq功能,我们应该将日期列设置为数据框的索引。

df.set_index("date").asfreq("W").head()

(图片由作者提供)

因为我们在特定的一天获取一个值,所以没有必要应用聚合函数。

4.旋转

rolling函数可用于计算移动平均值,这是时间序列数据非常常见的操作。它创建一个特定大小的窗口。然后,我们可以使用此窗口在数据点滚动时进行计算。

下图解释了滚动的概念。

(图片由作者提供)

让我们创建一个滚动窗口 3,并使用它来计算移动平均。

df.set_index("date").rolling(3).mean().head()

(图片由作者提供)

对于任何一天,这些值显示当天和前两天的平均值。前 3 天的值为 18.9、23.8 和 19.9。因此,第三天的移动平均值是这些值的平均值,即 20.7。

前两个值是 NaN,因为它们没有前两个值。我们还可以使用这个滚动窗口来覆盖任何给定日期的前一天和后一天。这可以通过将center参数设置为真来实现。

df.set_index("date").rolling(3, center=True).mean().head()

(图片由作者提供)

前 3 天的值为 18.9、23.8 和 19.9。因此,第二天的移动平均值是这 3 个值的平均值。在这个设置中,只有第一个值是 NaN,因为我们只需要 1 个先前的值。

结论

我们已经介绍了在时间序列分析中常用的 4 个熊猫函数。预测分析是数据科学的重要组成部分。时间序列分析是预测分析旨在解决的许多问题的核心。因此,如果你打算从事预测分析,你肯定应该学习如何处理时间序列数据。

最后但同样重要的是,如果你还不是中级会员并计划成为其中一员,我恳请你使用以下链接。我将从你的会员费中收取一部分,不增加你的额外费用。

https://sonery.medium.com/membership

感谢您的阅读。如果您有任何反馈,请告诉我。

Python 的 4 个必须知道的特殊方法

原文:https://towardsdatascience.com/4-must-know-special-methods-for-python-2ffa62b59326?source=collection_archive---------4-----------------------

您需要在用户定义的类中实现的方法

多萝西娅·奥德尼在 Unsplash 上的照片

Python 中的一切都是对象,我们通过类来定义对象。当我们定义一个对象时,我们实际上创建了一个类的实例。因此,类是 Python 中最基本的部分。

课程有:

  • 数据属性:定义创建一个类的实例需要什么
  • 方法(即过程属性):定义如何与类的实例交互

我们可以使用数据和过程属性创建自己的类。这是我们的游乐场,所以我们可以实现各种功能来定制一个类。

除了用户定义的函数,还可以在用户定义的类中使用内置的 Python 函数。这就是特殊(或神奇)方法的用途。

特殊的方法允许使用内置的 Python 函数来丰富用户定义的类。考虑打印函数,这是最常用的 Python 函数之一。如果您使用它来打印您的类的实例,它将打印出如下内容:

<__main__.Book object at 0x7f9ed5b1d590>

它显示类(书)的名称和对象的存储位置,这不是打印功能的正确使用。我们可以通过在类中实现 str special 方法来自定义它的行为。

在这篇文章中,我们将讨论 4 种你可能会在课堂上用到的特殊方法。

1.init

创建类的实例时,会自动执行 init special 方法。它也被称为类构造函数。init 的参数表示一个类的数据属性。

让我们创建一个名为 Book 的类。

class Book(): def __init__(self, name, writer, pages):
       self.name = name
       self.writer = writer
       self.pages = pages

自我指的是实例本身。Book 类有 3 个数据属性,需要在创建 Book 实例时指定。

b = Book("Moby Dick", "Herman Melville", "378")type(b)
__main__.Book

变量 b 是 Book 类的一个实例。

2.str

我们使用 str 特殊方法在我们的类中实现内置的打印函数。如果没有 str,下面是 print 函数的作用。

print(b)
<__main__.Book object at 0x7f9ed5b1d590>

让我们在类定义中定义 str 方法。

def __str__(self):
   return f"The title of the book is {self.name}"

现在打印功能将返回名称的标题。它通过 name 属性访问图书的名称。你可以用你喜欢的任何方式定制它。

print(b)
The title of the book is Moby Dick

3.len

len 函数返回对象的长度。对于字符串,它返回字符数。对于熊猫数据框,它返回行数。

我们可以通过在类定义中实现 len special 方法来自定义它的行为。让我们用它来返回一个 book 对象的页数。

如果 len 没有在类定义中实现,当您试图在类的对象上使用它时,将会出现错误。它没有像打印功能那样的默认行为。

def __len__(self):
   return int(self.pages)len(b)
378

请注意,每次向类中添加新函数时,都需要重新创建对象才能使用新函数。

4.eq

eq 特殊方法允许比较一个类的两个实例。如果它是在我们的类中定义的,我们可以检查一个实例是否等于另一个实例。使用 eq 方法指定相等条件。

在我们的例子中,如果两本书的名字和作者相同,我们可以声明这两本书是相等的。它们可能有不同的页数。

def __eq__(self, other):
   return (self.name == other.name) & (self.writer == other.writer)

如果两个实例的名称和写入都相同,则“==”运算符将返回 True。让我们创建两本书并检查它们是否相等。

b = Book("Moby Dick", "Herman Melville", "378")a = Book("Moby Dick", "Herman Melville", "410")b == a
True

如果 names 或 writes 不同,相等运算符将返回 False。

b = Book("Moby Dick", "Herman Melville", "378")a = Book("Moby Dick", "Melville", "410")b == a
False

结论

对象是 Python 的核心,因此创建健壮的、功能强大的、设计良好的类至关重要。我们已经介绍了 4 种特殊的方法,您需要在自己的类中实现它们。

感谢您的阅读。如果您有任何反馈,请告诉我。

我向任何数据分析师推荐的 4 本非科技书籍

原文:https://towardsdatascience.com/4-non-tech-books-i-recommend-to-any-data-analyst-2c91bcac5f0f?source=collection_archive---------30-----------------------

…以及那些想成为其中一员的人!

在 Unsplash 上由 Clarisse Meyer 拍照

在我从事数据分析领域工作的最初几年,我阅读了许多书籍,这些书籍对我成为更好的数据分析师非常有帮助。其中有 4 本书脱颖而出,我会推荐给任何想进入这个领域或者继续发展的人。

这里提到的所有书籍都是非技术性的。他们都没有谈论编程技能(SQL、R、Python 等)或统计学——已经有很多阅读清单,我强烈推荐这本!在我的帖子中,我将重点关注那些帮助我提高解决问题能力、结构化思维、沟通、商业意识和利益相关者管理的书籍,正如我在上一篇帖子中总结的那样,这些都是伟大的数据分析师的宝贵品质。

这四本书是:

从为什么开始,它训练你从问好问题开始,变得更有决策力。

🪜 金字塔原理,教你如何以结构化的方式定义和解决问题,以及如何以有效的方式展示你的洞察力。

📈精益分析,展示了六种业务模式下的指标体系以及基准,是准备分析师访谈的绝佳材料。

🛒 魔鬼经济学,帮助那些没有商业/经济学背景的人制定更好的假设并验证它们。

下面你可以找到我个人从这些书中的收获。我们开始吧!

从为什么开始:伟大的领导者如何激励每个人采取行动

扎克·卢塞罗在 Unsplash 上的照片

在本书中,西蒙·西内克分享了许多为什么一些组织成功而另一些组织失败的例子(我最喜欢的例子是西南航空),并最终提出了“T2 黄金圈”理论。主要观点是,如果你能够有效地传达你为什么做你要做的事情,而不是你在做什么和你如何做,这是一种非常有效的与他人交流的方式,并激励他们跟随你。

从第一页开始,这本书可能对任何数据人来说都是反直觉的,因为在第一章,作者指出更多的数据或信息不一定会导致更好的决策,尤其是当人们从错误的假设开始时。然而,当我回顾我作为数据分析师的道路时,我意识到这条信息实际上非常有意义。

正如我在上一篇文章中分享的那样,我相信作为一名数据人员,我不是通过完全执行同事的愿望,而是通过帮助他们实现最终目标,来为我的团队创造价值。这意味着有时我需要停止收集数据来回答那些格式不良的问题或假设,而是帮助人们提出好的问题——真正与最终目标相关的问题。最后,“从目标开始”是一项非常有价值的技能,标志着从初级数据分析师向高级数据分析师的转变。

这种学习与我最近阅读的一篇深刻的文章相呼应,在这篇文章中,作者指出了决策驱动的分析和数据驱动的分析之间的差异,并主张更加决策驱动,也就是说,从问题/假设而不是数据开始;先宽而不深地搜索;更容易受到挑战,而不是永久存在。

总的来说,我相信这本书给任何已经是或想要成为数据分析师的人带来了独特的价值,在某种程度上,它帮助你理解为什么好问题比好答案更重要,并最终让你做好准备,更倾向于决策驱动而不是数据驱动。

金字塔原理:写作和思考中的逻辑

莱斯·安德森在 Unsplash 上拍摄的照片

看过我之前帖子的人已经可以看出我有多爱这本书!作为一个真正的倡导者,我不能推荐这本书更多。事实上,我甚至和我的团队召开了一次讨论会议来分享我的经验。有兴趣的话,看看这里的!

作为一名数据人员,我发现这本书有两点对我的职业生涯特别有帮助。首先,有很多小技巧有助于构建结构化思维。最著名的 MECE 原则,即互斥的、集体穷举的原则,对于任何数据分析师来说都是一个非常强大的框架,可以用来剖析问题并为二阶问题(如“为什么销售收入下降了?”等)制定假设或者“为什么我们看到客户流失率增加了?”。此外,顺序分析和 SCQ 框架有助于快速定义和界定问题,这是任何成功解决问题的关键!

其次,这本书还分享了许多展示和交流见解的最佳实践,这是每个数据分析师的日常工作。例如,在任何演示中始终将您的结论放在第一位以帮助您的观众在第一眼就获得关键想法,通常是“什么”,并让他们自己决定是否或何时想知道“什么”背后的更多细节。另一个诀窍是始终将你的支持论点限制在最多三个(即三原则),这有助于你的论点引起注意并变得令人难忘。如果你想知道更多关于我如何在我的日常见解陈述中应用我从这本书中学到的东西,请随意查看这篇文章!

精益分析:使用数据更快地建立更好的创业(精益系列)

照片由缺口编号在防溅板上拍摄

这本书是创业和产品分析领域的经典之作,所以我不会在这里展开太多。:)

就个人而言,我发现这本书最有价值的是好的 KPI 的标准和一个重要指标的概念。我写了一篇关于我们如何定义和测量 OMTM 的文章——点击这里查看!

我想强调的另一点是,这本书为数据分析师提供了独特的价值,尤其是那些处于职业生涯早期阶段的数据分析师。想象一下,你刚刚在一家公司工作了 1-2 年,正在寻找新的机会,特别是那些来自不同商业模式的机会,六种商业模式(即电子商务、SaaS、免费应用、媒体、UGC、市场)下的指标体系以及这些指标的基准是他/她在不同领域没有实际工作经验时准备面试和挑战测试的最佳来源。

魔鬼经济学:一个流氓经济学家探索一切事物隐藏的一面

照片由布鲁克·卡吉尔在 Unsplash 拍摄

技术上来说,最近刚开始看这本书还没看完。我以前听说过很多关于这本书的东西,但我并没有真正读过,因为我在本科学习期间接受过经济学和计量经济学领域的正式培训。也就是说,我意识到我以前没有读过这本书是一个遗憾。它给出了大量现实生活中的例子,并以一种容易理解的方式解释了这些现象背后的机制。对于没有接受过经济学培训的人来说,这是一本很好的入门书籍。

它为热爱数据分析的人带来了什么独特的价值?数据分析师通常能够使用不同的技术,如散点图、回归、统计测试等,在大量数据中找到相关性或模式。就我个人在招聘过程中观察到的,有时缺少的是在观察到的模式背后提出二阶假设的能力。例如,当分析师从条形图中发现收入较高的用户为我们的业务带来更多收入时,我们也希望他/她提出可以解释这种模式的假设,例如,收入较高的人拥有更有价值的财产,因此他们需要更多的保险。不断创造好的假设并尝试验证它们的能力是一名优秀数据分析师的重要特质。

这本书提供了许多实际的例子!例如,它分享了一项调查许多因素与学生学业成绩之间关系的研究。除了展示回归模型的结果,作者还试图分析为什么有些因素是相关的(即,一个家庭的书籍数量与孩子的表现正相关),而有些因素是不相关的(即,给孩子读书是不相关的)——前者表明父母的教育,而后者只是一种可以很容易复制的行为。

因此,我强烈推荐这本书给那些没有商业或经济背景却渴望开始数据分析师职业生涯的人!

你会向(未来的)数据分析师推荐什么书?

内部培养人工智能人才的 4 种新方法

原文:https://towardsdatascience.com/4-novel-ways-to-build-ai-talent-in-house-d9931b44bf1a?source=collection_archive---------27-----------------------

照片由埃里克&尼克拉斯在 Unsplash 拍摄

业内笔记

当外部人才稀缺或昂贵时,有哪些实用的、不太常见的方法来建立 AI 技能?

更新:这篇文章可以在 日文 (感谢 Koki Yoshimoto!)

一家总部位于美国的财富 200 强公司的分析主管承受着巨大的压力。她的团队为这家全球能源公司的 45,000 名员工提供支持,而企业用户对此并不满意。分析交付物经常延迟,并且质量很差。

分析团队是 IT 组织的一部分,正在努力填补他们的空缺职位。所需的技能在 IT 团队中找不到。他们的办公室距离美国的一个大都市有 60 英里的车程,吸引人才并不容易。

培训他们设法雇佣的少数几个人并不容易,而且他们往往缺乏对业务的理解。结果,分析团队因人手不足、超负荷工作以及面对业务用户的愤怒而臭名昭著。

这个场景听起来熟悉吗?

招聘数据科学人才是当今公司面临的最大挑战之一。O'Reilly 在 2021 年进行的关于人工智能在企业中的应用的调查发现,“缺乏技术人员或难以雇佣所需的角色”是最大的挑战。随着各组织对人工智能的投资不断增加,人工智能人才的战争已经升温。

让人工智能发挥作用所需的 5 项技能

由凡妮莎·布切里在 Unsplash 拍摄的照片

认为构建人工智能解决方案只需要数据科学家是一种误解。你的人工智能和你拥有的数据一样好。你需要收集、管理和存储高质量的数据。一旦你有了合适的数据,你需要这些 5 个数据科学技能来成功地设计、构建和采用人工智能:

  • **领域专长:**挑选正确的业务问题并构建一个合理的方法
  • 机器学习(ML): 用于识别数据洞察和构建人工智能模型
  • **软件工程:**将模型打包成软件应用程序
  • **信息设计:**用于设计工作流程,帮助用户消费模型洞察
  • **管理专长:**管理数据项目中的不确定性,确保用户采用

当外部人才稀缺或非常昂贵时,这里有四种不常见的方法来在内部培养这些多功能技能。

1.寻找 IT 团队以外的人才

照片由张家瑜在 Unsplash 上拍摄

Splunk 的首席技术顾问 Lisa Palmer 说:“由于缺乏认识,每个组织都没有充分利用现有员工。团队通常将他们的内部搜索限制在技术团队。“在你的业务范围内,你会对 IT 之外的人才的多样性和深度感到惊讶,”她补充道。

要发现组织中隐藏的瑰宝,你必须开始为每个员工维护一个自我识别的技能列表。该列表必须每六个月更新一次,并由员工公开搜索,以使其有用和可用。帕尔默建议将每个人的技能分为四类:专家、功能、新手和理想的延伸任务。这使得有招聘需求的团队可以在人工智能所需的五种能力中寻找具有现成技能和增长愿望的个人。

2.使用公共内容定制您的数据科学课程

瑞安·豪沃特在 Unsplash 上拍摄的照片

找到合适的内容来提升你内部团队的技能是一个挑战。尽管培训门户和 MOOCs(大规模开放在线课程)如雨后春笋般涌现,但这些课程可能无法满足您组织的特定需求。然而,由于可以在线访问如此精彩的内容,而且通常是免费的,因此重新创建内容可能没有意义。

Sallie Mae 的数据治理和数据战略主管 Wendy Zhang 说:“你必须通过从多个在线来源收集内容来设计自己的课程。根据您团队的背景、角色以及他们成功所需的条件来制定培训计划。这可以帮助您两全其美—重用有价值的在线内容,同时避免千篇一律的方法的局限性。

为了激励团队提升技能,你可以将体验游戏化。张然在美国金融服务专业学习期间,参加了一个有趣的竞赛,帮助她的团队获得新技能。与高管共进午餐的简单奖励导致了快速的学习,同时在团队成员之间创造了健康的竞争。

3.将您团队的技术技能与领域专业知识联系起来

鲍勃·科因在 Unsplash 上拍摄的照片

好的人工智能解决方案需要领域和技术专长的正确组合。经历过技能提升的人通常在他们的视角上是孤立的。技术培训通常不能提供对业务应用程序的接触,而业务方向并不基于技术。

富达投资的在线分析学院帮助来自商业和技术背景的员工发展他们在人工智能、大数据和分析方面的技能。“当我们开始我们的人工智能之旅时,很明显我们需要弥合我们的数据科学和业务团队之间的人工智能意识差距,”富达投资公司智能自动化的 SVP 托德·詹姆斯说。

“为了应对这一挑战,我们创建了一个名为“学习日”的敏捷例程。这个例程为数据科学家提供了一个平台,通过实际例子来教育我们的业务团队如何识别人工智能用例,并分享如何最好地与数据科学团队合作。反过来,数据科学团队从业务合作伙伴那里收到了关于战略、产品和业务流程的类似简报,”他补充道。学习日有助于弥合人工智能意识的差距,并带来更高质量的想法和更好的项目实施。

4.支持工作中的实验和学习

托尔加·乌尔坎在 Unsplash 上拍摄的照片

套用朱利叶斯·凯撒的话,经验是最好的老师。只有当你在实践中运用新技能时,你才能将它内在化。如果你不让你的团队尝试、犯错和边干边学,那么最好的课程和培训方法也将毫无价值。

“我们非常相信在职培训,”福特汽车公司(T4)制造分析高级经理迈克尔·卡瓦雷塔说。“我们的团队拥有从工业工程到计算机科学的各种背景。因此,很少有人能够将技术和领域技能完美结合到我们的团队中,”他补充道。

当内部候选人有成长心态和学习能力时,你可以设计在职培训。你必须让新手和更有经验的员工配对,并为见习期设定明确的期望。“定义影子员工可以立即承担的初级任务,以帮助他们应用所学知识。帕尔默补充道:“为了清晰起见,可以为新手创建一些阶梯式的任务,让他们在熟练后执行。

平衡你团队的技能

有条不紊的培训和应用可以帮助你的团队通过这四种方法提升和磨练他们的能力。你必须通过营造有利的环境来平衡这些能力与软技能,如好奇心、创造力和沟通能力。那时,您的团队将准备好构建数据科学解决方案,这些解决方案不仅有趣,而且对您的业务有影响。

这篇文章最初是由 发表在 企业家项目上。增加了插图。

4 Pandas 用于索引操作的函数

原文:https://towardsdatascience.com/4-pandas-functions-for-index-manipulation-5b8c7bd6ab12?source=collection_archive---------22-----------------------

实用熊猫教程。

安德烈·泰森在 Unsplash 上拍摄的照片

Pandas 为高效的数据分析和操作提供了大量的功能。在本文中,我们将重点关注关于特定数据操作的 Pandas 函数。

Pandas 的核心数据结构是由带标签的行和列组成的数据帧。行或列的索引可以被认为是它的地址。

我们可以使用索引来访问数据框中的行。尽管大多数情况下通过列名来访问列,但是也可以使用列索引。列索引和行索引都从 0 开始。

我们将讨论 4 个 Pandas 函数,它们允许你更新或操作数据框中的索引。让我们从导入库开始,并创建一个样本数据框。

import numpy as np
import pandas as pddf = pd.DataFrame({
   "Date": pd.date_range(start="2021-05-01", end="2021-05-8", 
                         freq="D"),
   "A": np.random.randint(10, size=8),
   "B": np.random.randint(20, size=8),
   "C": np.random.randint(30, size=8)
})df

(图片由作者提供)

我们有一个 8 行 4 列的数据框。

集合 _ 索引

第一个是 set_index 函数,它可以用来将特定的列指定为行索引。

处理时间序列时,您可能需要将日期用作行索引。我们可以使用下面的 set_index 函数来执行这个任务。

df.set_index("Date", inplace=True)df

(图片由作者提供)

需要将 inplace 参数设置为 true 以保存更改。

重置 _ 索引

reset_index 函数的作用是不言自明的。它用整数索引重置当前行索引。

您需要注意 drop 参数。如果不需要当前索引,请将 drop 参数设置为 true。否则,当前索引将作为数据框中的新列保存。

df.reset_index(drop=True)

(图片由作者提供)

我想保留日期列,所以不使用 drop 参数。

df.reset_index(inplace=True)df

(图片由作者提供)

排序值

sort_values 与索引操作没有直接关系。然而,当我们根据列中的值对数据点(即行)进行排序时,数据框的索引也会发生变化。

我们来做一个例子来演示这个案例。

df.sort_values("A")

(图片由作者提供)

这些行根据 a 列中的值按升序排序。索引值也相应地更改。为了防止索引被更新,我们可以使用 ignore_index 参数。

df.sort_values("A", ignore_index=True)

(图片由作者提供)

重新索引

reindex 函数可用于为数据框分配新的列或行索引。我们可以使用 reindex 函数改变列的顺序,如下所示。

df.reindex(columns=["C","A","B","Date"])

(图片由作者提供)

如果当前数据框中不存在新索引中的项目,则默认情况下会用 NA 值填充该项目。我们也可以选择一个值来代替 NA 值。

df.reindex(columns=["C","A","New","Date"], fill_value=0)

(图片由作者提供)

reindex 函数也可以与行索引一起使用。让我们首先将日期列指定为行索引。

df.set_index("Date", inplace=True)df

(图片由作者提供)

我们将创建一个新的日期索引,比原来的索引多包含 2 天。

newindex = pd.date_range(start="2021-05-01", freq="D", periods=10)newindexDatetimeIndex(['2021-05-01', '2021-05-02', '2021-05-03', 
'2021-05-04', '2021-05-05', '2021-05-06', '2021-05-07', 
'2021-05-08', '2021-05-09', '2021-05-10'],               dtype='datetime64[ns]', freq='D')

如果将这个新索引分配给我们的数据框,最后两行将填充 NA 值。可以选择一个常数值来填充它们。然而,Pandas 提供了一个更实用的方法。

方法参数可用于选择更智能的方式来处理缺失值。例如,我们可以用前一天的值填充它们。“ffill”选项执行此操作。

df = df.reindex(newindex, method="ffill")df

(图片由作者提供)

结论

我们已经讨论了 4 个函数,它们提供了许多选项来处理数据帧的行或列索引。当然,这不是你仅有的选择。我坚信这 4 个足以处理你可能遇到的典型案例。

感谢您的阅读。如果您有任何反馈,请告诉我。

4 熊猫的功能,我希望我能早点知道

原文:https://towardsdatascience.com/4-pandas-functions-that-i-wish-i-knew-earlier-1edcc3a491bb?source=collection_archive---------2-----------------------

你不需要重新发明轮子。

照片由 kishan bishnoi 在 Unsplash 上拍摄

如果您在数据科学项目中使用 Python,那么 pandas 很可能是使用最多的库之一。对我来说,作为一名生物医学科学家,我几乎每天都用熊猫来处理和分析数据。时不时地,我发现我是在多此一举,因为我不知道存在可以轻松完成这项工作的相关函数。在这篇文章中,我想分享一些很多人在开始使用熊猫时不知道的功能。

1.最小和最大

在处理数值时,我们经常需要找到特定列的极值来进行数据质量检查。我们当然可以对值进行排序并选择最上面的行,如下所示。

重新发明轮子以获得极限记录

然而,使用sort_values来获得极端记录是重新发明轮子,因为 pandas 已经实现了具有更好性能的函数来实现相同的结果。下面的代码向您展示了这种用法。干净多了吧?

>>> df.nlargest(3, "Score")
    Student  Score
1  Jennifer    100
3    Joshua     99
0      John     95
>>> df.nsmallest(3, "Score")
  Student  Score
4    Jack     88
6   Jason     89
5  Jeremy     92

2.idxmin 和 idxmax

有一次,我需要按组找出最大的记录。例如,假设我们有以下数据帧。我想提取各自组中得分最高的记录。

示例数据帧

我的第一反应是将groupby函数与max函数一起使用,如下所示。虽然它告诉我每组的最高分,但它不包括我需要的其他列(例如,姓名)。也许我可以用这些最大值来过滤原始记录。我的直觉是这太复杂了。一定还有其他原因。

>>> df.groupby("group")["score"].max()
group
1     97
2     95
3    100
Name: score, dtype: int64

在我做了一些研究之后,我终于能够找到我正在寻找的解决方案——使用idxmax函数。这个函数是找出指定列的最大值的索引,通过这个索引,我们可以使用loc属性检索整个记录。下面的代码片段向您展示了这种用法。是不是整洁多了?

>>> record_indices = df.groupby("group")["score"].idxmax()
>>> record_indices
group
1    0
2    4
3    6
Name: score, dtype: int64
>>> df.loc[record_indices]
   group name  score
0      1   A1     97
4      2   B2     95
6      3   A3    100

以类似的方式,如果您对找出具有最小值的记录感兴趣,有一个对应的idxmaxidxmin,它专门用于检索最小值的索引。

3.qcut

当我们处理连续变量时,有时有必要根据现有数值的分位数创建序数值。理论上,有些人,包括我最初,可能倾向于找出某一列的分位数,并通过硬编码临界值来创建分类列。

然而,pandas 有一个简单的选项来实现这个操作——使用qcut函数,该函数根据它们的排名创建不同的值。使用我们在上一节中定义的 DataFrame,我们可以基于Score列对数据进行二分法,如下所示。

>>> df["score_dichotomized"] = pd.qcut(df["score"], 2, labels=['bottom50', 'top50'])
>>> df
   group name  score score_dichotomized
0      1   A1     97              top50
1      1   B1     93           bottom50
2      1   C1     92           bottom50
3      2   A2     94              top50
4      2   B2     95              top50
5      2   C2     93           bottom50
6      3   A3    100              top50
7      3   B3     92           bottom50
8      3   C3     93           bottom50

4.日期范围

当我处理日期数据时,我只是使用基本操作。例如,如果我需要创建一系列日期,我将只使用开始日期,并通过使用内置的datetime模块中的timedelta函数来创建额外的日期。

假设我需要创建 2021 年第一周的日期,作为数据帧的索引。这里有一个可能的解决方案。

>>> import datetime
>>> start_date = datetime.datetime(2021, 1, 1)
>>> first_week = [start_date + datetime.timedelta(days=x) for x in range(7)]
>>> pd.DatetimeIndex(first_week)
DatetimeIndex(['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04', '2021-01-05', '2021-01-06', '2021-01-07'], dtype='datetime64[ns]', freq=None)

然而,有一个更好的方法——使用date_range功能。下面的代码片段向您展示了这种用法。

>>> pd.date_range(start='1/1/2021', periods=7)
DatetimeIndex(['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04', '2021-01-05', '2021-01-06', '2021-01-07'], dtype='datetime64[ns]', freq='D')

结论

熊猫身上总是有很多值得发现的东西。当您发现当前的实现很麻烦时,有可能会有更好的解决方案来解决您的问题,可能只需要一个简单的函数调用。

继续发现熊猫!

你应该知道的 4 种熊猫组队技巧

原文:https://towardsdatascience.com/4-pandas-groupby-tricks-you-should-know-9e5b9870693e?source=collection_archive---------4-----------------------

照片由 Pixabay 上的 moise_theodor 拍摄

更加灵活和创造性地使用熊猫群

作为 Python 中最流行的库之一,Pandas 已经被广泛使用,尤其是在数据 EDA(探索性数据分析)工作中。通常,它可以用于过滤和转换数据集,就像我们通常使用 SQL 查询所做的那样。它们有很多相似的概念,比如连接表。然而,它们中的一些特征具有相同的名称但是不同的概念。“分组依据”就是其中之一。

在这篇文章中,我将按功能为熊猫小组介绍一些技巧,它们可以提高我们在 EDA 工作中的生产率。希望至少有一个是你从来不熟悉的,这样它可以帮助你。

我相信你知道如何在 Python 中导入熊猫,但是,让我把它放在这里。本文中所有剩余的代码都假设 Pandas 已经按如下方式导入。

import pandas as pd

用于演示的样本数据

由摄影爱好者在 Pixabay 上拍摄的照片

让我们不要在获取样本数据集上浪费太多时间。iris 数据集在数据科学中非常常用,称为“hello world”数据集。我们可以很容易地从 Sci-kit 学习图书馆得到它。让我们导入它并加载 iris 数据集。

from sklearn.datasets import load_irisiris = load_iris()

虹膜数据集在加载后是一个字典。关键字“data”的值是一个包含 3 种虹膜的所有特征的二维数组。“feature_names”按顺序包含列名。“目标”包含虹膜的编码类别,如 0、1 或 2。最后,“targe_names”包含三种虹膜的实际名称,分别对应编码号 0、1、2。

打印出来就明白是什么样子了。以下代码用于将 iris 数据集加载到我们预期的 Pandas 数据框中。

df = pd.DataFrame(data=iris['data'], columns=iris['feature_names'])
df['class'] = iris['target']
df['class'] = df['class'].apply(lambda i: iris['target_names'][i])

代码的第一行使用列名从二维数组创建数据框。第二行添加了编码的 iris 类,第三行将数字翻译成 iris 类名。

现在,我们在同一页上。让我们在本文的其余部分使用这个样本数据框。

基础知识

照片由在 Pixabay 上拍摄

Pandas group by 函数的基本思想不是为了将分类值分组在一起,而是为了在之后计算一些聚合值。因此,对每个组执行聚合。

例如,我们可以基于虹膜分类对数据帧进行分组,并计算每个特征(列)的平均值。

df.groupby('class').mean()

除了mean()还有很多聚合函数,比如min()max()count()

好的,这部分只是为了复习。现在我们应该开始了。

招数 1。按大小或计数聚合

Alicja 在 Pixabay 上拍摄的照片

使用count()函数来聚合组以获得每个组的行数是很常见的。然而,这有时并不是你想要的。也就是说,当数据帧中有空值或 NaN 值时,它们将而不是count()函数计数。

让我们手动为数据框分配一个 NaN 值。

df.iloc[0,0] = None

上面的代码将为萼片长度列的第一行创建一个 NaN 值。

然后,让我们对它使用count()函数。

df.groupby('class')['sepal length (cm)'].count()

setosa 虹膜被计数为 49,但实际上有 50 行。这是因为count()函数实际上并不计算 NaN 值。

还有一个很少使用的聚合函数— size()。这个函数将选取所有的值,即使它是 NaN。

df.groupby('class')['sepal length (cm)'].size()

招数二。自定义聚合列名称

照片由 Goumbik 在 Pixabay 上拍摄

有时,我们可能希望重命名聚合列,而不是仅使用“max”或“mean”作为名称,这并不表示它是从哪个列聚合的。

我们实际上可以在agg()函数中将名称指定为参数。

df.groupby('class')['sepal length (cm)'].agg(
    sepal_average_length='mean',
    sepal_standard_deviation='std'
)

招数三。定制聚合函数

照片由 Myriams-Fotos 在 Pixabay 上拍摄

Pandas 提供了mean()count()等多种聚合功能。但是,如果只能使用这些功能,还是相当有限的。

事实上,我们可以定义自己的聚合函数,并将其传递给agg()函数。例如,如果我们想得到每一列的平均值,并将它们转换成毫米,我们可以如下定义自定义函数。

def transformed_mean(value):
    value *= 100
    value_mean = value.mean()
    return round(value_mean, 2)

然后,简单地将这个函数名作为参数传递给agg()函数。

df_mm = df.groupby('class').agg(transformed_mean)df_mm.columns = ['sepal length (mm)', 'sepal width (mm)', 'petal length (mm)', 'petal width (mm)']

不要忘记通过改变单位来重命名列名,以确保它们是一致的:)

当然,对于诸如相对简单的函数,我们也可以用 lambda 定义一个匿名函数如下。

df_mm = df.groupby('class').agg(lambda x: round((x * 100).mean(), 2))

所以,我们不需要定义一个独立的函数。然而,如果逻辑相对复杂,为了更好的可读性,建议定义一个合适的函数。

招数四。按箱分组

照片由 imordaf 在 Pixabay 上拍摄

我们必须对分类变量使用 Group By 吗?答案是否定的。

如果一个变量是连续的,我们需要做的只是创建箱,以确保它们被转换为分类值。在 Pandas 中,我们可以使用pd.cut()函数轻松创建具有相同范围的容器。

sepal_len_groups = pd.cut(df['sepal length (cm)'], bins=3)

上面的代码创建了 3 个跨度相等的容器。相等意味着 3 个箱之间的距离完全相同。

然后,我们可以直接使用 group by 中的这三个 bin。

df.groupby(sepal_len_groups)['sepal length (cm)'].agg(count='count')

摘要

由 mirkostoedter 在 Pixabay 上拍摄的照片

在本文中,我介绍了在 Pandas 中使用 group by 函数和聚合函数时的一些技巧。使用正确的方法有时可以在很大程度上提高我们的生产力。

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

如果你觉得我的文章有帮助,请考虑加入 Medium 会员来支持我和成千上万的其他作者!(点击上面的链接)