用python作數據分析第一個包numpy

主次主要講的是numpy的經常使用函數,就對於我而言numpy的主要做用是建立數組和隨機數和一些數學運算,處理數據由pandas去完成,畫圖也有其餘包好比matplotlib,seaborn 首先來講的是數組的建立,廢話很少說看代碼而後再來解釋 一 array的建立python

ar_1=np.array([1,2,3,4,5])
ar_2=np.array([[1],[2],[3]])
複製代碼

如圖所示,array的做用就是本身手動建立本身想要的數組,像C同樣去建立幾維的數組有本身決定。多維數組ndarray,數組的維度稱之爲秩(rank),好比一數組的秩爲1,二維數組的秩爲2 一次類推

二 array函數的基本用法數組

print(ar_2.ndim)#輸出數組秩的個數,結果爲2
print(ar_2.shape)#能夠理解爲輸出數組的形狀,ar_2輸出結果爲(3,1)
print(ar_2.size)#輸出數組元素的總數,ar_2的輸出結果爲3,(3*1=3)
print(ar_2.dtype)#輸出數組的數據類型,(注意,type()是函數,而dtype是numpy的一個方法)

複製代碼

三 array的不規則建立bash

ar3 = np.array([[1,2,3],('a','b','c')])   # 二維數組:嵌套序列(列表,元祖都可)
ar4 = np.array([[1,2,3],('a','b','c','d')])   # 注意嵌套序列數量不一會怎麼樣
複製代碼

array裏面的數據能夠是元祖數組生成器等等,可是要注意的是,當array兩個元祖或者數組的元素個數不同時,他是秩將會是一而不是二

四 利用arange()函數建立數組dom

print(np.arange(10))    # 返回0-9,整型
print(np.arange(10.0))  # 返回0.0-9.0,浮點型
print(np.arange(5,12))  # 返回5-11
print(np.arange(5.0,12,2))  # 返回5.0-12.0,步長爲2
複製代碼

看圖片能夠知道,當只給出一個參數時,生成的數從0開始 兩個參數則數左閉右開的數組範圍 三個參數時,第三個表明的是步長,也就是說在5到11這些數字中,當步長爲2時,他會開始數,第一個數字5,走兩步是7再走兩步是9一次類推

函數linspace,zeros,ones,eyes函數

#np.linspace在2-3之間等距離去10個數
ar0 = np.linspace(2.0, 3.0,10)
print(ar0)
#np.zeros()生成所有爲0的矩陣
ar1 = np.zeros(5)  
ar2 = np.zeros((2,2), dtype = np.int)
print(ar1,ar1.dtype)
print(ar2,ar2.dtype)
print('------')
#zeros_like()根據其餘數組的維度來建立0矩陣
ar3 = np.array([list(range(5)),list(range(5,10))])
ar4 = np.zeros_like(ar3)
print(ar4)
#np.ones跟zeros相似就不講了
ar5 = np.ones((3,3))#注意有兩個括號
ar7 = np.ones_like(ar3)
print(ar5)
print(ar7)
#建立對角矩陣
複製代碼

着幾個函數了解就行也不難記住

# 矩陣形狀的改變與轉置:.T/.reshape()/.resize()工具

# 數組形狀:.T/.reshape()/.resize()

ar2 = np.ones((5,2))
print(ar2,'\n',ar2.T)
# .T方法:轉置,例如原shape爲(3,4)/(2,3,4),轉置結果爲(4,3)/(4,3,2) → 因此一維數組轉置後結果不變

ar4 = np.zeros((4,6)).reshape(3,8)   # 用法2:生成數組後直接改變形狀
ar5 = np.reshape(np.arange(12),(3,4))   # 用法3:參數內添加數組,目標形狀
#reshape改變數組的形狀,可是要注意的是使用reshape矩陣的元素個數得相同

ar6 = np.resize(np.arange(5),(3,4))
print(ar6)
# numpy.resize(a, new_shape):返回具備指定形狀的新數組,若有必要可重複填充所需數量的元素。
# 注意了:.T/.reshape()/.resize()都是生成新的數組!!!
複製代碼

數組的拷貝(深複製和淺複製)ui

# 數組的深複製

ar1 = np.arange(10)
ar2 = ar1
print(ar2 is ar1)
ar1[2] = 9
print(ar1,ar2)
# 回憶python的賦值邏輯:指向內存中生成的一個值 → 這裏ar1和ar2指向同一個值,因此ar1改變,ar2一塊兒改變
# 數組的淺複製
ar3 = ar1.copy()
print(ar3 is ar1)
ar1[0] = 9
print(ar1,ar3)
# copy方法生成數組及其數據的完整拷貝
複製代碼

能夠看到直接複製的話兩個變量是指向同一個地址的,也就是說ar1,ar2任意一個數組改變都會使兩個變量一塊兒改變,輸出結構ar1 is ar2結構爲TRUE 。當使用copy()函數複製時,兩個建立了新的數組,也就是說這兩個數組的地址指向不一樣,因此兩個數組在物理地址上來講沒有任何關係,也就說他們兩個是互不影響的。

數組的簡單運算spa

#astype()
ar=np.arange(10)
ar.astype(np.float)
#轉換數組的數據類型

#數組要是整型或者浮點型,當數組進行運算時,全部的數字都會改變
print(ar+2)#結果爲[2,3,4,5,6,7,8,9,10,11]
print(ar-2)
print(ar*2)
print(ar/2)
print(ar**2)

print(ar.mean())  # 求平均值
print(ar.max())  # 求最大值
print(ar.min())  # 求最小值
print(ar.std())  # 求標準差std
print(ar.var())  # 求方差var
print(ar.sum(), np.sum(ar,axis = 0))  # 求和,np.sum() → axis爲0,按列求和;axis爲1,按行求和
print(np.sort(np.array([1,4,3,2,5,6])))  # 排序
複製代碼

切片的內容跟字符串切片的相似我就不講了3d

數組的堆疊與拆分code

水平堆疊

a = np.array([[1],[2],[3]])   # a爲二維數組,3行1列
b = np.array([['a'],['b'],['c']])  # b爲二維數組,3行1列
ar2 = np.hstack((a,b))  # 注意:((a,b)),這裏形狀必須同樣
#注意水平堆疊時,兩個數組的秩必須相同。可是覺得數組是例外,不同也能夠
複製代碼

垂直堆疊

a=np.arange(2,5)
b=np.arange(5,8)
ar1=np.vstack((a,b))
#兩個數組的秩必須相同,長度能夠不一樣
複製代碼

總結:在進行堆疊時,必須保證兩個數組的維度相同,水平堆疊時數組的形狀必須相同,豎直堆疊時,西航渡能夠不同

拆分

s=np.arange(16).reshape(4,4)
ar1=np.hspilt(s,4)
#水平拆分,注意拆分後爲list,也就是說numpy的函數,shape,等方法不可用

豎直拆分
ar2=np.vsplit(s,4)
#拆分後同樣爲list
複製代碼

隨機數的生成

隨機數的生成是進行數據分析的重要輔助工具,須要重點掌握

一:符合正太分佈的隨機數

ran=np.random.normal((4,4))
# 生成一個標準正太分佈的4*4樣本值

# randn
sample1=np.random.rand(10)
sample2=np.random.randn(10,4)
#生成一個符合正太分佈的樣本,參數裏面的數字是數組的形狀
複製代碼

二 符合均勻分佈的隨機數

#rand函數

a=np.random.rand()
b=np.random.rand(4)
c=np.random.rand(2,3)
#生成一個符合正太分佈的樣本,參數裏面的數字是數組的形狀

#randint函數

flag=np.random.randint(low=4,high=10,size=10)
#生成10個4-9之間的隨機數,符合均勻分佈,而且隨機數只能整型
#記住low的值不能大於high,
t=np.random.randint(3)
#生成一個0-2之間的隨機數

複製代碼

大概numpy比較經常使用的函數就在這裏啦,但願能幫到大家呀

要想本身熟悉使用必定要本身動手去作,可能別人寫代碼永遠都是別人的

相關文章
相關標籤/搜索