涉及概念:框架,可以理解為一種功能的半成品,它將很多的基礎功能都已經完成,只需要用戶進行擴展開發或者額外配置,就可以形成用戶功能的特定系統。
(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。