admin管理员组

文章数量:1645531

原文:TowardsDataScience

协议:CC BY-NC-SA 4.0

我如何做出我的第一个科学贡献

原文:https://towardsdatascience/how-i-made-my-first-scipy-contribution-d8c376ff7ac2

或者说,两个样本测试的微妙之处。

I)为流行的存储库做出贡献

向受你所在领域从业者欢迎的著名开源库投稿是展示专业知识的一个好方法。例如,能够说:“如果你在 SciPy 中使用这个方法,你就是在使用我的代码”肯定会引起注意,让你脱颖而出(我们将使用 SciPy 作为例子,但这适用于任何流行的库)。此外,你会发现从人工智能到分布式计算等领域的许多顶尖研究人员在他们的简介和简历中提到了这些贡献。但是如果这么做很容易,每个人都会这么做。例如,SciPy 总共有大约 1000 名投稿人。这包括对文档、评论等的贡献。如果你只包括触及核心功能的贡献者,你可能只剩下几百个。这对于一个几千万人使用的图书馆来说。

I-A)“伟大”的过滤器

就像解决费米悖论的“伟大过滤器”框架一样,我们可以想到一系列障碍或过滤器来解释为什么只有少数人贡献这些代码库,而有那么多人使用它们。

向开源库贡献代码的伟大过滤器。图片作者。

首先,仅仅是在 GitHub 上浏览的源代码就可能令人生畏。

下一步是在本地下载代码,并从源代码编译它。分叉‘代码本地就够简单了。但是构建它需要安装 C 和 Fortran 编译器,因为许多代码将输入传递给这些语言的方法,这些语言比 Python 快得多。此外,从线性代数到统计学的许多基本算法都已经在这些语言中实现,可以追溯到 60 年代。

在您的系统上设置这些编译器可能是一项非常耗时且令人沮丧的工作,尤其是如果您以前从未处理过它们的话。但是在这里你可以像我一样走捷径。我找到了一部分纯 Python 的代码,把它复制到本地,然后只在上面工作。

现在,您必须找到代码中需要改进的地方。实现这些算法的人不是傻瓜,他们会知道最著名的实现,如果不是直接插入它们的话。这可能是最难的部分。为文档做贡献可能是缩短这一艰难步骤的一种方式,因为这是一个总是需要更多手指的领域。我在这方面很幸运,因为我使用的一种方法(一种称为二项式测试的假设测试)是在向它传递大量输入时抛出内存异常。很明显,这种行为是由于执行不力。所以,我知道去哪里找。

最后,如果你通过了所有这些,对这些存储库的审查过程将会非常严格。维护人员可能不会接受您的代码更改,即使您确信这是一个显著的改进。如果他们这样做了,他们会彻底测试你的代码,并提出许多修改建议。这个过程可能需要几个月的时间(至少对我来说是这样)。

现在我们将具体讨论我的贡献。我改进了一个叫做二项式检验的假设检验的实现。因此,我们现在将进入变化本身,并需要建立一些背景。

对于高层次的动机,考虑一个赌场的老虎机。当你玩的时候,你要么赢要么不赢。你有一些关于机器的一些拉的数据,想要决定是否玩它。

二项分布

你掷一枚硬币,正面朝上的概率为 pn 次。你会看到多少个头?这是一个随机变量,因为你可能会看到在 0n 头像之间的任何东西。我们姑且称这个随机变量, H 。这个随机变量取某个值的概率, h (在 0H 之间)是:

等式(1):二项式分布 PMF。图片作者。

举个例子,掷三次硬币,两个正面,我们可以得到 HHT,HTH 或者 THH。这些序列中的每一个都有一个概率 p (1-p) 。而这三个序列必须乘以 3 ,解释*(n \选择 h)* 项。

脚注 1:随机变量用大写字母表示。

III)二项式检验

在这个游戏的一个更现实的变体中,我们并不真正知道硬币的 p 参数。在这种情况下,问题被颠倒了。我们知道在 n 次投掷中得到的人头数,并想利用这一信息对 p 进行一些推断。这就是二项式检验的用武之地。因为这是一个假设测试,所以让我们快速覆盖一些基础知识(基于抛硬币)。

III-A)假设检验速成班

在假设检验中,我们从一些假设开始,然后根据收集的数据检验那个假设。我们从这个假设开始,并根据对数据的一些观察进行检验,这个假设被称为“零假设”或简称零假设。在我们的例子中,空值是硬币正面的概率值, p 是某个特定值(比如说 p_0 ,可能是 .5 )。从这里,我们执行以下操作:

  1. 将所有数据汇总成一个数字。这个数字被称为“测试统计”。这应该是我们在空值下很容易推理的东西。在我们的例子中,这是我们在第次投掷硬币中观察到的正面数。
  2. 得到原假设下检验统计量的分布。请注意,这种分布完全考虑了它所计算的数据的大小,随着我们收集的数据越来越多,它在单个值处变得越来越峰值化(反映出我们对所得出的结论有更高的信心)。在我们的例子中,假设我们在空值下投掷硬币 n 次(正面的概率是 p_0 ,那么正面数量的分布是一个参数为 np_0 的二项式分布。
  3. 在假设为空的分布下,找出比计算的测试统计值(从数据中)更极端的概率。在定义“极端”的含义时,我们有三种测试。大于、小于和双面。

III-B)回到二项式

让我们通过回到二项式检验来使事情具体化。我们示例中的零假设是 p = 0.5 。假设这是一个赌场的老虎机,p 是你赢的概率。你只有在 p > 0.5 的情况下才想玩。所以,当这不是真的(当 p < 0.5 时)时,你想要得到提醒,所以你知道要远离那台机器。现在最好用一张图片来显示“as 或更极端”。下图中的蓝条是检验统计量的概率质量函数(PMF), H (考虑到收集的数据量)。这只是一个参数 np=0.5 的二项式分布。

绿线是测试统计的实际值, h 由数据计算得出。绿色区域是 PMF 中必须求和才能获得 p 值的部分。

在单侧假设检验中,您只对一侧的面积求和,在这种情况下是在观察检验统计量的右侧。图片作者。

如果是“大于”测试,绿色区域延伸到绿线的右侧,如果是“小于”测试,则延伸到左侧。

第三种测试是双边的。在这里,如果数据显示参数 p 明显不同于其在空值下的假设值,我们希望得到警告。因为我们现在关心两边的偏差,我们需要对两个区域求和来得到 p 值。这些在下面以绿色和红色显示。绿线是根据之前的数据计算出的测试统计的实际值。

在像二项式检验这样的双边假设检验中,必须取两边的面积来得到 p 值。一方面,您已经有了测试统计数据(绿色)。但接下来你要找到另一边“一样极端”的点。图片作者。

但是我们在哪里划红线呢?我们知道它会在模式的另一边(黄线)。本着比实际观察“更极端”的精神,我们需要找到一个和绿点一样极端的点,但在另一边。这一点在图中用红色标出。在这里,“极端”意味着“不太可能”。我们采用观察绿点的概率,并在模式的另一侧找到具有相同或“等于或略低于”概率的点。

在上图中,由于 p0.5 ,所以分布关于模式是对称的。所以,我们可以很容易地利用对称性找到红点。但是如果 p 不是 0.5 的任何值,对称性将会打破,我们又回到明确地寻找红点。

IV)原始代码

在双边测试的情况下,原始代码是非常低效的。具体地说,在红点“在另一侧的极端”将被定位的步骤中。从该模式到另一个极端的值首先存储在一个数组中(在下图中以灰色显示)。

“模式的另一边”的概率质量函数值被存储在一个数组中。当传递给二项式检验的 n 很大时,这个数组变得非常大。图片作者。

然后,在那个阵列上有一个环,识别红点。这就是 O(n) 空间和 O(n) 时间复杂度!当传递了较大的值 n 时,会导致内存不足异常。

五)改进

V-A)消除内存占用

第一个改进是针对将数组保存到内存中所带来的内存占用。这就是当大的值 n 被传递时导致该方法彻底失败的原因。实际上没有必要将概率质量函数的值保存到数组中。人们可以很容易地在循环中计算它们,将它们存储在一个变量中(覆盖循环的每次迭代),并继续下去,直到识别出红点。

这样, O(n) 内存占用就消除了。如果修复如此明显,为什么首先要使用数组呢?我很确定我知道答案。

“在数组中存储东西”让人想起 R 编程语言中的矢量化运算。这里的明确指导是更喜欢向量化的东西,而不是编写循环。这是因为向量被传递给非常高效的 C 代码。

许多统计方法实际上是从 R 开始的。有人可能把函数从 R 翻译成 Python,但做得有点过了,没有注意到不需要数组。

V-B)通过二分搜索法降低时间复杂度

通过消除数组,我们把空间复杂度带到了 O(1) ,但是时间复杂度仍然是 O(n) 。这可以通过观察我们搜索的概率质量函数值总是被排序(以升序或降序)来进一步改进。这意味着二分搜索法可以用来搜索红点在 O( log n) 时间内的位置。当然,二分搜索法必须在一个函数上,而不是在一个数组上,以避免带回 O(n) 内存占用。

VI)拉取请求

你可以在这里看到拉动请求和围绕它的讨论。在下面的截图中,您可以看到在旧版本的代码中,通过“np.arange”方法创建了占用 O(n) 内存的数组。这是由二分搜索法取代。

放在代码中 SciPy 创建数组的地方,这是不必要的,会导致内存问题。图片作者。

这是改造后的二分搜索法本身:

新的二分搜索法方法,作用于函数而不是数组。图片作者。

与传统的二分搜索法不同,它所操作的参数是一个函数而不是一个数组。这样,我们保留了内存足迹 O(1) ,同时仍然占用了 O( log n) 时间。

结论:向你所在领域的热门图书馆投稿是展示专业知识的好方法,同时也能学到很多你想毕生从事的领域的知识。有许多阻碍会使这变得困难,但是你必须留意机会。此外,尝试通过走捷径来缩短一些困难的部分。在产生积极影响的同时,为文档做贡献是一个让你有所收获的好方法。


如果你喜欢这个故事,成为推荐会员:)

https://medium/@rohitpandey576/membership

我如何组织我的雪花数据仓库

原文:https://towardsdatascience/how-i-organize-my-snowflake-data-warehouse-996965fe51dc

存储数据的数据库、模式和表

娜娜·斯米尔诺娃在 Unsplash 上的照片

您的数据仓库是您现代数据堆栈的中枢。数据通过像 Airbyte 这样的数据摄取工具流入其中,确保原始数据可用。数据在其中使用 SQL 和现代数据转换工具(如 dbt)进行转换。然后,数据从 it 流向业务用户和数据可视化平台。

所有数据都存在于您的仓储解决方案中*。*

这是一个强大的工具。你需要确保你做得对。您数据的完整性取决于制定此解决方案的分析工程师、数据工程师和数据分析师。考虑到不同的因素,如开发和生产、安全性和业务用例,必须正确地完成。

在本文中,我解释了如何组织我的雪花数据仓库,以便尽可能少出错。我将介绍如何决定您的数据仓库解决方案,确定您的数据库、模式和不同类型的表。

为什么选择雪花作为你的数据仓库?

在整篇文章中,我将特别提到雪花作为我的数据仓库解决方案。我认为雪花是市场上最好的数据仓库。雪花是专门在云上构建的,这意味着您和您的团队可以随时随地访问它。Snowflake 速度很快,允许您根据预算轻松扩展或缩减计算能力。雪花也使得在许多用户之间共享数据变得容易。

在我们开始对您的数据仓库架构做出所有决策之前,让我们讨论一下雪花数据仓库的组件。雪花数据仓库架构由不同的数据库组成,每个数据库都有自己的用途。雪花数据库包含模式来进一步分类每个数据库中的数据。最后,最细粒度的级别由表和视图组成。雪花表和视图包含您熟悉的典型数据库表的列和行。

组织您的雪花数据库

您的数据仓库有三个主要组件。您接收原始数据的位置。数据转换发生的位置(通常使用 dbt)。以及存储报告和实验的位置。

作者图片

存储原始数据

先说第一个地点。您将在哪里将原始数据导入到雪花中?我建议创建一个雪花数据库来接收所有的原始数据。这应该是任何数据首先到达的地方。

重要的是始终保存一份原始数据的副本,以防出现问题。拥有一个原始副本将允许您在发现其中一个错误时重新运行您的数据模型。

唯一可以完全访问它的系统必须是您的摄取工具。在我的例子中,它是 Airbyte,一个开源数据摄取工具,您可以使用它从任何可用的源连接器将数据加载到雪花中。Airbyte 会将所有原始数据转储到您专门为摄取而创建的“原始”数据库中。除非使用另一个摄取工具,否则其他任何人都不应该将数据转储到这个位置。

作者图片

存储转换后的数据

现在,数据仓库中有几种类型的转换。首先,也是最简单的,是基本模型。这些是对原始数据进行的基本转换,以便分析师和分析工程师在数据模型中使用它们。我写了另一篇关于为这些基本模型创建 dbt 风格指南的文章。

在设计雪花架构时,避免从原始数据库中读取转换是一个最佳实践。您的数据模型应该总是从包含这些基础模型的另一个雪花数据库中读取。

这本质上是一个类似于“原始”数据库的数据库,但有一些基本的转换,如数据类型转换和字段名更改。为了简单起见,我称我的为“基础”。dbt 通常称之为“分期”。

“基础”数据模型也是视图,而不是表。这在您的雪花仓库中节省了成本,因为您没有存储底层数据的完整副本。相反,你正在创建一个生活在它上面的层。

因为这些数据总是相同的,无论是在开发还是生产中,都不需要创建单独的环境。视图不需要每天自动化和部署,因为它们只是从原始数据中读取。

与您的其他转换一样,这些将是您使用 dbt 构建的更复杂的模型。这些都需要开发和生产环境。您不希望一个数据库同时包含开发和生产模型,所以最好为每个模型创建不同的数据库。

我把我的叫做“数据集市开发”和“数据集市产品”。

作者图片

这两个数据库都从“基本”数据库的表中读取数据,但一个用于测试数据模型的创建,另一个由业务部门验证、编排和依赖。您的“DATA_MART_PROD”表应该每天创建一次,或者使用编排解决方案更频繁地创建。

请记住,使用 dbt 在雪花中创建的表是 瞬态表 。这些表类似于永久表,只是它们在 Snowflake 上没有完整的历史。这有助于节省存储成本,但也是为什么总是保留所有原始数据的副本很重要的另一个原因。

为报告和实验存储数据

出于报告和实验的目的,分析师通常希望编写更长的一次性查询。随着查询的编写,有了一个地方来存储这些查询,以便业务用户和可视化工具可以访问它们。

因为这些通常只编写一次,不需要每天自动运行,所以您不希望在开发或生产中存储它们。我们在 BI 工具中完成大部分报告,使用生产中内置的数据模型,而不是在雪花中。

然而,如果您在雪花中自动化您的报告,在“DATA_MART_PROD”中创建这些报告可能是一个更好的主意。

在我的雪花环境中,我为这些数据创建了一个名为“RDA”的数据库。在这里,分析师可以从他们的查询中创建表,然后供其他人使用。

您可能想知道,如果这些是一次性的分析,为什么我首先需要存储它们?如果这些查询非常复杂,您不会想要在可视化工具中直接使用它们。你会想要利用雪花的速度和力量来运行它们。此外,通过这种方式,您将能够方便地引用以前的报告代码,以便将来查询。

作者图片

在这里,您可以看到我的数据库的雪花架构是什么样子的。注意还有“UTIL_DB”、“雪花”和“DEMO_DB”。这些是默认情况下用任何雪花帐户创建的。“雪花”主要用于内部雪花设置,涉及权限、账户使用和账户历史。“UTIL_DB”和“DEMO_DB”可以删除。

一旦确定了要创建的数据库,就可以在雪花工作表中运行下面的命令来实现这个目的:create database [database_name]

组织您的雪花模式

既然已经创建了数据库,就可以确定需要在每个数据库中构建的模式了。雪花模式作为一种更细粒度的方式来组织数据库中的表和视图。它们应该帮助您更快地编写查询,确切地知道在哪里可以找到某些数据。

原始数据和基本模型

您的“原始”和“基础”数据库应该由完全相同的模式组成。“BASE”本质上只是原始数据库的副本,但是应用了基本的转换。在这两个数据库中,我建议为每个数据源创建一个新的模式。

作者图片

例如,如果您从 Google Ads、脸书、Bing Ads 和 Mailchimp 获取数据,您将为其中的每一个创建不同的模式。您的数据库将如下所示:

作者图片

每个雪花数据库都包含默认模式“PUBLIC”和“INFORMATIONAL_SCHEMA”。虽然我建议删除“PUBLIC”,但“INFORMATIONAL _ SCHEMA”包含描述每个模式内容的视图。这个可以派上用场,留着也无妨。

当您添加新的数据源时,您可以轻松地为每个数据源创建一个新的模式。现在,当访问原始数据或基本模型时,您知道在哪里可以找到您需要的每一个数据。

开发和生产模型

类似于“RAW”和“BASE”,“DATA_MART_DEV”和“DATA_MART_PROD”应该具有相同的模式。它们是彼此的精确副本,除了一个用于开发目的,另一个由业务团队验证和使用。其中,我只使用了两种模式:“中间”和“核心”。

作者图片

作者图片

这些术语通常在 dbt 文档中使用。中间模型是介于基础模型和最终产品之间的模型,或者核心数据模型。它们是 SQL 文件的输出表,不一定用于分析,但却是构建最终模型的重要一步。唯一真正需要访问它们的人是分析工程师,或者是编写它们的人。

核心模型是数据模型的最终产品。它们是代码序列中最后一个 SQL 文件产生的表。这些是数据分析师和业务用户需要在您的生产环境中访问的。所有分析、仪表板和报告都将基于这些数据模型构建。

组织雪花表和视图

在决定如何命名表和视图之前,需要决定何时使用它们。如果您不熟悉的话,视图充当表,但不是数据的物理副本。它是一个位于底层表之上的 SQL 查询,如果您正在寻找一个安全的解决方案或省钱的方法,这是一个很好的选择。

就我个人而言,我在 Snowflake 中为我所有的基础和中间模型使用视图。因为基本模型只包含原始数据的基本转换,所以实际上不需要存储另一个完整的副本。至于中间模型,因为分析师不直接查询,所以没必要在上面浪费存储空间。

但是,我的原始数据和核心数据模型总是表。您的原始数据需要以表格的形式存储为物理副本。这对您的核心数据模型也很重要,因为这些模型通常每天都在运行,并且经常被访问。你希望历史记录存在。

表和视图的命名约定

雪花表和视图的名称与 dbt SQL 文件的名称相同。dbt 自动生成与代码所在的文件名同名的表和视图。因此,正如我在上一篇文章中所分享的,创建一个一致的、强大的 dbt 风格指南是非常必要的。

如果您在 dbt 中查看我的 SQL 文件的名称,您将会看到在我的雪花模式中作为表生成的那些确切的文件名。例如,我有 fb_ads.sqlfb_campaigns.sqlfb_ad_actions.sql 作为 sql 文件,它们包含我的基本模型的代码。如果您查看我的“BASE”数据库和“FACEBOOK”模式,您可以将这些确切的文件名视为表格。

作者图片

作者图片

结论

确保通过规划和设计数据库、模式和表/视图来开始构建雪花架构的过程。在你知道你的整个数据生态系统是什么样子之前,你不想创造任何东西。

我建议记录您的雪花数据仓库架构的每一部分及其背后的目的。在决定最适合您的体系结构之前,请与您的团队一起多次查看此文档。

记住,这个过程不是一劳永逸的。随着新的业务用例的出现,您将添加新的数据库、模式和表。而且,如果你觉得有些东西不适合你,不要害怕去改变它。

有许多不同的方法来组织您的雪花数据仓库架构。我见过在数据库中通过模式分离环境的团队,在生产环境中自动化报告的团队,以及拥有多个开发和生产数据库的团队。这完全取决于什么对你的用例有意义。

我的团队只有一名分析工程师,就是我。所以我不知道这个架构如何与在 dbt 中编写数据模型的多个分析工程师一起工作。

作为唯一一个用 dbt 写作的人,它工作得很好,创造了一种非常简化的做事方式。请关注第二部分,了解如何在雪花数据仓库中设置用户、角色和权限。

更多关于分析工程、现代数据堆栈和雪花的信息,订阅我的免费每周简讯。

我是如何通过 TensorFlow 开发者证书考试的

原文:https://towardsdatascience/how-i-passed-the-tensorflow-developer-certificate-exam-501cefa728f6

张量流

值得吗,如何准备

莎伦·麦卡琴在 Unsplash 上的照片

在经历了 TensorFlow 开发人员证书考试的准备和通过过程后,我认为给其他人一个概述可能是有用的,可以使用的最佳准备资源,考试中需要注意的事项,以及关于它是否对你特别有用的建议。

注意:本文不会透露实际考试的任何问题/答案。虽然这可能会让一些人失望,但维护考试的完整性是非常重要的。这是为了确保当你最终得到你的证书时,它是有价值的。

什么是 TensorFlow 开发者证书?

TensorFlow 证书网站非常简洁地描述了这一点:

TensorFlow 开发中的此证书旨在作为学生、开发人员和数据科学家的基础证书,他们希望通过使用 TensorFlow 构建和训练模型来展示实用的机器学习技能。

…所以这是一个实践考试,要求你建立实际的张量流模型来预测结果(分类和回归)。

我建议的参考框架

现在你知道什么是证书了,我认为在我继续之前了解一下我的背景和经历是很重要的。这可能有助于一些人为他们的准备制定一个攻击计划,也可以判断我的建议与他们的相关性如何。

  • 在日常工作中,我是一名“传统”工程师(即机械工程师、土木工程师等)。),而不是软件开发人员或数据科学家/数据分析师。
  • 我在日常工作中有软件开发和数据分析的经验(许多传统的工程工作都是某种数据分析)。
  • 在过去的 5 到 6 年里,我一直在努力扩展和提高我的软件开发/数据分析技能。这既是因为它对我的工作有益,也是出于对这个主题的兴趣。
  • 虽然我有一个硕士学位,但不是在软件开发领域(航空工程)。
  • 我花了相当多的业余时间从事各种软件/分析项目。

上面的内容会给你一个很好的衡量标准,让你知道你的经验水平和我相比会如何,并允许你采纳下面的建议。

值得做吗?

这是一个非常有效的问题,在我解释我推荐什么资源之前,我想先回答这个问题。

费用

办证花了我美元T2【100】T3。这对一些人来说可能没问题,但我认为这对一些人来说是一个很大的障碍。

幸运的是,如果你符合标准,有一个津贴项目,所以在某些情况下,这可以帮助降低成本。

同样值得注意的是,付款是从我的卡上以美元支付的,我不是美国人。在考虑您自己的银行/提供商的汇率费用时,请记住这一点。

就业前景

如果成本没有让你却步,那么主要的问题是:

这个证书会改善我的工作前景吗?

在我看来,这都取决于你目前的状态。如果你有一个计算机科学学位,并且目前是一名有多年经验的数据科学家,那么这不会给你的简历增加多少价值。然而,随着你剥离技能,这个证书的等级将会更高:

  • 有 CS 学位但没有数据科学经验?
  • 没有 CS 学位,有一些数据分析师经验?
  • 以上都没有?
  • 大学刚毕业?

在上述所有情况下(以及其间的许多变化),可以清楚地看到该证书可以增加一些价值。这是一个非常具体的技能能力的证明。

然而,我认为需要记住的最重要的因素是可见度

如果这份证书的唯一作用是让你的简历一开始就受到关注,那么它是值得的。

申请工作时,最初扫描你简历的人(他们确实只是扫描了简历)可能会根据关键标准进行检查,如果其中一项是 TensorFlow,那么你就有了明确的能力证明。如果这个证书的唯一作用是让你的简历最初被注意到,那么它是值得的。这甚至可以适用于非常有经验的数据科学家,因为最初在大公司浏览简历的人可能没有重要的领域知识。

那么值得吗?我觉得大多数情况下,是的。如果你能承受这个费用。

很难吗,我需要知道什么?

要了解考试需要哪些知识,最好从考生手册开始。

它在五个主要部分详细说明了你应该知道的主题,甚至将每个部分分解成具体的技能。这五个部分是:

  1. TensorFlow 开发人员技能
  2. 使用 TensorFlow 2.x 构建和训练神经网络模型
  3. 图像分类
  4. 自然语言处理
  5. 时间序列、序列和预测

如果你能仔细阅读这份清单,并勾掉大部分,如果不是所有的要求,那么你应该对考试有好处。如果没有,那么你需要做一些准备工作…

照片由 Siora 摄影在 Unsplash 上拍摄

我们很快就会谈到这一点!

困难

即使你有经验,或者从事数据科学家的工作,你也可能需要为这次考试做一些准备(尽管总有例外!).如果你认为你不准备就能通过这次考试,我想你可能会大吃一惊。

这是因为真的很难吗?没有。但这也不是在公园散步,你需要知道比基本知识更多的东西。

如果你是一名数据科学家,你可能会有一套非常特殊的技能(也许是对象检测/分类?),而且这个测试还涵盖了自然语言处理(NLP)等你可能生疏的内容。所以你可能需要提神。

总而言之,这不是你可以毫无准备就投入进去的事情。如果你对这个主题相对较新,你将需要适当地学习,如果你有经验,你可能需要对一些你可能有一段时间没有使用的领域进行更新。

我该怎么准备?

必需品;要素

在我开始学习我推荐的备考课程之前,我只想提一下,我假设您熟悉 Python 编程语言。这是必不可少的。如果没有,你应该首先学习 Python。

由 David Clode 在 Unsplash 上拍摄的照片

此外,我还建议您在尝试此证书之前熟悉以下内容:

  1. Python 库:pandas,numpy,matplotlib,scikit-learn。
  2. 有些人使用机器学习算法进行练习——这不是必需的,但给你一个坚实的基础,并且通常提供对 scikit-learn 等库的详细介绍,而没有 TensorFlow 的额外复杂性。

课程

有一些很棒的课程可以帮助你,而且根据你的经验水平很容易调整。

我推荐两门课程,这两门课程都旨在帮助您获得认证:

  1. Coursera:深度学习。AI TensorFlow 开发者职业证书
  2. Udemy:2022 年 TensorFlow 开发者证书:零到精通

上面的两个课程在方法上有很大的不同,我会根据你的经验推荐下面几节详细介绍的方法。

就一切情况而论

我将向您推荐我认为最适合您技能水平的资源。然而,我需要首先强调一个特殊的项目:

不管你是使用我建议的课程,还是书籍,还是 YouTube 视频来准备考试。通过自己编码来练习是很重要的。在大多数情况下,仅仅看视频/阅读是不够的。

经验:中级到专家

如果你相当熟悉 TensorFlow 和舒适的构建、测试和调试模型,那么我会推荐你参加 Coursera 的课程。

该课程被列为需要“大约 4 个月完成”,但这不是真的。如果你已经有了这方面的经验,你可以很容易地在几天内完成课程内容。

内容简明扼要,大量解释了为什么要以某种方式做事。您还可以访问编码示例和代码演练。

它涵盖了考试所需的所有主要领域。

还需要注意的是,本课程是 TensorFlow 网站上官方列出的课程。

体验:很少或没有

如果你在 TensorFlow 或机器/深度学习方面的经验非常少,我会建议你从 Udemy 的课程开始。

虽然 Coursera 的课程简明扼要,但 Udemy 的课程要长得多。看完所有的视频需要一段时间,但是如果你坚持下去,你会对这个主题有一个很好的总体理解,而不仅仅是针对考试的高度集中的内容。

该课程以非常以代码为中心的方式教授,教师在整个视频中进行编码。有趣的是,老师在编写代码时会犯错误(很可能是故意的),并教你如何快速解决问题。这些错误通常是初学者所忽略的,所以这是视频的一个非常有用的功能。

然而,如果你有经验,过一会儿你可能会发现这些视频重复和烦人,因此我认为如果你有更多的经验,Coursera 课程是更好的。

我还应该注意到,这门课提供的朱庇特笔记本内容广泛,是非常有用的参考资料。

一旦你完成了 Udemy 课程,我仍然强烈建议你完成 Coursera 课程。它涵盖了一些你在 Udemy 课程中看不到的内容,是一个很好的通用复习工具,可以相对较快地完成。

其他课程

Udacity 也有一个课程,但是我没有看到内容,所以不能评论它是不是一个好课程。或许值得一查。

考试是什么样的?

基础知识:

  • 它是开卷的,所以你可以在整个考试中使用所有你需要的资源
  • 它是定时的(5 小时)。您可以随时完成,但如果过了 5 个小时,测试将自动提交。
  • 你在模型上被测试。模型由你上传,并返回满分为 5 分的分数。在测试过程中,您可以提交任意数量的模型,但每个部分只能提交一个最终模型。
  • 您必须使用特定版本的 TensorFlow 和 Python 在 PyCharm IDE 中进行测试。

照片由比玛·拉赫曼达在 Unsplash 上拍摄

设置

您必须使用特定版本的 PyCharm 来完成测试,然后安装特定的“TensorFlow 测试”模块。该模块创建测试环境,并提供完成和提交测试所需的界面和按钮。

当您“购买”测试时,您将收到一份 pdf,其中详细说明了您需要设置的内容,以及您必须使用的 PyCharm 和 Python 版本,以及它将在环境中安装的软件包。

你可以点击查看最新的环境设置指南。

我强烈推荐在 PyCharm 中建立一个测试环境,使用 Python 的精确版本和指南中详细描述的包。这应该会减轻你在考试中可能遇到的任何潜在问题。这一点很重要,因为测试是定时的(5 小时),所以您不希望在测试时钟运行时浪费时间调试您的环境!

开始测试

一旦你设置好并点击“开始测试”,你将拥有包含完成测试每个部分所需的所有内容的文件夹/文件。关于您需要做什么的说明包含在您将要编写代码的文件中。显然,我不能在这里详细说明,但一旦你在这一点上,你只需阅读说明和去!

分阶段

你是根据你生成的模型来评分的。这些模型使用插件上传(你只需点击一个按钮),然后你提交的模型被测试。在整个测试过程中,您可以提交尽可能多的模型,因此您有足够的机会在整个测试过程中改进您的模型。

当您提交一个模型时,您收到的提交模型的等级为 5。例如,您可能提交了一个模型,结果显示为 3/5。因此,在结束测试之前,你可能想要尝试改进模型以得到 5/5,否则时间就用完了。

在这一点上,我应该指出,我不知道你需要达到什么样的考试分数才能通过考试。我在每个部分都以 5/5 的成绩完成了测试,但这可能是不必要的。我无从得知。

推荐

需要记住的一点是,这是一次开卷考试。在考试过程中,你可以使用任何对你有帮助的资源,所以准备好你认为有用的资源,并且随时可以使用。

如果您的计算机中没有用于测试的 GPU,那么您需要记住,您的一些模型(取决于您在测试中的策略和选择)可能需要一点时间来运行。实际上,5 个小时的测试时间已经考虑到了这一点,而且你需要建立的模型是合理的,所以这不是一个大问题。然而,如果可能的话,使用 GPU 会更好,并节省你一些时间。

如果 GPU 访问不可行,一个好的选择是使用 Google Colab 来运行您的测试,然后在您的最终模型运行时将您的代码转移到 PyCharm。这是完全正确的,甚至在“设置”文档中也有提及:

在考试期间,欢迎您使用 GCP、AWS、Jupyter 笔记本或 Google Colab 来试验训练模型,但您仍需要在 PyCharm 内的考试环境中定义、训练和保存您的模型,以便提交评分

这允许您利用 Colab 环境中提供的免费 GPU,这应该有助于您在微调模型时更快地迭代。

问题

总的来说,测试进行得非常顺利。然而,我确实对我的最终模型有疑问。当我在 PyCharm 中运行模型代码时,它不会保存模型,而是给出一个错误。

由 Unsplash 上 Elisa Ventur 拍摄的照片

最后,我不得不在 Colab 中运行代码,并将模型传输到 PyCharm 进行上传。幸运的是,这样做很好,但是由于 Python 等特定版本的要求。我不能保证这永远有效。因此,在可能的情况下,我会尽量坚持在 PyCharm 环境中运行您的模型。然而,如果您像我一样遇到了技术问题,知道有一个潜在的替代方案是很好的。

我怎么知道我是否通过了?

一旦您提交了您的最终模型的测试,您应该会收到一个确认您完成了测试。

就我而言,在那之后不久,我收到一封电子邮件,说我通过了。完成后大约 5 分钟内。同样,我不能保证这种情况会发生在你身上,但这就是发生在我身上的事。

最后你得到了什么?

证书

你基本上是通过谷歌的合作伙伴服务认证颁发的证书。

通过您的可认证帐户上的界面,您可以做各种事情,如下载证书、创建 Gmail 签名、outlook 签名和各种网页嵌入选项。

证书有效期为 3 年,3 年后:

要在那时更新您的认证,您需要再次完成注册和认证过程。

措辞略显模糊,但我认为这意味着你需要重新做一次检查。

TensorFlow 证书网络

除了实际证书之外,您还被添加到 TensorFlow 证书网络(如果您选择加入)。

这基本上是所有通过 TensorFlow 认证的人的在线可搜索目录。你可以按姓名、国家、经历等进行过滤。因此,对于雇主或潜在客户来说,找到当地的“专家”非常有用。

同样,这可能会也可能不会为你个人增加价值,这是不可能说的,但它仍然是额外的可见性。

结论

总而言之,我认为 TensorFlow 开发者证书是对机器学习/深度学习前景的积极补充。

它催生了大量的在线课程,这些课程旨在让你对主要问题(自然语言处理(NLP)、图像分类、时间序列预测等)有一个广泛的理解。)目前在工业中用于解决大量现实世界的问题。

这为初学者提供了一种结构化的方法,以获得对机器学习/深度学习主题的良好感觉。它还允许更有经验的从业者检查或提升他们的技能。即使是业内经验丰富的老手也可能受益于获得深度学习领域最大的参与者之一谷歌的认证。

无论你是否有经验,如果你遵循我在这篇文章中提出的建议,我相信没有什么可以阻止你将 TensorFlow 开发者证书添加到你的投资组合中。

祝你好运!

如果你觉得这篇文章有趣或有用,记得关注我,或者注册我的简讯获取更多类似的内容。

如果你还没有,你也可以考虑订阅媒体。你的会员费不仅直接支持我,也支持你所阅读的其他作家。你还可以完全不受限制地访问媒体上的每个故事。

使用我的推荐链接注册会给我一点回扣,对你的会员资格没有影响,所以如果你选择这样做,谢谢你。

https://medium/@maclayton/membership

我是如何在英伟达获得一个数据科学家的实习机会的

原文:https://towardsdatascience/how-i-secured-an-internship-at-nvidia-as-a-data-scientist-28f50c009a3d

克里斯蒂安·威迪格在 Unsplash 上拍摄的照片

英伟达是一家为游戏玩家以及深度学习和人工智能目的制造**图形处理器(GPU)**的公司。它最近涉足人工智能领域,正在为无人驾驶汽车、医疗应用和推荐系统构建计算平台。它目前是世界上第八大最有价值的公司,其股票和收入都在稳步增长。

在 NVIDIA实习可能会很艰难,尤其是在毕业期间成为一名数据科学家实习生。一个人必须在这个过程中付出巨大的努力,并且展示出这个行业最需要的技能。确保雇主和招聘人员认可你的才能的最好方法之一是建立有趣的工作组合,展示你的技能和优势。进入英伟达还有其他方法,要么去一所好大学,确保你保持良好的 GPA。

以下是我作为数据科学家在英伟达获得实习机会的一些步骤。

  1. 坚持练习

这是我非常强调的最重要的提示,这就是我如何能够建立一个可靠的项目组合,同时不断学习机器学习所需的最新技能和工具。当一个人坚持不懈地工作时,通常情况下,与一次做完所有事情而不停顿相比,他不需要付出太多的努力。因此,我建议做的一件事是坚持不懈地研究数据科学,比如阅读博客、文章、听视频、构建有趣的项目以及其他许多事情。确保你定期进行所有这些活动,以便通过努力,你学会在该领域取得进展,并对深度学习和数据科学领域的主题和进展建立良好的理解。

罗伯特·鲁杰罗在 Unsplash 拍摄的照片

2。养成阅读他人代码的习惯

虽然练习编程和学习用正确的编程技能单独解决一些复杂的任务是很好的,但应该考虑到阅读别人的代码也有助于你成为更好的程序员,并培养数据科学家实习所需的正确技能。在学会编码并养成每天阅读他人代码的习惯后,你的编码技能将会有显著的提高,你也将能够在许多领域学习和应用你的知识。因此,学习如何编码和阅读他人的代码是明智的,因为这会让你成为一名更好的程序员。

图多尔·巴休在 Unsplash 上的照片

3。建立一个强大的作品集

这是在许多顶尖科技公司获得实习或全职工作的最重要的一步。进入数据科学职位的竞争非常激烈。在统计、数据挖掘、数据分析、数据科学和计算机科学等各个领域攻读硕士学位的人争夺这些职位。更糟糕的是,这些职位通常需要机器学习和数据科学方面的丰富经验。因此,必须做一些工作,让你从竞争中脱颖而出,这可以借助于展示你在该领域的工作和经验的坚实的投资组合。在面试中,展示你的工作并向他们解释,而不是仅仅说你的经历,这总是一个好主意,这样他们也知道你做了大量的工作,他们会愿意给你这份工作。

请随意看看我的作品集,我在里面突出了我在机器学习和数据科学领域的所有技能。下面是链接。

苏哈斯·马达利(苏哈斯·马达利)(github)

你也可以在 GitHub 上关注我,这样你就可以了解我在账户中定期更新的最新变化和提交。

乔安娜·科辛斯卡在 Unsplash 上拍摄的照片

4。浏览在线课程

虽然直观地看,参加在线课程可以增加获得实习的机会,但只有少数人会不断地浏览课程并修改课程,以至于他们可以在面试中解释相同的信息。因此,我建议你可以重温那些你在机器学习和数据科学领域已经学过的课程。之后,你可以重温和修改这些主题,这样你就对这些主题有了一个坚实的概念,你也可以用它来建立一个好的文件夹。

照片由卢卡斯劳在 Unsplash

5。学习所有重要的 ML 和人工智能库

假设您将使用 Python 作为您的机器学习语言,我建议您熟悉这些库,因为它们在大量项目中使用。一些库包括 Seaborn、Pandas、Matplotlib、Numpy 和许多其他库。熟悉这些库可以确保它们可以用于各种深度学习应用。因此,使用 ML 的正确库和工具,人们将能够轻松地执行数据可视化以及数据处理和建模。

照片由龙之介·菊野在 Unsplash 上拍摄

6。在 ML 和数据科学方面有很强的理论基础

由于互联网上有大量用于数据科学的库和工具,很容易认为仅仅学习使用这些库就足以成为一名优秀的机器学习工程师。然而,重要的是要注意,拥有强大的理论基础可以确保尽管用于机器学习的库或方法有所改变,但人们也可以学习实现这些库,而不需要从头开始学习一切。这确保了即使在升级库或者废弃旧库的时候,一个具有良好理论知识的人也可以毫不费力地实现它们。

斯科特·布雷克在 Unsplash 上拍摄的照片

7。开始质疑事物并寻找替代方法

当你阅读传达 ML 概念的文章或博客时,如果你质疑为什么一种特定的方法有效而其他方法却失败了,这将是一个很好的习惯。通过这种方式,你将能够解释在 ML 中工作的事实,并且学习其他方法以及它们对于手头问题的缺点。因此,你倾向于提高你的分析方法,并开始在工艺上变得更好。

照片由 Tamanna Rumee 在 Unsplash 上拍摄

结论

总而言之,这些是我想强调的一些重要提示,它们帮助我在一家享有盛誉、极具价值的公司(NVIDIA)获得了数据科学家实习生的实习机会。这些是我会向那些期待在机器学习和数据科学领域的顶级科技公司工作的人建议的一些步骤。

如果你正在寻找建立一个有趣的作品组合,并且正在寻找最好的 ML 项目,请随意看看我的另一篇文章,在那里我强调了当你通过建立你的网站或使用 GitHub 来建立一个组合时可能会考虑的各种想法。下面是文章的链接。谢谢!

机器学习作品集最佳展示项目|作者:Suhas Maddali | mlearning . ai | Medium

如果你想进一步了解我的工作,下面是我们可以联系的细节,你也可以查看我的工作。

GitHub:https://github/suhasmaddali

领英:https://www.linkedin/in/suhas-maddali/

https://www.facebook/suhas.maddali脸书

我如何在 2022 年将我的 MacBook Pro 设置为 ML 工程师

原文:https://towardsdatascience/how-i-set-up-my-macbook-pro-as-a-ml-engineer-in-2022-88226f08bde2

让您的 MacBook 为 ML 开发做好准备的指南

尼基塔·卡恰诺夫斯基在 Unsplash 上的照片

[ 更新 2022 年 7 月 3 日 :增加了关于 Chrome 扩展的章节
更新 2022 年 7 月 5 日 :增加了 TunnelBlick、黑曜石、矩形和 kubectx/kubens
更新 2022 年 8 月 2 日 :增加了画中画 Chrome 扩展

作为一名工程师,个性化的开发环境对于生产力是绝对必要的。这些是我作为 ML 工程师在设置 MacBook 时所做的事情——请随意挑选你认为可能对你的工作流程有用的内容!

这篇文章的灵感来自 vini cius——请点击这里查看他的文章!

目录

[**MacOS System Preferences**](#1a08)
  - [Remap Caps Lock key to Esc key](#fa4a)
  - [Remove apps from Dock](#7ca4)
  - [Trackpad](#b572)[**Command Line Tools**](#5fe5)
  - [Homebrew](#67e2)
  - [iTerm2](#73ea)
  - [Ohmyzsh + Powerlevel10k theme](#3431)
  - [Ohmyzsh plugins](#9b2b)
  - [Shell aliases](#3122)
  - [Other applications to install using Homebrew](#79e2)[**Python Environment**](#79f0)
  - [pip](#1a05)
  - [conda](#0aff)
  - [pyenv](#8ab2)[**VSCode Setup**](#d925)
  - [Extensions](#dcee)
  - [Ohmyzsh compatibility](#abf7)
  - [Themes, Icons and Fonts/Ligatures](#b0e0)[**3rd Party Apps**](#6f50)
  - [Magnet [Paid] / Rectangle [Free]](#09c1)
  - [Postico](#c335)
  - [Postman](#77f5)
  - [TunnelBlick](#5603)
  - [Others](#8731)[**Accessories**](#5dcc)
  - [MX Master 3S](#4b62)[**Chrome Extensions**](#2ae4)- [Video Speed Controller](#13d8)
  - [Vimium](#f208)
  - [Dark Reader](#73f0)
  - [Authenticator](#3293)
  - [Picture-in-Picture](#1d4f)

MacOS 系统偏好设置

**Caps Lock** 键重新映射到 **Esc key**

我为我安装的每一个键盘都这样做,即使是内置的 MacBook 键盘。要重新映射,请转到**System Preferences > Keyboard > Modifier Keys**。因为 VIM 使用Esc来退出一个模式,把你的手指移到Esc键实在是太没效率了,因此我用Caps Lock代替了它。相信我——这将改变我的一生。

如何将 Caps Lock 键重新映射到 Esc (GIF by Author)

从 dock 中移除所有不必要的应用程序并隐藏起来

来吧伙计们,Spotlight ( **⌘ space**)可以打开你需要的一切。没必要点击你的 dock。这是我的极简 dock 的样子。

我的 MacBook Pro Dock(图片作者提供)

触控板

我的偏好是将我的跟踪速度保持在离最右边(最快的)选择大约 2 个标记处。您可以从**System Preferences > TrackPad > Point & Click**调整这些设置。

我的跟踪速度设置(图片由作者提供)

命令行工具

自制

我不能强调获得 MacOS 的这个包管理器有多重要。它管理(安装、更新、删除)你需要的所有苹果没有为你预装的软件包。

要安装它,打开终端并运行:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent/Homebrew/install/master/install.sh)"

安装后,您现在可以使用brew install <pkg_name>安装软件包。要升级软件包,使用brew upgrade <pkg_name>,最后要删除软件包,使用brew uninstall <pkg_name>

我们将使用brew来安装下面的一些包。

iTerm2

Vinicius 在他的文章中提到 iTerm2 是 Mac 内置终端的可选替代品。老实说,对我来说这是强制性的替换。查看不同之处:

左:终端;右图:iTerm2(作者图片)

我不知道你怎么想,但是右手边的终端看起来更性感,更不用说它的使用了。

要安装,在终端中运行以下程序:

brew install --cask iterm2

从此以后, iTerm2 将永远取代终端应用。向终点站告别。

你一定在想——“嘿,我已经安装了 iTerm2,但它没有你的性感,大卫。”别担心,我的孩子,这是你接下来要安装的。

哦我的 Zsh+power level 10k主题

哦我的 zsh 有 147k 颗星是有原因的。这对任何开发者来说都是绝对必要的,因为它包含数百个插件和主题来配置你的 zsh。

要安装 oh my zsh,请在 iTerm2 中运行以下命令:

sh -c "$(curl -fsSL https://raw.githubusercontent/ohmyzsh/ohmyzsh/master/tools/install.sh)"

接下来,安装 powerlevel10k 主题。(是的,我知道有很多主题,但我非常非常非常推荐这一个!)在你的终端上使用漂亮的字体和图标,非常容易设置,非常性感。

“p10k 配置”后我的 iTerm2 外壳

为了安装它,我们将再次使用brew(git repo 上列出了许多其他安装选项):

brew install romkatv/powerlevel10k/powerlevel10k
echo "source $(brew --prefix)/opt/powerlevel10k/powerlevel10k.zsh-theme" >>~/.zshrc

要配置 p10k 以实现上述效果,请在 iTerm2 中运行以下命令,并按照安装向导进行定制:

p10k configure

哦,我的 Zsh 插件

oh my zsh 的强大之处在于所有可以添加到 shell 体验中的插件。以下是我最少安装的内容:

**zsh-autosuggestions** —我们每天在命令行上发布数百条命令。这个插件有助于自动建议您以前使用过的命令,您可以使用→键接受建议。当您不记得一个确切的命令或者您有一个想要修改的长命令时,这特别有用。要安装:

git clone https://github/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions

**zsh-syntax-highlighting** —这个插件给你输入的命令添加色彩。使用以下方式安装,告别枯燥的白色文本:

git clone https://github/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

安装自定义插件后,我们可以通过将其添加到$HOME/.zshrc中要加载的插件列表来启用它们:

在 zshrc 中修改插件(GIF 由作者提供)

:自定义插件安装在 *$HOME/.oh-my-zsh/custom/plugins*

外壳别名

为了加快终端上的命令,我们总是需要别名。它减少了击键次数,提高了开发人员的效率。对我来说,我在$HOME/.local/include中写下我所有的别名,并在$HOME/.zshrc中包含这个片段。

# .zshrc
for file in $HOME/.local/include/*;
  do source $file
done

在文件夹$HOME/.local/include中,您可以在别名中包含 shell 脚本。举个例子:

# File: my_aliases.sh# Apple system related
alias turnonbt='blueutil --power 1'
alias turnoffbt='blueutil --power 0'
alias turnoffsleep='sudo pmset -a sleep 0; sudo pmset -a hibernatemode 0; sudo pmset -a disablesleep 1'
alias turnonsleep='sudo pmset -a sleep 1; sudo pmset -a hibernatemode 3; sudo pmset -a disablesleep 0'# Git
alias gpom='git pull origin master'
alias gmo='git merge origin'
alias gc='git checkout'
alias gs='git status'
alias gcm='git commit -m'
alias ga='git add'
alias gb='git branch'
alias gf='git fetch'
alias gp='git pull'
alias gr='git restore'
alias push='git push origin'
alias pull='git pull origin'
alias stash='git stash'
alias sapply='git stash apply'# Docker
alias di='docker images list'
alias dcp='docker container prune -f'
alias di='docker images'
alias dpa='docker ps -a'
alias dp='docker pull'
alias drf='docker rmi -f'
alias dsp='docker system prune -f'# Other examples
alias tf='terraform'
alias kcl='kubectl'
...

奖金:如何在不连接电源适配器的情况下,在屏幕盖关闭的情况下将 MacBook 连接到外部显示器:

我不知道你们是否尝试过在没有电源适配器的情况下将闭合的笔记本电脑连接到外部设备,但我确实尝试过。这个命令是真正的救命稻草:

sudo pmset -a sleep 0; sudo pmset -a hibernatemode 0; sudo pmset -a disablesleep 1

这里的诀窍是禁用睡眠。这样做会模糊睡眠笔记本电脑的选项,允许您关闭笔记本电脑并将其连接到外部显示器:

为了让您的生活更简单,让我们将它变成一个别名,以便在您需要时禁用和启用它:

# to disable sleep
alias turnoffsleep='sudo pmset -a sleep 0; sudo pmset -a hibernatemode 0; sudo pmset -a disablesleep 1'# to enable sleep
alias turnonsleep='sudo pmset -a sleep 1; sudo pmset -a hibernatemode 3; sudo pmset -a disablesleep 0'

使用自制软件安装的其他应用程序

  • Docker : brew install --cask docker(苹果硅 MAC 请从这里下载)
  • Git : brew install git
  • 库贝克 : brew install kubectl
  • kube txx&kubens:brew install kubectx
    一款超级好用的工具,你绝对应该和kubectl一起手动安装。kubectx允许您轻松管理 K8s 上下文,而kubens对您的名称空间做同样的事情。
# Get current context and lists all contexts
**kubectx**# Switch context
**kubectx <context_name>**# Switch back to previous context
**kubectx -**# For namespaces, simply replace `kubectx` with `kubens`
  • VScode : brew install --cask visual-studio-code。现在可以使用code <dir>从命令行打开 VSCode。例如,要打开当前目录中的 VSCode,使用code .
  • 这个漂亮的工具可以帮助你通过命令行界面管理你的蓝牙系统!如果你像我一样想通过键盘做任何事情,你肯定需要这个。
  • 这是一个交互式进程查看器,允许您查看系统上正在运行的进程。它显示你的 PID,内存,cpu 的使用和更多!

htop 窗口(作者截图)

Python 环境

pip (Python 的包管理器)应该已经安装在你的系统上了。要更新它:

pip install -U pip

康达

我也喜欢安装conda,因为其他一些项目使用conda来管理依赖关系。要安装,去它的官方网站这里,因为它包含了英特尔和苹果硅 MAC 的不同版本。

Pyenv

由于我们不想使用系统内置的 Python2,我通常会安装另一个 Python 环境管理器,比如pyenv。但是要小心,因为安装多个这样的程序会试图修改你的$PATH变量。

brew update
brew install pyenv

如果你不确定,一定要检查你正在使用的 Python 解释器。

which python

要安装特定版本的 Python,请使用:

pyenv install <py_version>
pyenv global <py_version>  # set global version

VSCode 设置

扩展ˌ扩张

以下是我在日常工作中必须安装的扩展的非详尽列表:

  • Docker[ms-azure tools . vs code-Docker]
  • git lens[eamodio . git lens]
  • 金贾
  • Jupyter
  • Kubernetes[ms-Kubernetes-tools . vs code-Kubernetes-tools]
  • 皮兰斯[ms-python . vs code-皮兰斯 ]
  • 远程-ssh[ms-vs code-Remote . Remote-ssh]
  • 远程容器[ms-vs code-Remote . Remote-containers]
  • 迅雷客户端[rangav . vs code-迅雷客户端 ]
  • VIM[vscodevim . VIM
  • YAML[red hat . vs code-YAML]
  • hashi corp terra form[4 ops . terra form
  • autoDocstring — Python 文档字符串生成器[njpwerner . autoDocstring]

与 Oh My Zsh 的兼容性

因为我们使用 zsh 作为默认 shell,所以我们必须对设置进行一些更改,以便在 VSCode 终端上查看字体和图标。

打开文件→首选项→设置 (PC)或代码→首选项→设置 (Mac),在设置选项卡顶部的搜索框中输入terminal.integrated.fontFamily,将下面的值设置为MesloLGS NF【3】。见下面的 GIF 快速指南。

如何修改 VSCode 字体设置(GIF by Author)

主题、图标、字体/连字

  • 一暗亲[ 庄同发. material-theme ]
  • 素材主题[equinuscio . VSC-material-Theme——我用这个!
  • 材质主题图标[equinuscio . VSC-material-Theme-Icons我用这个!
  • Fira 代码字体(附带连字!)作为编辑器字体系列。看看下面是什么样子:

Fira 代码字体(及其连字)的外观(作者提供的 GIF)

要安装 Fira 代码,请运行以下命令:

brew tap homebrew/cask-fonts
brew install --cask font-fira-code

之后,通过以下方式在 VSCode 上启用该字体:

  1. 启用连字—将 settings.json 中的editor.fontLigatures修改为true
  2. editor.fontFamily修改为Fira Code

如何把字体改成 Fira 码(作者 GIF)

第三方应用

磁铁【付费】 / 长方形【免费】

你在苹果电脑上唯一需要的付费应用,它改变了你的生活。它只是简单地将窗口固定到位。是的, Windows 有这个功能是免费的但是嘿,我们是苹果用户。必须支付保险费。

编辑 :我被告知事实上有一个等价的免费应用叫做 Rectangle!这里下载。

现在,让我们看看它是如何工作的。

行动中的磁铁(作者 GIF)

波斯蒂科

我的 PostgreSQL 数据库客户端。在这里安装。

隧道步行者

这是 OpenVPN 的必备 VPN 连接器,免费且易于使用。它很神奇,因为它允许你同时连接到多个 VPN。

邮递员

除了 Thunder 客户端(作为 VSCode 扩展安装在上面),我的另一个客户端用于 API 测试。在这里安装它并选择你的 Mac 版本。

其他人

  • WhatsApp
  • 电报
  • 不和谐
  • 松弛
  • 键盘手
  • 观念——我的知识库,在这里我巩固我所学的一切(已过时,见下文)
  • 黑曜石——如果你没有读过,我最近刚刚把我的生活切换到这个神奇的笔记工具。

配件

MX 大师 3S

我平时根本不做硬件推广,但是我用了 MX 主鼠系列大概 5 年了(没错,我用 2S 用了那么久!)这绝对改变了生活,尤其是如果你有一台苹果电脑的话。

如果有一个硬件你必须得到伴随你的 Mac,它必须是这个。

三个手指滑动——左/右,四个手指滑动,两个手指滚动和其他触控板手势——这太麻烦了,尤其是当你的 MacBook 连接到显示器并使用外部键盘/鼠标时。

Marios Gkortsilas 在 Unsplash 拍摄的 MX Master 系列照片

使用 MX Master,可以将所有 Mac 手势分配给鼠标。以下是我如何定制我的:

  1. 使用后退和前进按钮在桌面窗口之间切换
  2. 使用手势按钮刷走现有窗口
  3. 连接到多台机器/设备以传输文件(光标也从一台机器移动到另一台机器!又名

当然,还有其他超级时尚的功能,包括自由旋转滚动和逐行滚动之间的无障碍切换,几乎可以在所有表面上工作,水平滚动等等。

我肯定会期待从 MX Master 2S 升级到 MX Master 3S 。

Chrome 扩展

视频速度控制器

作为工程师(也是为了休闲🙂),看视频能让我们快速学习。这个扩展允许你使用键盘控制视频在浏览器(包括 YouTube)上播放的速度。

d:视频加速 0.1
s:视频减速 0.1

Vimium

对于 Vim n3rds 伙伴来说,这是必备的。请注意,在某些网页上(例如 Google Docs),您可能需要禁用此扩展,方法是将其添加到排除列表中。

黑暗阅读器

这个扩展允许你把任何网页变成黑暗模式。谁不喜欢黑暗模式是吧?

认证者

在浏览器上方便地访问您的验证器应用程序上的代码。

画中画

如果你像我一样喜欢通过 YouTube 学习东西,或者只是喜欢狂看 YouTube 视频,那么你现在可以在多任务处理的同时这样做了!画中画创建了一个无干扰的浮动 YouTube 窗口,你可以自由移动。再见了,YouTube 视频的尴尬的单标签窗口。

写这篇文章时我是如何观看 YouTube 视频的例子:)(图片由作者提供)

最后的话

安装新的 MacBook 时,有哪些必须做的事情?请在评论中告诉我!

大声喊出来莱米·卡里姆回顾并分享了他的一些技巧和诀窍!

支持我! —如果你喜欢我的内容并且没有订阅 Medium,请考虑支持我并通过我在这里的推荐链接订阅 ( 注意:你的一部分会员费将作为推荐费分摊给我)。否则,留下一个👏🏻鼓掌或💬注释也有助于算法!

参考

[1] Sourabh Bajaj — Mac 设置
【2】如何在 2021 年为 Web 开发设置您的 Mac—
vini cius De Antoni
【3】power level 10k GitHub 安装指南

我如何为编程和数据科学设置我的新 Macbook Pro

原文:https://towardsdatascience/how-i-set-up-my-new-macbook-pro-for-programming-and-data-science-505c69d2142

艾通过作者创造艺术。 见上图 NFT 彼得·赫尔曼

目录

  • 简介
  • 软件安装一个为什么
  • 矩形—排列窗口
  • iTerm 和 zsh —终端和外壳
  • Brew —安装包
  • VS 代码
  • oh-my-zsh->zsh 的插件
  • 数据科学相关
  • Github
  • 其他
  • 操作系统相关
  • 总结
  • 免责声明
  • 关于

介绍

每次我拿到一台新的 Macbook,我都会按照相同的步骤来设置它,以适应我的工作体验。我想我会收集我的想法,并展示我安装的应用程序,以充分利用我的工作设置。我用的是 Macbook Pro。你也可以使用一些关于 Windows 安装的技巧和想法,但是,我主要关注 Mac。原因是我用过这两种系统,我发现 Mac 总是更容易使用。

要安装的软件及其原因

矩形->排列窗口

首先,我将安装矩形

来自官方文件;作者截图

这样做的原因是用快捷键重新安排窗口大小。我使用哪种桌面设置并不重要。多显示器、扩展坞等。我总是需要排列窗口的快捷方式。在当前虚拟桌面中,将它们放在一边、居中或最大化。

安装后,只需在安全和隐私设置中添加它的可访问性。然后就可以用了。

iTerm 和 zsh ->终端和外壳

iTerm ->更好的终端

iTerm2 — macOS 终端更换

来自官方文件;作者截图

iTerm 基本上是一个具有可配置选项的更好的终端。在他们的官方文档中可以找到一个特性列表:https://iterm2/features.html

然后,我更改了一些设置:

  1. 在 General > Closing:我删除了结束 iTerm 的确认。它总是阻止重启,我没有任何确认保存任何东西的用例。
  2. 在 Appearance > Panes 中:我将边距值都改为 60。这使得一切更具可读性。
  3. 在 Profiles > General 中:我创建了自己的配置文件,并将工作目录改为“重用以前会话的目录,以避免总是从主目录开始。
  4. 在配置文件>颜色:我改变背景颜色为深蓝色
  5. 在配置文件>窗口:我添加透明度和模糊
  6. 在 Profiles > Keys > Key Mappings:我用预置的“自然文本编辑”替换了标准的,以便像使用其他编辑器一样使用命令和控制键

请随意探索更多选项!

zsh ->更好的外壳

https://ohmyz . sh;来自官方文件;作者截图

你可以在这里找到插件的概述:https://github/ohmyzsh/ohmyzsh/wiki/Plugins-Overview

请遵循官方指南进行安装。只需在你的终端输入$ sh -c "$(curl -fsSL https://raw.github/ohmyzsh/ohmyzsh/master/tools/install.sh)"

暂时就这样了。

自制->安装包

Homebrew 是“macOS(或 Linux)缺失的软件包管理器。”

只需按照他们的安装指南将/bin/bash -c "$(curl -fsSL https://raw.githubusercontent/Homebrew/install/HEAD/install.sh)"粘贴到终端上

之后,确保也执行终端提到的两个命令,即echo 'eval ....eval " ...,它们将 bin 导出到您的路径中。你将需要这个来通过终端执行brew命令。

VS 代码->神奇的编辑器

来自官方博客:https://code.visualstudio/blogs/2021/10/20/vscode-dev,来自官方文档;作者截图

我总是选择使用 VS 代码作为我的轻量级编辑器。它有如此多的选项可以定制,其基本形式是处理代码的最佳环境之一。

它可以通过多个(开源)扩展进行定制和供电:2017 年我写了一篇关于我最喜欢的扩展的文章。也可以随意查看->https://medium . com/free-code-camp/favorite-vs-code-extensions-2017-786 ea 235812 f

我也使用 Pycharm 开发我的大部分代码,但是我仍然使用 VS 代码作为我的选择。有时候我只想改变几个文件,而不需要整个 Pycharm 初始化。那就是我用 VS 代码的时候。也适用于减价写作。就像我写文章一样。

下载 VSCode 并放入 Applications 文件夹后,用快捷键⇧⌘P打开命令面板,选择"Install 'code' command in PATH"。这样,你只需在你的终端上输入修复前的代码就可以打开文件。我们将在下一步中使用它。

哦,我的-zsh-> zsh 插件

https://ohmyz.sh/,来自公文;作者截图

终端的主题

有多个主题可以选择:https://github/ohmyzsh/ohmyzsh/wiki/Themes

我总是用 robbyrussell

来自官方文件;作者截图

它简单明了,给了我处理代码时需要的所有信息。这是默认设置。但是,如果你想改变它或查看文件,请按照说明操作。

为了设置主题,我参考了以下文档:

要启用主题,请在~/中将 ZSH 主题设置为主题名称。zshrc,之前采购哦我的 Zsh 例如:ZSH _ 主题=robbyrussell 如果你不想启用任何主题,只需将 ZSH _ 主题设置为空白:ZSH _ 主题= " "因此我只需键入代码~/。用 vs 代码打开我的 zsh 配置文件。

之后重启 iTerm 重新加载你的主题,它应该看起来像截图中的样子:

来自官方文件;作者截图

终端的语法突出显示

这个包为 shell zsh 提供了语法高亮。当命令在 zsh 提示符下输入到交互式终端时,它可以突出显示命令。这有助于在运行命令之前检查它们,尤其是在捕捉语法错误方面。

来自官方文件;作者截图

安装它只需遵循安装指南:zsh-syntax-highlighting/install . MD

我们通过从下载zsh-syntax-highlighting来做到这一点

git clone https://github/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

并将其添加到.zshrc file的插件列表中。

重启 iTerm 或者打开一个新的会话,你就可以开始了。

终端的自动完成

https://github/marlonrichert/zsh-autocomplete,来自公文;作者截图

它会根据历史记录和完成情况,在您键入命令时给出建议。

同样,安装时,只需遵循他们文档中的说明:https://github . com/zsh-users/zsh-auto suggestions/blob/master/install . MD

git clone https://github/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

并将它添加到您的.zshrc 文件的插件部分。

重启 iTerm 或者打开一个新的会话,你就可以开始了。

数据科学相关

蟒蛇

->www.anaconda

这种安装的主要原因是它的包管理系统。对于大多数事情和概念验证来说,这是为您的数据科学相关工作创建合适环境的良好开端。特别是用不同的 python 版本来管理它可以成为救命稻草。我尝试了多种其他方法,直到现在,Anaconda 仍然是管理环境/包最轻松的方法。

您只需下载所需操作系统的版本,并附带安装包。

(舞台上由人扮的)静态画面

当我的团队使用 Tableau 并且购买了桌面许可时,我安装了 Tableau 桌面版来完成我的大部分 Tableau 工作簿。这是因为直到今天撰写本文时,Tableau Server 仍然缺少一些处理大型商业智能分析的关键功能。在我看来,桌面版本价格昂贵。然而,这是一个好产品。

数据科学工作的 Pycharm

来自官方文件;作者截图

查看他们的官方主页,浏览为什么它很适合你的需求:https://www.jetbrains/pycharm/

JetBrains 使用 Pycharm 的原因是,在我的整个工作经历中,它向我展示了这是处理大型数据科学项目的最佳一体化解决方案。即使您可以定制用于大型项目的 VS 代码,我认为 Pycharm 仍然比其他的有优势。

用于连接数据库和处理查询的 Datagrip 扩展非常好用,让我的生活变得更加轻松。

从调试、构建项目、执行代码等等。,得到你目前能得到的最佳体验。它不仅处理数据库部分,还允许 web 开发集成和其他东西,如 Jupyter 笔记本。我仍然使用 Jupyter notebook 来获得详细的探索代码(查看我在 Juypter notebooks 上的文章),但总的来说,这是我的首选软件,也是我的程序员笔记本电脑上的必备软件。

开源代码库

为了使用 Github,安装 Github CLI 是非常好的。

遵循他们文件上的说明。通过简单地执行brew install gh用自制软件安装它

在克隆存储库之前,您需要设置身份验证。

这是通过gh auth login完成的。只需遵循所有说明。然后你可以直接用

gh repo clone REPO_NAME

其他的

微软办公

使用微软 office 的主要原因是 Excel。许多公司都经常使用 Excel,但就功能而言,它仍然是无可匹敌的。由于客户经常发送带有各种功能的 excel 表格,我也需要使用 Excel。更多关于它的官方文件:https://www.microsoft/en/microsoft-365

操作系统相关

夜班

几年前,我用各种软件帮助我减少电脑屏幕上的蓝光。现在你可以很容易地使用 macOS nigh shift 功能。

点击这里了解:【https://support.apple/en-us/HT2

本质上,它让你的屏幕在夜间更“橙色”。原因是研究表明蓝光会妨碍良好的睡眠。随着许多程序员工作到深夜,这对我来说是一个游戏规则的改变。这对我帮助很大。这就是为什么我总是把它设置成暖色调。对于一个设计师来说,这是行不通的,但是对于一个程序员来说,这不是问题。只需注意更强烈的橙色调。

码头

当你得到一台新的 Mac 电脑时,你会发现屏幕底部有一个 Dock,里面有很多垃圾应用程序。所以,我做的是

  • 去掉所有不必要的东西。除了经常使用的应用程序,我什么都不用。比如 pycharm,iterm,chrome,finder。就是这样。由于 spotlight 功能是在 mac 上推出的,因此不需要在 Dock 中放置任何应用程序。它们只会让景色变得杂乱
  • 将 Dock 移动到右侧。现代的屏幕总是比高的长。我们不想因为这个停靠栏自动隐藏停靠栏而失去更多的高度空间。正如我所说,我们不想失去屏幕尺寸。

包裹

就是这样。这是我开始在工作中使用的每一台 Macbook 的设置。除了这些变化,当然还有各种特定软件的设置变化,但这些将在另一篇文章中讨论。如果你喜欢这篇文章,请留下一些掌声,如果你有任何意见,请发表评论。

你可能喜欢的其他文章

放弃

我与本文中使用的任何服务都没有关联。

我不认为自己是专家。除了做其他事情,我只是记录事情。因此,内容并不代表我的任何专业工作的质量,也不完全反映我对事物的看法。如果你觉得我错过了重要的步骤或者忽略了什么,可以考虑在评论区指出来或者联系我。

这是 2022 年 2 月 23 日写的。我无法监控我的所有文章。当你阅读这篇文章时,提示很可能已经过时,过程已经改变。

我总是乐于听取建设性的意见以及如何改进。

关于

丹尼尔是一名艺术家、企业家、软件开发人员和商业法毕业生。他的知识和兴趣目前围绕着编程机器学习应用程序及其所有相关方面。从本质上说,他认为自己是复杂环境的问题解决者,这在他的各种项目中都有所体现。

连接到:

  • Allmylinks

直接:

  • 领英
  • Github
  • 中等
  • 推特
  • Instagram
  • createdd

艺术相关:

  • 公海
  • Instagram/art_and_ai
  • 稀有
  • 已知产地
  • 中等/最先进的
  • 魔鬼艺术

我如何使用米托加速我的数据分析过程

原文:https://towardsdatascience/how-i-sped-up-my-data-analytics-process-using-mito-f3a2a80e0bc8

数据分析| PYTHON |编程

使用这个了不起的 Python 包,用更少的时间做更多的事情

马修·施瓦茨在 Unsplash 上的照片

作为数据专业人员,我们每天都要花费大量精力处理数据,并提供关键见解。数据分析过程极其耗时且详尽,但同时,它也是整个实验的基础。但是我们如何改进这个过程呢?

进入米托,这是我最近发现的新开发的 Python 工具,它将我们的分析过程提升到了一个新的水平。米托是一个免费使用的软件包,它消除了所有复杂的数据处理,并把它们塞进一个易于使用的界面。最棒的是。它会根据您的操作自动生成相应的 Python 代码!

那么,让我们一起跳进水里去探索米托,好吗?

https://docs.trymito.io/

安装米托

首先,安装米托。米托集成在 Jupyter 实验室环境中。要开始使用它,我们首先必须通过 pip 安装米托软件包,如下所示:

python -m pip install mitoinstaller

其次是,

python -m mitoinstaller install

一旦安装过程完成,Jupyter 实验室标签将自动为您打开,我们可以开始玩米托。

将数据输入米托

在整篇文章中,我将使用来自Kaggle 知识库的新冠肺炎临床试验数据集。

在启动时,我们被要求登录(免费),然后迎接我们的是以下代码块:

# Run this cell to render a mitosheet
# See mito's documentation here: [https://docs.trymito.io/how-to/creating-a-mitosheet](https://docs.trymito.io/how-to/creating-a-mitosheet)
# Join our Discord for support here: [https://discord.gg/XdJSZyejJU](https://discord.gg/XdJSZyejJU)import mitosheet
mitosheet.sheet()

米托通过电子表格工作。那么,我们如何导入数据集呢?

选项 1: Pandas 整合

我们可以将熊猫数据帧直接传递给工作表对象。

df = <<SOME DATAFRAME>>import mitosheet
mitosheet.sheet(df)

从熊猫数据框创建米托表—作者图片

选项 2:导入功能

米托提供了一个打开文件查找器的 UI 按钮,允许我们直接导入任何本地存储的数据集。

从导入功能创建米托表单—按作者排序的图像

和米托一起玩耍

因此,我们只是将数据集加载到米托工作表中。现在怎么办?

米托的力量来自其敏捷的思维。米托使我们能够快速执行数据操作,如任何数据处理任务和数据可视化。这些操作都是通过它的电子表格 UX 处理的。然而,通过 UI 处理的每一个操作都会在下面的单元格中自动生成 Python 代码。

因此,米托允许我们快速分析和研究我们的数据集,但也为我们提供了相应的代码来扩展我们的实验。

米托提供的一些基本操作包括:

  1. 添加新列
  2. 删除一列
  3. 重新排序栏目
  4. 过滤列值
  5. 删除重复项

我们可以快速处理我们的数据。对于电子表格中的每一列,我们能够进行过滤和排序,还可以查看值的汇总。

汇总统计—按作者分类的图像

米托还允许我们在电子表格中直接使用 Excel 函数。例如,让我们创建另一个列,将男性的性别值替换为 1。我们可以通过以下方式简单地做到这一点:

=SUBSTITUTE(Gender, "Male", 1)

Excel 函数-作者图片

Excel 函数结果-作者图片

我们甚至可以与另一个数据集合并,或者从现有的数据集创建一个数据透视表。

让我们举一个简单的例子。让我们将数据集转换成一个数据透视表,以了解每个性别每个状态的研究结果。为此,我们只需点击旋转按钮,并设置我们想要的结果。

数据透视表示例—作者图片

我们可以很快观察到我们的结果有 3 行 13 列(从工作表的右下角开始)。我们还可以调整我们希望对我们的值使用哪种聚合—在本例中,我选择了计数。对于我们选择作为转换一部分的每个选项,米托都在后台生成相应的 Python 代码,并在下一个单元格中显示。米托为上述透视转换生成了以下 Python 代码:

我喜欢的米托的另一个令人敬畏的特征是动态视觉化。让我们快速绘制一个性别与 covid 相关干预的柱状图。

条形图示例—作者提供的图像

目前,米托允许我们将数据可视化为条形图、柱状图、散点图或箱线图。

再一次,我们在一瞬间就有了这种分裂:

所以,让我们通过一系列的步骤来想象米托到底有多强大。

在本例中,我进行了以下操作:

  • 在位置 4 创建了一个新的空列
  • 删除了新创建的列
  • 透视数据以显示每个性别的状态计数
  • 丢弃任何重复项
  • 创建了状态计数的下图
  • 将原始表与数据透视表合并

状态计数示例的箱线图—按作者分类的图像

这个过程花了我最多 30 秒的时间来完成——没有写一行代码!米托提供了以下代码:

所有步骤后的结果—作者提供的图片

米托还列出了整个过程中采取的步骤。

步骤历史-按作者分类的图像

缺失功能

米托肯定不是完美的,在我玩这个工具的整个过程中,我确实注意到了一些限制,如果有这些限制会很酷。例如,我发现在不同列之间执行计算分析的过程,比如计算 z 值,是不必要的复杂。

另一个我认为应该成为这个工具一部分的特性是执行 python 代码的能力。没错,米托的全部意义在于消除实际编写代码的开销;然而,在许多情况下,能够访问其他 Python 包是可取的。每当我想在同一个列上执行多个聚合时,情况尤其如此。在这种情况下,Excel 功能的相似性并不能解决问题。

不管它是什么,米托绝对是一个神奇的工具,可以快速检验我们的假设,并对我们正在处理的事情有所了解。我将米托作为我最初数据调查的一部分,并立即感受到分析时间的重大影响。米托的 Github 可以在这里找到。

你喜欢这篇文章吗?如果是的话,也许你可以考虑成为会员来支持我和你其他喜欢的作家。

https://david-farrugia.medium/membership

想给我买杯咖啡吗?

https://paypal.me/itsdavidfarrugia?country.x=MT&locale.x=en_US

想联系吗?

我很想听听你对这个话题的想法,或者任何关于数据和人工智能的东西。如果你想联系我,请给我发电子邮件至 davidfarrugia53@gmail*。*

Linkedin — Twitter

我如何开始写数据科学博客:克服恐惧和拖延

原文:https://towardsdatascience/how-i-started-writing-data-science-blog-posts-overcoming-fear-and-procrastination-148a095c7c94

坦白地说,我不是一个成功的作家——甚至也不是一个特别成功的博客作者——所以如果你打算靠写文章谋生,这可能不适合你。然而,如果你是一个忙碌的数据科学家、机器学习工程师或软件工程师,有一段时间一直想开始写博客,但一直没有时间,希望这能帮助你开始。

在我本科学位的最后一年,我清楚地记得我的导师对我说了这样的话:

“虽然我很虚伪,但我认为你能做的最好的事情之一就是开一个博客。不幸的是,我自己从来没有做过,但我希望我做过”

我回应道:

“我很乐意,但我想我没有什么可写的”。

毕竟,有人知道的比我多得多,而且谁有兴趣听我说呢?

这种态度一直伴随着我,并阻止我这样做,直到许多年后,我从我的同事那里听到了同样或类似的说法。最近,在不止一个场合,这之后是一个关于我是如何开始的,以及我如何找到要写的东西的对话。

这篇文章的目的是详细描述我克服这种心态的思维过程和实践,希望它能引起处于类似位置的其他人的共鸣。如果你以前读过我写的任何东西,这是完全不同的。这完全是主观的,你可能不同意它的全部或任何部分。希望它对你有用,但可能不是对每个人都有用。

照片由 Unsplash 拍摄

寻找可以写的东西

让我们从最大的障碍开始,找到一个合适的话题来写。尽管从大学到整个职业生涯,我每天都在处理具有挑战性的问题,但我为此挣扎了很长时间。我用过的最大的借口之一,甚至在某种程度上仍然如此,就是它需要有突破性和原创性。在我目前的角色中,我与许多不同的客户合作,在进入下一个项目之前,一次做一个项目,即使在这些情况下,由于客户的保密问题和竞争优势,我们通常也不允许公开写下这样的披露!

从我记事起,我就留出特定的时间来研究和学习我感兴趣的科目——数学、机器学习、编程语言,甚至阅读历史书。通常,我会记录我对这些领域的探索和思考,如果我觉得它可能对我有用,我会把它作为参考。有几次,当朋友或同事评论说他们有兴趣探讨其中的一个话题时,我会与他们分享这些笔记。

让我大开眼界的时刻是,在分享了一份我用来主持客户设想会议的指南后,一位同事对我说,我应该把它发表在某个地方。在这一点上,我意识到——尽管以前尝试坐下来从头开始写博客失败了——在这些情况下,我已经完成了大部分工作,除了最后的发布。因为我早就打算开始写作了,所以我给自己设定了一个挑战。每次我花大量的时间在工作或学习新的东西时,我都会把它变成一篇博文。老实说,大部分都没有出版——也许我仍然是一个苛刻的批评家——但偶尔,它会很好地工作。

对我来说,一篇好的博客文章能节省我的时间**。**这不一定是什么原创,可以是我一直想读的一篇论文或一本书的总结。它可能是我以前读过的东西的展示,但以稍微不同的方式展示或解释,所以它只是“点击”;这方面的一个很好的例子是杰伊·阿拉玛的《变形金刚》。或者,它可以是一个解释清楚的教程,引导我解决一个问题,这样我就不用自己花时间去解决它。

当你觉得自己在奋斗了一段时间后真正完成了某件事情时——无论是在你使用多年的编程语言中找到一个让你震惊的新功能,在花了几个小时阅读一篇研究论文后终于理解了它,还是在彻底剖析源代码后终于使用一个文档有限的库完成了一项任务——这都可能是一篇博文的绝佳候选对象。你将为别人节省你自己获取知识所花费的时间。我建议问问你自己:这是不是对其他人有用的东西,否则他们会花时间去学习?如果你只是按照现有的教程学习,答案可能是否定的。但是,如果你花了几个小时阅读了大量冗长的文档,并将其汇总成一个简短的演示,那绝对是!

我发现完成一篇博文的最佳时间是尽可能接近这种成就感的时候;在最初的兴奋消退后,很难找到回头做某事的动力。

我为谁写作?

我从非常成功的博主那里听到的一件重要的事情是彻底了解和研究你的读者;你应该一直记在心里,尽全力去满足他们。总的来说,我认为这是一个很好的建议。然而,我认为,对于刚刚入门的人来说,你应该完全忽略这一点。

照片由乔纳斯·雅各布森在 Unsplash 上拍摄

我面临的主要精神障碍之一是持续的想法:谁想听我说?我不认为自己是任何特定主题的权威,因为我的兴趣非常广泛,我不认为我与数据科学社区的任何特定子集有强烈的一致性。简而言之,我不知道谁是我的目标受众,这阻止了我开始行动。

使我能够克服这个障碍的是写博客时只考虑一个受众——我自己。更具体地说,我是几周前的自己,在我花时间研究我正在写的东西之前;我是几周后的自己,那时我已经有足够的时间去忘记那些更好的细节。

现在,当我开始着手一项我觉得可能是一个很好的候选人的任务时,我会问自己以下问题:*如果现在有一篇关于这个主题的博客帖子在我面前,我会想知道什么?*这个思考过程有助于我确定自己的目标,并关注我应该探索的领域。

完成探索后,我问自己另一个问题:*如果我需要在未来的某个时候再次做同样的任务,我需要记住哪些细节?*这有助于我确保我包含了做出某些决定背后的所有理由,并概述了任何需要的背景。

如果你不再担心你在为谁写作,而是专注于发布你自己觉得有用的内容,你永远不知道——你的读者可能会找到你。

如果没人看我的帖子怎么办?

我担心的另一个问题是,如果我花时间创作内容,但是没有人阅读,我会有什么感觉;那不就意味着我花的时间浪费了吗?

照片由诺亚·西利曼在 Unsplash 上拍摄

当与他人一起工作时,尤其是与初级团队成员一起工作时,我们经常会发现自己处于这样一种情况,即我们被要求向他人解释我们有经验的事情;这是团队合作的自然组成部分。如果你提供的答案能让提问者相信你对特定领域很了解,他们可能会推荐其他人和你谈论相同的话题。随着这种情况越来越多,你可能会发现自己成了某个特定主题的关键人物。想象一下,在一个问题被问了几次后,你记录下了你的解释;下次有人问你时,你可以向他们提供那份文件——这是你的第一个读者。

如果现有的博客帖子或教程已经提供了解决某个特定问题所需的一切,那么您不太可能需要投入大量的时间或精力来找到解决方案。然而,我通常发现有许多资源,每个资源都提供一些所需的信息,这些信息必须为手头的任务进行聚合。

我相信,如果阅读我是如何解决问题的,可以防止一个人花时间去执行与我相同的步骤来找到解决方案,或者帮助他们解决不同的问题,那么它就值得出版;如果两个人都经历了同样的问题,那么很可能还会有其他人!

就我个人而言,我很少关注浏览量或读者统计数据,甚至很少关注 LinkedIn 上强制性状态更新之外的帖子推广——为我网络中可能感兴趣的人——并将它们推荐给面临类似挑战的同事。

总的来说,我的建议是不要过多考虑谁会阅读你的内容。通过正式化你的思想,你强迫自己对你正在学习的主题更加严谨。此外,万一您遇到了一个对任何人都没有用的完全独特的问题,一个写得很好的已发布的解决方案将成为您将来需要它时的一个很好的参考!

一般写作建议

虽然没有两种写作体验是完全相同的,但这里有一些我认为有用的通用提示。

  • 当我准备花大量时间调查一个问题时,我会带着这样的观点来处理它——如果我觉得我的知识有用——我会写一篇关于这个问题的博客。甚至用这种心态处理问题也鼓励我更加努力地让我的探索有条不紊。
  • 如果我使用 Python,我选择的探索工具是 Jupyter 笔记本;这是一个探索性的环境,在这里我可以进行实验,也可以记录我的思考过程。然而,我的主要焦点是逻辑地记录实验过程,以及所采取的步骤;在 word 文档中混合使用文本和代码截图可以达到同样的目的。
  • 从一开始就跟踪你的消息来源。这包括您阅读的任何书籍或博客,以及您借用和修改的任何代码。我喜欢把网址贴在我的笔记本上;这使得以后正确地确定事物的属性变得容易,并确保我引用了我使用的所有东西。
  • 我总是从一个目标开始,并在笔记本的顶部明确地写下来。这可能非常宽泛,例如,“如何使用 Azure 机器学习运行 PyTorch 分布式培训作业”。
  • 当用笔记本工作时——甚至在博客之外——我总是发现让想象我正在写一篇教程给其他人阅读会很有帮助;在代码单元之间记录我在做什么,为什么。当事情可能会改变时,这些可能会非常短,甚至不是完整的句子,稍后再详述。
  • 没有什么比一个凌乱的笔记本更糟糕的了,我发现一个很好的指标是,如果你发现自己跳来跳去地乱序执行细胞。在这些情况下,我倾向于复制单元格,这样它就可以按顺序运行,然后将任何重复的部分重构为函数或类。
  • 一旦我觉得我已经完成了我的目标,我发现按顺序浏览笔记本很有帮助,并且想象我正在向坐在我旁边的人展示我的工作。每次我觉得需要解释什么的时候,我都会把它写下来。这也是对代码和笔记本结构进行最后清理的好机会。
  • 你出版的时间越长,怀疑就会开始蔓延。一旦你觉得你已经完成了,校对几次,移植到你选择的平台,然后发布!你错过的任何小错误都可以在以后改正。

最后的想法

相对来说,我还是个新手,但我真的相信写博客对我的整个学习过程有着不可思议的帮助,当人们要求我分享我一直在探索的领域的学习成果时,它给了我指引方向的资源。

虽然这仍然让我感到惊讶,但在很少的情况下,有人接近我——无论是亲自还是通过信息——让我知道我写的东西可以帮助他们,这感觉非常值得!

如果写博客是你已经思考了一段时间的事情,或者如果你对它是否适合你持观望态度,我会彻底建议你暂停所有的怀疑,至少尝试一次;毕竟,最坏能发生什么?

克里斯·休斯上了LinkedIn

参考

  • 建立成功的机器学习项目|作者克里斯·休斯|微软数据科学| Medium
  • 图解变压器——Jay alam mar——一次可视化一个概念的机器学习。(jalammar.github.io)
  • 使用 Azure 机器学习和 PyTorch 加速技术对 PyTorch 模型进行轻松的分布式培训|由克里斯·休斯| 2021 年 12 月|迈向数据科学

我是如何用本福德定律测试匈牙利选举的舞弊行为的

原文:https://towardsdatascience/how-i-tested-the-hungarian-election-for-fraud-using-benfords-law-2d32ea92fe7c

我使用本福德定律测试了几个数据集,了解了其中的优势和缺陷。

根据本福特定律分配第一位数。除非另有说明,所有图片均为作者所有

我最近偶然发现了一个叫做本福德定律的概念。我正在听一个丹麦的播客——主持人介绍了一个概念,如果你对数据集中每个数字的第一个数字求和,每个数字的出现应该遵循一定的分布。他说,这可以被用作检测税务欺诈和标记虚假社交媒体简介的一种方式。

这里用红色标记的是一个数字的第一个数字。

什么是本福德定律?

定律基本上表明,任何自然产生的数据集的第一个数字的总和应该遵循这种分布:大多数数字,30%以 1 开头,17 %以 2 开头,依此类推,如第一幅图所示。

“这听起来不太对,”我起初想。我在学校学过中心极限定理,也只是直觉上觉得不对。

在结束播客后,我立即测试了 BL 关于自 1970 年以来世界上所有国家的年度军费开支(因为我当时是出于其他原因而查看这些数据)。脱离政治背景,这些数字看起来是随机的,因此应该是一个完美的测试数据集。结果成功了!

BL 第一位数分布与世界军事预算第一位数分布的比较

至少上图中第一个数字的分布看起来非常相似。为了进一步测试,我做了卡方拟合优度测试。

对于α = 0.05 的显著性水平,与本福特分布的比较支持预测分布和观察分布之间无差异的零假设(χ 2 = 0.970,df = 8,p = 0.9984)。

也就是说1970 年以来世界各国军费预算的第一位数字都遵循本福特定律。我还是觉得很诡异,就一头扎进了背后的逻辑。

原来这是简单的数学,这种类型的数据往往符合对数正态分布,第一个数字的概率可以表示如下:

我不打算解释它工作的更深层次的数学原因,但是如果你感兴趣,你可以在这里阅读,在这里阅读,在这里阅读。

它如何检测欺诈?

好的,播客主持人说商业智能可以用来检测欺诈。这是怎么回事?

数据集符合 BL 的条件之一是数据必须是随机生成的,如果 1)它们不受最大值和最小值的限制,2)它们没有被分配数字,那么它们就是随机生成的。

我认为假设世界上河流的长度是随机分布的是安全的。世界各国的军事预算似乎也是如此。

选举数据

那么选举数据呢?如果一个特定的候选人在特定的投票站获得 1000 或 999 张选票,我们会认为这是随机的。这意味着,如果没有发生操纵,选举数据应该遵循 BL。

首先,我想测试一次合法的选举,与匈牙利的选举进行比较。在丹麦,我假设选举欺诈的概率非常低,所以我测试了 2019 年丹麦上次选举的数据。这里的数据是免费提供的。

从这个国家的所有投票站得到每个政党的所有选票,我得到了一个 18714 个投票号码的列表。

本福特分布和丹麦投票站数据的第一位数分布进行了比较。

对于α = 0.05 的显著性水平,与本福特分布的比较支持预测分布和观察分布之间无差异的零假设(χ 2 = 0.046,df = 8,p = 0.9999)。

所以投票站的投票数据绝对符合 BL。

让我们花点时间想想这意味着什么。我们期望数字的随机分布符合 BL,但是当然这些数字可以根据 BL 被操纵,欺诈或不公平也可能以不影响第一个数字的方式发生。因此 BL 不能证明不存在欺诈*。*****

所以丹麦选举中没有明显的舞弊——正如预期的那样——但是匈牙利人呢?

匈牙利选举数据

欧盟成员国匈牙利刚刚在 2022 年 4 月 3 日再次选举其总理维克托·欧尔班。由于乌克兰战争和欧尔班与俄罗斯总统普京的密切关系,一些猜测选民的反弹,但欧尔班的青年民主党/KDNP 联盟赢得了议会 199 个席位中的 135 个席位的压倒性多数。

虽然欧尔班确实受到了大量匈牙利公众的青睐,但一些组织一直在关注匈牙利的民主状况:媒体偏见和选举欺诈。

这场巨大的胜利,以及对匈牙利民主的所有担忧,让这场选举成为一些选举辩论的绝佳候选。

我没有找到可供下载的公开的投票站数据集——但我在匈牙利官方公投网站上找到了选区投票号码。为了获得数据,我写了一个小的 scraper 脚本,可以在我的 GitHub 页面上找到,还有用来创建本文中所示图表的分析笔记本。你可以自己尝试一下!scraper 给了我 663 个数据点的选区投票数据集

这次我们看到了实质性的差异,零假设被拒绝(p 值为 0.004 < 0.05).

So in this case the data does not conform to Benford’s distribution. I was so excited when I saw this result. It shows that Victor Orbans win was not genuine. Or what?

对本福特选举取证定律的批评

在发现匈牙利选举的数据不符合 BL 后,我做了更多的研究。2020 年,当像我这样的互联网人用本福德定律来“证明”美国总统选举存在欺诈时,用本福德定律测试选举受到了几位专家的严厉批评。严厉的批评可能也是因为这一次前总统唐纳德·特朗普(Donald Trump)试图抹黑选举结果,所以每个人都在担心是否会正确。

在本文中,路透社事实核查小组联系了本福德法律和选举取证方面的几位专家。他们都同意 BL 不能作为证据,而仅仅是一个可以促使进一步调查的危险信号。在美国 2020 年总统选举的具体案例中,投票站的小规模使数据集违反了数据跨越几个数量级的规则。他们还表示,如果您想使用 BL,您需要进行第二位数字分析,因为它对选区大小不太敏感。

了解到这一点后,我在匈牙利选举中测试了 2BL,即本福特第二位数定律。2BL 的工作方式与 BL 类似,但数字分布略有不同。结果是:2BL 分析与匈牙利的投票数据非常吻合。

所以当你这样看的时候,匈牙利的选举很符合基本法,这表明没有理由在这个问题上发出任何危险信号。

第一个数字不工作的原因

那么为什么 BL 测试对第一位数字不起作用呢?看看在议会中获得席位的三个政党之间的票数分布。我们可以看到,在 20K 和 40K 之间有很多选票,这将解释第二和第三位数字的超额代表。下一次,这是我要做的第一个图,看看 BL 测试是否可行。

进入议会的三个政党的投票数分布。很明显,有很多数字的第一个数字是 2 和 3——因此给出了倾斜的第一个数字 BL 测试

结论:

本福德定律是一个有趣而令人惊讶的概念——但当用它来检测选举欺诈时,你需要小心——数据集可能会因为操纵以外的其他原因而偏离本福德分布,即使这样,它也只能被用作发出危险信号的方法——而不是证明欺诈。

一路上我玩得很开心,也学到了很多东西!在 LinkedIn 和 GitHub 上随意联系,谈论更多关于选举舞弊、数据科学或任何介于两者之间的事情!

我是如何将 Excel“怪物”转化为 BI“美女”的

原文:https://towardsdatascience/how-i-transformed-excel-monster-into-power-bi-beauty-c7ba8395959c

在 Power BI 中,从 18 个 Excel 表格中的 380 个表格到单个报告页面中的一个表格,您认为如何?!魔法?奇迹?

查看计算组如何帮助您实现(im)可能性!

作者图片

亲爱的读者,在你继续之前,请记住下面的例子是一个真实的用例! 当然,本文中的数字和指标进行了调整,以避免丢弃真实的客户数据,但其结构和整体思想与现实中 100%相同!

就在最近,我正在处理为一个客户改进报告的任务。当前的设置如下:Excel 报表,构建在一个巨大的 CSV 文件之上(从其中聚合数据),有 18 个选项卡,每个选项卡中有 21 个表格!大概是这样的:

作者图片

如您所见,主表单上有 21 个表格。每个表只包含一个指标(按年度和零售与公司细分)…这同样适用于营销表,它包含完全相同的指标,唯一的区别是数字经过过滤,只包含与营销部门相关的数据。而且,您猜怎么着:每个后续的表都包含相同的度量组,与特定的业务线相关。主工作表合并了其他工作表中的数据,显示整个公司的总计。

现在,如果你问我,这是一个可怕的解决方案,因为大多数数据都是冗余的,很难找到任何见解,更不用说在部门之间进行基本的比较了!在 18 个单独的表格中上下滚动,同时试图对齐数字——不要误解我的意思,但这必须是一个更好的方法!

搭建舞台—介绍 Power BI

正如我在之前的一篇文章中所描述的,设计高效分析解决方案的第一步也是最重要的一步是了解业务问题!一旦您确定了需要回答的关键业务问题,您就可以将注意力转移到寻找最佳工具和技术上。

经过最初的讨论,我们得出结论,Power BI 应该是首选工具,而不是 Excel。好吧,我们检查了一个框,但是下一个明显的问题是:向消费者呈现相同数据的最佳方式是什么?我们应该利用哪种技术或功能来充分利用现有的数据?我的意思是,我们可以简单地将 Excel 中的逻辑复制/粘贴到 Power BI 中,也许还可以在这个过程中添加一些很酷的可视化效果……但是,这是最适合我们用户的吗?

如果我告诉你,最终的解决方案只有一个报告页面,上面只有一个表格,那会怎么样? 让我给你算一下:而不是 18 张,每张 21 个表格(这是 ca。总共 380 个表),我们将在一个报告页面上使用一个表来实现相同的结果!不信任我?!只要继续读下去…

为工作选择正确的工具—计算组

经过一些修补,我决定尝试计算组。对于那些不知道的人来说,这是表格模型的一个非常强大的特性(因此,它不是 Power BI 独有的特性,因为您也可以在 Analysis Services 表格中利用它)。

解释计算组及其工作方式超出了本文的范围,但是我强烈建议查看马尔科和阿尔贝托关于该主题的文章,或者查看由来自埃斯布林纳的伯纳特·阿古罗撰写的许多精彩帖子中的一篇,在那里您还可以找到一些超出基础的计算组实现。

因此,想法如下:由于我们基本上在每个 Excel 表中使用相同的计算集(本年度值、上一年度值、本年度和上一年度之间的比较),为什么不创建一个计算组来处理所有必要的计算,然后让用户可以选择应用计算的指标(收入、成本、准备金等)。).根据用户的选择,相应的指标及其所有计算项目将显示在表格中…听起来很混乱?相信我,这比你想象的要容易…

构建解决方案

如果你想使用计算组,你需要的第一件东西是表格编辑器,因为目前还不能从 Power BI Desktop 创建计算组。我真诚地希望您了解表格编辑器,并且正在使用它,这不仅仅是因为计算组,还因为许多其他非常有用的特性,这些特性使 Power BI 开发人员的生活变得更加轻松:)

一旦我们打开表格编辑器(我在这个演示中使用免费版本的表格编辑器),第一步是创建一个新的计算组。右键单击表并选择创建新的计算组:

作者图片

我将我的计算组命名为“时间智能”,现在我们开始在计算组中定义我们的计算项。右键单击计算组,选择添加新的计算项:

作者图片

下一步是定义所选计算的当前值。这里,我将简单地使用下面的语法:

SELECTEDMEASURE()

让我停下来解释一下这个 SELECTEDMEASURE()是什么意思。这将被用作对当前上下文中的度量的引用。它可以是销售额、订单数量等等…在我们的场景中,这将是总收入、总成本、供应等等。

接下来,我们要计算前一年范围内的度量值。因此,我将使用以下公式创建另一个名为 Previous 的计算项:

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR('Date'[Date])
    )

我们在报告中需要的第三个计算项目是当前值和前一年的比较:

SELECTEDMEASURE() - CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR('Date'[Date])
    )

最后,我们还想将这一差异显示为百分比,因此让我们创建第四个计算项:

DIVIDE (
    SELECTEDMEASURE (),
    CALCULATE ( SELECTEDMEASURE (), SAMEPERIODLASTYEAR ( 'Date'[Date] ) ),
    0
) - 1

对于这一项,我们还需要确保它的格式正确,因此在“格式字符串表达式”属性下,我将对其进行设置以显示百分比:

作者图片

还可以通过设置 Ordinal 属性的值来重新排列组内项目的顺序。在上图中,您可以看到“+/- %”项目的序号值为 3,而前面的项目分别被指定为 0、1 和 2,这意味着“+/- %”项目将在组中最后显示。

现在,由于我们希望用户能够选择在表中显示哪个指标,我将创建一个额外的计算组,并将其命名为 Measure Selector。然后,我将为每个指标定义计算项,如下所示:

作者图片

您可以在这里看到我们的所有指标,因此我现在将保存对数据模型的更改,关闭表格编辑器并返回 Power BI Desktop 以构建报告:

作者图片

正如您可能注意到的上图,我已经将 Name 从 Time Intelligence 计算组拖到我的 matrix visual 上作为列,将我的总收入度量作为值,并将 Calendar Year 和 Corporate/Retail 放在行上。

此外,上面的切片器(是的,这是一个常规切片器可视格式,用于提醒按钮)包含度量选择器计算组中的所有计算项。

作者图片

在左侧,我已经创建了一个切片器窗格,用户可以在其中轻松地在部门或公司与零售之间切换。用户还可以从日历切片器中选择特定的年份。

最后,让我们看看如果我在切片器中选择不同的指标会发生什么:

作者图片

这太棒了。

正如您所看到的,一旦我在切片器中选择了不同的指标,表格中的数字就会发生变化(在演示文件中我省略了其他的视觉效果)。如果仔细观察,切片器中有 21 个项目,每个 Excel 表中的每个表都有一个项目。所以,我们只有一张桌子,而不是 21 张!

左侧的过滤器取代了创建单独表格的需要,因为现在可以在当前报告页面的范围内对数据进行切片和切块!

结论

从 21 张表格中的 380 个表格到单个报表页面上的一个表格 你怎么称呼?!魔法?奇迹?

通过利用表格模型中的计算组功能,我能够构建一个显著降低复杂性的解决方案,并使报表用户能够快速轻松地从底层数据中获得洞察力。

更不用说可伸缩性了,想象一下我们需要添加 10 个新指标或添加一个新过滤器(即部门),而不是在每个表中创建 10 个额外的表,或为新部门引入额外的表,我们可以简单地扩展现有的计算组,并继续使用我们的单页报告解决方案!

感谢阅读!

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

我如何从学术界过渡到数据科学行业

原文:https://towardsdatascience/how-i-transitioned-from-academia-to-the-data-science-industry-d5e00479fea1

一天,我意识到是时候开始新的冒险了。以下是持续不断的小努力如何为我的下一个角色打下基础。

https://pxhere/en/photo/1284568

我想分享我从学术界过渡到数据科学的经历,因为这可能会让许多有类似经历的人受益。更广泛地说,我的经历也有助于为实现你的目标打下坚实的基础——过渡到一个完全不同的领域。

大概从 10 岁开始,我就一直想成为一名科学家。因为许多近亲都是学术界的科学家——获得博士学位,然后是博士后,最后成为教授是我的目标。这个目标在很多年里都是遥不可及的,因为我在学校是个糟糕的学生。但是,当我开始从解决高等物理和微积分问题中获得乐趣,而我的朋友们更关心分数而不是科目时,这一切都改变了。我在大学时下定决心要追寻我的梦想,成为一名物理学家。

从那以后,通过努力工作和奉献精神的结合,以及我寻找解决研究问题的天生的创造性倾向,事情相对顺利。我在印度著名的 IIT 获得硕士学位,在埃默里大学获得博士学位,在佐治亚理工学院获得博士后学位。所有的迹象都表明我走在正确的道路上。在我读博士期间。我被埃默里大学物理系授予了最佳研究生奖,在 PNAS 发表了一篇第一作者论文,并有许多其他合著出版物。在我博士后期间,我在 GeorgiaTech 博士后研讨会上被授予机器人相关研究的最佳演讲人,我的工作在 Forbes 、 BBC 等媒体上被广泛报道。我给出这个背景来说明我是如何专注于学术界的,以及为什么享受你此刻正在做的事情是重要的。

最后,我在佐治亚·格温纳特学院找到了一个教职——这是一所位于亚特兰大地区的本科学院。我很享受在那里的时光,可以自由地教授我自己设计的课程,选择研究项目,并拥有自己的大部分时间。在 GGC 的第三年快结束时,我决定是时候改变一下了。一个月后,我找到了一份高级数据科学家的新工作。然而,这并不意味着我只准备了一个月。在这里,我谈谈我过去三年的努力是如何成为我人生旅程的垫脚石的。

使用数据进行研究

我一直对理解世界上的模式非常感兴趣。因此,当我作为博士后有时间开发一个独立的研究项目时,我想把交通模式作为一个物理问题来探索。最终,我们对网络攻击后交通模式将如何瓦解做出了初步估计。为了这个项目,我研究了大量交通数据——包括来自谷歌、HERE API、纽约市出租车数据、开放街道地图等的数据。我还开发了一个简单的算法,通过本地摄像头追踪车速。

虽然我在这些项目中使用的数据科学方法没有一个是突破性的,但它让我在现实世界的背景下获得了数据提取、清理和一些基本机器学习的实践经验。

数据孵化器奖学金

我参加了为期 8 周的远程数据科学研究。当时我对学术更感兴趣,但如果我找不到学术职位,我希望数据科学成为下一个选择。我得到了一堆奖学金项目的面试机会,几乎是一份工作邀请。我的顶点项目也在推介之夜得到了强调。最终,我决定不去芝加哥的一家公司实地考察,因为几天前我的妻子刚刚生下我们的双胞胎,我也刚刚在 GGC 大学找到了一份学术教授的工作。这项奖学金最重要的一点是,它让我接触到了同龄人,其中大多数人在获得奖学金后选择了数据科学,并让我大致了解了入门级数据科学家的技术技能和要求。另一个不能轻描淡写的方面是它给我带来的心理优势。

在 TDI 之前,我感觉自己像一个精通 python 的物理学家。在 TDI 之后,我感觉自己像一个数据科学家。

这是在 2019 年,但这种心态此后一直存在。

博客

我在 Medium 上的第一篇文章是在 2019 年 10 月——如果下一次大规模黑客攻击涉及到你的车辆而不是你的安全摄像头,会怎么样?这一个月来,它的表现令人沮丧,获得了大约 20 次浏览。但是那时我不知道向更大的出版物投稿。一位来自初创公司(当时 Medium 最大的出版物)的编辑联系我,让我发表这篇文章。从那以后,我一直在顶级媒体出版物上发表文章,尤其是在数据科学方面。

与更大的数据科学社区发布和分享我的工作帮助我在求职面试过程中脱颖而出。

咨询、辅导、指导

我开始阅读人们如何在像 Fiverr 和 Upwork 这样的平台上销售数据科学服务的故事。与此同时,我在读博士期间也尝试过在公共辅导平台上创建导师账户——尽管我从未真正跟进过。

当我在在线平台上做实验时,我偶然发现了对数据科学辅导的巨大需求。因此,许多大学和学院已经开始提供数据科学硕士课程和本科生专业。我有几个好学生,他们重视我的辅导课,给了我很好的评价。随着时间和收视率的增加,我增加了每小时的费用。令人惊讶的是,我发现当我提高速度时,请求并没有显著减少。事实上,我收到了来自哈佛、哥伦比亚、伯克利等顶尖大学的学生。我甚至给一个人辅导了一个学期,这个人的父亲是一家财富 500 强公司的首席执行官。我还获得了一个长期客户,他就开发图像对象检测平台向我提供咨询。

塞犍陀·维韦克

我在 Fiverr 上也取得了一些成功。

塞犍陀·维韦克

咨询和辅导帮助我通过学习先进的机器学习技术和帮助客户实现目标而获得报酬。

面试,面试,面试…

当我决定转型时,我的数据科学咨询和辅导经历让我有点紧张。我想肯定的是,就业市场上肯定有大量的申请者——因为每个学院或大学似乎都在开设 DS 课程。

德国科隆:科隆南桥(klner süDBRücke)的一群牧羊狗和一只黑羊

然而,只有在 2022 年 3 月至 4 月的采访中,我才意识到两件事:

A.那段时间有创纪录数量的职位空缺(通货膨胀还不是一个问题)

B.每个自称是数据科学家或者有数据科学学位的人都是不称职的。

后者其实事后来看是显而易见的。我辅导了很多顶尖大学的学生,他们根本不知道自己在做什么。

与招聘人员的一次偶遇让我明白面试就像在健身房做练习。做得更多,你会做得更好。面试是求职过程中最重要的部分。你在面试中变得更好的唯一方法就是做更多的面试!

不要害怕失败

在你觉得准备好之前,不去面试是很自然的。但是如果你像我一样,你可能永远不会觉得自己 100%准备好了。这就是危险所在——陷入舒适区,为现在不是合适的时机找借口。

我几乎失声,因为一种不相关的流感在我的孩子们的日托所里传播。我申请了简历上有错误的工作。但我还是去面试了,尽管有时我的喉咙不配合。当我一周没有得到面试机会时,我修改了我的简历,让它更有吸引力。之后,招聘人员找到了我。

我发现的最糟糕和最具道德破坏性的工具之一是 Jobscan。我没有听到任何人对 Jobscan 说负面的话——但它对我不起作用。Jobscan 会扫描您的简历和职位发布,并给出匹配分数。我从未在求职扫描系统中获得过 20%或 30%以上的分数——他们建议只有当你的分数达到 70%或更高时才申请。如果我那样做了,我会把我的简历裁剪到今天!现在我得到了这份工作,我打赌我会从 Jobscan 得到更高的分数,因为我的简历上有这份工作(非常感谢 Jobscan…)。

记录下你不写博客的所有事情

如果你关注阿里·阿布达尔的 Youtube 频道,你会发现他在医学院非常成功,同时也成为了 Youtube 上的名人。他的生产力工具之一是使用概念做笔记。我使用概念来巩固我的 DS 知识;尤其是在工作面试的时候。它不是很有条理,但确实有用。

我的数据科学概念数据库|塞犍陀·维维克

结束语

成为新领域的“专家”不仅仅是有一个特定的目标,并实现它。至少对我来说,旅程比最终目的地重要得多。想一想——如果你决定了一个目标并实现了它,一旦实现了你会做什么?更有可能的是,在没有未来计划的情况下,你可能会崩溃和筋疲力尽。此外,大目标每天都在变化。如果你突然决定下一年的目标,然后明天又改变主意,会怎么样?

反之,如果你在不断的旅程中,享受每一刻;任何目的地都是前进道路上的一步。创造积极的习惯更有可能经受住不断变化的思想。如果你决定每周写博客并坚持 9 周,那么你不太可能在第十周就放弃。你可能会休息一会儿——但之后更容易回到状态。写了 30 篇博客后,招聘人员可能会联系你,你会得到一个面试机会,在那里你可以谈论你的博客,并得到一份理想的工作。

相比之下,我们的目标是一年后转到数据科学工作,而不是持续努力。这可能是一个不切实际的目标,尤其是如果你不能向别人展示你有相关的经验。许多成功人士也以其他方式表达这种巧妙的心理转变。

正如玛丽亚·莎拉波娃所说:

“我执行的任务非常不同。这并不是说我有或者没有必要成为冠军。我正在学习,成长为一名更好的网球运动员。”— 玛丽亚·莎拉波娃

Ravikanth Naval 说:

“对行动不耐烦,但对结果有耐心.”— 海军拉维坎特

在《微小的习惯》一书中,B.J .福格讨论了专注的日常小活动如何对你的生活产生巨大的积极影响。

最后,如果你对自己的转变持积极态度,并做出必要的努力——无论是写博客、发表研究、咨询、写书、在社交媒体上发帖、花时间发挥创造力等等。你正在做出最好的投资决定——投资于你的健康和成功,无论你是否到达了最初的目的地,或者发现了你想象不到的更棒的东西。

如果你还不是中会员,想支持我这样的作家,可以通过我的推荐链接随意报名:https://skanda-vivek.medium/membership

关注我 如果你喜欢这篇文章——我经常在数据科学、安全、物理和社会的界面上写作。

每周数据透视 订阅此处

我如何在数据科学访谈中使用 Python 中的日期时间特性

原文:https://towardsdatascience/how-i-use-datetime-features-in-python-in-data-science-interviews-5b17e68405fa

使用 Python Pandas 的日期时间功能概述

作者在 Canva 上创建的图片

在本文中,我们将研究 Python Pandas 中 DateTime 库的一些不同应用。就上下文而言,每当您必须在 Python 中操作表格数据时,您通常可以使用 Pandas 库来完成。就像您可以使用 Excel 或 Google Sheets 一样,Pandas 为您提供了更多处理结构化数据的能力。你可以在这里找到更多关于熊猫生态系统的信息,也可以在这里阅读它的大量文档。强大的熊猫技能是 Python 数据科学面试中最常见的期望之一。

Python Pandas 中的日期时间特性

日期时间操作是最常被问到的数据科学面试问题之一。DateTime 数据集的普遍性和人们可以用看起来简单的数据实现的一系列复杂性使它成为一个流行的数据科学测试领域。Pandas 有许多 DateTime 函数,涵盖了广泛的 DateTime 用例,你可以在这里阅读关于它们的官方文档。

DateTime 函数最常见的一个用例是在清理数据时获取正确的日期格式。在许多情况下,您的日期时间数据太复杂,需要简化到一周中的某一天或一天中的某个小时。在其他情况下,您的数据没有日期或时间,您需要使用 DateTime 库为您的计算添加合理的日期。

为了实现这种格式化和丰富,Pandas 中的 DateTime 函数允许您将字符串或列解析为 DateTime 格式,生成定期的 DateTime 信息,从 DateTime 对象中提取日期或时间信息的子集,等等。

展示这些 Panda DateTime 函数如何工作的最佳方式是通过示例,因此我们将涵盖一些需要使用 DateTime 函数的 Python 面试问题。

需要 Python Pandas DateTime 函数的访谈示例

作者在 Canva 上创建的图像

如何使用 today()方法丰富日期时间数据

我们要看的第一个例子有助于解决优步数据科学采访中的一个问题。

截图来自 StrataScratch

问题链接:https://platform . stratascratch . com/coding/2046-已达到最大员工数

这个问题要求我们查看在优步工作的每一位员工,并确定优步员工在任职期间的最大数量以及这个最大数量出现的第一个日期。

当谈到理解我们为什么必须使用日期时间函数时,我们通常必须首先分析数据集。在这个问题中,我们只有一个表 uber_employees 可供查看。

截图来自 StrataScratch

以下是一些示例数据:

截图来自 StrataScratch

拥有像雇佣日期和终止日期这样的日期时间列是不够的,我们需要调用日期时间库。相反,由于该数据包括仍在优步的雇员的 termination_date 列,我们不得不假设当前雇员的该列为空。这很重要,因为我们需要插入他们结束日期的实际数据,以计算雇佣范围并得出我们的解决方案。

为了丰富内容,我们将遍历表,如果存在终止日期,则将结束日期指定为终止日期,如果不存在终止日期,则将终止日期指定为今天。

import pandas as pd
import datetime as dt
for i in range(uber_employees.shape[0]):
    if uber_employees.at[i, 'termination_date'] is pd.NaT:
        end_date = dt.datetime.today()
    else: 
        end_date = uber_employees.at[i, 'termination_date']

注意 datetime 库最初是如何用别名 dt 导入的。我们使用这个库的模块 datetime 以及它的 today()方法将任何当前雇员的结束日期指定为今天的日期。

由于该解决方案有些复杂,我们不打算详细介绍它的其余部分,但是,它看起来是这样的:

import pandas as pd
import datetime as dt

hired_dates = pd.DataFrame(uber_employees['hire_date'].rename('date'))
hired_dates['value'] = 1

terminated_dates = pd.DataFrame(uber_employees['termination_date'].
rename('date'))
terminated_dates['value'] = -1
terminated_dates = terminated_dates.dropna()

all_dates = pd.concat([hired_dates, terminated_dates], ignore_index=True)
all_dates = all_dates.groupby('date').sum().reset_index()
all_dates = all_dates.sort_values('date')
all_dates['emp_count'] = all_dates['value'].cumsum()

for i in range(uber_employees.shape[0]):
    if uber_employees.at[i, 'termination_date'] is pd.NaT:
        end_date = dt.datetime.today()
    else: 
        end_date = uber_employees.at[i, 'termination_date']

    start_date = uber_employees.at[i, 'hire_date']

    max_emp_count = all_dates[all_dates['date'].between(start_date, end_date)]
['emp_count'].max()

    uber_employees.at[i, 'max_emp'] = max_emp_count

    earliest_date = all_dates[(all_dates['emp_count'] == max_emp_count)
& (all_dates['date'].between(start_date, end_date))]['date'].min()

    uber_employees.at[i, 'min_date'] = earliest_date

result = uber_employees[['id', 'max_emp', 'min_date']]

如果你对详细的演练感兴趣,请参考本文→ 优步数据科学家面试问题演练。

如何使用工作日和小时访问器解析日期时间数据

我们要分析的第二个例子有助于回答关于送货司机平均收入的 Doordash 问题。

截图来自 StrataScratch

问题链接:https://platform . stratascratch . com/coding/2034-平均每工作日每小时收入

我们看到问题要求我们返回基于一周中的小时和天的平均收入,所以我们已经有一些迹象表明我们将必须进行某种形式的日期时间操作。

该问题仅使用了具有以下字段的 doordash_delivery 数据集:

截图来自 StrataScratch

示例数据如下所示:

截图来自 StrataScratch

同样,仅仅在我们的数据集中有日期时间列还不足以得出我们需要调用日期时间库的结论。相反,这里的关键信息是必须基于小时和天进行计算,我们可以看到没有一个列只隔离小时或天。

我们首先需要从 customer_placed_order_datetime 字段中提取星期几和小时。首先,我们使用. dt.weekday 属性获取星期几。查看文档,得出星期一为 0,因此,由于问题提示我们从星期一的 1 开始,我们在提取的日期的结果上加 1。

*# Import your libraries*
import pandas as pd

*# Keep relevant fields*
dd_df = doordash_delivery[['customer_placed_order_datetime', 'order_total']]
dd_df['weekday'] = dd_df['customer_placed_order_datetime'].dt.weekday + 1

提取一天中的小时与. dt.hour 属性类似。

dd_df['hour'] = dd_df['customer_placed_order_datetime'].dt.hour

最后,你所要做的就是根据一周中的每一天和一天中的每一个小时进行合计。解决方案最终看起来是这样的:

*# Import your libraries*
import pandas as pd

*# Keep relevant fields*
dd_df = doordash_delivery[['customer_placed_order_datetime', 'order_total']]
*# Get the day of the week (add 1 to keep have Monday = 1)*
dd_df['weekday'] = dd_df['customer_placed_order_datetime'].dt.weekday + 1
*# Hour of the day*
dd_df['hour'] = dd_df['customer_placed_order_datetime'].dt.hour
dd_df.groupby(by = ['weekday', 'hour'], as_index = False).agg({'order_total': 'mean'})

查看上面的代码,我们的聚合函数需要根据提取的工作日和小时数据进行分组,以便计算每个工作日和小时的平均收入。

如何将格式化字符串转换成特定的日期时间数据

第三个例子来自一个关于用户增长率的 Salesforce 面试问题。

截图来自 StrataScratch

问题链接:https://platform . stratascratch . com/coding/2052-user-growth-rate

此问题要求我们计算 Salesforce 中每个帐户从 2020 年 12 月到 2021 年 1 月的活跃用户增长率,并列出它们。

我们只有一个单一的 sf_events 数据集,看起来相当简单。

截图来自 StrataScratch

数据看起来像这样:

截图来自 StrataScratch

查看我们的示例数据,我们可以看到,当我们真正需要将其缩小到月份和年份时,我们得到了诸如日期和时间之类的信息。我们可以使用日期时间库中的唯一方法。strftime(),它根据所需的格式将日期时间数据转换为字符串。

*# Import your libraries*
import pandas as pd

*# Create the Year - Month indicator*
sf_events['month'] = sf_events['date'].dt.strftime('%Y-%m')

注意我们是如何在?strftime()方法只提取年份和日期。接下来,我们将月份限制在 2020 年 12 月和 2021 年 1 月。请记住,字符串过滤器需要匹配 strftime()方法中指定的格式。

summ_df = sf_events[sf_events['month'].isin(['2020-12', '2021-01'])]

现在,我们使用数据透视表汇总这几个月的数据,计算增长率,并将输出限制在相关的列中。这是最终的解决方案:

*# Import your libraries*
import pandas as pd

*# Create the Year - Month indicator*
sf_events['month'] = sf_events['date'].dt.strftime('%Y-%m')
summ_df = sf_events[sf_events['month'].isin(['2020-12', '2021-01'])].pivot_table(
    index = 'account_id', columns = 'month', values = 'user_id', aggfunc = 
    'nunique').reset_index()
*# Calculate growth rate and output relevant columns*
summ_df['growth_rate'] = summ_df['2021-01'] / summ_df['2020-12']
summ_df[['account_id', 'growth_rate']]

同样,在增长率计算中对月份和年份的任何引用都必须与我们之前调用的 strftime()方法保持格式一致。

如何使用访问器和字符串到日期时间的方法来比较和过滤日期时间数据

最后一个例子同样来自 Salesforce 数据科学访谈。

截图来自 StrataScratch

问题链接:https://platform . stratascratch . com/coding/2053-留存率

它要求我们比较两个月内的保持率,而不是增长率。虽然我们只需要比较两个月的数据,但很明显,我们必须查看 12 月和 1 月之后的月份的保留数据。

该问题再次使用了具有以下字段的 sf_events 数据集:

截图来自 StrataScratch

这里有一些数据示例:

截图来自 StrataScratch

这个问题需要的日期时间函数与我们之前的问题完全不同,因为我们必须找到保持而不是增长。我们可以首先在 12 月和 1 月激活账户。在这两种情况下,我们都可以使用 dt.year 和 dt.month 属性来指定我们需要引用哪一年 2020 或 2021 或 12 月或 1 月。请记住,对于月份,我们将 1 月作为 1,将 12 月作为 12 进行筛选。

*# Import your libraries*
import pandas as pd

*# Get Accounts active in Dec 2020*
dec2020 = sf_events[(sf_events['date'].dt.year == 2020) & (sf_events
['date'].dt.month == 12)].drop_duplicates(subset = ['account_id', 'user_id'])
dec2020['in_dec'] = 1
*# Get Accounts active in Jan 2021*
jan2021 = sf_events[(sf_events['date'].dt.year == 2021) & (sf_events
['date'].dt.month == 1)].drop_duplicates(subset = ['account_id', 'user_id'])
jan2021['in_jan'] = 1

接下来,我们必须计算每个月之后的活跃客户。在这两种情况下,我们都必须对日期进行比较。我们首先调用. dt.date 属性只获取日期,排除时间。接下来我们调用。to_datetime()函数将相应月份的最后一天的字符串转换为 datetime 对象,然后与日期进行比较。

*# Get accounts active after December and January*
aft_dec2020 = sf_events[sf_events['date'].dt.date > pd.to_datetime
('2020-12-31')].drop_duplicates(subset = ['account_id', 'user_id'])
aft_dec2020['aft_dec'] = 1
aft_jan2021 = sf_events[sf_events['date'].dt.date > pd.to_datetime
('2021-01-31')].drop_duplicates(subset = ['account_id', 'user_id'])
aft_jan2021['aft_jan'] = 1

在这些日期时间操作之后,我们可以继续合并数据集,并使用标准 Python 和 Pandas 代码计算保留率,因此解决方案如下所示:

*# Import your libraries*
import pandas as pd

*# Get Accounts active in Dec 2020*
dec2020 = sf_events[(sf_events['date'].dt.year == 2020) & (sf_events
['date'].dt.month == 12)].drop_duplicates(subset = ['account_id', 'user_id'])
dec2020['in_dec'] = 1
*# Get Accounts active in Jan 2021*
jan2021 = sf_events[(sf_events['date'].dt.year == 2021) & (sf_events
['date'].dt.month == 1)].drop_duplicates(subset = ['account_id', 'user_id'])
jan2021['in_jan'] = 1
*# Get accounts active after December and January*
aft_dec2020 = sf_events[sf_events['date'].dt.date > pd.to_datetime
('2020-12-31')].drop_duplicates(subset = ['account_id', 'user_id'])
aft_dec2020['aft_dec'] = 1
aft_jan2021 = sf_events[sf_events['date'].dt.date > pd.to_datetime
('2021-01-31')].drop_duplicates(subset = ['account_id', 'user_id'])
aft_jan2021['aft_jan'] = 1
*# Merge the datasets to get December and January retention numbers*
dec_merged = pd.merge(dec2020, aft_dec2020, on = 
['account_id', 'user_id'], how = 'left')
dec_summ = dec_merged.groupby(by = ['account_id'], as_index = False).sum()
dec_summ['dec_retention'] = dec_summ['aft_dec'] / dec_summ['in_dec']

jan_merged = pd.merge(jan2021, aft_jan2021, on = 
['account_id', 'user_id'], how = 'left')
jan_summ = jan_merged.groupby(by = ['account_id'], as_index = False).sum()
jan_summ['jan_retention'] = jan_summ['aft_jan'] / jan_summ['in_jan']

*# Merge the Dec20 and Jan21 datasets, calculate the relative retention rate* 
*# and output.*
final_merge = pd.merge(dec_summ, jan_summ, on = 'account_id', how = 'left')
final_merge['retention'] = final_merge['jan_retention'] / final_merge['dec_retention']
final_merge[['account_id', 'retention']]

我们在这个解决方案中看到了日期时间属性的重要性,因为我们必须将日期时间对象的年、月和日期数据从日期时间对象中分离出来。在这之后,我们有了一个很好的机会用。to_datetime()函数

结论

在本文中,我们能够探索 Python Pandas DateTime 库的几种用法。大多数时候,您将利用其中一个访问器来隔离日期、时间或日期时间数据的其他组成部分。但是,在其他时候,您可能需要利用这个库来填充一些日期时间数据,所以您将利用它提供的函数。

如果你真的想在你的数据科学职业生涯中使用 Python,拥有良好的熊猫技能是一个非常必要的条件。幸运的是,我们能够在这里展示一些实际的例子,这些例子反映了优步、Salesforce 和 Doordash 等顶级公司的实际数据科学面试问题。在我们的平台上,你可以练习回答更多的熊猫面试问题,通过自己或在我们文章的帮助下交互式地构建这些问题的解决方案。您还可以访问其他用户的大型社区,他们可以在您查看他们的解决方案以获取灵感时对您的解决方案进行评论。

最初发表于T5【https://www.stratascratch】

我如何使用 Python 的 Tkinter 来运行算法

原文:https://towardsdatascience/how-i-use-tkinter-python-library-to-run-algorithms-6be85f8f4e5b

如果您正在为您的 ETL 任务或算法运行几个 python 脚本——Tkinter 是一个可以支持构建 GUI 的 python 库。

来自像素的图像

为什么使用 Tkinter 库

我们每天或每周都要完成一些任务,这些任务涉及到运行多个 python 脚本,在大多数情况下,会占用我们大量的时间。通过自动化我们的一些日常流程,始终找到最大限度提高生产力和工作效率的方法是很重要的。

拥有一个 GUI,通过一个允许你点击一个按钮就可以运行脚本的界面,让日常工作更有效率。它可以被转换成一个可执行文件,使你自己或不太懂技术但想自己运行脚本的团队成员运行 python 脚本更加流畅。

在本文中,我将分享我如何设计一个简单的 GUI 来运行 python 脚本算法。为了这篇文章,我创建了一个简单的 GUI 代码。

**示例 GUI 项目概述:**下面的分配算法 GUI 是一个 UI,您可以在其中从 Oracle 数据库读取和写入一个表。Allocate 按钮在后端有一个算法,该算法根据不同的指标计算应该将多少产品分配给不同的商店。summary 部分让您快速了解运行算法后整个分配的情况,完整的结果/输出表被发送回 Oracle 数据库。

构建 GUI: MyWindow 类

作者图片

这个窗口是通过一个名为 myWindow 的类(也称为容器)构建的。这个类很好地组织了函数,有助于避免全局名称空间的混乱。在 myWindow 类中有两个主要的函数,第一个是让你创建用户界面窗口的函数,第二个是主要的算法函数*(还有几个与之相关的函数)*,它驱动整个代码。

用户界面功能:

MyWindow 函数的语法非常简单,可以添加标签、按钮和名称字段。(我不会看代码,但我会在下面分享我的 github 源代码。)

单个元素的示例代码块如下所示:

创建按钮元素

正如您所看到的,在上面的代码块中,您可以定制按钮元素,并通过调整 x 和 y 将它放置在窗口中的特定位置。

该窗口中的小部件或元素连接到主算法函数中的特定变量——在上面的示例代码中,它是通过 command=self.algorithm 连接的。

算法功能

您可以创建一个或多个包含特定任务的函数,例如连接到数据库或运行特定的计算。这些函数使用户界面小部件变得可用。他们运行整个应用程序并产生输出。

在上面的示例中,有几个正在运行的算法函数,第一个是连接到数据库,以便您可以从数据源中读取和写入表,其他函数用于执行数据清理、操作、计算以及将输出表写回数据库。

Tkinter 类调用方

这几行代码调用 MyWindow 类,并根据您希望看到的维度或您希望为其添加的标签对其进行定制。

调用 MyWindow 类

用 Tkinter 做更多

上面的示例项目只是一个例子,展示了如何使用 Tkinter 通过点击按钮来轻松运行 python 算法。您可以使用这个库做一些其他的事情,比如构建一个接口,您可以通过一个接口连接多个 python 脚本。可能是这样的:

作者图片

还可以完全定制和添加不同的功能,如错误处理、成功或失败消息、打印输出等。

总的来说,tkinter 是一个非常棒的库,可供数据科学家和工程师用于日常 ETL 任务、自动化脚本或构建可供非技术用户使用的应用程序。

样本源代码:【https://github/kathleenlara/tkinter-scripting-gui

【https://twitter/itskathleenlara】我们来连线:

我如何用人工智能重新想象 10 幅著名的风景画

原文:https://towardsdatascience/how-i-used-ai-to-reimagine-10-famous-landscape-paintings-3e2924e03f79

这是我和 GPT 3 号、Midjourney 的合作成果。

图片由作者通过 Midjourney 提供

如果你关注我的工作,你可能已经注意到我已经开始使用人工智能创建的封面图像。

对于那些不知道它的人来说, Midjourney 是一个独立的研究实验室,几个月前秘密成立,目的是“探索新的思维方式[和]扩展人类的想象力。”Midjourney 也是我用来创建图像的文本到图像模型的名字。

几个星期以来,我一直在寻找新的想法,用人工智能视觉生成器来探索。这个实验提供了一种方法,可以在视觉上对比历史上一些最优秀的人类画家的创造性掌握与这些人工智能模型的能力。我用 GPT 3 号和 Midjourney 创建了一个几乎自动化的端到端流程——尽管我也在帮助他们沟通。

我选择著名的山水画有三个原因。它们非常容易辨认,GPT-3 可以很容易地提供视觉描述来设计提示,Midjourney 擅长画风景。

一旦我选定了画,我必须提示 GPT-3 给我描述。我使用了一个通用的简单提示:“用一段文字描述[作者姓名]的视觉细节[画作名称]。”即使我知道 GPT 3 号漏掉了一些元素,我还是未经编辑就完成了第一或第二个版本。

然后,我将描述修改为 Midjourney 可以理解的提示。除了 GPT 3 号的描述之外,我在所有的提示中添加了四个元素。在开始的时候,我包括了媒介(如布面油画)、风格(如印象主义)、流派(如风景)。最后我加上了原作的长宽比,以便更清晰的对比。

我没有提示作者或画的名字来迫使 Midjourney 只从原作中获取间接的灵感——正如 GPT 3 所设想的那样。

我公开了提示让你自己试试。我意识到不公开提示已经成为数字艺术家(以及文本到图像模型的用户)的普遍做法。我不打算出售这些画,也不打算保留用人工智能创作艺术所需的技能,所以我分享了未经编辑的提示。

如果你想了解更多关于提示的知识,我推荐从提示狂开始。如果你想在不学习提示技巧的情况下创造伟大的提示,试试这个位于拥抱脸的提示生成器。

如果你想提高更多,你必须练习和实验。我远远没有达到一些人工智能艺术家的水平,这些艺术家从这个新的人工智能艺术场景开始就一直在磨练他们的技艺。

向 Midjourney 发送提示后,它给了我四张图片供我选择。我升级了那些让我想起原版的,然后选择了一个。

下面的每个部分包括左边的原始风景画和右边的中途再创作。在图片上方,我写下了 GPT 3 号对原画的描述和我对中途的语法正确提示的翻译。

尽情享受吧,并在评论中告诉我你的想法!

文森特·梵高的《星夜》(1889)

描述:

这幅画以夜晚为背景,天空中有一轮明月。群星闪耀,风景沐浴在蓝光中。天空衬托出远处的树木和房屋的轮廓,整个场景宁静而梦幻。

提示:

布面油画+后印象主义+云景+夜晚+天上的明月+闪亮的星星+沐浴在蓝光中的风景+远处的树木和房屋在天空的映衬下形成轮廓+一种宁静的梦幻般的品质,— ar 5:4。

左图:文森特·梵高的《星夜》(公共领域)。右图:作者在中途拍摄的图片

约翰·康斯太勃尔的《干草堆》(1821)

描述:

这幅画描绘了一辆干草马车,由两匹马拉着过河。这个场景以山、树和云为背景。这幅画以其对英格兰乡村生活的简单而田园般的描绘而闻名。

提示:

布面油画+浪漫主义+风景+两匹马拉着干草过河+背景中的山脉、树木和云彩+对英格兰乡村生活简单而田园诗般的描述,— ar 30:21。

左图:约翰·康斯太勃尔的《干草围脖》(公有领域)。右图:作者在中途拍摄的图片

印象,克洛德·莫内的日出(1872)

描述:

这幅画是太阳刚刚从地平线上露出来,天空是美丽的橙色和红色。海水是深蓝色的,远处有一些小船。笔触厚重而有质感,使这幅画看起来几乎像一张照片。

提示:

布面油画+印象主义+城市景观+地平线上的太阳+美丽的橙红色天空+深蓝色的水+远处的小船+厚重而有质感的笔触,— ar 21:16。

左:印象,克洛德·莫内的日出(公共领域)。右图:作者在中途拍摄的图片

老彼得·勃鲁盖尔的《雪地猎人》(1565)

描述:

这幅画是一幅冬季风景画,描绘了一群打猎归来的男人。男人们累了,他们的狗在叫。大雪纷飞,树木被白雪覆盖。男人们把他们死去的猎物扛在肩上。

提示:

油画+北方文艺复兴+风俗画+冬季风景画+一群打猎归来的男人+疲惫的男人+狂吠的狗+下雪+树木被雪覆盖+男人把他们死去的猎物扛在肩上,— ar 34:25

左图:老彼得·布鲁格尔的《雪地猎人》(公共领域)。右图:作者在中途拍摄的图片

卡斯帕·大卫·弗里德里希的《海雾之上的流浪者》(1818)

描述:

这幅画是一幅风景画,画中一名男子背对观众站在露出地面的岩石上。这个人正在眺望远处群山环绕的雾蒙蒙的山谷。这幅画有一种忧郁的色调,传达出一种孤独感。

提示:

布面油画+浪漫主义+寓言画+风景画+一个站在岩石露头上的人+后视图+这个人正在眺望一个雾蒙蒙的山谷+远处的群山+忧郁的色调+一种孤独感,— ar 63:79。

右图:卡斯帕·大卫·弗里德里希《海雾之上的流浪者》(公共领域)。右图:作者在中途拍摄的图片

埃尔·格列柯(1596-1600)的托莱多全景

描述:

在这幅画中,远处是托莱多市,可以看到一些建筑和山脉。天空是深蓝色的,光线反射在前景中的河流上。色彩非常鲜明和明亮,使这幅画看起来几乎是超现实主义的。

提示:

布面油画+矫饰主义+文艺复兴晚期+城市景观+风景+远处的托莱多市+一些建筑和山脉+深蓝色的天空+前景中的河流+近乎超现实主义的绘画,— ar 70:63。

左图:埃尔·格列柯的托莱多视图(公共领域)。右图:作者在中途拍摄的图片

安德烈·德朗的《国家》(1905 年)

描述:

这幅画的背景是法国马赛附近的埃斯塔克镇。这个城镇建在一座小山上,房子被漆成各种颜色。屋顶是红色的,墙壁是白色的,门窗是蓝色的。天空是深蓝色的,阳光灿烂。这幅画色彩非常鲜艳,很有动感。

提示:

布面油画+野兽派+风景+法国马赛附近的 Estaque 镇+该镇建在山上+涂有各种颜色的房屋+红色屋顶+白色墙壁+蓝色门窗+深蓝色天空+阳光照耀+色彩非常鲜艳的绘画+大量运动,— ar 99:80

左图:安德烈·德朗(美国公共领域)的作品。右图:作者在中途拍摄的图片

保罗·塞尚设计的圣维克多山(1904-1906)

描述:

在《圣维克多山》中,保罗·塞尚描绘了一座耸立在法国乡村的大山。这位艺术家简化了画中的形式,将场景浓缩到其本质。结果是一个传达了山的宏伟和静止的作品。柔和的色彩和柔和的光线给这幅画增添了平静和安宁的感觉。

提示:

布面油画+后印象主义+风景+坐落在法国乡村上方的一座大山+简化的形式+山的宏伟和宁静+柔和的颜色+柔和的光线+平静和安宁的感觉,— ar 5:4

左图:保罗·塞尚的圣维克多山(公共领域)。右图:作者在中途拍摄的图片

克洛德·莫内的睡莲(1897-1899)

描述:

克洛德·莫内的《睡莲》是一幅美丽的画,画的是池塘里的百合花。百合花是深浅不同的粉红色和白色,它们被绿叶包围着。水面风平浪静,天空倒映在池塘水面上。

提示:

布面油画+印象主义+花卉绘画+池塘中的百合花+百合花是粉红色和白色的阴影+被绿叶环绕+水是平静的和静止的+天空反映在池塘的表面,— ar 4:2

左图:克洛德·莫内的《睡莲》(公有领域)。右图:作者在中途拍摄的图片

伦勃朗的《加利利海上的风暴》(1633)

描述:

在《加利利海的风暴》中,伦勃朗描绘了圣经故事中的门徒在加利利海的一艘小船上被风暴吓坏了。门徒们在船上挤在一起,他们的脸上充满了恐惧。海浪冲击着船,天空布满了乌云。

提示:

布面油画+巴洛克风格+宗教绘画+圣经故事中的门徒在加利利海的一艘小船上+被风暴吓坏了+门徒在船上挤成一团+脸上充满恐惧+海浪冲击着船+天空布满了黑暗、险恶的云,— ar 4:5

左图:伦勃朗《加利利海上的风暴》(公共领域)。右图:作者在中途拍摄的图片

结论

总的来说,我不得不说,大多数画虽然画得很好,但远不是原作的再现。一个原因是,GPT-3 无法给出精确的细节,除非这些细节非常有代表性(它往往是通用的)。

如果我使用人为的绘画细节描述,我会得到更好的结果。尽管如此,文本到图像的模型在组合性方面通常相当糟糕。这意味着他们很难理解“X 在 Y 之上”或“X 在 Y 的右边”。他们不知道元素的相对位置,而这些往往是艺术品的关键区别特征。

另一个原因是,我在这个实验中限制了 GPT 3 号和中途。GPT-3 的提示很简单,我选择了第一代或第二代。在中途,我从第一批结果中选择了这幅画,没有进行编辑或修补。

这个实验的一个重要收获是,GPT-3 和 Midjourney 都可以给你令人印象深刻的结果,只要你不打算引导他们达到预定的结果。它们很适合一般的作品,但不适合特定的作品(DALL E 2 在这方面更好)。

总之,我想看看 GPT-3+中途组合——我也在其中——将如何重新想象最初的人造艺术品。这是人类和人工智能之间的交流实验。

作为最后的提醒:这不是一个证明这些人工智能能力的实验。这只是为他们原本不透明的头脑打开了一扇门。

订阅 算法桥 。弥合算法和人之间的鸿沟。关于与你生活相关的人工智能的时事通讯。

您也可以直接支持我在 Medium 上的工作,并通过使用我的推荐链接 这里 成为会员来获得无限制的访问权限! 😃

本文标签: 中文翻译博客TowardsDataScience一百九十二