Python數據分析教程(一):Numpy
首發鏈接://blog.onefly.top/posts/13140.html
數據的緯度
一維數據:列表和集合類型
二維數據:列表類型
多維數據:列表類型
高維數據:字典類型或數據表示格式,如json
、xml
、yaml
維度:一組數據的組織形式
列表和數組:一組數據的有序結構
Numpy
Numpy介紹
-
NumPy是一個開源的Python科學計算基礎庫,包含:
-
一個強大的N維數組對象ndarray
-
廣播功能函數
-
整合C/C++/Fortran代碼的工具
-
線性代數、傅里葉變換、隨機數生成等功能
-
-
NumPy是SciPy、Pandas等數據處理或科學計算庫的基礎
模塊導入:
import numpy as np
N維數組對象:ndarray
-
數組對象可以去掉元素間運算所需的循環,使一維向量更像單個數據
-
設置專門的數組對象,經過優化,可以提升這類應用的運算速度————科學計算中,一個維度所有數據的類型往往相同
-
數組對象採用相同的數據類型,有助於節省運算和存儲空間
ndarray實例
- ndarray是一個多維數組對象,由兩部分構成:
- 實際的數據
- 描述這些數據的元數據(數據維度、數據類型等)
- ndarray數組一般要求所有元素類型相同(同質),數組下標從0開始
ndarray對象的屬性
#屬性&說明
.ndim #秩,即軸的數量或維度的數量
.shape #ndarray對象的尺度,對於矩陣,n行m列
.size #ndarray對象元素的個數,相當於.shape中n*m的值
.dtype #ndarray對象的元素類型
.itemsize #ndarray對象中每個元素的大小,以位元組為單位
ndarray的元素類型
ndarray數組的創建方法
- 從Python中的列表、元組等類型創建ndarray數組
- 使用NumPy中函數創建ndarray數組,如:arange, ones, zeros等
- 從位元組流(raw bytes)中創建ndarray數組
- 從文件中讀取特定格式,創建ndarray數組
通過列表創建ndarray:
使用函數創建ndarray:
#函數&說明
np.arange(n) #類似range()函數,返回ndarray類型,元素從0到n-1
np.ones(shape) #根據shapes生成一個全l數組,shape是元組類型
np.zeros(shape) #根據shape生成一個全數組,shape是元組類型
np.full(shape,val) #根據shape:生成一個數組,每個元素值都是val
np.eye(n) #創建一個正方的n*n單位矩陣,對角線為1,其餘為0
ndarray數組的變換:
對於創建後的ndarray數組,可以對其進行維度變換和元素類型變換
#方法&說明
.reshape(shape) #不改變數組元素,返回一個shape形狀的數組,原數組不變
.resize(shape) #與.reshape()功能一致,但修改原數組
.swapaxes(ax1,ax2) #將數組n個維度中兩個維度進行調換
.flatten() #對數組進行降維,返回摺疊後的一維數組,原數組不變
數組的索引和切片
- 索引:獲取數組中特定位置元素的過程
- 切片:獲取數組元素子集的過程
一維數組的索引和切片
多維數組索引
多維數組切片
ndarray數組的運算
NumPy一元函數:
#函數&說明
np.abs(x)
np.fabs(x)#計算數組各元素的絕對值
np.sqrt(x)#計算數組各元素的平方根
np.square(x)#計算數組各元素的平方
np.log(x)
np.1og10(x)
np.1og2(x)#計算數組各元素的自然對數、10底對數和2底對數
np.ceil(x)
np.floor(x)#計算數組各元素的ceiling值或f1oor值
np.rint(x)#計算數組各元素的四捨五入值
np.modf(x)#將數組各元素的小數和整數部分以兩個獨立數組形式返回
np.cos(x)np.cosh(x)
np.sin(x)np.sinh(x)#計算數組各元素的普通型和雙曲型三角函數
np.tan(x)np.tanh(x)
np.exp(x)#計算數組各元素的指數值
np.sign(x)#計算數組各元素的符號值,1(+),0,-1(-)
NumPy二元函數:
#函數&說明
+ - * / ** #兩個數組各元素進行對應運算
np.maximum(x,y)
np.fmax()
np.minimum(x,y)
np.fmin() #元素級的最大值/最小值計算
np.mod(x,y) #元素級的模運算
np.copysign(x,y) #將數組y中各元素值的符號賦值給數組x對應元素
>< >= <= == != #算術比較,產生布爾型數組
Numpy數據存取:
csv格式:
np.savetxt(frame,array,fmt='%.18e',delimiter=None)
- frame:文件、字符串或產生器,可以是.gz或.bz2的壓縮文件
- array:存入文件的數組
- fmt:寫入文件的格式,例如:%d%.2f%.18e
- delimiter:分割字符串,默認是任何空格
其他:
np.loadtxt(frame,dtype=np.float,delimiter=None,
unpack=False)
- frame:文件、字符串或產生器,可以是.gz或.bz2的壓縮文件
- dtype:數據類型,可選
- delimiter:分割字符串,默認是任何空格
- unpack:如果True,讀入屬性將分別寫入不同變量
其他:
a.tofile(frame, sep='', format='%s')
np.fromfile(frame, dtype=float, count=‐1, sep='')
numpy隨機數函數子庫:
np.random.*
#函數&說明
rand(d0,d1,..,dn) #根據d0-dn創建隨機數數組,浮點數,[0,1),均勻分佈
randn(d0,d1,..,dn) #根據d0-dn創建隨機數數組,標準正態分佈
randint(low[,high,shape]) #根據shapet創建隨機整數或整數數組,範圍是[low,high)
seed(s) #隨機數種子,s是給定的種子值
shuffle(a) #根據數組a的第1軸進行隨排列,改變數組×
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形狀
numpy統計函數:
np.*
#函數&說明
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中元素的中位數(中值)
numpy替換函數:
- np.where(condition, x, y) ——滿足條件(condition),輸出x,不滿足輸出y。
- 只有條件 (condition),沒有x和y,則輸出滿足條件 (即非0) 元素的坐標 (等價於numpy.nonzero)
numpy數據存取
CSV文件
np.loadtxt()
np.savetxt()
多維數據存取
a.tofile()
np.fromfile()
np.save()
np.savez()
np.load()
隨機函數
np.random.rand()
np.random.randn()
np.random.randint()
np.random.seed()
np.random.shuffle()
np.random.permutation()
np.random.choice()
原創作者:孤飛-博客園
原文鏈接://ranxi2001.github.io/posts/13140.html