在建立机器学模型之前,我们常常会对我们所拥有的特征进行探索性因子分析,探索性因子分析可以分为单因子分析和多因子分析。单因子分析主要针对某一个特征进行分析,分析方法往往采用统计指标(均值,中位数,众数,偏度系数和峰度系数等)以及图形可视化分析;而多因子分析主要是针对两个或两个以上的特征做联合分析,分析方法有检验分析(如:T检验分析,方差分析,卡方检验分析)、相关性分析、主成分分析、因子分析等,本文主要是记录一些多因子分析方法.

1、假设检验

!

## 这是一个检验变量是否呈现正态分布的方法,基于偏度和峰度的检验方法。
import pandas as pd
import numpy as np
from scipy import stats
pts = 1000
np.random.seed(28041990)
a = np.random.normal(0, 1, size=pts) ##生成一个均值为0,标准差为1的1000个正太分布随机数
b = np.random.normal(2, 1, size=pts) ##生成一个均值为2,标准差为1的1000个正太分布随机数
x = np.concatenate((a, b)) ##合并这两个数组
k2, p = stats.normaltest(x) ##k2表示统计量的值,p为p值
alpha = 1e-3 ##阀值
print("p = {:g}".format(p))
p = 3.27207e-11
if p < alpha: # null hypothesis: x comes from a normal distributionprint("The null hypothesis can be rejected")
else:print("The null hypothesis cannot be rejected")

1.1 t检验

主要是用来检验两组分布是否具有一致性

import pandas as pd
import numpy as np
from scipy import stats as ss
ss.ttest_ind(ss.norm.rvs(size=10), ss.norm.rvs(size=20))
##out:Ttest_indResult(statistic=1.9250976356002707, pvalue=0.06443061130874687)
ss.ttest_ind(ss.norm.rvs(size=10), ss.norm.rvs(loc=1,scale=0.1,size=20))
## out:Ttest_indResult(statistic=-3.3034115592617534, pvalue=0.002617523871754732)

1.2 卡方检验

卡方检验,用称之为四格检验方法,主要是用来检验两个因素是否具有比较强的联系,如下:我们看一下性别与化妆与否是否具有关系,
H0:性别与化妆与否之间没有关系
H1:性别与化妆与否之间具有关系



卡方直129.3是大于显著性水平为0.05的卡方值3.841,所以应该拒绝原假设,接受备择假设,即性别与男女化妆与否之间有比较强的关系。

import pandas as pd
import numpy as np
from scipy import stats
k2,p,_,_ss.chi2_contingency([[15, 95], [85, 5]], False
out:k2=129.29292929292927,p=5.8513140262808924e-30

1.3方差检验


SST:总平方和或总变差平方和
SSM:组间平方和或平均平方平方和
SSE :组内平方和或残差平方和


F0:三种电池之间的平均寿命无差异
F1:三种电池之间平均寿命没有差异

p值小于显著性水平,拒绝原假设,即认为三种电池的平均寿命具有差异性。

from scipy import stats as ss
ss.f_oneway([49, 50, 39,40,43], [28, 32, 30,26,34], [38,40,45,42,48])

1.4 qq图

from statsmodels.graphics.api import qqplot
from matplotlib import pyplot as plt
qqplot(ss.norm.rvs(size=100))#QQ图
plt.show()


理论分位数值与样本分布正太分位数值在对角线上

2 相关系数

2.1 Pearson相关系数

s = pd.Series([0.1, 0.2, 1.1, 2.4, 1.3, 0.3, 0.5])
df = pd.DataFrame([[0.1, 0.2, 1.1, 2.4, 1.3, 0.3, 0.5], [0.5, 0.4, 1.2, 2.5, 1.1, 0.7, 0.1]])
#相关分析
print(s.corr(pd.Series([0.5, 0.4, 1.2, 2.5, 1.1, 0.7, 0.1])))
print(df.corr())

2.2 Spearman相关系数

import pandas as pd
df = pd.DataFrame([[0.1, 0.2, 1.1, 2.4, 1.3, 0.3, 0.5], [0.5, 0.4, 1.2, 2.5, 1.1, 0.7, 0.1]])
df.corr(method="spearman")

3 复合分析

3.1 交叉分析

(1)检验的方法,这里主要是利用HR_data.csv数据,观察部门之间员工离职率是否具有差异性。

##看部门两两之间离职率是否具有差异性,用t检验的方法。
import pandas as pd
import numpy as np
import scipy.stats as ss
import seaborn as sns
sns.set_context(context="poster",font_scale=1.2)
import matplotlib.pyplot as plt
df=pd.read_csv("./data/HR_data.csv")

dp_indices=df.groupby(by="department").indices
sales_values=df["left"].iloc[dp_indices["sales"]].values
technical_values=df["left"].iloc[dp_indices["technical"]].values
print(ss.ttest_ind(sales_values,technical_values))
dp_keys=list(dp_indices.keys())
dp_t_mat=np.zeros((len(dp_keys),len(dp_keys)))for i in range(len(dp_keys)):for j in range(len(dp_keys)):p_value=ss.ttest_ind(df["left"].iloc[dp_indices[dp_keys[i]]].values,\df["left"].iloc[dp_indices[dp_keys[j]]].values)[1]if p_value<0.05:dp_t_mat[i][j]=-1 ## 拒绝原假设,认为两个部门离职率有差异性else:dp_t_mat[i][j]=p_value  ##接受原假设
sns.heatmap(dp_t_mat,xticklabels=dp_keys,yticklabels=dp_keys)
plt.show()


如上图中黑色方框表示两个部门的离职具有差异性。
(2)透视表的方法

piv_tb=pd.pivot_table(df, values="left", index=["department", "salary"], columns=["time_spend_company"],aggfunc=np.mean)
#piv_tb=pd.pivot_table(df, values="left", index=["department", "salary"], columns=["time_spend_company"],aggfunc=np.sum)
#piv_tb=pd.pivot_table(df, values="left", index=["department", "salary"], columns=["time_spend_company"],aggfunc=len)


3.2 分组分析

(1) 离散值

sns.barplot(x="salary",y="left",hue="department",data=df)
plt.show()   #按照部门分组(图例)hue参数, salary为x轴

(2) 连续值先分组,在做聚合

根据
拐点(二街查分)、
聚类、
基尼系数
把连续值分类

sl_s=df["satisfaction_level"]
sns.barplot(range(len(sl_s)),sl_s.sort_values())

3.3 因子分析


(1)探索性因子分析
通过协方差矩阵,分析多元变量的本质结构,并可以转化、降维操作,得到空间中影响目标属性的最主要因子,例如主成分分析方法。

import pandas as pd
import numpy as np
import scipy.stats as ss
import seaborn as sns
sns.set_context(context="poster",font_scale=1.2)
import matplotlib.pyplot as plt
import math
from sklearn.decomposition import PCA
df=pd.read_csv("./data/HR.csv")
#相关图
sns.heatmap(df.corr())
sns.heatmap(df.corr(), vmax=1, vmin=-1)
plt.show()
#PCA降维
my_pca=PCA(n_components=7)
lower_mat=my_pca.fit_transform(df.drop(labels=["salary","department","left"],axis=1).values)
print(my_pca.explained_variance_ratio_)
#sns.heatmap(pd.DataFrame(lower_mat).corr())
#plt.show()


降维后的矩阵使得各个变量之间都是正交的,及相关系数为1.

(2)验证性因子分析
测试一个因子与相对应的测度项之间的关系是否符合研究者所设计的理论关系。

基统计的方法对进行多因子的探索性数据分析相关推荐

  1. 两种方法教你一行代码实现探索性数据分析报告

    Python数据分析

  2. python中采用字典建立统,Python中使用Counter进行字典创建以及key数量统计的方法...

    这里的Counter是指collections中的Counter,通过Counter可以实现字典的创建以及字典key出现频次的统计.然而,使用的时候还是有一点需要注意的小事项. 使用Counter创建 ...

  3. JSP中实现网页访问统计的方法

    JSP中实现网页访问统计的方法最近学习Jave EE 中的jsp网页开发,需要实现网页访问量的统计,刚开始不知道如何实现,后来问了一下老师,老师是这样回答我的:要实现网页访问的统计,你可以利用appl ...

  4. python如何统计字典里面健的数量_Python中使用Counter进行字典创建以及key数量统计的方法...

    Python中使用Counter进行字典创建以及key数量统计的方法 来源:中文源码网    浏览: 次    日期:2018年9月2日 Python中使用Counter进行字典创建以及key数量统计 ...

  5. 研究人员用数据统计的方法来做文学研究

    研究人员用数据统计的方法来做文学研究 大数据与文学,一个是理性工具,一个是感性思维,看起来似乎不沾边.但如今,二者的联系却日渐紧密起来,也由此引发了不少争议. 谁是最爱往外跑的诗人? 唐宋时期最爱往外 ...

  6. python对excel表统计视频教程_Python实现对excel文件列表值进行统计的方法

    本文实例讲述了Python实现对excel文件列表值进行统计的方法.分享给大家供大家参考.具体如下: #!/usr/bin/env python #coding=gbk #此PY用来统计一个execl ...

  7. php fpm 统计,php实现fpm开启状态统计的方法

    这篇文章主要给大家介绍了php-fpm开启状态统计的方法,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧. 本文主要给大家介绍了关于php-fpm开启状态统计的相关内容 ...

  8. 用python编excel统计表_Python实现对excel文件列表值进行统计的方法

    本文实例讲述了Python实现对excel文件列表值进行统计的方法.分享给大家供大家参考.具体如下: #!/usr/bin/env python #coding=gbk #此PY用来统计一个execl ...

  9. 继承(四):new方法都与基类中方法无关

    using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace Inher ...

  10. 通过在Global.asax文件中配置Application来统计的方法

    这是通过在Global.asax文件中配置Application来统计的方法...... using System; using System.Collections; using System.Co ...

最新文章

  1. java dom4j 去除空行_如何从XML文件中删除多余的空行?
  2. 青岛互联网java开发_为什么说Java是过去未来的互联网编程(上)
  3. [z]IE6各种不兼容问题
  4. python3.6.3安装过程_python3.6.3安装图文教程 TensorFlow安装配置方法
  5. Spring Cloud教程– Spring Cloud Config Server简介
  6. 山西大学计算机应用专业,山西大学计算机应用技术专业
  7. WSFC真实场景仲裁处理
  8. python2.7手机版下载_Python 2.7 64位2.7.13 安装版 下载 - 51下载网
  9. 【totti】一道weblogic认证考题所想到的
  10. jquery概述_jQuery事件方法概述
  11. 毫米波雷达的点云形式与分辨能力详解!
  12. 中文转拼音【真正的完整版】 拼音 驼峰命名专用
  13. 微信小程序——计算从今天到某天间隔多少天
  14. [Python]网络爬虫( 连载:大牛汪海 )
  15. python实际应用2-拆分PDF
  16. 百度AI开放平台[Python]
  17. 停车场无感支付中的“黑科技
  18. 关于Oracle 级联操作
  19. V8 工作原理之编译器和解释器
  20. (转)任正非对新员工的寄语:烧不死的就是凤凰

热门文章

  1. Wpa_supplicant 调试故障原因分析
  2. python调用短信api接口实现验证码发送
  3. PYTHON对接验证码短信接口DEMO示例
  4. win10支持8t 硬盘_详解win10硬盘如何直接安装
  5. 怎样把doc转换成jpg
  6. 3D打印机的精度差异在哪里
  7. qt设置进程开机自启动
  8. 使用Vundle管理配置Vim的插件
  9. oracle节假日,oracle 产生节假日表
  10. 渗透函数实现排序的函数层次聚类或者叫做凝