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

 练习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()

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

宝塔面板安装软件 提示需要[xxxMB]内存 强制不能安装

解决方法: 第一步: 编辑修改/www/server/panel/class/下的文件panelPlugin.py vi /www/server/panel/class/panelPlugin.py注释以下判断的内容: ## 第二步: 重启宝塔面板,然后安装即可 bash bt 1

HarmonyOS实战开发-如何实现对游戏实现基本控制。

介绍 本示例基于H5游戏,通过arkui的button实现对游戏实现基本控制,展示webview的JS注入与执行能力,及native应用与H5的通信能力。 本例的H5游戏页面,由https://yangyunhe369.github.io/h5-game-blockBreaker/ 提供 效果预览 使…

三子棋+迷宫

又水了一篇,嘿嘿不废话了,正文开始 文章目录 1.三子棋(Tic-Tac-Toe)游戏流程解析游戏设计游戏代码实现1. 包含头文件和定义全局变量2. 初始化游戏板3. 打印游戏板4. 玩家行动5. 检查胜利条件6. 主函数下面是完整的C语言代码 2.控…

Codeforces Round 521 (Div. 3)

目录 A. Frog Jumping B. Disturbed People C. Good Array D. Cutting Out E. Thematic Contests F1. Pictures with Kittens (easy version) F2. Pictures with Kittens (hard version) A. Frog Jumping 直接模拟即可注意数据范围需要开long long void solve(){LL a,…

LeetCode-5. 最长回文子串【字符串 动态规划】

LeetCode-5. 最长回文子串【字符串 动态规划】 题目描述:解题思路一:动态规划五部曲解题思路二:动态规划[版本二]解题思路三:0 题目描述: 给你一个字符串 s,找到 s 中最长的回文 子串 。 如果字符串的反序…

kubernetes应用的包管理工具---Helm的安装、部署、构建Helm Chart、分发

kubernetes应用的包管理工具—Helm的安装、部署、构建Helm Chart、分发 文章目录 kubernetes应用的包管理工具---Helm的安装、部署、构建Helm Chart、分发1. 引入Helm的原因1.1 没有使用Helm的部署1.2 使用Helm部署 2. Helm核心概念3. Helm架构3.1 V2版本3.2 V3版本 4. Helm安装…

品牌百度百科词条创建多少钱?

百度百科作为国内最具权威和影响力的知识型平台,吸引了无数品牌和企业争相入驻。一个品牌的百度百科词条,不仅是对品牌形象的一种提升,更是增加品牌曝光度、提高品牌知名度的重要途径。品牌百度百科词条创建多少钱,这成为了许多企…

基于SpringBoot+Vue的高校会议室预定管理系统(源码+文档+部署+讲解)

一.系统概述 伴随着我国社会的发展,人民生活质量日益提高。于是对系统进行规范而严格是十分有必要的,所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套高校会议室预订管理系统,帮助…

【电控笔记0】拉式转换与转移函数

概要 laplace:单输入单输出,线性系统 laplace 传递函数 总结

python+appium调@pytest.mark.parametrize返回missing 1 required positional argument:

出错描述: 1、在做pythonappium自动化测试时,使用装饰器pytest.mark.parametrize(“参数”,[值1,值2,值3]),测试脚本执行返回test_xx() missing 1 required positional argument:“…

Mybatis generate xml 没有被覆盖

添加插件即可 <plugin type"org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>

ssm040安徽新华学院实验中心管理系统的设计与实现+jsp

实验中心管理系统 摘 要 本安徽新华学院实验中心管理系统的设计目标是实现安徽新华学院实验中心的信息化管理&#xff0c;提高管理效率&#xff0c;使得安徽新华学院实验中心管理工作规范化、科学化、高效化。 本文重点阐述了安徽新华学院实验中心管理系统的开发过程&#x…

libcurl 简单实用

LibCurl是一个开源的免费的多协议数据传输开源库&#xff0c;该框架具备跨平台性&#xff0c;开源免费&#xff0c;并提供了包括HTTP、FTP、SMTP、POP3等协议的功能&#xff0c;使用libcurl可以方便地进行网络数据传输操作&#xff0c;如发送HTTP请求、下载文件、发送电子邮件等…

蓝桥杯python速成

总写C&#xff0c;脑子一热&#xff0c;报了个Python&#xff08;有一点想锤死自己&#xff09;&#xff0c;临时抱佛脚了 1.list的插入删除 append extend insert&#xff08;在索引位插入99&#xff09;---忘记用法别慌&#xff0c;用help查询 remove&#xff08;去掉第一个3…

mysql题目2

tj11: select sex,count(sex) from t_athletes group by sex; tj12: select name 姓名,TIMESTAMPDIFF(year,birthday,2024-1-1) 年龄 from t_athletes tj13: SELECT * FROM t_athletesWHERE id NOT IN (SELECT aid FROM t_match WHERE sid IN (SELECT id FROM t_sport WHE…

510天,暴雪竞品迎来大考

北京时间4月10日&#xff0c;暴雪娱乐、微软游戏与网易正式宣布重新达成合作。两则数据值得关注&#xff1a; 一是上午暴雪与网易刚宣布合作&#xff0c;中午《魔兽世界》玩家预约就超过了20W。 截图时间为中午12:48 二是在上午10:24&#xff0c;《炉石传说》官方公众号发布回…

直播视频传输处理技术

流程 在视频直播场景中&#xff0c;从拍摄到手机用户接收的整个过程涉及多个技术环节&#xff1a; 视频采集&#xff1a; 视频源通常来自摄像机或智能手机摄像头&#xff0c;通过捕捉连续的画面生成原始视频信号。 编码压缩&#xff1a; 为了减少数据量以适应网络传输&#x…

一个比 Celery 轻量好用的异步任务工具

文章目录 1、RQ安装2、RQ基本概念2.1、Queue2.2、Job2.3、Worker 3、RQ 高级用法3.1、自定义任务失败处理3.2、任务依赖关系3.3、定时任务 4、RQ web 界面5、查看任务结果6、RQ 与 celery 对比7、总结 Python RQ&#xff08;Redis Queue&#xff09;是一个轻量级的异步任务队列…

c++取经之路(其五)——类和对象拷贝构造函数

概念&#xff1a;拷贝构造函数&#xff0c;只有单个形参&#xff0c;该形参是对本类类型对象的引用(一般常用const修饰)&#xff0c;在用已存在的类类型对象创建新对象时由编译器自动调用。 特征&#xff1a; 1. 拷贝构造函数是构造函数的一个重载形式 如&#xff1a; 2. 拷贝…

最强ChatGPT Plus发布!碾压Claude!ChatGPT5即将发布!

原文链接&#xff1a;ChatGPT发布最新版本&#xff01;新版GPT-4 Turbo重回王座&#xff01;碾压Claude 那个聪明、强大的 ChatGPT&#xff0c;终于又回来了&#xff01; ChatGPT也能用上最强的GPT-4 Turbo了&#xff01;今天&#xff0c;新版GPT-4 Turbo再次重夺大模型排行榜…