【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

Python 数据挖掘与机器学习实战(一):Python 语言优势及开发工具

  • 2020-02-01
  • 本文字数:4441 字

    阅读完需:约 15 分钟

Python数据挖掘与机器学习实战(一):Python语言优势及开发工具

编者按:本文节选自方巍著《Python 数据挖掘与机器学习实战》一书中的部分章节。

1.6 Python 语言的优势

Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言,也是人工智能首选的编程语言。因此,基于以下 3 个原因,本书选择 Python 语言作为实现机器学习算法的编程语言:


  • 语法清晰,简单易学;

  • 易于操作纯文本文件和非数值型数据;

  • 使用广泛,有大量的开发文档。

1.6.1 可执行伪代码

Python 的设计哲学是“优雅”“明确”“简单”。Python 具有清晰的语法结构,更加简单易学,大家也把它称做可执行伪代码。Python 开发环境已经附带了很多高级数据类型,如列表、元组、字典和队列等。使用这些数据类型就可以完成很多大型的任务或者系统。此外,大家也可以使用自己熟悉的编程风格,如面向对象编程、面向过程编程或者函数式编程。


Python 语言处理和操作文本文件非常简单,非常易于处理非数值型数据。Python 语言提供了丰富的正则表达式函数及很多访问 Web 页面的函数库,使得从 HTML 中提取数据变得非常简单、直观。

1.6.2 Python 语言使用广泛

Python 语言使用相当广泛,代码范例也很多,便于读者快速学习和掌握。此外,在开发实际应用程序时,也可以利用丰富的模块库缩短开发周期。


在科学和计算领域,大量的函数库使 Python 语言得到了广泛应用。例如 SciPy 和 NumPy 等许多科学函数库都实现了向量和矩阵运算操作,这些函数库不仅增加了代码的可读性,有简单的学习基础的初学者就可以看懂代码的实际功能,还使得代码更加简单明确。另外,科学函数库 SciPy 和 NumPy 使用底层语言(C 语言和 Fortran 语言)编写,提高了相关应用程序的运行效率。


Python 还可以与绘图工具 Matplotlib 协同工作。Matplotlib 可以非常容易地绘制 2D 和 3D 图形,可视化运行结果,也可以处理科学研究中经常用到的图形。

1.6.3 Python 语言特色

Python 开发人员会尽量避开不成熟或者不重要的优化。一些针对非重要部位的加快运行速度的补丁通常不会被合并到 Python 内,所以很多人认为 Python 很慢。不过,根据“二八定律”,大多数程序对速度要求不高。在某些对运行速度要求很高的情况下,Python 设计师倾向于使用 JIT 技术,或者使用 C/C++语言改写这部分程序。可用的 JIT 技术是 PyPy。


Python 是完全面向对象的语言。函数、模块、数字和字符串都是对象,并且完全支持继承、重载、派生和多继承,有益于增强源代码的复用性。Python 支持重载运算符和动态类型。相对于 Lisp 这种传统的函数式编程语言,Python 对函数式设计只提供了有限的支持。有两个标准库(functools 和 itertools)提供了 Haskell 和 Standard ML 中久经考验的函数式程序设计工具。


虽然 Python 被粗略地分类为“脚本语言”(script language),但实际上一些大规模软件开发计划如 Zope、Mnet 及 BitTorrent,以及 Google 公司也在广泛地使用它。Python 的支持者喜欢称它为一种高级动态编程语言,原因是“脚本语言”泛指仅做简单程序设计任务的语言,如 Shell Script、VBScript 等只能处理简单任务的编程语言,并不能与 Python 相提并论。


Python 本身被设计为可扩充的,但并非所有的特性和功能都集成到语言核心。Python 提供了丰富的 API 和工具,以便程序员能够轻松地使用 C、C++和 Cython 语言来编写和扩充模块。Python 编译器本身也可以被集成到其他需要脚本语言的程序内,因此很多人还把 Python 作为一种“胶水语言”(glue language)来使用。在 Google 公司内部的很多项目中,经常会使用 Python 将其他语言编写的程序进行集成和封装。例如,Google Engine 使用 C++语言编写性能要求极高的部分模块,然后用 Python 或 Java/Go 调用相应的模块。

1.6.4 Python 语言的缺点

Python 语言唯一的不足是性能问题。Python 程序运行的效率不如 Java 程序或者 C 程序效率高,但是可以使用 Python 调用 C 语言编译的代码。也就是说,可以同时利用 C 语言和 Python 语言的优点,取长补短,逐步地开发机器学习应用程序。例如,可以使用 Python 语言编写系统程序,然后使用其他工具将 Python 代码简单地转换成 C 代码。C++Boost 库就适合完成这个任务,其他类似于 Cython 和 PyPy 的工具也可以编写强类型的 Python 代码,改进一般 Python 程序的性能。


以上大致介绍了本书选择 Python 语言实现机器学习算法的原因,下一节将学习 Python 语言的常用开发工具。

1.7 Python 开发工具介绍

Python 程序的开发工具很多,也就是通常人们所说的 IDE。那 IDE 是什么?可以简单地将其理解为一个专门写程序的软件,真正的名称叫做集成开发工具。常用的 Python IDE 主要包括两大类,一类是文本工具类,比如 Python 自身提供的 IDLE,还有一类是集成工具类,主要用于比较大型的程序开发。


Python 程序开发用什么工具好呢?初次接触 Python 的学者,使用 IDLE 就可以满足基本需求,也可以进行简单的调试。


更强大的 IDE 还应该有自动提示、完备的调试和语法高亮功能,当然也应该更好地支持缩进功能,尤其对于 Python 这种强制缩进的语言。自动提示功能是指,输入一个函数会自动提示参数,或者输入一个对象的时候自动提示它的成员函数和成员变量,这些都能大大提高编程效率。当开发大型工程的时候,怎么管理工程就是个问题了。Python 也一样,当工程很大的时候,文件也很多,此时不管是管理工程还是调试,使用 IDLE 显然是不能胜任了。所以下面来介绍一些常见的 Python 开发工具。

1.7.1 IDLE 简介

IDLE 是 Python 自带的、默认的常见、入门级编写工具,适合初学者使用。其主要包括交互式与文件式两种方式。交互式是指可以一句或一段地运行。文件式是指可以像其他编辑器一样,虽然有点“丑陋”,但功能还是很强大的。小型项目使用 IDLE 十分合适。IDLE 是一个 Python shell。shell 的意思就是“外壳”,基本来说,这是一个通过输入文本与程序交互的途径,可以利用这个 shell 与 Python 交互(正是因为这个原因,可以看到窗口的标题栏上显示着 Python shell)。IDLE 本身还是一个 GUI(图形用户界面),所以在“开始”菜单中显示为 Python GUI。IDLE 图形用户界面如图 1-3 所示。



图 1-3 IDLE 图形用户界面

1.7.2 IPython 简介

IPython 是一个面向对象的 Python 交互式 shell,用了它之后或许你就不想再用自带的 Python shell 了。IPython 支持变量自动补全、自动缩进,支持 bash shell 命令,内置了许多实用功能和函数,同时它也是科学计算和交互可视化的最佳平台。IPython 图形用户界面如图 1-4 所示。



图 1-4 IPython 图形用户界面

1.7.3 PyCharm 简介

PyCharm 是由 JetBrains 打造的一款 Python IDE,是使用比较广泛的 Python IDE,其功能十分强大,具备一般编译器的特点,如调试、语法高亮、Project 管理、代码跳转、智能提示、自动完成、单元测试和版本控制等。PyCharm 分成了两个系列,专业版(需付费)和社区版(免费),对于学习和部署一般的中小型项目,社区版完全可以满足基本需求。PyCharm 图形用户界面如图 1-5 所示。



图 1-5 PyCharm 图形用户界面

1.7.4 Jupyter Notebook 简介

Jupyter Notebook(此前被称为 IPython Notebook)是一个交互式笔记本,支持运行 40 多种编程语言。


Jupyter Notebook 的本质是一个 Web 应用程序,便于创建和共享文学化程序文档,支持实时代码、数学方程、可视化和 Markdown。用途包括:数据清理和转换、数值模拟、统计建模和机器学习等。简而言之,Jupyter Notebook 是以网页的形式打开,可以在网页页面中直接编写代码并运行代码,代码的运行结果也会直接在代码块下显示。如在编程过程中需要编写说明文档,可在同一个页面中直接编写,便于做及时的说明和解释。Jupyter Notebook 图形用户界面如图 1-6 所示。



图 1-6 Jupyter Notebook 图形用户界面

1.7.5 Anaconda 和 Spyder 简介

Anaconda 是一个用于科学计算的 Python 发行版,支持 Linux、Mac OS 和 Windows 系统,提供了包管理与环境管理的功能,可以很方便地解决多版本 Python 并存、切换及各种第三方包安装问题。Anaconda 利用工具/命令 conda 进行 package(包)和 environment(环境)的管理,并且已经包含了 Python 和相关的配套工具。


这里先解释 conda 和 Anaconda 的差别。conda 可以理解为一个工具,也是一个可执行命令,其核心功能是包管理与环境管理。包管理与 pip 的使用类似,环境管理则允许用户方便地安装不同版本的 Python 并可以快速切换。Anaconda 则是一个打包的集合,里面预装好了 conda、某个版本的 Python、众多 package 和科学计算工具等,所以也称为 Python 的一种发行版。conda 将几乎所有的工具和第三方包都当做 package 对待,甚至包括 Python 和 conda 自身。因此,conda 打破了包管理与环境管理的约束,能非常方便地安装各种版本的 Python 和各种 package 并能方便地切换。Anaconda 的安装包和环境管理界面如图 1-7 所示。



图 1-7 Anaconda 安装包和环境管理界面


Spyder(前身是 Pydee)是一个强大的交互式 Python 语言开发环境,提供了高级的代码编辑、交互测试和调试等特性,支持包括 Windows、Linux 和 OSX 系统。和其他的 Python 开发环境相比,Spyder 最大的优点就是模仿 MATLAB 的“工作空间”的功能,可以很方便地观察和修改数组的值。安装了 Anaconda 后会同时集成 Spyder 开发工具。Spyder 图形用户界面如图 1-8 所示。



图 1-8 Spyder 图形用户界面


下面是以上介绍的 5 种常用 Python 开发工具的特点总结,如表 1-1 所示。


表 1-1 5 种 Python 开发工具特点总结


开发工具特点
IDLE1.智能缩进,调用提示,自动完成等功能;
2.适用于入门的学习者及小型项目
IPython1.支持变量自动补全、自动缩进,支持bash shell命令;
2.内置许多实用功能和函数;
3.可以进行科学计算和交互可视化
PyCharm1.编码协助;
2.项目代码导航;
3.用户可使用其编码语法,错误高亮,智能检测,以及一键式代码快速补全建议;
4.集成的单元测试
Jupyter Notebook1.编程时具有语法高亮、缩进、Tab键补全的功能;
2.可直接通过浏览器运行代码,同时在代码块下方展示运行结果;
3.以富媒体格式展示计算结果;
4.支持使用LaTeX编写数学性说明
Anaconda&Spyder1.包括Python和很多常见的软件库;
2.含有包管理器conda;
3.适用于企业级大数据分析的Python工具;
4.在数据可视化、机器学习和深度学习等多方面都有应用;
5.完全开源和免费


根据表 1-1 中的比较可知,Anaconda&Spyder 更加简洁,功能更强大,适用于初学者,所以本书主要使用 Anaconda&Spyder 作为实例程序的开发工具,具体的安装及详细介绍将在下章中讲解。


图书简介:https://item.jd.com/12623592.html?dist=jd



相关阅读


Python数据挖掘与机器学习实战(一):Python语言优势及开发工具


Python数据挖掘与机器学习实战(二):Python语言简介


Python数据挖掘与机器学习实战(三):网络爬虫原理与设计实现


Python数据挖掘与机器学习实战(四):用 Python 实现多元线性回归


Python数据挖掘与机器学习实战(五):基于线性回归的股票预测


公众号推荐:

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

2020-02-01 16:191617

评论

发布
暂无评论
发现更多内容

做到这4点,才是真正的持续交付| 研发效能提升36计

阿里云云效

阿里云 云原生 持续交付 云平台 研发

国内堡垒机品牌你给推荐哪款?我推荐行云管家!

行云管家

微信朋友圈高性能复杂度分析

王大胖

APICloud AVM框架列表组件list-view的使用、flex布局教程

YonBuilder低代码开发平台

前端开发 前端框架 APP开发 APICloud 跨端开发

如何提升本地开发联调效率|阿里巴巴DevOps实践指南

阿里云云效

阿里云 DevOps 云原生 研发 本地开发

java培训:Java堆和栈区分出来的原因

@零度

JAVA开发

使用craco对cra项目进行构建优化

CRMEB

C#中的数据字典Dictionary

Andy阿辉

C# 程序员 程序人生 2月日更

我的云原生学习方法 | 社区征文

大菠萝

新春征文

Spring Boot Serverless 实战系列 | 性能调优

Serverless Devs

springboot Java web 2月月更

有了堡垒机,运维工程师们不再是背锅侠啦!

行云管家

ClickHouse 在UBA系统中的字典编码优化实践

字节跳动数据平台

大数据 字节跳动 Clickhouse 用户行为分析

Lazada 容器深度优化之旅

阿里巴巴终端技术

容器 优化业务 客户端开发 移动应用开发

高性能系统开发的几个手段

漫游指南

性能优化

SAP 移动开发技术综述 | 社区征文

Jerry Wang

android 移动开发 cordova 新春征文 2月月更

Swagger通过拦截器(Interceptor)配置默认请求头

为自己带盐

swagger 2月月更

react源码解析2.react的设计理念

buchila11

React React Hooks

字节、阿里等大厂的技术如何?看看这些Java程序员的自学笔记

进击的王小二

程序员 面试

跨站脚本攻击xss利用-beef攻击-演示

喀拉峻

网络安全 XSS

TiDB 在国信证券海量数据高并发场景中的实践

陈培新

TiDB

网络安全kali渗透学习 web渗透入门 Google搜索引擎的使用技巧

学神来啦

11亿条数据压缩到12GB,TDengine在陕煤矿山项目的落地实践

TDengine

数据库 大数据 tdengine 开源 物联网

效能时代,数栈专属DevOps跑出加速度

袋鼠云数栈

DevOps 智能运维

DDD[1]·区分系统与业务行为

陆乘风

领域驱动设计 领域驱动设计DDD 领域驱动

恒业资本江一:ToB长期主义不是经营无能的遮羞布

ToB行业头条

带你读AI论文:NDSS2020 UNICORN: Runtime Provenance-Based Detector

华为云开发者联盟

漏洞 apt APT攻击 UNICONRN 数据来源分析

Hive往表写入数据的八种方法

编程江湖

15倍提升 & 40倍存储优化,TDengine在领益智造的实践

TDengine

数据库 大数据 tdengine 开源 物联网

阿里巴巴移动技术 2021 年终盘点

阿里巴巴终端技术

ios android 客户端 移动应用开发 年终盘点

构建制品不一致,后续工作都是白费 | 研发效能提升36计

阿里云云效

阿里云 云原生 持续交付 云平台 研发

恒源云(GPUSHARE)_可构建AI的「AI」诞生?

恒源云

神经网络 深度学习

Python数据挖掘与机器学习实战(一):Python语言优势及开发工具_大数据_方巍_InfoQ精选文章