Python資料分析教學(一):Numpy

2022-09-20 18:02:48

本人原創首發連結:https://blog.onefly.top/posts/13140.html

資料的緯度

一維資料:列表和集合型別

二維資料:列表型別

多維資料:列表型別

高維資料:字典型別或資料表示格式,如jsonxmlyaml

維度:一組資料的組織形式

列表和陣列一組資料的有序結構

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()

原創作者:孤飛-部落格園
原文連結:https://ranxi2001.github.io/posts/13140.html