大家好!今天给大家带来一个非常简单、实用的统计方法——因子分析,这个方法适用面非常广,无论商科、工科、理科都能用来研究分析。一起来看看吧!

因子分析目录

  • 第一部分:安装factor_analyzer包
  • 第二部分:导入数据
  • 第三部分:建立因子分析模型
  • 第四部分:计算各个城市得分
  • 获取代码

什么是因子分析?用来做什么?
因子分析法(factor analysis)的核心是对若干综合指标进行因子分析并提取公共因子,再以每个因子的方差贡献率作为权数与该因子的得分乘数之和构造得分函数。

第一部分:安装factor_analyzer包

系统解释器: pip install factor_analyzer;
conda-jupyter:conda install -c desilinguist factor_analyzer;

conda install -c desilinguist factor_analyzer


加载后续所需的包

import pandas as pd
import numpy as np
from pandas import DataFrame,Series
from factor_analyzer import FactorAnalyzer, Rotator

说明:
FactorAnalyzer里面包含了基本的功能,例如方差、因子载荷矩阵、提取主成分、计算得分等,但是没有旋转因子矩阵这一重要功能,所以需要加载Rotator,进行补充。

第二部分:导入数据

本文此次数据选自于各大城市《统计年鉴2019》与碳排放相关的各项指标;
在之前的文章中,介绍了如何利用pandas读取.csv文件,这次给大家介绍pandas读取.xlsx文件的方法:

data = pd.read_excel("F:\\公众号\\python\\【案例】因子分析\\data.xlsx", sheetname = 0, header = 0, index_col = 0)


参数说明:
1、sheetname指选取哪个sheet的数据,0代表第一个,1代表第二个,依此类推;如果不填,默认选取所有sheet。
2、header选取哪一行作为列指标;index_col选取哪一列作为索引,这两个与read_csv()相同。

第三部分:建立因子分析模型

fa = FactorAnalyzer(rotation=None)
fa.fit(data)


从结果中可以看出,从中提取了3个主成分因子。
然后我们可以通过.loadings_查看因子载荷矩阵:

print("因子载荷矩阵:\n", fa.loadings_)

很多时候我们从因子载荷矩阵中很难去解释这三个主成分所蕴含的逻辑关系,因此就需要将因子载荷矩阵进行旋转;
旋转的目的是通过改变坐标轴位置,重新分配各个因子所解释方差比例,使其载荷系数更接近1或0,能更好地解释和命名变量。旋转后的因子不改变模型对数据的拟合程度,也不改变各个变量的公因子方差,使因子结构变得更简单:

rotator = Rotator()
print("按正交旋转后的因子载荷矩阵:\n", rotator.fit_transform(fa.loadings_))


说明:
Rotator()默认选择varimax,要得出旋转后的载荷矩阵需要通过.fit_transform()来进行计算;

然后按照每一行中绝对值最大的数进行分组,就可以得到三个主成分中所含有的逻辑关系,在这里就不进行分析了,留给大家自行解释。

假如我们使用varimax方法旋转后,还是不能很好的解释主成分所蕴含的逻辑,那么我们就需要用其它旋转方法进行探索,这里以promax进行展示:

说明:
旋转方法还有:varimax、promax 、oblimin、oblimax、quartimin、quartimax 、equamax

计算变量共同度:
变量共同度也就是变量方差,是每个原始变量在每个共同因子的负荷量的平方和,也就是指原始变量方差中由共同因子所决定的比率。变量的方差由共同因子和唯一因子组成。共同性表明了原始变量方差中能被共同因子解释的部分,共同性越大,变量能被因子说明的程度越高,即因子可解释该变量的方差越多。共同性的意义在于说明如果用共同因子替代原始变量后,原始变量的信息被保留的程度。
一般共同度大于0.5比较好。

fa.get_communalities()


计算因子相关矩阵和特征值

fa.get_eigenvalues()


计算因子方差信息,从上到下依次是每个因子的方差,比例方差和累积方差:

fa.get_factor_variance()

第四部分:计算各个城市得分

为了计算便利,我们先定义一个计算得分的函数,得分的计算公式是以比例方差为权重的加权求和:

def socre(factors):return sum(factors*fa.get_factor_variance()[1])

然后我们需要继续利用FactorAnalyzer中.transform()计算各个城市三个主成分的值:

fa.transform(data)


紧接着就可以套用循环语句依次计算每个城市的污染得分:

socres = []
for i in range(len(fa.transform(data))):new = socre(fa.transform(data)[i])
socres.append(new)

并将得分插入到原数据表中:

data['得分'] = socres

最后就可以根据大家各自的需求进行排序、可视化等操作了,是不是比SPSS还要简单呢。

获取代码

之前有小伙伴反映无法打开我上传的代码文件,因为之前的代码文件都是我从notebook中直接保存的.ipynb格式,无法用python直接打开,所以以后传代码,我会再附上完整代码.py格式一起上传。

该篇的数据和完整代码可在公众号中回复“因子分析”获得,谢谢大家支持!

超简单、超实用的统计方法——因子分析相关推荐

  1. excel亮灯怎么设置_Excel这些超简单的聚光灯制作方法,核对数据再也不用愁!...

    原标题:Excel这些超简单的聚光灯制作方法,核对数据再也不用愁! 最近一直问小编Excel的聚光灯效果怎么做?今天小编就教大家快速制作聚光灯效果,核对数据再也不用怕看花眼啦! 一.聚光灯效果制作 步 ...

  2. 超简单的图片去水印方法,看完就会!

    大家都知道,现在我们不少在网上下载的图片都是带有水印的,看起来实在是不是很和谐,所以总是有很多小伙伴在想方设法的去除图片上的各种水印.别担心,今天小编将分享给大家一些超级简单的去水印方法,帮大家解决这 ...

  3. 超简单超实用MySQL修改密码方法来喽

    使用SET PASSWORD命令 1:首先使用原密码登录MySQL 2:输入命令 格式:mysql>set password for 用户名@localhost=password('新密码'); ...

  4. 打包android阴影不见,Android无pading超简单超实用阴影解决方案

    前言 这个迭代,UI在给了几张带阴影的图片,那种阴影范围很大,实际内容却只有一点的图片. 效果类似这样. 不知道这张图有没有表达清楚,就是那种图片之间阴影需要重叠才能使内容对其,阴影还有颜色的效果. ...

  5. 往邮箱里发python怎么发_Python 超简单的邮件发送方法

    在训练网络模型的时候,往往需要好几个小时,甚至十几个小时,由于时间不固定,所以有时候我去查看了好几次都没训练完,有时候训练结束很久了我才想起去看,所以我就想训练结束后自动给我发个邮件,这样我就可以专心 ...

  6. python server酱_Python 超简单的邮件发送方法

    在训练网络模型的时候,往往需要好几个小时,甚至十几个小时,由于时间不固定,所以有时候我去查看了好几次都没训练完,有时候训练结束很久了我才想起去看,所以我就想训练结束后自动给我发个邮件,这样我就可以专心 ...

  7. PS超简单的扣人像方法

    PS中(不要问我为什么不是photoshop),人像抠图的使用频率其实是很高的,例如人物换背景,换场景,简单的就是证件照抠图. 其难点就是头发丝的处理.因为我们常用的抠图工具,例如钢笔,套索,魔棒都是 ...

  8. python 邮件抄送_Python 超简单的邮件发送方法

    在训练网络模型的时候,往往需要好几个小时,甚至十几个小时,由于时间不固定,所以有时候我去查看了好几次都没训练完,有时候训练结束很久了我才想起去看,所以我就想训练结束后自动给我发个邮件,这样我就可以专心 ...

  9. 分享一种超简单的js解密方法

    加密代码如下 eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a ...

最新文章

  1. RemoveError: 'setuptools' is a dependency of conda and cannot be removed from
  2. Mahout推荐算法API详解
  3. PingingLab传世经典系列《CCNA完全配置宝典》-3.2 VLAN进阶配置
  4. Java基础day23
  5. 多媒体技术 PI 第一期:OSS 圆桌预告
  6. python相关工作岗位_西安掌握Python有哪些工作岗位能够选择
  7. springmvc工作流程_SpringMVC工作原理
  8. 帐篷篷房建筑建材产品营销型网站源码 dedecms织梦模板
  9. linux 文件管理器_8个Linux文件管理器尝试
  10. 小米路由器爆款产品遭遇友商恶意抹黑 官方怒晒黑稿...
  11. Silverlight --- Behavior技术(三)
  12. 看〈走出软件作坊〉浅谈扁平化管理
  13. 15.企业应用架构模式 --- 分布模式
  14. PurgeComm()函数--清空缓冲区
  15. PFQ: a Linux kernel module for packet capturing on multi-core architectures
  16. NPOI操作Excel类代码(打开 插入 设置行列宽 合并单元格 增删改工作表 保存等等) .NET4.5
  17. 光盘重装linux系统教程视频,重装系统?一步一步安装系统详细教程【带视频】。...
  18. ImageNet数据集的0到999Label对应的类别分别是什么
  19. 全网最全AD16——PCB布线
  20. 数组的过滤方法filter()

热门文章

  1. 知乎上40个有趣回复,很精辟
  2. #UVM# 关于多次TB中 include “uvm_macros.svh“的疑问篇
  3. 小白学习HCIA2022
  4. mac彩色球转不停,Mac电脑一直在转圈怎么办?
  5. 基于python的多因子分析
  6. Ntrip通讯协议1.0
  7. Android 获取app启动来源(是被谁启动的、被哪个第三方app启动?)
  8. 《网络空间内生安全》读书笔记:第七章 动态异构冗余架构
  9. 2019年7月勒索病毒疫情分析
  10. Mysql Mac 免安装教程