数据分析案例(一):地区收入的PCA主成分分析

news2024/11/23 20:54:30

 练习1 地区收入的PCA主成分分析

0.变量说明

1.导包操作

核心思路:导入基础数据操作库包,PCA、k-means 库包,数据可视化库包

import pandas as pd
import numpy as np
from sklearn.decomposition import PCA  
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import matplotlib.pyplot as plt
import seaborn as sns  

%matplotlib inline
#如遇中文显示问题可加入以下代码
from pylab import mpl
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题

import warnings
warnings.filterwarnings('ignore')

2.读取数据

核心代码:pd.read_csv(path,encoding=编码格式),注意这里的编码是gb2312

# 读取数据
df = pd.read_csv(fr"./各地区年平均收入.csv",encoding="gb2312")
df

3.数据预处理

3.1.查看数据类型

核心代码:df.dtypes

核心思路:sum_col / count (列和 / 非空个数)

import pandas as pd
import numpy as np
def calculate_and_replace_mean(df, column):
    # 计算列的平均值,仅包括可以转换为整数的值  
    count = 0
    sum_col = 0
    for value in df[column]:
        if value != " " and pd.notnull(value):
            try:
                count += 1
                sum_col += int(value)
            except ValueError:
                continue
                # 计算平均值,如果无法计算则返回NaN  
    column_mean = sum_col / count if count > 0 else np.nan

    # 取整数
    column_mean = int(column_mean)

    # 将列中的空格替换为平均值  
    df[column] = df[column].replace(" ", column_mean)
    return df  

# 对x1到x7列计算并替换平均值  
for col in ['x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7']:
    df = calculate_and_replace_mean(df, col)
    # 替换dq列中的空格为"MIssing"  
df['dq'] = df['dq'].replace(" ", "MIssing")
# 显示更新后的DataFrame  
df

3.3.转换数据类型

核心代码:df[字段名].astype(新类型)

# 装换字段类型
df['x6'] = df['x6'].astype(int)
df['x7'] = df['x7'].astype(int)
df.dtypes

4.抽取数据

核心思路:df[字段列表],提取数值型的数据

# 数据截取
df_train = df[["x1","x2","x3","x4","x5","x6","x7"]]
df_train

5.特征工程

核心思路:特征工程标转化,高维数据转化为低维数据

# 特征工程:标准化
# 实例化PCA, 小数——保留多少信息
transfer = PCA(n_components=0.9)
data = transfer.fit_transform(df_train)
data

6.机器学习

6.1.肘部法确定k值

核心思路:选择曲线开始变得平坦的点作为K值。

# 确定k值
# 肘部法则(Elbow Method):
# 通过计算不同K值下的簇内误差平方和(Inertia或称为Distortion),并绘制它们随K值变化的曲线。
# 注意:选择曲线开始变得平坦的点作为K值,这个点通常被认为是“肘部”。

distortions = []
K = range(1, 10)
for k in K:
    kmeanModel = KMeans(n_clusters=k).fit(data)
    distortions.append(kmeanModel.inertia_)

plt.plot(K, distortions, 'bx-')
plt.xlabel('k')
plt.ylabel('Distortion')
plt.title('The Elbow Method showing the optimal k')
plt.show()

6.2.K-Means聚类

核心思路:将k值确定为肘部“4”

#机器学习(k-means)

estimator = KMeans(n_clusters=4, random_state=22)
y_predict = estimator.fit_predict(data)
y_predict

7.模型评估

核心代码:silhouette_score()

# 模型评估
silhouette_score(data, y_predict)

# 添加聚类结果列

df_train['result'] = y_predict
df_train

8.数据可视化

核心思路:散点图显示聚类簇和特征变量关系

import matplotlib.pyplot as plt
import seaborn as sns

# x1 国有经济单位
# x2 集体经济单位
# x3 联营经济单位
# x4 股份制经济单位
# x5 外商投资经济单
# x6 港澳台经济单位
# x7 其他经济单位
feature1 = 'x1'  # 请替换为实际的特征列名  
feature2 = 'x2'  # 请替换为实际的特征列名  
# 绘制散点图  
plt.figure(figsize=(10, 6))  # 设置画布大小  
sns.scatterplot(x=df_train[feature1], y=df_train[feature2], hue=df_train['result'], palette='viridis')
# 设置标题和坐标轴标签  
plt.title('聚类结果散点图')
plt.xlabel(feature1)
plt.ylabel(feature2)
# 显示图例  
plt.legend(title='簇标签')
# 显示图形  
plt.show()

“若有理解思路疏漏,感谢各位大佬批评指正!”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1589166.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

补体系统研究解决方案BioPorto补体抗体

靶点研究新热点:补体系统 21世纪以来,人们对补体的认识从基于血液的抗菌素系统逐步转变为免疫和组织稳态的全局调节器。近年,对补体激活机制、结构、功能方面的研究更是取得了显著的进展,令补体系统研究跻身热门研究主题之一。 补…

基于SSM新疆旅游管理系统的设计与实现(内附设计LW + PPT+ 源码下载)

摘 要 随着经济的飞速发展人们对于旅游的热衷度也日益提升,新疆因特殊的地理优势具备了天然的旅游资源,天山山脉将新疆的地理区域划分为了南疆和北疆,北疆因气候湿润且河流草场较多造就了得天独厚的自然旅游资源,南疆沙漠广布且…

图像JPEG压缩(附python代码)

JPEG压缩是一种有损压缩技术,常用于数字图像。它通过减少图像文件大小来实现压缩,但会造成一定程度的图像质量损失。 目录 一、JPEG压缩1.1 JPEG压缩原理1.2 JPEG压缩优点1.3 JPEG压缩缺点 二、图像退化中加入JPEG压缩2.1 优势2.1.1 更逼真的模拟2.1.2 提…

OceanMind海睿思助力企业“数据入表”经济利益流入与生命周期管理

通过多年信息系统的建设与应用,企业积累了大量的数据。同时随着时间的推进,数据规模正以加速度快速增长。从国家到企业,都越来越关注所拥有的数据资源及其蕴含的深厚价值。很多企业已经逐渐认知到数据是重要的战略资源,数据资产化…

Acwing.3999 最大公约数(gcd欧拉函数)

题解 给定两个正整数 a,m&#xff0c;其中 a<m。 请你计算&#xff0c;有多少个小于 m 的非负整数 x满足&#xff1a; gcd(a,m)gcd(ax,m) 输入格式 第一行包含整数 T &#xff0c;表示共有 T 组测试数据。 每组数据占一行&#xff0c;包含两个整数 a,m 。 输出格式 每…

2024年第十四届MathorCup数学应用挑战赛C题解析(更新中)

2024年第十四届MathorCup数学应用挑战赛C题解析&#xff08;更新中&#xff09; 题目题目解析(更新中&#xff09;问题一问题二问题三 题目 C题 物流网络分拣中心货量预测及人员排班电商物流网络在订单履约中由多个环节组成&#xff0c;图1是一个简化的物流 网络示意图。其中&a…

UI自动化测试案例

备注:本文为博主原创文章,未经博主允许禁止转载。如有问题,欢迎指正。 个人笔记(整理不易,有帮助,收藏+点赞+评论,爱你们!!!你的支持是我写作的动力) 笔记目录:笔记本~笔记目录_airtest和selenium那个好用-CSDN博客 个人随笔:工作总结随笔_8、以前工作中都接触过哪…

Ansys Zemax | 如何将光栅数据从Lumerical导入至OpticStudio(下)

附件下载 联系工作人员获取附件 本文介绍了一种使用Ansys Zemax OpticStudio和Lumerical RCWA在整个光学系统中精确仿真1D/2D光栅的静态工作流程。将首先简要介绍方法。然后解释有关如何建立系统的详细信息。 本篇内容将分为上下两部分&#xff0c;上部将首先简要介绍方法工作…

如何处理ubuntu22.04LTS安装过程中出现“Daemons using outdated libraries”提示

Ubuntu 22.04 LTS 中使用命令行升级软件或安装任何新软件时&#xff0c;您可能收到“Daemons using outdated libraries”&#xff0c;“Which services should be restarted?”的提示&#xff0c;提示下面列出备选的重启服务&#xff0c;如下。 使用以下命令&#xff0c;能够…

【C】动态规划 之 多维最大最小路径和

总结一下这类题型的思路&#xff1a; 每一步所求的最优解 上一步的最优解 这一步的情况 1.数字三角形 主要思路&#xff1a; 1.到达每一个位置的最大和等于前一步最大和加上这一位置的值&#xff0c;而前一步要么是从左上下来&#xff0c;要么是从右上下来&#xff0c;这样…

如何应对app应用程序或者网站常见的几种攻击类型

大家好&#xff0c;我是咕噜铁蛋&#xff01;今天&#xff0c;我想和大家聊聊一个我们日常生活中经常遇到的问题——如何应对app或者网站常见的几种攻击类型。随着互联网的普及&#xff0c;app和网站已经成为我们获取信息、交流互动的重要平台。然而&#xff0c;这些平台也时常…

障碍物识别技术赋能盲人独立出行:一场静默的科技革新

作为一名资深记者&#xff0c;我始终关注并报道那些科技如何助力特殊群体克服生活挑战的动人故事。近期&#xff0c;一款叫做蝙蝠避障的应用进入了我的视线&#xff0c;它搭载先进障碍物识别技术以其独特的优势&#xff0c;悄然为视障人士的独立出行带来了显著变革。 “障碍物识…

MXNet安装:专业指南与深度解析

一、引言 MXNet是一个高效且灵活的深度学习框架&#xff0c;它支持多种编程语言和平台&#xff0c;并提供了丰富的深度学习算法和工具。随着深度学习技术的广泛应用&#xff0c;MXNet因其出色的性能和易用性受到了越来越多开发者和研究人员的青睐。本文将详细介绍MXNet的安装过…

基于yolov9来训练人脸检测

YOLOv9是一个在目标检测领域内具有突破性进展的深度学习模型&#xff0c;尤其以其在实时性与准确性上的优秀表现而受到广泛关注。针对人脸检测这一特定任务&#xff0c;YOLOv9通过其架构创新和算法优化提供了强大的支持。 YOLOv9在继承了YOLO系列&#xff08;如YOLOv7、YOLOv8&…

【数据结构与算法】二分查找算法

目录 二分查找算法什么是二分查找算法整数二分法常用算法模板 二分查找算法例题例题一&#xff1a;分巧克力问题例题二&#xff1a;M次方根 二分查找算法 什么是二分查找算法 枚举查找即顺序查找*&#xff0c;实现原理是逐个比较数组 a[0:n-1] 中的元素&#xff0c;直到找到元…

NFT Insider #126:Azuki 创始人将探索使用 AnimeChain 向 NFT 所有者分配版税

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members &#xff08;https://twitter.com/WHALEMembers&#xff09;、BeepCrypto &#xff08;https://twitter.com/beep_crypto&#xff09;联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜…

互联网轻量级框架整合之设计模式

反射技术 Java的反射技术能够通过配置类的全限定名、方法和参数完成对象的初始化&#xff0c;甚至反射某些方法&#xff0c;大大的增强了Java的可配置型&#xff0c;这也是Spring IoC的底层原理&#xff0c;Java的反射技术覆盖面很广&#xff0c;包括对象构建、反射方法、注解、…

【Linux杂货铺】文件系统

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 硬盘 &#x1f4c2; 物理结构 &#x1f4c2; 存储结构 &#x1f4c2; CHS定址法 &#x1f4c2; 操作系统对硬盘的管理和抽象 &#x1f4c1; 文件系统 &#x1f4c2; 分区 &#x1f4c2; 分组 &#x1f4c2; inode号 分配…

十分钟到底能不能讲明白ROS到底能做啥

总结 录完视频发现十分钟不能&#xff0c;总共花了20分钟。 提纲&#xff1a; 课程、竞赛、论文Linux、C、Python、Github和ROS关联性强平台-资格和ROS关联性弱速度-成绩路径规划-全局和局部全局-侧重路径长短-找一条最优&#xff08;短&#xff09;的路局部-侧重速度控制-用…

LeetCode-72. 编辑距离【字符串 动态规划】

LeetCode-72. 编辑距离【字符串 动态规划】 题目描述&#xff1a;解题思路一&#xff1a;动规五部曲解题思路二&#xff1a;动态规划【版本二】解题思路三&#xff1a;0 题目描述&#xff1a; 给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最…