天天看點

資料分析--NumPy的基本用法

一、NumPy簡介和安裝

二、NumPy型數組--ndarray簡介

三、NumPy型數組--ndarray的應用

四、NumPy型數組--ndarray資料類型

五、NumPy型數組--ndarray資料類型(NaN,INF)

六、NumPy型數組--ndarray的建立

6.1一維數組的建立

6.2多元數組的建立

七、NumPy型數組--ndarray的屬性

八、NumPy型數組--ndarray運算(加減乘除)

九、NumPy型數組--ndarray運算(函數)

十、NumPy型數組--ndarray篩選資料

10.1通過索引篩選資料

10.2 通過切片篩選資料

一、NumPy簡介和安裝

NumPy是高性能科學計算和資料分析的基礎包,是pandas等其他各種工具的基礎

安裝方法:

pip3 install numpy

引用方式:

import numpy as np

二、NumPy型數組--ndarray簡介

之前python中學過的類似數組類型有:清單,元祖

而在NumPy中,有專門的數組類型叫ndarray,可以由清單,元祖轉換而成。

ndarray,一個多元數組結構,高效且節省空間

無需循環對數組資料進行快速運算的數學函數

線性代數、随機數生成和傅裡葉變換功能

三、NumPy型數組--ndarray的應用

例如:已知若幹家跨國公司的市值(美元),将其轉換為人民币

a = [ramdom.uniform(1000.0, 2000.0), for i in range(50)]

dic = 6.8

a=np.array(a)

a*dic //得出結果

例如:已知購物車的商品價格和商品數量求商品總金額

price = [ramdom.uniform(100.0, 200.0), for i in range(50)]

quantity=[ramdom.randint(1,10), for i in range(50)]

price=np.array(price)

quantity=np.array(quantity)

price*quantity //每個商品總價 每一項分别相乘

price*quantity.sum() //所有商品總價

四、NumPy型數組--ndarray資料類型

數組對象内元素類型必須相同,數組大小不可更改

布爾型:bool_

字元型: str

整型:int_ int8 int16 int32 int64 //數字表示位

無符号整型:uint8 uint16 uint32 uint64 //隻表示0和正數

浮點:float_ float16 float32 float64

複數:complex_ complex64 complex128

五、NumPy型數組--ndarray資料類型(NaN,INF)

NAN:不是數字,不等于任何浮點數,也不等于自己 ,例如:0/0 sqrt(-1)

INF:無限大的float,比任何浮點數都大 np.inf==np.inf為真  例如: 5/0

怎樣判斷結果集b裡有沒有NAN?[nan,1.]

np.isnan(b) [True,False] # 判斷有沒有NAN

b[~(np.isnan(b))] # 删除NAN

怎樣過濾c中的INF?

c[c!=np.inf] 或 c[np.isinf(c)]

六、NumPy型數組--ndarray的建立

讀取檔案:

numpy.genfromtxt("word.txt", delimiter=",",  dtype=str,  skip_header=1)

6.1一維數組的建立

np.array([1,2,3,4,5])

np.array( [ramdom.uniform(100.0, 200.0), for i in range(50)] )  //由清單生成式轉換,産生50個100-200之間的随機浮點數

np.array(range(20))    //由疊代器轉換

np.zeros(10,dtype=np.int32)  //10個0,預設是float

np.zeros( (3,4) )  //3行4列的零

np.ones(10)         //10個1,預設是float

a=np.empty(100)   //随機值,之前記憶體的殘值。要确認以後會指派就用這個

np.arange(2,100,3)  //起始值,結束值,步長,步長可為小數

np.linspace(0,100,101)   //[起始值,結束值],個數。等差數列

NumPy随機數生成:

np.random.randint(0, 10, 30) #生成30個0~10範圍的數

np.random.randint(0, 10, (3,5,6)) # 生成三維數組(3,5,6)

np.random.rand(10) # 傳回10個0~1的數

np.random.choice([1,2,3,4,5], 10) # 傳回清單中的數,共10個

np.random.uniform(2.0, 4.0, 10) # 傳回10個2.0~4.0的浮點數,平均分布

6.2多元數組的建立

np.arange(15),reshape((3,5))   //15個數變成3行5列的二維數組

np.array([ [1,2,3], [4,5,6] ])     //二維數組"一張紙"

np.array([ [ [1,2,3], [4,5,6],[3,2,1],[6,5,4] ] , [ [1,2,3], [4,5,6],[3,2,1],[6,5,4] ] ])   //三維數組"一個本"

七、NumPy型數組--ndarray的屬性

a = np.array(range(20))

1、a.dtype    //檢視存的資料的類型

2、a.size     //檢視數組元素個數

3、a.shape   //傳回行列數:一維傳回(列數,) 二維傳回(行數,列數),三維傳回(厚度,行數,列數)

4、a.T         //行轉列

5、a.ndim   //檢視維數

6、資料類型轉換: a.astype( float )

八、NumPy型數組--ndarray運算(加減乘除)

向量:ndarray

标量:1,2,3,4等

ndarray可以和标量運算: +-*/><

ndarray可以和ndarray運算(長度一樣才行):+-*/><

九、NumPy型數組--ndarray運算(函數)

能同時對數組中所有元素進行運算

通用函數:

np.abs

np.sqrt

np.ceil 向上取整

np.floor 向下取整

np.round<==>np.rint 向外取整

np.trunc 向0取整

np.modf x,y=np.modf(a) x是小數部分,y是整數部分

多元數組轉一維數組:a.reval()

一維數組轉多元數組(6行2列):a.shape=(6,2)

np.vstack( (a,b) )  # a,b拼接,a,b的列數必須一樣,縱向拉長

np.hstack(a,b)  # a,b拼接,a,b的行數必須一樣,橫向拉長

np.hsplit(a,3)  # 按列切分隔3列切一刀,上面的逆操作

np.hsplit(a, (3,4) )  # 按列切分, (3,4)處切一刀

np.vsplit...   # 同理 ,按行切分

二進制函數:

np.maximum(a, b) # 一一對應取出最大的

np.minmum(a, b) # 一一對應取出最小的

求和:axis=0/1 按行或列求

a.sum(axis=0/1) # 對a中所有的求和

a.mean(axis=0/1) # 求平均值

a.var(axis=0/1) # 求方差 表示資料的離散程度,越高表示離散程度越高

a.std() # 求标準差。通過方差開方得到。

a.min(axis=0/1) # 傳回最小值

a.max(axis=0/1) # 傳回最大值

a.argmax(axis=0/1) # 傳回最大值的下标

a.argmin(axis=0/1) # 傳回最小值的下标

十、NumPy型數組--ndarray篩選資料

10.1通過索引篩選資料

ndarray普通索引:

  一維數組: a[0] a[1] a[2]

  二維數組:a[0][0]  a[0,0] 推薦第二種

ndarray布爾型索引:邏輯或/與

  例如:給一個數組,選出數組中所有大于5的數

    a=np.arange(10)

    a[a>5]

    原理://先執行a>5得到布爾數組,

    //布爾索引:把同樣大小的布爾數組傳進索引,這樣把a裡對應為True的傳回

  例如:選出數組中大于5的偶數

    a[(a>5) & (a%2==0)] //用&要加括号,不加報錯

    a[(a>5) | (a%2==0)] //邏輯或

ndarray花式索引:

  a = np.arange(20)

  例如:取出1,3,4,6,7位置的值

     b=[1,3,4,6,7]

     a[b]

10.2 通過切片篩選資料

ndarray切片 和 普通清單切片有什麼不同?

ndarray切片預設是原數組的引用,修改切片會導緻原數組修改

除非使用:a[0:4].copy()才複制一份

一維數組切片:

a[0:4:2] //開始位置,結束位置,步長

二維數組切片:

例如a=np.array([ [1,2,3], [4,5,6] ])

切1,2,4,5逗号左邊是行右邊是列

a[0:2,0:2]

二維數組

a[0, : ]  第一行切片

a[0: a[0]>2] 第一行大于2的

a[[1,3],:][:,[1,3]] 取1,3行中的1,3列