1. 程式人生 > >Python資料分析利器——numpy簡單教學

Python資料分析利器——numpy簡單教學

numpy是python下的一個第三方資料庫,提供了高效能矩陣運算能力(別問我多高,我也不知道!反正就是高!!),它是大資料、機器學習、影象處理等熱門方向的基礎,是資料分析的一把利器!!!

注意:不知道為什麼,下面程式碼開頭可能有這樣一段程式碼:<span style="font-size:14px;">。請大家忽略掉這段程式碼,直接看他後面的。我並不知道CSDN的程式碼為什麼會包含這個。。。給大家帶來的不便,十分抱歉。

一、安裝與匯入

numpy不是python自帶的庫,所以使用前要先安裝。像安裝其他的第三方庫一樣,使用pip可以快速,方便,無汙染的完成:

sudo pip install numpy
如果是windows系統或沒有安裝pip的同學可以先去自行查詢一下,pip這個利器是python學習中很必要的(我覺得很必要啦!!),它使安裝第三方庫變得十分方便。

匯入:按照慣例,使用前要將庫匯入:

import numpy as np
我們習慣性的將numpy重新命名為np,這樣我們在使用時直接用np就可以了(不要問我為什麼這樣做,我也不知道。。)

二、numpy操作

由於我上面也已經說到了,numpy是專門用來計算矩陣的,所以它的基本都是圍繞著array(陣列)轉的!

1、陣列建立

利用array方法可以創建出各種各樣的陣列,並且創建出的陣列也有許多的屬性,常用的有一下幾種:

①dtype:檢視陣列資料型別。

②ndim:顯示陣列維度。

③size:顯示資料量(行*列)

④shape:顯示資料行數與列數。

示範程式碼:

  1. import numpy as np
  2. array_1dim = np.array([1,2,3])
  3. print array_1dim
  4. array_2dim = np.array([[1,2,3],[4,5,6],[5,6,7], [7,8,9]])
  5. print array_2dim
  6. print array_2dim.ndim
  7. print array_2dim.dtype
  8. print array_2dim.shape
  9. print array_2dim.size
細心的你可能已經發現了,這樣建立陣列真是麻煩到了爆炸!!我要是建立一個1-10000的矩陣,我估計得建立到明天天  亮了!!所以,接下來為大家隆重介紹,numpy中的迭代器——arange。它與python中的迭代器range使用方法基本一樣:
  1. array_arange = np.array(np.arange(1,10,2))
  2. print array_arange
可以看到,其引數同樣為:start、end、step。

這樣我們就可以快速創建出一個一維陣列,在搭配上reshape(n, m)方法,可以將一維陣列轉化為n*m型陣列。如:

  1. array_arange = np.array(np.arange(1,10)).reshape(3,3)
  2. print array_arange
這樣,我們就快速建立了3*3的一個二維陣列。

除了arange以外,linspace(start, end, ave_num)為我們提供了建立均分型陣列的方法:

  1. array_linspace = np.array(np.linspace(1,10, 9)).reshape(3,3)
  2. print array_linspace
其中,start為開始值,end為結束值(注意:end也會包含在內),ave_num為將start與end之間的數平均分的份數。

除此以外,還有一些快速建立某一型別的矩陣的方法,常用的有一下幾種:

①np.zeros((n, m)):建立一個n*m的全零陣列。

②np.ones((n, m)):建立一個n*m的全1陣列。

③np.eye(n):建立一個n*n的僅對角線為1的陣列。

④np.empty((n, m)):建立一個無線接近0的陣列。(別看他是empty就以為是空,其實打印出來你就會發現並不是)

2、陣列訪問

numpy陣列與python的列表有些相似,也可以利用切片對陣列進行訪問。示例如下: ①data[1:3]:訪問陣列中1-2行中的元素。 ②data[1:3, 2:4]:訪問1-2行與2-3列之間交叉的元素。 ③data[:, 1:3]:訪問1-2列的元素。 ④data[[1, 3], [2, 3]]:訪問data[1, 2]與data[3, 3]兩個值。 numpy中若使用算數表示式或判斷表示式,則返回一個布林矩陣,如:data > 10的結果便是布林矩陣,因此有以下操作: ①data[data > 10]:可以快速得到data陣列中所有大於10的元素。 ②data[data % 2 == 0]:找到data陣列中所有的偶數。

3、陣列本身與陣列間的運算

numpy中對陣列本身的運算常用的有以下幾種(以下例項假設陣列名稱為data):

①data.sum()/ data**2:求陣列中所有元素的和/ 求陣列的平方。 ②data.mean()/ median():求陣列中所有元素的平均值/ 中位數。 ③data.min()/ max():求陣列所有元素的最小值/ 最大值。 ④data.sort():對陣列進行排序 data.cumsum():求陣列中元素的累加和。 data.diff():求陣列中元素的累差。即當前元素減掉前一個元素的差。 ⑦data.flatten()/ data[:, np.newaxis]:得到陣列中所有元素組成的一維陣列/ 增加一維陣列一個維度,實現豎向輸出。 ⑧np.sin()/ cos()/ tan():直接進行三角函式計算。 ⑨np.nonzero():方法會分別輸出所有不為0元素的行所組成的一維陣列與列所組成的一維陣列。 ⑩np.clip(array, a_min, a_max):將陣列a中小於a_min的值都變為a_min;大於a_max的值變為a_max。

numpy中陣列之間的運算常用的有以下幾種(以下例項假設陣列名稱分別為X和Y):

①陣列之間可以用+,-,*,/四則運算,均是陣列中對應的數之間的運算。注意:除法時要先轉化陣列格式為float:  X=np.array(x, dtype=float) ②X.T/np.transpose(X):求X陣列的轉置。 ③X.dot(Y)或np.dot(X, Y):求陣列X與陣列Y的內積。 ④np.vstack((X, Y)):上下合併兩個陣列。 ⑤np.hstack((X, Y)):水平合併兩個陣列,即將後面陣列元素補到前面陣列對應行的後面。 ⑥np.concatenate():多數組合並,其中axis=0代表上下合併,axis=1為水平合併。

4、陣列的分割

等分分割: np.split(array, n, axis):對目標array等分分割,若不能均分,則會報錯。axis為0代表對行分割,1代表對列分割。 np.vsplit(array,n)/np.hsplit(array,n):均分為n份,vsplit代表對行分割,hsplit代表對列分割。 不等分分割: np.array_split(array, n, axis):基本與np.split()用法相同,只是在不能等分時候不會報錯,會按照一定進行規則分割。

5、陣列的遍歷

行遍歷:
for row in data:
列遍歷(利用轉置實現列遍歷):
for column in data.T:
所有元素遍歷:
for item in data.flat:

6、淺拷貝與深拷貝

淺拷貝:用=實現賦值即為淺拷貝,如:b=a。這時如果只對a更改,b也會隨之相應更改。此時a既是b,b既是a。 深拷貝:利用copy方法實現深拷貝,如:b=a.copy(),此時對a更改,b將不會有任何改變。 numpy的基本用法大概就是這些了,有啥問題可以隨時在下面留言與我交流哈。拜了個拜!!!