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

说明:
- 用户进入开发者空间配置Notebook环境;
- 进入Notebook进行数据清洗功能实现。
1.5 资源总览
本案例预计花费0元。
资源名称 | 规格 | 单价(元) | 时长(分钟) |
华为开发者空间-Notebook | NPU basic · 1 \* NPU 910B · 8v CPU · 16GB| euler2.9-py38-torch2.1.0-notebook | 0 | 30 |
最新案例动态,请查阅 《昇腾数据探险家:挖掘数据的隐藏宝藏》。小伙伴快来领取华为开发者空间进行实操体验吧!
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\. 清洗前后效果对比。
清洗前:

清洗后:

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

被折叠的 条评论
为什么被折叠?



