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