数据清洗与预处理:从网页中提取的数据处理技术

目录

引言

一、数据清洗与预处理概述

1.1 数据清洗的定义

1.2 数据清洗的重要性

二、数据清洗与预处理的步骤

2.1 数据获取

2.2 数据去重

2.3 缺失值处理

2.4 异常值处理

2.5 数据格式化与标准化

2.6 数据转换与编码

2.7 数据整合与关联

2.8 数据可视化

三、技术方法与代码示例

3.1 数据获取示例

3.2 数据去重示例

3.3 缺失值处理示例

3.5 数据转换与编码示例

3.6 数据可视化示例

四、案例实践

4.1 案例背景

4.2 数据获取

4.3 数据清洗与预处理

4.3.1 数据读取

4.3.2 数据去重

4.3.3 缺失值处理

4.3.4 异常值处理

4.3.5 数据格式化与标准化

4.3.6 数据转换与编码

4.3.7 数据可视化

五、总结与展望


引言

在当今数据驱动的时代,数据的质量和准确性对于数据分析、机器学习和数据挖掘至关重要。然而,从网页中提取的数据往往存在诸多问题,如格式不统一、重复数据、缺失值、异常值等。因此,数据清洗与预处理成为数据处理流程中不可或缺的一环。本文将从数据清洗的定义、重要性、具体步骤、技术方法、案例实践以及代码示例等方面详细探讨如何从网页中提取数据进行清洗、格式化、去重等预处理操作,为新手朋友提供全面的指导。

一、数据清洗与预处理概述

1.1 数据清洗的定义

数据清洗(Data Cleaning)是指对原始数据进行检查、校验、转换或重新格式化,以消除错误、重复、不一致等问题,提高数据质量的过程。它包括对数据的去重、缺失值处理、异常值检测与处理、格式转换等多个方面。

1.2 数据清洗的重要性

数据质量直接影响数据分析结果的准确性和有效性。不干净的数据会导致模型性能下降、决策失误、资源浪费等严重后果。因此,数据清洗是数据分析、数据挖掘和机器学习的基础,也是保证数据质量的关键步骤。

二、数据清洗与预处理的步骤

2.1 数据获取

数据清洗的第一步是获取数据。从网页中提取数据通常使用网络爬虫技术,如Python的requests和BeautifulSoup库,或者Scrapy等框架。在获取数据时,需要注意遵守网站的使用条款,尊重数据隐私和版权。

2.2 数据去重

数据去重是去除数据中的重复记录,以确保数据的唯一性。常用的去重方法包括基于哈希表的去重、使用数据库的唯一索引去重等。在Python中,可以使用Pandas库的drop_duplicates()方法轻松实现数据去重。

2.3 缺失值处理

缺失值是数据清洗中常见的问题之一。处理缺失值的方法主要有删除、填充和预测三种。删除法直接删除含有缺失值的行或列,但可能会导致数据失真;填充法使用均值、中位数、众数等统计量或插值方法填充缺失值;预测法则利用其他特征预测缺失值,常用机器学习算法如线性回归、决策树等。

2.4 异常值处理

异常值是指与其他观测值显著不同的观测值,可能是由于测量错误、录入错误或特殊情况导致。处理异常值的方法包括删除、修正或标记为特殊值。常用的检测异常值的方法有Z分数法、IQR(四分位距)法等。

2.5 数据格式化与标准化

数据格式化和标准化是将数据转换为统一格式,以便于后续分析和建模。这包括日期、时间、货币、单位等转换和统一化处理。此外,数据标准化和归一化也是常用的数据处理方法,用于消除不同特征之间的量纲影响,提高模型的收敛速度。

2.6 数据转换与编码

数据转换是将原始数据转换为更适合建模的形式,如将分类变量转换为数值型变量。常用的编码方法包括独热编码(One-Hot Encoding)、标签编码(Label Encoding)等。这些转换有助于机器学习算法处理数据。

2.7 数据整合与关联

如果数据来自多个来源,需要将这些数据源进行整合和关联,以生成更全面的视图或进行更深入的分析。这包括数据合并、数据链接和数据关联等操作。

2.8 数据可视化

数据可视化是通过图表、图形或报告等方式将整理后的数据可视化呈现,以便更直观地理解和传达数据的含义。常用的可视化工具包括Matplotlib、Seaborn、Tableau等。

三、技术方法与代码示例

3.1 数据获取示例

使用Python的requests和BeautifulSoup库从网页中提取数据的基本步骤如下:

import requests  
from bs4 import BeautifulSoup  # 发送HTTP请求获取网页内容  
url = 'https://example.com'  # 替换为目标网页的URL  
response = requests.get(url)  # 解析网页内容  
soup = BeautifulSoup(response.text, 'html.parser')  # 提取所需数据  
# 假设目标数据在class为"target-class"的所有<div>元素中  
data_list = []  
target_divs = soup.find_all('div', class_='target-class')  
for div in target_divs:  data = div.text.strip()  # 做适当的文本清洗处理  data_list.append(data)  # 打印提取的数据  
for data in data_list:  print(data)

3.2 数据去重示例

使用Pandas库的drop_duplicates()方法去重:

import pandas as pd  # 假设df是已经加载到Pandas DataFrame中的数据  
# 去重,保留第一个出现的重复项  
df.drop_duplicates(subset=['某个列名'], keep='first', inplace=True)  # 或者,如果需要删除所有重复项,则不设置keep参数  
df.drop_duplicates(subset=['某个列名'], inplace=True)

3.3 缺失值处理示例

使用Pandas的fillna()方法填充缺失值:python

# 使用均值填充缺失值  
df['某个列名'].fillna(df['某个列名'].mean(), inplace=True)  # 或者使用中位数、众数等  
df['某个列名'].fillna(df['某个列名'].median(), inplace=True)  
df['某个列名'].fillna(df['某个列名'].mode()[0], inplace=True)
3.4 异常值处理示例
使用IQR(四分位距)法检测并处理异常值:python
Q1 = df['某个列名'].quantile(0.25)  
Q3 = df['某个列名'].quantile(0.75)  
IQR = Q3 - Q1  # 定义异常值的范围  
lower_bound = Q1 - 1.5 * IQR  
upper_bound = Q3 + 1.5 * IQR  # 删除异常值  
df = df[(df['某个列名'] >= lower_bound) & (df['某个列名'] <= upper_bound)]  # 或者,可以选择将异常值替换为某个值,如均值或中位数  
df['某个列名'].loc[df['某个列名'] < lower_bound] = df['某个列名'].mean()  
df['某个列名'].loc[df['某个列名'] > upper_bound] = df['某个列名'].mean()


3.5 数据转换与编码示例

使用Pandas的get_dummies()方法进行独热编码:

# 假设df['类别']是需要进行独热编码的列  
df_encoded = pd.get_dummies(df, columns=['类别'])
使用Scikit-learn的LabelEncoder进行标签编码:python
from sklearn.preprocessing import LabelEncoder  # 假设df['类别']是需要进行标签编码的列  
le = LabelEncoder()  
df['类别_encoded'] = le.fit_transform(df['类别'])

3.6 数据可视化示例

使用Matplotlib绘制柱状图展示数据分布:

import matplotlib.pyplot as plt  # 假设df['某个列名']是需要可视化的数据  
plt.figure(figsize=(10, 6))  
plt.bar(df['某个列名'].index, df['某个列名'].values)  
plt.xlabel('索引')  
plt.ylabel('值')  
plt.title('某个列名的数据分布')  
plt.show()

四、案例实践

4.1 案例背景

假设我们需要从某电商网站的商品页面上提取商品信息,包括商品名称、价格、销量等,并进行数据清洗和预处理,以便后续进行数据分析或机器学习建模。

4.2 数据获取

使用网络爬虫技术从电商网站提取商品信息,保存为CSV文件。

4.3 数据清洗与预处理

4.3.1 数据读取

使用Pandas读取CSV文件:
df = pd.read_csv('商品信息.csv')

4.3.2 数据去重

根据商品ID去重:
df.drop_duplicates(subset=['商品ID'], inplace=True)

4.3.3 缺失值处理

对价格、销量等缺失值进行填充:

# 使用均值填充价格缺失值  
df['价格'].fillna(df['价格'].mean(), inplace=True)  # 销量缺失值填充为0(假设没有销量的商品销量为0)  
df['销量'].fillna(0, inplace=True)
4.3.4 异常值处理

检测并处理价格、销量等异常值:

# 假设价格异常值处理  
Q1_price = df['价格'].quantile(0.25)  
Q3_price = df['价格'].quantile(0.75)  
IQR_price = Q3_price - Q1_price  # 定义价格异常值的范围  
lower_bound_price = Q1_price - 1.5 * IQR_price  
upper_bound_price = Q3_price + 1.5 * IQR_price  # 替换异常值,这里我们选择将异常值替换为上下界值,或根据具体情况处理  
df['价格'].loc[df['价格'] < lower_bound_price] = lower_bound_price  
df['价格'].loc[df['价格'] > upper_bound_price] = upper_bound_price  # 销量异常值处理可能较为简单,因为销量理论上不会低于0,且极高值可能是真实的(如爆款商品)  
# 但如果确定有异常高值,也可进行类似处理
4.3.5 数据格式化与标准化

对价格进行格式化(例如,转换为浮点数,去除货币符号等),并进行标准化处理(如果后续需要进行机器学习建模):

# 格式化价格,去除货币符号等(假设价格字段中已没有货币符号)  
# 如果存在货币符号,可使用正则表达式去除  
df['价格'] = df['价格'].astype(float)  # 标准化处理(可选,根据后续分析需求)  
from sklearn.preprocessing import StandardScaler  scaler = StandardScaler()  
df['价格_scaled'] = scaler.fit_transform(df[['价格']])  # 注意:这里使用了reshape(-1, 1)是因为fit_transform期望的是二维数组
4.3.6 数据转换与编码

如果商品类别是文本数据,且后续分析需要将其作为特征,则需要进行编码:

# 假设df['类别']是需要进行独热编码的列  
df_encoded = pd.get_dummies(df, columns=['类别'])  # 或者,如果类别数量不多,也可以选择标签编码  
# le = LabelEncoder()  
# df['类别_encoded'] = le.fit_transform(df['类别'])
4.3.7 数据可视化

对数据进行可视化,以便直观地了解数据的分布和特性:

# 绘制价格分布的直方图  
plt.figure(figsize=(10, 6))  
plt.hist(df['价格'], bins=30, alpha=0.7, color='blue')  
plt.xlabel('价格')  
plt.ylabel('频率')  
plt.title('商品价格分布')  
plt.show()  # 绘制销量分布的箱线图,检查异常值  
plt.figure(figsize=(10, 6))  
plt.boxplot(df['销量'], vert=False)  # vert=False表示水平方向展示  
plt.xlabel('销量')  
plt.title('商品销量箱线图')  
plt.show()

五、总结与展望

5.1 总结
本文详细介绍了从网页中提取数据进行清洗、格式化、去重等预处理操作的整个流程,包括数据获取、去重、缺失值处理、异常值处理、数据格式化与标准化、数据转换与编码以及数据可视化等关键步骤。通过具体的代码示例和案例实践,帮助新手朋友理解并掌握数据清洗与预处理的技术和方法。

5.2 展望
随着大数据和人工智能技术的不断发展,数据清洗与预处理的重要性日益凸显。未来,我们可以期待更多高效、智能的数据清洗工具和算法的出现,以应对更加复杂和庞大的数据处理需求。同时,随着自动化和机器学习技术在数据清洗领域的深入应用,我们可以预见数据清洗将更加自动化、智能化,从而大大提高数据处理的效率和准确性。

希望本文能够为读者提供有益的参考和借鉴,帮助大家在数据清洗与预处理的道路上走得更远、更稳。

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

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

相关文章

C++11——function与bind

包装器 function包装器function的介绍function的使用function的使用场景function的意义 bind包装器bind的介绍bind的使用 function包装器 function的介绍 function是用来包装函数的&#xff0c;所以叫做包装器或者适配器&#xff0c;fuction的本质其实是一个类模板。 functio…

基于多域名,通过云运营商弹性负载,Nginx配置等基于的多租户系统部署

已经开发好久的系统&#xff0c;因为业务上没有需求&#xff0c;没有做上线部署&#xff0c;此系统为多租户系统&#xff0c;原来设计是通过租户码参数来识别的&#xff0c;每个租户访问&#xff0c;需要传自己的码过来&#xff0c;才能确定是哪个租户登录系统&#xff0c; 今…

数据结构和算法之树形结构(1)

文章出处: 数据结构和算法之树形结构(1) 关注码农爱刷题&#xff0c;看更多技术文章&#xff01;&#xff01; 树形结构是数据结构四种逻辑结构之一&#xff0c;也是被广泛使用的一种逻辑结构&#xff0c;它描述的是数据元素之间一对多的逻辑关系。树是一种非线性的数据结构&a…

SOMEIP_ETS_119: SD_Indicate_wrong_l4proto_param

测试目的&#xff1a; 验证DUT能够拒绝一个引用了带有错误l4proto参数&#xff08;既不是UDP也不是TCP&#xff09;的IPv4端点选项的SubscribeEventgroup消息&#xff0c;并以SubscribeEventgroupNAck作为响应。 描述 本测试用例旨在确保DUT遵循SOME/IP协议&#xff0c;当接…

基于单片机的智能电话控制系统设计

摘要&#xff1a; 为了能够使用电话实现电器设备的控制&#xff0c;文中通过单片机及双音多频解码集成电路&#xff0c;使用用 户通过电话输入相应的指令就能够实现远程设备的智能化控制。文章主要对系统的构成、软件及 硬件设计进行了简单的介绍&#xff0c;并且对其中的电路…

出现conda不是内部或外部命令,也不是可运行的程序或批处理文件。的解决办法

发现是我的环境变量不对&#xff0c;需要改成conda.exe所在的目录下 如果不知道自己conda.exe在哪的 可以下载个everything这个软件 找东西很快 找到后 点击环境变量-系统变量-Path-新建-&#xff08;你的conda.exe所在目录&#xff1a;绝对路径&#xff09; 完成上述操作…

Day4:杨辉三角

题目&#xff1a;给定一个非负整数numRows,生成杨辉三角的前numRows行。在杨辉三角中&#xff0c;每个数就是左上方和右上方数的和。 import java.util.ArrayList; import java.util.List;public class Test {public static List<List<Integer>> generate(int numR…

【学术会议征稿】2024年先进控制系统与自动化技术国际学术会议(ACSAT 2024)

2024年先进控制系统与自动化技术国际学术会议&#xff08;ACSAT 2024&#xff09; 2024 International Conference on Advanced Control Systems and Automation Technologies 2024年先进控制系统与自动化技术国际学术会议&#xff08;ACSAT 2024&#xff09;将于2024年11月15…

solidwork装配体取消零件固定

前面有固定导致零件移动不了 右键&#xff0c;找到浮动

Three.js 3D人物漫游项目(上)

本文目录 前言1、项目构建1.1 安装依赖1.2 初始化1.3 项目结构1.4 初始化的项目运行 2、加载模型2.1 threejs三要素2.1.1 代码解读 2.2 加载模型2.2.1 代码解读 2.3 效果 前言 在数字技术的浪潮中&#xff0c;三维图形渲染技术以其独特的魅力&#xff0c;正逐步渗透到我们生活的…

react hooks--useMemo

概述 相当于计算属性!!! useMemo实际的目的也是为了进行性能的优化。 ◼ 如何进行性能的优化呢&#xff1f;  useMemo返回的也是一个 memoized&#xff08;记忆的&#xff09; 值&#xff1b;  在依赖不变的情况下&#xff0c;多次定义的时候&#xff0c;返回的值是相同…

后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0920)

十三、文章分类页面 - [element-plus 表格] Git仓库&#xff1a;https://gitee.com/msyycn/vue3-hei-ma.git 基本架子 - PageContainer 功能需求说明&#xff1a; 基本架子-PageContainer封装文章分类渲染 & loading处理文章分类添加编辑[element-plus弹层]文章分类删除…

k8s中的微服务

目录 一、什么是微服务 二、微服务的类型 三、IPVS模式 1、ipvs模式配置方式 &#xff08;1&#xff09;在所有节点中安装ipvsadm &#xff08;2&#xff09;修改master节点的代理配置 &#xff08;3&#xff09;重启pod 四、微服务类型详解 1、clusterip 示例&#…

Flink提交任务

第3章 Flink部署 3.1 集群角色 3.2 Flink集群搭建 3.2.1 集群启动 0&#xff09;集群规划 表3-1 集群角色分配 具体安装部署步骤如下&#xff1a; 1&#xff09;下载并解压安装包 &#xff08;1&#xff09;下载安装包flink-1.17.0-bin-scala_2.12.tgz&#xff0c;将该jar包…

有什么兼容macOS 15 Sequoia系统的加密软件?

前言&#xff1a;近日&#xff0c;苹果更新了 macOS 15 Sequoia正式版&#xff0c;已经有用户在电脑上安装使用了。在这个信息化时代&#xff0c;系统一直在更新&#xff0c;运用一些工具时需要考虑兼容性。 刚有个客户来问迅软&#xff1a;你们迅软DSE客户端支持新发布的macO…

Linux 磁盘清理重新格式化挂载脚本及问题解决

Linux 磁盘清理重新格式化挂载脚本&#xff1a;diskformat.sh #!/bin/bash for i in {1…8} do umount /data0$i done PIDARRAY() for i in a b c d e f g h do parted -s /dev/sd i m k l a b e l g p t p a r t e d − s / d e v / s d i mklabel gpt parted -s /dev/sd im…

【高阶数据结构】二叉搜索树的插入、删除和查找(精美图解+完整代码)

&#x1f921;博客主页&#xff1a;醉竺 &#x1f970;本文专栏&#xff1a;《高阶数据结构》 &#x1f63b;欢迎关注&#xff1a;感谢大家的点赞评论关注&#xff0c;祝您学有所成&#xff01; ✨✨&#x1f49c;&#x1f49b;想要学习更多《高阶数据结构》点击专栏链接查看&a…

【计算机网络篇】计算机网络概述

本文主要介绍计算机网络第一章节的内容&#xff0c;文中的内容是我认为的重点内容&#xff0c;并非所有。参考的教材是谢希仁老师编著的《计算机网络》第8版。跟学视频课为河南科技大学郑瑞娟老师所讲计网。 文章目录 &#x1f3af;一.计算机网络的组成 ✨主要内容 1.边缘部…

seL4 Capabilities(翻自官网)(一)

官网教程链接: Capability 初始化Capabilities tutorials // 先使用repo拉取一下tutorials&#xff0c;然后执行repo sync&#xff0c;所有的教程都在里面&#xff0c;学习某个的时候只需要改变的是 --tut 后面的参数 ./init --tut capabilities # building the tutorial exe…

国内可以使用的ChatGPT服务【9月持续更新】

首先基础知识还是要介绍得~ 一、模型知识&#xff1a; GPT-4o&#xff1a;最新的版本模型&#xff0c;支持视觉等多模态&#xff0c;OpenAI 文档中已经更新了 GPT-4o 的介绍&#xff1a;128k 上下文&#xff0c;训练截止 2023 年 10 月&#xff08;作为对比&#xff0c;GPT-4…