python 數據分析工具之 numpy pandas matplotlib
作為一個網絡技術人員,機器學習是一種很有必要學習的技術,在這個數據爆炸的時代更是如此。
python做數據分析,最常用以下幾個庫
numpy pandas matplotlib
一、Numpy庫
為了方便科學計算,Numpy庫定義了一些屬性和方法以便於對一維數據,二位數據和高維數據的處理。為了滿足科學計算的需求,Numpy定義了一個多維數組對象——ndarray。Ndarray由實際數據和描述這些數據的元數據(如數據維度、數據類型)構成,ndarray一般要求所有元素類型相同。
(1) Ndarray中的屬性
屬性 |
說明 |
.dim |
秩,即軸的數量或數據的維度 |
.shape |
ndarray對象的尺度,對應於矩陣的n行m列 |
.size |
ndarray對象中元素的個數,即n*m |
.dtype |
ndarray對象中元素的類型 |
.itemsize |
ndarray對象中每個元素的大小 |
ndarray中數據類型包括:bool,intc,intp,int8,int16,int32,int64,uint8,uint16,uint32,uint64,float6,float32,float64,complex64,complex128。
(2) Ndarray對象的創建
Ndarray對象可以由python中的列表和元組對象創建、使用ndarray中的函數進行創建、從字節流中創建和從文件中讀取特定格式進行創建。
l 使用python中的列表和元組對象進行創建
基本格式為 X = np.array(list/tuple,dtype = 數據類型)dtype參數如果沒有指定,那麽ndaary會根據數據形式自動定義數據類型
l 使用ndarray中的創建函數
函數 |
說明 |
np.arange(n) |
類似range()函數,返回ndarray類型,元素從0到n‐1 |
np.ones(shape) |
根據shape生成一個全1數組,shape是元組類型 |
np.zeros(shape) |
根據shape生成一個全0數組,shape是元組類型 |
np.full(shape,val) |
根據shape生成一個數組,每個元素值都是val |
np.eye(n) |
創建一個正方的n*n單位矩陣,對角線為1,其余為0 |
np.ones_like(a) |
根據數組a的形狀生成一個全1數組 |
np.zeros_like(a) |
根據數組a的形狀生成一個全0數組 |
np.full_like(a,val) |
根據數組a的形狀生成一個數組,每個元素值都是val |
(3) Ndarray對象的變換
Ndarray對象的變換是指對ndarray對象的維度和元素類型進行變換。
方法 |
說明 |
.reshape(shape) |
不改變數組元素,返回一個shape形狀的數組,原數組不變 |
.resize(shape) |
與.reshape()功能一致,但修改原數組 |
.swapaxes(ax1,ax2) |
將數組n個維度中兩個維度進行調換 |
.flatten() |
對數組進行降維,返回折疊後的一維數組,原數組不變 |
.astype(new_type) |
創建新的數組(原始數據的一個拷貝),但是數據類型進行改變 |
.tolist() |
ndarray數組向列表的變化 |
(4) 數組的索引和切片
一維數組的索引和切片與python中的列表操作相同。
多維數組的索引和切片中不同維度的索引序號間要加上逗號進行分隔。
(5) Ndarray數組的運算
函數 |
說明 |
np.abs(x) np.fabs(x) |
計算數組各元素的絕對值 |
np.sqrt(x) |
計算數組各元素的平方根 |
np.square(x) |
計算數組各元素的平方 |
np.log(x) np.log10(x) np.log2(x) |
計算數組各元素的自然對數、10底對數和2底對數 |
np.rint(x) |
計算數組各元素的四舍五入值 |
np.modf(x) |
將數組各元素的小數和整數部分以兩個獨立數組形式返回 |
np.exp(x) |
計算數組各元素的指數值 |
np.sign(x) |
計算數組各元素的符號值,1(+), 0, ‐1(‐) |
np.cos(x) np.cosh(x) np.sin(x) np.sinh(x) np.tan(x) np.tanh(x) |
計算數組各元素的普通型和雙曲型三角函數 |
+ ‐ * / ** |
兩個數組各元素進行對應運算 |
np.maximum(x,y) np.fmax() np.minimum(x,y) np.fmin() |
元素級的最大值/最小值計算 |
np.mod(x,y) |
元素級的模運算 |
np.copysign(x,y) |
將數組y中各元素值的符號賦值給數組x對應元素 |
(6) 數組的讀取和寫入
函數 |
說明 |
a.tofile(frame, sep=‘‘, format=‘%s‘) |
存取函數,frame是寫入的文件名,seq是指定的分隔符,format是寫入的格式 |
np.fromfile(frame,dtype=float,count=‐1, sep=‘‘) |
讀取函數,frame是讀取的文件名,count代表讀取的元素個數,-1表示讀取整個文件。註意該方法需要知道數組的維度信息 |
np.save(fname, array) |
Frame是文件名,以npy為拓展名,array是數組變量 |
np.load(frame) |
(7) 隨機數函數
函數 |
說明 |
rand(d0,d1,..,dn) |
根據d0‐dn(維度信息)創建隨機數數組,浮點數,[0,1),均勻分布 |
randn(d0,d1,..,dn) |
根據d0‐dn創建隨機數數組,標準正態分布 |
randint(low,high,shape) |
根據shape創建隨機整數或整數數組,範圍是[low, high) |
seed(s) |
隨機數種子,s是給定的種子值 |
shuffle(a) |
根據數組a的第1軸進行隨排列,改變數組x |
permutation(a) |
根據數組a的第1軸產生一個新的亂序數組,不改變數組x |
choice(a[,size,replace,p]) |
從一維數組a中以概率p抽取元素,形成size形狀新數組 replace表示是否可以重用元素,默認為False |
uniform(low,high,size) |
產生具有均勻分布的數組,low起始值,high結束值,size形狀 |
normal(loc,scale,size) |
產生具有正態分布的數組,loc均值,scale標準差,size形狀 |
poisson(lam,size) |
產生具有泊松分布的數組,lam隨機事件發生率,size形狀 |
(8) 統計函數
函數 |
說明 |
sum(a, axis=None) |
根據給定軸axis計算數組a相關元素之和,axis整數或元組 |
mean(a, axis=None) |
根據給定軸axis計算數組a相關元素的期望,axis整數或元組 |
average(a,axis=None,weights=None) |
根據給定軸axis計算數組a相關元素的加權平均值 |
std(a, axis=None) |
根據給定軸axis計算數組a相關元素的標準差 |
var(a, axis=None) |
根據給定軸axis計算數組a相關元素的方差 |
min(a) max(a) |
計算數組a中元素的最小值、最大值 |
argmin(a) argmax(a) |
計算數組a中元素最小值、最大值的降一維後下標 |
unravel_index(index, shape) |
根據shape將一維下標index轉換成多維下標 |
ptp(a) |
計算數組a中元素最大值與最小值的差 |
median(a) |
計算數組a中元素的中位數(中值) |
np.gradient(f) |
計算數組f中元素的梯度,當f為多維時,返回每個維度梯度 |
二、Matplotlib庫
Matplotlib庫由各種可視化類構成,內部結構復雜,受Matlab啟發matplotlib.pyplot是繪制各類可視化圖形的命令子庫,相當於快捷方式。
(1) pyplot.plot函數
函數基本格式為plt.plot(x, y, format_string, **kwargs)。x為x軸的數據,y為y周的數據,format_string是控制曲線的格式字符串,包括顏色字符,風格字符和標記字符。
顏色字符 |
說明 |
顏色字符 |
說明 |
‘b’ |
藍色 |
‘m’ |
洋紅色 |
‘g’ |
綠色 |
‘y’ |
黃色 |
‘r’ |
和紅色 |
‘k’ |
黑色 |
‘c’ |
青綠色 |
‘w’ |
白色 |
‘#008000’ |
RGB某種顏色 |
‘0.8’ |
灰度值字符串 |
風格字符 |
說明 |
‘-’ |
實線 |
‘--’ |
破折線 |
‘-.’ |
點劃線 |
‘:’ |
虛線 |
‘‘ ‘ ‘ |
無線條 |
pyplot並不默認支持中文顯示,需要rcParams修改字體實現。
rcParams中的參數:
除了上述方法外,還可以在有中文輸出的地方,增加一個屬性:fontproperties。
文本顯示函數:
(2) pyplot的子繪圖區域
可以使用subplotgrid函數,函數的一般形式為:
plt.subplot2grid(GridSpec, CurSpec, colspan=1,rowspan=1)
colspan是指列上的延伸範圍,同理rowspan是行方向的延伸範圍。
此外還可以使用GridSpec類。
圖只是展示數據的一種方式,圖像的繪制要結合數據特征來看,而且也比較簡單,有了數據知道該如何展示後去matplotlib官網上找相應的代碼就好了。
(3) 圖像的數組展示和處理
圖像一般使用RGB色彩模式,即每個像素點的顏色由紅(R)、綠(G)、藍(B)組成,三個顏色通道的變化和疊加得到各種顏色,每個顏色通道的變化範圍為0-255。圖像是一個由像素組成的二維矩陣,每個元素是一個RGB值,即shape為(lenth,width,3)。
PIL庫是一個具有強大圖像處理能力的第三方庫,其中定義了Image類,可以使圖像變成數組,並對其進行處理,最後再把數組返回成圖像。
convert(‘L’)表示把圖像轉化成灰度值。
三、Pandas庫
Pandas是Python第三方庫,提供高性能易用數據類型和分析工具,其定義了兩個數據類型:Series,DataFrame。不同於numpy庫中定義的ndarray類型,pandas庫中的數據類型關註數據的應用,即數據和索引之間的關系。
(1) Series類型
Series類型由一組數據及與之相關的數據索引組成,只用於表達一維數組。Series類型可以由python列表和字典、ndarray和其他函數創建。
創建的一般表達為,pd.Series(array,index=)
Series類型的操作類似ndarray類型:索引方法相同,采用[]、NumPy中運算和操作可用於Series類型、可以通過自定義索引的列表進行切片以及可以通過自動索引進行切片,如果存在自定義索引,則一同被切片。
Series類型的操作類似Python字典類型:通過自定義索引訪問、保留字in操作以及使用.get()方法。
(2) DataFrame類型
DataFrame類型由共用相同索引的一組列組成。DataFrame是一個表格型的數據類型,每列值類型可以不同DataFrame既有行索引、也有列索引DataFrame常用於表達二維數據,但可以表達多維數據。操作和床架與Series類型相似。
(3) 索引類型的函數
方法 |
說明 |
.reindex(index=None,columns=None..) |
改變或重排Series和DataFrame索引 |
.append(idx) |
連接另一個Index對象,產生新的Index對象 |
.diff(idx) |
計算差集,產生新的Index對象 |
.intersection(idx) |
計算交集 |
.union(idx) |
計算並集 |
.delete(loc) |
刪除loc位置處的元素 |
.insert(loc,e) |
在loc位置增加一個元素e |
.drop() |
刪除Series和DataFrame指定行或列索引 |
(4) 數據類型運算
算術運算根據行列索引,補齊後運算,運算默認產生浮點數,補齊時缺項填充NaN (空值)。二維和一維、一維和零維間為廣播運算。
方法 |
說明 |
.add(d, **argws) |
類型間加法運算,可選參數 |
.sub(d, **argws) |
類型間減法運算,可選參數 |
.mul(d, **argws) |
類型間乘法運算,可選參數 |
.div(d, **argws) |
類型間除法運算,可選參數 |
上述函數的axis參數默認為0,即在行方向上進行運算,改為1則在列的方向上進行運算。
(5) 統計運算
方法 |
說明 |
.sort_values(by,axis=0,ascending=True) |
在指定軸上根據數值進行排序,默認升序 |
.sum() |
計算數據的總和,按0軸計算,下同 |
.count() |
非NaN值的數量 |
.mean() .median() |
計算數據的算術平均值、算術中位數 |
.var() .std() |
計算數據的方差、標準差 |
.min() .max() |
計算數據的最小值、最大值 |
.argmin() .argmax() |
計算數據最大值、最小值所在位置的索引位置(自動索引) |
.idxmin() .idxmax() |
計算數據最大值、最小值所在位置的索引(自定義索引) |
.describe() |
針對0軸(各列)的統計匯總 |
.rolling(w).sum() |
依次計算相鄰w個元素的和 |
.cov() |
計算協方差矩陣 |
.corr() |
計算相關系數矩陣, Pearson、Spearman、Kendall等系數 |
本章來源
python 數據分析工具之 numpy pandas matplotlib