Python數據分析教程(一):Numpy

首發鏈接://blog.onefly.top/posts/13140.html

數據的緯度

一維數據:列表和集合類型

image-20220920000246375

二維數據:列表類型

image-20220920000614787

多維數據:列表類型

image-20220920000624135

高維數據:字典類型或數據表示格式,如jsonxmlyaml

image-20220920000633571

image-20220920000317372

維度:一組數據的組織形式

image-20220920000405613

列表和數組一組數據的有序結構

image-20220920000443292

Numpy

Numpy介紹

  • NumPy是一個開源的Python科學計算基礎庫,包含:

    • 一個強大的N維數組對象ndarray

    • 廣播功能函數

    • 整合C/C++/Fortran代碼的工具

    • 線性代數、傅里葉變換、隨機數生成等功能

  • NumPy是SciPy、Pandas等數據處理或科學計算庫的基礎

模塊導入:

import numpy as np

N維數組對象:ndarray

  • 數組對象可以去掉元素間運算所需的循環,使一維向量更像單個數據

  • 設置專門的數組對象,經過優化,可以提升這類應用的運算速度————科學計算中,一個維度所有數據的類型往往相同

  • 數組對象採用相同的數據類型,有助於節省運算和存儲空間

image-20220920001443033

ndarray實例

  • ndarray是一個多維數組對象,由兩部分構成:
    • 實際的數據
    • 描述這些數據的元數據(數據維度、數據類型等)
  • ndarray數組一般要求所有元素類型相同(同質),數組下標從0開始

image-20220920001541323

ndarray對象的屬性

#屬性&說明
.ndim #秩,即軸的數量或維度的數量
.shape #ndarray對象的尺度,對於矩陣,n行m列
.size #ndarray對象元素的個數,相當於.shape中n*m的值
.dtype #ndarray對象的元素類型
.itemsize #ndarray對象中每個元素的大小,以位元組為單位

image-20220920002131705

ndarray的元素類型

image-20220920002043543

image-20220920002048182

ndarray數組的創建方法

  • 從Python中的列表、元組等類型創建ndarray數組
  • 使用NumPy中函數創建ndarray數組,如:arange, ones, zeros等
  • 從位元組流(raw bytes)中創建ndarray數組
  • 從文件中讀取特定格式,創建ndarray數組

通過列表創建ndarray:

image-20220920002305119

使用函數創建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() #對數組進行降維,返回摺疊後的一維數組,原數組不變

image-20220920002941145

數組的索引和切片

  • 索引:獲取數組中特定位置元素的過程
  • 切片:獲取數組元素子集的過程

一維數組的索引和切片

image-20220920003059529

多維數組索引

image-20220920003137231

多維數組切片

image-20220920003157843

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格式:

image-20220920004238551

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)

image-20220920005640033

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