首页 > 其他分享 >数据清洗与预处理:从网页中提取的数据处理技术

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

时间:2024-09-20 13:51:59浏览次数:3  
标签:plt 网页 df 列名 price 数据处理 清洗 数据 预处理

引言

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

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

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

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

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


标签:plt,网页,df,列名,price,数据处理,清洗,数据,预处理
From: https://blog.51cto.com/u_16304808/12064880

相关文章

  • 第2章 网页制作的排版方法
    2.1文字与段落排版2.1.1段落标签段落标签<p>是HTML格式中特有的段落元素,其其语法为:<palign="left|center|right">文字</p>属性align:设置段落文字在网页上的对齐方式,包括left(左对齐)、center(居中)和right(右对齐),默认为left。格式中的“|”表示或者,级多项选一项。2.1.2......
  • 第二章 网页制作的排版方法
    2.1文字与段落排版2.1.1段落标签在HTML中,段落标签用于定义一个段落。常见的段落标签是<p>标签。段落标签可以在网页中创建一个独立的段落,浏览器会自动在段落前后添加一些空白间距。<p>这是一个段落。</p><p>这是另一个段落。</p>2.1.2标题标签HTML提供了六个级别的......
  • 第二章 网页制作的排版方法
    2.1.1文字与段落排版1.2标题标签1.3换行标签1.4水平线标签1.5预格式化标签1.6缩排标签<!DOCTYPEhtml><html>   <head>      <metacharset="utf-8"/>      <title>标题示例</title>   </head>   <body>      <h1align=&q......
  • 第二章 网页制作的排版方法
    2.1文字与段落排版2.1.1段落标签为了使文字段落排列得整齐、清晰,常用段落标签<p>...</p>来实现。段落标签的语法为:<palign="left|center|right">文字</p>属性align用于设置对齐方式,left,center和right,默认左对齐。列出包含<p>标签的多种属性用法:<palign="center">第一......
  • 如何使用Open UI异地远程办公设计前端网页无需公网IP
    文章目录前言1.本地部署OpenUI1.1安装Git、Python、pip1.2安装OpenUI2.本地访问OpenUI3.安装Cpolar内网穿透4.实现公网访问OpenUI5.固定OpenUI公网地址前言本篇文章介绍如何在Windows系统本地部署OpenUI并结合Cpolar内网穿透工具配置公网地址,轻松实......
  • 第2章 网页制作的排版方法
    2.1文字与段落排版2.1.1段落标签段落标签的语法为:<palign="left|center|right">文字</p>align:设置段落文字在页面上的对齐方式2.1.2标题标签<h1>定义最大的标题,<h6>定义最小的标题2.1.3换行标签<p> <br/>2.1.4水平线标签HTML文档中的<hr/>标签时,会在此处换......
  • Python 集合的魔法:解锁高效数据处理的秘密
    引言集合作为Python的一种内置数据类型,其本质是一个无序且不重复的元素序列。虽然表面上看它似乎只是列表或元组的一种变体,但实际上,集合背后有着更为高效的查找机制。通过学习和掌握集合的高级操作,我们不仅能更好地理解Python内部的工作原理,还能在实际开发中解决许多棘手的问......
  • 【w0网页制作】Html+Css网页制作影视主题之庆余年Ⅱ含轮播表单(5页面附源码)
    庆余年2HTML+CSS网页开发目录......
  • 如何使用CSS和JS使网页页面灰掉
    让页面灰掉,通常是通过CSS样式或JavaScript来实现。以下是一些具体的方法:一、使用CSS样式应用filter属性CSS的filter属性可以用来对元素应用图形效果,如灰度。要将整个页面或特定元素变灰,可以在该元素的CSS样式中应用filter:grayscale(100%);。例如,要让整个页面变灰,可以在标签或......
  • BeautifulSoup与lxml解析网页:技术详解与实战案例
    在Python的Web数据抓取和网页解析领域,BeautifulSoup和lxml是两个极为强大且常用的库。它们能够帮助开发者轻松地从HTML或XML文档中提取所需数据,广泛应用于爬虫开发、数据预处理、自动化测试等领域。本文将详细介绍如何使用BeautifulSoup和lxml解析网页,并通过丰富的代码和案例帮助......