写点什么

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数据挖掘与机器学习实战(五):基于线性回归的股票预测


2020-02-01 16:192027

评论

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

一口气搞懂「文件系统」,就靠这 20 张图了

小林coding

操作系统 计算机基础 文件管理 文件存储 文件系统

敏捷软件工程实践书籍

Bob Jiang

敏捷 敏捷书籍 工程实践

架构优化与业务迭代,你会怎么选?

架构精进之路

软件开发

告诉你如何同时拿到腾讯两个部门的offer?

我是程序员小贱

IT人的身体健康

隆隆

IT人健康

简述Python中变量作用域的规则

王坤祥

Python python升级 Python基础

翻译: Effective Go (5)

申屠鹏会

翻译 Go 语言

领域驱动设计(DDD)实践之路(二):事件驱动与CQRS

vivo互联网技术

DDD 架构设计 CQRS

浅谈技术管理者的角色认知与自我管理

Geek_37rwst

团队管理 管理 自我管理 技术管理

队列高级应用之设计一个高性能线程池

架构师修行之路

分布式 线程池 架构设计 架构师

推荐一个替代印象笔记,onenote的神奇笔记!

申屠鹏会

笔记

简谈Python3中的闭包

王坤祥

Python Python基础

第10周总结+作业

林毋梦

HashMap、LinkedHashMap 学习笔记

Geek_vidmje

你可能不知道的iPython使用技巧

王坤祥

Python

神经网络激活函数为什么要使用非线性函数?

王坤祥

神经网络 激活函数

大厂需要你的简历有这些内容!

我是程序员小贱

Rust竟然没有异常处理?

袁承兴

rust 异常 java异常处理

憋再@官方了,头像加国旗,10行代码给你安排!

王坤祥

Python python升级

如何理解Python中的可迭代对象、迭代器和生成器

王坤祥

Python python升级

SpringBoot系列(四):SpringBoot特性_外部化配置(properties文件配置)

xcbeyond

Java 微服务 springboot

我们未曾见过的世界,大到无法想象

王坤祥

ios 极客 apple 苹果 软件推荐

非科班面试阿里,拼多多,银行都问了些啥?

我是程序员小贱

重点发布!河北行动计划发布!聚焦7大重点任务发展大数据产业

CECBC

区块链技术 落地应用 政策

架构师训练营 - 第 7 周学习总结

红了哟

二叉查找树-增删查和针对重复数据的 Java 实现

多选参数

数据结构 算法 二叉树 数据结构与算法

Kafka和RocketMQ底层存储之那些你不知道的事

yes

kafka RocketMQ 零拷贝 Mmap

如何做好技术选型

xcbeyond

Java 架构 最佳实践 技术选型

简谈Python3关键字nonlocal使用场景

王坤祥

Python Python基础

浅析Python中的列表和元组

王坤祥

Python python升级

图解JavaScript——代码实现(new、Object.create()、Object.assign()、flat()等十四种代码原理实现不香吗?)

执鸢者

Java 大前端 代码原理

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