【AICon】探索八个行业创新案例,教你在教育、金融、医疗、法律等领域实践大模型技术! >>> 了解详情
写点什么

这 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


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2020-10-31 09:006472
用户头像
刘燕 InfoQ高级技术编辑

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

关注

评论 2 条评论

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

“采访”ChatGPT看看它对我们GreatSQL社区有什么看法

GreatSQL

MySQL greatsql greatsql社区

高级java体系课第1期第二周作业

刘博

Apifox 1 月更新 | 将接口调试做到「极简」的新模式上线

Apifox

Apifox API

VSCode一键接入Notebook体验算法套件快速完成水表读数

华为云开发者联盟

人工智能 华为云 企业号 2 月 PK 榜 华为云开发者联盟

设计模式-策略模式详解

C++后台开发

设计模式 策略模式 后端开发 Linux服务器开发 C++开发

优秀实践案例征集火热开启,快来投稿!

Apache RocketMQ

消息列队

提升软件质量?为什么不试试华为云CodeArts Check

华为云开发者联盟

云计算 华为云 企业号 2 月 PK 榜 华为云开发者联盟

使用 NineData GUI 创建与修改 ClickHouse 表结构

NineData

MySQL 分布式数据库 Clickhouse Dbeaver NineData

使用 QuTrunk+Amazon Deep Learning AMI(TensorFlow2)构建量子神经网络

亚马逊云科技 (Amazon Web Services)

深度学习 量子计算

云原生技术在容器方面的应用

统信软件

容器 云原生 云服务

分布式缓存服务DCS:企业版性能更强,稳定性更高

华为云开发者联盟

云计算 后端 华为云 企业号 2 月 PK 榜 华为云开发者联盟

4道数学题,求出极狐GitLab CI 流水线之最优解|第1题:有向无环图流水线

极狐GitLab

ci DevOps cicd pipeline 极狐GitLab

基于 Kubernetes 的企业级大数据平台,EMR on ACK 技术初探

阿里巴巴云原生

阿里云 容器 云原生

OpenHarmony 3.2 Beta多媒体系列——视频录制

OpenHarmony开发者

OpenHarmony

直播预告丨 立即解锁 ALB Ingress 高级特性

阿里巴巴云原生

阿里云 容器

统一观测丨如何使用Prometheus 实现性能压测指标可观测

阿里巴巴云原生

阿里云 云原生 Prometheus 压测

直播预约|数据库掌门人论坛召开,共谋中国数据库生态发展新路径

镜舟科技

数据库 大数据 开源

关于小游戏引擎你还了解哪些?

没有用户名丶

小程序游戏

陕西旅游集团旗下景区春节期间累计接待超200万人次,这背后也有火山引擎VeDI的身影

字节跳动数据平台

大数据 数据中台 字节跳动 数据产品

新思科技解读2023年软件安全行业六大趋势

InfoQ_434670063458

新思科技 软件安全

物联网平台选型葵花宝典:盘点开源、SaaS及通用型平台的优劣对比

AIRIOT

物联网 物联网平台选型 平台选型

记录一次还算优雅的代码设计

京东科技开发者

线程 cpu 优雅 代码设计 企业号 2 月 PK 榜

从一个Demo说起Zookeeper服务端源码

宋小生

zookeeper

从 await-to-js 到 try-run-js

jump-jump

JavaScript 异步 优化 Async 重试

【等保小知识】过等保后可以收到哪些资料?

行云管家

等保 等级保护 过等保

聊一聊,我对DDD的关键理解

阿里技术

DDD

给 Databend 添加 Aggregate 函数 | 函数开发系例二

Databend

有了 ETL 数据神器 dbt,表数据秒变 NebulaGraph 中的图数据

NebulaGraph

数据库 大数据 数据处理 图数据库

南宁等级测评机构有几家?分别是哪几家?

行云管家

等保 南京 等级保护 等级

2023年最新互联网大厂精选Java面试真题集锦(JVM、多线程、MQ、MyBatis、MySQL、Redis、微服务、分布式、ES、设计模式)

架构师之道

编程 程序员 计算机 java面试

什么是智能制造,为什么它对传统制造业影响如此之大?

PreMaint

智能工厂 智能制造

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