---
# System prepended metadata

title: 'Numpy #4 統計運算'
tags: [python, 資料分析, numpy]

---

# Numpy #4 統計運算

### 極值、排序

一個一個元素比較，回傳指定值，可能可容忍不同形狀
np.maximum(a,b) 最大值
np.minimum(a,b) 最小值 有nan就回傳nan

np.fmax(a,b) 最大值
np.fmin(a,b) 最小值，兩個nan才會回傳nan

np.nanmax(a) 該陣列最大值
np.nanmin(a) 該陣列最小值，忽略nan
 亦可指定軸項比較axis=n（預設none）
 以及是否保留維度keepdims=（預設<no value>）
 全部都是nan會出錯


np.percentile(a,分位數q) 百分位數，有nan就會回傳nan
np.nanpercentile(a,分位數q) 百分位數，忽略nan
*以上百分位數0~100之間
np.quantile(a,分位數q) 分位數，有nan就會回傳nan
np.nanquantile(a,分位數q) 分位數，忽略nan
*以上分位數0~1之間
若想一次知道很多分位數，q也可以用一維陣列表示
 可指定軸項比較axis=n（預設None）
 可指定是否保留維度keepdims=（預設<no value>）

### 一維數據分析
（以下有nan表示忽略nan，沒有表示有nan就回傳nan）

np.mean(a)
np.nanmean(a) 平均數
np.median(a)
np.nanmedian(a) 中位數
 可指定軸項比較axis=n（預設None）
 平均數可指定型態dtype=（預設None，即整數就用float64，浮點數就用輸入的型態）
 可指定是否保留維度keepdims=（預設<no value>）
np.average(a) 平均數，可以輸入權重 
 可指定軸項比較axis=n（預設None）
 可指定權重weight=[...]（預設None）

np.std(a)
np.nanstd(a) 標準差
np.var(a)
np.nanvar(a) 變異數
 可指定軸項比較axis=n（預設None）
 可指定型態dtype=（預設None，即整數就用float64，浮點數就用輸入的型態）
 可指定自由度ddof=（預設0，樣本標準差/變異數的話就是1）
 可指定是否保留維度keepdims=（預設<no value>）
 
### 二維數據分析

np.corrcoef(a) 相關係數
 可指定另一組陣列y=（預設None）
 可指定型態dtype=（預設None，即整數就用float64，浮點數就用輸入的型態）
 可指定rowvar=（預設True，表示用每個row為一個變數）
輸出結果會是某個陣列，裡面的[a][b]代表兩行變數的相關係數
（因此[a][a]=1，[a][b]=[b][a]）

np.correlate(a, b) 互相關
 可指定mode=''（回傳序列形狀不同）
 valid：max(M, N)（預設）
 full：(N+M-1,)
 same：max(M, N) - min(M, N) + 1
 （N為第一序列a的元素數，M為第二序列的元素數）

np.cov(a) 共變異數
 可指定額外資料y=（預設None）
 可指定rowvar=（預設True，表示用每個row為一個變數）
 可指定bias=（預設False，表示樣本共變異數）
 可指定自由度ddof=（預設0）
 可指定頻率加權fweights=（預設None）
 可指定觀測向量加權aweights=（預設None）

### Hisrogram直方圖
主要是將資料分類計算個數，得到分佈圖／分佈關係
np.histogram(a, bins=k)
 k為分組方式，可以是auto、分組數、一維序列....
 可指定range=(預設是最大跟最小值)
 可指定weights=（預設None，要的話要跟a一樣尺寸）
 可指定density=（預設False，輸出次數；Ture則輸出相對次數(比例)）
 輸出會是一個二維陣列，包含count以及分組

np.unique(a) 
 可指定return_counts= （預設True）
 一樣會輸出二維陣列，包含count以及值，這裡比較是計算每個數值出現的次數，沒有分組功能

### 資料離散化
np.digitize(x, bins=k)
 k為一維陣列，代表資料要如何切，可遞增也可遞減
 可指定right=（宇社False代表包含右邊界不含右邊界，反之代表不包含右邊界（右邊界都是指比較大的那邊，不管是遞增還是遞減））
 輸出為一個陣列，代表各自被分到那一組 

 例如[1.2, 2.5, 7, 10.3] bins=[0,6,7,10,11] right=True
 會輸出[1, 1, 2, 4]
 （因為right=True所以7被分到6~7這組，也就是第二組）
 

###### tags: `資料分析` `numpy` `python` 