Python计算生态概览
涉及概念:框架,可以理解为一种功能的半成品,它将很多的基础功能都已经完成,只需要用户进行扩展开发或者额外配置,就可以形成用户功能的特定系统。
(1).从数据处理到人工智能
这里会介绍从数据处理到人工智能的完整链条,其中包括:数据表示->数据清洗->数据统计->数据格式化->数据可视化->数据挖掘->人工智能。
其中,数据表示指的是采用合适方法,用程序来表达数据。数据清洗指的是将数据进行归一化,将数据进行合理转换,去除数据中的异常值。数据统计指的是对数据进行摘要和概要性的理解,包括数据中的分布、数量、中位数等。数据可视化指的是用直观的方式展示数据的内涵。数据挖掘指的是从数据分析角度获得知识,产生数据之外的价值。人工智能指的是依托于传统的数据、语言、图像、视觉等方便进行深度的分析和决策。
从数据处理到人工智能有一大批与Python相关的第三方生态库,将分为四部分简要介绍,每个部分简要介绍三个Python计算生态。
1)Python库之数据分析
Python数据分析的最基本的库是Numpy,它用于表达N维数组,是众多数据分析库的基础。Numpy里面使用C语言来实现,但对外的接口是Python语言,因此使用Numpy为基础的数据分析具有非常优异的计算速度。Numpy几乎支撑了Python数据分析和科学计算的所有其他库,比如最常用的pandas库。Numpy本身也直接提供了一些矩阵运算、广播函数和线性代数等相关功能。
其实,对于N维数据表达,我们也可以使用Python最基础的列表等基础语法来进行运行,但是使用Numpy这是另一种思路,比如对于两个一维数组进行运算,使用基础语法需要使用for循环来对其中的变量进行逐一运算,但如果使用Numpy,此时由于Numpy的最基础单元是一个数组,数组相当于一个变量,那么可以用数组变量直接的操作符进行运算,进而减少了for循环的使用,也使得整体的编程逻辑变得更加直接。正是有Numpy的这样的特点,我们可以将N维数组看成简单的数据对象,进行直接的操作和运算,这是Numpy的最大的价值。官网:https://numpy.org/
进一步提供数据分析的功能可以使用Pandas库,它是数据分析高层次应用库,简单来说它提供了简单易用的具有较高抽象的数据结构以及数据分析的方法。Pandas库是我们理解数据类型和索引关系、操作索引进而操作数据的重要的第三方库,是Python最主要的数据分析功能库。并且Pandas库本身是基于Numpy开发,速度非常优异。
Pandas库核心提供了两个数据结构一个叫Series,一个叫DataFrame。Series是通过索引来与一维数据进行关联,进而通过索引来操作数据的一种数据方法。DataFrame是使用行列的二维索引来操作二维数据的方法。
我们也可以这样理解,Pandas库通过扩展了对一维数据和二维数据的一种表示,因而能够形成更高层次对数据的操作,简化数据分析的运行。官网:https://pandas.pydata.org/
再进一步,Python提供了一个在数学、科学和工程计算方面的第三方库,叫SciPy。SciPy提供了一批数学算法以及工程数据运算的功能,它很类似在工程中使用的一个工具Matlab。在SciPy中,我们可以找到傅里叶变换、信号处理等相关的程序。SciPy最主要是是用于科学计算,它的底层也是基于Numpy开发的,因此计算性能非常优异。
在SciPy中,提供了许多的优化算法,例如:傅里叶变换、信号处理、线性代数、图像处理、稀疏图的压缩和稀疏图的运算等很多功能,对于数学、科学和工程计算还是很有帮助的。
2)Python库之数据可视化
在基础的数据分析之上,我们希望对数据进行直观的展示,那么Python提供了一批进行数据可视化的第三方库,其中最基础的高质量的二维数据可视化功能库要数Matplotlib。Matplotlib提供了超过100种数据可视化的展示效果,由于这个库的展示效果非常多,所以这个库的子库也非常多。在众多的子库当中,存在一个名为pyplot的子库,这个子库相当于各个子库的快捷方式,它把所有的有效的可视化展示方法汇集到了一个子库中,因此在使用Matplotlib的时候,一般我们只需要调用这个子库就可以完成数据可视化的效果。Matplotlib也是Python最主要的数据可视化的功能库,底层也是基于Numpy开发的。官网:https://matplotlib.org/
另外还有一个数据可视化库叫Seaborn,它能够对统计类数据进行有效的可视化展示,它提供了一批高层次的统计类数据的可视化展示效果。统计类数据指的是可以展示数据间的分布、分类、线性关系等一些内容。Seaborn是基于Matplotlib进行在封装开发,并且支持Numpy和Pandas。官网:https://seaborn.pydata.org/
Seaborn比最基础的Matplotlib在绘制方面更加有展示度,并且调用的时候会稍微的简单。
除了最基本的二维数据可视化之外,Python也提供了一些三维科学数据可视化的功能库,其中最优秀的要数Mayavi库,它提供了一批简单易用的三维科学计算数据可视化的展示效果,目前是第二个版本(Mayavi2)。三维可视化最主要的第三方库就是Mayavi,它同时支持Numpy、TVTK、Traits、Envisage等第三方库,并且能与它们联动使用。官网:http://docs.enthought.com/mayavi/mayavi/
实际上,数据分析和数据可视化的很多库,它们之间都是能够打通并且交互使用。
3)Python库之文本处理
Python提供了很多与文本处理相关的计算生态,PyPDF2是一个与pdf文件相关的工作集,它提供了一批处理pdf文件的计算功能,包括获取pdf文件中的信息以及其中的内容、分割或整合文件、加密或解密文件等。PyPDF2完全使用Python语言实现,不需要额外的依赖,功能非常稳定。官网:http://mstamy2.github.io/PyPDF2/。下面给出一个例子,将两个pdf文件进行整合:
from PyPDF2 import PdfFileReader,PdfFileMerger merger=PdfFileMerger() input1=open("document1.pdf","rb") input2=open("document2.pdf","rb") merger.append(fileobj=input1,pages=(0,3)) merger.merge(position=2,fileobj=input2,pages=(0,1)) output=open("document-output.pdf","wb") merger.write(output)
文本之中自然语言文本是非常重要的一类,Python提供了一个非常优秀的自然语言文本处理第三方库NLTK。NLTK提供了一批简单易用的自然语言文本处理功能,包括对语言文本进行分类、标记、语法语句解析以及语义分析等,它也是目前Python语言中最优秀的自然语言处理库。我们可以用几行代码将一个自然语言文本变成一种树形结构,并且分析其中各部分逻辑之间的关系。当然NLTK提供更多的自然语言文本处理的功能,可以前往官网查看:http://www.nltk.org/
Microsoft Office工具是我们在日常工作中经常使用的一个工作集那么Python提供了一些操作Microsoft Word文件的第三方库,其中最优秀的是Python-docx,它提供了创建或更新.doc和.docx等文件的计算功能。简单来说,我们可以利用程序创建或修改我们的Word文件,其中包括增加并配置段落、图片、表格、文字等,这个库提供的功能非常全面,利用它我们可以使用程序生成一些Word文件,想要什么内容都可以在程序中进行配置和编写,官网:https://python-docx.readthedocs.io/en/latest/index.html。
from docx import Document document=Document() document.add_heading('Document Title',0) p=document.add_paragraph('A plain paragraph having some') document.add_page_break() document.save('demo.docx')
4)Python库之机器学习
机器学习是人工智能的一个基础,在Python中提供了一批与机器学习相关的第三方生态,其中最为优秀的一个是Scikit-learn,它是机器学习方法的一个工具集,它提供了一批统一化使用的机器学习方法,其中包括聚类、分类、回归、强化学习等相关功能,它也是机器学习最基本且最优秀的Python第三方库。我们可以前往官网找到众多的方法以及具体的机器学习的函数功能,并且调用使之完成我们的机器学习应用,官网:https://scikit-learn.org/stable/。
TensorFlow它是AlphaGo背后的机器学习框架,它是谷歌公司推动并建立的开源机器学习功能框架。开源的TensorFlow使用的就是Python语言,它能够将数据流图作为基础,在图中以节点代表运算,边代表张量,进而形成机器学习的整体模式,它也是应用机器学习的一种方式,它支撑了谷歌人工智能的所有应用。使用TensorFlow去形成机器学习应用也十分简单,更多的额功能可以到官网上查看,并且能够看到大量的例子。http://www.tensorflow.org/(被墙了)
除了机器学习,深度学习是近年来人工智能发展的一个重要方向,这里介绍一个非常优秀的深度学习计算框架MXNet,它提供了可扩展的神经网络及深度学习计算功能,使用这个库可以用于设计自动驾驶、机器翻译、语音识别等很多领域相关的功能。简单来说,我们所认为的所有人工智能都能使用MXNet等相关的功能来支撑,它也是Python最重要的深度学习计算框架。官网:http://mxnet.incubator.apache.org/,比如去识别一张图片,我们可以构造深度神经网络来提高准确率,在MXNet下只需要几十行代码,就可以完成这样的功能
(2).从Web解析到网络空间
1)Python库之网络爬虫
网络爬虫指的是我们使用程序将Web页面中的内容爬取下来,其中最友好的网络爬虫库当属Requests。Requests提供了简单易用的,类似HTTP协议的网络爬虫功能,它支持连接池、SSL、Cookies、HTTP以及HTTPS代理等相关功能,即使我们的网络环境十分复杂,也可以使用Requests库来爬取特定的页面。Requests是Python最主要的页面级网络爬虫功能库。官网:https://requests.readthedocs.io/en/master/
进一步,如果我们不仅希望爬取某些网页,还想构建一个专业的网络爬虫系统,此时就需要使用另一个库Scrapy,它是优秀的网络爬虫框架,它提供了构建网络爬虫系统的框架功能。在Scrapy中,它支持批量或定时的网页爬取,并且提供数据处理的完整流程。Scrapy包含若干个组件和部分,期望了解更多的专业网络爬虫构建可以深入的去学习这个库的功能,官网:https://scrapy.org/
再进一步,我们也可以了解pyspide库,通过它来形成一个完整的网页爬取系统。pyspide不仅支持网页爬取的基本功能,它也能够支持后端加载不同的数据库、构建消息队列、分发优先级以及在不同的计算机上形成分布式架构等一批重要的功能,它也是Python的网络爬虫第三方库。使用pyside也是建立和建设专业级Web网络爬取系统的重要的支撑技术,官网:http://docs.pyspider.org/en/latest/
2)Python库之Web信息提取
当我们将页面爬取下来,之后 去解析其中的HTML以及XML的内容,此时我们需要一批Web信息提取第三方库,其中最优秀的当属Beautiful soup。Beautiful soup提供了解析HTML和XML的Web信息等全套功能,它其中可以加载多种解析引擎,它经常与网络爬虫库搭配使用,比如可以在Scrapy、Requests中去加载Beautiful soup的解析功能,进而形成一个完整的数据爬取与信息提取的系统。
在Beautiful soup中,它将所有的HTML页面以树形结构进行组织,通过上行遍历、下行遍历和平行遍历等一些操作来解析其中的所有内容。使用这个库,需要预先了解HTML和XML的设计原理。官网:https://www.crummy.com/software/BeautifulSoup/
解析Web信息内容,也无需构建或还原HTML的设计格式,我们可以使用正则表达式库来定点的获取Web信息。Re全称regular expression,它提供了定义和解析正则表达式的一批通用功能。Re库可以用于各种需要正则表达式解析的场景,但其中最重要的一个场景就是在Web信息解析中提取特定的内容。注意:Re是Python最主要的标准库之一,无需安装。比如我们定义一个字符串,它是一种正则表达式格式,那么根据Re库提供的search、match、Findall、split、finditer和sub等一系列功能函数用来围绕这个定义的正则表达式,进行信息查找和信息匹配,这对于我们去查找文本中的特定模式能够起到非常重要的支撑作用。说明文档:https://docs.python.org/3.6/library/re.html
在Web信息提取中,还有一个非常优秀的第三方库叫Python-Goose,它用于提取文章类型的Web页面,它提供了对Web页面中文章信息以及视频等元数据的提取功能。这个库只针对特定类型的Web页面,但是由于文章类型在互联网上极其常用,所以它的应用十分广泛,它也是Python中最主要的Web信息提取第三方库。相比Beautiful soup这种源数据的处理更加方便,抽象层次也更高。官网https://github.com/grangier/python-goose
3)Python库之Web网站开发
Python提供了一批很有用的后端框架,其中最流行的框架当属Django,它能够构建Web系统,并且提供整个的基本框架思路。Django采用MTV模式,即将一个网站后端分为模型(model)、模板(Template)和视图(Views),设计三者的相关流程并打通,形成一个基本的Web应用框架。Django是非常重要的Web应用框架,但是相比其他几个应用框架略显复杂,比较适合非常专业的网站构建,这里面需要了解WSGI、路由、功能处理逻辑以及数据库与展示层面如何去构建,这是Django提供的重要的支撑应用。官网:https://www.djangoproject.com/
Python的Pyramid第三方库提供了规模适中的Web应用框架组建相关功能。Pyramid设计的思想是对那些不大不小、规模适中的应用需求提供简单方便的构建Web系统的应用框架,它是一个产品级的应用框架,这个框架非常稳定、非常好用。Pyramid起步非常简单,并且可扩展性非常好,对那些中规模的网站是一个很好的选择,比如我们可以使用10行左右的代码就可以构建一个Web应用系统。官网:https://trypyramid.com/(打不开?)
既然有复杂的Web应用框架,适中的应用框架,那一定也有很小规模的应用框架。Flask就是Python应用中Web应用框架的微框架第三方库,它提供了最简单的构建Web应用系统的相关功能,特点就是简单、规模小、编写速度快,如果我们的应用需求仅仅是建立有几个页面的网站,那么使用Flask是一个非常好的选择。官网:https://flask.palletsprojects.com/en/1.1.x/
因此对于Web应用网站开发来说,如果你的需求非常专业,希望构建一个非常复杂的门户网站,那选择Django。如果你希望构建的是一个中规模的应用网站,选择Pyramid。如果你只希望建立几个网页,展示一些基本内容,那么使用Flask将会极大地减少你的开发时间。
五行代码形成一个Hello World的简单的Web应用网站
4)Python库值网络应用开发
除了基本的信息爬取、解析和构建网站之外,对于一些网络应用Python也提供了很多的第三方库,比如WeRoBot,它是微信公众号的开发框架。简单说使用这样的库可以从微信服务器获得消息,并且解析这些消息,还可以向微信服务器反馈消息,它是我们建立微信机器人的重要手段。我们可以使用简单的几行代码,就能够对每一个微信消息反馈一个特定的信息,这使得我们开发微信公众号变得非常简单。官网:https://github.com/offu/WeRoBot
如果想使用专业的人工智能功能,可以考虑百度AI的开发平台接口aip。aip提供了访问百度人工智能服务的Python功能接口,其中包括对人脸、语音、OCR、NLP、知识图谱、图像搜索等领域的众多功能,都可以通过一个简单的Python接口获得相关的结果,它也是目前百度AI在用户端使用的非常主要的方式。当然百度AI开放了很多编程语言的接口,可以到网站上去查找更多的信息。获取网址:https://github.com/Baidu-AIP/python-sdk
还有一些库提供了非常有意思的功能,其中包括MyQR,它能够生成二维码,提供了生成二维码的系列功能,包括生成基本的二维码、生成艺术形式的二维码、生成动态的二维码。无论是方的,彩色的,还是能动的二维码,都可以使用MyQR来生成。官网:https://github.com/sylnsfar/qrcode
(3).从人机交互到艺术设计
1)Python库之图形用户界面
Python提供了一批能够用于开发图形用户界面的第三方库,其中最优秀的一个第三方库是PyQt5,它是Qt开发框架的Python接口。Qt框架是早年由诺基亚公司开发的一个开源的图形用户界面系统,这个系统非常成熟,到目前有了第五版本Qt5,而PyQt5提供了创建Qt5程序的Python API接口。并且由于Qt是非常成熟的跨平台桌面应用开发系统,它具备完备的GUI(图形用户界面),因此在使用Python编写图形用户界面时推荐使用PyQt5。使用PyQt5的好处不仅是它有完备的跨平台系统,更主要的一点是它的背后有着非常成熟的工业链条,在很多产业级或者工业使用的系统中,都采用Qt作为开发界面。官网:https://www.riverbankcomputing.com/software/pyqt/intro
另外一个优秀的图形用户界面是wxPython,它提供了专用于Python语言的跨平台GUI开发框架,它目前也是Python非常重要的一个图形用户界面。官网:https://www.wxpython.org/
还有一个非常优秀的图形用户界面叫PyGObject,它使用GTK+开发,具备GUI的全部功能,它提供整合了GTK+、WebKitGTK+等库的功能。GTK+实际上是一种由科学家和工程师设计的跨平台的图形用户界面框架,当初设计的主要目的是为了跨不同的操作系统平台,现在GTK+本身已经很成熟,那么使用Python进行封装就变得更加使用和成熟。例如:如果使用Anaconde框架去安装Python并且开展Python编程,可以发现Anaconda的图形用户界面就是使用PyGObject第三方库开发的。官网:https://pygobject.readthedocs.io/en/latest/
2)Python库之游戏开发
其中最简单的游戏开发功能库当属PuGame,它提供了基于SDL的简单游戏开发功能及实现引擎,它是我们理解游戏与对外部的输入响应机制,以及游戏中角色构建和交互机制的重要的入门平台。PyGame是游戏开发入门的学习库,当然基于PyGame也可以开发一些非常成熟的游戏。官网:https://www.pygame.org/news
现在的很多游戏都有三维效果,Python也提供了一个开源跨平台的具有3D渲染功能的游戏开发库,叫Pand3D。本质上Panda3D是一个3D游戏引擎,它提供了Python和C++两种接口,当然Python接口的功能更加全面,也是这个库推荐用户使用的编程语言。Panda3D支持许多非常先进的三维渲染功能,比如:法线贴图、光泽贴图、卡通渲染等。Panda3D由鼎鼎大名的迪士尼与美国的卡耐基梅隆大学共同研发,相当优秀,相当好用。官网:https://www.panda3d.org/
cocos2d是一个构建2D游戏和图形交互应用的框架,它提供了OpenGL进行游戏开发和图形渲染的功能。cocos2d最大的好处是支持GPU加速,它可以采用树形结构分层管理游戏对象类型,它非常适合用于专业级的二维游戏开发。官网:http://python.cocos2d.org/
3)Python库之虚拟现实
虚拟现实是计算机未来发展和应用的重要方向之一,那么Python必然也能够完成虚拟现实的应用开发,这里介绍一个简单的入门库叫VR Zero。VR Zero是在树莓派上开发虚拟现实应用的Python库,它提供了大量与虚拟现实开发相关的功能。由于VR Zero基于树莓派进行开发,非常支持虚拟现实设备的小型化,配置也比较简单,比较适合初学者实践虚拟现实的开发与应用。官网:https://github.com/WayneKeenan/python-vrzero
树莓派是一种嵌入式硬件,体积与IC卡大小相似,但功能非常强大,英文名Raspberry Pi,可以简写为RPi或RasPi或RPI。树莓派是为了学习计算机编程教育而设计,其系统基于Linux,但随着Windows 10 IoT的发布,我们也将可以用上运行Windows的树莓派。
下面介绍第二个与虚拟现实相关的第三方库pyovr,它是Oculus公司提供的VR开发Python开发接口。这个库主要针对Oculus公司生产的VR设备,提供了一批操作设备、应用设备Python接口库。Oculus公司提供了很多成熟的虚拟现实设备,这些设备有全套的文档,具备工业级应用的能力,那么使用Python语言加上成熟的虚拟现实设备,将是开发虚拟现实应用的重要的方式方法。官网:https://github.com/cmbruns/pyovr
最后一个要介绍的虚拟现实库叫Vizard,它是基于Python语言通用VR开发引擎,话句话说使用Vizard库开发的Python程序可以跑在多个主流的VR设备上。与Oculus提供的第三方库不同,Vizard是一个专业的企业级虚拟现实开发引擎,它用来支持多种主流VR设备,具有一定的通用性,我们可以使用它来构建自己需要的虚拟现实的应用软件,并配置上不同设备。官网:https://www.worldviz.com/vizard-virtual-reality-software
4)Python库之图形艺术
首先介绍Quads库,它是一个展示迭代艺术的第三方库,它能够对图片进行四分迭代形成一种像素风格,它能够生成动态的或静态的图像,并且简单易用,有非常高的展示度。官网:https://github.com/fogleman/Quads
另外一个有趣的图形艺术库是ascii_art,它是采用ASCII码展示图形艺术的第三方库,它能够将普通图片转换为ASCII艺术风格,输出可能是纯文本或者是一种有彩色的文本效果,并且可以将展示的ASCII艺术风格以图片格式输出。官网:https://github.com/jontonsoup4/ascii_art
接下来介绍最后一个图形艺术库,这个库就是trutle。turtle就是海龟绘图体系,用turtle也可以完成图形艺术,那么用turtle加上一些随机函数绘制出一定的艺术风格有一个专有名词叫Random Art。