Python机器学习:数据预处理与清洗的打开方式

news2024/10/1 12:42:47

Python机器学习:数据预处理与清洗的打开方式

目录

  1. 📊 数据采集与存储
    • 使用Pandas读取数据(CSV、Excel、数据库)
  2. 🧹 数据清洗
    • 处理缺失值(填充、删除)
    • 异常值检测与处理
  3. ⚙️ 特征工程
    • 特征选择(相关性分析、方差阈值)
    • 特征缩放(标准化、归一化)
    • 类别变量编码(独热编码、标签编码)

1. 📊 数据采集与存储

在机器学习的过程中,数据是核心要素。数据采集和存储是数据预处理的重要步骤。Python中的Pandas库提供了多种读取数据的方式,包括CSV、Excel以及数据库等,能够高效地处理各种格式的数据。

使用Pandas读取数据(CSV、Excel、数据库)

首先,CSV(逗号分隔值)文件是一种常见的数据存储格式,通常用于存储结构化数据。通过Pandas的read_csv函数,可以快速加载CSV文件中的数据。

import pandas as pd

# 读取CSV文件
df_csv = pd.read_csv('data.csv')

# 查看数据的前五行
print(df_csv.head())

在读取CSV文件时,Pandas还支持多种参数设置,例如指定分隔符、处理缺失值等,用户可以根据需求进行调整。

对于Excel文件,Pandas提供了read_excel函数,能够直接读取指定工作表的数据。这使得处理Excel文件变得十分方便。

# 读取Excel文件
df_excel = pd.read_excel('data.xlsx', sheet_name='Sheet1')

# 查看数据的前五行
print(df_excel.head())

此外,Pandas也可以连接到数据库,读取数据。例如,使用SQLAlchemy库与SQLite数据库进行连接,可以使用read_sql函数直接查询数据。

from sqlalchemy import create_engine

# 创建数据库连接
engine = create_engine('sqlite:///database.db')

# 读取数据库中的数据
df_sql = pd.read_sql('SELECT * FROM table_name', con=engine)

# 查看数据的前五行
print(df_sql.head())

通过上述方式,Pandas提供了强大的数据读取能力,为后续的数据清洗与处理奠定基础。

2. 🧹 数据清洗

数据清洗是机器学习流程中必不可少的环节,其主要目标是确保数据的质量与一致性。这包括处理缺失值、检测与处理异常值等。

处理缺失值(填充、删除)

缺失值是数据集中常见的问题,它可能导致模型性能下降或错误。Pandas提供了灵活的方式来处理缺失值,包括填充和删除。

使用isnull方法可以快速识别缺失值。接下来,可以选择使用fillna进行填充或dropna进行删除。

# 检查缺失值
print(df.isnull().sum())

# 填充缺失值
df_filled = df.fillna(df.mean())  # 用均值填充

# 删除包含缺失值的行
df_dropped = df.dropna()

选择填充还是删除取决于具体场景。如果数据缺失较少且随机分布,删除可能是可行的。但如果缺失值较多,填充可能是更好的选择。

异常值检测与处理

异常值是指明显偏离其他数据点的观测值,这些值可能源自测量误差或数据录入错误。检测异常值的常用方法是使用IQR(四分位距)或Z-score。

# 计算IQR
Q1 = df['column'].quantile(0.25)
Q3 = df['column'].quantile(0.75)
IQR = Q3 - Q1

# 定义异常值的上下限
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

# 筛选异常值
outliers = df[(df['column'] < lower_bound) | (df['column'] > upper_bound)]

处理异常值的方式可以是将其删除、替换或进行修正,具体策略应根据数据集的特征和分析目标而定。

3. ⚙️ 特征工程

特征工程是在机器学习中极为关键的步骤,它直接影响模型的性能。特征工程主要包括特征选择、特征缩放和类别变量编码。

特征选择(相关性分析、方差阈值)

特征选择的目的是选择对模型性能贡献最大的特征。相关性分析是常用的特征选择方法之一,可以通过计算特征之间的相关性来判断其重要性。

# 计算相关性矩阵
correlation_matrix = df.corr()

# 可视化相关性矩阵
import seaborn as sns
import matplotlib.pyplot as plt

plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, fmt=".2f", cmap='coolwarm')
plt.show()

此外,方差阈值也可以用来选择特征。特征的方差过小可能意味着该特征对模型贡献不大,因此可以考虑去除。

from sklearn.feature_selection import VarianceThreshold

# 设置方差阈值
selector = VarianceThreshold(threshold=0.1)  # 方差小于0.1的特征将被移除
df_reduced = selector.fit_transform(df)

特征缩放(标准化、归一化)

特征缩放是对特征值进行调整,使其处于相似的范围内。这在许多机器学习算法中是必要的,尤其是基于距离的算法,如KNN和SVM。

标准化是将特征值转换为均值为0,标准差为1的分布。可以使用StandardScaler实现:

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
df_standardized = scaler.fit_transform(df)

归一化是将特征值缩放到[0, 1]区间,适用于特征值范围差异较大的情况。可以使用MinMaxScaler实现:

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
df_normalized = scaler.fit_transform(df)

类别变量编码(独热编码、标签编码)

在机器学习中,模型通常不能直接处理分类数据,因此需要将其编码。标签编码是将类别值转换为整数,而独热编码则将每个类别转换为二进制向量。

# 标签编码
from sklearn.preprocessing import LabelEncoder

label_encoder = LabelEncoder()
df['category_encoded'] = label_encoder.fit_transform(df['category'])

# 独热编码
df_onehot = pd.get_dummies(df, columns=['category'], drop_first=True)

通过以上方法,可以有效地对数据进行预处理与清洗,为后续的机器学习建模提供高质量的数据支持。

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

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

相关文章

Win10鼠标总是频繁自动失去焦点-非常有效-重启之后立竿见影

针对Win10鼠标频繁自动失去焦点的问题&#xff0c;可以尝试以下解决方案&#xff1a; 一、修改注册表&#xff08;最有效的方法-重启之后立竿见影&#xff09; 打开注册表编辑器&#xff1a; 按下WindowsR组合键&#xff0c;打开运行窗口。在运行窗口中输入“regedit”&#x…

什么是reactor以及其三种版本

写在前面 本文来看下什么是reactor以及其三种版本。 1&#xff1a;什么是reactor以及其三种版本 为了更好的理解什么是reactor&#xff0c;我们结合现实生活中的例子来看下。 翠花是个貌美如花的姑娘&#xff0c;人称赛东施&#xff0c;她的梦想是嫁给王子&#xff0c;可是天…

【机器学习-无监督学习】降维与主成分分析

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科&#xff0c;通过算法和模型让计算机从数据中学习&#xff0c;进行模型训练和优化&#xff0c;做出预测、分类和决策支持。Python成为机器学习的首选语言&#xff0c;…

揭秘帕金森病:多因素交织下的“沉默杀手”

在老年人群中&#xff0c;帕金森病如同一位“沉默的杀手”&#xff0c;悄然侵袭着无数人的生活。它以其独特的静止性震颤、运动迟缓、肌强直和姿势平衡障碍等症状&#xff0c;让患者的生活质量大打折扣。那么&#xff0c;帕金森病究竟是如何得的呢&#xff1f;本文将带您深入探…

基于Springboot+Vue的基于协同过滤算法的个性化音乐推荐系统 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统中…

Android 13.0 系统wifi列表显示已连接但无法访问网络问题解决

1.前言 在13.0的系统rom产品定制化开发中,在wifi模块也很重要,但是在某些情况下对于一些wifi连接成功后,确显示已连接成功,但是无法访问互联网 的情况,所以实际上这时可以正常上网的,就是显示的不正常,所以就需要分析连接流程然后解决问题 如图所示: 2.系统wifi列表显示…

【Spring Boot 入门三】Spring Boot与数据库集成 - 构建数据驱动的应用

一、引言 在之前的文章中&#xff0c;我们已经对Spring Boot有了初步的认识&#xff0c;了解了如何构建第一个Spring Boot应用&#xff0c;以及如何通过配置文件来掌控应用的设置。这些知识为我们进一步探索Spring Boot与数据库的集成奠定了坚实的基础。 数据库是现代应用的核…

QSqlDatabase在多线程中的使用

Qt中多线程使用数据库_qt数据库管理类支持多数据库,多线程-CSDN博客 1. 代码&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> #include <QSqlDatabase> #include <QSqlQuery> #include <QSqlError>…

【原创】基于websocket的实时文本转语音功能

功能实现&#xff0c;将长文本分段实时转成音频流&#xff0c;达到边转换边播放的效果&#xff0c;减少等待效果&#xff0c;像豆包通义千问chatgpt差不多也是这样实现的&#xff0c; 下面的效果展示 20240930_084035_哔哩哔哩_bilibili【原创】基于websocket的实时文本转语音…

Java 每日一刊(第18期):集合

文章目录 前言1. Java 集合框架概述1.1 Java 集合框架的定义和意义1.2 Java 集合框架的历史演进1.3 集合框架的基本组成部分1.4 Java 集合的优势1.5 Java 集合与数组的区别与关系 2. Java 集合框架的核心接口2.1 Collection 接口2.2 List 接口2.3 Set 接口2.4 Queue 接口2.5 Ma…

无人机在科研与教育领域的应用!

一、无人机在科研领域的应用 地理测绘与遥感&#xff1a; 无人机可以搭载相机或激光雷达等传感器&#xff0c;进行高分辨率的航拍&#xff0c;用于制作数字地形模型、生态环境监测、土地利用规划等。 在地理信息获取、地质勘察等领域&#xff0c;无人机能够高效地完成测量任…

Java中正则表达式(完整详解,附有案例+代码)

文章目录 三十三.正则表达式33.1 概述33.2 Test 三十三.正则表达式 33.1 概述 字符类 [abc]a、b 或 c&#xff08;简单类&#xff09;[^abc]任何字符&#xff0c;除了 a、b 或 c&#xff08;否定&#xff09;[a-zA-Z]a 到 z 或 A 到 Z&#xff0c;两头的字母包括在内&#x…

MQTT--EMQX入门+MQTTX使用

目录 1、什么是EMQX&#xff1f;1.1 EMQX介绍1.2 EMQX特点1.3 与物联网之间的关系以及主要的产品主要的产品 2、安装启动2.1 基本命令2.2 目录结构 3、MQTTX客户端3.1 连接配置 总结PS: 1、什么是EMQX&#xff1f; 首先你得有MQTT的知识&#xff0c;不认识MQTT的小伙伴可以先看…

JMeter对jdbc request以及foreach和loop controller的使用

Jmeter中jdbc request和foreach控制器 1. 使用variable name实现对数据库查询结果的遍历 在foreach controller中&#xff0c;注意要做variable name的关联(correlation), 否则没法取回这里的jdbc request返回的结果。这里的input variable prefix一定要和jdbc request中的var…

十七、触发器

文章目录 0. 引入1. 触发器概述2. 触发器的创建2.1 触发器的创建2.2 代码举例 3. 查看、删除触发器3.1 查看触发器3.2 删除触发器 4. 触发器的优缺点4.1 优点4.2 缺点4.3 注意点 0. 引入 在实际开发中&#xff0c;我们经常会遇到这样的情况&#xff1a;有 2 个或者多个相互关联…

《蓝桥杯算法入门》(C/C++、Java、Python三个版本)24年10月出版

推荐&#xff1a;《算法竞赛》&#xff0c;算法竞赛大全书&#xff0c;网购&#xff1a;京东 天猫  当当 文章目录 《蓝桥杯算法入门》内容简介本书读者对象作者简介联系与交流《蓝桥杯算法入门 C/C》版目录 《蓝桥杯算法入门 Java》版目录 《蓝桥杯算法入门 Python》版目录 …

vscode 连接服务器 不用输密码 免密登录

vscode 免密登录服务器 1. 本地端1&#xff09;生成密钥2&#xff09;vscode的config文件中添加id_rsa文件路径 2. 服务器端1&#xff09;在 authorized_keys 文件中加入密钥&#xff1a;2&#xff09;修改authorized_keys文件权限 1. 本地端 1&#xff09;生成密钥 在命令行…

【hot100-java】【二叉树的层序遍历】

二叉树 BFS 队列实现 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right)…

力扣(leetcode)每日一题 1845 座位预约管理系统| treeSet和priority Queue的区别|线段树

之前发过一篇&#xff0c;感觉还有深挖的地方&#xff0c;于是又补充一些信息 这题目虽然是middle难度题目&#xff0c;要解答出来是只要easy的时间&#xff0c;但是深挖可以有hard的难度 题解1 可以帮助复习线段树的使用&#xff0c;题解2 可以复习一下java基础知识 题解1 线…

免费送源码:Java+ssm+MySQL springboot健康医疗系统 计算机毕业设计原创定制

摘 要 随着我国经济迅速发展&#xff0c;人们对医疗管理的需求越来越大&#xff0c;各种健康医疗系统也都在被广泛应用&#xff0c;对于医疗管理的各种软件也是备受用户的喜爱&#xff0c;健康医疗系统被用户普遍使用&#xff0c;为方便用户能够可以随时进行健康医疗系统的数据…