求问数据清洗的简易方法

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

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

想问下各位前辈遇到这种情况一般如何处理?有没有比较合适的软件可以使用?
举报· 236 次点击
登录 注册 站外分享
14 条回复  
lambdaq 小成 2024-8-29 17:44:04
脏活儿就是这样了。你想容易,那得加钱。
renmu 该用户已被删除 2024-8-29 18:14:05
提示: 作者被禁止或删除 内容自动屏蔽
wxf666 小成 2024-8-29 19:14:05
为啥看第一行需求,觉得用纯 SQL 写,也没啥难的呢。。

可以给几行数据(敏感数据用其他字符串代替就好)看看吗?
NoOneNoBody 小成 2024-8-29 19:51:09

求问数据清洗的简易方法

@wxf666 #5
刚遇到一个,你看看, 数据目标意义为日期
年月日
日月年
月日年
6 位数
7 位数
8 位数
4 位数:只有年、或只有月日
2 位数:年龄
23.3.24 或 11.12.13 (搞不清年月日分别是哪个)
……
以上情况混杂都有
512357301 小成 2024-8-29 23:38:20

求问数据清洗的简易方法

SQL 做起来也不难,只不过 postgresql 或者 MySQL 不适合数据清洗,你得找列式数据库,比如 clickhouse 之类的。
编程思维,那就用 pandas 或者类似的代码框架实现。
数分思维,肯定直接上 SQL ,Python 之类的编程语言只是帮忙拼接 SQL ,调度 SQL 而已。
具体看你的倾向。
noqwerty 小成 2024-8-30 00:32:32

求问数据清洗的简易方法

能接受 pandas 处理的话建议看看 polars ,API 更符合直觉,速度也远比 pandas 快
cccvno1 小成 2024-8-30 07:40:47

求问数据清洗的简易方法

将数据表封装成一个 c#类,用 dapper+sqlreader 多线程分块读取数据表
转换方法都可以定义成一个个 transfer 方法,传入和传出的对象都是表对应的模型
将一组 transfer 方法串联起来不断转换就完事了
最后再将转换后的数据写进新表,最好是几万条批量写入一次
这样可以美滋滋的单元测试
EndlessMemory 初学 2024-8-30 08:41:59

求问数据清洗的简易方法

用 Python 试试吧
dbak 小成 2024-8-30 09:19:22

求问数据清洗的简易方法

graylog 的 pipeline
12下一页
返回顶部