日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

NumPy、pandas、Matplotlib…8個Python庫從安裝到應用(附代碼)

 乙甲壬 2020-07-11

導讀:Python本身的數(shù)據(jù)分析功能并不強,需要安裝一些第三方擴展庫來增強其相應的功能。本文將對NumPy、SciPy、Matplotlib、pandas、StatsModels、scikit-learn、Keras、Gensim等庫的安裝和使用進行簡單的介紹。

作者:張良均 譚立云 劉名軍 江建明

來源:華章科技

NumPy、pandas、Matplotlib…8個Python庫從安裝到應用(附代碼)

如果讀者安裝的是Anaconda發(fā)行版,那么它已經自帶了以下庫:NumPy、SciPy、Matplotlib、pandas、scikit-learn。

本文主要是對這些庫進行簡單的介紹,讀者也可以到官網閱讀更加詳細的使用教程。

  • NumPy:提供數(shù)組支持以及相應的高效的處理函數(shù)
  • SciPy:提供矩陣支持以及矩陣相關的數(shù)值計算模塊
  • Matplotlib:強大的數(shù)據(jù)可視化工具、作圖庫
  • pandas:強大、靈活的數(shù)據(jù)分析和探索工具
  • StatsModels:統(tǒng)計建模和計量經濟學,包括描述統(tǒng)計、統(tǒng)計模型估計和推斷
  • scikit-learn:支持回歸、分類、聚類等強大的機器學習庫
  • Keras:深度學習庫,用于建立神經網絡以及深度學習模型
  • Gensim:用來做文本主題模型的庫,文本挖掘可能會用到

01 NumPy

Python并沒有提供數(shù)組功能。雖然列表可以完成基本的數(shù)組功能,但它不是真正的數(shù)組,而且在數(shù)據(jù)量較大時,使用列表的速度就會很慢。為此,NumPy提供了真正的數(shù)組功能以及對數(shù)據(jù)進行快速處理的函數(shù)。

NumPy還是很多更高級的擴展庫的依賴庫,我們后面介紹的SciPy、Matplotlib、pandas等庫都依賴于它。值得強調的是,NumPy內置函數(shù)處理數(shù)據(jù)的速度是C語言級別的,因此在編寫程序的時候,應當盡量使用其內置函數(shù),避免效率瓶頸的(尤其是涉及循環(huán)的問題)出現(xiàn)。

在Windows操作系統(tǒng)中,NumPy的安裝跟普通第三方庫的安裝一樣,可以通過pip命令進行,命令如下:

pip install numpy

也可以自行下載源代碼,然后使用如下命令安裝:

python setup.py install

在Linux操作系統(tǒng)下,上述方法也是可行的。此外,很多Linux發(fā)行版的軟件源中都有Python常見的庫,因此還可以通過Linux系統(tǒng)自帶的軟件管理器安裝,如在Ubuntu下可以用如下命令安裝:

sudo apt-get install python-numpy

安裝完成后,可以使用NumPy對數(shù)據(jù)進行操作,如代碼清單2-27所示。

  • 代碼清單2-27 使用NumPy操作數(shù)組
# -*- coding: utf-8 -*import numpy as np                     # 一般以np作為NumPy庫的別名a = np.array([2015])             # 創(chuàng)建數(shù)組print(a)                               # 輸出數(shù)組print(a[:3])                           # 引用前三個數(shù)字(切片)print(a.min())                         # 輸出a的最小值a.sort()                               # 將a的元素從小到大排序,此操作直接修改a,因此這時候a為[0, 1, 2, 5]b= np.array([[123], [456]])    # 創(chuàng)建二維數(shù)組print(b*b)                             # 輸出數(shù)組的平方陣,即[[1, 4, 9], [16, 25, 36]]

NumPy是Python中相當成熟和常用的庫,因此關于它的教程有很多,最值得一看的是其官網的幫助文檔,其次還有很多中英文教程,讀者遇到相應的問題時,可以查閱相關資料。

參考鏈接:

http://www.

http:///python/2012/08/22/numpy

02 SciPy

如果說NumPy讓Python有了MATLAB的味道,那么SciPy就讓Python真正成為半個MATLAB了。NumPy提供了多維數(shù)組功能,但它只是一般的數(shù)組,并不是矩陣,比如當兩個數(shù)組相乘時,只是對應元素相乘,而不是矩陣乘法。SciPy提供了真正的矩陣以及大量基于矩陣運算的對象與函數(shù)。

SciPy包含的功能有最優(yōu)化、線性代數(shù)、積分、插值、擬合、特殊函數(shù)、快速傅里葉變換、信號處理和圖像處理、常微分方程求解和其他科學與工程中常用的計算,顯然,這些功能都是挖掘與建模必需的。

SciPy依賴于NumPy,因此安裝之前得先安裝好NumPy。安裝SciPy的方式與安裝NumPy的方法大同小異,需要提及的是,在Ubuntu下也可以用類似的命令安裝SciPy,安裝命令如下:

sudo apt-get install python-scipy

安裝好SciPy后,使用SciPy求解非線性方程組和數(shù)值積分,如代碼清單2-28所示。

  • 代碼清單2-28 使用SciPy求解非線性方程組和數(shù)值積分
# -*- coding: utf-8 -*# 求解非線性方程組2x1-x2^2=1,x1^2-x2=2from scipy.optimize import fsolve       # 導入求解方程組的函數(shù)def f(x):                               # 定義要求解的方程組    x1 = x[0]    x2 = x[1]    return [2*x1 - x2**2 - 1, x1**2 - x2 -2]result = fsolve(f, [1,1])               # 輸入初值[1, 1]并求解print(result)                           # 輸出結果,為array([ 1.91963957,  1.68501606])# 數(shù)值積分from scipy import integrate             # 導入積分函數(shù)def g(x):                               # 定義被積函數(shù)    return (1-x**2)**0.5pi_2, err = integrate.quad(g, -11)    # 積分結果和誤差print(pi_2 * 2)                         # 由微積分知識知道積分結果為圓周率pi的一半

參考鏈接:

http://www.

http:///python/2012/08/24/scipy

03 Matplotlib

不論是數(shù)據(jù)挖掘還是數(shù)學建模,都要面對數(shù)據(jù)可視化的問題。對于Python來說,Matplotlib是最著名的繪圖庫,主要用于二維繪圖,當然也可以進行簡單的三維繪圖。它不僅提供了一整套和MATLAB相似但更為豐富的命令,讓我們可以非常快捷地用Python可視化數(shù)據(jù),而且允許輸出達到出版質量的多種圖像格式。

Matplotlib的安裝并沒有什么特別之處,可以通過“pip install matplotlib”命令安裝或者自行下載源代碼安裝,在Ubuntu下也可以用類似的命令安裝,命令如下:

sudo apt-get install python-matplotlib

需要注意的是,Matplotlib的上級依賴庫相對較多,手動安裝的時候,需要逐一把這些依賴庫都安裝好。安裝完成后就可以牛刀小試了。下面是一個簡單的作圖例子,如代碼清單2-29所示,它基本包含了Matplotlib作圖的關鍵要素,作圖效果如圖2-5所示。

  • 代碼清單2-29 Matplotlib作圖示例
# -*- coding: utf-8 -*-import numpy as npimport matplotlib.pyplot as plt                    # 導入Matplotlibx = np.linspace(0101000)                       # 作圖的變量自變量y = np.sin(x) + 1                                  # 因變量yz = np.cos(x**2) + 1                               # 因變量zplt.figure(figsize = (84))                       # 設置圖像大小plt.plot(x,y,label = '$\sin x+1$', color = 'red', linewidth = 2)                                                   # 作圖,設置標簽、線條顏色、線條大小plt.plot(x, z, 'b--', label = '$\cos x^2+1$')      # 作圖,設置標簽、線條類型plt.xlabel('Time(s) ')                             # x軸名稱plt.ylabel('Volt')                                 # y軸名稱plt.title('A Simple Example')                      # 標題plt.ylim(02.2)                                   # 顯示的y軸范圍plt.legend()                                       # 顯示圖例plt.show()                                         # 顯示作圖結果
NumPy、pandas、Matplotlib…8個Python庫從安裝到應用(附代碼)

▲圖2-5 Matplotlib的作圖效果展示

如果讀者使用的是中文標簽,就會發(fā)現(xiàn)中文標簽無法正常顯示,這是因為Matplotlib的默認字體是英文字體,解決方法是在作圖之前手動指定默認字體為中文字體,如黑體(Sim-Hei),命令如下:

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用來正常顯示中文標簽

其次,保存作圖圖像時,負號有可能不能顯示,對此可以通過以下代碼解決:

plt.rcParams['axes.unicode_minus'] = False    # 解決保存圖像是負號'-'顯示為方塊的問題

這里有一個小建議:有時間多去Matplotlib提供的“畫廊”欣賞用它做出的漂亮圖片,也許你就會慢慢愛上Matplotlib作圖了。

畫廊網址:

http:///gallery.html

參考鏈接:

http://

http:///python/2012/09/07/matplotlib-tutorial

04 pandas

pandas是Python下最強大的數(shù)據(jù)分析和探索工具。它包含高級的數(shù)據(jù)結構和精巧的工具,使得用戶在Python中處理數(shù)據(jù)非常快速和簡單。

pandas建造在NumPy之上,它使得以NumPy為中心的應用使用起來更容易。pandas的名稱來自于面板數(shù)據(jù)(Panel Data)和Python數(shù)據(jù)分析(Data Analysis),它最初作為金融數(shù)據(jù)分析工具被開發(fā),由AQR Capital Management于2008年4月開發(fā)問世,并于2009年底開源出來。

pandas的功能非常強大,支持類似SQL的數(shù)據(jù)增、刪、查、改,并且?guī)в胸S富的數(shù)據(jù)處理函數(shù);支持時間序列分析功能;支持靈活處理缺失數(shù)據(jù);等等。事實上,單純地用pandas這個工具就足以寫一本書,讀者可以閱讀pandas的主要作者之一Wes Mc-Kinney寫的《利用Python進行數(shù)據(jù)分析》來學習更詳細的內容。

1. 安裝

pandas的安裝相對來說比較容易一些,只要安裝好NumPy之后,就可以直接安裝了,通過pip install pandas命令或下載源碼后通過python setup.py install命令安裝均可。

由于我們頻繁用到讀取和寫入Excel,但默認的pandas還不能讀寫Excel文件,需要安裝xlrd(讀)度和xlwt(寫)庫才能支持Excel的讀寫。為Python添加讀取/寫入Excel功能的命令如下:

pip install xlrd          # 為Python添加讀取Excel的功能pip install xlwt          # 為Python添加寫入Excel的功能

2. 使用

在后面的章節(jié)中,我們會逐步展示pandas的強大功能,而在本節(jié),我們先以簡單的例子一睹為快。

首先,pandas基本的數(shù)據(jù)結構是Series和DataFrame。Series顧名思義就是序列,類似一維數(shù)組;DataFrame則相當于一張二維的表格,類似二維數(shù)組,它的每一列都是一個Series。

為了定位Series中的元素,pandas提供了Index這一對象,每個Series都會帶有一個對應的Index,用來標記不同的元素,Index的內容不一定是數(shù)字,也可以是字母、中文等,它類似于SQL中的主鍵。

類似的,DataFrame相當于多個帶有同樣Index的Series的組合(本質是Series的容器),每個Series都帶有一個唯一的表頭,用來標識不同的Series。pandas中常用操作的示例如代碼清單2-30所示。

  • 代碼清單2-30 pandas中的常用操作
# -*- coding: utf-8 -*-import numpy as npimport pandas as pd                              # 通常用pd作為pandas的別名。s = pd.Series([1,2,3], index=['a''b''c'])    # 創(chuàng)建一個序列s                                                 # 創(chuàng)建一個表d = pd.DataFrame([[123], [456]], columns=['a''b''c'])d2 = pd.DataFrame(s)                             # 也可以用已有的序列來創(chuàng)建數(shù)據(jù)框d.head()                                         # 預覽前5行數(shù)據(jù)d.describe()                                     # 數(shù)據(jù)基本統(tǒng)計量# 讀取文件,注意文件的存儲路徑不能帶有中文,否則讀取可能出錯。pd.read_excel('data.xls')                    # 讀取Excel文件,創(chuàng)建DataFrame。pd.read_csv('data.csv', encoding='utf-8')    # 讀取文本格式的數(shù)據(jù),一般用encoding指定編碼。

由于pandas是本書的主力工具,在后面將會頻繁使用它,因此這里不再詳細介紹,后文會更加詳盡地講解pandas的使用方法。

參考鏈接:

http://pandas./pandas-docs/stable/

05 StatsModels

pandas著重于數(shù)據(jù)的讀取、處理和探索,而StatsModels則更加注重數(shù)據(jù)的統(tǒng)計建模分析,它使得Python有了R語言的味道。StatsModels支持與pandas進行數(shù)據(jù)交互,因此,它與pandas結合成為Python下強大的數(shù)據(jù)挖掘組合。

安裝StatsModels相當簡單,既可以通過pip命令安裝,又可以通過源碼安裝。對于Windows用戶來說,官網上甚至已經有編譯好的exe文件可供下載。如果手動安裝的話,需要自行解決好依賴問題,StatsModels依賴于pandas(當然也依賴于pandas所依賴的庫),同時還依賴于Pasty(一個描述統(tǒng)計的庫)。

使用StatsModels進行ADF平穩(wěn)性檢驗,如代碼清單2-31所示。

  • 代碼清單2-31 使用StatsModels進行ADF平穩(wěn)性檢驗
# -*- coding: utf-8 -*-from statsmodels.tsa.stattools import adfuller as ADF    # 導入ADF檢驗import numpy as npADF(np.random.rand(100))                                 # 返回的結果有ADF值、p值等

參考鏈接:

http://statsmodels./stable/index.html

06 scikit-learn

從該庫的名字可以看出,這是一個與機器學習相關的庫。不錯,scikit-learn是Python下強大的機器學習工具包,它提供了完善的機器學習工具箱,包括數(shù)據(jù)預處理、分類、回歸、聚類、預測、模型分析等。

scikit-learn依賴于NumPy、SciPy和Matplotlib,因此,只需要提前安裝好這幾個庫,然后安裝scikit-learn基本上就沒有什么問題了,安裝方法跟前幾個庫的安裝一樣,可以通過pip install scikit-learn命令安裝,也可以下載源碼自行安裝。

使用scikit-learn創(chuàng)建機器學習的模型很簡單,示例如代碼清單2-32所示。

  • 代碼清單2-32 使用scikit-learn創(chuàng)建機器學習模型
# -*- coding: utf-8 -*-from sklearn.linear_model import LinearRegression     # 導入線性回歸模型model = LinearRegression()                            # 建立線性回歸模型print(model)

1. 所有模型提供的接口有

對于訓練模型來說是model.fit(),對于監(jiān)督模型來說是fit(X, y),對于非監(jiān)督模型是fit(X)。

2. 監(jiān)督模型提供如下接口

  • model.predict(X_new):預測新樣本。
  • model.predict_proba(X_new):預測概率,僅對某些模型有用(比如LR)。
  • model.score():得分越高,fit越好。

3. 非監(jiān)督模型提供如下接口

  • model.transform():從數(shù)據(jù)中學到新的“基空間”。
  • model.fit_transform():從數(shù)據(jù)中學到新的基并將這個數(shù)據(jù)按照這組“基”進行轉換。

Scikit-learn本身提供了一些實例數(shù)據(jù)供我們上手學習,比較常見的有安德森鳶尾花卉數(shù)據(jù)集、手寫圖像數(shù)據(jù)集等。

安德森鳶尾花卉數(shù)據(jù)集有150個鳶尾花的尺寸觀測值,如萼片長度和寬度,花瓣長度和寬度;還有它們的亞屬:山鳶尾(iris setosa)、變色鳶尾(iris versicolor)和維吉尼亞鳶尾(iris virginica)。導入iris數(shù)據(jù)集并使用該數(shù)據(jù)訓練SVM模型,如代碼清單2-33所示。

  • 代碼清單2-33 導入iris數(shù)據(jù)集并訓練SVM模型
# -*- coding: utf-8 -*-from sklearn import datasets           # 導入數(shù)據(jù)集iris = datasets.load_iris()            # 加載數(shù)據(jù)集print(iris.data.shape)                 # 查看數(shù)據(jù)集大小from sklearn import svm                # 導入SVM模型clf = svm.LinearSVC()                       # 建立線性SVM分類器clf.fit(iris.data, iris.target)             # 用數(shù)據(jù)訓練模型clf.predict([[ 5.0,  3.6,  1.3,  0.25]])    # 訓練好模型之后,輸入新的數(shù)據(jù)進行預測clf.coef_                                   # 查看訓練好模型的參數(shù)

參考鏈接:

http:///stable/

07 Keras

scikit-learn已經足夠強大了,然而它并沒有包含這一強大的模型—人工神經網絡。人工神經網絡是功能相當強大但是原理又相當簡單的模型,在語言處理、圖像識別等領域都有重要的作用。近年來逐漸流行的“深度學習”算法,實質上也是一種神經網絡,可見在Python中實現(xiàn)神經網絡是非常必要的。

本書用Keras庫來搭建神經網絡。事實上,Keras并非簡單的神經網絡庫,而是一個基于Theano的強大的深度學習庫,利用它不僅可以搭建普通的神經網絡,還可以搭建各種深度學習模型,如自編碼器、循環(huán)神經網絡、遞歸神經網絡、卷積神經網絡等。由于它是基于Theano的,因此速度也相當快。

Theano也是Python的一個庫,它是由深度學習專家Yoshua Bengio帶領的實驗室開發(fā)出來的,用來定義、優(yōu)化和高效地解決多維數(shù)組數(shù)據(jù)對應數(shù)學表達式的模擬估計問題。它具有高效實現(xiàn)符號分解、高度優(yōu)化的速度和穩(wěn)定性等特點,最重要的是它還實現(xiàn)了GPU加速,使得密集型數(shù)據(jù)的處理速度是CPU的數(shù)十倍。

用Theano就可以搭建起高效的神經網絡模型,然而對于普通讀者來說門檻還是相當高的。Keras正是為此而生,它大大簡化了搭建各種神經網絡模型的步驟,允許普通用戶輕松地搭建并求解具有幾百個輸入節(jié)點的深層神經網絡,而且定制的自由度非常大,讀者甚至因此驚呼:搭建神經網絡可以如此簡單!

1. 安裝

安裝Keras之前首先需要安裝NumPy、SciPy和Theano。安裝Theano之前首先需要準備一個C++編譯器,這在Linux系統(tǒng)下是自帶的。因此,在Linux系統(tǒng)下安裝Theano和Keras都非常簡單,只需要下載源代碼,然后用python setup.py install安裝就行了,具體可以參考官方文檔。

可是在Windows系統(tǒng)下就沒有那么簡單了,因為它沒有現(xiàn)成的編譯環(huán)境,一般而言是先安裝MinGW(Windows系統(tǒng)下的GCC和G++),然后再安裝Theano(提前裝好NumPy等依賴庫),最后安裝Keras,如果要實現(xiàn)GPU加速,還需要安裝和配置CUDA。

值得一提的是,在Windows系統(tǒng)下的Keras速度會大打折扣,因此,想要在神經網絡、深度學習做深入研究的讀者,請在Linux系統(tǒng)下搭建相應的環(huán)境。

參考鏈接:

http:///software/theano/install.html#install

2. 使用

用Keras搭建神經網絡模型的過程相當簡單,也相當直觀,就像搭積木一般,通過短短幾十行代碼,就可以搭建起一個非常強大的神經網絡模型,甚至是深度學習模型。簡單搭建一個MLP(多層感知器),如代碼清單2-34所示。

  • 代碼清單2-34 搭建一個MLP(多層感知器)
# -*- coding: utf-8 -*-from keras.models import Sequentialfrom keras.layers.core import Dense, Dropout, Activationfrom keras.optimizers import SGDmodel = Sequential()                # 模型初始化model.add(Dense(2064))            # 添加輸入層(20節(jié)點)、第一隱藏層(64節(jié)點)的連接model.add(Activation('tanh'))       # 第一隱藏層用tanh作為激活函數(shù)model.add(Dropout(0.5))             # 使用Dropout防止過擬合model.add(Dense(6464))            # 添加第一隱藏層(64節(jié)點)、第二隱藏層(64節(jié)點)的連接model.add(Activation('tanh'))       # 第二隱藏層用tanh作為激活函數(shù)model.add(Dropout(0.5))             # 使用Dropout防止過擬合model.add(Dense(641))             # 添加第二隱藏層(64節(jié)點)、輸出層(1節(jié)點)的連接model.add(Activation('sigmoid'))    # 輸出層用sigmoid作為激活函數(shù)sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)    # 定義求解算法model.compile(loss='mean_squared_error', optimizer=sgd)       # 編譯生成模型,損失函數(shù)為平均誤差平方和model.fit(X_train, y_train, nb_epoch=20, batch_size=16)       # 訓練模型score = model.evaluate(X_test, y_test, batch_size=16)         # 測試模型

要注意的是,Keras的預測函數(shù)跟scikit-learn有所差別,Keras用model.predict()方法給出概率,用model.predict_classes()給出分類結果。

參考鏈接:

https:///

08 Gensim

在Gensim官網中,它對自己的簡介只有一句話:topic modelling for humans!

Gensim用來處理語言方面的任務,如文本相似度計算、LDA、Word2Vec等,這些領域的任務往往需要比較多的背景知識。

在這一節(jié)中,我們只是提醒讀者有這么一個庫的存在,而且這個庫很強大,如果讀者想深入了解這個庫,可以去閱讀官方幫助文檔或參考鏈接。

值得一提的是,Gensim把Google在2013年開源的著名的詞向量構造工具Word2Vec編譯好了,作為它的子庫,因此需要用到Word2Vec的讀者也可以直接使用Gensim,而無須自行編譯了。

Gensim的作者對Word2Vec的代碼進行了優(yōu)化,所以它在Gensim下的表現(xiàn)比原生的Word2Vec還要快。(為了實現(xiàn)加速,需要準備C++編譯器環(huán)境,因此,建議使用Gensim的Word2Vec的讀者在Linux系統(tǒng)環(huán)境下運行。)

下面是一個Gensim使用Word2Vec的簡單例子,如代碼清單2-35所示。

  • 代碼清單2-35 Gensim使用Word2Vec的簡單示例
# -*- coding: utf-8 -*-import gensim, logginglogging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level= logging.INFO)# logging是用來輸出訓練日志# 分好詞的句子,每個句子以詞列表的形式輸入sentences = [['first''sentence'], ['second''sentence']]# 用以上句子訓練詞向量模型model = gensim.models.Word2Vec(sentences, min_count=1)print(model['sentence'])    # 輸出單詞sentence的詞向量。

參考鏈接:

http:///gensim/

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多