智能系统与技术丛书
点击查看第二章
点击查看第三章
Python3智能数据分析快速入门
李明江 张良均 周东平 张尚佳 著
第1章
Python概述
人工智能已成为当今世界上最受人瞩目的领域之一。各大公司纷纷在人工智能领域展开角逐,Google、Facebook、Amazon都已经在这个领域里取得了令人瞩目的成果。同时,机器学习作为人工智能的一个分支,已经在不知不觉中深入人们的生活中,如电商平台上的商品推荐和街头监控的图像识别等。由于Python第三方库中集成了诸多算法,所以本书选择Python作为机器学习语言进行介绍。
1.1 Python语言介绍
Python是一门集解释性、编译性、互动性和面向对象为一体的高层次计算机程序语言,也是一门功能强大而完善的通用型语言,已有20多年的发展历史,技术成熟且稳定。相比于C++或Java,Python让开发者能够用更少的代码实现更多的想法。
1.1.1 Python的发展史
荷兰人Guido van Rossum是Python的创始人。1989年圣诞节期间,Guido决心开发一个新的脚本解释程序用来打发圣诞节的无趣。Python这个名字并不是来源于蟒蛇,而是因为Guido是一个名为Monty Python的飞行马戏团的爱好者。他希望这个新的叫作Python的语言能实现他的理念,成为一种位于C和shell之间、功能全面、易学易用、可拓展的语言。
Python从ABC语言上继承了一部分特性,如使用冒号“:”和缩进来表示程序块,而在C语言中使用{}来表示程序块,行尾没有分号,for和if结构中也没有括号()。Guido认为,ABC语言非常优美和强大,是专门为非专业程序员设计的。Guido认为ABC语言没有成功的原因在于其非开放性。于是,Guido决心在Python中避免复现这一错误,这收获了非常好的效果,Python能够完美结合C语言和其他的一些语言。
Python就这样从Guido手中诞生。1991年,第一个Python编译器(解释器)诞生。它使用C语言实现,并能够调用C库(.so)文件。1994年1月,Python 1.0版本正式发布。Python 2.0于2000年10月16日发布,增加实现完整的垃圾回收的功能,并且支持Unicode。同时,整个开发过程更加透明,社群对开发进度的影响逐渐扩大。2008年12月,Python 3.0正式发布,此时Python 3又被称为“Python 3000”或者“Py3K”,此版不完全兼容之前的Python源代码。出于兼容性的考虑,很多新特性后来也被移植到旧的Python 2.6/2.7版本上。截至2018年6月27日,Python已经更新至最新版的Python 3.7.0版本。
Python的语法很多来自C语言,但又受到ABC语言的强烈影响。Python从ABC语言中发展起来,结合了UNIX shell和C语言的习惯,最终成为一门为众多UNIX系统和Linux系统开发者所青睐的开发语言。截至2018年8月的TIOBE语言排行,Python的名次已上升至第4名,成为全球范围内仅次于Java、C语言及C++的开发语言,如图1-1所示。
1.1.2 Python特性
Python语言是一门解释型、动态、强类型的面向对象编程语言。Python的解释型特性与计算机执行程序的步骤有关。由于计算机无法理解除机器语言以外的任何语言,所以必须将程序员编写的程序语言翻译成机器语言,计算机才能执行程序。按翻译的时机的不同,翻译的过程可分为编译和解释两种。在程序编写完成后进行翻译的过程称为编译,而在编写后不进行翻译在执行时才进行翻译的过程称为解释。解释型语言与编译型语言不同,解释性语言编写的程序不需要编译,节省了一道工序,在运行程序的时候才翻译。而编译型语言编写的程序在执行之前,需要一个专门的编译过程,将程序编译成为机器语言的文件。这使得Python比起其他编译型语言发布时更为便捷,但因为在执行时有一个翻译的过程,Python在执行效率上比编译型语言低一些。
动态类型语言是指在程序运行期间才去做数据类型检查的语言。在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在第一次赋值给变量时,在内部将数据类型记录下来。Python就是一种典型的动态类型语言。而静态语言与动态语言相反,静态语言的数据类型是在编译期间检查的,在编写程序时需要声明所有变量的数据类型。C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、Java等。
强类型定义语言(Explicit Type Conversion)是指一门计算机语言是否为强制数据类型定义的语言。强类型语言中的变量被指定为某个数据类型后,在被强制转换前永远是该数据类型。而弱类型语言与强类型定义语言相反,一个变量的数据类型是不确定的。Python是一门强类型的语言,Python不会对数据类型作隐式转换,而是调用方法对数据类型进行强制转换。除Python外,Java、C、C++和C#也是典型的强类型语言。
1.1.3 Python应用领域
Python作为一个设计优秀的程序语言,现在已广泛应用于各种领域,依靠其强大的第三方类库,Python在各个领域都能发挥巨大的作用。
1.数值计算
数值计算是数据挖掘、机器学习的基础。Python提供多种强大的扩展库用于数值计算,常用的数值计算库如表1-1所示。
2.数据可视化
数据可视化是展示数据、理解数据的有效手段,常用的Python数据可视化库如表1-2所示。
3.Web开发
Web应用开发可以说是目前软件开发中最重要的部分。Python提供各种Web开发框架,帮助使用者快速实现功能开发。常用的Python网络开发类库如表1-3所示。
4.数据库管理
数据库是企业用于存放数据的主要工具,数据库管理包括了数据定义、数据操作、数据库运行管理、数据组织、数据库库保护、数据库维护等。Python提供了所有主流关系数据库管理接口,常用的Python MySQL连接库及其简介如表1-4所示。
5.自动化运维
运维的主要内容包括保障业务长期稳定运行、保障数据安全可靠、自动化完成部署任务。Python能够满足绝大部分自动化运维的需求,目前在Linux运维中已用Python实现的应用如表1-5所示。
6.GUI编程
GUI(Graphical User Interface,图形用户界面)是指采用图形方式显示的计算机操作用户界面。Python提供多个图形开发界面的库用于GUI编程,常用Python GUI库如表1-6所示。
1.1.4 Python机器学习优势
Python是机器学习领域最优秀的编程语言之一,与同样支持机器学习且自带机器学习应用的MATLAB不同的是,由于Python是开源项目,所以几乎所有必要的组件都是完全免费的。当前机器学习领域的主流编程语言为Python、R、MATLAB、Java和C/C++,如表1-7所示。
相比起Java与C/C++,Python代码非常容易阅读和学习,使得大多数从事机器学习和人工智能的研究(工作)人员能以最方便的方式来实现自己的想法。Python具有严格且一致的语法风格,这使得每个Python使用者都可以更好地理解其他人的Python代码,而其他语言的语法有可能会导致混淆和不一致的编程范例。
Python作为一门理想的集成语言,将各种技术绑定在一起,除了为用户提供更方便的功能之外,还是一个理想的粘合平台,在开发人员与外部库的低层次集成人员之间搭建连接,以便用C/C++实现更高效的算法。
对于研究人员者而言,使用Python编程可以快速迁移代码并进行改动,而无须花费过多的精力在修改代码与代码规范上。开发者在Python中封装了很多优秀的依赖库,其中NumPy和SciPy库提供了目前解决机器学习问题所需的标准配置。
Python目前集成了大量的机器学习框架,其中常用机器学习库如表1-8所示。
深度学习作为机器学习的分支,绽放了耀眼的光芒。由于Python的易用性与可扩展性,众多深度学习框架提供了Python接口,其中较为流行的深度学习库如表1-9所示。
1.2 Python环境配置
1.2.1 Python 2还是Python 3
Python 3.x引入了一些与Python 2不兼容的关键字和特性,为避免带入过多的累赘,Python 3.0在设计的时候没有考虑向下兼容,许多针对早期Python版本设计的程序都无法在Python 3.0上正常运行。为照顾现有程序,Python 2.6作为一个过渡版本,在使用Python 2.x的语法和库的同时兼顾向Python 3.0的迁移,允许使用部分Python 3.0的语法与函数。基于早期Python版本且能正常运行于Python 2.6并无警告的程序,可以通过一个2 to 3的转换工具无缝迁移到Python 3.0。Python 2.7被确认为最后一个Python 2.x版本,除支持Python 2.x语法外,还支持部分Python 3.1语法。
Python核心团队计划在2020年停止支持Python 2,目前大部分第三方库已经完成向Python 3.x的迁移工作,推荐在新的程序中使用Python 3.x版本。
1.2.2 Anaconda简介
Anaconda是一个Python的集成开发环境,可以便捷地获取库,且提供对库的管理功能,同时对环境可以统一管理的发行版本。Anaconda包含Conda、Python等在内的超过180个科学库及其依赖项。其主要特点为:开源,安装过程简单,高性能使用Python和R语言,免费的社区支持等。其包含的科学库包括:Conda、NumPy、SciPy、IPython Notebook等。Anaconda支持目前主流的多种系统平台,包含Windows、MacOS和Linux(x86/Power8)。
1.2.3 安装Anaconda 3
登录Anaconda官网https://www.anaconda.com/download ,依据操作系统选择合适的安装包版本下载。本书使用64位Windows操作系统,故此处选择Anaconda3-5.2.0-Windows-x86_64版本,具体安装步骤如下。
1)双击打开安装包,单击“Next”按钮进入下一步,如图1-2所示。
2)单击“I Agree”按钮同意安装协议并进入下一步,如图1-3所示。
3)若系统只有一个用户选择默认的第1个选项即可,若有多个用户且都需要用到Anaconda,则选择第2个选项。之后单击“Next”按钮,注意此处需要管理员权限才可进入下一步,如图1-4所示。
4)进入安装路径设置,此处选择默认的安装路径,也可依据需要自行修改安装路径。单击图1-5所示的“Browse...”按钮,在弹出的如图1-6所示的对话框中选择安装路径。
5)进入安装前的权限设置,第1个选项为将Anaconda加入环境变量,加入后可通过命令行运行Anaconda;第2个选项为默认使用Python 3.6,按用户需求进行设置,如图1-7所示。单击“Install”按钮开始安装。
6)等待安装过程完成,会弹出是否安装Microsoft VSCode的对话框,依据用户需求选择是否安装,若不安装单击“Skip”按钮跳过即可,如图1-8所示。
7)单击“Finish”按钮完成安装过程,默认勾选的选项可以单击取消,如图1-9所示。
1.3 Python的解释器与IDE
Python是一门解释性语言,在运行时需要解释才能执行,此时需要解释器执行解释这项工作。集成开发环境(Integrated Development Environment,简称IDE,也称Integration Design Environment或Integration Debugging Environment)是一种辅助程序开发人员开发软件的应用软件,在开发工具内部就可以辅助编写源代码文本,并编译打包成为可用的程序,有些甚至可以设计图形接口。IDE包括编程语言编辑器、自动构建工具,通常还包括调试器。有些IDE包含编译器/解释器,虽然目前有一些IDE支持多种编程语言,但是一般的IDE主要还是针对特定的编程语言而量身打造。
1.3.1 Python的解释器
Python的第1个解释器CPython在1991年诞生,使用C语言实现,并且能够调用C库。发展至今,除源生解释器CPython外,还发展出了形形色色的解释器,其中部分为基于CPython的改进,也有完全基于其他语言编译的版本,目前主流的Python解释器如表1-10所示。
1.3.2 Python各IDE比较
选择合适的IDE能有效帮助开发者提高编程效率。IDE大致上可分为下述两类。免费的IDE,此类IDE通常能支持多平台且提供一些基本功能。为更高级的面向企业和专业开发人员的商业IDE,其功能比免费IDE更为完善和强大,同时也提供免费的社区版,社区版除部分收费功能以外与商业版一致。常用的Python IDE如下。
1.IDLE
IDLE是开发Python程序的基本IDE,具备基本IDE的功能,是非商业Python开发的不错选择,是Python创造者Guido van Rossum使用python and Tkinter创建的一个集成开发环境。使用IDLE必须安装python and Tkinter,其特性包含:自动缩进、彩色编码、命令历史(Alt+p,Alt+n)和单词自动(Alt+/)完成。IDLE的界面如图1-10所示。
2.PyCharm
PyCharm是专业的Python集成开发环境,有社区版和商业版两个版本。PyCharm拥有最多的企业用户,如Twitter、Groupon、Spotify、eBay和Telefonica等。
PyCharm的大部分功能在社区版本中都是可用的,包括智能代码补全、直观的项目导航、错误检查和修复、遵循PEP8规范的代码质量检查、智能重构以及图形化的调试器和运行器。还能与IPython Notebook进行集成,并支持Anaconda及其他的科学计算库,比如Matplotlib和NumPy。PyCharm专业版本支持更多高级的功能,如远程开发功能、数据库支持及对Web开发框架的支持等。
PyCharm支持很多的第三方Web开发框架,如Django、Pyramid、web2py、Google App Engine和Flask,这些也使得PyCharm成为一个完整的快速应用集成开发环境。PyCharm的主界面如图1-11所示。
3.Eclipse+PyDev
Eclipse是一个开放源代码的、基于Java的可扩展开发平台。其本身是一个框架和一组服务,用于通过插件组件构建开发环境。在Eclipse中,Python应用程序的开发和调试主要通过PyDev插件来实现。PyDev插件的出现方便了众多Python开发人员,该插件提供一些很好的功能,如:语法错误提示、源代码编辑助手、Quick Outline、Globals Browser、Hierarchy View、运行和调试等。使用PyDev插件Eclipse的界面如图1-12所示。
4.Rodeo
Rodeo是一个专门用于Python实现数据科学的IDE,被认为是IPython Notebook的一个轻量级替换。Rodeo采用yhat开发,基于IPython内核,支持自动代码补全、结果数据分析。它运行于浏览器中,带有键盘快捷键,其交互性让用户感觉更像是一个本地应用。Rodeo使用IPython内核来处理UI和Python环境之间的通信,编辑器使用的是Ace。
其主要功能包含:执行脚本、运行分析、自动完成、检查数据、可见的绘图、文档和帮助。Rodeo的主界面如图1-13所示。
5.Jupyter Notebook
Jupyter Notebook以网页的形式打开,可在网页页面中直接编写代码和运行代码,代码的运行结果将会直接在代码块下显示。Jupyter Notebook以文档的形式体现所有交互计算、编写说明文档、数学公式、图片,以及其他富媒体形式的输入和输出,这部分文档将保存为后缀名为.ipynb的JSON格式文件,方便与他人共享和进行版本控制。
Jupyter Notebook的主要特点如下:
1)可直接通过浏览器运行代码,同时在代码块下方展示运行结果。
2)编程时具有语法高亮、缩进、Tab补全的功能。
3)对代码编写说明文档或语句时,支持Markdown语法。
4)以富媒体格式展示计算结果,富媒体格式包括:HTML、LaTeX、PNG、SVG等。
5)支持使用LaTeX编写数学性说明。
Jupyter Notebook的代码界面如图1-14所示。
6.Spyder
Spyder是一个开源的Python集成开发环境,非常适合用来进行科学计算方面的Python开发,是一个轻量级的软件,遵循MIT协议,可免费使用。
Spyder的基本功能包括多语言编辑器、交互式控制台、文件查看、variable explorer、文件查找、文件管理等。支持多种系统平台,可运行于Windows、Mac或者Linux系统之上。也可以作为PyQT的扩展库,嵌入PyQT的应用中。Spyder的主界面如图1-15所示。
1.3.3 PyCharm的安装与使用
1.安装PyCharm
登录PyCharm官网http://www.jetbrains.com/pycharm/download 下载安装包,官网提供两种版本的安装包,其中professional表示专业版,community为社区版,本书使用的社区版版本为pycharm-community-2018.2.2。具体安装步骤如下。
1)双击打开安装包,单击“Next”按钮进入下一步,如图1-16所示。
2)进入安装路径设置,此处选择默认的安装路径,也可依据需要自行修改安装路径。单击如图1-17所示的“Browse...”按钮,在弹出的如图1-18所示的对话框中选择安装路径。
3)依据系统版本勾选对应的版本,此处选择64位的版本,如图1-19所示。
4)单击如图1-20所示的“Install”按钮开始安装。
5)单击“Finish”按钮完成安装过程,默认勾选的选项可以单击取消,如图1-21所示。
2.基本设置
安装成功后,还需要进行一系列设置才能开始使用PyCharm,具体步骤如下。
1)双击打开PyCharm,按照喜好选择UI,之后单击“Next”进入下一步,如图1-22所示。
2)进入插件选择页面,按照用户需求选择插件安装,也可直接跳过该步骤,单击“Start using PyCharm”按钮正式进入PyChram页面,如图1-23所示。
3)首次使用需要创建一个新工程,单击“Creat New Project”创建,以后使用时可单击“Open”按钮打开以往创建的工程,如图1-24所示。
4)选择创建的工程的位置,单击如图1-25所示的文件夹图标,将弹出如图1-26的字的位置选择框,选择想要创建的工程位置。注意创建的工程文件夹必须为空。单击“Project Interpreter:New Virtualenv environment”将会看到PyCharm已自动识别已安装的Python程序,之后单击“Create”按钮将创建工程。
5)PyCharm将自动初始化,等待初始化完毕后,右键单击创建的工程,在“New”标签下,单击“Python File”即可创建一个.py文件,如图1-27所示。
6)输入文件名称,即可创建.py文件进行编辑,如图1-28所示。
7)创建成功后,将会在工程文件夹下自动新建一个.py文件,之后就可以开始编程了,如图1-29所示。
3.快捷键
Pycharm中的快捷键按功能可分为10类,包括编辑、查找/替换、运行、调试、导航、搜索相关、重构、控制VCS/Local History、模板、通用。
(1)编辑(Editing)
PyCharm中代码编辑的快捷键及其用途如表1-11所示。
(2)查找/替换(Search/Replace)
PyCharm中查找/替换的快捷键及其用途如表1-12所示。
(3)运行(Running)
PyCharm中运行的快捷键及其用途如表1-13所示。
(4)调试(Debugging)
PyCharm中调试的快捷键及其用途如表1-14所示。
(5)导航(Navigation)
PyCharm中导航的快捷键及其用途如表1-15所示。
(6)用法查询(Usage Search)
PyCharm中用法查询的快捷键及其用途如表1-16所示。
(7)重构(Refactoring)
PyCharm中重构的快捷键及其用途如表1-17所示。
(8)控制VCS/Local History
PyCharm中控制VCS的快捷键及其用途如表1-18所示。
(9)模板(Live Templates)
PyCharm中模板的快捷键及其用途如表1-19所示。
(10)通用(General)
PyCharm中的通用快捷键及其用途如表1-20所示。
1.3.4 Jupyter Notebook的使用
Anaconda 3中集成了Jupyter Notebook,因此在Anaconda 3安装完毕后,用户便可以开始使用Jupyter Notebook。
1.进入Jupyter Notebook
可通过两种方式进入Jupyter Notebook,一种是直接单击菜单目录中Anaconda 3下的Jupyter Notebook,如图1-30所示。
运行成功后,终端内会显示一系列Jupyter Notebook的服务器信息,同时浏览器将会自动启动Jupyter Notebook,如图1-31所示。
若安装Anaconda 3时选择添加环境变量,则可以在CMD中输入“jupyter notebook”来启动。若安装Anaconda 3时没有选择添加环境变量,又想通过cmd命令行进行启动,则可以在系统环境变量中手动添加如下路径。
.Anaconda3;
.Anaconda3Librarymingw-w64bin;
.Anaconda3Libraryusrbin;
.Anaconda3Librarybin;
.Anaconda3Scripts;
修改环境变量时需要依据Anaconda 3的安装路径做对应修改。
启动后,浏览器地址栏中将会默认显示:“http://localhost:8888” 。其中,“localhost”指的是本机地址,而“8888”则是当前Jupyter Notebook程序占用的端口号。若同时启动了多个Jupyter Notebook,由于默认端口“8888”被占用,因此地址栏中的数字将从“8888”起,每多启动一个Jupyter Notebook,端口号就加1,如“8889”“8890”。
若想通过自定义端口号启动Jupyter Notebook,可以在终端中输入以下命令。
jupyter notebook --port
其中,“”为用户想要自定义的端口号,直接以数字的形式写在命令当中,数字的两边不需要加“< >”。如“jupyter notebook --port 8999”表示在端口号为“8999”的服务器启动Jupyter Notebook。
2.Jupyter Notebook基本使用方法
当启动成功后,浏览器会进入Notebook的主页面,如图1-32所示。
单击右上角的“New”按钮,在弹出的标签栏中选择“Python 3”,即可创建一个Python文件,如图1-33所示。
创建成功后,进入笔记本页面,如图1-34所示。
在该页面可对.py文件进行操作。单击图1-34左上方的“Untitled”按钮可修改文件名。常用工具栏按钮及其功能如表1-21所示。
在单元格中输入命令,之后单击运行按钮在单元格下输出结果,同时自动新建一个单元格,如图1-35所示。
3.Markdown
Markdown工具可以将TXT转化成html格式。这一类工具的作用是将按一定格式写成的可读性强的文本文件转化为结构化的标准xhtml或html文件。Jupyter Notebook中集成的Markdown需要通过安装扩展来实现添加,在命令行中执行如下命令进行添加。
conda install -c conda-forge jupyter_contrib_nbextensions
之后启动Jupyter Notebook,导航栏将增加一个“Nbextensions”的类目,单击“Nbextensions”,勾选“Python Markdown”启用,如图1-36所示。
新建一个.py文件,在单元格状态的下拉框中选择“Markdown”即切换至Markdown,如图1-37所示。
之后在单元格内输入的内容将以html的形式输出,如图1-38所示。
4.快捷键
Jupyter Notebook拥有两种键盘输入模式。第1种是编辑模式,此时允许往单元中键入代码或文本。该模式下的单元框线是绿色的,并且活动单元框内有光标闪烁,如图1-39所示。
第2种是命令模式,此时允许通过键盘输入运行程序的命令。该模式下的单元框线是蓝色的,且单元框内没有光标闪烁,如图1-40所示。
(1)编辑模式
编辑模式下可使用的快捷键及其用途如表1-22所示。
(2)命令模式
命令模式下可以使用的快捷键及其用途如表1-23所示。
小结
Python是一门高层次计算机程序语言,本章介绍了Python相关背景知识,环境配置及相关IDE。主要内容如下。
1)Python拥有20多年的发展历史,关键的特性包括:解释型、动态、强类型。其应用领域涵盖机器学习、数值计算、数据可视化、网络编程、数据库开发、自动化运维和GUI编程等。
2)Python核心团队即将停止对Python 2版本的维护,建议新的Python项目使用Python 3版本。
3)Python拥有多种IDE,其中PyCharm是一个专业的Python集成开发环境,安装完毕后的初次启动需经一系列设置才可使用,其创建的.py文件存储在工程目录下。
4)通过比较,主要对Anaconda 3中集成的Jupyter Notebook做了功能介绍。Jupyter Notebook可通过菜单目录或命令行启动,支持LaTex与Markdown,支持整个代码与其结果输出为html。
课后习题
1.选择题
(1)下面关于Python版本描述错误的是( )。
A.第一个Python解释器诞生于1991年
B.Python核心团队将在2020年停止支持Python 2
C.Python 3.x向下兼容Python 2
D.Python的最新版本为Python 3.7
(2)下面不属于Python特性的是( )。
A.解释性 B.静态 C.动态 D.面向对象
(3)下面关于Python机器学习库描述错误的是( )。
A.sklearn为Python机器学习标准库
B.Tensorf?low由Facebook团队开发
C.PyTorch的计算方式都是动态的
D.Theano是一个更为学术化的神经网络模块
(4)下面关于Python解释器描述错误的是( )。
A.CPython使用C语言开发
B.JPython运行在Java平台上
C.IPython使用html开发
D.PyPy与CPython的执行结果有可能不同
(5)下面关于Python IDE描述错误的是( )。
A.PyCharm无法免费使用
B.IDLE是Python基本IDE
C.Jupyter Notebook可在网页页面中直接编写代码和运行代码
D.Spyder是一个开源的轻量级Python开发环境
2.操作题
(1)按照1.2.3节中的步骤安装Anaconda 3,并使用Jupyter Notebook创建一个应声虫程序。
(2) 按照1.3.3节中的步骤安装社区版PyCharm,并使用PyCharm编写一个简单的求和程序。