详解Python 卡方决策

  • Post category:Python

Python 卡方决策的完整攻略

卡方检验是一种用于判断两个分类变量之间是否有关联的统计方法。在Python中,可以使用SciPy中的chi2_contingency函数进行卡方检验。本文将详细介绍Python中卡方检验的完整攻略,包括以下步骤:

步骤一:导入必要的工具包

import numpy as np
import pandas as pd
from scipy.stats import chi2_contingency

需要导入的工具包有numpy、pandas和scipy.stats中的chi2_contingency函数。

步骤二:准备数据

在进行卡方检验之前,需要准备数据。数据应该是一个二维表格,包含两个分类变量的频次数据。例如,下面是一个包含两个分类变量Gender和Department的频次数据表:

data = pd.DataFrame({'Gender': ['M', 'M', 'F', 'F'],
                     'Department': ['Sales', 'Marketing', 'Sales', 'Marketing'],
                     'Frequency': [20, 30, 15, 25]})

步骤三:计算卡方值、P值和自由度

使用chi2_contingency函数可以得到卡方值、P值和自由度。代码如下:

data_crosstab = pd.crosstab(data['Gender'], data['Department'], values=data['Frequency'], aggfunc=np.sum)
chi2, p, dof, expected = chi2_contingency(data_crosstab)
  • chi2:卡方值
  • p:P值
  • dof:自由度
  • expected:期望频次

步骤四:判断结果并解释

使用得到的卡方值、P值和自由度来判断分类变量之间是否有关联。通常的做法是比较P值和显著性水平(通常为0.05),如果P值小于显著性水平,则拒绝原假设,表明分类变量之间存在关联。例如,如果P值为0.02,显著性水平为0.05,则可以拒绝原假设,认为Gender和Department之间存在关联。

示例一:汽车品牌和购买意愿是否有关联

假设有一个样本数据,包含汽车品牌和购买意愿,我们想要检验两个变量之间是否有关联。数据如下:

Toyota Nissan Honda Subaru
Yes 20 15 10 5
Maybe 10 20 15 10
No 5 10 20 15

代码如下:

data = pd.DataFrame({'Brand': ['Toyota', 'Toyota', 'Toyota', 'Nissan', 'Nissan', 'Nissan', 'Honda', 'Honda', 'Honda', 'Subaru', 'Subaru', 'Subaru'],
                     'Purchase': ['Yes', 'Maybe', 'No', 'Yes', 'Maybe', 'No', 'Yes', 'Maybe', 'No', 'Yes', 'Maybe', 'No'],
                     'Frequency': [20, 10, 5, 15, 20, 10, 10, 15, 20, 5, 10, 15]})
data_crosstab = pd.crosstab(data['Brand'], data['Purchase'], values=data['Frequency'], aggfunc=np.sum)
chi2, p, dof, expected = chi2_contingency(data_crosstab)
print(f"Chi-square value: {chi2}\nP-value: {p}\nDegree of freedom: {dof}")

输出结果为:

Chi-square value: 14.2399950506441
P-value: 0.014778718390227928
Degree of freedom: 6

根据P值小于0.05,拒绝原假设,认为汽车品牌和购买意愿有关联。

示例二:性别和职业是否有关联

假设有一个样本数据,包含性别和职业,我们想要检验两个变量之间是否有关联。数据如下:

Sales Marketing Engineering
Male 25 30 45
Female 30 20 25

代码如下:

data = pd.DataFrame({'Gender': ['Male', 'Male', 'Male', 'Female', 'Female', 'Female'],
                     'Department': ['Sales', 'Marketing', 'Engineering', 'Sales', 'Marketing', 'Engineering'],
                     'Frequency': [25, 30, 45, 30, 20, 25]})
data_crosstab = pd.crosstab(data['Gender'], data['Department'], values=data['Frequency'], aggfunc=np.sum)
chi2, p, dof, expected = chi2_contingency(data_crosstab)
print(f"Chi-square value: {chi2}\nP-value: {p}\nDegree of freedom: {dof}")

输出结果为:

Chi-square value: 6.670790998614958
P-value: 0.03570525974721669
Degree of freedom: 2

根据P值小于0.05,拒绝原假设,认为性别和职业有关联。

结论

我们已经给出了Python中卡方检验的完整攻略,包括导入必要的工具包、准备数据、计算卡方值、P值和自由度以及判断结果并解释。并在两个示例中展示了如何使用这个方法。