广州抖音推广公司,seo免费入门教程,龙门惠州网站建设,江门官网建站公司【Python爬虫】专栏简介#xff1a;本专栏是 Python 爬虫领域的集大成之作#xff0c;共 100 章节。从 Python 基础语法、爬虫入门知识讲起#xff0c;深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑#xff0c;覆盖网页、图片、音频等各类数据爬取#xff… 【Python爬虫】专栏简介本专栏是 Python 爬虫领域的集大成之作共 100 章节。从 Python 基础语法、爬虫入门知识讲起深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑覆盖网页、图片、音频等各类数据爬取还涉及数据处理与分析。无论是新手小白还是进阶开发者都能从中汲取知识助力掌握爬虫核心技能开拓技术视野。 目录 一、数据清洗的重要性二、数据清洗的常见任务2.1 去除噪声数据2.2 处理缺失值2.3 纠正错误数据 三、使用 Python 库进行数据清洗与预处理3.1 认识 pandas 库3.2 数据导入与查看3.3 利用 pandas 处理缺失值3.4 利用 pandas 处理重复数据3.5 利用 pandas 处理异常值 四、数据标准化与归一化方法4.1 标准化与归一化的概念4.2 标准化方法4.3 归一化方法4.4 标准化与归一化的应用场景 五、总结与展望 一、数据清洗的重要性
在使用 Python 爬虫获取数据后数据清洗是至关重要的环节。从网页中爬取的数据往往包含大量噪声数据、缺失值和错误数据 这些 “脏数据” 会严重影响后续数据分析和模型训练的准确性与可靠性。例如在进行市场趋势分析时如果数据中存在大量重复的销售记录噪声数据可能会导致对市场需求的误判若销售数据中存在缺失值基于这些数据建立的销售预测模型可能会产生较大偏差。因此数据清洗就像是数据处理流程中的 “质检员”为后续更高级的数据处理和分析奠定坚实基础。
二、数据清洗的常见任务
2.1 去除噪声数据
噪声数据是指那些不符合数据模式或期望的数据点它们会干扰数据分析的准确性 。在爬虫获取的数据中常见的噪声数据类型包括乱码、特殊符号、重复数据等。比如在爬取网页新闻内容时可能会混入一些 HTML 标签、JavaScript 代码片段等乱码和特殊符号这些对于新闻内容分析毫无价值 。
使用正则表达式可以有效去除这些噪声。比如利用re模块来匹配并去除 HTML 标签
import rehtml_text p这是一段新闻内容span stylecolor:red包含HTML标签/span/p
clean_text re.sub(r.*?, , html_text)
print(clean_text) 上述代码中re.sub(r’.*?, ‘’, html_text)表示使用空字符串替换掉所有的 HTML 标签从而得到干净的文本内容。对于重复数据可以使用pandas库的drop_duplicates方法去除。例如
import pandas as pddata {col1: [1, 2, 2, 3], col2: [a, b, b, c]}
df pd.DataFrame(data)
unique_df df.drop_duplicates()
print(unique_df) 通过drop_duplicates方法DataFrame中的重复行被成功去除。
2.2 处理缺失值
缺失值是指数据集中某个或某些属性的值是缺失的情况。在现实世界的数据中缺失值非常常见比如在爬取电商商品信息时部分商品的描述、价格等信息可能缺失。
常见的缺失值处理方法有以下几种
删除当数据集中缺失值较少时可以直接删除含有缺失值的行或列。在pandas中使用dropna方法实现。例如
import pandas as pddata {col1: [1, None, 3], col2: [a, b, c]}
df pd.DataFrame(data)
filtered_df df.dropna()
print(filtered_df) 填充 均值填充适用于数值型数据且数据整体极值差异不大时。例如对成年男性身高的缺失值进行填充。在pandas中使用fillna方法结合mean函数实现。如
import pandas as pddata {col1: [1, None, 3]}
df pd.DataFrame(data)
df[col1] df[col1].fillna(df[col1].mean())
print(df) 中位数填充当数据整体极值差异较大时使用比如对人均收入进行填充数据中含有高收入人群如马总。代码如下
import pandas as pddata {col1: [1, None, 1000]}
df pd.DataFrame(data)
df[col1] df[col1].fillna(df[col1].median())
print(df) 众数填充用于字符类型或没有大小关系的数值类型数据。例如对城市信息的缺失进行填充。代码如下
import pandas as pddata {col1: [北京, 上海, None]}
df pd.DataFrame(data)
df[col1] df[col1].fillna(df[col1].mode()[0])
print(df) 插值法对于数值型数据当数据列的含义较为复杂需要更精确的填充方法时可以使用。pandas中的interpolate方法本质是使用各种数学统计学中的插值方法进行填充包含最近邻插值法、阶梯插值、线性插值、B 样条曲线插值等多种方法。例如
import pandas as pddata {col1: [1, None, 3]}
df pd.DataFrame(data)
df[col1] df[col1].interpolate()
print(df) 2.3 纠正错误数据
错误数据是指数据中存在不符合逻辑或与实际情况不符的数据。例如在爬取学生成绩数据时可能出现成绩大于 100 分假设满分 100 分的情况或者数据类型错误如将成绩存储为字符串类型。
以识别和纠正成绩数据中的错误为例假设存在一个包含学生成绩的DataFrame
import pandas as pddata {姓名: [张三, 李四, 王五], 成绩: [85, 120, 90]}
df pd.DataFrame(data)# 检查数据类型并转换为数值类型
df[成绩] pd.to_numeric(df[成绩], errorscoerce)# 纠正错误数据成绩大于100分的设为100分
df[成绩] df[成绩].apply(lambda x: 100 if x 100 else x)print(df) 在上述代码中首先使用pd.to_numeric将成绩列转换为数值类型errorscoerce’表示将无法转换的值设为NaN。然后通过apply方法结合匿名函数将大于 100 分的成绩纠正为 100 分。
三、使用 Python 库进行数据清洗与预处理
在 Python 的数据清洗和预处理工作中pandas库是一个强大且常用的工具它提供了快速、灵活、明确的数据结构旨在简单、直观地处理关系型、标记型数据。
3.1 认识 pandas 库
pandas是基于NumPy构建的利用了NumPy数组计算的优势在数据处理和分析方面表现出色。它主要有两个核心数据结构Series一维带标签数组和DataFrame二维表格型数据结构 这使得处理和分析各种类型的数据变得更加便捷。例如DataFrame可以看作是由多个Series组成的表格每列都是一个Series且所有列共享同一索引。pandas库提供了丰富的函数和方法涵盖数据读取、写入、清洗、处理、分析等各个环节如读取常见的 CSV、Excel 等文件格式处理缺失值、重复值和异常值等还能进行数据的合并、分组、透视等操作。
3.2 数据导入与查看
使用pandas读取 CSV 文件非常简单只需使用read_csv函数
import pandas as pd# 读取CSV文件
data pd.read_csv(data.csv)读取 Excel 文件则使用read_excel函数
# 读取Excel文件
data pd.read_excel(data.xlsx)读取数据后可以使用shape属性查看数据的形状行数和列数使用dtypes属性查看每列的数据类型
# 查看数据形状
print(data.shape) # 查看列数据类型
print(data.dtypes) 3.3 利用 pandas 处理缺失值
pandas提供了多种处理缺失值的方法。例如dropna方法用于删除含有缺失值的行或列fillna方法用于填充缺失值。假设我们有一个包含缺失值的DataFrame
import pandas as pd
import numpy as npdata {col1: [1, np.nan, 3], col2: [a, b, np.nan]}
df pd.DataFrame(data)# 删除含有缺失值的行
filtered_df df.dropna()
print(filtered_df) # 使用指定值填充缺失值
df.fillna(0, inplaceTrue)
print(df) 在上述代码中首先创建了一个含有缺失值的DataFrame然后使用dropna方法删除含有缺失值的行接着使用fillna方法将缺失值填充为 0 inplaceTrue表示在原数据上进行修改。
3.4 利用 pandas 处理重复数据
使用pandas的drop_duplicates方法可以识别和删除重复数据。例如
import pandas as pddata {col1: [1, 2, 2, 3], col2: [a, b, b, c]}
df pd.DataFrame(data)# 删除重复行
unique_df df.drop_duplicates()
print(unique_df) 运行上述代码drop_duplicates方法会自动检测并删除DataFrame中的重复行只保留唯一的行数据。
3.5 利用 pandas 处理异常值
可以使用统计方法如 Z-Score或可视化工具如箱线图检测异常值。Z-Score 是一种常用的检测异常值的统计方法它通过计算数据点与均值的距离以标准差为单位来判断数据点是否为异常值。一般来说Z-Score 绝对值大于 3 的数据点可以被视为异常值。使用pandas结合numpy实现 Z-Score 检测异常值的代码如下
import pandas as pd
import numpy as npdata {col1: [1, 2, 3, 100, 5]}
df pd.DataFrame(data)# 计算Z-Score
df[z_score] np.abs((df[col1] - df[col1].mean()) / df[col1].std())# 筛选出异常值
outliers df[df[z_score] 3]
print(outliers) 使用箱线图可视化数据直观地展示数据分布和异常值需要借助matplotlib库代码如下
import pandas as pd
import matplotlib.pyplot as pltdata {col1: [1, 2, 3, 100, 5]}
df pd.DataFrame(data)# 绘制箱线图
df[col1].plot(kindbox)
plt.show() 在上述代码中df[‘col1’].plot(kind‘box’)用于绘制col1列数据的箱线图通过箱线图可以直观地看到数据中的异常值通常用离群点表示。在检测到异常值后可以根据具体情况进行处理如删除异常值、对异常值进行修正或转换等。例如如果确定某个异常值是由于数据录入错误导致的可以将其修正为正确的值如果异常值是真实存在的数据但对分析结果有较大影响可以考虑删除该数据点 。使用pandas删除异常值的代码如下
import pandas as pd
import numpy as npdata {col1: [1, 2, 3, 100, 5]}
df pd.DataFrame(data)# 计算Z-Score
df[z_score] np.abs((df[col1] - df[col1].mean()) / df[col1].std())# 删除异常值
filtered_df df[df[z_score] 3]
print(filtered_df) 上述代码通过 Z-Score 方法检测出异常值并使用布尔索引删除了异常值得到了一个不包含异常值的DataFrame。
四、数据标准化与归一化方法
4.1 标准化与归一化的概念
在数据处理过程中标准化和归一化是两种重要的数据变换方法它们主要用于消除数据特征之间的量纲影响使不同特征处于同一尺度便于后续的数据分析和模型训练。
标准化Standardization也称为 Z-Score 标准化是将数据按比例缩放使之符合标准正态分布即均值为 0标准差为 1 。其核心思想是通过对数据进行平移和缩放将数据转换为均值为 0、标准差为 1 的分布。标准化的作用在于它能够保持数据的分布形状不变只是对数据进行了位置和尺度的调整使得不同特征之间具有可比性。例如在分析学生的各科成绩时不同科目的满分和平均分可能不同通过标准化可以将各科成绩统一到一个标准尺度上便于比较学生在不同科目上的相对表现。归一化Normalization通常是将数据缩放到 [0,1] 或者 [-1,1] 的范围内 。它的目的是将数据映射到一个特定的区间消除数据的尺度差异使数据更加集中在一个较小的范围内。在图像数据处理中像素值通常在 0 - 255 之间通过归一化可以将其缩放到 [0,1] 区间方便后续的计算和处理。
标准化和归一化的主要区别在于标准化是基于数据的均值和标准差进行变换而归一化是基于数据的最大值和最小值进行变换标准化更注重数据的分布特征而归一化更注重数据的尺度范围。
4.2 标准化方法
常见的标准化方法是 Z-Score 标准化其计算公式为
其中是标准化后的数据是原始数据是数据的均值是数据的标准差。 计算步骤如下 计算数据的均值 计算数据的标准差 根据公式计算标准化后的数据。
使用 Python 的numpy库实现 Z-Score 标准化的代码如下
import numpy as np# 原始数据
data np.array([1, 2, 3, 4, 5])# 计算均值和标准差
mean np.mean(data)
std np.std(data)# 进行Z-Score标准化
standardized_data (data - mean) / stdprint(standardized_data) 4.3 归一化方法
常见的归一化方法是 Min-Max 归一化也称为离差标准化它使结果值映射到 [0,1] 之间转换函数如下
其中是归一化后的数据是原始数据(min(X))和(max(X))分别是数据集中的最小值和最大值。 计算步骤如下
找出数据集中的最小值(min(X))和最大值(max(X))。对每个数据点根据公式计算归一化后的数据。 使用 Python 的numpy库实现 Min-Max 归一化的代码如下
import numpy as np# 原始数据
data np.array([1, 2, 3, 4, 5])# 计算最小值和最大值
min_val np.min(data)
max_val np.max(data)# 进行Min-Max归一化
normalized_data (data - min_val) / (max_val - min_val)print(normalized_data) 4.4 标准化与归一化的应用场景
在不同的机器学习算法和数据分析场景中选择合适的标准化和归一化方法非常重要
在基于距离度量的算法中如 KNN、K-Means 聚类算法标准化和归一化可以避免某一个取值范围特别大的特征对距离计算造成影响提高模型的精度。在 KNN 算法中如果一个特征的值域范围非常大那么距离计算就主要取决于这个特征从而与实际情况相悖。此时使用标准化或归一化方法可以使各个特征在距离计算中发挥相对均衡的作用。在梯度下降优化算法中归一化可以加快模型的收敛速度。例如在逻辑回归和神经网络的训练中归一化后的数据可以使目标函数的等高线变得更圆梯度下降的方向更接近最小值的方向从而更快地收敛。当数据分布接近正态分布时标准化可能是一个更好的选择因为许多机器学习算法如线性回归、逻辑回归、支持向量机等在设计时都假设输入数据是正态分布的标准化能够保持数据的分布形状更符合这些算法的假设从而提高模型的性能。如果数据存在异常值或者最大最小值非常不稳定归一化可能更为合适。因为归一化主要受到最大值和最小值的影响对异常值相对鲁棒而标准化涉及均值和标准差对异常值比较敏感异常值的存在可能会影响处理后数据的分布。在处理房价数据时如果存在个别价格极高的豪宅异常值使用归一化可以减少这些异常值对数据整体尺度的影响使数据更稳定。
五、总结与展望
数据清洗与预处理是数据处理流程中不可或缺的环节其重要性不言而喻。通过去除噪声数据、处理缺失值和纠正错误数据等常见任务能够显著提高数据的质量和可用性为后续的数据分析、机器学习和深度学习等任务提供坚实的数据基础。在实际应用中Python 的pandas库为数据清洗与预处理提供了强大而便捷的工具使我们能够高效地处理各种类型的数据。同时数据标准化与归一化方法则针对数值型数据消除了量纲影响提升了数据的可比性和模型的性能。
展望未来随着大数据和人工智能技术的迅猛发展数据清洗与预处理技术也将迎来新的机遇和挑战。一方面数据规模和复杂性的不断增加将对数据清洗与预处理的效率和准确性提出更高要求促使我们开发更加自动化、智能化的算法和工具以适应大数据时代的需求。例如利用深度学习算法自动识别和处理缺失值、异常值等问题实现数据清洗的自动化和智能化。另一方面随着人工智能技术在各个领域的广泛应用对高质量数据的需求也将日益增长这将进一步凸显数据清洗与预处理的重要性。在医疗领域精准的疾病诊断和治疗需要高质量的医疗数据数据清洗与预处理能够确保医疗数据的准确性和可靠性为人工智能辅助医疗决策提供有力支持。此外数据安全和隐私保护也将成为数据清洗与预处理过程中需要重点关注的问题如何在保证数据质量的同时保护数据的安全和隐私将是未来研究的重要方向之一。