您好,登錄后才能下訂單哦!
這篇文章主要介紹了python統(tǒng)計(jì)分析的方法,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
1. 常用函數(shù)庫
scipy包中的stats模塊和statsmodels包是python常用的數(shù)據(jù)分析工具,scipy.stats以前有一個(gè)models子模塊,后來被移除了。這個(gè)模塊被重寫并成為了現(xiàn)在獨(dú)立的statsmodels包。
scipy的stats包含一些比較基本的工具,比如:t檢驗(yàn),正態(tài)性檢驗(yàn),卡方檢驗(yàn)之類,statsmodels提供了更為系統(tǒng)的統(tǒng)計(jì)模型,包括線性模型,時(shí)序分析,還包含數(shù)據(jù)集,做圖工具等等。
2. 小樣本數(shù)據(jù)的正態(tài)性檢驗(yàn)
(1) 用途
夏皮羅維爾克檢驗(yàn)法 (Shapiro-Wilk) 用于檢驗(yàn)參數(shù)提供的一組小樣本數(shù)據(jù)線是否符合正態(tài)分布,統(tǒng)計(jì)量越大則表示數(shù)據(jù)越符合正態(tài)分布,但是在非正態(tài)分布的小樣本數(shù)據(jù)中也經(jīng)常會(huì)出現(xiàn)較大的W值。需要查表來估計(jì)其概率。由于原假設(shè)是其符合正態(tài)分布,所以當(dāng)P值小于指定顯著水平時(shí)表示其不符合正態(tài)分布。
正態(tài)性檢驗(yàn)是數(shù)據(jù)分析的第一步,數(shù)據(jù)是否符合正態(tài)性決定了后續(xù)使用不同的分析和預(yù)測(cè)方法,當(dāng)數(shù)據(jù)不符合正態(tài)性分布時(shí),我們可以通過不同的轉(zhuǎn)換方法把非正太態(tài)數(shù)據(jù)轉(zhuǎn)換成正態(tài)分布后再使用相應(yīng)的統(tǒng)計(jì)方法進(jìn)行下一步操作。
(2) 示例
from scipy import stats import numpy as np np.random.seed(12345678) x = stats.norm.rvs(loc=5, scale=10, size=80) # loc為均值,scale為方差 print(stats.shapiro(x)) 運(yùn)行結(jié)果: (0.9654011726379395, 0.029035290703177452)
(3) 結(jié)果分析
返回結(jié)果 p-value=0.029035290703177452,比指定的顯著水平(一般為5%)小,則拒絕假設(shè):x不服從正態(tài)分布。
3. 檢驗(yàn)樣本是否服務(wù)某一分布
(1) 用途
科爾莫戈羅夫檢驗(yàn)(Kolmogorov-Smirnov test),檢驗(yàn)樣本數(shù)據(jù)是否服從某一分布,僅適用于連續(xù)分布的檢驗(yàn)。下例中用它檢驗(yàn)正態(tài)分布。
(2) 示例
from scipy import stats import numpy as np np.random.seed(12345678) x = stats.norm.rvs(loc=0, scale=1, size=300) print(stats.kstest(x,'norm')) 運(yùn)行結(jié)果: KstestResult(statistic=0.0315638260778347, pvalue=0.9260909172362317)
(3) 結(jié)果分析
生成300個(gè)服從N(0,1)標(biāo)準(zhǔn)正態(tài)分布的隨機(jī)數(shù),在使用k-s檢驗(yàn)該數(shù)據(jù)是否服從正態(tài)分布,提出假設(shè):x從正態(tài)分布。最終返回的結(jié)果,p-value=0.9260909172362317,比指定的顯著水平(一般為5%)大,則我們不能拒絕假設(shè):x服從正態(tài)分布。這并不是說x服從正態(tài)分布一定是正確的,而是說沒有充分的證據(jù)證明x不服從正態(tài)分布。因此我們的假設(shè)被接受,認(rèn)為x服從正態(tài)分布。如果p-value小于我們指定的顯著性水平,則我們可以肯定的拒絕提出的假設(shè),認(rèn)為x肯定不服從正態(tài)分布,這個(gè)拒絕是絕對(duì)正確的。
4.方差齊性檢驗(yàn)
(1) 用途
方差反映了一組數(shù)據(jù)與其平均值的偏離程度,方差齊性檢驗(yàn)用以檢驗(yàn)兩組或多組數(shù)據(jù)與其均值偏離程度是否存在差異,也是很多檢驗(yàn)和算法的先決條件。
(2) 示例
from scipy import stats import numpy as np np.random.seed(12345678) rvs1 = stats.norm.rvs(loc=5,scale=10,size=500) rvs2 = stats.norm.rvs(loc=25,scale=9,size=500) print(stats.levene(rvs1, rvs2)) 運(yùn)行結(jié)果: LeveneResult(statistic=1.6939963163060798, pvalue=0.19337536323599344)
(3) 結(jié)果分析
返回結(jié)果 p-value=0.19337536323599344, 比指定的顯著水平(假設(shè)為5%)大,認(rèn)為兩組數(shù)據(jù)具有方差齊性。
5. 圖形描述相關(guān)性
(1) 用途
最常用的兩變量相關(guān)性分析,是用作圖描述相關(guān)性,圖的橫軸是一個(gè)變量,縱軸是另一變量,畫散點(diǎn)圖,從圖中可以直觀地看到相關(guān)性的方向和強(qiáng)弱,線性正相關(guān)一般形成由左下到右上的圖形;負(fù)相關(guān)則是從左上到右下的圖形,還有一些非線性相關(guān)也能從圖中觀察到。
(2) 示例
import statsmodels.api as sm import matplotlib.pyplot as plt data = sm.datasets.ccard.load_pandas().data plt.scatter(data['INCOMESQ'], data['INCOME'])
(3) 結(jié)果分析
從圖中可以看到明顯的正相關(guān)趨勢(shì)。
6. 正態(tài)資料的相關(guān)分析
(1) 用途
皮爾森相關(guān)系數(shù)(Pearson correlation coefficient)是反應(yīng)倆變量之間線性相關(guān)程度的統(tǒng)計(jì)量,用它來分析正態(tài)分布的兩個(gè)連續(xù)型變量之間的相關(guān)性。常用于分析自變量之間,以及自變量和因變量之間的相關(guān)性。
(2) 示例
from scipy import stats import numpy as np np.random.seed(12345678) a = np.random.normal(0,1,100) b = np.random.normal(2,2,100) print(stats.pearsonr(a, b)) 運(yùn)行結(jié)果: (-0.034173596625908326, 0.73571128614545933)
(3) 結(jié)果分析
返回結(jié)果的第一個(gè)值為相關(guān)系數(shù)表示線性相關(guān)程度,其取值范圍在[-1,1],絕對(duì)值越接近1,說明兩個(gè)變量的相關(guān)性越強(qiáng),絕對(duì)值越接近0說明兩個(gè)變量的相關(guān)性越差。當(dāng)兩個(gè)變量完全不相關(guān)時(shí)相關(guān)系數(shù)為0。第二個(gè)值為p-value,統(tǒng)計(jì)學(xué)上,一般當(dāng)p-value<0.05時(shí),可以認(rèn)為兩變量存在相關(guān)性。
7. 非正態(tài)資料的相關(guān)分析
(1) 用途
斯皮爾曼等級(jí)相關(guān)系數(shù)(Spearman’s correlation coefficient for ranked data ),它主要用于評(píng)價(jià)順序變量間的線性相關(guān)關(guān)系,在計(jì)算過程中,只考慮變量值的順序(rank, 秩或稱等級(jí)),而不考慮變量值的大小。常用于計(jì)算類型變量的相關(guān)性。
(2) 示例
from scipy import stats import numpy as np print(stats.spearmanr([1,2,3,4,5], [5,6,7,8,7])) 運(yùn)行結(jié)果: SpearmanrResult(correlation=0.82078268166812329,pvalue=0.088587005313543812)
(3) 結(jié)果分析
返回結(jié)果的第一個(gè)值為相關(guān)系數(shù)表示線性相關(guān)程度,本例中correlation趨近于1表示正相關(guān)。第二個(gè)值為p-value,p-value越小,表示相關(guān)程度越顯著。
8. 單樣本T檢驗(yàn)
(1) 用途
單樣本T檢驗(yàn),用于檢驗(yàn)數(shù)據(jù)是否來自一致均值的總體,T檢驗(yàn)主要是以均值為核心的檢驗(yàn)。注意以下幾種T檢驗(yàn)都是雙側(cè)T檢驗(yàn)。
(2) 示例
from scipy import stats import numpy as np np.random.seed(12345678) rvs = stats.norm.rvs(loc=5, scale=10, size=(100,2)) print(stats.ttest_1samp(rvs, [1, 5])) 運(yùn)行結(jié)果: Ttest_1sampResult(statistic=array([ 5.12435977, 1.07927393]), pvalue=array([1.47820719e-06,2.83088106e-01]))
(3) 結(jié)果分析
本例中生成了2列100行的數(shù)組,ttest_1samp的第二個(gè)參數(shù)是分別對(duì)兩列估計(jì)的均值,p-value返回結(jié)果,第一列1.47820719e-06比指定的顯著水平(一般為5%)小,認(rèn)為差異顯著,拒絕假設(shè);第二列2.83088106e-01大于指定顯著水平,不能拒絕假設(shè):服從正態(tài)分布。
9. 兩獨(dú)立樣本T檢驗(yàn)
(1) 用途
有于比較兩組數(shù)據(jù)是否來自于同一正態(tài)分布的總體。注意:如果要比較的兩組數(shù)據(jù)不滿足方差齊性, 需要在ttest_ind()函數(shù)中添加參數(shù)equal_var = False。
(2) 示例
from scipy import stats import numpy as np np.random.seed(12345678) rvs1 = stats.norm.rvs(loc=5,scale=10,size=500) rvs2 = stats.norm.rvs(loc=6,scale=10,size=500) print(stats.ttest_ind(rvs1,rvs2)) 運(yùn)行結(jié)果: Ttest_indResult(statistic=-1.3022440006355476, pvalue=0.19313343989106416)
(3) 結(jié)果分析
返回結(jié)果的第一個(gè)值為統(tǒng)計(jì)量,第二個(gè)值為p-value,pvalue=0.19313343989106416,比指定的顯著水平(一般為5%)大,不能拒絕假設(shè),兩組數(shù)據(jù)來自于同一總結(jié),兩組數(shù)據(jù)之間無差異。
10. 配對(duì)樣本T檢驗(yàn)
(1) 用途
配對(duì)樣本T檢驗(yàn)可視為單樣本T檢驗(yàn)的擴(kuò)展,檢驗(yàn)的對(duì)象由一群來自正態(tài)分布獨(dú)立樣本更改為二群配對(duì)樣本觀測(cè)值之差。它常用于比較同一受試對(duì)象處理的前后差異,或者按照某一條件進(jìn)行兩兩配對(duì)分別給與不同處理的受試對(duì)象之間是否存在差異。
(2) 示例
from scipy import stats import numpy as np np.random.seed(12345678) rvs1 = stats.norm.rvs(loc=5,scale=10,size=500) rvs2 = (stats.norm.rvs(loc=5,scale=10,size=500) + stats.norm.rvs(scale=0.2,size=500)) print(stats.ttest_rel(rvs1,rvs2)) 運(yùn)行結(jié)果: Ttest_relResult(statistic=0.24101764965300979, pvalue=0.80964043445811551)
(3) 結(jié)果分析
返回結(jié)果的第一個(gè)值為統(tǒng)計(jì)量,第二個(gè)值為p-value,pvalue=0.80964043445811551,比指定的顯著水平(一般為5%)大,不能拒絕假設(shè)。
11. 單因素方差分析
(1) 用途
方差分析(Analysis of Variance,簡(jiǎn)稱ANOVA),又稱F檢驗(yàn),用于兩個(gè)及兩個(gè)以上樣本均數(shù)差別的顯著性檢驗(yàn)。方差分析主要是考慮各組之間的均數(shù)差別。
單因素方差分析(One-wayAnova),是檢驗(yàn)由單一因素影響的多組樣本某因變量的均值是否有顯著差異。
當(dāng)因變量Y是數(shù)值型,自變量X是分類值,通常的做法是按X的類別把實(shí)例成分幾組,分析Y值在X的不同分組中是否存在差異。
(2) 示例
from scipy import stats a = [47,56,46,56,48,48,57,56,45,57] # 分組1 b = [87,85,99,85,79,81,82,78,85,91] # 分組2 c = [29,31,36,27,29,30,29,36,36,33] # 分組3 print(stats.f_oneway(a,b,c)) # 運(yùn)行結(jié)果:F_onewayResult(statistic=287.74898314933193, pvalue=6.2231520821576832e-19)
(3) 結(jié)果分析
返回結(jié)果的第一個(gè)值為統(tǒng)計(jì)量,由組間差異除以組間差異得到,上例中組間差異很大,第二個(gè)返回值p-value=6.2231520821576832e-19小于邊界值(一般為0.05),拒絕原假設(shè), 即認(rèn)為以上三組數(shù)據(jù)存在統(tǒng)計(jì)學(xué)差異,并不能判斷是哪兩組之間存在差異 。只有兩組數(shù)據(jù)時(shí),效果同 stats.levene 一樣。
12. 多因素方差分析
(1) 用途
當(dāng)有兩個(gè)或者兩個(gè)以上自變量對(duì)因變量產(chǎn)生影響時(shí),可以用多因素方差分析的方法來進(jìn)行分析。它不僅要考慮每個(gè)因素的主效應(yīng),還要考慮因素之間的交互效應(yīng)。
(2) 示例
from statsmodels.formula.api import ols from statsmodels.stats.anova import anova_lm import pandas as pd X1 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2] X2 = [1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2] Y = [76,78,76,76,76,74,74,76,76,55,65,90,65,90,65,90,90,79,70,90, 88,76,76,76,56,76,76,98,88,78,65,67,67,87,78,56, 54,56,54,56] data = {'T':X1, 'G':X2, 'L':Y} df = pd.DataFrame(data) formula = 'L~T+G+T:G' # 公式 model = ols(formula,df).fit() print(anova_lm(model)) ''' 運(yùn)行結(jié)果: df sum_sq mean_sq F PR(>F) T 1.0 265.225 265.225000 2.444407 0.126693 G 1.0 207.025 207.025000 1.908016 0.175698 T:G 1.0 1050.625 1050.625000 9.682932 0.003631 Residual 36.0 3906.100 108.502778 NaN NaN '''
(3) 結(jié)果分析
上述程序定義了公式,公式中,"~"用于隔離因變量和自變量,”+“用于分隔各個(gè)自變量, ":"表示兩個(gè)自變量交互影響。從返回結(jié)果的P值可以看出,X1和X2的值組間差異不大,而組合后的T:G的組間有明顯差異。
13. 卡方檢驗(yàn)
(1) 用途
上面介紹的T檢驗(yàn)是參數(shù)檢驗(yàn),卡方檢驗(yàn)是一種非參數(shù)檢驗(yàn)方法。相對(duì)來說,非參數(shù)檢驗(yàn)對(duì)數(shù)據(jù)分布的要求比較寬松,并且也不要求太大數(shù)據(jù)量??ǚ綑z驗(yàn)是一種對(duì)計(jì)數(shù)資料的假設(shè)檢驗(yàn)方法,主要是比較理論頻數(shù)和實(shí)際頻數(shù)的吻合程度。常用于特征選擇,比如,檢驗(yàn)?zāi)腥撕团嗽谑欠窕加懈哐獕荷嫌袩o區(qū)別,如果有區(qū)別,則說明性別與是否患有高血壓有關(guān),在后續(xù)分析時(shí)就需要把性別這個(gè)分類變量放入模型訓(xùn)練。
基本數(shù)據(jù)有R行C列, 故通稱RC列聯(lián)表(contingency table), 簡(jiǎn)稱RC表,它是觀測(cè)數(shù)據(jù)按兩個(gè)或更多屬性(定性變量)分類時(shí)所列出的頻數(shù)表。
(2) 示例
import numpy as np import pandas as pd from scipy.stats import chi2_contingency np.random.seed(12345678) data = np.random.randint(2, size=(40, 3)) # 2個(gè)分類,50個(gè)實(shí)例,3個(gè)特征 data = pd.DataFrame(data, columns=['A', 'B', 'C']) contingency = pd.crosstab(data['A'], data['B']) # 建立列聯(lián)表 print(chi2_contingency(contingency)) # 卡方檢驗(yàn) ''' 運(yùn)行結(jié)果: (0.36556036556036503, 0.54543425102570975, 1, array([[ 10.45, 8.55],[ 11.55, 9.45]]))'''
(3) 結(jié)果分析
卡方檢驗(yàn)函數(shù)的參數(shù)是列聯(lián)表中的頻數(shù),返回結(jié)果第一個(gè)值為統(tǒng)計(jì)量值,第二個(gè)結(jié)果為p-value值,p-value=0.54543425102570975,比指定的顯著水平(一般5%)大,不能拒絕原假設(shè),即相關(guān)性不顯著。第三個(gè)結(jié)果是自由度,第四個(gè)結(jié)果的數(shù)組是列聯(lián)表的期望值分布。
14. 單變量統(tǒng)計(jì)分析
(1) 用途
單變量統(tǒng)計(jì)描述是數(shù)據(jù)分析中最簡(jiǎn)單的形式,其中被分析的數(shù)據(jù)只包含一個(gè)變量,不處理原因或關(guān)系。單變量分析的主要目的是通過對(duì)數(shù)據(jù)的統(tǒng)計(jì)描述了解當(dāng)前數(shù)據(jù)的基本情況,并找出數(shù)據(jù)的分布模型。
單變量數(shù)據(jù)統(tǒng)計(jì)描述從集中趨勢(shì)上看,指標(biāo)有:均值,中位數(shù),分位數(shù),眾數(shù);從離散程度上看,指標(biāo)有:極差、四分位數(shù)、方差、標(biāo)準(zhǔn)差、協(xié)方差、變異系數(shù),從分布上看,有偏度,峰度等。需要考慮的還有極大值,極小值(數(shù)值型變量)和頻數(shù),構(gòu)成比(分類或等級(jí)變量)。
此外,還可以用統(tǒng)計(jì)圖直觀展示數(shù)據(jù)分布特征,如:柱狀圖、正方圖、箱式圖、頻率多邊形和餅狀圖。
15. 多元線性回歸
(1) 用途
多元線性回歸模型(multivariable linear regression model ),因變量Y(計(jì)量資料)往往受到多個(gè)變量X的影響,多元線性回歸模型用于計(jì)算各個(gè)自變量對(duì)因變量的影響程度,可以認(rèn)為是對(duì)多維空間中的點(diǎn)做線性擬合。
(2) 示例
import statsmodels.api as sm data = sm.datasets.ccard.load_pandas().data model = sm.OLS(endog = data['AVGEXP'], exog = data[['AGE','INCOME','INCOMESQ','OWNRENT']]).fit() print(model.summary()) ''' 運(yùn)行結(jié)果: OLS Regression Results ============================================================================== Dep. Variable: AVGEXP R-squared: 0.543 Model: OLS Adj. R-squared: 0.516 Method: Least Squares F-statistic: 20.22 Date: Thu, 31 Jan 2019 Prob (F-statistic): 5.24e-11 Time: 15:11:29 Log-Likelihood: -507.24 No. Observations: 72 AIC: 1022. Df Residuals: 68 BIC: 1032. Df Model: 4 Covariance Type: nonrobust ============================================================================== coef std err t P>|t| [0.025 0.975] ------------------------------------------------------------------------------ AGE -6.8112 4.551 -1.497 0.139 -15.892 2.270 INCOME 175.8245 63.743 2.758 0.007 48.628 303.021 INCOMESQ -9.7235 6.030 -1.613 0.111 -21.756 2.309 OWNRENT 54.7496 80.044 0.684 0.496 -104.977 214.476 ============================================================================== Omnibus: 76.325 Durbin-Watson: 1.692 Prob(Omnibus): 0.000 Jarque-Bera (JB): 649.447 Skew: 3.194 Prob(JB): 9.42e-142 Kurtosis: 16.255 Cond. No. 87.5 ============================================================================== '''
(3) 結(jié)果分析
直接通過返回結(jié)果中各變量的P值與0.05比較,來判定對(duì)應(yīng)的解釋變量的顯著性,P<0.05則認(rèn)為自變量具有統(tǒng)計(jì)學(xué)意義,從上例中可以看到收入INCOME最有顯著性。
16. 邏輯回歸
(1) 用途
當(dāng)因變量Y為2分類變量(或多分類變量時(shí))可以用相應(yīng)的logistic回歸分析各個(gè)自變量對(duì)因變量的影響程度。
(2) 示例
import statsmodels.api as sm data = sm.datasets.ccard.load_pandas().data data['OWNRENT'] = data['OWNRENT'].astype(int) model = sm.Logit(endog = data['OWNRENT'], exog = data[['AVGEXP','AGE','INCOME','INCOMESQ']]).fit() print(model.summary()) ''' 運(yùn)行結(jié)果: Optimization terminated successfully. Current function value: 0.504920 Iterations 8 Logit Regression Results ============================================================================== Dep. Variable: OWNRENT No. Observations: 72 Model: Logit Df Residuals: 68 Method: MLE Df Model: 3 Date: Fri, 01 Feb 2019 Pseudo R-squ.: 0.2368 Time: 17:05:47 Log-Likelihood: -36.354 converged: True LL-Null: -47.633 LLR p-value: 4.995e-05 ============================================================================== coef std err z P>|z| [0.025 0.975] ------------------------------------------------------------------------------ AVGEXP 0.0002 0.001 0.228 0.820 -0.002 0.002 AGE 0.0853 0.042 2.021 0.043 0.003 0.168 INCOME -2.5798 0.822 -3.137 0.002 -4.191 -0.968 INCOMESQ 0.4243 0.126 3.381 0.001 0.178 0.670 ============================================================================== '''
(3) 結(jié)果分析
直接通過返回結(jié)果中各變量的P值與0.05比較,來判定對(duì)應(yīng)的解釋變量的顯著性,P<0.05則認(rèn)為自變量具有統(tǒng)計(jì)學(xué)意義。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享python統(tǒng)計(jì)分析的方法內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問題就找億速云,詳細(xì)的解決方法等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。