天天看点

卡方值计算-python代码

#特征处理
import pandas as pd
import numpy as np
import scipy
from scipy.stats import chi2
from pandas import DataFrame,Series

# #消除向量中除以0的警告
np.seterr(divide='ignore',invalid='ignore')

def chi3(arr):
    '''
    计算卡方值
    arr:统计表,二维numpy数组
    '''
    # Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常
    assert(arr.ndim==2)
    R_N=arr.sum(axis=1)
    C_N=arr.sum(axis=0)
    N=arr.sum()
    # 计算期望频数
    E=np.ones(arr.shape)*C_N/N
    E=(E.T*R_N).T
    square=(arr-E)**2/E
    square[E==0]=0
    v=square.sum()
    return