如何使用Tensorflow预测CSV文件中列的数据类型
CSV列数据类型分类方案(面向RDBMS导入场景)
你这个场景不需要从零搭建复杂ML模型,优先用规则覆盖主流场景,少量模糊场景搭配轻量分类器即可落地,对AI/ML新手非常友好。
第一步:规则匹配覆盖90%以上常规场景
先对CSV每列做规则校验,大部分标准格式的列可以直接判定类型:
- 数字类型:非空值100%匹配正则
r'^[+-]?\d+(\.\d+)?$即可初步判定为数字,再根据数值最大最小值、精度要求匹配RDBMS的INT/BIGINT/FLOAT/DECIMAL类型 - 布尔类型:列的唯一值只有2个,且内容属于
[True, False, 1, 0, '是', '否']这类二元枚举集合,排除唯一值占比100%的常量列后即可判定为布尔类型 - 日期/时间类型:可以直接用
datetime.strptime()批量尝试解析列值,也可以搭配常用日期格式正则(比如r'^\d{4}-\d{2}-\d{2}$'匹配标准年月日格式)做校验,解析成功率高于95%即可判定为日期类型 - 字符串类型:不符合以上三类规则的列默认归为字符串,再统计列内字符串最大长度,匹配RDBMS的
VARCHAR(n)/TEXT类型
第二步:轻量ML分类处理模糊场景
遇到规则拿不准的场景(比如看起来是数字但实际是邮编、手机号这类需要存为字符串的编码值,或者格式不统一的非标准日期),再用简单分类器处理即可,新手用随机森林、逻辑回归就能达到足够的准确率:
特征提取
每列提取20个以内的低维特征就够用:
- 规则匹配类特征:数字匹配成功率、日期解析成功率、布尔值匹配率、纯字母占比、特殊字符占比
- 统计类特征:列非空率、唯一值占比、数值的均值/方差、字符串平均长度、最大长度
- 可选业务特征:列名关键词匹配,列名带
date/id/phone这类关键词时可以增加对应类型的特征权重
训练数据准备
不需要找公开数据集,自己标注100~200列样本就足够训练:拿你日常接触的CSV文件,人工标注每列的目标类型,小样本下随机森林的分类准确率基本能达到98%以上。
第三步:对接RDBMS导入逻辑
分类完成后直接生成对应DDL语句即可,比如判定为整数且最大值不超过2^31就输出INT,超过就输出BIGINT;字符串最大长度不超过255输出VARCHAR(255),超过就输出TEXT。上线前可以加个低置信度人工校验环节,对分类置信度低于阈值的列弹出人工确认选项,避免特殊格式列分类错误导致导入失败。
内容的提问来源于stack exchange,提问作者AppleGrew
相关产品推荐
相关产品推荐

