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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

在你的机器学习面试中脱颖而出的 5 个衍生物

原文:https://towardsdatascience.com/5-derivatives-to-excel-in-your-machine-learning-interview-25601c3ba9fc?source=collection_archive---------6-----------------------

机器学习背后的微积分:回顾导数,梯度,雅可比和海森

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

就业市场对机器学习工程师及其对数学的深刻理解存在整体怀疑。事实是,所有机器学习算法本质上都是数学框架——支持向量机被表述为对偶优化问题,主成分分析被表述为光谱分解滤波,或者神经网络被表述为连续非线性函数的组合——只有彻底的数学理解才能让你真正掌握它们。

各种 Python 库有助于将高级算法用于简单的步骤,例如, Scikit-learn 库包含 KNN、K-means、决策树等。,或 Keras,让您无需了解 CNN 或 rnn 背后的细节就可以构建神经网络架构。然而,成为一名优秀的机器学习工程师需要的远不止这些,这些职位的面试通常会包括一些问题,例如,从零开始实现 KNN 或决策树,或者推导线性回归或 softmax 反向传播方程的矩阵闭式解。

在这篇文章中,我们将回顾微积分的一些基本概念,例如一维和多维函数的导数,包括**梯度、**雅可比和海森,让你开始准备面试,同时帮助你建立一个良好的基础,成功地深入探索机器学习背后的数学,特别是神经网络。

这些概念将用 5 个衍生产品的例子来说明,这些例子是你面试时绝对应该随身携带的:

  1. 复合指数函数的导数— f(x)= eˣ
  2. 变基变指数函数的导数— f(x)= xˣ
  3. 多维输入函数的梯度— f(x,y,z) = 2ˣʸ+zcos(x)
  4. 多维函数的雅可比矩阵— f(x,y) = [2x,x √y]
  5. 多维输入函数的 hessian—f(x,y) = x y

导数 1:复合指数函数

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

指数函数是一个非常基础、常见和有用的例子。它是一个严格的正函数,即ℝ的 eˣ > 0 ,需要记住的一个重要性质是 *e⁰ = 1。*另外,你要记住指数是对数函数的倒数。这也是最容易求导的函数之一,因为它的导数就是指数本身,*即(eˣ)’ = eˣ.)*当指数与另一个函数结合时,导数变得更加复杂。在这种情况下,我们使用链式法则公式,即 f(g(x)) 的导数等于 f’(g(x))⋅g’(x):

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

应用链式法则,我们可以计算出 *f(x)= eˣ的导数。*我们先求出 *g(x)=x 的导数,即 g(x)‘=2x。我们还知道,ˣ)’=eˣ.*将这些相乘得到两个中间结果,我们得到

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

这是一个非常简单的例子,乍一看似乎微不足道,但它经常被面试官作为热身问题来问。如果你有一段时间没有看到衍生品,确保你能迅速对这些简单的问题做出反应,因为虽然这不会给你这份工作,但在这样一个基本问题上的失败肯定会让你失去这份工作!

导数 2。变基变指数函数

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

这个功能在面试中是一个经典,尤其是在金融/量化行业,这里对数学技能的测试甚至比科技公司的机器学习职位更深入。这有时会让受访者脱离他们的舒适区,但实际上,这个问题最难的部分是能够正确地开始。

当处理这种指数形式的函数时,要认识到的最重要的事情是,第一,指数和对数之间的反比关系,第二,每个指数函数都可以改写为自然指数函数的形式

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

在我们讨论 f(x) = xˣ的例子之前,让我们用一个更简单的函数 f(x) = 2ˣ.来演示这个性质我们首先使用上面的等式将 2 ˣ 重写为 exp(xln(2)) ,随后应用链式法则来推导合成。

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

回到最初的函数 f(x)=xˣ ,一旦你将函数改写为 f(x)=exp(x ln x) ,导数的计算就变得相对简单,唯一可能困难的部分是链式法则步骤。

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

注意,这里我们对指数 xln(x) 使用了乘积法则*(uv)’= u’v+uv’*。

这个函数通常在没有任何函数域信息的情况下被调用。如果你的面试官没有默认指定领域,他可能是在测试你的数学敏锐度。这就是问题的欺骗性所在。在不具体说明域的情况下,似乎为正值和负值都定义了 。但对于负数 xe.g.(-0.9)^(-0.9) ,结果是一个复数,具体为*-1.05–0.34 I*。一种可能的解决方法是将函数的定义域定义为ℤ⁻∪ℝ⁺0(进一步讨论见这里的),但是这对于负值仍然是不可微的。因此,为了正确定义 的导数,我们需要将定义域限制为严格的正值。我们排除 0 是因为对于定义在 0 中的导数,我们需要左边的极限导数(对于负值限制在 0 中)等于右边的极限导数(对于正值限制在 0 中),这是一个在这种情况下被打破的条件。自左极限

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

未定义,函数在 0 中不可微,因此函数的定义域仅限于正值。

在我们进入下一部分之前,我留给你这个函数的一个稍微高级一点的版本来测试你的理解: f(x) = xˣ 。如果您理解了第一个示例背后的逻辑和步骤,添加额外的指数应该不会造成任何困难,并且您应该得出以下结果:

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

导数 3:多维输入函数的梯度

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

到目前为止,一阶和二阶导数部分讨论的函数都是从ℝ到ℝ的映射,函数的定义域和值域都是实数。但是机器学习本质上是矢量的,函数是多维的。这种多维性的一个很好的例子是输入大小为 m 和输出大小为 *k 的神经网络层,即 f(x) = g(Wᵀx + b,*其中是线性映射 Wᵀx ( 具有权重矩阵 W 和输入向量 x )和非线性映射 g (激活函数)的元素式组合。在一般情况下,这也可以看作是从ℝᵐ到ℝᵏ.的映射

在 *k=1 的具体情况下,*的导数称为梯度 *。*现在让我们计算以下三维函数的导数,该函数将ℝ 映射到ℝ:

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

你可以把 f 想象成一个把大小为 3 的向量映射到大小为 1 的向量的函数。

多维输入函数的导数被称为梯度,用符号 nabla (倒置 delta ): ∇.表示将ℝⁿ映射到ℝ的函数 g 的梯度是 g 的一组 n 偏导数,其中每个偏导数是 n 变量的函数。因此,如果 g 是从ℝⁿ到ℝ的映射,那么它的梯度∇g 就是从ℝⁿ到ℝⁿ.的映射

*为了求我们函数 f(x,y,z) = 2ˣʸ + zcos(x) 的梯度,我们构造了一个偏导数的向量 *∂f/∂x,∂f/∂y, ∂f/∂z ,得到如下结果:

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

注意,这是一个类似于前一节的例子,我们使用等价关系 2ˣʸ=exp(xy ln(2))。

总之,对于将ℝ 映射到ℝ的多维函数,导数是将ℝ映射到ℝ的梯度 ∇ f,。**

在ℝᵐ到ℝᵏ的映射的一般形式中,其中将ℝᵐ映射到ℝᵏ的多维函数的导数是雅可比矩阵(而不是梯度向量)。让我们在下一节对此进行研究。

导数 4。多维输入输出函数的雅可比矩阵

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

从上一节我们知道,映射ℝᵐ到ℝ的函数的导数是映射ℝᵐ到ℝᵐ.的梯度但是对于输出域也是多维的情况,对于 k > 1 从ℝᵐ到ℝᵏ的映射呢?

在这种情况下,导数称为雅可比矩阵**。我们可以简单地将梯度视为雅可比矩阵的一种特殊情况,其维数为 m x 1 ,其中 m 等于变量的数量。函数 g 映射ℝᵐ到ℝᵏ的雅可比矩阵 J(g) 就是ℝᵐ到ℝᵏᵐ.的映射这意味着输出域的尺寸为 k x m是一个形状为 k x m 的矩阵。换句话说, J(g) 的每一行 i 代表 g. 的每个子功能 gᵢ 的梯度 ∇ gᵢ*

让我们推导上面定义的函数 f(x,y) = [2x,x √y] 映射ℝ到ℝ,因此输入和输出域都是多维的。在这种特殊情况下,由于平方根函数不是为负值定义的,我们需要将 y 的域限制在ℝ⁺.我们的输出雅可比矩阵的第一行将是函数 1 的导数, i.e.∇ 2x,,第二行是函数 2 的导数,,即 ∇ x √y.

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

在深度学习中,雅可比矩阵特别令人感兴趣的一个例子是可解释性领域(例如,参见基于敏感性的神经网络解释),该领域旨在理解神经网络的行为,并分析神经网络输出层对输入的敏感性。雅可比矩阵有助于研究输入空间的变化对输出的影响。这可以类似地应用于理解神经网络中中间层的概念。

总之,记住梯度是一个标量相对于一个向量的导数,雅可比是一个向量相对于另一个向量的导数。

导数 5。多维输入函数的 Hessian

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

到目前为止,我们的讨论只集中在一阶导数上,但是在神经网络中我们经常会谈到多维函数的高阶导数。一个特殊情况是二阶导数,也称为海森矩阵**,并表示为 H(f)∇(纳布拉平方)。从ℝⁿ到ℝ的映射是从ℝⁿ到ℝⁿⁿ.的映射***

**让我们分析一下,在输出领域,我们是如何从ℝ走向ℝⁿ*ⁿ的。一阶导数,梯度 ∇g,是从ℝⁿ到ℝⁿ的映射,其导数是雅可比矩阵。因此,每个子函数 ∇gᵢ 的推导导致ℝⁿ到ℝⁿ的映射,具有 n 个这样的函数。你可以这样想,就好像导出梯度向量的每个元素展开成一个向量,从而成为向量的向量,一个矩阵。

为了计算 Hessian,我们需要计算所谓的交叉导数,t 也就是,首先相对于 x 求导,然后相对于 y 求导,反之亦然。有人可能会问,我们取交叉导数的顺序是否重要;换句话说,海森矩阵是否对称。在函数 f 是𝒞的情况下,两次连续可微,施瓦兹定理陈述交叉导数相等,因此海森矩阵是对称的。一些不连续但可微的函数不满足交叉导数相等。

构造函数的 Hessian 等价于求标量值函数的二阶偏导数。对于特定示例 f(x,y) = x y ,计算产生以下结果:

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

你可以看到交叉导数 6xy 实际上是相等的。我们首先针对 x 进行推导,得到 2xy、,然后再针对 y、得到 6xy。对角元素是简单的fᵢ,用于xy的每个一维子功能

一个扩展将是讨论多维函数的二阶导数将ℝᵐ映射到ℝᵏ的情况,这可以直观地视为二阶雅可比。这是从ℝᵐ到ℝᵏᵐ的映射,一个 3D 张量。类似于 Hessian,为了找到 Jacobian 的梯度(第二次微分),我们对 k x m 矩阵的每个元素进行微分,得到一个向量矩阵,一个张量。虽然不太可能要求您手动进行此类计算,但了解多维函数的高阶导数非常重要。

结论

在本文中,我们回顾了机器学习背后的重要微积分基础。我们用一维和多维函数的例子演示了它们,讨论了梯度、雅可比和海森。这篇综述是对可能的面试概念的彻底演练,也是对机器学习背后的微积分相关知识的概述。

针对您的应用的 5 种开发运维监控策略

原文:https://towardsdatascience.com/5-devops-monitoring-strategies-for-your-application-6fb01363a928?source=collection_archive---------32-----------------------

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

妮可·沃尔夫在 Unsplash 上的照片

如今,越来越多的公司采用 DevOps 进行持续集成和持续交付。在 DevOps 领域,自动化经常成为焦点。

这并不奇怪。为什么?

根据 Puppet 的 2019 年开发运维状况报告,开发运维自动化对组织的整体效率具有积极影响

然而,也许比自动化更重要的是,DevOps 监控是另一个关键元素,有助于在交付管道的每个阶段提高意识。

您可能需要考虑监控的许多方面。比如什么?

您应该监控什么,使用哪些工具,或者如何开始您的 DevOps 监控策略。

虽然监控先于 DevOps,但 DevOps 进一步改变了软件开发过程,以至于监控也必须发展。软件开发的整体步伐随着开发运维而加快,团队现在正在自动化集成和测试,并在云中部署软件,以快速的时间表和连续的交付。

有了 DevOps,现在需要监控的东西更多了,从集成、供应到部署,团队需要使用 DevOps 监控策略来有效地监控项目的不同方面。

对于您的应用,最好的 5 种 DevOps 监控策略是什么?

为了帮助您在快速变化的环境中使用 DevOps 监控策略,我们创建了一个通用框架来帮助您了解如何开始、监控哪些内容、使用哪些工具来满足监控需求,以及您可以在何处进行整合。

确定您应该监控的内容

有效开发运维监控策略的第一步?

确定应用程序中应该监控的内容。监控目标可以分为几个主要类别,您可能希望至少涵盖每个类别的一个方面。

这些类别包括:

  • 服务器运行状况
  • 应用程序日志输出
  • 脆弱点
  • 发展里程碑
  • 用户活动

发展里程碑

监控开发里程碑是您的 DevOps 策略运行情况的指示器。这是深入了解您的工作流程并确定您的团队运作效率的有效方式。跟踪每次冲刺的持续时间;缺陷被识别、记录和修复的速度;和预期交付特性的比率。

询问以下问题:

  • 我们能赶上最后期限吗?如果没有,是什么阻碍了这一进程?
  • 团队是否有效地遵循 DevOps 方法?

尽可能整合监控工具,以简化和加快故障排除。使用开源和开放许可代理来扩展技术并保持独立于供应商。

还有什么?

您可以使用机器学习技术来自动化配置任务并节省时间。

脆弱点

漏洞可以大致分为两类:通过国家漏洞数据库(NVD)维护的列表广为人知或可识别的应用程序中的已知弱点或漏洞,以及由于应用程序中不安全的编码实践、不安全的设计或不安全的架构而出现的漏洞。

企业必须监控这些漏洞并及时缓解它们。这些漏洞可以通过多种方式解决,例如修改第三方依赖关系、定期进行安全代码审查、培训您的软件开发团队以及雇佣有经验的专业人员。

用户活动监控

用户活动监控可能是 DevOps 最明显的监控策略之一。应持续监控异常请求或意外输入,例如多次失败的登录尝试、异常登录次数和未知登录设备,以确保只有授权用户才能访问系统。

还有呢?

监控用户行为还有助于检测异常活动,如访问权限提升。例如,开发人员试图访问管理员帐户。

这种不寻常的行为和请求可能会引发怀疑,并使您更加意识到由于用户活动监控不力而可能发生的潜在内部威胁或其他网络攻击。

应用程序日志输出

监控应用程序日志输出经常被低估,但是如果您的服务是分布式的,并且您没有集中的日志记录,那么这个任务就困难得多。

此外,如果错误和漏洞没有被实时检测到,它们就没有多大价值。确保错误代码或易错代码实时生成通知,并且这些通知易于搜索,这一点很重要。在生产环境中跟踪 bug 或错误的能力是一个巨大的优势。

服务器运行状况

通过分析可用资源的性能和正常运行时间来监控服务器的健康状况。确保配置正确,扫描功能正常工作,例如识别应用程序中的漏洞。此外,确保服务器强化到批准的配置。

确定监控功能

DevOps 的监控工具应该能够从开源代理收集性能时间序列数据,跟踪机器学习在警报和报告方面的应用,并在可扩展的时间序列数据库中收集数据。

以下是一个或多个监控工具可能提供的一组功能:

  • 仪表盘:预置易于定制的仪表盘,与同行分享。
  • 诊断:对您的整个应用程序堆栈进行故障排除,以识别潜在的漏洞,并确保所有功能都按预期运行。
  • 数据收集器:每种编程语言和中间件的开源和开放许可代理。
  • 数据保留:时序性能数据和日志数据。
  • 通知:可与升级服务和即时消息集成的实时警报。
  • 报告:深入的见解和报告,有助于确定绩效热点和规划。
  • REST API :包含自定义数据,通过文档化 API 更新配置,访问任何数据。
  • 机器学习:非实时的容量损失分析和实时的异常检测。

监控您的整个应用体系

您选择的 DevOps 监控工具应该能够端到端地监控您的整个堆栈,并提供更快的故障排除和快速补救。此列表本质上并不全面,而是旨在涵盖应用中最大的功能集:

基础设施监控

基础设施监控是全栈应用监控策略的关键组成部分。

工具应该测量什么?

  • 有效性
  • CPU 使用率
  • 磁盘使用
  • 正常运行时间
  • 响应时间
  • 数据库
  • 储存;储备
  • 成分
  • 虚拟系统
  • 表演
  • 用户权限
  • 安全性
  • 网络交换机
  • 流程级使用
  • 应用程序的吞吐量
  • 服务器的负载

此外,它们还应该能够提供趋势的历史、测量的时间序列数据,以及具有过程级向下钻取的数据的集合。

网络监视

网络监控工具应该能够测量性能指标,如延迟、不同端口级别的指标、带宽、主机的 CPU 使用率、网络数据包流量,并提供自定义指标。一般来说,网络监控工具需要一个跨各种网络拓扑(如基于云的网络和异构网络)工作的平台。

应用程序性能监控

应用程序性能监控是通过应用程序上可用的跟踪和分析来搜索、收集和集中日志的地方。

它还有助于提供对性能的测量,如可用性、错误率、吞吐量、用户响应时间、慢速页面、页面加载、第三方 JavaScript 慢速、trackSLA、浏览器速度,以及对最终用户事务的检查。

尽管这个列表并不详尽,但它应该让您了解现有的监控工具提供了什么,以及 DevOps 监控策略中有哪些漏洞。

评估开发运维工作流的监控工具

创建一个大纲框架,开发运维团队可以将其作为评估流程的起点。

通过概述适用于您的整体 DevOps 监控策略的目标,您可以将评估期间的关注点缩小到特定问题,例如:

“这个监控工具符合我的目标和需求吗?”

了解 DevOps 监控工具及其提供的功能将有助于您在评估过程中深入了解特性功能。

还有呢?

了解与每个监控方面(如应用程序监控或基础架构)相关的监控功能,将有助于为更具体、更全面的 DevOps 监控策略提供最佳选择。

利用工具进行有效的开发运维监控

以下是当今市场上最好的 DevOps 监控工具:

  • Collectl — Collectl 将各种性能监控工具整合到一个平台中。它可以监视各种子系统,如节点、存储、处理器、TCP 和文件系统。Collectl 运行在所有的 LInux 发行版上,可以在 Debian 和 Red Hat 仓库中获得。
  • Consul — Consul 在众多数据中心环境中提供键值存储、发现、故障检测和其他功能。它与用于查询服务的内置 DNS 服务器集成在一起,并且支持现有的基础设施,而无需修改代码。
  • 上帝 —上帝使用 Ruby 框架来提供一种简化的监控方法。它可以在 BSD、Darwin 系统和 Linux 上获得。上帝提供了一种编写事件条件和轮询事件的简化方法。它还提供了一个集成的自定义通知系统。
  • Ganglia — Ganglia 利用了针对集群联合优化的分层设计。它使用 XDR 和 XML 等常见技术进行数据表示和传输,并使用独特的数据结构和算法方法来实现高级别的并发性并减少节点上的开销。
  • Nagios — Nagios 结合使用无代理和基于代理的软件工具,为 Unix、Linux、Windows 和 web 环境提供应用程序、网络和服务器监控。该系统使用各种报告格式和可视化来提供正常运行时间、响应和可用性。

外卖食品

企业创建和实施有效的 DevOps 监控策略至关重要。DevOps 中更快的开发过程带来了几个挑战,特别是由于快速过程或缺乏测试而可能留下的系统中的漏洞。

拥有高效且可扩展的 DevOps 监控策略将有助于您深入了解您的应用,在流程的早期发现漏洞,并减少漏洞。请记住,虽然监控的一个方面可能比另一个方面对您的业务更重要,但评估您的应用程序或项目的各个方面是至关重要的。

如果您对 DevOps 监控策略有任何疑问或需要任何帮助,请联系我们。

关于作者:

Steve Kosten 是 Cypress Data Defense 的首席安全顾问,也是“Java/JEE 中的 SANS DEV541 安全编码:开发可防御应用程序”课程的讲师。

Python 中下划线的 5 种不同含义

原文:https://towardsdatascience.com/5-different-meanings-of-underscore-in-python-3fafa6cd0379?source=collection_archive---------3-----------------------

确保使用正确的语法

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

Erik Witsoe 在 Unsplash 上拍摄的照片

如果你是一个 Python 程序员,你可能对下划线很熟悉。Python 使用两种类型的下划线:单下划线_和双下划线__。不要小看 Python 中的下划线,这是一个非常强大的语法。在这篇文章中,我将谈论 5 种不同的下划线模式。

单个独立下划线 _

单个下划线_是一个 Python 标识符的有效字符,所以它可以用作变量名。

  1. 代表解释器中的最后一个表达式

根据 Python 文档,在交互式解释器中使用特殊标识符_来存储上次评估的结果。它存储在内置模块中。

这里有一个例子。首先,我们检查_没有存储在内置模块中,然后我们编写一个没有变量名的表达式。如果我们再次检查内置模块,我们会在模块中找到_并且值是最后一次评估。

>>> '_' in dir(__builtins__)
False
>>> 1+1
2
>>> '_' in dir(__builtins__)
True
>>> _
2

2。代表我们不关心的价值观

单下划线_的另一个用例是表示你不关心的或者在程序后面不会用到的值。如果您将类似 Flake8 的 linter 应用到您的程序中,如果您分配了一个变量名但从未使用过,您将从 linter 得到一个错误( F841 )。把自己不在乎的变量赋给_就能解决这个问题。

让我们看一些代码。 Example1 使用_来表示列表中每个元素的索引。在例 2 中,我们只关心来自元组的yearmonthday,所以把_赋给其余的(时、分、秒)。但是如果我们打印出_,我们只会得到最后一个表达式,也就是 59。

来自 Python 3。,它支持扩展的可迭代解包,这意味着我们可以使用*_来表示多个值。在示例 3* 中,_实际上代表了我们想要忽略的值的列表。

Lambda 功能也支持_。在例 4 中,lambda 函数用于 monkeypatch 函数random.randint,并且将始终生成相同的输出。在这种情况下,输入参数不再重要。

3。用于数字分组的可视分隔符

从 Python 3.6 开始,下划线_也可以用作数字分组的可视分隔符。正如 PEP515 所说,它适用于整数、浮点和复数文字。

integer = 1_000
amount = 1_000_000.1
binary = 0b_0100_1110
hex = 0xCAFE_F00D
>>> print(amount)
1000000.1
>>> print(binary)
78
>>> print(hex)
3405705229

单前导下划线 _var

根据 PEP8 ,单前导下划线_var供内部使用。从 M 导入*不导入名称以下划线开头的对象。

_在变量或方法名前是一个弱内部使用指示器。它警告开发人员不要公开导入和使用这个变量、方法或函数。然而,Python 并没有完全阻止它们被导入和使用。

在下面的例子中,我们有一个公共变量external和一个私有变量_internal。如果我们做通配符导入 from m import *,不包括_internal变量(main1.py)。但是如果我们显式导入_internal(main 2 . py)或者使用常规导入 (main3.py)就可以了。

下划线-单前导. py

单个前导下划线在类中被大量使用。程序员可以创建私有变量和方法,但是和前面的例子一样,这些变量和方法仍然可以从外部使用。

下划线-单前导-class.py

一般来说,单个前导下划线只是一种命名约定,表示变量或函数供内部使用。如果程序员真的想的话,他们仍然可以导入这个名字。

单个尾随下划线var_

使用单个尾随下划线的原因只有一个,那就是避免与 Python 关键字冲突。这在 PEP8 中也有提及。

我们可以使用keyword模块来检查 Python 中的关键字列表。如果你想给一个变量名叫做global,那么你应该把它命名为gloabl_

下划线-关键字. py

双前导下划线__var

到目前为止,我们讨论的模式基本上是不同的命名约定,但是使用双前导下划线,Python 的行为会有所不同。

Python 解释器将对带有前导下划线的标识符进行名称处理。名称篡改是在一个类中覆盖这些标识符的过程,以避免当前类及其子类之间的名称冲突。

综上所述,__var在类中会有不同的名字。让我们看看下面的例子。该示例使用内置函数[dir](https://docs.python.org/3/library/functions.html#dir)返回当前本地范围内的名称列表。在列表的最后,我们看到了_hourdaymonthyear,这意味着我们可以通过time._hourtime.year直接检索这些属性。

然而,对于__minute,它却另有故事。其名称被覆盖为_Time__minute

下划线-双前导. py

这将产生两个后果:

  1. 属性__day在类Time之外不可访问。如你所见,__day没有被Time类识别,它被替换为_Time__day
print(time.__day)# AttributeError: 'Time' object has no attribute '__day'print(time._Time__day)
# 10

2.属性__day不能在Time的子类中被覆盖。在下面的例子中,我们创建了一个从类Time扩展而来的子类TimeSubClass,并使用dir来检查本地名称。

在输出中,你可以找到_TimeSubclass__day_Time__day_monthyear。这意味着_monthyear已经被新值覆盖,但__day没有。

下划线-双前导-subclass.py

让我们检查一下数值。_TimeSubclass__day被赋予新值,而_Time__day仍为原始值。

print(time_subclass._TimeSubclass__day)
# 30
print(time_subclass._Time__day)
# 1

虽然不能通过直接访问获得值,但是仍然可以通过方法获得值,在方法中,返回self.__day。对@property也有效。

下划线-double-method.py

双前导和尾随下划线__var__

与单尾随下划线不同,双尾随下划线没有特殊含义。你大概可以把var__看成是var_的延伸。

然而,双前导和尾部下划线__var__是完全不同的,它是 Python 中非常重要的模式。Python 不会对这样的属性应用名称处理,但是带有双前导和尾随下划线的名称在 Python 中是为特殊用途而保留的。他们被称为**神奇的名字。**你可以查看 Python 文档来获得魔法名称列表。像__init____call____slots__这些名字都是神奇的方法。

这些魔法属性和魔法方法是允许被覆盖的,但是你需要知道你在做什么。让我们看一个例子。__str__是一个返回对象的字符串表示的方法。当你做print()或者str()的时候这个方法被调用。在这个例子中,我们覆盖了字符串表示,然后我们将在输出中得到一个新的格式。

下划线-双前导-尾随. py

你可以有一个自定义的名字,像__day__一样有双下划线。Python 会把它作为一个常规的属性名,不会对它应用名称篡改。但是,没有很强的理由就起这样的名字,并不是一个好的做法。

结论

在本文中,我们讨论了 Python 中下划线的 5 种不同模式。我们来总结一下。

  1. 单独立下划线_单前导下划线_var单尾随下划线var_

带有单下划线的模式基本上是命名约定。Python 解释器不会阻止它们在模块/类之外被导入和使用。

2.双前导下划线__var双前导和尾随下划线__var__

带有双下划线的模式更加严格。它们要么不允许被覆盖,要么需要一个好的理由来这样做。请注意,双尾下划线var__没有特殊含义。

我希望你喜欢这篇文章!如果你有任何想法,请在下面留下你的评论。

参考

[## 下划线(_)在 Python 中的作用

许多 Python 开发人员不知道中下划线(_)的功能。它帮助用户编写 Python…

www.datacamp.com](https://www.datacamp.com/community/tutorials/role-underscore-python) [## Python-dbader.org 中下划线的含义

Python 中单下划线和双下划线(“dunder”)的各种含义和命名约定,如何命名…

dbader.org](https://dbader.org/blog/meaning-of-underscores-in-python)

数据科学家的 5 个不要和 5 个要

原文:https://towardsdatascience.com/5-dont-and-5-do-for-data-scientist-9545953d8b50?source=collection_archive---------48-----------------------

处理数据时要记住的建议

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

艾米丽·莫特在 Unsplash 上的照片

在收集了我们的数据之后,作为一名数据科学家,我们只想继续进行我们的数据分析,并创建我们完美的机器学习模型。我们拥有世界上所有的创造力,只是受到大脑中的东西的限制,尽管我们的数据中有一些事情是错误的。

因此,作为一名数据科学家,以下是我个人的五条禁忌。

尽管如此,我们的数据还是存在一些错误。

1.丢弃数据

不要:未经适当分析丢弃数据

当我们收集数据并进行调查时,数据中必然会出现缺失数据或异常值。我经常在有抱负的数据科学家身上看到,他们是如何放弃这些数据而不进行任何进一步的分析的。通常,理由是“只有少量数据”或“这些数据根本不会影响机器学习模型。”这种思路是危险的。

:仔细分析后把数据掉。

我并没有说你不能放弃这些数据,而是说只有在进行彻底的分析后才能这样做。这些缺失数据或异常数据可能包含一个重要的模式,有助于回答我们的数据科学问题。

2.依靠准确性

不要:只靠准确性来衡量“成功”

我们已经分析了我们的数据,并创建了机器学习模型。然后我们对这个模型进行评估,结果显示准确率为 98%。然后,您认为这是一个已经可以部署的有用模型。诚然,较高的准确性可能意味着一个伟大的模型,但仅仅依靠准确性来衡量数据或模型的成功将是错误的。

:从许多其他指标来衡量“成功”。

根据我们提出的问题,准确性可能不是代表模型的最佳度量;这是常有的事。有很多指标可以更好地代表我们的数据,比如精度、召回率、F1、日志丢失等等。

例如,我们创建了一个预测贷款违约的模型。在商业案例中,我们不会仅仅根据准确性来衡量模型的成功,但是我们会首先考虑什么是最重要的。预测违约案例是否更重要?从这里,我们挑选最好使用的指标。

3.采摘樱桃

不要:选择数据子集来支持你的假设。

你进行了适当的研究,分析了你的数据,然后发现我们之前的说法是错误的。然后你会想,“选择我认为对我的假设有利的数据会不会更好?."如果你有这种感觉,并且只选择支持你的主张的数据,那么这是一件错误的事情。

:让数据说话。

让数据告诉你他们有什么样的模式,然后从那里开始工作。有时很难接受我们的数据没有解释我们想要的东西,但是如果你只是选择你想看的数据,那么这将导致灾难性的决策。

也适用于机器学习案例。是的,选择数据的子集可能会提高准确性,但是要小心,因为不是所有的情况都可以用您的数据来表示。例如,当您删除数据中 25 岁以下的人时,准确性提高了 25%。它可能看起来不错,但是你的模型不能代表任何 25 岁以下的人。

4.因果关系存在

不要:没有经过适当的分析就假设相关性意味着因果关系

我们有了数据,然后进行相关分析。从分析中可以看出,两个变量之间有很强的线性相关性。这里你认为关系的发生是因为一个变量导致另一个变量出现,反之亦然。虽然它可能是正确的,但作为数据科学家,你首先需要有自己的怀疑,因为大多数时候,相关性并不意味着因果关系。很多时候,事情都是因为机缘而相关联的。

:找到支持因果关系假设的证据。

它需要比“皮尔逊”相关或“斯皮尔曼”相关更多的证据。写出适当的研究方法,阅读大量文献来寻找证据。

5.统计假设

不要:在不知道假设的情况下使用统计或机器学习模型

我多次看到有抱负的数据科学家应用统计方法(例如,t 检验、方差分析、皮尔逊相关等。)或机器学习模型(线性回归、随机森林、Boosting 等。)而在使用它们之前不知道假设是什么。虽然它仍然可以使用,但违反这一假设的代价将是一个不太可靠的结果;意味着统计分析或机器学习模型会产生误导。

Do :读取假设,但不要强迫数据遵循这个假设。

如果你想要一个可信的结果,你需要遵循这个假设。举个例子;独立 t 检验要求数据服从正态分布、独立且同质异方差。违反其中一个假设将意味着结果不太可靠。在这种情况下,您可能会想让数据符合假设,但这也是不可取的。虽然您可以尝试将数据转换为正态分布(这是大多数情况下发生的情况),但原始模式将会消失。如果您可以尝试另一种方法,即数据可以满足假设,而无需进行任何转换或挑选,那就更好了。

结论

在这里,我向您展示了作为一名数据科学家,我个人应该做和不应该做的五件事情,虽然其他人可能会认为还有许多其他事情更重要,但对我来说,作为一名数据科学家,这五件事情需要记住。

如果您喜欢我的内容,并希望获得更多关于数据或数据科学家日常生活的深入知识,请考虑在此订阅我的简讯。

如果您没有订阅为中等会员,请考虑通过我的介绍订阅。

定制熊猫图和图表的 5 种简单方法

原文:https://towardsdatascience.com/5-easy-ways-of-customizing-pandas-plots-and-charts-7aefa73ff18b?source=collection_archive---------4-----------------------

Pandas 为您提供了一种简单而又吸引人的方式来从您的数据中制作图表。但是有时候你想要一些不同的东西。这里有一些建议

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

也许你是一名正在整理新故事的数据记者,或者是一名正在准备论文或演示的数据科学家。你已经有了一套漂亮的图表,看起来不错,但稍加调整会有所帮助。也许你想给他们所有的头衔。也许有些会用网格来改善,或者刻度在错误的位置或者太小而不容易阅读。

您知道如何制作折线图、条形图、散点图等,但并不精通 Pandas plot 函数的所有细节(如果看不到下面的链接)。

[## 用熊猫绘图:数据可视化导论

如果您是一名初露头角的数据科学家或数据记者,能够可视化您的数据会让您有能力…

medium.com](https://medium.com/codefile/plotting-with-pandas-an-introduction-to-data-visualization-8bd7c0831650)

你不必坚持你被给予的东西。有相当多的参数允许你改变你的图表的各个方面。你可以改变标签,添加网格,改变颜色等等。

使用底层的 matplotlib 库,你可以改变你的绘图的方方面面,这可能会变得复杂。然而,我们将看看一些我们可以用熊猫做的更简单的事情。

在我们开始之前,您需要导入适当的库并获取一些数据。

让我们从导入运行示例所需的所有库开始

# The first line is only required if you are using a Jupyter Notebook

%matplotlib inline import numpy as npimport pandas as pdimport matplotlib.pyplot as plt

这都是非常标准的东西,我以前的文章应该很熟悉。不过有一点需要注意的是第一行——如果你像我一样使用 Jupyter 笔记本,那么你可能需要包括这一行。如果你正在使用一个普通的 Python 程序,或者 Python 控制台,那么你应该而不是包括它。

获取一些数据

您需要一些数据来处理,所以我们将使用与之前相同的数据集:2008 年英国伦敦的天气数据。

像这样加载数据:

weather = pd.read_csv(‘https://raw.githubusercontent.com/alanjones2/dataviz/master/london2018.csv')print(weather[:2])Year Month Tmax Tmin Rain Sun
 0 2018 1 9.7 3.8 58.0 46.5
 1 2018 2 6.7 0.6 29.0 92.0

print 语句打印出表的前几行,代表一月和二月。你可以看到有四个数据(除了年份和月份), Tmax 是该月的最高温度, Tmin 是最低温度, Rain 是以毫米为单位的降雨量, Sun 是该月的日照总时数。

所以让我们画一个简单的图表,展示一年中最高温度的变化

weather.plot(x=’Month’, y=’Tmax’)plt.show()

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

这是默认图表,完全可以接受。但是我们可以改变一些事情让它变得更好。

1.改变尺寸和颜色

你可能想做的第一件事就是改变尺寸。为此,我们添加了 figsize 参数,并赋予其尺寸 xy (以英寸为单位)。这些值由一个元组给出,如下所示。

为了改变颜色,我们设置了颜色参数。最简单的方法是使用一个代表有效网页颜色的字符串,如“红色”、“黑色”或“蓝绿色”。(注:你可以在维基百科找到网页颜色列表。)

weather.plot(x='Month', y='Tmax', figsize=(8,5), color='Red')plt.show()

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

2.设置标题

对于一篇文章、一篇论文或一个演示文稿,你很可能想要为你的图表设置一个标题。正如您可能已经收集到的,这主要是知道什么是正确的参数并正确地设置它们。设置标题的参数是标题。当然啦!代码如下:

weather.plot(x=’Month’, y=’Tmax’, title=”Maximum temperatures”)plt.show()

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

3.显示网格

虽然默认图表很好,但有时您希望观众更容易看到图表中的某些值。在绘图上绘制网格线会有所帮助。

要绘制网格,只需将网格参数设置为。熊猫默认

weather.plot(x=’Month’, y=’Tmax’, grid=True)plt.show()

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

4.改变传奇

图例以代表 y 轴的列名给出。如果这不是一个可接受的描述性名称,您可以更改它。或者,事实上,你可以完全消除它!

如果我们想要移除它,我们将参数图例设置为。如果我们想改变标签,我们结合标签参数,并将其设置为我们想要显示的字符串。

weather.plot(x=’Month’, y=’Tmax’, legend=False)plt.show()

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

weather.plot(x=’Month’, y=’Tmax’, label=’Max Temp’)plt.show()

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

5.自定义刻度

刻度是在 xy 轴上的刻度。你可以看到,在我们的图表上,它们在 y 轴上被标注为 10 到 25,在 y 轴上被标注为 2 到 12。鉴于底部的集合应该代表月份,如果它们从 1 到 12 会更好。我们可以用元组来设置刻度标签。如果我们想显示所有的十二个月,我们可以将参数 xticks 设置为(1,2,3,4,5,6,7,8,9,10,11,12)。你可以用 yticks 参数做类似的事情。看一下这段代码:

weather.plot(x=’Month’, y=’Tmax’, xticks=range(1,13), yticks=(0,10,20,30))plt.show()

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

如您所见,我已经显式设置了两组刻度。 y 刻度现在从 0 开始,以十为单位增加到 30, x 刻度每月显示一次。但是我在这里有点偷偷摸摸,没有使用我在上面展示的元组,而是使用 Python range 函数来生成一个从 1 到 12 的列表(少打字!).

如果您想完全删除这些记号,只需将其中一个参数设置为空元组即可,例如 xticks=()。

weather.plot(x=’Month’, y=’Tmax’, xticks=())plt.show()

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

如果你想更强调记号,你可以改变字体大小。在下面的例子中,你可以看到如何。

plot = weather.plot(x=’Month’, y=’Tmax’, xticks=range(1,13), fontsize=18)plt.show()

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

可能会变得很乱

我的意思是你的代码可能会变得混乱。如果你想设置刻度、标题、标签、网格等等,该怎么办呢?首先,做这个情节的代码行会很长,其次,如果你有几个情节让你发现自己在重复它。

这里有一个解决方案。

假设您希望所有的图看起来都一样。您要做的是定义一个字典,其中包含您想要应用于所有图表的所有参数,如下所示:

plot_kwargs={‘xticks’:range(1,13),
 ‘yticks’:(0,10,20,30),
 ‘grid’:True,
 ‘fontsize’:12}

然后,您可以利用 Python 的**操作符,而不是显式地输入所有的参数,该操作符会将一个字典扩展为一个关键字参数列表。我将变量 plot_kwargs 称为 kwargs 是包含关键字参数的变量的常规名称(这就是它们是什么)。

像这样使用它们:

weather.plot(y=’Tmax’,x=’Month’, **plot_kwargs)plt.show()

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

现在,您也可以对其他图使用相同的字典,例如:

weather.plot.scatter(y=’Tmax’,x=’Month’, legend=True, label=”Min Temperature”, **plot_kwargs)plt.show()

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

在这里,我使用了 plot_kwargs 参数来设置默认参数,但是为单独的图显式地设置这些参数。

好了

嗯,不。不是真的。使用 Pandas 和 matplotlib,您可以做很多事情来定制您的地块。您也可以在将图保存到文件时进行更改。一篇文章涵盖的内容实在太多了。

谢谢,看到了文章的结尾,希望你觉得有用。

关于格式的快速附言。所有的代码都很短,但是有些行有点长,而且是换行的——所以我在每一行后面都加了一个空行,这样你就可以看到应该在一行上的内容。文章末尾的字典分配中唯一的例外,看起来不错。

[## 用熊猫绘图:数据可视化导论

如果您是一名初露头角的数据科学家或数据记者,能够可视化您的数据会让您有能力…

medium.com](https://medium.com/codefile/plotting-with-pandas-an-introduction-to-data-visualization-8bd7c0831650)

5 优雅的 Python 熊猫函数

原文:https://towardsdatascience.com/5-elegant-python-pandas-functions-a4bf395ebef4?source=collection_archive---------7-----------------------

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

图片来源:Pixabay &谷歌照片

五只美丽的熊猫为日常数据科学的使用发挥作用

在机器学习和数据科学项目的日常数据处理中,Pandas 是使用最多的 Python 库之一。像 Numpy 一样,Pandas 用许多优雅构建的函数统治着数据科学、机器学习和人工编程领域,这些函数为每个从业者的武器库增添了力量。在这里,我重申一些优雅的功能,这些功能使 Pandas 成为数据科学家和机器学习工程师的首选库。

(1)换档()

假设您遇到了这样一种情况,您需要移动数据帧中的所有行,或者需要使用数据帧中前一天的股票价格。也许我们想在数据集中构建最近三天的平均温度;Shift()将是实现所有这些目标的理想方式。

Pandas Shift()函数,将指数移动所需的周期数。该函数采用一个称为周期的标量参数,它代表所需轴的移动次数。这个函数在处理时间序列数据时很有用。我们可以使用 fill_value 来填充超出边界的值。

import pandas as pd
import numpy as npdf = pd.DataFrame({'DATE': [1, 2, 3, 4, 5],
                   'VOLUME': [100, 200, 300,400,500],
                   'PRICE': [214, 234, 253,272,291]})print(df)

    DATE  VOLUME  PRICE
0     1     100    214
1     2     200    234
2     3     300    253
3     4     400    272
4     5     500    291df.shift(1)DATE  VOLUME  PRICE
0   NaN     NaN    NaN
1   1.0   100.0  214.0
2   2.0   200.0  234.0
3   3.0   300.0  253.0
4   4.0   400.0  272.0# with fill_Value = 0df.shift(1,fill_value=0)DATE  VOLUME  PRICE
0     0       0      0
1     1     100    214
2     2     200    234
3     3     300    253
4     4     400    272

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

现在,如果我们需要将前一天的股票价格作为一个新列,我们可以使用如下的 shift。

df['PREV_DAY_PRICE'] = df['PRICE'].shift(1,fill_value=0)
print(df)DATE  VOLUME  PRICE  PREV_DAY_PRICE
0     1     100    214               0
1     2     200    234             214
2     3     300    253             234
3     4     400    272             253
4     5     500    291             272

我们可以很容易地计算出最近三天的平均股价如下,并创建一个新的功能栏。

df['LAST_3_DAYS_AVE_PRICE'] = (df['PRICE'].shift(1,fill_value=0) + 
                               df['PRICE'].shift(2,fill_value=0) + 
                               df['PRICE'].shift(3,fill_value=0))/3

现在数据帧会变成

DATE  VOLUME  PRICE     LAST_3_DAYS_AVE_PRICE
0     1     100    214               0.000000
1     2     200    234              71.333333
2     3     300    253             149.333333
3     4     400    272             233.666667
4     5     500    291             253.000000

我们也可以向前移动,从下一个时间步或下一行获取值。

df['TOMORROW_PRICE'] = df['PRICE'].shift(-1,fill_value=0)

现在数据帧应该是:

DATE  VOLUME  PRICE     TOMORROW_PRICE
0     1     100    214             234
1     2     200    234             253
2     3     300    253             272
3     4     400    272             291
4     5     500    291               0

有关选项和其他设置的更多详细信息,请参考 Pandas 文档

(2)值计数()

函数的作用是:返回包含唯一值的计数的对象。生成的对象可以按降序或升序排序,通过参数控制包括 NA 或排除 NA。请参考带有图示视图的 w 示例。该功能可用于 index 或 pandas 系列。

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

a = pd.Index([3,3,4,2,1,3, 1, 2, 3, 4, np.nan,4,6,7])
a.value_counts()#Output
3.0    4
4.0    3
1.0    2
2.0    2
7.0    1
6.0    1
dtype: int64

下面是这个系列的一个例子。

#Inb = pd.Series(['ab','bc','cd',1,'cd','cd','bc','ab','bc',1,2,3,2,3,np.nan,1,np.nan])
b.value_counts()#Outbc    3
cd    3
1     3
3     2
ab    2
2     2
dtype: int64

可以使用 Bin 选项,而不是计算值的唯一幻影,将索引划分到指定数量的半开 bin 中。

#Ina = pd.Index([3,3,4,2,1,3, 1, 2, 3, 4, np.nan,4,6,7])
a.value_counts(bins=4)#Out(2.5, 4.0]      7
(0.993, 2.5]    4
(5.5, 7.0]      2
(4.0, 5.5]      0
dtype: int64

关于选项和其他设置的更多细节,请参考熊猫文档

(3)面具()

mask 方法是对系列或数据帧的每个元素应用 if-then 条件。如果 Cond 为 True,则它使用 Other 中的值(默认值为 NaN ),否则将保留原始值。这个 mask()方法与 where()非常相似。

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

参考下面的数据帧,我们要改变所有被 2 整除但没有余数的元素的符号。

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

这可以通过 mask 函数轻松实现。

df = pd.DataFrame(np.arange(15).reshape(-1, 3), columns=['A', 'B','C'])
print(df)#Out
    A   B   C
0   0   1   2
1   3   4   5
2   6   7   8
3   9  10  11
4  12  13  14#mask operation to check if element is divided by 2 without any remainder. If match change the sign of the element as originaldf.mask(df % 2 == 0,-df)#OutA   B   C
0   0   1  -2
1   3  -4   5
2  -6   7  -8
3   9 -10  11
4 -12  13 -14

有关选项和其他设置的更多详细信息,请参考 Pandas 文档

(4) nlargest()

在许多情况下,我们会遇到这样的情况,我们需要找到某个系列或数据帧的前 3 名或后 5 名值(比如表现最好的 3 名学生的总分,或者在选举中获得总票数的 3 名垫底候选人)。

熊猫 nlargest()和 nsmallest()是这类数据处理需求的最佳答案。

下面的例子显示了 10 次观测的数据帧中的三个最大高度。

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

import pandas as pd
import numpy as npdf = pd.DataFrame({'HEIGHT': [170,78,99,160,160,130,155,70,70,20],
                   'WEIGHT': [50,60,70,80,90,90,90,50,60,70]},
                   index=['A','B','C','D','E','F','G','H','I','J'])print(df)HEIGHT  WEIGHT
A     170      50
B      78      60
C      99      70
D     160      80
E     160      90
F     130      90
G     155      90
H      70      50
I      70      60
J      20      70dfl = df.nlargest(3,'HEIGHT')
print(dfl)HEIGHT  WEIGHT
A     170      50
D     160      80
E     160      90

如果出现平局,那么使用**、、【第一】、【最后】、【所有】、(默认为“第一”)解决的选项很少。保留所有事件。我们将尝试在下面的例子中找到两个最大的高度。

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

dfl **=** df.nlargest(2,'HEIGHT',keep**=**'all')
print(dfl)HEIGHT  WEIGHT
A     170      50
D     160      80
E     160      90

保留最后一次出现。

dfl **=** df.nlargest(2,'HEIGHT',keep**=**'last')
print(dfl)HEIGHT  WEIGHT
A     170      50
E     160      90

保留第一个事件。

dfl **=** df.nlargest(2,'HEIGHT',keep**=**'first')
print(dfl)HEIGHT  WEIGHT
A     170      50
D     160      80

有关选项和其他设置的更多详细信息,请参考 Pandas 文档

5)n 最小()

nsmallest()也类似地工作,但是考虑的是习语最小滤波器。参考下面的例子,我们现在使用权重来寻找两个最小的权重。

import pandas as pd
import numpy as npdf = pd.DataFrame({'HEIGHT': [170,78,99,160,160,130,155,70,70,20],
                   'WEIGHT': [50,60,70,80,90,90,90,50,60,70]},
                   index=['A','B','C','D','E','F','G','H','I','J'])print(df)HEIGHT  WEIGHT
A     170      50
B      78      60
C      99      70
D     160      80
E     160      90
F     130      90
G     155      90
H      70      50
I      70      60
J      20      70dfs = df.nsmallest(3,'WEIGHT')
print(dfs)HEIGHT  WEIGHT
A     170      50
H      70      50
B      78      60

有关选项和其他设置的更多详细信息,请参考 Pandas 文档

最后注意:

这是熊猫的五个功能,不仅优雅而且富有表现力。在我看来,只要有类似的情况,我们就应该使用它们,因为它们不仅提供了更少的代码,而且是实现复杂问题解决方案的一种聪明方式。

感谢阅读。可以联系我@ LinkedIn

每月只需 5 美元,就可以无限制地获取最鼓舞人心的内容……点击下面的链接,成为 Medium 会员,支持我的写作。谢谢大家! https://baijayanta.medium.com/membership

你可能也会喜欢我的另一篇关于熊猫的文章。

[## 诱人的蟒蛇熊猫

数据科学变得容易:熊猫的几个令人愉快的使用例子

towardsdatascience.com](/alluring-python-pandas-834fe1656a34)

你现在应该关注的 5 个工程博客

原文:https://towardsdatascience.com/5-engineering-blogs-you-should-follow-bc897512639e?source=collection_archive---------17-----------------------

大型科技公司的伟大经验

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

来自 PexelsLeah Kelley 摄影

科技世界发展迅速,没有人愿意落在后面。在软件和数据领域,我们需要关注所有新的库和框架。我们,软件工程师,想要接近最先进的技术。幸运的是,有经验的、有能力的工程师愿意回馈社会。

一份知识分享就是一份知识收获。大型科技公司知道如何处理各种技术问题。这些范围从软件开发、数据库架构到用户体验优化,甚至如何创建无缝应用程序。分享这些技巧和诀窍的人给了我们在类似情况下的最佳实践。

我想和你分享我最喜欢的 5 个工程博客,排名不分先后。自从我职业生涯开始以来,我就一直遵循这些原则。他们的文章在完善我的技能的同时,给了我很大的见解和宝贵的经验。

优步工程

这种乘车共享独角兽的平台必须跟上每分钟数百万次的事件。他们的基础设施可以处理实时请求,并执行轨迹优化,为司机找到理想的路线。正如在他们的技术堆栈介绍中所说,优步的挑战来自于他们的特殊性。应用程序必须实时处理物理运输。

[## 优步工程博客

推动世界发展的软件工程和技术

eng.uber.com](https://eng.uber.com/)

在优步服务的世界里,每个人要么会动(司机、骑手),要么依赖会动的东西(吃东西的人)。这就形成了一个快速行驶的平台。用户每分钟都检查他们的进度。每个人都希望他们的服务能尽快送达。这给优步的工程师留下了两个优先事项:可用性和可伸缩性。

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

蛋库Unsplash 上拍摄的照片

优步工程博客包含各种各样的主题。人工智能、移动架构和数据。这是一个活跃的博客,它的新文章经常发表。我喜欢他们帖子中关于他们如何解决特定技术问题的细节,或者对他们内部工具的微妙介绍。看看这些努力,我们可以看到一个年轻热情的科技公司如何接近科技巨头规模的障碍。

[## 利用统计建模大规模监控数据质量

糟糕的数据无法做出好的商业决策。在优步,我们使用汇总和匿名数据来指导…

eng.uber.com](https://eng.uber.com/monitoring-data-quality-at-scale/)

网飞科技博客

这项流媒体服务必须面对大量的技术问题。它的应用为用户提供了视觉体验。工程团队必须向观众提供流畅、不间断的剧集。没有人希望他们的电影在迷人的场景中受到干扰。用户想要的只是在他们和他们的*“网飞和寒冷”*夜晚之间的一到两次点击。这种需求确实给网飞的技术建筑师们增加了一些负担。

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

照片由 Pexelscottonbro 拍摄

除了庞大的电影数据库,网飞还拥有用户的电影行为。由此而来的是重新培养其忠实客户的秘密武器:电影推荐。基于个性化的偏好,流媒体服务可以推荐你甚至不知道你会喜欢但你肯定会喜欢的电影。这背后的魔法是机器学习模型,它会持续关注你在网飞平台上挑选的每一部电影。

[## 网飞科技博客

了解网飞世界一流的工程成果、公司文化、产品开发等。

netflixtechblog.com](https://netflixtechblog.com)

可伸缩性是不可否认的。推出由基于观看行为的预测模型支持的 4K 流媒体服务可不是闹着玩的。当我们开始玩的时候,没有系统错误是可以容忍的。在他们的博客中,我们有从公司成立之初直到今天的网飞时代学到的那些经验教训。我们可以观察来自真实业务运营的真实情况,也可以观察创业独角兽。

博客包含关于网络、数据库管理、机器学习技术的文章。这些都是关于如何扩展实时服务和完美用户体验交付背后的实践的伟大见解。这个博客仍然是我最喜欢的数字知识来源之一。不仅因为我是个电影迷,还因为它强大的工程文化和独特的技术。

Airbnb 工程&数据科学

共享经济的繁荣向世界展示了许多颠覆性的创新,其中 Airbnb 是最早和最成功的一个。这家家庭共享平台成立于 2008 年,其峰值估值310 亿美元。

[## Airbnb 工程和数据科学

创意工程师和数据科学家构建一个你可以属于任何地方的世界。http://airbnb.io

medium.com](https://medium.com/airbnb-engineering)

作为一个家庭共享平台,Airbnb 的基础设施必须确保房东和房客之间顺利透明的交易。如果没有开发和部署科技界最可靠系统之一的工程团队,他们将无法做到这一点。

我尤其钦佩 Airbnb 的工程师操作他们庞大数据库的方式。每天都有大量的房源进出。这些修改必须毫不延迟地反映在他们的平台上。和大多数其他科技公司一样,Airbnb 的工程师必须在可用性和可扩展性方面做功课。

Airbnb 的工程文化以开放著称。他们构建自己的内部技术工具,除此之外,他们还为有需要的人开源这些工具。气流是在数据工程师中流行的工具之一。直观的工作流管理应用程序非常适合数据工程领域:数据管道调度程序、可配置的 ETL、链接操作等。

[## Airflow:一个工作流管理平台

马克西姆·博彻明

medium.com](https://medium.com/airbnb-engineering/airflow-a-workflow-management-platform-46318b977fd8)

除了数据之外,Airbnb 工程和数据科学还提供了大量其他世界顶级的学科。人工智能和机器学习,网络,移动应用,基础设施。我喜欢阅读他们的作品,直到今天,因为我总是觉得他们很有见地。

推特

根据他们 2019 年第三季度的报告,社交媒体平台拥有超过1.45 亿日活跃用户。在我写这篇文章的时候,平均每秒钟有 9000 条推文被发送,这几乎是每天 8 亿条推文。所有这些事件和交互都被压缩在一个完美运行的应用程序中。

[## 英语(美国)

Twitter 工程团队关于我们的工具、技术和服务的信息。

blog.twitter.com](https://blog.twitter.com/engineering/en_us.html)

我不时会津津乐道 Twitter 工程师们讲述他们如何克服技术障碍的每一个故事。我喜欢每一个社交媒体都有自己要解决的问题,并且与其他技术平台不同。在 2017 年的一篇文章中,基础设施和运营副总裁 Mazdak Hashemi 解释了 Twitter 有效性背后的可扩展性。他们有 36%的硬件分配专用于集群管理系统。这意味着他们非常重视高可伸缩性应用程序部署。

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

照片由 Pixabay像素拍摄

你的每一条转发,每一条评论,背后都有一个工程师来确保没有网络故障,没有超时请求,没有服务中断。Twitter 的工程师可能没有花哨的机器学习算法或不真实的数据量。他们默默无闻地工作,让庞大的用户群每天不间断地调用数十亿次交互。

我不像名单上的其他人那样花太多时间研究 Twitter 的工程故事,但这并不意味着它们不值得一读。凭借每篇文章的深刻和卓越,Twitter 始终不辜负其作为一家大型科技公司的技术专长。

Criteo R & D 博客

这家法国广告科技巨头在 Toucan Toco 创建的“2019 年最活跃的法国科技博客”名单中名列第一。总部设在巴黎,拥有大约 1000 名工程师(我是其中之一)。他们的研发部门因其最优秀的工程师和开放的文化而闻名国内。

[## R&D 评论博客

R&D 团队的科技故事

medium.com](https://medium.com/criteo-labs)

Criteo 工程团队拥有欧洲最大的 Hadoop 集群,他们知道如何处理数据和基础设施。尽管团队规模很小,但工程作品的质量与谷歌或脸书等科技巨头相比毫不逊色。

在广告技术领域,短时间内的交易数量是巨大的。我们每秒都有显示、点击、销售信息。在信息流上构建实时数据管道是每个数据工程师的噩梦。但是 Criteo 的工程师们设法做到了,而且做得很好。

Criteo 的工程不全是关于数据的。我们也有关于他们如何建立可靠的内部基础设施的故事,他们如何训练他们的机器学习模型来优化广告活动的表现。我也对他们回馈社区的水平印象深刻。这反映在发表的研究论文数量、会议出席和演示、开源项目上。

[## 深入了解 Criteo AI 实验室

Criteo AI 实验室是计算广告领域的先锋创新。看看人工智能背后的团队…

medium.com](https://medium.com/criteo-labs/an-insight-into-the-criteo-ai-lab-ac2496afc37c)

我不推广我自己公司的博客,因为我在那里工作。甚至在我加入这个团队之前,我就已经从那些博客帖子中获得了灵感。我喜欢学习经营一家科技公司的每一个技术方面。他们的专业技能、知识甚至幽默是我为什么总是喜欢在周六早上听同事写的故事的原因。

结论

知识就是分享,而不是独享。作为一名工程师,我的职责之一就是像以前一样回馈社区和有抱负的学习者。我希望这些技术博客能像对我一样激励你。直到那时,快乐学习!

我的名字叫 Nam Nguyen,我写的主要是关于大数据的文章。享受你的阅读?请在 Medium 和 Twitter 上关注我,了解更多更新。

简化数据操作的 5 个熊猫小贴士

原文:https://towardsdatascience.com/5-essential-pandas-tips-for-easier-data-manipulation-4c2968d37a79?source=collection_archive---------43-----------------------

用这些简单有效的熊猫技巧让你的科学课有个好的开始!

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

介绍

Python 的 andas 是一款无需介绍的软件。无论您是第一次接触 Python 数据科学,还是已经在这个领域工作了很长时间,您都可能听说过 Pandas Python 模块。该库在业界被广泛用于数据操作,并且是任何想要使用数据框和 Numpy 的有抱负的数据科学家的首选工具。许多数据科学家每天都在使用 Pandas,它被广泛认为是使用 Python 操作数据的重要工具。

虽然 Pandas 相当容易使用,并且有许多简单的方法可供使用,但是 Pandas 有许多部分,其中一些大部分时间都被完全忽略了。熊猫是一种复杂的动物,可能需要几个月,甚至几年才能适应它的绝对最高水平。也就是说,熊猫声称有一些基本属性可以在目前大多数情况下有效使用。

条件掩蔽

一个最有可能使 Pandas 超越其竞争对手和字典类型本身的属性是条件屏蔽。条件屏蔽允许用户使用简单的条件语句过滤掉不符合要求的值。这是令人难以置信的方便,是目前 Julia 或 R 中可用的联盟以上。然而以 Julia 为例,我们需要使用过滤器!为了管理我们的数据,Pandas 通过使用所谓的条件掩码使过滤数据变得非常容易。

条件掩码迭代遍历数据帧中的所有数据,并将数据与预设条件进行比较。返回的将是遵循掩码中设置的条件的过滤后的数据帧。

import pandas as pd
df = pd.DataFrame({"NA": [0,1,0,1,0,1], "Label": ["TN", "GA", "TN", "MN", "CA","CA"]})

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

ones_only = df["NA"] == 1

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

着色

有时数据可能很难读取。对于数据科学家来说,这可能没什么大不了的,但通常需要呈现数据并使其更易读。Pandas 使得改变数据框中不同值的颜色变得相当容易。让我们考虑一个例子,我们想要显示哪些值低于某个阈值,哪些值低于该阈值。

df = pd.DataFrame({"Store ID": [1,8,7,4,11,2], "Income": [-12, 56, -2, 23, 7, 16]})

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

首先,我们需要写一个小函数来根据我们的条件给我们的值着色。在本例中,我们将负值映射为红色,以显示每个商店的亏损与其他商店的盈利。

def negatives(input):color = 'red' if input < 0 else 'black'return 'color: %s' % color

这就是所谓的风格图。样式地图是 Pandas 用来确定数据框应如何呈现的功能。我们可以用df.style.applymap().应用一个样式图

df.style.applymap(negatives)

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

请注意,我们的数据框的样式确实发生了变化。Pandas 数据框使用级联样式表进行样式设计,因此实际上非常容易修改。可以使用df.style.set_table_styles.应用新的样式表

汇总和交叉列表

当试图探索和理解大型数据集时,在许多情况下可能有用的一件事是获得某些列的总计数,我们可以使用 lambda 应用它。

df = pd.DataFrame({"Group A": [7,9,11,12,16], "Group B": [12,14, 3, 7, 2]})

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

df['total']     = df.apply(lambda x: x.sum(), axis=1)

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

同样,我们可以使用交叉列表来实现本质上相同的目标。交叉列表用于计算列中的频率,然而,上面的方法提供了列的总和。

cross = pd.crosstab(index = df["Group A"], columns = df["Group B"])

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

配置

关于熊猫的另一个很酷的事情是它是高度可配置和动态的。Pandas 允许在运行时创建各种各样的“配置文件”,这些文件可以用来改变环境变量,以确定它如何工作。这在许多不同的情况下都很有用。例如,考虑这种显示配置:

def load_config():options = {'display': {'max_columns': None,'max_colwidth': 25,'expand_frame_repr': False,'max_rows': 14,'max_seq_items': 50,'precision': 4,'show_dimensions': False},'mode': {'chained_assignment': None}}for category, option in options.items():for op, value in option.items():pd.set_option(f'{category}.{op}', value)

这当然是通过 set_option 方法来完成的,该方法将类别名和相应的值作为参数。

访问者

Series 类型必须提供的一个重要特性是使用访问器的能力。在最新版本的 Pandas 中有四种类型的访问器。

  • str地图到StringMethods
  • .dt地图到CombinedDatetimelikeProperties
  • .catCategoricalAccessor的路线。

这些都是使用缓存附件连接到 Series 类的独立类。他们都有自己独特的方法,有时非常有用。考虑下面的例子:

locations = pd.Series(['Cleveland, TN 37311','Brooklyn, NY 11211-1755','East Moline, IL 61275','Pittsburgh, PA 15211'])

在这个例子中,我们想计算每个邮政编码中有多少个数字。我们可以这样使用字符串访问器:

locations.str.count(r'\d')

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

很酷,对吧?

结论

Pandas 是一个用 Python 处理数据的很好的库,它有很多非常有用的特性,使得数据操作比其他方式容易得多。从简单的访问器类和条件掩码,到简单的样式和完全动态的选项集,Pandas 是一个非常动态的库,可以用于不同操作的负载。这当然使熊猫很难与之竞争。很难证明在现代分析中使用任何其他软件是正确的,因为 Pandas 实在是太棒了!

你不知道的 5 个熊猫基本技巧

原文:https://towardsdatascience.com/5-essential-pandas-tricks-you-didnt-know-about-2d1a5b6f2e7?source=collection_archive---------19-----------------------

如何用熊猫处理大数据?了解“between”、“reindex”等函数。

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

Gif 来自 giphy

我用熊猫已经很多年了,每次我觉得我打字太多的时候,我就谷歌一下,我通常会发现一个新的熊猫技巧!我最近了解了这些功能,我认为它们很重要,因为它们很容易使用。

[## 熊猫数据分析系列

从提示和技巧,如何不指南到与大数据分析相关的提示,熊猫文章的精选列表。

medium.com](https://medium.com/@romanorac/pandas-data-analysis-series-b8cec5b38b22)

这里有几个你可能会感兴趣的链接:

- [Labeling and Data Engineering for Conversational AI and Analytics](https://www.humanfirst.ai/)- [Data Science for Business Leaders](https://imp.i115008.net/c/2402645/880006/11298) [Course]- [Intro to Machine Learning with PyTorch](https://imp.i115008.net/c/2402645/788201/11298) [Course]- [Become a Growth Product Manager](https://imp.i115008.net/c/2402645/803127/11298) [Course]- [Deep Learning (Adaptive Computation and ML series)](https://amzn.to/3ncTG7D) [Ebook]- [Free skill tests for Data Scientists & Machine Learning Engineers](https://aigents.co/skills)

上面的一些链接是附属链接,如果你通过它们进行购买,我会赚取佣金。请记住,我链接课程是因为它们的质量,而不是因为我从你的购买中获得的佣金。

1.函数之间

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

Gif 来自 Giphy

我在 SQL 中使用“between”函数已经很多年了,但是我最近才在 pandas 中发现它。

假设我们有一个包含价格的数据框架,我们想过滤 2 到 4 之间的价格。

df = pd.DataFrame({'price': [1.99, 3, 5, 0.5, 3.5, 5.5, 3.9]})

使用 between 函数,您可以减少这种过滤:

df[(df.price >= 2) & (df.price <= 4)]

对此:

df[df.price.between(2, 4)]

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

这可能看起来不多,但在编写许多过滤器时,这些括号很烦人。带有 between 函数的过滤器可读性也更好。

功能组之间的间隔在功能之间的左侧<= series <= right.

See pandas, documentation to learn more about

2.使用 reindex 函数修复行的顺序

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

Gif 来自 giphy

reindex 函数使系列或数据帧符合新的索引。当生成包含具有预定义顺序的列的报表时,我求助于 reindex 函数。

让我们将 T 恤衫的尺寸添加到我们的数据框架中。分析的目标是计算每个尺码的平均价格:

df = pd.DataFrame({'price': [1.99, 3, 5], 'size': ['medium', 'large', 'small']})df_avg = df.groupby('size').price.mean()
df_avg

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

上表中的尺寸随机排列。应该是这样排序的:小号,中号,大号。因为大小是字符串,所以我们不能使用 sort_values 函数。重新索引功能来拯救我们了:

df_avg.reindex(['small', 'medium', 'large'])

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

通过在 reindex 函数中指定大小的顺序,使得结果表更容易解释。

参见 pandas,文档以了解更多关于重新索引功能的信息。

3.描述类固醇

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

Gif 来自 Giphy

描述函数是进行探索性数据分析的基本工具。它显示数据帧中所有列的基本汇总统计信息。

df.price.describe()

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

如果我们想计算 10 个分位数而不是 3 个分位数呢?

df.price.describe(percentiles=np.arange(0, 1, 0.1))

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

描述函数采用百分位数参数。我们可以用 NumPy 的 arange 函数指定百分位数,以避免手工输入每个百分位数。

当与 group by 函数结合使用时,此功能变得非常有用:

df.groupby('size').describe(percentiles=np.arange(0, 1, 0.1))

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

看熊猫,文档了解更多关于描述功能

4。使用正则表达式进行文本搜索

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

Gif 来自 Giphy

我们的 t 恤数据集有 3 个尺寸。假设我们想要过滤中小型尺寸。一种繁琐的过滤方式是:

df[(df['size'] == 'small') | (df['size'] == 'medium')]

这很糟糕,因为我们通常将它与其他过滤器结合在一起,这使得表达式不可读。有没有更好的办法?

pandas 字符串列有一个“str”访问器,它实现了许多简化字符串操作的功能。其中一个是“包含”函数,支持正则表达式搜索。

df[df['size'].str.contains('small|medium')]

具有“包含”功能的过滤器可读性更强,更易于扩展和与其他过滤器结合。

见熊猫,文档了解更多关于包含功能

5.比熊猫的记忆数据集还要大

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

Gif 来自 giphy

熊猫甚至不能读取比主内存数据集更大的数据。它抛出一个内存错误或 Jupyter 内核崩溃。但是要处理一个大数据集,你不需要 Dask 或 Vaex。你只需要一些独创性。听起来好得难以置信?

如果您错过了我关于 Dask 和 Vaex 使用大于主内存数据集的文章:

[## Dask 与 Vaex 在大数据领域的对比

你真的能在笔记本电脑上处理大于内存的数据集吗?Dask 比 Vaex 快吗?我做了一些基准测试,所以…

towardsdatascience.com](/dask-vs-vaex-for-big-data-38cb66728747)

进行分析时,通常不需要数据集中的所有行或所有列。

在一种情况下,您不需要所有行,您可以分块读取数据集并过滤不必要的行以减少内存使用:

iter_csv = pd.read_csv('dataset.csv', iterator=True, chunksize=1000)
df = pd.concat([chunk[chunk['field'] > constant] for chunk in iter_csv])

分块读取数据集比一次全部读取要慢。我建议只对大于内存的数据集使用这种方法。

在一种情况下,您不需要所有的列,您可以在读取数据集时使用“usecols”参数指定必需的列:

df = pd.read_csv('file.csv', u*secols=['col1', 'col2'])*

这两种方法的伟大之处在于,您可以将它们结合起来。

在你走之前

Twitter 上关注我,在那里我定期发布关于数据科学和机器学习的

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

考特尼·海杰Unsplash 拍摄的照片

数据科学的 5 个基本 R 库

原文:https://towardsdatascience.com/5-essential-r-libraries-for-data-science-7536abdcc200?source=collection_archive---------44-----------------------

这里有一些非常有用的库,所以你可以充分利用 R 进行分析

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

照片由克莱门特·HUnsplash 上拍摄

数据科学和 R 是天造地设的一对,它们就像香槟和草莓、果冻和冰淇淋或可卡因和华夫饼干一样搭配在一起!

但是学习 R 和知道哪些库将增强您的数据科学技能可能会令人望而生畏。这里有五个库,它们将使你的分析体验更加愉快,并且对于掌握或达到你的数据科学职业生涯的下一步是必不可少的。呜!

Dplyr

Dplyr 是一个非常棒的、全功能的数据清理和辩论库,在这个领域非常有用并且广为人知。Dplyr 有许多内置函数,这些函数对于几乎任何分析任务都是非常有用和适用的!一些有用的功能包括:

选择 :某列数据。

筛选 :您的数据选择特定的行。

排列: 将您的数据行排列成一个顺序。

突变: 你的数据框要包含新的列。

总结: 以某种方式将你的数据大块化。

Ggplot2

任何值得一试的数据科学家都知道他们在 ggplot 周围的路。r 的第二个和更新的可视化库有惊人的多样性和个人修改的范围。Ggplot 可以生成任何东西,从简单的饼图到复杂的阴影堆叠条形图,再到预训练单词嵌入的三维表示。它真的是一流的东西,怎么宣传都不为过。

润滑剂

另一个非常有用的 R 库是 Lubridate,尤其是在现实生活中的应用场合。Lubridate 是一个很棒的库,用于整理和清理时间序列数据,并管理您正在使用的任何与时间相关的变量。使用这个库,您可以做任何您想做的关于日期算法的事情,尽管理解和使用可用的功能在这里可能有点复杂。看看吧!

针织工

这是给所有的学者和报告作者的。Knitr 是 r 的基本发布软件,它的目的是以各种格式生成可复制的报告。

这个包还支持将 R 代码集成到 LaTeX、Markdown、LyX、HTML、AsciiDoc 和 reStructuredText 文档中。您可以将 R 添加到 markdown 文档中,并轻松生成 HTML、Word 和其他格式的报告。如果您对研究和自动化从数据分析到报告创建的旅程感兴趣,这是一个必备工具。

quanteda . dictionary

这是给所有 NLP 的人的。Quanteda 包的一个扩展,这个扩展允许你利用大量的数据字典。从停用词到词典。这是一个很好的研究,可以进行快速简单的比较,或者以最简单的方式应用词典。我个人的最爱之一!

有趣的东西!

这些只是一些最常见的库,还有很多有用的 R 库,还有很多在生产中。

对我来说,重要的是我使用的库是稳定的,直到用新的发布和版本更新和修复。试图使用一个不太适合你的项目的遗留版本的库是令人心碎的。这里的图书馆

我希望您喜欢这些为您的数据科学项目而开发的真正顶尖和重要的 R 库!快乐分析!

艾伦。

使用 Apache Airflow 为 Redshift 上托管的数据库构建 ETL 管道的 5 个基本技巧

原文:https://towardsdatascience.com/5-essential-tips-when-using-apache-airflow-to-build-an-etl-pipeline-for-a-database-hosted-on-3d8fd0430acc?source=collection_archive---------18-----------------------

技术提示

初学者使用气流的最佳实践

介绍

Apache Airflow 是最好的工作流管理系统(WMS)之一,它为数据工程师提供了一个友好的平台来自动化、监控和维护他们复杂的数据管道。始于 2014 年的 Airbnb,后来成为一个拥有出色 UI 的开源项目,Airflow 已经成为开发者们的热门选择。对于不同层次的 Airflow 用户,有很多好的资源/教程。你可以从许多好的教程开始学习气流,例如这个逐步指南,或者这个系列,在这个系列中你还可以学习工作流管理系统的一般知识。对于已经熟悉气流的用户来说,这个资源可能会帮助你对气流的许多方面有非常深刻的理解。

在这篇文章中,我只想分享我在 AWS 上用 Airflow 创建数据仓库 ETL 管道的经验。希望有帮助。如果你在我的帖子里发现了什么错误,请纠正我。

注意事项

1.本文假设您已经掌握了一些数据仓库、AWS、特别是 Amazon Redshift、Apache Airflow、命令行环境和 Jupyter 笔记本的工作知识。

2.您有责任监控您使用的 AWS 帐户的使用费。每次完成工作时,请记住终止集群和其他相关资源。

3.这是优达城数据工程纳米学位评估项目之一。所以为了尊重 Udacity 荣誉代码,我不会在工作流中包含完整的笔记本来探索和构建项目的 ETL 管道。本教程的 Jupyter 笔记本版本的部分内容,以及其他数据科学教程可以在我的 github 上找到。

参考

  • 一些材料来自 Udacity 上的数据工程纳米学位项目。
  • 一些想法和问题是从 Knowledge-uda city 问答平台和学生中心-uda city 聊天平台收集的。感谢大家对我们的付出和巨大贡献。

项目介绍

项目目标

Sparkify 是一家致力于音乐流媒体应用的初创公司。通过 app,Sparkify 已经收集了关于用户活动和歌曲的信息,这些信息被存储为 JSON 日志的目录(log-data -用户活动)和 JSON 元数据文件的目录(song_data -歌曲信息)。这些数据位于 AWS 上的公共 S3 存储桶中。

这个项目将是一个工作流程,探索和建立一个 ETL(提取-转换-加载)管道:

  • 从 S3 提取数据,并将它们暂存在 AWS 红移上作为暂存表(用户活动— Stage_events表和歌曲数据— Stage_songs表)。
  • 出于分析目的,将数据从临时表转换为一组事实表(songplays)和维度表(包括artists, time, users, and songs表)。关于这些表格的更多细节可以在我的另一个相关项目中找到。
  • 这种高级 ETL 管道必须是动态的,可以被监控,并允许在必要时容易回填。通过将 Apache 气流引入系统来满足这一要求。

下面是完整的有向无环图(DAG ),其中包含该项目使用的运算符。(如果您不知道 Dag 或运算符是什么,请在此处快速阅读气流概念的定义)。

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

有了这个帖子,我就不详细讨论这个项目是怎么一步一步做出来的了。相反,我只是向您介绍一些我在使用气流时遇到的重要提示和问题。我希望它能为您节省大量的时间和精力来处理您在构建工作流时可能遇到的许多奇怪的状态。

技巧 1:从最简单的 DAG 开始

您的 DAG,即以特定顺序定义任务的高级大纲,应该尽可能简单。这显然是编程中的最佳实践,但容易被遗忘。

为什么我们应该从简单的 DAG 开始?

下面是我的项目的最终 DAG 配置要求:

基本上,DAG 不依赖于过去的运行;start_date 是 2019 年 1 月 12 日;管道将被安排每小时运行一次。失败时,任务重试 3 次;每 5 分钟重试一次。
我太天真了,第一次尝试使用最终的 DAG 配置,结果在 Airflow UI 上触发 DAG 时不知所措。排队的人太多了。许多人,实际上更多的人,可能会在这些之后。

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

队列中的这些游程都是从哪里来的?

  • 参数start_date': datetime(2019, 1, 12),schedule_interval = '@hourly将产生从 start _ date(2019 . 1 . 12)到现在(2020)的~ 600 days x 24 hourly backfill runs
  • 有了'retries': 3,'retry_delay': timedelta(minutes = 5),的说法:如果任务失败了——当然会失败,一个复杂的数据管道哪里会在第一次尝试就失败——需要重试 3 次,间隔 5 分钟。因此,在失败的情况下,除了大量运行(each scheduled run x 3 times of retries)之外,在此设置下,每次运行需要 3 x 5 分钟的等待时间,并进行重试。关于回填运行的次数,除了停止/杀死气流任务,你别无选择。 从 UI 中停止/杀死气流的任务很麻烦,所以最好不要碰到这个问题。 在某些情况下,尽管正在运行的 Dag 被删除,并且 Dag 被修改并再次触发,但它们仍可能重新启动并运行之前未完成的任务。

那么,一个简单的 DAG 是什么样子的呢?

在我的调试版本中,DAG 将在被触发('start_date': datetime.now())时立即运行,一次只运行一次(max_active_runs=1,))并且只运行一次(schedule_interval= None),没有任何失败重试(DAG 中的默认设置)。这个简单 DAG 将在任何任务失败时立即停止,这使我们能够轻松地调试我们的 DAG。

其他一些注释:

  • 如果我将 start_date 保持为start_date': datetime(2019, 1, 12),并且只运行 DAG 一次(schedule_interval= None),会发生什么:将会有 2 次运行:2019 年的回填运行和当前手动运行。由于我的 DAG 开发过程只需要运行 1 次,所以最好设置'start_date': datetime.now()

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

  • DAG 正在同时执行多个计划,后面的运行可能会同时发生并彻底击败前面的运行。如果 DAG 包含一些繁重的任务,比如将一个巨大的表从 S3 复制到红移,那就不好了。要绕过这一点,您可以将max_active_runs设置为 1。

技巧 2:如何从气流 UI 停止/杀死气流任务?

正如技巧 1 中提到的,停止/终止气流任务是相当棘手的。在 UI 上有一些停止/终止气流任务的方法。最适合我的方法如下:

步骤 1:关闭 DAG

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

第二步:删除所有运行

在气流菜单栏上,选择Browse -> DAG Runs -> Checkbox to select all the runs -> With Selected -> Delete

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

请注意,您必须先关闭 DAG,否则,您可能会看到*白行者 和正在运行的活死人军团:即使您刚刚删除了所有 DAG 运行,执行程序也可能会继续计划并开始新的运行。*

提示 3:“破损的 DAG”——这可能是由于 DAG 解析问题,而不是您的代码。

使用气流默认设置,当您更新关联的 python 文件时,应重新加载 Dag。有人提到过,webserver 运行时,默认每 30 秒刷新一次 Dag。当我们看到我们的狗“现在像雏菊一样新鲜”时,我们就可以走了:

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

我花了一整天的时间试图找出我的代码出了什么问题。我甚至重新加载了一个虚拟的 DAG——不会出错的 DAG,但仍然无法修复导致 DAG 损坏的错误:

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

事实证明,我的 DAG 没有任何问题,我只需要刷新工作区,就可以解决 DAG 解析带来的 webserver 问题。

总之,当出现 DAG 中断问题,并且您确定不是因为您的代码时,您可以尝试:

  • 使用 DAG 主屏幕上的刷新按钮,可让您手动重新加载 DAG。
  • 在命令行上键入python -c "from airflow.models import DagBag; d = DagBag();"以手动刷新 Dag。
  • 在命令行中键入/opt/airflow/start.sh再次启动 Airflow webserver。
  • 对于那些在 Udacity 上使用项目工作区的人来说,如果什么都不工作,就用菜单栏刷新工作区。

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

刷新工作区将会把你所有的文件复制到一个新的机器上,因此,每一个与文件解析相关的问题都可以得到解决。做完我的气流项目,不得不承认 **Refresh Workspace** 是我很多 **Broken DAG** 问题的终极解决方案。

关于调试损坏的 DAG 的说明

气流 UI 可能会通知您有一个损坏的 DAG,但是,它不会显示您的 DAG 的问题。可以通过使用python -c "from airflow.models import DagBag; d = DagBag();"手动重新加载 DAG 或使用命令行上的/opt/airflow/start.sh再次启动 Airflow 服务器来查看损坏的 DAG 中的详细问题。下面是对此的演示:

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

技巧 4:对于 AWS 的所有任务,使用 Jupyter 笔记本上的 IaC(基础设施代码)

AWS 资源可以通过AWS 控制台* 或 IaC(基础设施即代码) 进行设置和监控。我更喜欢 IaC 方法,因为它可以帮助开发人员轻松地自动化、维护、部署、复制和共享复杂的基础设施。AWS 上的 IaC 有 3 个选项:*

  • AWS-CLI 脚本:类似于 bash 脚本。
  • 亚马逊云的形成通过 JSON 描述了所有的资源、权限和约束。
  • AWS SDK:更强大,可以与许多应用程序集成。Python 用户可以使用boto3,一个 Python SDK ,以编程方式访问 AWS。

我们可以使用 IaC 来构建、启动 Amazon Redshift 集群,并打印出气流连接所需的所有配置信息,如hostschemalogin_userpassword等。,而无需在 AWS 控制台上点击和搜索。我发现它非常方便和省时,特别是当我们必须终止集群/清理资源,然后改天再创建、启动、配置集群以降低 AWS 成本时。

设置和清理 Amazon Redshift 和其他 AWS 资源的整个端到端过程,以及在 AWS 上使用 Airflow 创建简单数据仓库 ETL 管道的演示,可以在 my Github repository 中找到。

技巧 5:以编程方式设置气流连接

要使用 AWS 服务运行 Dag,您可以使用 Airflow 的 UI 来设置连接,例如配置您的 AWS 凭证、连接到 Redshift 等。

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

设置到 Amazon Redshift 的气流连接的步骤

但是,当服务器停止或刷新工作区时,这些连接可能会丢失。为避免不必要的失败,建议在运行 Dag 之前检查这些连接是否可用。

在 DAG 开发期间,一次又一次地手动重新设置这些气流连接是一个麻烦且容易出错的过程,因此我更喜欢以编程方式将气流连接设置为 python 脚本文件。必要时,您可以在命令行上运行该脚本。用于设置气流连接的简单 python 脚本如下:

一个好的做法是,在创建红移集群时(如技巧 4 中所述),您可以将所有 AWS 凭证和红移信息导出到一个. cfg 文件,然后使用 Python 包configparser获取必要的信息,而不是直接将它们放到脚本中。

非常感谢你阅读这篇文章。祝你的项目好运,我非常乐意回答任何问题和讨论。

《丘比特笔记本》,代号,。cfg 文件等。 对于这篇文章,连同其他数据科学教程可以在my Github上找到。

科技公司以外的数据科学家工作的 5 个令人兴奋的行业

原文:https://towardsdatascience.com/5-exciting-industries-for-a-data-scientist-job-outside-of-the-tech-sector-2e5d2c456d16?source=collection_archive---------32-----------------------

实时、物联网、计算机视觉、遗传学和大容量数据项目

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

Austin DistelUnsplash 上拍摄

对于许多有抱负的数据科学家来说,梦想中的工作是在一家全球科技公司工作。

但是当你只关注科技行业时,你就排除了其他行业的大量酷工作。

我为许多不同的行业工作过,我不想错过我所获得的经验。在我以前的职位上,我从事化学工业的项目。我以前不知道这个行业,我很惊讶他们有多先进,以及我可以获得的许多见解,特别是与物联网技术的集成。

那么,换个行业找工作的理由是什么呢?

  1. 你从事激动人心的项目,这些项目与遗传学和物联网等其他技术相互关联
  2. 您需要处理来自机器、制造流程和可穿戴设备等不同来源的大量数据
  3. 你住在一个附近没有科技公司的地方
  4. 你只是不喜欢在科技行业工作
  5. 你已经有了另一个行业的背景,你想应用你的知识。此外,内部调动非常有吸引力,因为它会因为专业的行业知识而增加被雇佣的机会

接下来,我会给你五个行业,让你在科技行业之外找到令人兴奋的工作。我将为您提供该行业的简要概述,与科技行业相比的薪资水平,该行业的抗衰退能力如何,项目示例,以及该行业在数据科学家中需要什么技能。

生命科学和制药

行业

新冠肺炎迫使我们一直听到疫苗的发展。塑造了我们对这个行业的看法。但这只是整个行业的一部分。

事实是,这个行业很大,而且非常多样化,有许多子行业,如农业生物科学、诊断、治疗、制药、基因组学和蛋白质组学、兽医生命科学、化妆品、药品制造、医疗技术、分销和许多其他服务。

仅在制药领域,除了疫苗开发,我们还有其他领域,如抗体治疗、细胞治疗、仿制药、免疫疗法、蛋白质或干细胞。

开发新疗法的成本从现在的大约 10 亿美元开始,一直到两位数的 10 亿美元。该行业尽一切努力降低成本并使治疗更快可用。这推动了一个可与科技行业媲美的数据驱动型行业。所有全球参与者都在构建数据生态系统,将患者、医院和医生等服务提供商以及他们自己的数据联系在一起。

我建议你对不同的子行业进行一些研究。当你看到一个工作机会时,一定要先找到这个行业。

该行业的员工流动率通常很低,福利待遇也很好,薪水和科技公司一样高。

防衰退

是的,这个行业非常抗衰退。健康护理总是需要的,对人类以及宠物和动物都是如此。在像今天这样的时候,这个行业甚至得到了推动。

项目

你可以想象,可能的领域和项目的范围与分部门的数量一样广泛。一份详尽的项目清单会占据整页纸。所以,我把它限制在三个例子上。

*精准医疗:*医疗越来越基于患者的个体化、个性化特征。这些特征是疾病亚型、个人患者风险、健康预后以及分子和行为生物标记。生物标记是任何可测量的数据点,使得可以对患者进行分层,例如疾病严重程度评分、生活方式特征或基因组特性。基于所有这些数据,确定单个患者的最佳治疗。

一个真实的例子是一个卵巢癌患者,化疗无效。因此,有人进行了基因组测序,以寻找导致癌症的错放的核苷酸碱基。通过大数据分析,人们在人类的 30 亿个碱基对中发现了这种修改(这相当于哈利波特的《魔法石》的 7798 本书的字数)。这种改变是从肺癌中得知的,在肺癌中存在一种药物。使用了这种药物,病人康复了。

*供应链优化:*药品的生产需要时间,尤其是当今基于特定物质和生产方法的高科技疗法。此外,药物只能储存有限的时间,并且一些药物需要特殊储存,例如在冷藏室中。从在正确的时间获得正确的输入物质,到拥有足够的生产能力,以及最终为满足需求而储存适当数量的药物,整个计划是一个非常复杂的系统。这种情况不仅仅需要一种药物来控制。不,有成百上千个,每个都有其特定的条件。因此,生命科学公司开始用数据科学方法管理他们的整个供应链。

*生物标志物扫描研究出版物:*每天,全球多个研究团队都会发布数百篇关于所有不同疾病的生物标志物检测的科学出版物。对于生命科学公司来说,了解新检测到的生物标志物以将其应用到特定的研究领域来寻找新的治疗方法是至关重要的。研究非常昂贵且时间紧迫。通过了解当前的相关研究,他们可以避免重复研究,并加快上市时间。信息量如此之大,以至于无法手动完成。因此,开发了非常复杂的 NLP 算法来查找相关的出版物。除了了解这些生物标记相关的内容,还必须判断已发表结果的质量,以及它如何适合公司的研究——这是一项非常复杂的任务。

所需技能

除了数据科学知识之外,这份工作通常还需要科学背景。对于高级职位,需要有处理健康记录数据的经验。对于专门的主题,公司对匹配的技能非常挑剔。非常欢迎在复杂的科学或工程环境中工作的所有专业知识。有生物信息学知识者优先。特别是对于有科学背景,想进入数据科学领域的人来说,这个行业给了大量的机会。

实用程序

行业

公用事业行业提供基本的公共设施,如水、电或天然气。他们建造、拥有和维护相应的基础设施,如水力发电机、核电站、电网、控制站、水分配系统等。定义了供给。等式的另一边是消费者的需求,即必须满足的个人和公司的需求。

供需和基础设施维护之间的相互作用相当复杂,而且今天高度技术化和实时数据驱动。该行业正在快速进入物联网设备和所谓的智能计量,智能计量可以实时记录任何能源或水的消耗,并向公用事业公司和消费者提供详细信息。这被认为是进入智能电网的第一步。

这个行业在两种极端情况下运作:一方面,他们必须维护寿命从 35 年开始的资产,如饮用水分配系统的发电厂长达 100 年。另一边,电不能储存,需要实时管理。

公用事业是数据量最大的行业之一,因此,它们面临着使用这些数据的所有相关挑战。该行业目前也在进行技术转型,添加越来越多的传感器和物联网设备,从而产生更多可用的实时数据。

根据我的经验,工资比科技行业平均低 5-10%。

许多公用事业公司已经外包了他们的数据科学能力。因此,寻找专门服务于公用事业市场的中小型咨询公司。

防衰退

是的,这个行业非常抗衰退。水、电、动力总是需要的,与经济状态无关。

项目

从资产性能管理、断电和故障预测,到能源供应管理和客户分析,公用事业领域的许多领域都在使用数据科学。

漏水检测:在欧洲和美国,数万亿升饮用水从供水系统中泄漏。安装水传感器以检测渗漏仍处于开始阶段。管道的人工测量和攻丝是标准的,但效率不高,也不适用于整个地区。因此,基于特定位置的流量测量和终端消费者的水消耗数据,建立预测模型来定位潜在的水损失区域。

*利用无人机进行预防性电网管理:*仅在美国,电网就有长达 16 万英里的高压电力线和数百万英里的低压本地配电线路。监控所有线路的潜在风险,例如可能损坏线路的树木,几乎是不可能的任务。因此,商用无人机被用于沿线巡逻并记录邻近环境的视频。开发或改进计算机视觉算法是为了自动检测潜在风险。

*用电量预测和动态定价:*用电量预测是保证供应最重要的数字之一。记住,能量是不能储存的。所以,在实时情况下,必须保证供应。这是一个非常复杂的系统,从管理水力发电机的生产能力到通过输电线的配电,购买和销售电力,以及通过相应的定价制定在特定时间框架内使用更少或更多电力的激励措施。你必须管理重叠的长期和短期影响,几个季节,天气预报和短期波动。这是一个非常微妙的问题,不容易解决所有的数据量和短时间内对预测的结果作出反应。

所需技能

公用事业行业正在使用大量的数学模型,主要来自运筹学。因此,数据科学家应该有良好的数学和数学模型基础。你至少应该了解这个行业是如何运作的,以及如何处理大量数据,甚至是实时数据。

食品饮料行业

行业

食品和饮料行业包含各种各样的公司,从餐馆、咖啡店和快餐连锁店、食品和饮料运输服务、食品制造商,到雀巢、百事可乐、百威英博、JBS 等大型跨国公司。

我的建议主要是关于跨国公司的许多机会。他们有几个品牌,功能性食品和饮料,有时还有宠物食品。他们的生意不仅取决于消费者的行为,也取决于产品销售者的所有行为。

跨国公司的薪资水平与科技行业相当。当地公司支付的薪水要低得多。

防衰退

该行业在一定程度上不受经济衰退的影响。软饮料和酒精饮料,如葡萄酒和酒精饮料,在经济衰退期间都会下降。相比之下,大型酿酒商只面临轻微下跌。经济衰退期间,餐馆支出大幅下降,而杂货店支出保持稳定,折扣零售商可以增加销售额。

项目

*情感分析和评论检测:*如今,对产品的投诉首先在社交媒体平台上公开。像食品污染这样的严重事件会很快成为头条新闻。对于大公司来说,在全球范围内全天候实时监控他们所有的产品评论是非常重要的。当一个有影响力的评论被发现时,品牌需要迅速采取行动。需要分析潜在事件的背景,并采取相应的措施。

许多负面情绪不需要干预。另一方面是需要执行委员会立即关注的事件。在机器学习算法中找到正确的平衡是很棘手的。这是一个非常令人兴奋的领域,其中错误分类很重要。

*准时生产和交付:*软饮料饮料公司需要计划饮料需求,计算他们的生产计划和生产能力,以及他们对供应商的配料需求。除了季节性因素之外,还有天气、大小事件、消费趋势、价格战、经济形势、卖方购买力、生产时间和产能、保质期等因素。,必须考虑。物流需要提前安排,以确保饮料按时交付给卖家或活动餐饮。这也是一项重要的任务,需要高技能的数据科学团队。

*质量保证:*消费者期望产品的味道、一致性、质量和保质期全年一致,并且不受消费地点的影响。许多因素会影响生产结果,从配料的适当数量、质量、季节、生产国家和运输条件、储存和生产条件(如温度、压力、生产时间的差异等)开始。为每个生产批次找到正确的配料和生产参数模式,使产品始终相同,这是一项非常重要的数据科学任务。

所需技能

他们期望从回归到神经网络的深入的数据科学方法知识。当处理生产问题时,需要时间序列知识,以及客户分析领域的 NLP 经验。

工业品

行业

总的来说,可以说这个行业包含了所有不直接卖给消费者的生产、制造、设备和销售。分部门的例子有建筑、工业房屋、工业机器和工具、水泥和金属制造以及工业部件。全球知名公司的例子有通用电气、西门子、日立、3M、霍尼韦尔国际、博世、洛克希德·马丁或 ABB。在过去的几年里,这些公司不仅经历了自己的全面数字化转型,实现了完全自动化的制造,还拥有自己的平台,为客户和广泛的数据和技术团队提供服务。

行业有个特殊性,所谓“隐性冠军。”隐性冠军是指在全球市场上处于领先地位,但收入低于 50 亿美元的公司,它在公众中几乎不为人知。这些公司通常是高科技公司,是数字化和技术领域的思想领袖,通常都不知名。数据和 AI 是它们的驱动力。这是数据科学家的天堂。然而,找到这样一个隐藏的冠军并被录用并不是一件容易的事情。

薪资水平接近科技行业水平。尤其是隐性冠军的福利和工作文化高于平均水平,员工仍然是有价值的人,而不是一个数字。

防衰退

简单的回答是:视情况而定。不可能有一个通用的说法,它取决于子行业和衰退的类型。举个例子:在当前的新冠肺炎危机中,时装生产崩溃了,随之而来的是对工业机器的需求。但是一个生产缝纫机的隐形冠军无法满足全球需求。公司的高精度机器应用灵活,现已用于口罩生产。我的观察是,隐性冠军不太可能受到经济衰退的冲击。

项目

该行业和项目由构成智能机器的传感器、连接设备和自动化驱动,智能机器产生大量实时数据。

*工人安全:*工人事故代价高昂,不仅因为事故本身,还因为工人缺席和名誉受损。如今,重型设备环境中的工人越来越多地配备了传感器、振动器或集成摄像机。因此,对所有这些设备的数据进行分析。一个例子是对模式的实时数据的分析,该模式检测雇员的危险情况并导致警报,例如高音调声音。另一个例子是对不健康工作行为的模式检测,如符合人体工程学的错误提升,以及随后对工人进行改进的指示。

*生产力优化:*我们都听说过预测性维护。利用机器学习方法,预测机器故障的时间点,并进行预期的维护。如今,领先的公司可以在故障发生前几周就检测到微小的异常。这不仅为定期维护提供了时间,也为在此期间优化整个生产提供了时间,包括最终如何通过调整生产参数来避免预期的故障。这些是高维度问题,需要机器学习前沿方法来解决。

研发(R & D): 智能机器需要智能且健壮的算法来执行它们的任务。一个例子是诊断机器,其中安装了摄像机来监控控制面板,即工人如何使用它以及他们的手的运动。这些数据与机器性能和故障数据相关联。基于这些模式,自动调节过程被集成到机器中,以确保一致的工作性能。

所需技能

他们正在寻找精通先进方法和工程知识的数据科学家。处理大量实时数据的经验至关重要。在团队和小公司工作的个性同样重要。

农业产业

行业

该行业涵盖畜牧业、水产养殖业(即渔业)、农作物和植物以及林业的科学、艺术和商业。我们通常最熟悉农业。农业也转变成了技术驱动的行业。随着资源的减少,农业不得不生产越来越多的产品和食物。技术发展包括自动拖拉机和机械、数字化疾病检测和害虫管理、更好的天气预测、自动化灌溉和收获系统以及牲畜健康等。这只有在大量数据和许多智能算法的情况下才会发生。

Glassdoor 上的 Quick analytics 给出的平均工资范围比科技公司类似职位的平均工资范围低 10%左右。但人们必须考虑位置差异,因为许多农业数据科学工作不在科技公司所在的大中心。

防衰退

这个行业好坏参半。农业基本上是一个低利润的行业,在经济衰退期间食品支出的任何减少都会直接影响农民的收入。另一方面,同样导致更多的数字化变得更加高效和有效。因此,在创新方面,我们通常看不到太多的变化,可以认为它相当抗衰退。

项目

精准农业是关键词。根据田间传感器收集的关于作物、植物、土壤、超局部天气条件、温度、湿度的实时数据,卫星和无人机图像,可以分析单个植物的需求,并确定相应的护理。

*奶牛的健康:*测量温度的耳标、奶牛的健身追踪器、GPS 颈带,甚至是胃里的传感器都是今天奶牛可用的配件。这些实时数据随后由机器学习算法进行分析,以检测每头奶牛的健康异常,然后向农民或直接向兽医发送相应的警报。这种算法的开发很棘手,因为太多的警告或错误的警告会导致不正确的治疗,而在严重的健康情况下没有警告会导致没有治疗。

*疾病检测与管理:*无论是田间图像还是红外图像,都可以用计算机视觉检测出微小的疾病。结合进一步的当地数据,如天气或土壤参数,可以预测疾病的传播。基于所有这些数据,可以精确地确定污染区域的正确处理方法。它应该确保不使用太多或太少的杀虫剂。在这里,你正在图像识别技术的前沿工作。

*收获和分级:*如今,自动收获机也能自动对水果或蔬菜进行分级。西红柿就是一个例子。它们经常在机器人的温室中培育。这些机器人不仅管理数据驱动的种植,还收获成熟的水果,并将它们分成不同的类别。同样,这是非常机器学习的密集工作,你可以使用所有先进的神经网络模型。

所需技能

好消息是,农业行业不指望你有相应的教育。他们正在寻找开放和好奇的数据科学家,将数据科学和人工智能的应用扩展到较少考虑的领域。但是不要低估所用方法的成熟度。为非常高级的应用做好准备。

连接圆点

科技行业之外的许多令人兴奋的行业为你提供了获得技能和专业知识的独特机会,否则你将无法体验。技术正在渗透到所有行业和领域,随之而来的是海量数据的产生。所有部门都必须由数据驱动。

我给你的建议是,当你在找一份数据科学的工作时,要思想开放,跳出框框思考。这将为您的数据科学职业生涯带来竞争优势。

你喜欢我的故事吗?在这里你可以找到更多。

[## 顶级技术趋势及其对数据科学、机器学习和人工智能的影响

你和你的职业生涯的行动计划

towardsdatascience.com](/the-top-technology-trends-and-their-impact-on-data-science-machine-learning-and-ai-f6223b496efa) [## edX 2020 / 2021 上的数据科学 MicroMasters 计划终极指南

你应该选择 6 个程序中的哪一个?

towardsdatascience.com](/the-ultimate-guide-on-the-data-science-micromasters-programs-on-edx-2020-2021-db7646381387?sk=21fd78fdd3959a7f850860bd788dd914) [## 作为一名 40 多岁的女性,如何进入数据和技术行业

三个鼓舞人心的例子以及如何转向科技职业的指南

medium.com](https://medium.com/swlh/how-to-move-into-a-data-and-technology-career-as-a-woman-in-the-40s-195f6378ed4c)

5 个无人知晓的用于数据科学的精彩 Python 包

原文:https://towardsdatascience.com/5-fabulous-python-packages-for-data-science-nobody-knows-about-9fa192f312e4?source=collection_archive---------13-----------------------

你知道这些包裹吗?

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

(python logo src =http://python.org

所以我们可能都知道动态数据科学三重奏,Numpy,Pandas 和 Matplotlib。

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

您很可能熟悉这些包以及它们是如何工作的。可能还有其他一些你喜欢使用的很酷的软件包,比如 Plotly、Seaborne、Scikit-Learn、Tensorflow 和 Pytorch 等等。尽管这些都是很棒的包,但是有数百万个 Pythonic 机器学习包,其中一些不被重视,还有一些完全不为人知!

№1:微光

你听说过 Plotly,你听说过 Matplotlib,也许还有 Seaborne,但你可能没听说过 Gleam。Gleam 是一个非常棒的工具,可以创建带有页面、面板和按钮的交互式可视化效果。这些交互式 web 可视化也是完全 web 集成的,这意味着您可以将它们放入从网站到终端的任何东西中!Gleam 使用 wtforms 进行交互,并且可以使用任何不同的可视化工具来实际显示数据。

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

如果你想要一个很酷的交互面板,你可以使用任何图形库,Gleam 就是你要的模块!

№2:表格

[## 塔贝尔

轻量级,直观和快速的数据表。

pypi.org](https://pypi.org/project/tabel/)

好吧,我知道你在想什么,

“为什么不用熊猫呢?”

这当然是一个可行的论点。餐桌包装是熊猫难以置信的轻便替代品。使用 Table.py 可以比使用 Pandas.py 更容易地读取大量数据集,这也是它上榜的唯一原因。总的来说,在某些情况下,这可能是工作的一部分,但在大多数情况下,我只会坚持

import pandas as pd

№3:幕府

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

https://www.shogun-toolbox.org/(src =

幕府将军是一个用 C++编写的机器学习库,碰巧也拥有一个 Python 端口。关于幕府的一个伟大的事情是,它可以跨众多不同的编程语言使用,并且在这方面相对统一。如果你要学习 Python 中的幕府将军,你可以将这些知识应用到它支持的任何其他语言中,这太棒了!

幕府将军拥有广泛的尖端机器学习算法,肯定任何科学家都可以欣赏。它当然也是开源的,并且是在 GNU 通用许可下发布的,这总是一个优点!

№4: OpenCV

OpenCV 是另一个伟大的机器学习包,实际上最初是由英特尔开发的。然而,尽管 OpenCV 是私有的,但它是开源的,并在 FreeBSD 许可协议下发布。OpenCV 真正酷的一点是它对实时计算机视觉的关注。像幕府将军一样,OpenCV 最初是用 C++编写的,但是有 Python 和其他语言的接口。

№5: Mlpy

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

(src =http://mlpy.sourceforge.net/

Mlpy 为监督的非监督的学习提供了广泛的最先进的机器学习方法。与同类产品不同,它旨在为数据科学提供一体化的方法。虽然在这一点上有点过时,但它无疑是 Pythonic 机器学习的巨大软件包爆炸的一个巨大的导火索。尽管年代久远,但在我看来,它仍然值得一看。这是由于它的易用性、有趣的算法和包容性。

Mlpy 试图创建一个包,平衡再现性,调制和效率。在这一点上,我认为这个包是成功的,因为虽然它的许多对应部分更新得更频繁,而且肯定是行业标准,但许多这些想法似乎在翻译中以这样或那样的方式丢失了。这是有道理的,因为这些庞大的软件包大部分是由成千上万的开发人员用 C 编写的,然而,我要说的是,使用它们可能是一个缺点。

结论

所以你有它,五个软件包在我看来是不被承认的,并没有得到他们所完成的荣誉。虽然这些软件包确实很酷,但我确信还有成百上千的其他酷模块可以添加到您的 Pip 环境中,它们也是令人敬畏和闻所未闻的!

Python 有一个压倒性的生态系统和许多要挖掘的包,这是它如此伟大的部分原因!学习如何不断地使用新模块将会保持你的知识基础的扩展,并保持你的程序员的大脑活跃!

面试官在分析候选人时寻找的 5 个因素

原文:https://towardsdatascience.com/5-factors-that-interviewers-look-for-in-analytics-candidates-cbc032ef5f0f?source=collection_archive---------36-----------------------

这不全是关于你能多好地编码

在这里,我们将关注分析面试过程中非常重要的一部分:招聘经理在分析候选人身上寻找什么。我们知道面试过程的压力有多大,所以我们希望,通过对招聘过程本身有更多的了解,你可以调整你的面试方法,以获得最大的成功机会。

首先,我们将解释在分析工作面试中你会遇到的一般类型的问题。然后,我们将看看一个好的候选人应该具备的五个关键因素。​

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

我能从分析工作面试中得到什么?
显然,在一次分析工作面试中,他们希望你能够很好地编码。至此,您应该对他们正在评估的编码语言类型有了经验,并且拥有处理他们扔给你的任何东西的数据分析技能。

你可能会在面试中遇到一个用例,它基本上是一个场景,有时会很复杂,需要多个步骤和解决方案来解决。通常,这是基于公司已经经历或正在经历的问题。

显然,他们希望你尝试解决这个问题,但同样重要的是你要解释你是如何得到你的解决方案的。他们正在评估你的过程和方法。你如何得出你的解决方案和解决方案本身一样重要。

分析面试官在候选人身上寻找的 5 个因素

1.思想开放

我们提到过,在分析工作面试中,最重要的是过程。解决分析中的问题有很多方法,因此与面试官保持开放的沟通,解释你是如何做出每个决定的,以及你将如何处理每个用例及边缘情况至关重要。

保持开放的心态是面试过程中的一个关键因素。你必须评估每个问题,并愿意考虑每个可行的选择。这对于确定你试图解决的问题是至关重要的。

你的目标是通过提问和回答进行健康的对话,向面试官展示你已经考虑了所有的选择。通过这样做,你也有更好的机会把自己放在选择最佳选项的位置上。

2.结构化思维

如上所述,分析面试官正在寻找一个思想开放、愿意在选择最佳方案之前考虑所有可行方案的人。这显示了你对你正在尝试做的事情背后的数学和理论的理解。交流你的过程并解释你如何处理数据对面试官理解你的分析技巧很重要。

为了有效地沟通,你必须在处理问题时形成一种务实的、结构化的思路。这样,无论你面临什么问题,你都有一个结构化的方法向面试官展示你是如何解决问题的。

问题通常包括分析代码行。仔细查看语法并解释每个代码块要实现的功能。在此基础上,确定代码所要实现的“大画面”,并确定代码中可以添加或删除的内容,以达成解决方案。通过遵循这个可靠的过程,你可以确保面试官可以很容易地跟踪你的思维过程。你要确保你这边没有遗漏任何东西。

3.关闭边缘案例

边缘案例是理解分析问题最重要的部分之一。对于你在面试中遇到的任何问题,试着想一想代码可能会被破坏的边缘情况,并与面试官交流。此外,确定您的解决方案可能无法捕捉到的业务问题中的某些情况的边缘案例。然后构建一个解决方案来捕获这些边缘案例。建议可以解释它们的方法,以便给定的情况不会破坏代码。这很容易做到,因为您首先确定了潜在的问题领域。

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

4.理解权衡

在技术面试中,几乎总是有不止一种方法来分析数据和解决一个问题,这就不可避免地要做出取舍。你可能不得不放弃一种方法去追求一种不同的方法。在你的面试中,在这种情况下最重要的事情是确定这些权衡,然后解释每个选项,以及为什么你可能会或可能不会选择其中一个。这应该是与面试官的一次对话,这样你的解决方案就可以针对业务目标进行优化。

你的解决方案可能不是 100%完美的,但是如果你表达了为什么你选择了一个方案,为什么你认为你的解决方案是理想的,面试官会对你解决问题的技巧和分析能力感到满意。这些都是面试官往往最感兴趣评价的东西。

5.以任何人都容易理解的方式解释该解决方案将为您带来什么

一旦你对自己的思考过程和解决问题的方法感到满意,重要的是把它们都总结起来。一个很好的方法是向面试官提供你的解决方案的概要。记住,最重要的是你要理解问题,你要达到什么目的,并且愿意评估所有的选择来达成解决方案。

所以,用总结来总结每个答案。快速解释您的解决方案、您考虑过的选项、权衡、边缘案例,以及为什么您认为您的解决方案是最好的。这可以确保面试官带着对你思维过程的理解离开。

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

你可能已经注意到贯穿这几点的一个共同主题。在这些技术面试中,它是关于展示你对概念的理解以及批判性和务实性思考的能力,而不是得出问题的正确答案。正确的答案只是谜题的一部分。分析型面试官在面试过程中的意图是雇佣一个以开放的心态处理每个问题并愿意考虑每个选择的人。

这些品质代表了候选人不仅会战略性地思考,而且不怕与他人合作或寻求帮助。毕竟,公司希望雇佣可以共事的人,而你需要证明你有必要的沟通技巧和洞察力来做到这一点。

如果你想练习一些技术问题,并想看看其他人是如何处理同样的问题的,尝试一下 Strata Scratch 中的一些技术问题,并回顾一下他们的用户的方法和解决方案。

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

Python 强化学习的 5 个框架

原文:https://towardsdatascience.com/5-frameworks-for-reinforcement-learning-on-python-1447fede2f18?source=collection_archive---------3-----------------------

从头开始编写自己的强化学习实现可能需要大量的工作,但是您不需要这样做。有很多很棒的、简单的和免费的框架可以让你在几分钟内开始。

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

通过重用现有的 RL 库,你可以节省很多精力。]

有很多用于监督和非监督机器学习的标准库,如 Scikit-learn、XGBoost 甚至 Tensorflow,它们可以让你立即开始,并且你可以在网上找到支持的日志。遗憾的是,对于强化学习(RL)来说,情况并非如此。

这并不是说没有框架,事实上,有很多关于 RL 的框架。问题是现在还没有标准,所以在网上寻找支持来开始、解决问题或定制解决方案并不容易。这可能是因为虽然 RL 是一个非常受欢迎的研究主题,但它仍处于行业实施和使用的早期阶段。

但是这并不意味着没有伟大的框架可以帮助你开始使用 RL 来解决你喜欢的任何问题。我在这里列出了一些我逐渐了解和使用的框架,以及它们的优点和缺点。我希望这能让你对目前可用的 RL 框架有一个快速的了解,这样你就可以选择一个更适合你需求的框架。

Keras-RL

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

不得不承认从整个榜单来看,这是我的最爱。我相信是目前为止最容易理解的几种 RL 算法的代码实现包括深度 Q 学习(DQN)、双 DQN、深度确定性策略梯度(DDPG)、连续 DQN (CDQN 或 NAF)、交叉熵方法(CEM)、决斗 DQN)和 SARSA。当我说*“最简单易懂的代码”时,我指的不是使用,而是定制它,并将其作为您项目的构建模块。Keras-RL github 也包含了一些例子,你可以使用它们立刻开始。当然,它使用 Keras,您可以将它与 Tensorflow 或 PyTorch 一起使用。

不幸的是,Keras-RL 已经有一段时间没有得到很好的维护,它的官方文档也不是最好的。这给了这个项目的一个分支 Keras-RL2 以启示。

(*)我用这个框架做什么?嗯,我很高兴你问了——或者是我?我用这个框架创建了一个定制的辅导 DQN 代理,你可以在这里了解更多。

Keras-RL2

Keras-RL2 是 Keras-RL 的派生产品,因此它支持与 Keras-RL2 相同的代理,并且易于定制。这里大的变化是 Keras-RL2 维护更好,使用 Tensorflow 2.1.0。不幸的是,没有这个库的文档,尽管 Keras-RL 的文档也可以很容易地用于这个分支。

OpenAI 基线

OpenAI Baselines 是 OpenAI 的一套高质量 RL 算法实现,OpenAI 是人工智能特别是 RL 研发领域的领先公司之一。它的构想是让研究人员可以容易地比较他们的 RL 算法,使用 OpenAI 的最先进的实现作为基线——因此得名。该框架包含许多流行代理的实现,如 A2CDDPGDQNPPO2TRPO

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

【图来自稳定基线基准。]

不利的一面是,OpenAI 基线没有得到很好的记录,尽管代码中有很多有用的注释。此外,因为它是作为基线而不是构建块开发的,所以如果您想为您的项目定制或修改一些代理,代码就不那么友好了。事实上,下一个框架就是从这里派生出来的,解决了大部分问题。

稳定基线

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

[图片来自稳定基线文档。]

稳定基线开放 AI 基线的分支,有重大的结构重构和代码清理。在其官方文档网站中列出的变更如下:

  • 所有算法的统一结构
  • PEP8 兼容(统一代码风格)
  • 记录的函数和类
  • 更多测试和更多代码覆盖
  • 附加算法:SAC 和 TD3(她支持 DQN、DDPG、SAC 和 TD3)

我个人在过去使用过稳定的基线,我可以确认它确实有很好的文档记录并且易于使用。甚至有可能用一句台词来训练一个用于开放式健身房环境的代理:

**from** **stable_baselines** **import** PPO2model = PPO2('MlpPolicy', 'CartPole-v1').learn(10000)

顶点

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

郊狼已经使用 ACME 几十年了,远远领先于他的时代!【图片来自漫画及超越。]

Acme 来自 DeepMind,可能是研究中最知名的致力于 RL 的公司。因此,它是为构建可读、高效、面向研究的 RL 算法而开发的,并包含多种先进代理的实现,如 D4PG、DQN、R2D2、R2D3 等。Acme 使用 Tensorflow 作为后端,并且一些代理实现使用了 JAX 和 Tensorflow 的组合。

Acme 的开发牢记使其代码尽可能可重用,因此其设计是模块化的,易于定制。它的文档并不丰富,但足以给你一个很好的库介绍,也有一些例子让你开始使用 Jupyter 笔记本。

外卖食品

这里列出的所有框架都是任何 RL 项目的可靠选择;决定使用哪一个取决于你的偏好和你到底想用它做什么。为了更好地形象化每个框架及其优缺点,我做了以下直观总结:

Keras-RL—Github

RL 算法的选择:☆☆☆
文档:☆☆☆
定制:☆☆☆☆
维护:☆
后端:Keras 和 Tensorflow 1.14。

Keras-RL2—Github

RL 算法的选择:☆☆
文档:不可用
定制:☆☆☆☆
维护:☆☆
后端:Keras 和 Tensorflow 2.1.0。

OpenAI 基线—Github

RL 算法的选择:☆☆☆
文档:☆☆
定制:☆☆
维护:☆☆☆
后端:Tensorflow 1.14。

稳定基线—Github

RL 算法的选择:☆☆☆
文档:☆☆☆☆
定制:☆☆☆
维护:☆☆☆☆
后端:Tensorflow 1.14。

极致—Github

RL 算法的选择:☆☆☆
文档:☆☆
定制:☆☆☆
维护:☆☆☆☆
后端:Tensorflow v2+和 JAX

如果您已经决定了使用什么框架,那么现在您所需要的就是一个环境。您可以开始使用 OpenAI Gym,它已经在这些框架的大多数示例中使用,但是如果您想在其他任务上尝试 RL,如交易股票、联网或产生推荐,您可以在这里找到一个易于理解的现成可用环境列表:

[## 强化学习环境

我最近一直在研究强化学习(RL ),我发现有很多很棒的文章、教程…

medium.com](https://medium.com/@mauriciofadelargerich/reinforcement-learning-environments-cff767bc241f)

如果你知道任何其他好的 RL 框架,请在下面的回复中告诉我!感谢阅读!😃

5 个免费有趣的 API,可用于学习、个人项目等!

原文:https://towardsdatascience.com/5-free-and-fun-apis-to-use-for-learning-personal-projects-and-more-1cb37b0d3685?source=collection_archive---------9-----------------------

你会对外面的世界感到惊喜。

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

艺术由西斯卡杜斯

公共 API 超赞!

仅在《走向数据科学》出版物上就有 50 多篇涉及 API 的文章,所以我不会做太长的介绍。API 基本上可以让你与一些工具或服务(实际上任何人都可以提供)进行交互。

您可以使用 API 从数据源中检索某种信息,然后在您自己的脚本或应用程序中使用它。公共(开放)API 很棒,因为它们允许任何第三方开发者构建可以连接到现有服务的东西。

有一些流行的 API 做“严肃的事情”,比如跟踪时间序列股票数据或提供空气质量的更新。我们不会在这篇文章中触及这些,因为我想分享一些有趣的 API,你可以在学习与 API 交互甚至创建 API 时进行实验。

您甚至可以用其中的一个构建一个简单的个人项目,来学习如何将一个应用程序连接到您当前正在学习的任何一种语言的 API。

我们开始吧!

1.PlaceGOAT——山羊的免费随机图片

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

天啊,这是一只由 PlaceGoat 生成的山羊

我想我会从一只可爱的小山羊开始。

这是一个非常简单的 GET API,可以生成山羊的图片。我希望我有更多的话要说,但这是真的。这里有到主站点Github 库的链接。

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

山羊主场地

您可以指定要生成的图像的宽度和高度,以像素为单位,如下所示:

[http://placegoat.com/width/height](http://placegoat.com/width/height)

如果你只是想测试一下 Python 中的requests库,这将是一个很好的起点。如果你需要一个想法,试着写一个脚本来获得每天的山羊图像,并每天早上发送给你的另一半(或你的妈妈),以提醒他们你有多关心他们。这会是床上早餐的更好版本。

2.PokéApi —主要游戏的神奇宝贝数据库

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

口袋 Api 主页

神奇宝贝!一定要把他们都干掉,神奇宝贝!

RESTful PokéApi 可以免费使用,并允许您从一个全面的数据库中获取从神奇宝贝游戏到第一个红色和蓝色版本直到剑与盾的所有信息。

这个数据库真的是庞大。你可以得到任何东西,从神奇宝贝的能力到进化触发器到浆果硬度。直接查看 PokéApi 主站点文档了解更多信息。如果您对特定语言的包装器感兴趣,请查看包装器库部分。例如,您可以安装 Pokebase Python 接口,直接在您的 Python 脚本中使用,而不必调用带有requests库的 API。

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

PokéApi 文档

我不知道浆果可以按硬度分类。我想了解更多,所以我点击了以下链接:

[https://pokeapi.co/api/v2/berry-firmness/](https://pokeapi.co/api/v2/berry-firmness/)

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

JSON pretty printed 浆果硬度结果

通常,当您调用 API 端点时,您还应该提供一个 ID 或名称来检索特定数据点的信息。对于 PokéApi,他们说,如果您调用一个没有 ID 或名称的端点,您将得到一个默认的最多 20 个 Api 可用资源的列表。在这种情况下,“浆果硬度”端点有 5 种可能的结果,所以当您调用上面的链接时,您会看到所有结果都以 JSON 格式返回。

值得注意的是,当您使用完全开放的 API 时,您应该注意调用服务端点的频率。PokéApi 取消了速率限制(Api 配置每个时间间隔可以发出多少请求),但它仍然提醒用户限制他们请求的频率,以保持较低的托管成本。在他们的公平使用政策中,他们说人们应该在本地缓存请求的资源,DDoS 攻击将导致永久的 IP 地址禁令。要负责任!

3.Rick 和 Morty API —来自 Rick 和 Morty 的角色、位置和更多信息

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

里克和莫蒂 API 主网站

瑞克和莫蒂!

这个 API 是 RESTful 的,允许您使用 GraphQL 来查询它。如果你不熟悉这种查询语言,它们还可以方便地将你链接到 GraphQL 文档。您可以通过对剧中人物、地点和剧集的元数据发出GET请求来使用 API。

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

里克和莫蒂的 API 文档

要从节目中获得角色的信息,您应该向角色端点提供他们的 ID,如下所示:

[https://rickandmortyapi.com/api/character/5](https://rickandmortyapi.com/api/character/5)

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

JSON 漂亮打印杰瑞·史密斯结果

在这里,提供“5”给我们 Jerry Smith 的角色信息。你还可以在最后看到一个角色的相关图像,所以如果你想练习从 API 下载文件,这可能是一个好的开始。

查看主站点文档了解更多信息。也有一些由不同语言的作者提供的包装器库,所以如果你想使用它们的话,可以去看看。它的 Python 实现可以在这里找到。此外,如果你懂一些 JavaScript 并且有兴趣为开源项目做贡献,你可以看看 Rick 和 Morty API Github。

4.icanhazdadjoke 爸爸笑话数据库

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

icanhazdaddankles 主站点

谁不喜欢爸爸的笑话?

我不确定到目前为止我的 API 相关的双关语算不算,但是我绝对喜欢各种“坏”笑话。

您可以使用 icanhazdadjoke API 从服务中获取一个爸爸笑话。API 文档给出了如何用curl与 API 端点交互的例子。

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

icanhazdadskeys API 文档

curl是一个简洁的工具,你可以用它在你的终端和服务器之间传输数据。在这种情况下,您可以通过使用 HTTP 获取特定的 URL 来测试它。例如,您可以在终端中尝试以下操作:

curl -H "Accept: text/plain" [https://icanhazdadjoke.com/](https://icanhazdadjoke.com/)

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

icanhazdadjoke 卷曲输出

-H命令行参数允许您在请求中包含一个额外标头的参数,在本例中是“Accept: text/plain”。这种修改允许您指定请求的输出类型,这里将是纯文本。如果你需要的话,你也可以把它设置成 JSON ( Accept: text/html)或者 HTML ( Accept: Application/json)。

还有一个端点,您可以使用它来搜索与某个关键字匹配的特定笑话。

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

icanhazdadjook API 文档

通过调用这个端点并将结果存储在数据库中来练习搜索一些关键字可能会很有趣。然后,您会有一个基于您指定的关键字的笑话的本地副本。

查看主站点文档了解更多信息。还有一个 GraphQL 查询端点可以用来查询 API,如果你想这样加载数据的话。

5.邪恶侮辱生成器—一个卑鄙的数据库

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

恶辱生成器主站点

…这个网站很卑鄙。

前提真的很简单:你调用 API,得到一个侮辱。

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

邪恶侮辱生成器 API 文档

就像山羊 API 一样,我在这里真的没有那么多要说的。

您可以指定语言和您希望如何回复侮辱的格式。为了好玩,我想看看另一种语言是否真的有用,所以我试图得到一个西班牙语的侮辱:

[https://evilinsult.com/generate_insult.php?lang=es&type=json](https://evilinsult.com/generate_insult.php?lang=es&type=json)

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

恶意侮辱生成器 API 调用的结果

“马拉车乐”直译成英语是“坏牛奶”。通俗地说,你可以用它来形容不守信用的人或者心情不好的人。

您还可以将这个 API 作为一个非常简单的 API 来练习发出请求。如果你想探索,可以查看一下主站点和它的(相当简单)文档

仅此而已!

我希望当你开始熟悉 API 时,或者如果你只是在寻找一些有趣的工作,你可以尝试使用其中的一个。一定要负责任地调用 API,因为这些 API 是公共的,每个人都可以免费使用。过于频繁地 ping 它们会导致你的 IP 地址被禁止,如果你喜欢山羊图片(或者你正在使用的任何服务),这可不是一件好事。

除了调用 GET 请求之外,我还提到存储结果可能会为您的项目增添一些有趣的内容,所以如果您想了解如何写入 SQLite,请查看这篇文章:

[## 仅使用一行代码写入关系数据库

谁知道您可以在没有任何 SQL 的情况下添加到数据库中呢?

towardsdatascience.com](/using-just-one-line-of-code-to-write-to-a-relational-database-3ed08a643c5f)

对于一种完全不同的在线收集数据的方式,请查看这篇关于 XPath 语言及其在 Python 中的用法的介绍:

[## 如何使用 Python 和 Xpath 抓取网站

用 XPath 表达式从 HTML 中收集星球大战引言

towardsdatascience.com](/how-to-use-python-and-xpath-to-scrape-websites-99eaed73f1dd)

学习 Python 数据科学的 5 本免费书籍

原文:https://towardsdatascience.com/5-free-books-for-learning-python-for-data-science-87be443c084?source=collection_archive---------7-----------------------

学习 Python 的完全免费的阅读列表

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

照片由思想目录Unsplash 上拍摄

对于数据科学家来说,Python 仍然是最受欢迎的编程语言。这在很大程度上是由于语法相对简单、易于学习的性质,以及这样一个事实,即除了用于机器学习的库之外,有一个非常活跃的开发人员社区维护着大量用于数据分析、操作和编排的库。

学习 Python 有很多免费或低价的课程,但如果你更喜欢从书本中学习或想补充这些课程,这里有 5 本完全免费的书,可以让你开始使用 Python 进行数据科学。

1.Python 的搭便车指南

肯尼斯·雷兹&坦尼娅·施卢斯

这是一本适合所有 Python 开发人员的优秀书籍,无论是初学者还是更有经验的用户。它并不特定于数据科学。然而,它会给你一个极好的语言基础,特别是包括推荐的最佳实践和框架。

它包括从安装,开发环境,推荐的代码结构,面向对象编程和一些非常优秀的代码风格的章节。这本书最突出的部分之一是它对包含 Python 代码的目录结构的最佳实践的描述。

这是相当固执己见的风格,但我认为在许多方面这是一件非常好的事情。在编程中,作为一个初学者,你经常不得不在许多不同的做事方法中导航,并且经常不确定选择哪种方法。

[## Python 的搭便车指南!Python 的搭便车指南

Python 编程语言的见解性指南和安装的最佳实践手册…

docs.python-guide.org](https://docs.python-guide.org/)

2.用 Python 自动化枯燥的东西

阿尔·斯威加特

另一本不是专门针对数据科学的书。然而,如果你想要一些能让你对 Python 的简单实际用例感到兴奋的东西,那么这本书绝对值得一读。

主要重点是自动化简单的重复性任务,并假设没有编程知识,所以完全是初学者的优秀。我个人发现,当我心中有一个实际的实现时,我学得最好,这本书给了你一些初学者可以用 Python 快速完成的非常简单的任务。

[## 用 Python 自动化枯燥的东西

Python 编程语言具有广泛的语法结构、标准库函数和…

automatetheboringstuff.com](https://automatetheboringstuff.com/2e/chapter1/)

3.面向所有人的 Python

查尔斯·r·塞弗伦博士

这本书是 Coursera 上的Python for Everybody Specialization的伴奏,采用信息学的方法来学习 Python,而不是基于计算机科学的方法。因此,它重点关注如何使用 Python 进行数据分析任务,如果你正在学习数据科学,这是一件好事。

它涵盖了所有 Python 基础知识,但另外还有优秀的数据特定部分,如使用 Python 与数据库交互、数据可视化和数据建模。

[## PY4E——适合所有人的 Python

这本书的目标是提供一个面向信息学的编程介绍。…之间的主要区别

www.py4e.com](https://www.py4e.com/book.php)

4.Python 数据科学手册

杰克·范德普拉斯的《T4》

这是对构成数据科学家工具包的核心 Python 库的很好的介绍。包括使用 Numpy、Pandas、Matplotlib 和 Scikit-learn 的精彩解释和代码示例。还有一个很好的章节是关于数据科学家最流行的 Python 开发环境 IPython ,并且很好地涵盖了它如此流行的原因。

[## Python 数据科学手册

该网站包含 Jake VanderPlas 的 Python 数据科学手册的全文;该内容可在…上获得

jakevdp.github.io](https://jakevdp.github.io/PythonDataScienceHandbook/)

5.Python 机器学习简介

安德烈亚斯·c·穆勒&莎拉·圭多

这本书是我发现的最好的关于机器学习的 Python 介绍之一。它主要关注使用 Scikit-learn 库的应用程序,但涵盖了适用于任何其他库的用于机器学习的 Python 编程的核心概念。

有非常清晰的解释,机器学习工作流程的最佳实践和大量的示例代码。它非常温和地介绍了每个新概念,每个概念都建立在前面的概念之上,在整本书中变得更加复杂。因此,如果你对机器学习完全陌生,这是一个很好的介绍。

[## Python 机器学习简介:数据科学家指南

用 Python 介绍机器学习数据科学家指南

www.academia.edu](https://www.academia.edu/42736911/Introduction_to_Machine_Learning_with_Python_A_Guide_for_Data_Scientists)

有大量免费或低价的资源可用于在线学习数据科学。如果你正在寻找这些书籍之外的更多免费学习资源,我之前写过一篇文章,名为如何免费学习数据科学,其中包含一个更全面的列表。

感谢阅读!

我每月发一份简讯,如果你想加入请通过这个链接注册。期待成为您学习旅程的一部分!

5 本免费书籍,让您的数据科学技能更上一层楼

原文:https://towardsdatascience.com/5-free-books-to-take-your-data-science-skills-to-the-next-level-a2026c8cad71?source=collection_archive---------9-----------------------

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

金伯利农民在 Unsplash 上拍摄的照片

帮助您提高数据科学技能的书籍

就目前的情况来看,我还远没有达到作为一名数据科学家的目标。在我迄今为止的旅程中,我遇到了许多乐于助人的人,并遇到了各种有用的资源。

当我思考我从哪里来,我现在在哪里时,我立即想起了对我作为数据科学家的进步具有革命性意义的 4 本书,今天我将与你们分享其中的内容。

**更新于 2020 年 6 月 10 日:使用 Scikit-Learn 和 Tensorflow 的动手机器学习受版权保护,因此我添加了购买链接(向作者致以诚挚的歉意)。这意味着目前只有 4 本免费的书。我一直在阅读,看看是否有什么可以填充,如果你发现什么,请发送您的建议,以便我可以通读(它必须是免费的,请)。

注意:我的任何推荐都没有关联链接,我也不同意任何作者的观点。

Python 的搭便车指南

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

这是一本与众不同的书!不是因为它有争议或什么,而是因为它与数据科学没有直接关系。

Python 是数据科学家(以及 R)中一种流行语言,这本书可以带你达到专家水平。这本书描述了用 Python 编程时应该遵循的最佳实践,如果你读过数据科学家应该知道软件工程最佳实践,你会知道这比以往任何时候都更重要。

越来越多的数据科学项目投入生产,这对数据科学家提出了更高的端到端技能要求。这本书是一个很好的开端。

你可以通过下面的链接免费下载这本书!

[## Python 的搭便车指南!Python 的搭便车指南

Python 编程语言的见解性指南和安装的最佳实践手册…

docs.python-guide.org](https://docs.python-guide.org/)

Python 数据科学手册

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

杰克·范德普拉斯一针见血地为这本书命名;这是那种“永远不要扔掉这本书”的书。

从 NumPy 到 Pandas,再到 Matplotlib 和机器学习,VanderPlas 先生全面概述了我们如何面对日常挑战,如操纵、转换和清理数据;可视化各种数据;并使用数据建立统计或机器学习模型。

最理想,容易阅读的参考书!

[## Python 数据科学手册

该网站包含 Jake VanderPlas 的 Python 数据科学手册的全文;该内容可在…上获得

jakevdp.github.io](https://jakevdp.github.io/PythonDataScienceHandbook/)

使用 Scikit-Learn 和 Tensorflow 进行机器实践学习

注意:我注意到这本书是受版权保护的,因此从技术上来说,它并不是免费的——更多细节见页面顶部的注意事项。

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

概念和编码示例的解释对于想要开始从事个人项目的人来说是非常直观和有用的。

事实上,在我看来,我相信在读完这本书之后(或者当你读的时候),你必须用你的新知识去建立一些东西。

这是一本非常实用的书,你绝对应该花时间来回答这些问题!

要获得这本书,请访问亚马逊

统计学习的要素

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

个人建议?睡前不要看这个!你想在精力最充沛的时候读。

这本书是迄今为止我推荐的所有书中最复杂的一本,也是你会经常提到的一本。它深入到统计学中,并且以相当复杂的方式编写,因为它在我们作为数据科学家将遇到的许多事情背后的数学上很重要。

我把这本书放在这里不是为了炫耀我很聪明——我不是,但我可以像你一样学习任何我想学的东西!——而是为了设定标准。如果我们想成为顶尖的数据科学家,我们必须愿意做大多数人不愿意做的事情,例如深入研究将我们的领域结合在一起的基础。

:如果你没有数学背景,我强烈建议你在阅读本文之前,以更简单的方式接触一些机器学习算法,比如实现它们。

不要畏惧数学,读 统计学习的要素

机器学习向往

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

我很惊讶这本书不像列表中的其他一些书那样被提及。吴恩达是 Coursera 的创始人,也是一些关于机器学习和深度学习的最佳课程的讲师,他整理了自己在谷歌和百度等公司工作期间最有价值的经验,并把它们写在纸上,供我们借鉴。

在我个人看来,看了像 ____ 这样为我们提供了实用的使用机器学习方法的书,这本书是一个超集的最佳书籍。这是关于成为一名优秀的团队成员,包括高效、高效和优秀的团队成员(以防不明显)。

注意:要获得免费图书,您需要填写一些详细信息,完成后会通过电子邮件发送给您。

[## 机器学习向往- deeplearning.ai

人工智能正在改变众多行业。来自吴恩达的免费电子书《机器学习向往》教你如何…

www.deeplearning.ai](https://www.deeplearning.ai/machine-learning-yearning/)

奖金簿

按照约定,我给了你 4 本免费的书,它们会让你的数据科学技能更上一层楼。然而,作为奖励,我会提供 __ 本书,让你的数据科学技能更上一层楼——这些书的唯一区别是它们不是免费的。但是嘿!花钱买质量好没有错。

接近(几乎)任何机器学习问题

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

在亚马逊上购买

如果我有女朋友,她可能会嫉妒我对阿布舍克·塔库尔作品的赞赏。我见过的最有动手能力的人之一,这就解释了为什么他是 Kaggle 4x 特级大师!

他出版了一本书,让我们深入了解他的世界,老实说,就我从中获得的实用知识量而言,这是今年我最好的读物之一。

注意:这本书要求你有很好的机器学习知识,所以让你自己爬起来,捡起这个坏男孩!

在亚马逊上购买 接近(几乎)任何机器学习问题

包裹

我总结了一些让我达到新高度的书。我没有阅读所有关于数据科学领域的书籍,所以我可能错过了一本非常重要的书。如果你碰巧认为是这种情况,留下一个带有书名和 pdf 免费链接的回复。非常感谢!

让我们继续 LinkedIn 上的对话…

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

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

www.linkedin.com](https://www.linkedin.com/in/kurtispykes?originalSubdomain=uk)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值