Python可以這樣玩(2):Python 擴展庫
模組的安裝與使用
核心庫
1. NumPy (提交數:
15980, 貢獻者數: 522)
2. SciPy (提交數:
17213, 貢獻者數: 489)
3. Pandas (提交數:
15089, 貢獻者數:762)
4.Matplotlib (提交數:
21754, 貢獻者數: 588)
還有使用Matplotlib創建標籤,網格,圖例和許多其他格式化實體的功能。基本上,一切都是可定制的。該庫由不同的平臺支援,並使用不同的GUI套件來描述所得到的視覺化。不同的IDE(如IPython)都支援Matplotlib的功能。還有一些額外的庫可以使視覺化變得更加容易。
6. Bokeh (提交數:
15724, 貢獻者數: 223)
機器學習
8. SciKit-Learn (提交數:21793,
貢獻者數:842)
9.Theano. (提交數:25870,
貢獻者數:300)
10. TensorFlow. (提交數:
16785,貢獻者數: 795)
11. Keras. (提交數:
3519,貢獻者數: 428)
自然語言處理
12. NLTK (提交數:
12449,貢獻者數: 196)
13. Gensim (提交數:
2878,貢獻者數: 179)
資料採擷,統計學
14. Scrapy (提交數:
6325,貢獻者數: 243)
15. Statsmodels (提交數: 8960,貢獻者數: 119)
安裝 Python 擴展庫
常用pip指令的使用方法
模組匯入與使用
import 模組名稱
[as 別名]
from 模組名稱
import 物件名稱 [as 別名]
撰寫自己的模組和套件
核心庫
1. NumPy (提交數:
15980, 貢獻者數: 522)
當開始處理Python中的科學任務,Python的SciPy Stack肯定可以提供幫助,它是專門為Python中科學計算而設計的軟體集合(不要混淆SciPy庫,它是SciPy Stack的一部分,和SciPy Stack的社區)這樣我們開始來看一下吧。然而,SciPy Stack相當龐大,其中有十幾個庫,我們把焦點放在核心包上(特別是最重要的)。
關於建立科學計算棧,最基本的包是Numpy(全稱為Numerical Python)。它為Python中的n維陣列和矩陣的操作提供了大量有用的功能。該庫提供了NumPy陣列類型的數學運算向量化,可以改善性能,從而加快執行速度。
2. SciPy (提交數:
17213, 貢獻者數: 489)
SciPy是一個工程和科學軟體庫。包含線性代數,優化,集成和統計的模組。SciPy庫的主要功能是建立在NumPy上,從而它的陣列大量的使用了NumPy的。它通過其特定子模組提供有效的數值常式,並作為數位積分、優化和其他常式。
3. Pandas (提交數:
15089, 貢獻者數:762)
Pandas是一個Python包,旨在通過“標記”和“關係”資料進行工作,簡單直觀。Pandas是資料整理的完美工具。它設計用於快速簡單的資料操作,聚合和視覺化。
庫中有兩個主要的資料結構:
“系列”(Series),一維
“數據幀”(Data Frames),二維
例如,當您要從這兩種類型的結構中接收到一個新的Dataframe時,通過傳遞一個Series,您將收到一個單獨的行到DataFrame的DF:
這裡稍微列出了你可以用Pandas做的事情:
l 輕鬆刪除並添加資料幀(DataFrame)中的列
l 將資料結構轉換為資料幀(DataFrame)物件
l 處理丟失的資料,表示為NaN
l 功能強大的分組
l 視覺化
4.Matplotlib (提交數:
21754, 貢獻者數: 588)
又一個SciPy Stack核心套裝軟體以及 Python庫,Matplotlib為輕鬆生成簡單而強大的視覺化而量身定制。它是一個頂尖的軟體(在NumPy,SciPy和Pandas的幫助下),它使Python成為像MatLab或Mathematica這樣的科學工具的競爭對手。然而,這個庫是低層級的,這意味著你需要編寫更多的代碼才能達到高級的視覺化效果,而且通常會比使用更多的高級工具付出更多的努力,但總體上這些努力是值得的。只要付出一點你就可以做任何視覺化:
線圖
散點圖
橫條圖和長條圖
餅狀圖;
莖圖
輪廓圖
場圖
頻譜圖
5. Seaborn (提交數: 1699, 貢獻者數: 71)
Seaborn主要關注統計模型的視覺化;這種視覺化包括熱圖,這些熱圖(heat map)總結資料但仍描繪整體分佈。Seaborn基於Matplotlib,並高度依賴於此。
6. Bokeh (提交數:
15724, 貢獻者數: 223)
另一個很不錯的視覺化庫是Bokeh,它針對互動式視覺化。與以前的庫相比,它獨立於Matplotlib。正如我們提到的,Bokeh的主要焦點是交互性,它通過現代流覽器以資料驅動文檔(d3.js)的風格呈現。
7. Plotly (提交數: 2486, 貢獻者數: 33)
它是一個基於Web用於構建視覺化的工具箱,提供API給一些程式設計語言(Python在內)。在plot.ly網站上有一些強大的、上手即用的圖形。為了使用Plotly,你將需要設置API金鑰。圖形將在伺服器端處理,並發佈到互聯網,但有一種方法可以避免。
機器學習
8. SciKit-Learn (提交數:21793,
貢獻者數:842)
Scikits是Scikits
Stack額外的套裝軟體,專為像影像處理和機器學習輔助等特定功能而設計。對於機器學習輔助,scikit-learn是所有套裝軟體裡最突出的一個。它建立在SciPy之上,並大量利用它的數學運算。
scikit-learn給常見的機器學習演算法公開了一個簡潔、一致的介面,可簡單地將機器學習帶入生產系統中。該庫中集成了有品質的代碼和良好的文檔、簡單易用並且十分高效,是使用Python進行機器學習的實際行業標準。
9.Theano. (提交數:25870,
貢獻者數:300)
Theano是一個Python套裝軟體,它定義了與NumPy類似的多維陣列,以及數學運算和運算式。此庫是被編譯的,可實現在所有架構上的高效運行。最初由蒙特利爾大學機器學習組開發,它主要用於滿足機器學習的需求。
值得注意的是,Theano緊密結合了NumPy在低層次上的運算 。另外,該庫還優化了GPU和CPU的使用,使資料密集型的計算平臺性能更佳。
效率和穩定性微調保證了即使在數值很小的情況下,仍有更精確的結果,例如,即使只給出x的最小值,log(1 + x)仍能計算出合理的結果。
10. TensorFlow. (提交數:
16785,貢獻者數: 795)
TensorFlow來自Google的開發人員,它是資料流程圖計算的開源庫,為機器學習不斷打磨。它旨在滿足穀歌對訓練神經網路的高需求,並且是基於神經網路的機器學習系統DistBelief的繼任者。然而,TensorFlow並不限制于穀歌的科學應用範圍 – 它可以通用于多種多樣的現實應用中。
TensorFlow的關鍵特徵是它的多層節點系統,可以在大型資料集上快速訓練神經網路。這為谷歌的語音辨識和圖像物件識別提供了支援。
11. Keras. (提交數:
3519,貢獻者數: 428)
最後我們來看看Keras。它是一個用Python編寫的開源的庫,用於在高層的介面上構建神經網路。它簡單易懂,具有高級可擴展性。Keras使用Theano或TensorFlow作為後端,但微軟現在正努力整合CNTK(微軟的認知工具包)作為新的後端。設計中的簡約方法旨在通過建立緊湊型系統進行快速、簡便的實驗。
Keras真的容易上手,並在持續完善它的快速原型能力。它完全用Python編寫,可被高度模組化和擴展。儘管它以易上手、簡單和以高層次為導向,但是Keras足夠有深度並且足夠強大,去支援複雜的模型。
自然語言處理
12. NLTK (提交數:
12449,貢獻者數: 196)
這個庫的名稱“Natural Language Toolkit”,代表自然語言工具包,顧名思義,它用於符號學和統計學自然語言處理(NLP) 的常見任務。 NLTK旨在促進NLP及相關領域(語言學,認知科學人工智慧等)的教學和研究,目前受到重點關注。
NLTK的功能允許很多操作,例如文本標記,分類和標記,實體名稱識別,建立語料庫,可以顯示語言內部和各句子間的依賴性、詞根、語義推理等。所有的構建模組都可以為不同的任務構建複雜的研究系統,例如情緒分析,自動總結。
13. Gensim (提交數:
2878,貢獻者數: 179)
它是一個用於Python的開源庫,為有向量空間模型和主題模型的工作提供了使用工具。這個庫是為了高效處理大量文本而設計的,所以不僅可以進行記憶體處理,還可以通過廣泛使用NumPy資料結構和SciPy操作來獲得更高的效率。Gensim高效也易於使用。
Gensim旨在與原始和非結構化的數位文本一起使用。 它實現了諸如hierarchical Dirichlet processes(HDP),潛在語義分析(LSA)和潛在Dirichlet分配(LDA)之類的演算法,以及tf-idf,隨機預測,word2vec和document2vec,便於檢查一組文檔中有重複模式的文本
(通常稱為語料庫)。所有的演算法均是無監督的,意味著不需要任何參數,唯一的輸入只有語料庫。
資料採擷,統計學
14. Scrapy (提交數:
6325,貢獻者數: 243)
Scrapy庫是用於從網路結構化檢索資料(如連絡人資訊或URL),可以用來設計crawling程式(也稱為蜘蛛bots)。它是開源的,使用用Python編寫的。最開始只是如它的名字暗示的一樣,只用來做scraping,但是它現在已經在完整的框架中發展,能夠從API採集資料並作為通用的crawlers了。
該庫在介面設計中標榜著“不要重複自己” 它推薦用戶們編寫泛化得到、可被重複使用的通用代碼,從而構建和擴展大型的crawlers。Scrapy的架構圍繞著Spider class構建,這其中包含了crawler追從的一套指令。
15. Statsmodels (提交數: 8960,貢獻者數: 119)
你可能從名字就猜出大概了,statsmodels使用戶能夠通過使用各種統計模型的估算方法進行資料採擷,並執行統計判斷和分析。
許多有用的特徵是可被描述的,並通過使用線性回歸模型,廣義線性模型,離散選擇模型,魯棒線性模型,時間序列分析模型,各種估計方法得出統計結果。這個庫還提供了廣泛的標定功能,专门用于大数据统计中的性能优化工作。
安裝 Python 擴展庫
目前 pip 已經成為管理 Python
擴展庫的主流方式。Pip不僅可以即時查看本機已經安裝的擴展庫列表,還支援 Python 擴展庫的安裝、升級、和卸載等操作。
常用pip指令的使用方法
² pip install Package 安裝 Package 模組
² pip list 列出目前已安裝的所有模組
² pip install --upgrade Package 升級Package 模組
² pip uninstall Package 卸載Package 模組
有些擴展庫安中的時候要求本機已安裝對應的 C++ 編譯器,或者暫時還沒有與本機 Python 版本對應的官方版本,這時可從 http://www.lfd.uci.edu/~gohlke/pythonlibs/
下載對應的 whl 檔,然後在命令列以 pip 命令進行安裝,例如:
Pip install
pygame-1.9.2a0-cp35-none-win_amd64.whl
小技巧:以命令安裝 Python 擴展庫時,需要在 cmd 環境中進行,並且切換至 pip 命令所在的目錄,我們可以用檔案總管尋找 pip.exe ,開啟該目錄,然後執行 cmd,把檔案總管中的目錄複製下來,再貼到 cd 指令後面。
目錄為:C:\Users\huskywang\AppData\Local\Programs\Python\Python36\Scripts
為何 Python 的目錄如此複雜,是因為 Python
支援多個虛擬環境的建立,每個虛擬環境都是包含 Python 和對應擴展庫的一個目錄,多個虛擬環境之間互不干擾。
模組匯入與使用
Python 預設安裝僅包含部分機本或核心模組,啟動時也只載入基本模組,當有需要時再明確的載入其他模組。這樣可以減少程式執行的壓力,而且具備極強的可擴展性。Python 匯入模組的方法主要有:
import 模組名稱
[as 別名]
採用這種方式,使用時需要在物件前面加上模組名稱或是別名:
>>> import math
>>> math.sin(0.5)
0.479425538604203
>>> import random as rd
>>> x = rd.random()
>>> n = rd.randint(1,100)
>>> n
70
>>> x
0.9477336091251174
>>>
from 模組名稱
import 物件名稱 [as 別名]
這種方法無須以模組名稱作為首碼,可以減少程式人員輸入的程式碼:
>>> from math import sin
>>> sin(3)
0.1411200080598672
>>> from math import sin as f
>>> f(3)
0.1411200080598672
>>>
以 from import 的方式明確的匯入指定的物件,而非匯入整個模組,可以適當的提高程式載入和執行速度。
撰寫自己的模組和套件
自己寫的 Python 程式除了可以直接執行之外,還能夠作為模組匯入並使用其中的物件。__name__ 屬性便可識別程式的使用方法。每個 Python 腳本在執行的時候都會有一個 __name__ 屬性,如果腳本作為模組匯入,則其 __name__ 屬性值將自動設為模組名稱;如果獨立執行腳本,則其
__name__ 屬性值將自動設為 “_main__”,例如,hello.py 的程式碼如下:
在IDLE 中直接執行該程式時,得到的結果如下:
PS: hello.py 程式建議自己動手做一次,有助於了結程式的寫法。Python 與一般結構化程式語言不同,不會使用 { … } 來定義 Block,而是用縮排的方式。
課後測驗
請寫出 Python 的程式架構,並儲存為 program.py
def ______ :
if _____________ :
print(______________________)
elif ____________ :
print(______________________)
________
留言
張貼留言