一、Python數據分析與展示需要掌握的能力
數據表示
數據清洗
數據統計
數據展示
二、常用庫
numpy(ndarray)、matplotlib(pyplot)、pandas(Series、DateFrame)
三、編程工具
使用Anaconda IDE集成開發工具
需要理解和掌握的工具:conda、Spyder、IPython
四、Numpy入門
1、數據的維度
維度:一組數據的組織形式。
一維數據:由對等關系的有序或無序數據構成,采用線性方式組織,對應列表、數組、集合等概念。
二維數據:有多個一維數據構成,是一維數據的組合形式,表格是典型的的二維數據,其中,表頭是二維數據的一部分。
多維數據:由一維或二維在新維度上擴展形成。
高維數據:僅利用最基本的二元關系展示數據間的復雜結構,對應字典。
2、NumPy的數組對象:ndarray
介紹:NumPy是一個開源的Python科學計算庫,包括:
一個強大的N維數組對象 ndarray
廣播功能函數
整合C/C++/Fortran代碼的工具
線性代數、傅里葉變化、隨機數生成等功能。
NumPy是Scipy、Pandas等數據處理或科學計算庫的基礎
引用:
import numpy as np(建議使用上述約定的別名)
N維數組對象:ndarray
Python已有列表類型,為什么需要一個數組對象(類型)?
數組對象可以去掉元素間運算所需的循環,使一位向量更像單個數據;
設置專門的數組對象,經過優化,可以提升這類應用的運算速度。
N維數組對象的組成:實際數據、描述這些數據的元數據(數據維度、數據類型等)
ndarray數組一般要求所有元素類型相同(同質),數組下表從0開始。
ndarray在程序中的別名是:array,np.array()生成一個ndarray數組,np.array()輸出成[]形式,元素有空格分割
軸(axis):保存數據的維度;秩(rank):軸的數據
ndarray對象的屬性:
.ndim(秩,即軸的數量或維度的數量)
.shape(ndarray對象的尺度,對於矩陣,n行m列)
.size(ndarray對象元素的個數,相當於.shape 中n*m的值)
ndrray的元素類型:bool、intc(int32或int64)、intp(int32或int64)、int8、int16、int32、int64、uint8、uint16、uint32、uint64、float16、float32、float64、complex64、complex128
.dtype(ndarray對象的元素類型)
.itemsize(ndarray對象中每個元素的大小,以字節為單位)
ndarray數組的創建:
從Python中的列表、元組等類型創建ndarray數組;
使用NumPy中函數創建ndarray數組,如:
np.arange(n):類似range()函數,返回ndarray類型,元素從 0 到 n ‐ 1
np.ones(shape):根據shape生成一個全 1數組,shape是元組類型
np.zeros(shape):根據shape生成一個全 0數組,shape是元組類型
np.full(shape,val):根據shape生成一個數組,每個元素值都是val
np.eye(n):創建一個正方的n*n單位矩陣,對角線為 1,其余為 0
np.ones_like(a):根據數組 a的形狀生成一個全 1數組
np.zeros_like(a):根據數組 a的形狀生成一個全 0數組
np.full_like(a,val):根據數組 a的形狀生成一個數組,每個元素值都是val
np.linspace():根據起止數據等間距地填充數據,形成數組
np.concatenate():數組 np.concatenate() 將兩個或多個數組合並成一個新的數組
從字節流(raw bytes)中創建ndarray數組;
從文件中讀取特定格式,創建ndarray數組。
ndarray數組的變換:對於創建后的ndarray數組,可以對其進行維度變換和元素類型變換
a = np.ones((2,3,4), dtype=np.int32)
.reshape(shape):不改變數組元素,返回一個shape形狀的數組,原數組不變
.resize(shape):與.reshape()功能一致,但修改原數組
.swapaxes(ax1,ax2):將數組 n個維度中兩個維度進行調換
.flatten():對數組進行降維,返回折疊后的一維數組,原數組不變
.astype(new_type):ndarray數組的類型變換,astype()方法一定會創建新的數組(原始數據的一個拷貝),即使兩個類型一致
ndarray數組的索引和切片:
一維數組的索引和切片:與Python的列表類似
多維數組的索引和切換:每個維度的索引和切片使用逗號隔開
ndarray數組的運算:
數組與變量之間的運算:數組與標量之間的運算作用於數組的每一個元素
NumPy一元函數(對ndarray中的數據執行元素級運算的函數):
np.abs(x) np.fabs(x):計算數組各元素的絕對值
np.sqrt(x):計算數組各元素的平方根
np.square(x):計算數組各元素的平方
np.log(x) np.log10(x) np.log2(x):計算數組各元素的自然對數、10底對數和 2底對數
np.ceil(x) np.floor(x):計算數組各元素的ceiling值 或 floor 值
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對應元素
> < >= <= == !=:算術比較,產生布爾型數組
3、Numpy數據存取
數據的CSV文件存取:(CSV只能有效存儲一維和二維數組)
CSV:逗號分隔值
np.savetxt(frame, array, fmt="%.18e", delimiter=None)
frame:文件、字符串或產生器,可以是.gz或.bz2的壓縮文件
array:存入文件的數組
fmt:寫入文件的格式,例如:%d %.2f %.18e
delimiter:分割字符串,默認是任何空格(CSV文件是逗號)
np.loadtxt(frame, dtype=np.float,delimiter=None,unpacke=False)
frame:文件、字符串或產生器,可以是.gz或.bz2的壓縮文件
dtype:數據類型,可選
delimiter:分割字符串,默認是任何空格
unpack:如果True,讀入屬性將分別寫入不同變量
多維數據的存取:(下面的讀取方法需要知道存入文件時數組的維度和元素類型)
a.tofile(frame, sep='',format="%s")
frame:文件、字符串
sep:數據分割字符串,如果是空串,寫入文件為二進制
format:寫入數據的格式
np.fromfile(frame, dtype=float,count=-1,sep='')
frame:文件、字符串
dtype:讀取的數據類型
count:讀入元素個數,‐1表示讀入整個文件
sep:數據分割字符串,如果是空串,寫入文件為二進制
NumPy的便捷文件存取:(下面的方法會在第一行存儲數組的元信息,因而可以讀取成和存儲時一樣的數組)
np.save(fname, array) 或np.savez(fname, array)
frame:文件名,以.npy為擴展名,壓縮擴展名為.npz
array:數組變量
np.load(fname)
frame:文件名,以.npy為擴展名,壓縮擴展名為.npz
4、NumPy的隨機數函數(隨機數隨機出來的數據也是ndarray數組)
NumPy的隨機數函數子庫:np.random.*,例如:np.random.rand()、np.random.randn()、np.random.randint()
np.random的隨機數函數:
rand(d0,d1,...,dn):根據d0‐dn創建隨機數數組,浮點數,[0,1),均勻分布 ,d表示維度
randn(d0,d1,...,dn):根據d0‐dn創建隨機數數組,浮點數,[0,1),標准正態分布 ,d表示維度
seed(s):隨機數種子,s是給定的種子值,只要給定種子值,隨機出來的數組就是固定的
randint(low[,high,shape]):根據shape創建隨機整數或整數數組,范圍是[low, high)
shuffle(a):根據數組a的第1軸進行隨排列,改變數組x
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統計函數:
NumPy直接提供的統計類函數:np.std、np.var()、np.average()
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的梯度函數:
梯度:連續值之間的變化率,即斜率
XY坐標軸連續三個X坐標對應的Y軸值:a, b, c,其中,b的梯度是:(c‐a)/2
np.gradient(f):計算數組f中元素的梯度,當f為多維時,返回每個維度梯度