主成分分析PCA通用代码(输出world报告)
这段代码的功能是进行主成分分析(PCA),并将分析结果生成一个详细的报告文档。以下是该代码的主要步骤和功能介绍:
-
数据读取与预处理:
- 代码首先从Excel文件中读取数据,删除缺失值,并提取所有特征列。
- 对数据进行标准化处理,使得不同特征的数据具有相同的尺度。
-
KMO检验与Bartlett’s球形度检验:
- 计算KMO值和Bartlett’s球形度检验值,用于判断数据是否适合进行主成分分析。
-
主成分分析(PCA):
- 使用PCA对标准化后的数据进行降维,提取出各主成分的特征根、方差解释率以及累积方差解释率。
- 计算因子载荷系数,衡量各变量在主成分中的贡献。
-
生成分析报告:
- 在文档中添加KMO检验与Bartlett’s检验结果的描述。
- 创建并填充总方差解释表格,展示各主成分对方差的解释程度。
- 插入碎石图,用于确定主成分的数量。
- 创建因子载荷系数表,并生成相应的热力图,展示各主成分中隐变量的重要性。
- 最后,创建成分矩阵表,展示原始变量在各主成分上的贡献率。
-
保存文档:
- 最终将生成的分析报告保存为Word文档,文件名为“主成分分析报告.docx”。
输入格式:每一行为一个样本,每一列为一个指标数据
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from scipy.stats import bartlett
import numpy as np
from docx import Document
from docx.shared import Pt, Inches
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
import matplotlib.pyplot as plt
import seaborn as sns
# 设置中文字体和负号显示
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字体为黑体
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题
# 读取Excel数据
data = pd.read_excel('版本2_异常值替换为平均值_附件1.xlsx') # 替换为您的数据文件
data = data.dropna() # 清除缺失值
features = data.columns.tolist()
# 数据标准化
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data)
# KMO检验
def calculate_kmo(data):
data_corr = np.corrcoef(data.T)
data_inv = np.linalg.inv(data_corr)
kmo = np.sum(data_corr * data_inv) / (np.sum(data_corr**2) - np.sum(np.diag(data_corr)**2))
return kmo
# Bartlett's球形度检验
def calculate_bartlett_sphericity(data):
n, p = data.shape
correlation_matrix = np.corrcoef(data.T)
chi2, p_value = bartlett(*[np.array(data[:, i]) for i in range(p)])
return chi2, p_value
kmo_value = calculate_kmo(data_scaled)
chi_square_value, p_value = calculate_bartlett_sphericity(data_scaled)
# 主成分分析(PCA)
pca = PCA(n_components