大数据之数据清洗
主要探讨路大数据中数据清洗时该从哪些维度发现需要进行清洗的数据,欢迎指正。
假设案例:交通拥堵状况分析
原始样本的关键属性:
参与对象:机动车(包括私家车、大巴、公交、小货车、大型货车等)
地理位置:经纬度或POI或自有编码/命名
时间:数据发生的实际时间及采样间隔周期
速度:时间周期内的速度
大数据主要步骤:
1. 获取:主要来源包括——自有(关系数据库同步)、自采(探针/爬虫等手段)、外购(合法的白色数据、非法的灰色数据、违法的黑色数据);涉及的关键点:数据的维度定义;探针节点的选择及采集方式(依据具体业务而定,一般无非是部署在数据产生者随路式或者数据产生者必经路径上蹲点式两种,各有优劣);外购数据源的选择及价值识别(可信度等)。数据来源两种,移动式(某德地图、某度地图这一类)和定点式(测速摄像头、监控摄像头),假定都是未分析的原始数据。
2. 清洗入库:对数据源进行清洗及其他所需的预处理入库。本文的重点,见正文。
3. 分析、给数据打标签以用于后续的挖掘:基于业务需求选择所需的字段并分析,比如哪些路段拥堵、拥堵程度如何。
4. 挖掘:这就看开脑洞的程度了,比如红绿灯时长优化预测、车辆流向优化(禁左、禁右、单行等)效果预测这种相对简单的的以及未来突发交通热点预测等等各种复杂的。
大数据清洗入库:
1. 主要工具是ETL环境,包括Informatica、datastage等等等等,具体选型不在本文范围之内。
2. 大数据清洗的主要维度:
1)不同数据源的规整:如果需要将不同数据源的同纬度数据合并用于后续分析步骤,则毫无疑问需要进行规整处理:包括如用户的归一化(是否为同一个用户,这个有难度,一般需要深层次分析才能大致确定,预计比例不高的情况下可以容忍),采样周期的归一化(比如1个5S粒度,1个10S粒度),速度数据的归一化(比如一个是40公里/小时,一个是40码/小时),如地理位置的归一化(如果是自有编码,需要映射到归一化的编码上;比如G15,沈海高速等类似的同义词/近义词归一化,对于同一个对象的描述采用不同的编码方式是很常见的,如何归一化是一个挑战,基于自然语言的自动化分析是大杀器,容我研究先…);对于不同采样方式的数据源,归一化方式更是高难度定制化的了。(容具体问题具体分析)
2)数据源内单字段的清洗:一般主要是超过数值区间,比如300码的时速这种很好识别。但是150公里的速度呢?这种多以容忍为主,通过大多数正常的样本抹平。
3)数据源同一,但字段改名等:如崂山西路从某年某月某日起改名叫南泉北路,前后处理要归一;一般至少需要具备自检测(数据源已体现改名,基础地图数据未体现等等情况)能力,最好有自修正能力(更高阶了,比如通过关键网页搜索、官方机构查询等);
4)数据源同一记录多字段的关联清洗:一般是基于高可信度的字段检测可信度相对较低的字段。比如路段信息是限制货车通车,却有标记为货车的信息,要么实际是小汽车、要么是违规了、要么是临时通行。或者识别为异常或者待进一步分析修正。
5)数据源同一对象连续时间段的关联清洗:比如地理位置与之前之后的位置都不连续,或者在隧道获取的位置可信度存疑;该种数据或者抛弃不参与处理或者进行修正。
6)数据源同一时间不同对象的关联清洗:一般主要是看分布是否符合预期,主要的分布比如相对均匀分布、柏松分布等多种。比如同一个限速60的快速路辅路,在若干50/60的样本里面,出现了若干100的样本,那这种样本的使用就要注意,很可能是快速路的样本误归纳到辅路上。
7)数据源连续时间多对象的关联清洗:比如持续稳定低速的,可能是拿着手机徒步冒充奔驰的;也可能是在不能停车只好慢行等人的~~这种需要考虑抛弃。
实际上,以上的清洗一般来说对于基础性的分析一般影响不大,在样本很多的情况下可以认为没有影响,但如果想进入到挖掘阶段,更精确的识别是非常必要的,否则少量的非预期样本可能就会导致打标签等动作在事实上无法操作。