副标题[/!--empirenews.page--]
之前已经介绍的变量分析:
- ①相关分析:一个连续变量与一个连续变量间的关系。
- ②双样本t检验:一个二分分类变量与一个连续变量间的关系。
本次介绍:
- 方差分析:一个多分类分类变量与一个连续变量间的关系。
其中分类个数大于两个,分类变量也可以有多个。
当分类变量为多个时,对分类个数不做要求,,即可以为二分分类变量。
一、数理统计技术
数理统计分为频率和贝叶斯两大学派。
描述性统计分析,描述性分析就是从总体数据中提炼变量的主要信息,即统计量。
描述性分析的难点在于对业务的了解和对数据的寻找。
统计推断和统计建模,建立解释变量与被解释变量之间可解释的、稳定的、最好是具有因果关系的表达式。
在模型运用时,将解释变量(自变量)带入表达式中,用于预测被解释变量(因变量)的值。
现阶段,我学习的就是统计推断与建模的知识...
二、方差分析
方差分析用于检验多个样本的均值是否有显著差异。
探索多于两个分类的分类变量与连续变量的关系。
比如说「浅谈数据分析岗」中薪水与教育程度之间的关系,教育程度为一个多分类的分类变量。
01 单因素方差分析
单因素方差分析的前提条件:
- ①变量服从正态分布(薪水符合)。
- ②观测之间独立(教育程度符合)。
- ③需验证组间的方差是否相同,即方差齐性检验。
组间误差与组内误差、组间变异与组内变异、组间均方与组内均方都是方差分析中的衡量标准。
如果组间均方明显大于组内均方,则说明教育程度对薪水的影响显著。
那么需要大多少才能确定结论呢?
这里组间均方与组内均方的比值是服从F分布,下面贴出F分布曲线图。

其中横坐标为F值,即组间均方与组内均方的比值。
当F值越大时,即组间均方越大、组内均方越小,说明组间的变异大。
并且对应的P值也越小(纵轴),便可以拒绝原假设(原假设为无差异)。
下面以「浅谈数据分析岗」中薪水与教育程度为例。

这里我们只是直观的看出薪水随学历的增长而增长,并没有实实在在的东西。
接下来就用数字来说话!!!
代码如下,需要清洗数据。
- from scipy import stats
- import pandas as pd
- import pymysql
- # 获取数据库数据
- conn = pymysql.connect(host='localhost', user='root', password='774110919', port=3306, db='lagou_job', charset='utf8mb4')
- cursor = conn.cursor()
- sql = "select * from job"
- df = pd.read_sql(sql, conn)
- # 清洗数据,生成薪水列
- dom = []
- for i in df['job_salary']:
- i = ((float(i.split('-')[0].replace('k', '').replace('K', '')) + float(i.split('-')[1].replace('k', '').replace('K', ''))) / 2) * 1000
- dom.append(i)
- df['salary'] = dom
- # 去除无效列
- data = df[df.job_education != '不限']
- # 生成不同教育程度的薪水列表
- edu = []
- for i in ['大专', '本科', '硕士']:
- edu.append(data[data['job_education'] == i]['salary'])
- # 单因素方差分析
- print(stats.f_oneway(*edu))
- # 得到的结果
- F_onewayResult(statistic=15.558365658927576, pvalue=3.0547055604132536e-07)
得出结果,F值为15.5,P值接近于0,所以拒绝原假设,即教育程度会显著影响薪水。
02 多因素方差分析
多因素方差分析检验多个分类变量与一个连续变量的关系。
除了考虑分类变量对连续变量的影响,还需要考虑分类变量间的交互效应。
这里由于我的数据满足不了本次操作,所以选择书中的数据。
即探讨信用卡消费与性别、教育程度的关系。
首先考虑无交互效应,代码如下。
- import statsmodels.formula.api as smf
- import statsmodels.api as sm
- import pandas as pd
- # 读取数据,skipinitialspace:忽略分隔符后的空白,dropna:对缺失的数据进行删除
- df = pd.read_csv('creditcard_exp.csv', skipinitialspace=True)
- df = df.dropna(how='any')
- # smf:最小二乘法,构建线性回归模型,
- ana = smf.ols('avg_exp ~ C(edu_class) + C(gender)', data=df).fit()
- # anova_lm:多因素方差分析
- print(sm.stats.anova_lm(ana))
(编辑:好传媒网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|