数据分析案例(一):地区收入的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()

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go语言中channel和互斥锁的应用场景

面对一个并发问题,我们的解决方案是使用channel还是互斥锁来实现并不总是很清晰。因为Go提倡使用通信来共享内存,所以一个常见的错误就是总是强制使用channel,不管实际情况如何。但是我们应该把这两种选择作为互补手段。 首先,简单回顾一下Go语言中的channel:channel是一种交…

软件设计师-基础知识科目-算法设计与分析8

八、算法设计与分析: 常见算法: 回溯方法: 用深度优先的探索问题的解空间。应用场景:N皇后问题。(背) 分支界限法: 用广度优先的探索问题的解空间,采用的是分支界限法算法设计策…

小程序开发SSL证书下载和安装

在开发小程序时,确保数据的安全传输至关重要,而实现这一目标的关键在于正确获取与安装SSL证书。以下详细介绍了从获取到安装SSL证书的完整流程,以助您为小程序构建可靠的加密通信环境。 一、小程序SSL证书类型选择: 域名验证型D…

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

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

备战蓝桥杯---刷杂题2

显然我们直接看前一半&#xff0c;然后我们按照斜行看&#xff0c;我们发现斜行是递增的&#xff0c;而同一行从左向右也是递增的&#xff0c;因此我们可以直接二分&#xff0c;同时我们发现对称轴的数为Ck,2k. 我们从16斜行枚举即可 #include<bits/stdc.h> using name…

YOLOV5训练KITTI数据集实践

目录 一、YOLOV5下载安装二、KITTI数据集三、标签格式转换四、修改配置文件五、训练六、测试 一、YOLOV5下载安装 git clone https://github.com/ultralytics/yolov5.git conda create -n yolov5 python3.8 -y conda activate yolov5 cd yolov5 pip install -r requirements.t…

一文了解ERC404协议

一、ERC404基础讲解 1、什么是ERC404协议 ERC404协议是一种实验性的、混合的ERC20/ERC721实现的&#xff0c;具有原生流动性和碎片化的协议。即该协议可让NFT像代币一样进行拆分交易。是一个图币的互换协议。具有原生流动性和碎片化的协议。 这意味着通过 ERC404 协议&#xf…

gitlab、jenkins安装及使用文档一

gitlab-jenkins安装文档 IP地址操作系统服务版本192.168.75.137Rocky9.2jenkins 2.450-1.1 jdk 11.0.22 git 2.39.3192.168.75.138Rocky9.2gitlab-ce 16.10.0 gitlab安装 前期准备: 关闭防火墙及 SELinuxsystemctl disable --now firewalld sed -i s/^SELINUXenforcing$…

谷歌seo自然搜索排名怎么提升快?

要想在谷歌上排名快速上升&#xff0c;关键在于运用GPC爬虫池跟高低搭配的外链组合 首先你要做的&#xff0c;就是让谷歌的蜘蛛频繁来你的网站&#xff0c;网站需要被谷歌蜘蛛频繁抓取和索引&#xff0c;那这时候GPC爬虫池就能派上用场了&#xff0c;GPC爬虫池能够帮你大幅度提…

短剧小程序系统开发,让短剧观看与创作更加便捷。短剧系统源码搭建

一、目前短剧发展趋势 1. 市场规模&#xff1a;根据数据来看&#xff0c;2023年中国微短剧市场规模达到了373.9亿元&#xff0c;同比上升了267.65%。预计2024年市场规模将超过500亿元。这一市场规模的增长速度非常显著&#xff0c;显示出短剧行业的巨大潜力和发展前景。 2. 投…

RabbitMQ消息模型之Fanout消息模型

Fanout消息模型 * 广播模型&#xff1a;* 一个交换机绑定多个队列* 每个队列都有一个消费者* 每个消费者消费自己队列中的消息&#xff0c;每个队列的信息是一样的生产者 package com.example.demo02.mq.fanout;import com.example.demo02.mq.util.ConnectionUtils; impor…

Python异常处理try与except跳过报错使得程序继续运行的方法

本文介绍基于Python语言的异常处理模块try与except&#xff0c;对代码中出现的报错加以跳过&#xff0c;从而使得程序继续运行的方法。 在Python语言中&#xff0c;try语句块用于包含可能引发异常的代码&#xff0c;而except语句块则用于定义在出现异常时要执行的代码。其基本结…

Windows下编译boost库

官网&#xff1a;https://www.boost.org/ 下载地址&#xff1a;https://github.com/boostorg/boost 这里使用github下载 使用git bash运行bootstrap.sh 运行b2.exe,会生成bin.v2和stage文件夹 Cmake引入

03-JAVA设计模式-适配器模式

适配器模式 设么是适配器模式 它属于结构型模式&#xff0c;主要用于将一个类的接口转换成客户端所期望的另一种接口&#xff0c;从而使得原本由于接口不兼容而无法协同工作的类能够一起工作。 适配器模式主要解决的是不兼容接口的问题。在软件开发中&#xff0c;经常会有这…

前端对接fastGPT流式数据+打字机效果

首先在对接api时 参数要设置stream: true, const data {chatId: abc,stream: true,//这里true返回流式数据detail: false,variables: {uid: sfdsdf,name: zhaoyunyao,},messages: [{ content: text, role: user }]}; 不要用axios发请求 不然处理不了流式数据 我这里使用fetch …

通过Transform与Animation,来探索CSS中的动态视觉效果

在 transform 和 animation 出现之前&#xff0c;前端开发者通常需要编写大量的 JavaScript 代码来实现动态效果。然而&#xff0c;这两个 CSS 属性的引入极大地简化了丰富动效和过渡效果的实现&#xff0c;从而让用户界面更加引人入胜&#xff0c;交互体验更为流畅。本文将深入…

详解Qt添加外部库

在Qt项目中添加外部库是一项常见任务&#xff0c;无论是静态库还是动态库都需要正确的配置才能让项目顺利编译链接。以下是详细步骤和不同场景下的配置方法&#xff1a; 方法一&#xff1a;手动编辑.pro文件 添加头文件路径&#xff1a; 在Qt项目中的.pro文件中使用INCLUDEPAT…

小程序解析二维码:jsQR

1.了解jsQR jsQR是一个纯javascript脚本实现的二维码识别库&#xff0c;不仅可以在浏览器端使用&#xff0c;而且支持后端node.js环境。jsQR使用较为简单&#xff0c;有着不错的识别率。 2.效果图 3.二维码 4.下载jsqr包 npm i -d jsqr5.代码 <!-- index.wxml --> &l…

通讯录项目(用c语言实现)

一.什么是通讯录 通讯录是一种用于存储联系人信息的工具或应用程序。它是一种电子化的地址簿&#xff0c;用于记录和管理个人、机构或组织的联系方式&#xff0c;如姓名、电话号码、电子邮件地址和邮寄地址等。通讯录的目的是方便用户在需要时查找和联系他人。 通讯录通常以列…

AI预测体彩排3第1弹【2024年4月12日预测--第1套算法开始计算第1次测试】

前面经过多个模型几十次对福彩3D的预测&#xff0c;积累了一定的经验&#xff0c;摸索了一些稳定的规律&#xff0c;有很多彩友让我也出一下排列3的预测结果&#xff0c;我认为目前时机已成熟&#xff0c;且由于福彩3D和体彩排列3的玩法完全一样&#xff0c;我认为3D的规律和模…