数据分析案例(一):地区收入的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.mzph.cn/news/810741.shtml

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

相关文章

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…

2024最火的情感短视频素材在哪下载?这里有几个素材网站可以下载

在这个看似无边无际的短视频海洋中,我就像那个手握罗盘、脚踏破旧木筏的勇敢航海家,时刻准备着发现新大陆。而我的罗盘,就是那些能够指引我找到珍稀素材的网站。让我带你领略一下我的航海日记吧。九才素材网: 九才素材网提供了丰…

青少年体能素质教育平台

一、项目背景与意义 随着社会的快速发展和人们生活水平的提高,青少年体能素质教育逐渐受到社会各界的广泛关注。体能素质作为青少年全面发展的重要组成部分,对于提升他们的健康水平、增强自信心、培养团队协作精神和创新能力具有重要意义。然而&#xf…

继承【C/C++复习版】

目录 一、什么是继承?怎么定义继承? 二、继承关系和访问限定符? 三、基类和派生类对象可以赋值转换吗? 四、什么是隐藏?隐藏vs重载? 五、派生类的默认成员函数? 1)派生类构造函…

关于转义符 \ 在php正则中的匹配问题

今天做题遇到一个很经典的问题&#xff0c;记录一下&#xff0c;先看一段代码 <?php $str&#xff0c;&#xff0c;"\\"; $pattern&#xff0c;&#xff0c;"/\\/"; if(preg_match($partern,$str,$arr)) { &#xff0c;&#xff0c;&#xff0c;&…

SpringBoot编写一个SpringTask定时任务的方法

1&#xff0c;在启动类上添加注解 EnableScheduling//开启定时任务调度 2&#xff0c; 任务&#xff08;方法&#xff09;上也要添加注解&#xff1a; Scheduled(cron " 0 * * * * ? ") //每分钟执行一次 域&#xff1a; 秒 分 时 日 月 周 &#xff08;年&#…

如何修复在Deepin系统中因`apt-get autoremove systemd`导致的启动问题

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

选择正确的Go Module Path

最近我在查看项目代码时&#xff0c;注意到有人在go.mod文件中将module path写为com.example.foo了。根据这个写法&#xff0c;相信屏幕前的读者也可以推断出这位开发人员可能是从Java阵营转到Go的。实际开发中可能有很多开发者会使用类似的内容作为module path&#xff0c;但这…

Jmeter针对多种响应断言的判断

有时候response返回的结果并非一种&#xff0c;有多种&#xff0c;需要对这几种进行判断的时候需要使用Bean Shell。 &#xff08;1&#xff09;首先获取响应数据 String response prev.getResponseDataAsString(); ResponseCode 响应状态码 responseHeaders 响应头信息 res…

Peter算法小课堂—动态规划斜率优化

大家来到这一堂课&#xff0c;就说明大家已经学过函数了 直线方程&#xff1a;ykxb 大家可以算一算。 其实&#xff0c;在数学上&#xff0c;这玩意要分类讨论 那么&#xff0c;这唯一的交点就是我们要背出来的 直线最值 这像一个分段函数 其实&#xff0c;只有部分直线能提供…

docker-compose yaml指定具体容器网桥ip网段subnet

docker-compose 启动yaml有时可能的容器网段与宿主机的ip冲突导致宿主机上不了网&#xff0c;这时候可以更改yaml指定subnet 宿主机内网一般是192**&#xff0c;这时候容器可以指定172* version: 3.9 services:coredns:image: coredns/coredns:1.10.0container_name: coredns…

详解Qt添加外部库

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

IO_DAY7

1:实现2个终端之间的互相聊天 要求:千万不要做出来2个终端之间的消息发送是读一写的&#xff0c;一定要能够做到&#xff0c;一个终端发送n条消息&#xff0c;另一个终端一条消息都不回复都是没有问题的 终端A&#xff1a; #include<myhead.h> int main(int argc, char…

【YOLOv9改进[损失函数]】使用结合InnerIoU和Focaler的各种损失函数助力YOLOv9更优秀

目录 一 回归损失函数&#xff08;Bounding Box Regression Loss&#xff09; 1 Inner-IoU 2 Focaler-IoU&#xff1a;更聚焦的IoU损失 二 改进YOLOv9的损失函数 1 总体修改 ① utils/metrics.py文件 ② utils/loss_tal_dual.py文件 2 各种机制的使用 ① 使用结合Inn…

2024年MCN商业模式运营体系行业发展分析

【干货资料持续更新&#xff0c;以防走丢】 2024年MCN商业模式运营体系行业发展分析 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 mcn运营资料包&#xff08;完整资料包含以下内容&#xff09; 目录 MCN机构运营方案的概要&#xff1a; 一、MCN机构定位与目…

关于java分页功能以及传参规范

不用插件 //当前页码private static final Integer currentPage 2;//设置每页个数private static final Integer pageSize 5;Testpublic void test8() {//手写一个分页测试&#xff0c;不用插件List<Integer> list new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7…

GPT建模与预测实战

代码链接见文末 效果图&#xff1a; 1.数据样本生成方法 训练配置参数&#xff1a; --epochs 40 --batch_size 8 --device 0 --train_path data/train.pkl 其中train.pkl是处理后的文件 因此&#xff0c;我们首先需要执行preprocess.py进行预处理操作&#xff0c;配置参数…

Android-NDK的linux交叉编译环境

NDK工具包下载 NDK 下载 | Android NDK | Android Developers https://github.com/android/ndk/wiki/Unsupported-Downloads 以android-ndk-r26c下载为例&#xff0c;下载后将压缩包解压至/usr目录下 CMakeLists编译选项设置 编译平台变量判断条件中增加一下android条件…

ubuntu下man手册 查不到 pthread_mutex_lock等系列函数用法的问题

问题 在ubuntu系统中无法man到 pthread_mutex_lock pthread_mutex_trylock pthread_mutex_unlock等函数 $ man pthread_mutex_lock 没有 pthread_mutex_lock 的手册页条目解决方式 输入以下命令 sudo apt-get install manpages-posix manpages-posix-dev 然后输入密码 再次m…

MobaXterm无法登陆oracle cloud的问题

问题 我在oracle cloud上创建实例的时候&#xff0c;只能使用密钥的方式登陆&#xff0c;当时下载了私钥文件。实例创建好以后&#xff0c;在mobaxterm上使用这个私钥文件无法登陆 排查 尝试使用mobaxterm的keygen&#xff0c;把私钥文件转成ppk格式&#xff0c;还是不行。…