写点什么

我的数据清洗能手小浣熊

作者:轻口味
  • 2024-07-13
    北京
  • 本文字数:3146 字

    阅读完需:约 10 分钟

我的数据清洗能手小浣熊

【背景介绍】

我们处在信息化时代,每天都有海量的数据生成,而 AI 的表现最终体现在它所学习的数据量以及可以调用的资源的数量。大模型知识的实时性和无法调用私有知识库的局限性,RAG(Retrieval Augmented Generation)技术应用而生,而 RAG 的效果依赖知识库的质量,对于海量数据,清洗是一个巨大的工程,要耗费大量人力财力。


从去年开始华为已经在推进头部应用开始适配纯血鸿蒙系统,到了年初突然开始加速,先是 TOP100,后面又是 TOP5000,对于一个新系统,前期不管是对于平台侧还是应用侧注定不是一帆风顺的:资料缺失、API 不稳定、缺少参考呢。好在经过半年的探索和积累,平台能力也逐步完善,各个 APP 厂商也积累了不少经验,所以产生了一个把这些遇到的问题搜集起来,做成知识库集成到 AI 智能体帮助后续开发者的想法。


收集到六千条有效问答数据后,需要对问答数据再次清洗和加工才可以成为高质量输入,上传系统做知识切片。之前都是把要处理的问题描述输入给 ChatGPT,让 ChatGPT 生成脚本后复制到本地,再执行脚本观察效果,这样调试不是很方便,每次赋值粘贴效率很低,而且设计多个操作效果不是很理想。


偶然机会接触了小浣熊智能助手,一经使用便爱不释手。

【小浣熊家族介绍】


小浣熊是商汤科技推出的智能体工具,不仅有代码助手,还有办公助手,办公助手可以提供 json、excel 数据的分析、图标绘制、趋势总结、反思等。可以直接将要操作的 Excel 拖入进去,输入提示词自动生成 python 操作 excel,操作后可以直接下载修改后的 Excel,对于清洗数据的场景特别适合。

【清洗目标】

原始数据是包含问题标题、问题详情、答案、问题来源四列的 6420 条问答数据,这些数据中有下面这些问题需要处理:


  1. 有的答案是空的,其实问题详情的内容就是答案,需要把答案为空的表格填充成问题详情内容;

  2. 有的智能体平台要求问题最多 500 字符,答案最多 800 字,需要针对这个平台筛选出一份问题小于 500,答案小于 800 的两列表格数据文件;

  3. 有的智能体平台要求答案最多 2000 字符,针对这个平台,需要筛选一份答案字符数不超过 2000 的两列表格数据文件;

  4. 有的智能体平台对问题和答案字符数长度没有限制,理想的结果是问题标题一列,答案列的格式为:


问题详情:第二列内容
问题答案:第三列内容
详细地址:第四列内容
复制代码



【清洗过程】

1、将待处理文件拖到办公小浣熊平台


拖入上传完成后等待加载,加载成功后右侧会出现拖入文件的预览。

2、处理空答案

输入命令:如果第三列answer列为空,则将第二列qdetail列的输入拷贝到第三列:小浣熊会帮助我们自动生成代码并执行:


import pandas as pd # 读取Excel文件 file_path = '/mnt/data/鸿蒙_演示.xlsx' df = pd.read_excel(file_path) # 显示前几行数据以了解表格结构 df.head()
# 将第三列(answer)为空的行的第二列(qdetail)的内容复制到第三列(answer) df.loc[df['answer'].isna(), 'answer'] = df['qdetail'] # 保存修改后的数据到新的Excel文件 output_file_path = '/mnt/data/鸿蒙_演示_修改后.xlsx' df.to_excel(output_file_path, index=False) output_file_path
复制代码


执行完成后我们可以统计修改的行:处理前有多少行answer为空的数据?,小浣熊帮助我们写代码统计出有 3 行被处理:


# 重新加载原始数据以计算处理前answer列为空的行数 original_df = pd.read_excel(file_path) empty_answer_count_before = original_df['answer'].isna().sum() empty_answer_count_before
复制代码

3、清除第二列第三列中无效的链接数据

第二列第三列中是带有 html 标签的数据,其中有些数据是包含 a 标签,且带有 href 的:<a href="https://link.wodekouwei.com/?dfda=zbDYEjW66Op%2BjIzhCjZbkg%3D%3D.3oWqB%2Bahn1PyCqp5bW%2BZgKBrtP7ChKNDdKvLn5Osre9SKasC24ZQuM%2BYgibRa28gJXkkOyGR5%2BRnaaMZ1xUao8or5d3Unv%2FGQITMukfevqvVZmwv%2Fy2GuIf9V%2BOvxrORXGkOf71vbsjcfQwmgbE8eA%3D%3D" rel="nofollow" target="_blank">https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/account-get-phonenumber-0000001601012050</a>a 标签修饰的内容是实际的地址,a 标签 href 地址其实是无效地址,需要判断如果包含 a 标签,且 a 标签中 href 值包含 wodekouwei.com 的话需要将 a 标签移除,只保留 a 标签修饰的内容。


修改确认有第三列多少包含 wodekouwei.com 的行:


有 2976 行,接着给小浣熊输入内容:


如果第三列answer列中包含标签,且a标签的href值包含wodekouwei.com,则将所有的符合条件的a标签移除,只保留a标签修饰的内容,示例: `<a href="https://link.wodekouwei.com/?dfda=zbDYEjW66Op%2BjIzhCjZbkg%3D%3D.3oWqB%2Bahn1PyCqp5bW%2BZgKBrtP7ChKNDdKvLn5Osre9SKasC24ZQuM%2BYgibRa28gJXkkOyGR5%2BRnaaMZ1xUao8or5d3Unv%2FGQITMukfevqvVZmwv%2Fy2GuIf9V%2BOvxrORXGkOf71vbsjcfQwmgbE8eA%3D%3D" rel="nofollow" target="_blank">https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/account-get-phonenumber-0000001601012050</a>`
修改为:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/account-get-phonenumber-0000001601012050
复制代码


小浣熊生成代码:


小浣熊生成的代码是基于正则匹配的,发现修改后不能全部匹配,尝试修改提示词:


使用 Beautiful Soup查找第三列answer列中包含的所有html a标签,如果a标签的href值包含wodekouwei.com,则删除a标签,只保留a标签休息的内容,比如:`<a href="https://link.wodekouwei.com/?dfda=zbDYEjW66Op%2BjIzhCjZbkg%3D%3D.3oWqB%2Bahn1PyCqp5bW%2BZgKBrtP7ChKNDdKvLn5Osre9SKasC24ZQuM%2BYgibRa28gJXkkOyGR5%2BRnaaMZ1xUao8or5d3Unv%2FGQITMukfevqvVZmwv%2Fy2GuIf9V%2BOvxrORXGkOf71vbsjcfQwmgbE8eA%3D%3D" rel="nofollow" target="_blank">https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/account-get-phonenumber-0000001601012050</a>`
修改为:
`https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/account-get-phonenumber-0000001601012050`
复制代码


小浣熊提供了基于 Beautiful Soup 的解析规则解析:


查看被修改了多少列:


修改后的数据第三列有多少行包含 wodekouwei.com
复制代码


![[我的数据清洗能手小浣熊-7.png]]检测数据看到已经修改成功了。

4、筛选第三列字符数小于 2000 的所有行

输入筛选第三列字符数小于2000的所有行,并输出符号条件的行数


5、生成符合格式的列

新增一列 new_answer,格式为:问题详情:第二列内容


问题方案:第三类内容


问题详情:第四列内容


生成代码:


# 新增一列new_answer,格式为指定的格式 df_processed['new_answer'] = "问题详情:\n" + df_processed['qdetail'] + "\n\n问题方案:\n" + df_processed['answer'] + "\n\n问题详情:\n" + df_processed['link'] # 保存修改后的数据 output_file_path_new_answer = '/mnt/data/鸿蒙_演示_新增列后.xlsx' df_processed.to_excel(output_file_path_new_answer, index=False) output_file_path_new_answer
复制代码


生成数据预览:


【借助小浣熊清洗完成效果】

最终清洗完成后生成的新数据:


办公小浣熊操作视频分享:

【总结】

AI 工具极大的提升我们的效率,借用王坚院士的不等式:


  1. 与现有的已有的基础模型相比,应用做的还不够好;

  2. 以现有的算力能力,基础模型做的还不够好;

  3. 以现有的电力,算力还不够。在不等式的最左边,我们的应用提升空间还很大,像小浣熊在办公层面的应用尝试,创新角度讲是创造性的,非常开心有机会接触到这么好用的产品。


在一个心得是,在使用 AI 应用的时候,我们要保持一定的耐心,把它当人看,如果没有解决我们的问题,我们要尝试换个角度问。


最后再分享一下我清洗完数据做成知识库后的智能体的效果,是一个鸿蒙应用开发相关的知识库:https://www.coze.cn/s/i6E4uNpm/,感谢小浣熊帮助我高效的完成了这个作品。

发布于: 刚刚阅读数: 5
用户头像

轻口味

关注

🏆2021年InfoQ写作平台-签约作者 🏆 2017-10-17 加入

Android、音视频、AI相关领域从业者。 欢迎加我微信wodekouwei拉您进InfoQ音视频沟通群 邮箱:qingkouwei@gmail.com

评论

发布
暂无评论
我的数据清洗能手小浣熊_征文活动_轻口味_InfoQ写作社区