当前位置: 首页 > news >正文

机器学习探索性数据分析 (EDA)

机器学习探索性数据分析 (EDA)

探索性数据分析(Exploratory Data Analysis, EDA)是机器学习工作流中至关重要的一个步骤,通过深入分析和理解数据的结构、分布和相关性,EDA帮助揭示数据背后的故事,并为后续的建模提供有力支持。本文将通过具体代码实例和详尽的分析步骤,详细探讨EDA的关键要素和应用。


目录

  1. 📊 了解数据的基本结构:数据维度与基本信息
  2. 🔍 统计特征分析:均值、中位数、分位数等统计量的应用
  3. 📈 数据的分布分析:直方图与核密度估计(KDE)图
  4. 🔗 特征间的相关性分析:散点图与相关矩阵
  5. 🎨 拓展:数据的可视化与特征间关系的深入挖掘

1. 📊 了解数据的基本结构:数据维度与基本信息

在EDA的第一步,了解数据的基本结构是关键。这包括查看数据集的维度、每个特征的类型、缺失值情况以及基本的统计信息。通过这些步骤,可以快速获得数据的总体轮廓,帮助判断数据质量和分布情况。

示例代码:

# 导入必要的库
import pandas as pd# 读取数据集
df = pd.read_csv('your_dataset.csv')# 查看数据集的前几行
print("数据集前5行:\n", df.head())# 查看数据集的维度
print("数据集的维度:", df.shape)# 查看数据集的基本信息,包括每列的数据类型和缺失值
print("数据集的基本信息:")
df.info()# 查看数据集的统计信息
print("数据集的描述统计信息:\n", df.describe())

解释:

  • df.head() 展示数据集的前几行,帮助快速了解每个特征的取值。
  • df.shape 返回数据集的维度,包括行数和列数。
  • df.info() 输出数据集的每一列特征的类型以及缺失值的情况,对于确定哪些列需要进行处理(如填补缺失值)十分有帮助。
  • df.describe() 输出数值型数据的基本统计信息,包括均值、标准差、最小值和最大值等。

通过这些简单的步骤,可以快速掌握数据的整体概况,确定是否需要进一步的数据清理操作。


2. 🔍 统计特征分析:均值、中位数、分位数等统计量的应用

在了解了数据的基本结构之后,接下来可以通过统计特征分析进一步挖掘每个特征的分布特征。均值、中位数、标准差以及分位数等统计量可以帮助理解数据的中心趋势和离散程度,为后续的特征工程提供依据。

示例代码:

# 计算每个特征的均值
mean_values = df.mean()
print("每个特征的均值:\n", mean_values)# 计算每个特征的中位数
median_values = df.median()
print("每个特征的中位数:\n", median_values)# 计算每个特征的分位数
quantiles = df.quantile([0.25, 0.5, 0.75])
print("每个特征的分位数(25%, 50%, 75%):\n", quantiles)# 计算每个特征的标准差
std_values = df.std()
print("每个特征的标准差:\n", std_values)

解释:

  • df.mean() 计算每个数值型特征的均值,帮助理解数据的中心趋势。
  • df.median() 计算中位数,特别适用于非对称分布的数据,能够避免极值对均值的干扰。
  • df.quantile() 计算分位数,进一步揭示数据的分布特征,25%分位数、50%分位数(即中位数)和75%分位数展示了数据的上下四分位区间。
  • df.std() 计算标准差,度量数据的离散程度。标准差较大的特征表示其值的波动较大,反之则较为集中。

这些统计特征帮助判断数据的分布情况,例如是否存在明显的偏态分布、离群值,或者某些特征的离散程度是否异常。根据这些信息,可以对数据进行合理的处理,如去除极值、调整分布等。


3. 📈 数据的分布分析:直方图与核密度估计(KDE)图

在掌握了统计特征之后,数据的分布情况可以通过可视化手段进行直观展示。直方图和核密度估计(KDE)图是常用的两种方法,前者可以展示数据的离散性分布,后者则能够平滑地展示数据的概率密度。

示例代码:

# 导入可视化库
import matplotlib.pyplot as plt
import seaborn as sns# 绘制特征 'Feature1' 的直方图
plt.figure(figsize=(8, 6))
sns.histplot(df['Feature1'], bins=30, kde=False)
plt.title("特征 'Feature1' 的直方图")
plt.xlabel('值')
plt.ylabel('频率')
plt.show()# 绘制特征 'Feature2' 的核密度估计(KDE)图
plt.figure(figsize=(8, 6))
sns.kdeplot(df['Feature2'], shade=True)
plt.title("特征 'Feature2' 的核密度估计图")
plt.xlabel('值')
plt.ylabel('概率密度')
plt.show()

解释:

  • sns.histplot() 绘制直方图,通过设定bins参数控制直方的分箱数,能够直观地展示某个特征的分布频率。
  • sns.kdeplot() 绘制核密度估计图,展示数据的概率密度,能够更平滑地揭示特征的分布趋势。

通过这些可视化图表,可以快速发现数据是否存在偏态分布、是否集中在某个区间,以及是否存在异常值。例如,右偏或左偏的分布可能提示需要对数据进行对数变换或其他处理。


4. 🔗 特征间的相关性分析:散点图与相关矩阵

在数据分析中,不仅需要关注单个特征的分布,还需要理解特征之间的相互关系。特征间的相关性是建模时需要考虑的一个重要因素,相关性过高的特征可能会导致多重共线性,而没有相关性的特征则可能不具备预测能力。通过散点图和相关矩阵,可以有效发现特征间的关系。

示例代码:

# 绘制特征 'Feature1' 和 'Feature2' 之间的散点图
plt.figure(figsize=(8, 6))
sns.scatterplot(x=df['Feature1'], y=df['Feature2'])
plt.title("特征 'Feature1' 和 'Feature2' 之间的散点图")
plt.xlabel('Feature1')
plt.ylabel('Feature2')
plt.show()# 计算相关矩阵
correlation_matrix = df.corr()# 绘制相关矩阵的热力图
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', fmt='.2f')
plt.title("特征间的相关性矩阵热力图")
plt.show()

解释:

  • sns.scatterplot() 用于绘制两个特征之间的散点图,展示它们之间的相互关系。例如,线性关系可能提示它们之间存在一定的相关性。
  • df.corr() 计算数据集中所有特征之间的相关系数矩阵,相关系数的范围是[-1, 1],正值表示正相关,负值表示负相关,值接近0则表示无相关性。
  • sns.heatmap() 用热力图展示相关矩阵,其中annot=True用于显示每个相关系数的具体数值,cmap='coolwarm'用于设置热力图的配色方案。

通过散点图和相关矩阵,可以识别出特征间的强相关性,例如某些高度相关的特征可能是冗余的,可以在建模时进行降维处理(如使用PCA)。而对于相关性较低的特征,则可以考虑是否有必要进行特征工程以增强它们的预测能力。


5. 🎨 拓展:数据的可视化与特征间关系的深入挖掘

在基础的EDA之后,进一步的分析可以通过更多的可视化手段和数据挖掘技巧来实现。例如,成对特征的关系可以通过成对图(

pairplot)来展示,时间序列数据可以绘制趋势图,分类特征可以通过箱线图、条形图等进行分析。通过这些工具,可以更全面地理解数据。

成对图(Pairplot)示例代码:

# 绘制成对特征的关系图(pairplot)
sns.pairplot(df[['Feature1', 'Feature2', 'Feature3']])
plt.show()

时间序列数据分析示例代码:

# 假设 'Date' 是时间序列列,'Sales' 是目标特征
df['Date'] = pd.to_datetime(df['Date'])# 按时间绘制 'Sales' 特征的趋势图
plt.figure(figsize=(10, 6))
plt.plot(df['Date'], df['Sales'], label='Sales over time')
plt.title("时间序列数据趋势图")
plt.xlabel('日期')
plt.ylabel('销售额')
plt.legend()
plt.show()

通过这些深入的分析,可以揭示特征间更为复杂的关系,并为后续的特征工程和模型选择提供有力支持。数据的可视化不仅能够帮助理解特征分布和关系,还能够有效识别数据中的异常模式和特征工程的潜力。


相关文章:

机器学习探索性数据分析 (EDA)

机器学习探索性数据分析 (EDA) 探索性数据分析(Exploratory Data Analysis, EDA)是机器学习工作流中至关重要的一个步骤,通过深入分析和理解数据的结构、分布和相关性,EDA帮助揭示数据背后的故事,并为后续的建模提供有…...

【K8S系列】Kubernetes pod节点Pending或CrashLoopBackOff 问题及解决方案详解【已解决】

在 Kubernetes 中,Pod 是最小的可调度单元,负责运行容器。当 Pod 的状态显示为 Pending 或 CrashLoopBackOff 时,意味着它无法成功启动或持续崩溃。本文将详细分析这两种状态的原因、排查步骤、执行后的结果及相应的解决方案。 一、Pod 状态概…...

【Redis】Zset类型常用命令

文章目录 一. Zset有序集合简介.二. 添加元素相关命令.2.1 向有序集合中添加元素(zadd) 三. 查询元素相关操作.3.1 查询有序集合中的元素个数( zcard zcount)3.2 查询指定区间内的元素(zrange zrevrange zrangebyscore)3.3 查询有序集合中指定成员的排名(zrank zrevrank )3.4 查…...

js中map,filter,find,foreach的用法介绍

js中map,filter,find,foreach的用法介绍 在 JavaScript 中,数组提供了一些常用的迭代方法,如 map、filter、find 和 forEach,这些方法允许你对数组中的每个元素进行操作,下面是它们的用法和区别…...

Linux 重置 root 密码

如果您在Linux系统中忘记了root密码,可以按照以下步骤重置: 重启系统。在启动时,当GRUB菜单出现时,选择要启动的内核版本,然后按 e 键编辑启动选项。找到以linux或linux16开头的行,它包含了启动内核的命令…...

【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的停车场管理系统

开题报告 随着城市化进程不断加快,汽车保有量持续增长,城市停车问题日益凸显,传统停车场管理手段面临着诸多挑战,诸如管理效率低、人工成本高、信息更新滞后、收费不透明等问题。鉴于此,基于 Web 的智能停车场管理系统…...

博睿数据首届“观测先锋 · 2024 可观测平台创新应用案例大赛”现已启动!

大赛报名火热进行中! 在当今这个数字化、智能化的时代,可观测性技术已经成为企业IT架构中不可或缺的一部分。它能够帮助企业实时监控系统的运行状态,及时发现并解决潜在问题,从而确保业务的稳定性和连续性。博睿数据一体化智能可观…...

笔记:SOME/IP-SD报文中的TTL

问:SOME/IP-SD报文中有几个参数名字都叫的TTL,请问它们有什么不同? 答:在SOME/IP Service Discovery (SOME/IP-SD)协议中,确实有多个与TTL(Time-To-Live)相关的参数,但它们的含义不…...

9.存储过程安全性博客大纲(9/10)

存储过程安全性博客大纲 引言 在数据库系统中,存储过程是一种预先编写好的SQL代码集合,它被保存在数据库服务器上,可以通过指定的名称来调用执行。存储过程可以包含一系列的控制流语句,如IF条件语句、WHILE循环等,使…...

android 打包成aar

1 先建立的空白新工程(不能有activity,直接建立No Activity的项目就行) 2 建立新library 3 填写自己的内容 4 5 如果代码有红色提示的错误,会提示打包失败,修改红色的错误提示就行...

服务器和中转机在网络安全方面

服务器和中转机(代理服务器)在网络安全方面扮演着不同的角色,各自承担着保护网络资源和控制网络访问的重要职责。 它们在网络安全方面的主要作用: 服务器在网络安全中的角色 1.服务保护: 服务器通常运行着各种网络…...

解决“无法从 System.String 强制转换或转换为 Class 对象”错误

解决“无法从 System.String 强制转换或转换为 Class 对象”错误 在进行 API 自动化时,我必须反序列化响应以解析 API 响应数据。我们使用 Newtonsoft.Json NuGet 来实现这一点。 我在反序列化过程中遇到以下错误 - Newtonsoft.Json.JsonSerializationExceptionH…...

Git:LF will be replaced by CRLF、pytest PermissionError以及Git应用中的一些问题解决及一些使用技巧

一、Git:LF will be replaced by CRLF和pytest: --cov NTERNALERROR PermissionError 1. git warning: LF will be replaced by CRLF in ***file 偶然git add在进行代码提交的时候碰到警告warning: LF will be replaced by CRLF in ***file,原因是编辑的代码内容中…...

云原生之运维监控实践-使用taosKeeper与TDinsight实现对TDengine服务的监测告警

背景 如果没有监控,那么最好的情况是没有问题发生,最糟糕的情况则是问题发生了但没有被发现。——《Prometheus监控实战》 在10月10日收到了 TDengine 官方微信公众号的一条推送,摘要如下: 今天(2024年10月10日)我们非常高兴地宣布…...

前端js,vue系统使用iframe嵌入第三方系统的父子系统的通信

前端js,vue系统使用iframe嵌入第三方系统的父子系统的通信 1,父子系统之间的通信问题 父系统给子系统传值可通过postMessage方式进行通信,postMessage(“传递的数据”,url) 1.1 父系统给子系统的传值 let iframe document.getElementById(childFrame); let o1 {…...

树莓派刷入OpenWrt后扩容overlay的方法

问题: 128G的SD卡刷入openwrt后发现可用空间不足100M(我用的squashfs固件,ext4也存在同样的问题,但能否用此方法需要自己尝试一下)。 rootOpenWrt:~# df -h Filesystem Size Used Available Use%…...

【JS】Node.js读取execle表格中的数据

在Node.js中读取.xlsx格式的Excel文件,可以使用xlsx库。这个库非常流行且易于使用。下面是一个基本示例,展示如何使用xlsx库读取.xlsx文件中的数据。 首先,你需要安装xlsx库。你可以使用npm来安装: npm install xlsx然后&#x…...

怎么为pdf文件设置密码?几种PDF文件设置密码的方法推荐

怎么为pdf文件设置密码?设置PDF文件密码,正是应对这一挑战的有效手段之一。通过为PDF文件设置密码,我们能够为文档加上一道安全锁,确保只有掌握密码的用户才能打开和查看文件内容。这一措施不仅保护了文档的隐私性,还防…...

Rust : FnOnce、线程池与多策略执行

一、问题&#xff1a;mpsc如何发送各类不同的函数&#xff1f; 3个关键词&#xff1a;闭包、Box与FnOnce&#xff1b;请细品。 use std::sync::{mpsc,Arc,Mutex}; use std::thread; fn process<F>(old:f32,name:String,f:F) where F: FnOnce(f32,String) {f(old,name);…...

一个汉字占几个字节、JS中如何获得一个字符串占用多少字节?

浅浅记录 一个汉字占几个字节&#xff1f;JS中如何获得一个字符串占用多少字节&#xff1f; 一个汉字占几个字节&#xff1f; GBK编码&#xff1a;一个汉字、中文字符都是占2个字节&#xff0c;英文字符占1个字节 UTF-8编码&#xff1a;一个汉字、中文字符都是占3个字节&#…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...