二、需求 对杂乱文本数据进行处理
部分数据截图如下,第一个字段是原字段,后面3个是清洗出的字段,从数据库中聚合字段观察,乍一看数据比较规律,类似(币种 金额
万元)这样,我想着用sql写条件判断,统一转换为‘万元人民币'
单位,用sql脚本进行字符串截取即可完成,但是后面发现数据并不规则,条件判断太多清洗质量也不一定,有的前面不是左括号,有的字段里面没有币种,有的数字并不是整数,有的没有万字,这样如果存储成数字和‘万元人民币'单位两个字段写sql脚本复杂了,mysql我也没找到能从文本中提取数字的函数,正则表达式常用于where条件中好像,如果谁知道mysql有类似从文本中过滤文本提取数字的函数,可以告诉我哈,这样就不用费这么多功夫,用kettle一个工具即可,工具活学活用最好。
结合用python的经验,python对字符串过滤有许多函数稍后代码中就是用了这样的办法去过滤文本。
第一次部分清洗数据截图
三、对数据处理的宏观逻辑思考
拿到数据,先不要着急写代码,先思考清洗的逻辑,这点很关键,方向对了事半功倍,剩下的时间就是代码实现逻辑和调试代码的过程。
3.1思考过程 不写代码:
我想实现的最终的数据清洗是将资金字段换算成【金额 单位 各币种】的组合形式或者【金额 单位
统一的人民币币种】(币种进行汇率换算),分两步或者三步都可以
3.1.1拆分出三个字段,数字,单位,币种
(单元分为万和不含万,币种分为人民币和具体的外币)
3.1.2将单位统一换为万为单位
第一步中单位不是万的 数字部分/10000,是万的数字部分保持不变
3.1.3将币种统一为人民币
币种是人民币的前两个字段都不变,不是的数字部分变为数字*各外币兑换人民币的汇率,单位不变依旧是第二步统一的‘万'
3.2期望各步骤清洗效果 数据列举:
从这个结果着手我们步步拆解,先梳理 清洗逻辑部分
3.2.1第一次清洗期望效果 拆分出三个字段 数字 单位 币种:
字段值=“2000元人民币”,第一次清洗
2000 不含万 人民币
字段值=“2000万元人民币”,第一次清洗
2000 万 人民币
字段值=“2000万元外币”, 第一次清洗
2000 万 外币
3.2.2第二次清洗期望效果 将单位 统一归为万:
#二次处理条件
case when 单位=‘万' then 金额 else 金额/10000 end as 第二次金额
字段值=“2000元人民币”
0.2 万 人民币
字段值=“2000万元人民币”
2000 万 人民币
字段值=“2000万元外币”
2000 万 外币
注意:如果上面达到需求 则清洗完毕,如果想将单位换成人民币就进行下面三次清洗
3.2.3第三次清洗期望效果:单位 币种都统一为万 人民币