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

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

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 pltplt.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 StandardScalerscaler = StandardScaler()
df_standardized = scaler.fit_transform(df)

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

from sklearn.preprocessing import MinMaxScalerscaler = MinMaxScaler()
df_normalized = scaler.fit_transform(df)

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

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

# 标签编码
from sklearn.preprocessing import LabelEncoderlabel_encoder = LabelEncoder()
df['category_encoded'] = label_encoder.fit_transform(df['category'])# 独热编码
df_onehot = pd.get_dummies(df, columns=['category'], drop_first=True)

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

相关文章:

  • 【羊毛资源】华为云开发者云主机免费申请使用指南
  • 线程池:线程池的实现 | 日志
  • 【机器学习(七)】分类和回归任务-K-近邻 (KNN)算法-Sentosa_DSML社区版
  • uniapp微信小程序,获取上一页面路由
  • YOLO11震撼发布!
  • 服装时尚与动漫游戏的跨界联动:创新运营与策划策略研究
  • erlang学习:Linux命令学习8
  • 完整网络模型训练(一)
  • 思科dhcp的配置
  • Elasticsearch学习笔记(3)
  • C++:一文搞懂友元类(friend class)
  • SpringMVC源码-AbstractHandlerMethodMapping处理器映射器将@Controller修饰类方法存储到处理器映射器
  • uniapp中uni.request的统一封装 (ts版)
  • 【易上手快捷开发新框架技术】用Flet从零开始分步骤循序渐进编程实现购物清单助手手机应用app示例掰烂嚼碎深度讲解源代码IDE运行和调试通过截图为证
  • 低代码可视化-UniApp二维码可视化-代码生成器
  • [LeetCode] Wiggle Sort
  • Android 架构优化~MVP 架构改造
  • CSS实用技巧干货
  • extjs4学习之配置
  • Java 最常见的 200+ 面试题:面试必备
  • Redis 懒删除(lazy free)简史
  • SegmentFault 2015 Top Rank
  • XForms - 更强大的Form
  • 基于HAProxy的高性能缓存服务器nuster
  • 理清楚Vue的结构
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 2017年360最后一道编程题
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • ​油烟净化器电源安全,保障健康餐饮生活
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • #git 问题failed to resolve head as a valid ref
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (09)Hive——CTE 公共表达式
  • (1)Android开发优化---------UI优化
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (八)c52学习之旅-中断实验
  • (九)c52学习之旅-定时器
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (四)Linux Shell编程——输入输出重定向
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)母版页和相对路径
  • (转载)虚函数剖析
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .Net Memory Profiler的使用举例
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • [100天算法】-目标和(day 79)
  • [20170713] 无法访问SQL Server
  • [C#]OpenCvSharp结合yolov8-face实现L2CS-Net眼睛注视方向估计或者人脸朝向估计
  • [docker] Docker容器服务更新与发现之consul