Python:3個常用數據檢驗代碼實現

常規庫導入

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")
pd.options.display.max_columns = None #顯示所有列
pd.set_option('display.float_format', lambda x: '%.2f' % x) #取消科學計數法

數據檢驗的針對功能

在這裏插入圖片描述

一、卡方檢驗(離散+離散)

定義: 卡方檢驗就是統計樣本的實際觀測值與理論推斷值之間的偏離程度,實際觀測值與理論推斷值之間的偏離程度就決定卡方值的大小,如果卡方值越大,二者偏差程度越大;反之,二者偏差越小;若兩個值完全相等時,卡方值就爲0,表明理論值完全符合。
詳細說明:
https://www.jianshu.com/p/807b2c2bfd9b
https://blog.csdn.net/qq_38214903/article/details/82967812
在這裏插入圖片描述
其中,Ai爲i水平的觀察頻數,Ei爲i水平的期望頻數,n爲總頻數,pi爲i水平的期望頻率。i水平的期望頻數Ei等於總頻數n×i水平的期望概率pi,k爲單元格數。當n比較大時,χ2統計量近似服從k-1(計算Ei時用到的參數個數)個自由度的卡方分佈。

例: “借款人年齡”(分箱後)與“預測是否會出現財務危機”之間的關係(選取30到80歲)
假設:年齡和財務危機沒有關係

from scipy.stats import chi2_contingency

train_data = pd.read_csv('cs-training.csv')
age_range = list(range(30,81,10))
train_data = train_data[(train_data['age']>=30) & (train_data['age']<=80)]
# train_data['age'].value_counts()
train_data['age_cut1'] = pd.cut(train_data['age'], age_range, include_lowest=True, right=False)
age_cut_pivot = train_data.pivot_table(index='age_cut1', columns='SeriousDlqin2yrs', values='CustomerID', aggfunc='count')
age_cut_pivot

在這裏插入圖片描述

aa = age_cut_pivot.as_matrix() #將dataframe轉成ndarray
kf = chi2_contingency(aa)
print('chisq-statistic=%.4f, p-value=%.4f, df=%i expected_frep=%s'%kf) 

在這裏插入圖片描述
第一個是卡方值,第二個是P值,第三個是自由度,第四個是與原數據數組同維度的對應理論值
說明: P值是0<0.05,故拒絕原假設,也就是年齡和財務危機存在關係的

二、ANOVA檢驗(離散+連續)

定義: 方差分析(Analysis of Variance,簡稱ANOVA),又稱“變異數分析”,是R.A.Fisher發明的,用於兩個及兩個以上樣本均數差別的顯著性檢驗。 由於各種因素的影響,研究所得的數據呈現波動狀。造成波動的原因可分成兩類,一是不可控的隨機因素,另一是研究中施加的對結果形成影響的可控因素。
詳細說明:
https://www.jianshu.com/p/59cf0337c4d9
https://www.jianshu.com/p/41ac20a83198
https://zhuanlan.zhihu.com/p/57896471
在這裏插入圖片描述
例:同1,但不對年齡分箱

import statsmodels.stats.anova as anova
from statsmodels.formula.api import ols

print(anova.anova_lm(ols('{}~SeriousDlqin2yrs'.format('age'),train_data).fit()))

在這裏插入圖片描述

三、相關係數

定義: 相關關係是一種非確定性的關係,相關係數是研究變量之間線性相關程度的量。我這裏用的是皮爾森相關係數。
詳細說明:
https://blog.csdn.net/zzh1301051836/article/details/82217676
https://www.cnblogs.com/chulin/p/9927591.html
https://blog.csdn.net/Zhangjunjie789/article/details/51737366
在這裏插入圖片描述
例:各特徵值之間的相關係數

train_data[['RevolvingUtilizationOfUnsecuredLines', 'age', 'NumberOfTime30-59DaysPastDueNotWorse', 'DebtRatio', 'MonthlyIncome',
           'NumberOfOpenCreditLinesAndLoans', 'NumberOfTimes90DaysLate', 'NumberRealEstateLoansOrLines', 'NumberOfTime60-89DaysPastDueNotWorse',
           'NumberOfDependents']].corr() #默認用的是皮爾森相關係數

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章