昇腾数据探险家:挖掘数据的隐藏宝藏

1 概述
1.1 案例介绍
数据清洗(Data Cleansing)是指对数据进行处理和纠错,以去除或修复数据集中存在的错误、不一致、不完整和冗余的数据,从而使数据更加准确、可靠和可用。数据清洗是数据处理和数据分析中一个非常重要的步骤,它可以帮助我们提高数据的质量,从而提高数据分析和机器学习的准确性和可靠性。
本案例选择 PyThon 所及生成杂乱数据及清洗作为示例,通过实际操作,让大家深入了解如何利用 Python 中预装的库来进行数据清洗。在这个过程中,大家将学会从数据生成到数据清洗全流程。
1.2 适用对象
个人开发者
高校学生
1.3 案例时间
本案例总时长预计 30 分钟。
1.4 案例流程

说明:
用户进入开发者空间配置 Notebook 环境;
进入 Notebook 进行数据清洗功能实现。
1.5 资源总览
本案例预计花费 0 元。
昇腾数据探险家:挖掘数据的隐藏宝藏👈👈👈体验最新完整版案例,请点击这里。
2 环境配置
2.1 开发者空间配置
面向广大开发者群体,华为开发者空间提供免费昇腾NPU资源的Notebook,方便开发者学习昇腾相关的专业知识以及配套实验。
开发者可以直接进入华为开发者空间工作台界面,找到右侧 AI Notebook,点击立即前往> 立即启动>查看 Notebook,进去到 Notebook 界面。



3 数据清洗功能实现
3.1 数据集生成
打开 Notebook 后,点击笔记本下方的 Python3,将以下代码复制到代码行中。

1. 导入必要的库,并配置日志记录,复制完毕后,点击上方三角运行符号运行代码。

代码解释:
random 库用于生成随机数,在后续代码中会用于随机选择元素和确定长度等操作;
string 库提供了字符串常量,如字母、标点符号等,方便开发者使用;
logging 库用于记录程序运行过程中的信息,便于调试和监控。这里日志设置为 INFO,并定义日志的输出格式。
2. 定义一些常见的列表。

代码解释:
html_tags 列表包含了一些常见的 HTML 标签,后续会在生成杂乱数据文本时使用;
special_chars 包含了常见的标点符号以及一些自定义的特殊字符;
stopwords 是一个简单的停用词列表。
3. 生成随机单词。

代码解释:
该函数接受两个参数 min_length 和 max_length,分别表示单词的最小和最大长度,默认值分别为 3 和 10;
使用 random.randint 生成一个介于 min_length 和 max_length 之间的随机整数作为单词的长度;
通过循环和 random.choice 从字母表中随机选择字符,最后使用 join 方法将这些字符组合成一个单词。
4. 生成随机句子。

代码解释:
该函数接受两个参数 min_words 和 max_words,分别表示句子中单词的最小和最大数量,默认值分别为 3 和 15;
使用 random.randint 生成一个介于 min_words 和 max_words 之间的随机整数作为句子中单词的数量;
调用 generate_random_word 函数生成指定数量的随机单词,并将他们存储在列表 words 中;
最后使用 join 方法将这些单词用空格连接成一个句子。
5. 为文本添加噪声。

代码解释:
该函数接受两个参数 text 和 num_extra_spaces,分别表示输入的文本和要添加的多余空格的最大数量,默认值为 5;
使用 random.randint 生成一个介于 0 和 num_extra_spaces 之间的随机整数 num_extra,表示要添加的多余空格数量;
通过循环,每次随机选择一个位置,在该位置插入两个空格,从而为文本添加噪声。
6. 生成一条杂乱文本的函数。

代码解释:
该函数用于生成一条杂乱文本数据;
首先随机确定·文本由多少各部分组成,范围是 1 到 5 个部分;
对于每个部分,随机选择一种类型(单词、句子、HTML 标签或特殊字符),并根据类型生成相应的内容添加到文本中;
最后调用 add_noise 函数为文本添加多余空格噪声。
7. 生成指定数量的杂乱文本数量。

该函数接受一个参数 num_texts,表示要生成的杂乱文本的数量,默认值为 500;
使用列表推导式调用 generate_messy_text 函数 num_texts 次,生成指定数量的杂乱文本,并将他们存储在一个列表中返回。
8. 将生成的文本列表保存到文件中。

该函数接受两个参数 texts 和 file_path,分别表示文本列表和文件路径;
使用 with 语句打开文件,以写入模式(w)和 UTF-8 编码打开文件;
遍历文本列表,将每个文本去除首尾空格后写入文件,并在末尾添加换行符;
如果保存成功,使用 logging.info 记录成功信息;如果出现异常,使用 logging.error 记录错误信息。
9. 设置主程序函数,运行完成后左侧会出现如图所示的保存列表文件。


代码解释:
当脚本作为主程序运行时,会执行以下操作:
设置要生成的杂乱文本的数量为 500;
设置保存文件的路径为 mixed_messy_texts.txt;
调用 generate_messy_texts 函数生成 500 条杂乱文本;
调用 save_texts_to_file 函数将这些杂乱文本保存到指定文件中。
3.2 数据清洗代码编写
1.导入必要的库。

代码解释:
re 是 Python 的正则表达式模块,用于处理字符串的模式匹配和替换,后续会用它来去除文本中的特殊字符;
BeautifulSoup 是一个用于解析 HTML 和 XML 文档的库,这里会用它来去除文本中的 HTML 标签。
2. 定义停用词列表。

代码解释:
停用词是在文本处理中通常被忽略的常见词汇,因为它们对文本的语义理解贡献不大。这里定义一个停用词列表,后续会在清洗文本时移除这些词。
3. 定义清洗文本函数。

代码解释:
去除 HTML 标签:使用 BeautifulSoup 解析输入的文本,然后通过 get_text()方法提取纯文本内容,从而去除 HTML 标签;
去除特殊字符:使用正则表达式[^a-Za-Z0-9\s]匹配所有非字母、非数字和非空字符,并将它们替换为空字符串;
去除多余空格:先使用 split()方法将文本按空格分割成单词列表,在使用 join()方法将这些单词用单个空格连接起来,从而去除多余的空格;
转换为小写:使用 lower()方法将文本中所有字母转为小写,这样可以统一文本的大小写;
移除停用词:将文本按空格分割成单词列表,然后使用列表推导式过滤掉在停用词列表中的单词,最后将过滤后的单词用空格连接成清洗后的文本。
4. 从文件读取数据并清洗保存。

从文件中读取数据代码解释:
使用 try-except 语句尝试打开名为 mixed_messy_text.txt 的文件,并以只读模式(’r’)和 UTF-8 编码读取文件内容;
readlines()方法将文件的每一行作为一个元素存储在列表 messy_texts 中,如果文件不存在,会捕获 FileNotFoundError 异常,并打印提示信息,提醒用户先运行生成数据的脚本。
清洗数据代码解释:
清洗数据:使用列表推导式遍历 mess_text 列表中的每一行文本,调用 clean_text()函数对每一行文本进行清洗,并将清洗后的文本存储在 cleaned_texts 列表中;
保存清洗后的数据到文件:使用 with 语句写入模式(’w’)和 UTF-8 编码打开名为 cleaned_texts.txt 的文件,然后将 cleaned_texts 列表中的每一行文本写入文件,并在每行末尾添加换行符。
5. 清洗前后效果对比。
清洗前:

清洗后:

清洗前数据中存在异常值和一些特殊符号,在经过数据清洗后,只剩下文本内容,将异常值和特殊符号进行清洗,还同意大小写字母格式。
至此,昇腾数据探险家之挖掘数据的隐藏宝藏内容结束。
评论