一、常用統計量
數理統計學中常用的統計量有:樣本均值、樣本方差、順序統計量、中位數、衆數等。
其中可以反映總體位置特徵的有數據的中心位置是均值(Mean),中位數(Median),衆數(Mode)。其中均值和中位數用於定量的數據,衆數用於定性的數據。
隨機抽取了78位同學的語文成績如下:
grades=[131,131,127,123,126,129,116,114,115,116,123,122,118, ,126,121,126,121,111,119,124,124,121,116,114,116,116,118,112,109,114,116,116,118,112,109,114,110,114,110,113,117,113,121,105,127,110,105,111,112,104,103,130,102,118,101,112,109,107,94,107,106,105,101,85,95, 97,99,83,87,82,79,99,90,78,86,75,66]
Python代碼
numpy模塊
import numpy as np
arr=[131,131,127,123,126,129,116,114,115,116,123,122,118,
121,126,121,126,121,111,119,124,124,121,116,114,116,
116,118,112,109,114,116,116,118,112,109,114,110,114,
110,113,117,113,121,105,127,110,105,111,112,104,103,
130,102,118,101,112,109,107,94,107,106,105,101,85,95,
97,99,83,87,82,79,99,90,78,86,75,66];
np.sum(arr) #求和
np.mean(arr) #求平均值
np.std(arr) #求標準差
np.var(arr) #求方差
np.min(arr) #最小值
np.max(arr) #最大值
np.argmax(arr) #最大值下標,有多個時返回第一個最值下標
np.argmin(arr) #最小值下標
np.median(arr) #求中位數
pandas模塊
import pandas as pd
arr=[131,131,127,123,126,129,116,114,115,116,123,122,118,
121,126,121,126,121,111,119,124,124,121,116,114,116,
116,118,112,109,114,116,116,118,112,109,114,110,114,
110,113,117,113,121,105,127,110,105,111,112,104,103,
130,102,118,101,112,109,107,94,107,106,105,101,85,95,
97,99,83,87,82,79,99,90,78,86,75,66];
d=pd.Series(arr)
d.count() #非空元素計算
d.min() #最小值
d.max() #最大值
d.idxmin() #最小值的位置,類似於R中的which.min函數
d.idxmax() #最大值的位置,類似於R中的which.max函數
d.quantile(0.1) #10%分位數
d.sum() #求和
d.mean() #均值
d.median() #中位數
d.mode() #衆數
d.var() #方差
d.std() #標準差
d.mad() #平均絕對偏差
d.skew() #偏度
d.kurt() #峯度
d.describe() #一次性輸出多個描述性統計指標
二、經驗分佈函數
選取某屆女生的身高數據,繪製該屆女生身高數據的經驗分佈函數圖,將該屆學生身高與其所在年齡段女生身高做對比,從而判斷該屆女生身高是否符合標準
1. 數據源
選取某專業本科班31名女生的身高數據爲本實踐的數據源,具體數據如下:160,160,163,160,168,155,160,169,156,165,163,153,160,168,159,170,162,166,155,165,163,155,172,170,162,153,173,158,165,160.
2.繪製經驗分佈函數圖
#導入所需數據包
import numpy as np #將numpy命名爲np
import matplotlib.pyplot as plt #將matplotlib.pyplot命名爲plt
from matplotlib import mlab #從matplotlib調用mlab
from matplotlib import rcParams #從matplotlib調用 rcParams
rates = [0,6,8,9,4,4]; #身高數對應的頻數
mids=[151,155,159,163,167,171]; #身高樣本值
# 繪製經驗分佈函數圖
rates1=[0,0,0,0,0,0]; #設置rates的初值
for i in range(len(rates)): #形成從i到rates的長度的列表
rates1[i] =sum(rates[0:i+1])/31.0; #將本組的頻數與以上所有頻數迭代相加
rates1
fig3=plt.figure(3) #畫出圖3身高的經驗分佈圖
rects=plt.bar(x=mids,height=rates1,width=4,align="center",yerr=0.000001)
由以上圖形顯示,這些女生的身高主要分佈在158-165釐米之間。
3.與總體分佈函數的對比分析
經過計算得到這部分女生的平均身高爲157cm,方差爲851,下面驗證這些女生是否來自於均值爲157cm,方差爲851的正態總體。
利用Python產生均值爲157cm方差爲851的正態分佈的隨機數,並繪製該隨機數的經驗分佈函數,然後與這些女生身高的經驗分佈函數做對比。
#正態分佈總體隨機數的經驗分佈函數圖
import numpy as np #將numpy命名爲np
import matplotlib.pyplot as plt #將matplotlib.pyplot命名爲plt
from matplotlib import mlab #從matplotlib調用mlab
from matplotlib import rcParams #從matplotlib調用 rcParams
rates1=[0,0,0,0,0,0];
for i in range(len(rates)):
rates1[i] =sum(rates[0:i+1])/31.0;
rates1
fig1=plt.figure(1)
rects=plt.bar(x=mids,height=rates1,width=4,align="center",yerr=0.000001)
4.經驗分佈函數圖形的對比結果
#將兩經驗分佈函數圖進行對比
import numpy as np #將numpy命名爲np
import matplotlib.pyplot as plt #將matplotlib.pyplot命名爲plt
from matplotlib import mlab #從matplotlib調用mlab
from matplotlib import rcParams #從matplotlib調用 rcParams
rates = [0,0,0,19,12,0]; #身高數對應的頻數
mids=[128,138,148,158,168,178]; #身高數
# 繪製經驗分佈函數圖
rates3=[0,0,0,0,0,0]; #設置rates的初值
for i in range(len(rates)): #形成從i到rates的長度的列表
rates3[i] =sum(rates[0:i+1])/31.0; #將本組的頻數與以上所有頻數迭代相加
rates3
rates2 = [0,3,6,9,8,5];
mids2=[130,140,150,160,170,180];
rates4=[0,0,0,0,0,0];
for i in range(len(rates2)):
rates4[i] =sum(rates2[0:i+1])/31.0;
rates4
fig3=plt.figure(3) #畫出圖3身高的經驗分佈圖
rects=plt.bar(x=mids,height=rates3,width=10,align="center",yerr=0.000001)
rects=plt.bar(x=mids,height=rates4,width=10,align="center",yerr=0.000001)
由其上圖所示,發現這些女生身高的經驗分佈函數與正態總體經驗分佈函數擬合效果較好,可以這些女生身高看作來自於均值爲157方差爲851的正態分佈。