【QCon】精华内容上线92%,全面覆盖“人工智能+”的典型案例!>>> 了解详情
写点什么

这 10 个 Python 技能,被低估了

  • 2020-10-31
  • 本文字数:4881 字

    阅读完需:约 16 分钟

这10个 Python 技能,被低估了

本文最初发表于 Kdnuggets 网站,经原作者 Nicole Janeway Bills 授权,InfoQ 中文站翻译并分享。


一旦掌握这些技能,我敢说,你将会成为一个更“性感”的数据科学家。


《哈佛商业评论》(Harvard Business Review)在 2012 年发表的一篇文章《21 世纪最性感的工作》(The Sexiest Job of the 21st Century)中描绘了这样的一个愿景:数据科学团队将能够毫不费力地从数据中创建可操作的信息。


虽然数据科学并不完全是“海滩游侠”(Baywatch),但它是一个充满活力的领域,具有巨大的潜力,可以从组织的顶级战略资产中产生有价值的见解——伟大的数据基础设施所提供的竞争优势。


译注:《海滩游侠》是由 Michael Berk 执导的电视剧,是世界上收视率最高的电视连续剧之一。故事情节围绕海滩护卫队员营救故事展开,最大看点是海边的旖旎风景,以及无数的泳装帅哥美女。


为帮助你的数据科学工作,本文介绍了十个被低估的 Python 技能。一旦掌握这些技能,我敢说,你将能够成为一个更“性感”的数据科学家。

10、设置虚拟环境

虚拟环境为 Python 项目设置一个隔离的工作区。无论是你是单独工作还是与人合作,拥有一个虚拟环境都会有帮助,原因如下:


  1. 避免包冲突。

  2. 在安装包的位置提供清晰的视线。

  3. 确保项目使用的软件包版本的一致性。


虚拟环境的使用允许你(和你的团队成员)对不同的项目有着不同的依赖关系。在虚拟环境中,你可以测试安装软件包,而不必担心会污染系统安装。


部署venv 模块对于避免将来出现问题非常有帮助。因此在项目开始时不要跳过这一步骤。


了解更多:通过设置包含科学计算最常用包的虚拟环境,以节省空间,并且避免在不同地方安装多个包的相同版本。然后在特定项目的环境中以 .pth 文件的形式共享该公共环境。

9、根据 PEP8 标准进行注释

撰写好注释,提高自信和协作能力。在 Python 中,这意味着遵循PEP8编码风格指南。


注释应该是声明性的,如下所示:


# Fix issue with utf-8 parsing
复制代码


而不是如下所示:


# fixes issue
复制代码


下面是一个带有 docstring 的示例,它是一种特殊类型的注释,用于解释函数的用途:


def persuasion():"""Attempt to get point across."""print('Following this advice about writing proper Python comments will make you popular at parties')
复制代码


docstring(文档字符串)特别有用,因为你的 IDE 会将这个字符串识别为与类关联的定义。在 Jupyter Notebook 中,你可以通过将光标放在函数末尾,并同时按下 Shift 和 Tab 键来查看函数的docstring

8、查找好的实用程序代码

你应该听说过“站在巨人的肩膀上”(standing on the shoulders of giants)这句话吧?Python 是一种资源极为丰富的编程语言。通过认识到自己不必孤军奋战,你可以加快数据科学的发现,从而完全可以并应该重用你之前的程序员的使用程序代码。


实用程序代码的一个很好的来源是Chris Albon的博客,该博主是机器学习抽认卡的创建者,这些抽认卡挂满了我家里的书房和卧室的墙上。他的网站提供了数百个代码片段的导航,可以加快你的 Python 工作流。


例如,Chris 向我们展示了如何按组将函数(比如 Pandas 的 rolling mean(移动窗口均值):.rolling()应用到数据帧(DataFrame):


df.groupby('lifeguard_team')['lives_saved'].apply(lambda x:x.rolling(center=False,window=2).mean())
复制代码


这段代码将输出一个数据帧,其中包含每两行的滚动均值,并在.groupby()语句中的第一部分为每个组重新启动。

7、使用 pandas-profiling 进行自动探索性数据分析

使用panda-profiling 工具包可以自动执行大部分探索性数据分析(Exploratory Data Analysis,EDA)。探索性数据分析是任何数据科学项目的关键准备阶段。它通常涉及基本的统计分析,并观察特征之间的相互关系。


这篇文章《通过 pandas-profiling 进行更好探索性数据分析》(A better EDA with Pandas-profiling)阐述了一种标准的“手动”数据探索方法,并将其与 pandas-profiling 库创建的自动报告进行了比较。


探索性数据分析已死,pandas-profiling 万岁!用事半功倍的方法实现完美的数据概览!

6、使用 qcut 改进目标分析

在这个关于改进机器学习工作流的精彩视频中,Rebecca Bilbro提供了明智的建议,在进行特征分析之前应检查你的目标列。



视频链接:https://youtu.be/gtVls61jolk(需科学上网)


以目标为出发点:这样你就可以在开始预测或分类目标变量之前,对目标标量有一个可靠的了解。采用这种方法,可以帮助你预先识别潜在的棘手问题(如类不平衡)。


如果你处理的是连续变量,那么将值放入容器可能会有用。使用 5 个容器提供了利用帕雷托法则(pareto principle)的机会。要创建五分位数,只需使用 Panda 的q-cut函数即可。


amount_quintiles = pd.qcut(df.amount, q=5)
复制代码


译注:帕雷托法则(pareto principle),也称为二八定律或 80/20 法则,此法则指在众多现象中,80% 的结果取决于 20% 的原因,而这一法则在很多方面被广泛地应用。这个法则最初是意大利经济学家 Vilfredo Pareto 在 1906 年对意大利 20% 的人口拥有 80% 的财产的观察而得出的。在计算机科学,帕雷托法则可以应用于优化工作。Microsoft 指出,通过修复报告最多的错误的前 20%,给定系统中 80% 的相关错误将被消除。Lowell Arthur 曾提过:“20% 的代码有 80% 的错误,只要找到它们并修复即可。”


每个容器将包含数据集的 20%。将目标变量的最高五分位数与最低五分位数进行比较,通常会得出有趣的结果。这项技术是一个很好的起点,可以用来确定目标变量最高(或最低)性能可能出现的异常情况。


如需进一步了解,也可以看看 Rebecca 在华盛顿的程序媛们》(《Women Who Code DC》,DC 指哥伦比亚特区,即美国首都华盛顿)职场访谈系列节目中的访谈,由《Yours Truly》节目组(译注:类似中国中央电视台的《大家》、《面对面》节目组)采访:



视频链接:https://youtu.be/xLitAQ2Tynw(需科学上网)

5、为特征分析添加可视化

可视化并不仅仅用于商业智能仪表板。当你研究新的数据集时,加入一些有用的图表和图形,有助于提高分析的速度。


Seaborn 样例库


有许多可能的方法使用数据可视化来提高你的分析能力,下面罗列了一些资源可供探索:


4、测量和优化运行时

数据科学家以擅长修补而闻名。但随着该领域越来越接近于软件工程,对简洁、高性能的代码的需求也在日益增加。程序的性能应该根据时间、空间和磁盘使用情况进行评估,这些都是可扩展性能的关键。


Python提供了一些分析使用程序,可以用来展示你的代码花费时间的地方。为了支持对函数运行时的监视,Python 提供了 timeit 函数


%%timeitfor i in range(100000):i = i**3
复制代码


在使用 Pandas 改进你的代码时,有一些捷径:


  1. 按照应该使用 Pandas 的方式来使用:不要在数据帧行中循环,要用 apply 方法

  2. 利用NumPy数组实现更高效的编码。

3、简化时间序列分析

处理时间序列可能会令人生畏。我的训练营教练在准备讲授这个主题的那天,就带着一副不安的神情出现在课堂上。


幸运的是,dtw-python 包提供了一种比较时间序列的直观方法。简而言之,动态时间规整(Dynamic Time Warping,DTW)计算不同长度的两个数组或时间序列之间的距离。


通过 DTW 包对两个时间序列进行对齐。


首先,DTW 拉伸和 / 或压缩一系列可能不同长度的序列,以使它们尽可能彼此相似。借用语音识别的一个例子,使用这种技术可以帮助算法识别出“now”和“nowwwwwwwwwwwww”是同一个单词,无论是由急躁的成年人说的还是由狂暴的小孩说的。转换之后,程序包将计算单个对齐元素之间的距离。


了解更多:


2、建立用于实验跟踪的 ML Flow

ML Flow可以跟踪参数、代码版本、指标和输出文件。MlflowClient 函数创建并管理实验、管道运行和模型版本。使用mlflow.log_artifact.log_metric().log_param()记录工件(例如数据集)、指标和超参数。


使用mlflow uicommand,你可以在本地主机浏览器中轻松查看所有实验的元数据和结果。


另外,请参看此数据科学工作流的完整指南:


模型选择综合指南》(Comprehensive Guide to Model Selection),该指南阐述了选择正确算法的系统方法。

1、理解__main__函数

使用if __name__ == '__main__',可以灵活地编写代码,这些代码可以从命令行执行,或作为包导入到交互式环境中。这个条件判断语句控制程序在给定上下文的情况下执行。


你应该能够预料到,将代码作为可执行文件运行的用户与将代码作为包导入的用户具有不同的目标。if __name__ == ‘__main__'语句根据执行代码的环境提供控制流。


  • __name__是模块全局命名空间中的特殊变量。

  • 它有一个由 Python 设置的repr()方法。

  • repr(__name__)的值取决于执行上下文。

  • 在命令行中,repr(__name__)计算为‘__main__’,因此if块中的任何代码都将运行。

  • 作为包导入时,repr(__name__)将计算为导入的名称,因此if块中的代码将不会运行。


为什么这很有用呢?从命令行运行代码的人会马上执行函数。但如果有人将这个包作为实用程序代码导入到 Jupyter Notebook 中,则情况可能就不一样了。


if __name__ == ‘__main__'中,你应该创建一个名为main()的函数,其中包含要运行的代码。在各种编程语言中,main函数提供了执行的入口点。在 Python 中,我们仅根据约定将此函数命名为main(),与低级语言不同,Python 并没有赋予main函数任何特殊的意义。但是,通过使用标准术语,我们可以让其他程序员知道,这个函数表示完成脚本主要任务的代码的起点。


main函数应该调用存储在模块中的其他函数,而不是在main()中包含完成任务的代码块。有效的模块化允许用户按照自己的意愿重用代码的各个方面。


模块化的程度取决于你自己:更多的函数意味着更多的灵活性和更容易的重用,但可能会使你的包更难以被人们阅读和解释,因为它们在函数之间遍历逻辑中断。

额外好处:知道何时不使用 Python

作为一名职业 Python 程序员,有时候,我怀疑自己是否过度依赖这个工具进行科学计算。Python 是一门令人愉快的编程语言。它简单明了,维护成本低,而且它的动态结构非常适合数据科学的探索性。


尽管如此,Python 绝对不是处理广泛定义的机器学习工作流各个方面的最佳工具。例如:


  • 对于将数据移动到数据仓库的 ETL 流程来说,SQL 是必不可少的,藉由 SQL,数据分析师和数据科学家可以对数据进行查询。

  • Java可能有助于构建管道组件,如数据提取和清理工具(例如,使用Apache PDFBox来解析 PDF 文档中的文本)。

  • 作为数据科学中 Python 的快速替代品,Julia 正在迅速崛起。

  • Scala 通常用于大数据和模型服务。


在由TWIML AI 播客主持的小组讨论中,专家们探讨了他们所选择编程语言的数据科学应用。



视频链接:https://youtu.be/efcRhdA4Ql0(需科学上网)


听到一个JavaScript 开发人员谈论使用这种典型的以 Web 开发为中心的语言进行机器学习的潜力,这有点奇怪。但是,嘿,这很有勇气,也很有创意不是吗?而且它有可能通过打破机器学习和传统软件开发之间的障碍,实现数据科学的民主化。


目前,JavaScript 在数字上拥有优势:根据2020 年 StackOverflow 开发人员调查StackOverflow 2020 Developer Survey),68% 的开发人员使用 JavaScript,而使用 Python 的开发人员为 44%,只有 1% 的开发人员使用 Julia,但预计这种情况将迅速改变。更多的机器学习开发人员是否意味着更多的竞争,更多的见解,甚至更多的 arXiv 论文?这就更有理由提高你的 Python 技能了。

作者介绍:

Nicole Janeway Bills,数据科学家,有用商业和联邦咨询方面的经验,帮助组织利用他们的顶级资产:简单而健壮的数据策略。


原文链接:


https://www.kdnuggets.com/2020/10/10-underrated-python-skills.html


公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2020-10-31 09:006451
用户头像
刘燕 InfoQ高级技术编辑

发布了 1112 篇内容, 共 489.3 次阅读, 收获喜欢 1965 次。

关注

评论 2 条评论

发布
用户头像
使用多种语言,Python是最让人舒服的
2020-11-07 18:43
回复
用户头像
最性感的语言,非 Python 莫属!
2020-10-31 11:07
回复
没有更多了
发现更多内容

白话讲解创建型设计模式:单例、原型,构建

山河已无恙

9月月更

C++ STL容器详解【三万字超详细讲解】

Fire_Shield

c++ stl 9月月更

详解AUTOSAR:AUTOSRA软件架构(理论篇—2)

不脱发的程序猿

汽车电子 嵌入式开发 AUTOSAR

企业知识管理平台在企业中扮演什么样的角色?

Baklib

知识管理

MySQL高级

楠羽

笔记 MySQL 数据库 9月月更

C++学习------cinttypes头文件的源码学习

桑榆

c++ 源码阅读 9月月更

JSON 之父:10 天赶工出的 JavaScript,最好的归宿就是让它退役

图灵教育

JavaScript 程序员 代码

首次全面解析云原生成熟度模型:解决企业「诊断难、规划难、选型难」问题

阿里巴巴中间件

阿里云 中间件 成熟度

经验分享|分享搭建在线帮助中心的方法

Baklib

【Git】:SSH公钥配置、远程仓库的基础使用...

翼同学

git 开源 版本管理 9月月更

连接与计算无处不在,火山引擎新一代边缘云

火山引擎边缘云

云原生 CDN 边缘计算 火山引擎 边缘云

你真的会使用C语言中的 “ 操作符 ” 吗?

Albert Edison

C语言 开发语言 操作符 9月月更

想了解Python中的super 函数么

华为云开发者联盟

Python 开发 企业号九月金秋榜

你还不知道什么是Git?

翼同学

git 开源 版本管理 9月月更

【git】:有关git的基础指令以及分支概念

翼同学

git 开源 版本管理 9月月更

SD-WAN组网场景概览

阿泽🧸

SD-WAN 9月月更

mysql之事务

急需上岸的小谢

9月月更

详解AUTOSAR:AUTOSAR方法论(理论篇—3)

不脱发的程序猿

汽车电子 嵌入式开发 AUTOSAR方法论

如何高效解决 C++内存问题,Apache Doris 实践之路|技术解析

SelectDB

c++ 大数据 数据分析 Doris 企业号九月金秋榜

一文搞懂UART通信协议

不脱发的程序猿

嵌入式 串口通信 UART

百万奖池角逐,华为云IoT边缘带你看懂“边缘计算开发者大赛”

华为云开发者联盟

云计算 物联网 华为云 企业号九月金秋榜

跟着卷卷龙一起学Camera--LensShading

卷卷龙

ISP camera 9月月更

JSON之父:10天赶工出的JavaScript,最好的归宿就是让它退役

图灵社区

JavaScript 编程 程序员

嵌入式Linux:安装Ubuntu系统环境

不脱发的程序猿

Linux 嵌入式Linux Ubuntu系统环境

论构建智能运维的先决条件

穿过生命散发芬芳

智能运维 9月月更

「趣学前端」读取Excel文件内容

叶一一

JavaScript 前端 9月月更

微信小程序,Python爬虫抓包采集实战,采集某成考题库小程序

梦想橡皮擦

Python 9月月更

面试突击80:说一下 Spring 中 Bean 的生命周期?

王磊

Java 面试题

使用 Mypy 检查 30 万行 Python 代码,总结出 3 大痛点与 6 个技巧!

Python猫

Python

设计模式的艺术 第十九章迭代器设计模式练习(设计一个逐页迭代器,每次可返回指定个数(一页)元素,并将该迭代器用于对数据进行分页处理)

代廉洁

设计模式的艺术

产品经理的进阶指南

产品海豚湾

产品经理 产品设计 职业发展 职业道路 9月月更

这10个 Python 技能,被低估了_AI&大模型_Nicole Janeway Bills_InfoQ精选文章