求问数据清洗的简易方法

118 天前
 TimG
数据量在亿级别,主要清洗需求包括对特定字段去空格、统一日期格式、计算日期差、特定数值求和(数值都在行中)、查对字典得到对应值等等。需求虽然五花八门,好在所需的数据都在同一行,不需要进行聚合,也不会跨行查询。不过如遇到无法处理的数据需要及时找到并剔除,反馈并等待重新收集。这种情况需要进行语言交流和重传数据,所以会耗费一定时间。
目前的方法是导入 PostgreSQL 进行清洗,遇到不容易通过 SQL 实现的逻辑,比如统一日期格式,使用 C#编写了程序去处理。曾尝试使用 pandas 处理,但数据量太大无法载入内存遂放弃。

目前想要解决的问题是:
- 剔除问题数据后,获取到修复的数据,为了防止混乱,我会把每次新获得的数据存在新表中单独再清洗一遍。但是清洗流程太多(有很多 SQL 语句,因为一条 SQL 只能清洗一列,列很多,还有 C#处理的部分),数据问题反馈后还有问题也是常见情况,数据库中就会有大量的表,虽然有做视图,但也大大增加了管理压力。尽管如此我也不想把各数据全部整理在一张表,总是会害怕越整越乱。
- 因为不需要对数据进行聚合,也不会跨行查数,如果顺应人脑的思维逻辑的话,就是对每行的各个列字段应用特定的方法,然后逐行执行就可以。这样还可以多线程执行以及查看进度。遇到出问题的行也可以快速定位到。当然这个不是必要的,但我感觉会比数据库要简单直观。

想问下各位前辈遇到这种情况一般如何处理?有没有比较合适的软件可以使用?
2820 次点击
所在节点    程序员
26 条回复
flmn
117 天前
像你说的,行与行没关系,可以拆分成多份分别处理再合并呀,可以看看 Spark 。感觉用文件存储比数据库合适。
cccvno1
117 天前
@TimG 需求要不断增加的话能不用 sql 就别用 sql
MoYi123
117 天前
pg 里可以写 python 之类的很多编程语言.
catamaran
117 天前
@TimG #10 如果用 clickhouse, 我是这么做的:客户端用 python 处理,一次读取 100 万行(看硬件情况),处理完成后写入新表。主要弄好分区键,clikchouse 我记得翻页会越来越慢。
WuDiHaiTai
116 天前
你可以放一小段数据上来可以看的更直观一些,这样大家更好提建议嘛,文字版的不太好想象你的数据是什么样的。

之前挂壁做 AI 标注的时候常常因数据清洗破防,如果有规则的话就写个小 python 脚本就搞定。无规则的密集排列我个人是会想办法找它们的共通处,想办法搞插入符号之类的,将数据做一些划分之后,更直观,更容易检索然后再想办法。也没有处理过亿级别的,不太好说。我这人逻辑能力一般,数据清洗我觉得还是得靠一些思维逻辑上的能力,算得上是八仙过海,各有各的招。
tikazyq
116 天前

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1068810

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX