python-資料分析-Numpy-2

little小新發表於2024-06-09

陣列物件的方法應用

# -*- coding: utf-8 -*-
#陣列物件的方法
import matplotlib.pyplot as plt
import numpy

# 1、 獲取描述統計資訊
array1 = numpy.random.randint(1, 100, 10)
print(array1)   #隨機陣列   [64 84 10 52  3 66  4 31 79  7]

#計算總和、平均值、中位數
print(array1.sum())         #400
print(numpy.sum(array1))    #400
print(array1.mean())        #40.0
print(numpy.mean(array1))   #40.0   平均值
print(numpy.median(array1)) #41.5   中位數
print(numpy.quantile(array1, 0.5))  #41.5   分位數
#上面程式碼中的mean、median和quantile分別是 NumPy 中計算算術平均值、中位數和分位數的函式,其中quantitle函式的第二個引數設定為0.5表示計算50%分位數,也就是中位數。

print("-----------------------------------------")

#極值、全距和四分位距離
print(array1.max())
print(numpy.amax(array1))
print(array1.min())
print(numpy.amin(array1))
print(array1.ptp())             #ptp 函式計算陣列中的最大值和最小值之差
print(numpy.ptp(array1))
q1, q3 = numpy.quantile(array1, [0.25, 0.75])   #計算四分位距離、75%分位數減去25%分位數
print(q3 - q1)

print("-----------------------------------------")

#方差、標準差、變異係數
print(array1.var())
print(numpy.var(array1))    #方差
print(array1.std())
print(numpy.std(array1))    #標準差
print(array1.std() / array1.mean()) #變異係數、標準差除以平均值

繪製箱線圖

# 2、繪製箱線圖
#箱線圖又稱為盒須圖,是顯示一組資料分散情況的統計圖,因形狀如箱子而得名。 它主要用於反映原始資料分佈的特徵,還可以進行多組資料分佈特徵的比較。

plt.boxplot(array1, showmeans=True) #繪製箱線圖
plt.ylim([-20, 120])    #設定y軸範圍
plt.show()  #顯示圖形

python-資料分析-Numpy-2

值得注意的是,對於二維或更高維的陣列,在獲取描述統計資訊時,可以透過名為axis的引數指定均值、方差等運算是沿著哪一個軸來執行,axis引數不同,執行的結果可能是大相徑庭的,如下所示。

array2 = numpy.random.randint(60, 101, (5, 3))  #隨機陣列、5行3列
print(array2)

print(array2.mean())    #均值
print(array2.mean(axis=0))  #列平均值(每一列的平均值)  axis = 0:表示列
print(array2.mean(axis=1))  #行平均值(每一行的平均值)  axis = 1:表示行
print(array2.max(axis=0))
print(array2.max(axis=1))


#再看看繪製箱線圖,對於二維陣列每一列都會產生一個統計圖形,如下所示。
plt.boxplot(array2, showmeans=True)
plt.ylim([-20, 120])
plt.show()

說明:箱線圖中的小圓圈用來表示離群點,也就是大於$\small{Q_3 + 1.5 \times IQR}$或小於$\small{Q_1 - 1.5 \times IQR}$的值。公式中的常量1.5可以透過繪製箱線圖的boxplot函式的whis引數進行修改,常用的值是1.5和3,修改為3通常是為了標識出極度離群點。

python-資料分析-Numpy-2

需要說明的是,NumPy 的陣列物件並沒有提供計算幾何平均值、調和平均值、去尾平均值等的方法,如果有這方面的需求,可以使用名為 scipy 的三方庫,它的stats模組中提供了這些函式。此外,該模組還提供了計算眾數、變異係數、偏態、峰度的函式,程式碼如下所示。

from scipy import stats

print(numpy.mean(array1))                # 算術平均值
print(stats.gmean(array1))            # 幾何平均值
print(stats.hmean(array1))            # 調和平均值
print(stats.tmean(array1, [10, 90]))  # 去尾平均值
print(stats.variation(array1))        # 變異係數
print(stats.skew(array1))             # 偏態係數
print(stats.kurtosis(array1))         # 峰度係數

其它相關方法概述

all() / any()方法:判斷陣列是否所有元素都是True / 判斷陣列是否有為True的元素。
astype()方法:複製陣列,並將陣列中的元素轉換為指定的型別。
reshape()方法:調整陣列物件的形狀。
#dump()方法:儲存陣列到二進位制檔案中,可以透過 NumPy 中的load()函式從儲存的檔案中載入資料建立陣列。

array1.dump('array1-data')
# print(array1.dump('array1-data'))
array3 = numpy.load('array1-data', allow_pickle=True)
print(array3)

print("-----------------------------------------")

##tofile()方法:將陣列物件寫入檔案中。
print(array1.tofile('res/array.txt', sep=','))

#fill()方法:向陣列中填充指定的元素。

#flatten()方法:將多維陣列扁平化為一維陣列。
print(array2.flatten())

#nonzero()方法:返回非0元素的索引。

#round()方法:對陣列中的元素做四捨五入操作。

#sort()方法:對陣列進行就地排序。
print(array1)
print(numpy.sort(array1))

#swapaxes()和transpose()方法:交換陣列指定的軸和轉置。
print(array2.swapaxes(0, 1))    #交換陣列的維度、0和1表示行和列
print(array2.transpose())


#tolist()方法:將陣列轉成 Python 中的list。
print(array2.tolist())
print(type(array2.tolist()))

相關文章