盤點(diǎn)八個(gè)數(shù)據(jù)分析相關(guān)的Python庫(kù)(實(shí)例+代碼)
01 NumPy
關(guān)于NumPy,本節(jié)主要介紹ndarray多維數(shù)組對(duì)象和數(shù)組屬性。
1. ndarray 多維數(shù)組對(duì)象
NumPy庫(kù)中的ndarray是一個(gè)多維數(shù)組對(duì)象,由兩部分組成:實(shí)際的數(shù)據(jù)值和描述這些值的元數(shù)據(jù)。大部分的數(shù)組操作僅僅涉及修改元數(shù)據(jù)的部分,并不改變底層的實(shí)際數(shù)據(jù)。
數(shù)組中的所有元素類型必須是一致的,所以如果知道其中一個(gè)元素的類型,就很容易確定該數(shù)組需要的存儲(chǔ)空間??梢杂胊rray()函數(shù)創(chuàng)建數(shù)組,并通過dtype獲取其數(shù)據(jù)類型。
import numpy as np
a = np.array(6)
a.dtype
output: dtype('int64')
上例中,數(shù)組a的數(shù)據(jù)類型為int64,如果使用的是32位Python,則得到的數(shù)據(jù)類型可能是int32。
2. 數(shù)組屬性
NumPy數(shù)組有一個(gè)重要的屬性——維度(dimension),它的維度被稱作秩(rank)。以二維數(shù)組為例,一個(gè)二維數(shù)組相當(dāng)于兩個(gè)一維數(shù)組。只看最外面一層,它相當(dāng)于一個(gè)一維數(shù)組,該一維數(shù)組中的每個(gè)元素也是一維數(shù)組。那么,這個(gè)一維數(shù)組即二維數(shù)組的軸。
了解了以上概念,接著來看NumPy數(shù)組中比較重要的ndarray對(duì)象的屬性:
- ndarray.ndim:秩,即軸的數(shù)量或維度的數(shù)量
- ndarray.shape:數(shù)組的維度,如果存的是矩陣,如n×m矩陣則輸出為n行m列
- ndarray.size:數(shù)組元素的總個(gè)數(shù),相當(dāng)于.shape中n×m的值
- ndarray.dtype:ndarray對(duì)象的元素類型
- ndarray.itemsize:ndarray對(duì)象中每個(gè)元素的大小,以字節(jié)為單位
- ndarray.flags:ndarray對(duì)象的內(nèi)存信息
- ndarray.real:ndarray元素的實(shí)部
- ndarray.imag:ndarray元素的虛部
- ndarray.data:包含實(shí)際數(shù)組元素的緩沖區(qū),由于一般通過數(shù)組的索引獲取元素,所以通常不需要使用這個(gè)屬性
02 Matplotlib
Matplotlib是Python數(shù)據(jù)分析中常用的一個(gè)繪圖庫(kù),常用來繪制各種數(shù)據(jù)的可視化效果圖。其中,matplotlib.pyplot包含了簡(jiǎn)單的繪圖功能。
1. 實(shí)戰(zhàn):繪制多項(xiàng)式函數(shù)
為了說明繪圖的原理,下面來繪制多項(xiàng)式函數(shù)的圖像。使用NumPy的多項(xiàng)式函數(shù)poly1d()來創(chuàng)建多項(xiàng)式。
# 引入所需要的庫(kù)
import numpy as np
import matplotlib.pyplot as plt
# 使用 polyld() 函數(shù)創(chuàng)建多項(xiàng)式 func=1x3+2x2+3x+4
func = np.poly1d(np.array([1,2,3,4]).astype(f?loat))
# 使用 NumPy 的 linspace() 函數(shù)在 -10 和 10 之間產(chǎn)生 30 個(gè)均勻分布的值,作為函數(shù) x 軸的取值
x = np.linspace(-10, 10 , 30)
# 將 x 的值代入 func() 函數(shù),計(jì)算得到 y 值
y=func(x)
# 調(diào)用 pyplot 的 plot 函數(shù) (),繪制函數(shù)圖像
plt.plot(x, y)
# 使用 xlable() 函數(shù)添加 x 軸標(biāo)簽
plt.xlabel('x')
# 使用 ylabel() 函數(shù)添加 y 軸標(biāo)簽
plt.ylabel('y(x)')
# 調(diào)用 show() 函數(shù)顯示函數(shù)圖像
plt.show()
多項(xiàng)式函數(shù)的繪制結(jié)果如圖2-13所示。
▲圖2-13 多項(xiàng)式函數(shù)繪制
2. 實(shí)戰(zhàn):繪制正弦和余弦值
為了明顯看到兩個(gè)效果圖的區(qū)別,可以將兩個(gè)效果圖放到一張圖中顯示。Matplotlib中的subplot()函數(shù)允許在一張圖中顯示多張子圖。subplot()常用的3個(gè)整型參數(shù)分別為子圖的行數(shù)、子圖的列數(shù)以及子圖的索引。
下面的實(shí)例將繪制正弦和余弦兩個(gè)函數(shù)的圖像。
# 導(dǎo)入相關(guān)包
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.pyplot import f?igure
f?igure(num=None, f?igsize=(12, 8), dpi=80, facecolor='w', edgecolor='k')
# 計(jì)算正弦和余弦曲線上點(diǎn)的 x 和 y 坐標(biāo)
x = np.arange(0, 3 * np.pi, 0.1)
y_sin = np.sin(x)
y_cos = np.cos(x)
# subplot的3個(gè)參數(shù),2、1、1 ,表示繪制2行1列圖像中的第一個(gè)子圖
plt.subplot(2, 1, 1)# 繪制第一個(gè)子圖
# 繪制第一個(gè)圖像
plt.plot(x, y_sin)
plt.title('Sin')
plt.subplot(2, 1, 2)# 繪制2行1 列圖像中的第二個(gè)子圖
plt.plot(x, y_cos)
plt.title('Cos')
plt.show()# 顯示圖像
正弦和余弦函數(shù)的繪制結(jié)果如圖2-14所示。
▲圖2-14 正弦和余弦函數(shù)繪制
03 PySpark
在大數(shù)據(jù)應(yīng)用場(chǎng)景中,當(dāng)我們面對(duì)海量的數(shù)據(jù)和復(fù)雜模型巨大的計(jì)算需求時(shí),單機(jī)的環(huán)境已經(jīng)難以承載,需要用到分布式計(jì)算環(huán)境來完成機(jī)器學(xué)習(xí)任務(wù)。
Apache Spark是一個(gè)快速而強(qiáng)大的框架,可以對(duì)彈性數(shù)據(jù)集執(zhí)行大規(guī)模分布式處理。通過圖2-15所示的Apache Spark架構(gòu)圖可以非常清晰地看到它的組成。
▲圖2-15 Apache Spark架構(gòu)圖
Spark支持豐富的數(shù)據(jù)源,可以契合絕大部分大數(shù)據(jù)應(yīng)用場(chǎng)景,同時(shí),通過Spark核心對(duì)計(jì)算資源統(tǒng)一調(diào)度,由于計(jì)算的數(shù)據(jù)都在內(nèi)存中存儲(chǔ),使得計(jì)算效率大大提高。Spark原生支持的語言是Scala,但為了豐富應(yīng)用場(chǎng)景和滿足各研發(fā)人員的語言偏好,Spark同時(shí)支持Java、Python與R。
PySpark是Spark社區(qū)發(fā)布的在Spark框架中支持Python的工具包,它的計(jì)算速度和能力與Scala相似。通過PySpark調(diào)用Spark的API,配合MLlib與ML庫(kù),可以輕松進(jìn)行分布式數(shù)據(jù)挖掘。
MLlib庫(kù)是Spark傳統(tǒng)的機(jī)器學(xué)習(xí)庫(kù),目前支持4種常見的機(jī)器學(xué)習(xí)問題:分類、回歸、聚類和協(xié)同過濾。MLlib的所有算法皆基于Spark特有的RDD(Resilient Distributed Dataset,彈性分布式數(shù)據(jù)集)數(shù)據(jù)結(jié)構(gòu)進(jìn)行運(yùn)算。由于RDD并不能很好地滿足更為復(fù)雜的建模需求,ML庫(kù)應(yīng)運(yùn)而生。
ML庫(kù)相較MLlib庫(kù)更新,它全面采用基于數(shù)據(jù)幀(Data Frame)的API進(jìn)行操作,能夠提供更為全面的機(jī)器學(xué)習(xí)算法,且支持靜態(tài)類型分析,可以在編程過程中及時(shí)發(fā)現(xiàn)錯(cuò)誤,而不需要等代碼運(yùn)行。
Python中除了包含上面介紹的庫(kù),還有其他一些常用庫(kù)。下面分別進(jìn)行介紹。
04 SciPy
SciPy是一個(gè)開源算法庫(kù)和數(shù)學(xué)工具包,它基于NumPy構(gòu)建,并擴(kuò)展了NumPy的功能。SciPy包含線性代數(shù)、積分、插值、特殊函數(shù)、快速傅里葉變換等常用函數(shù),功能與軟件MATLAB、Scilab和GNU Octave類似。Scipy常常結(jié)合Numpy使用,可以說Python的大多數(shù)機(jī)器學(xué)習(xí)庫(kù)都依賴于這兩個(gè)模塊。
05 Pandas
Pandas提供了強(qiáng)大的數(shù)據(jù)讀寫功能、高級(jí)的數(shù)據(jù)結(jié)構(gòu)和各種分析工具。該庫(kù)的一大特點(diǎn)是能用一兩個(gè)命令完成復(fù)雜的數(shù)據(jù)操作。
Pandas中最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)是Series,用于表示一行數(shù)據(jù),可以理解為一維的數(shù)組。另一個(gè)關(guān)鍵的數(shù)據(jù)結(jié)構(gòu)為DataFrame,用于表示二維數(shù)組,作用和R語言里的data.frame很像。
Pandas內(nèi)置了很多函數(shù),用于分組、過濾和組合數(shù)據(jù),這些函數(shù)的執(zhí)行速度都很快。Pandas對(duì)于時(shí)間序列數(shù)據(jù)有一套獨(dú)特的分析機(jī)制,可對(duì)時(shí)間數(shù)據(jù)做靈活的分析與管理。
06 Scikit-Learn
Scikit-Learn是一個(gè)基于NumPy、SciPy、Matplotlib的開源機(jī)器學(xué)習(xí)工具包,功能強(qiáng)大,使用簡(jiǎn)單,是Kaggle選手經(jīng)常使用的學(xué)習(xí)庫(kù)。它主要涵蓋分類、回歸和聚類算法,例如SVM、邏輯回歸、樸素貝葉斯、隨機(jī)森林、K均值以及數(shù)據(jù)降維處理算法等,官方文檔齊全,更新及時(shí)。
Scikit-Learn基于Numpy和SciPy等Python數(shù)值計(jì)算庫(kù),提供了高效的算法實(shí)現(xiàn),并針對(duì)所有算法提供了一致的接口調(diào)用規(guī)則,包括KNN、K均值、PCA等,接口易用。
07 TensorFlow
TensorFlow是谷歌開源的數(shù)值計(jì)算框架,也是目前最為流行的神經(jīng)網(wǎng)絡(luò)分析系統(tǒng)。它采用數(shù)據(jù)流圖的方式,可靈活搭建多種機(jī)器學(xué)習(xí)和深度學(xué)習(xí)模型。
08 Keras
Keras是一個(gè)用于處理神經(jīng)網(wǎng)絡(luò)的高級(jí)庫(kù),可以運(yùn)行在TensorFlow和Theano上,現(xiàn)在發(fā)布的新版本可以使用CNTK或MxNet作為后端。Keras簡(jiǎn)化了很多特定任務(wù),并大大減少了樣板代碼數(shù),目前主要用于深度學(xué)習(xí)領(lǐng)域。
關(guān)于作者:劉鵬,教授,清華大學(xué)博士,云計(jì)算、大數(shù)據(jù)和人工智能領(lǐng)域的知名專家,南京云創(chuàng)大數(shù)據(jù)科技股份有限公司總裁、中國(guó)大數(shù)據(jù)應(yīng)用聯(lián)盟人工智能專家委員會(huì)主任。中國(guó)電子學(xué)會(huì)云計(jì)算專家委員會(huì)云存儲(chǔ)組組長(zhǎng)、工業(yè)和信息化部云計(jì)算研究中心專家。
高中強(qiáng),人工智能與大數(shù)據(jù)領(lǐng)域技術(shù)專家,有非常深厚的積累,擅長(zhǎng)機(jī)器學(xué)習(xí)和自然語言處理,尤其是深度學(xué)習(xí),熟悉Tensorflow、PyTorch等深度學(xué)習(xí)開發(fā)框架。曾獲“2019年全國(guó)大學(xué)生數(shù)學(xué)建模優(yōu)秀命題人獎(jiǎng)”。參與鐘南山院士指導(dǎo)新型冠狀病毒人工智能預(yù)測(cè)系統(tǒng)研發(fā)項(xiàng)目,與鐘南山院士團(tuán)隊(duì)共同發(fā)表學(xué)術(shù)論文。
本文摘編自《Python金融數(shù)據(jù)挖掘與分析實(shí)戰(zhàn)》,經(jīng)出版方授權(quán)發(fā)布。(ISBN:9787111696506)