数据预处理和探索性数据分析(上)

news2024/9/19 10:08:50

目录

数据预处理

数据清洗

处理缺失值:

异常值检测与处理:

类别特征编码:

特征工程

创建新特征:

特征缩放:

探索性数据分析 (EDA)

使用Matplotlib进行可视化

绘制直方图:

绘制箱线图:

绘制散点图:

构建简单的机器学习模型

准备数据

划分训练集和测试集:

特征缩放:

训练模型

使用线性回归模型:

评估模型

计算模型的性能指标:

实战项目

项目步骤

 代码实操示例

生成图片

单变量分析:

多变量分析:

条形图:

散点图:

热力图:


数据预处理

数据预处理是机器学习流程中非常重要的一步,它包括数据清洗、特征工程等步骤。

数据清洗
  • 处理缺失值
    # 使用中位数填充缺失值
    df['Age'].fillna(df['Age'].median(), inplace=True)
  • 异常值检测与处理
    # 使用IQR方法检测异常值
    Q1 = df['Age'].quantile(0.25)
    Q3 = df['Age'].quantile(0.75)
    IQR = Q3 - Q1
    lower_bound = Q1 - 1.5 * IQR
    upper_bound = Q3 + 1.5 * IQR
    df = df[(df['Age'] >= lower_bound) & (df['Age'] <= upper_bound)]
  • 类别特征编码
    # 使用one-hot编码
    df = pd.get_dummies(df, columns=['Gender'], drop_first=True)
特征工程
  • 创建新特征
    df['Total_Pay'] = df['Base_Pay'] + df['Bonus']
  • 特征缩放
    from sklearn.preprocessing import StandardScaler
    
    scaler = StandardScaler()
    scaled_features = scaler.fit_transform(df[['Age', 'Salary']])
    df[['Age', 'Salary']] = scaled_features

探索性数据分析 (EDA)

EDA 是为了更好地理解数据集的特性。我们可以使用可视化工具来辅助这一过程。

使用Matplotlib进行可视化
  • 绘制直方图
    import matplotlib.pyplot as plt
    
    plt.hist(df['Age'], bins=20)
    plt.title('Age Distribution')
    plt.xlabel('Age')
    plt.ylabel('Count')
    plt.show()
  • 绘制箱线图
    df.boxplot(column='Salary')
    plt.title('Salary Distribution')
    plt.show()
  • 绘制散点图
    plt.scatter(df['Age'], df['Salary'])
    plt.title('Age vs Salary')
    plt.xlabel('Age')
    plt.ylabel('Salary')
    plt.show()

构建简单的机器学习模型

现在我们有了清理过后的数据,可以开始构建机器学习模型了。这里我们将使用线性回归模型作为示例。

准备数据
  • 划分训练集和测试集
    from sklearn.model_selection import train_test_split
    
    X = df[['Age', 'Experience']]
    y = df['Salary']
    
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  • 特征缩放
    from sklearn.preprocessing import StandardScaler
    
    scaler = StandardScaler()
    X_train = scaler.fit_transform(X_train)
    X_test = scaler.transform(X_test)
训练模型
  • 使用线性回归模型
    from sklearn.linear_model import LinearRegression
    
    model = LinearRegression()
    model.fit(X_train, y_train)
评估模型
  • 计算模型的性能指标
    from sklearn.metrics import mean_squared_error, r2_score
    
    y_pred = model.predict(X_test)
    mse = mean_squared_error(y_test, y_pred)
    r2 = r2_score(y_test, y_pred)
    
    print(f'Mean Squared Error: {mse}')
    print(f'R2 Score: {r2}')

实战项目

为了更好地巩固所学的知识,你可以尝试完成一个小的实战项目。例如,这下面是我从Kaggle网站下载一个数据集,对其进行预处理、特征工程、EDA,并最终训练一个简单的机器学习模型。

项目步骤
  1. 数据加载:使用Pandas加载数据。
  2. 数据清洗:处理缺失值、异常值。
  3. 特征工程:创建新特征、进行特征缩放。
  4. EDA:使用Matplotlib进行可视化。
  5. 模型训练:使用Scikit-Learn训练模型。
  6. 模型评估:使用适当的指标评估模型性能。
 代码实操示例
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
#加载数据
data_path=r'D:\机器学习\数据集:国家划分的生活成本\Cost_of_Living_Index_by_Country_2024.csv'
df=pd.read_csv(data_path)
#显示数据前几行
print(df.head())
#检查是否有缺失值
print(df.isnull().sum())
#基本统计信息
print(df.describe())
#可视化
#单变量分析
df.hist(bins=20,figsize=(12,10),color='blue')
plt.tight_layout()  #调整子图参数,使之填充整个图像区域
plt.show()
#多变量分析
numeric_df = df.select_dtypes(include=['float64', 'int64'])
corr_matrix=numeric_df.corr()
sns.heatmap(corr_matrix,annot=True,cmap='coolwarm')
plt.title('Correlation Matrix')
plt.show()
# #保存图片
# plt.savefig('8.11Cost_of_Living_Index_by_Country_2024.png')
#柱状图-排名前十的国家的生活成本指数
top_10_countries=df.head(10)
plt.figure(figsize=(12,6))
sns.barplot(x='Country',y='Cost of Living Index',data=top_10_countries)
plt.xticks(rotation=90)#旋转x轴标签
plt.title('Top 10 Countries by Cost of Living Index')
plt.show()
#散点图-生活成本指数与租金指数关系
plt.figure(figsize=(10,6))
sns.scatterplot(x='Cost of Living Index',y='Rent Index',data=df)#添加标题和标签
plt.title('Cost of Living Index vs Rent Index')
plt.show()
#热力图-各个指标之间的相关性
plt.figure(figsize=(10,6))
numeric1_df = df.select_dtypes(include=['float64', 'int64'])
sns.heatmap(numeric1_df.corr(),annot=True,cmap='coolwarm')
plt.title('Correlation Heatmap')
plt.show()
生成图片
单变量分析:

多变量分析:

条形图:

散点图:

热力图:

数据加载与初步检查
  1. 加载数据

    • 使用Pandas加载csv文件。
    • 查看数据的前几行,了解数据结构。
  2. 数据清洗

    • 检查是否有缺失值。
    • 确认所有数值列的数据类型是否正确。
  3. 基本统计信息

    计算每列的基本统计量,如均值、中位数、最小值、最大值等。
探索性数据分析 (EDA)
  1. 单变量分析

    对于每个指标,绘制直方图或箱线图,以了解其分布情况。
  2. 多变量分析

    绘制相关性矩阵,以了解各指标之间的关联程度。
数据可视化
  1. 柱状图:展示排名前10的国家的生活成本指数。
  2. 散点图:生活成本指数与租金指数的关系。
  3. 热力图:各指标之间的相关性。

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

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

相关文章

this内存原理,成员变量和局部变量的区别

this的作用&#xff1a;区分局部变量和成员变量 this的本质&#xff1a;所在方法调用者的地址值 内存分布&#xff0c;this会保存地址 this.name name 等号的右边触发就近原则接收形参 把接收到的形参赋值给成员变量的name 成员变量&#xff0c;类方法外的变量&#xff0c…

一刷代码随想录(DP10)

115.不同的子序列 题意&#xff1a;给定一个字符串 s 和一个字符串 t &#xff0c;计算在 s 的子序列中 t 出现的个数。 字符串的一个 子序列 是指&#xff0c;通过删除一些&#xff08;也可以不删除&#xff09;字符且不干扰剩余字符相对位置所组成的新字符串。&#xff08;…

这本跨界生意经,南方黑芝麻还是暂时放下了

南方黑芝麻的跨界故事还是难讲通。 近期&#xff0c;南方黑芝麻对外称&#xff0c;公司决定暂缓新能源储能项目建设。据悉&#xff0c;2023年&#xff0c;黑芝麻拟让下属全资子公司——江西小黑小蜜食品有限责任公司转型经营储能锂电池&#xff0c;并加码建设储能锂电池生产基…

计算机毕业设计 美发管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

乘法逆元加练

前言&#xff1a;求乘法的逆元就是 n ^ (p-2), 我们平时乘以这个也是为了 #include<bits/stdc.h> using namespace std;#define int long long int n,p;int qw(int x,int num){int ans 1;while(num){if(num&1) ans ans * x % p;x x*x % p;num>>1;}return an…

SpringBoot的事务/调度/缓存/邮件发送和一些Spring知识点总结

目录 1、SpringBoot的事务管理 2、SpringBoot的异步任务 3、SpringBoot定时任务调度 4、SpringBoot整合Mail发送邮件 5、Spring框架中的Bean的作用域 6、Spring框架中的Bean的线程安全 7、 Spring框架中的Bean生命周期 8、Spring框架如何解决循环依赖&#xff1f; 9、…

深度相机与红外光相机+摄像头RTSP协议

0、绪论 一般而言&#xff0c;从深度信息的角度考虑相机&#xff0c;相机可以分为&#xff1a;单目&#xff0c;双目&#xff0c;RGB-D相机&#xff1b;单目或者双目相机都是通过被动的接收信息之后通过算法解算得到图片中的深度信息&#xff0c;​ RGB-D相机是主动式的&#…

将pytorch配置到jupyter里面(个人踩坑向)

一开始跟着大部分博主的创建一块虚拟环境和打开虚拟环境都应该没啥问题 这个就是创建一个python为3.6的环境&#xff08;你愿意创建啥环境就啥环境&#xff0c;但是3.6比较香&#xff0c;我之前傻不愣登的弄了个3.11&#xff08;想配套我自己的python&#xff09;人家说没有&am…

接口优化笔记

索引 添加索引 where条件的关键自动或者order by后面的排序字段可以添加索引加速查询 索引只能通过删除新增进行修改&#xff0c;无法直接修改。 # 查看表的索引 show index from table_name; show create table table_name; # 添加索引 alter table table_name add index …

回归预测|基于HGS-CNN-LSTM-Attention的数据回归预测Matlab程序 多特征输入单输出 含基础模型

回归预测|基于HGS-CNN-LSTM-Attention的数据回归预测Matlab程序 多特征输入单输出 含基础模型 文章目录 前言回归预测|基于HGS-CNN-LSTM-Attention的数据回归预测Matlab程序 多特征输入单输出 含基础模型 一、HGS-CNN-LSTM-Attention模型1. 模型组件概述1.1. 海鸥优化算法&…

日撸Java三百行(day24:二叉树的建立)

目录 一、分析准备 二、代码实现 1.方法创建 2.数据测试 3.完整的程序代码 总结 一、分析准备 在日撸Java三百行&#xff08;day22&#xff1a;二叉树的存储&#xff09;中&#xff0c;我们学习的是如何将链表二叉树转换为顺序表二叉树进行存储&#xff0c;而今天我们要…

厂家揭秘:劳保鞋里的防砸黑科技,这些材料你了解多少?

在工业生产的前沿阵地&#xff0c;安全生产始终是企业发展的基石&#xff0c;也是每一位劳动者的头等大事。在繁忙的生产线上&#xff0c;一双看似普通的劳保鞋&#xff0c;实则蕴含着保护我们双脚免受意外伤害的重要科技——防砸材料。今天&#xff0c;百华小编就来和大家盘点…

大模型RAG企业级项目实战:ChatDoc与文件聊天交互完整版代码

大模型RAG企业级项目实战&#xff1a;手把手带你搭建一套属于你的RAG系统 完整的 RAG 应用流程主要包含两个阶段&#xff1a; 数据准备阶段&#xff1a;&#xff08;1&#xff09;数据提取–> &#xff08;2&#xff09;分块&#xff08;Chunking&#xff09;–> &…

五、1 算数操作符位操作符

1、算数操作符 &#xff08;1&#xff09;“ / ”得到一个整数商&#xff0c;不包含余数 进行浮点数除法&#xff0c;操作符两端至少有一个浮点数 &#xff08;2&#xff09;“ % ”取模&#xff0c;得到余数 两端必须为整数 2、位操作符&#xff08;只适用于整型&#xff…

Linux 中的同步机制——rwsem

代码基于&#xff1a;Kernel 6.6 0. 前言 读写信号量的原理与读写锁类似&#xff0c;读写信号量归根到底是 “信号量”&#xff0c;读写锁归根到底是 “自旋锁”&#xff0c;而信号量与自旋锁的区别一个可以睡眠&#xff0c;一个只能自旋。 读写信号量原理&#xff1a; 允许…

Spring Data JPA 自动创建时间的相关注解和用法

以Springboot项目为例 在实体类上加上注解 EntityListeners(AuditingEntityListener.class)在相应的字段上添加对应的时间注解 LastModifiedDate 和 CreatedDateApplication启动类中添加注解 EnableJpaAuditing

动环监控是什么?没有它机房可能发生宕机风险!

在大数据时代&#xff0c;计算机和服务器管理着大量的数据&#xff0c;无论是十几平米的小机房&#xff0c;还是几千平米的大机房&#xff0c;一旦宕机&#xff0c;就可能造成最大损失。因此&#xff0c;利用动环监控系统去进行实时监测和统一管理&#xff0c;就成为了非常重要…

【Linux】Linux软件包管理器 yum 和 Linux编辑器vim

目录 1. Linux 软件包管理器 yum1.1 什么是软件包1.2 windows 机器和远端的 Linux 机器互传文件1.3 查看软件包1.4 安装软件1.5 卸载软件1.6 yum源 2. Linux编辑器-vim2.1 vim三大模式2.2 vim正常模式命令集2.2 vim底行模式命令集2.3 多文件 3. 简单vim配置3.1 配置文件的位置 …

YOLOv5 目标检测算法

简介&#xff1a; 目标检测在生活中应用领域非常广泛&#xff0c;列如&#xff1a;道路违规抓拍、未戴口罩识别、工地未佩戴安全帽抓拍、厨房出现老鼠检测。 还可以用在游戏辅助外挂。以枪战为例&#xff0c;在游戏过程中时刻检测有没有人头出现。当检测到目标人头&#xff0c;…

a标签下载文件重命名(download)不生效

项目场景&#xff1a; 移动端使用 a 标签下载文件 问题描述 下载的文件使用 download 重命名不生效 APP 中接收数据代码&#xff1a; const link document.createElement(a) // 创建a标签link.style.display none // 使其隐藏link.href http://192.168.103.1:8080/factory/v…