自制数据挖掘工具分析北京房价 (二) 数据清洗

上一节我们通过爬虫工具爬取了近七万条二手房数据,那么这一节就对这些数据进行预处理,也就是所谓的ETL(Extract-Transform-Load)

一.ETL工具的必要性

数据分析的前提是数据清洗。不论如何高大上的算法,遇到错误数据,一个异常抛出来,绝对尸横遍野。而你不能指望核心算法为你处理错误或者短缺的数据。所以,数据清洗(ETL)就变得必不可少了。 如果数据分析是炒菜阶段,那么清洗就是洗菜,绝对是非常重要的一环。

而实际上,ETL工具可以很简单,也可以很复杂。简单到只需要把字符串转换为数字或者提供正则表达式。而复杂的ETL需要建立完整的错误日志机制,智能处理,自动汇总,还要做成工作流,脚本等复杂的形式。我决定做一个折中,提供最需要和差不多够用的功能。如果真有对ETL特别强烈而复杂的需求,那就只能借助专业的ETL工具了。

二.ETL插件

在本系统中,ETL以插件的形式存在,可供系统进行调用。这些ETL工具包括了常见的场景:

  • 正则表达式提取
  • 数据类型转换,包括时间格式等
  • 随机数和范围数生成
  • 数据分割,排序和筛选
  • 噪声生成
  • 字符串转数字编号
  • 脚本数据
  • 高级的模块 如 分词,文本情感分析等

同时所有的模块都可以支持二次扩展。可为了新的场景增加新的模块。 模块分为两类:

  • 无监督工具:不需要之前的数据,直接生成新数据,如噪声产生器
  • 有监督工具:需根据之前的数据生成,如正则提取

这些ETL插件可以形成一个处理队列,以队列的形式依次处理数据,形成职责链。这样就能应对绝大多数的ETL需求。

三. 使用介绍

下面,我们就以北京房价样例数据为例,进行ETL清洗。这些数据爬虫来自于网络,具体的爬取过程可参考前一节内容。

1. 数据导入和观察

首先在数据管理器上点击“导入”按钮,导入XML数据文件,如下图所示:

之后可以普通列表的形式,查看这些数据:

会发现这些数据非常有规律。我们可制定如下方案:

  1. 筛选出正常的数据,因为有些数据是残缺的,比如“面积”一栏是空的。
  2. 其价格是XXXXX元/平米,为了进行统计,需要通过正则进行提取
  3. “属性3” 楼层数,可通过/ ,进行分割,取第二个项就好,最后一项是板楼或塔楼
  4. 在“属性3”中,可通过正则匹配提取年份
  5. 可在“坐标”一项中,通过分割,方便地提取编号,地理位置,所在小区和其他信息。
  6. 其他…

2.编写数据筛选脚本

首先进行数据筛选,将“数据筛选”插件拖入算法框中:

同时进行配置,为了方便,我们仅提取前1000条数据作为分析目标。

最重要的是,编写筛选的自定义函数脚本。与C#的语法相同:

点击开始处理,即可筛选出满足条件的前1000条数据。

3.进行ETL配置:

与上一步类似,将“数据生成与预处理”模块拖到算法管理器中。

将该模块的数据源,选为“全部”:

点击命令列,可对ETL所需的插件进行配置:

集合编辑器中,列举了系统加载的所有ETL插件,我们首先将价格提取出来:

选择原始列名,填入新列名,如果不勾选“添加到新列”,则原始数据就会被覆盖。同时填写正则表达式 \d+ ,用于提取价格中的房价。同时,将目标类型选择为INT,转换完成后,数据的类型就会变为INT

类似的,可提取建设年份。

由于转换后,建设年份为STRING类型,可再添加一个字符串转时间的工具,方便转换为DateTime,直接将原有的数据覆盖就好。

接下来提取地理坐标: 观察这些坐标,同样可以使用正则匹配,此处从略。

接下来是所在的片区,它位于“坐标”这一属性中。使用正则匹配并不方便,因此采用数列分割的方法,即通过字符对该属性进行分割,提取出固定位置的项。通过观察, 可通过符号,进行分割,正好位于第4项

类似的,可以提取小区名称,与所在行政区的唯一区别在于匹配编号,要填2

最终完成的ETL流程如下图所示:

这些ETL插件会顺次执行。如果一个插件的结果依赖于前一个插件,则一定要排在依赖插件的后边

之后点击开始处理,ETL流程即可启动,所有的错误日志都会保存到一个专门的数据集中,用于再次分析和处理。这次处理没有错误,系统提示ETL流程成功结束,下面就是经过ETL后得到的新列

为了保险起见,我们将这次加载的所有设置保存为一个任务,名字为”ETL清洗任务”,如果遇到同样的数据,可以进行相同的任务,而无需进行再次配置。

可以在生成的系统配置文件中,看到此次任务所保存的XML文件:

<Doc Name="ETL数据清洗任务" Description="任务描述" Group="">
  <Nodes>
    <Children X="-2.01" Y="0" Z="0" Group="0" Key="数据筛选_1" Weight="1">
      <Data Collection="全部" Name="数据筛选" NewDataSetName="" ScriptCode="return String.IsNullOrEmpty(item[‘价格‘]) ;  // 1表示筛选该数据,否则表示不筛选" CanRemove="True" Start="0" End="1000" Layer="0" />
    </Children>
    <Children X="3" Y="0" Z="0" Group="1" Key="数据生成和预处理_2" Weight="1">
      <Data Collection="全部" Name="数据生成和预处理" Size="1001" Layer="0">
        <Children Type="正则过滤器" CollumName="价格" NewCollumName="新价格" IsAddNewCollum="True" TargetDataType="INT" ScriptCode="\d+" Index="0" />
        <Children Type="正则过滤器" CollumName="属性3" NewCollumName="年份" IsAddNewCollum="True" TargetDataType="STRING" ScriptCode="\d{4}" Index="0" />
        <Children Type="字符串转时间" CollumName="年份" NewCollumName="" IsAddNewCollum="False" TargetDataType="DATETIME" Format="yyyy" />
        <Children Type="数列分割" CollumName="坐标" NewCollumName="片区" IsAddNewCollum="True" TargetDataType="STRING" SplitChar="," Index="3" SplitPause="SplitPause" />
        <Children Type="数列分割" CollumName="坐标" NewCollumName="小区名" IsAddNewCollum="True" TargetDataType="STRING" SplitChar="," Index="2" SplitPause="SplitPause" />
        <Children Type="正则过滤器" CollumName="坐标" NewCollumName="lag" IsAddNewCollum="True" TargetDataType="DOUBLE" ScriptCode="\d{2}.\d+" Index="0" />
        <Children Type="正则过滤器" CollumName="坐标" NewCollumName="Lng" IsAddNewCollum="True" TargetDataType="DOUBLE" ScriptCode="\d{3}.\d+" Index="0" />
      </Data>
    </Children>
  </Nodes>
  <Paths />
</Doc>

三.总结

本节主要介绍了如何使用该工具进行ETL清洗,下一节我们将正式进入数据分析的流程。敬请期待。

时间: 2024-12-23 09:34:32

自制数据挖掘工具分析北京房价 (二) 数据清洗的相关文章

数据挖掘工具分析北京房价 (一) 数据爬取采集

一. 前言 房价永远是最让人头疼且激动的话题,尤其是在帝都,多少人一辈子都为了一套房子打拼.正好我也想用一个大家比较关心的话题作为案例,把目前我开发的这套软件进行一次完整的演练.从数据采集,到清洗,分析,和最终可视化和报告的呈现,实现一次完整的流程.一方面可以给大家切实的分享一些有用的信息,再者可以更好地了解这套软件的使用流程.  关于本工具的介绍,可参考数据挖掘平台介绍(综述)——平台简介. 自然的,文章分为四部分,本节是第一部分:数据爬取和采集. 二.  准备工作 俗话说巧妇难为无米之炊,没

数据挖掘工具R软件与Weka的比较分析

作为数据挖掘常用的两个工具软件,R软件和weka软件各有千秋,本文对这两种数据挖掘软件进行了比较与分析. R软件介绍 R是统计领域广泛使用的一款软件,是一个开放的统计分析和图形显示的程序设计环境,它与S编程语言相似. R 可以看作是贝尔实验室(Bell Laboratories)的Rick Becker,John Chambers和Allan Wilks开发的S语言的一种实现.S语言是一种用来进行数据探索.统计分析.作图的解释型语言.最初S语言的实现版本主要是S-PLUS.S-PLUS是一个商业

如何以客户为中心进行数据挖掘与分析(转)

数据挖掘与分析可以说是信息领域发展最快的技术,很多不同领域的专家都从中获得了发展的空间,使得数据挖掘成为企业界讨论的热门话题. 随着信息技术的发展,人们采集数据的手段越来越丰富,由此积累的数据日益膨胀,数据量达到GB甚至TB级,而且高位数据也成为了主流,于是数据挖掘这一融合多种分析手段,从大量数据中发现有用知识的方法就应运而生了,它的出现为商业决策提供了有价值的知识,让企业获得了利润,在客户内在需求管理中,数据挖掘正在起着导向的作用. 一.以客户为中心的数据分析框架思想 信息时代到今天已经发生了

7款优秀的开源数据挖掘工具

7款优秀的开源数据挖掘工具 IDMer说道:本文只对几种流行的开源数据挖掘平台进行了检视,比如Weka和R等.如果您想找寻更多的开源数据挖掘软件,可以到KDnuggets和Open Directory上查看.为了评测这些软件,我们用了UCI Machine Learning Repository上的心脏病诊断数据集. Tanagra Tanagra (http://eric.univ-lyon2.fr/wricco/tanagra/) 是使用图形界面的数据挖掘软件,采用了类似Windows资源管

自制反汇编工具使用实例 其二(使用xmm寄存器初始化对象,以及空的成员函数指针)

在反汇编代码中,当看到xmm寄存器,第一反应是将要进行浮点操作或访问,但是更加多的情况是在使用xmm寄存器初始化局部对象. 下面是自制反汇编工具翻译出来的代码: // -[CALayer setAllowsEdgeAntialiasing:] void CALayer20_setAllowsEdgeAntialiasing3A_(id self, SEL sel, uintptr_t setAllowsEdgeAntialiasing) { // 0 pushq %rbp // 1 rbp =

数据挖掘案例分析

数据挖掘应用目前在国内的基本结论是“大企业成功案例少,中小企业需求小”.但是对于市场来说,如果不是真的“没有人买”所以“没有人卖”,那一定是创新的机会所在.个人的判断是,一个数据库只要有几十万以上记录,就有数据挖掘的价值. 搜集以下案例,希望有一定的启发和学习价值. 1. 哪些商品放在一起比较好卖? 这 是沃尔玛的经典案例:一般看来,啤酒和尿布是顾客群完全不同的商品.但是沃尔玛一年内数据挖掘的结果显示,在居民区中尿布卖得好的店面啤酒也卖得很好.原 因其实很简单,一般太太让先生下楼买尿布的时候,先

北京房价当日报20141013

新房 | 家居 资讯 置业 社区 楼盘搜索 | 楼盘动态 | 打折优惠 | 最新开盘 | 本月开盘 | 北京房价当日报 | 最新楼盘曝光 | 楼盘测评 | 置业导购 | 自主看房 | 最新入住 北京房价当日报海淀|朝阳|东城|西城|丰台|石景山|门头沟|房山|通州|顺义|昌平|大兴|密云|怀柔|延庆|平谷|燕郊|其它 海淀新盘当日报价回到顶端 中铁建海淀环保...19000元→ 海淀·嘉郡20000元 北辰香麓雅庭26000元→ 优惠金隅翡丽·蓝爵堡40000元↓ 优惠京投银泰·琨御府73000

任志强:房价至少还要涨十多年 北京房价不会跌

任志强:房价至少还要涨十多年 北京房价不会跌 宏观经济中国新闻网[微博]李金磊2014-11-27 00:01 我要分享 1146 中新网北京11月27日电(记者 李金磊)近日退休的华远地产董事长任志强(微博)26日晚在<财经>年会上表示,中国房价短期内可能会波动,但长期来看房价还会涨,估计仍有10多年的上涨期.他还认为,北京房价也不会下跌. 今年以来,中国楼市降温明显,房地产投资增速.商品房销售面积进入下滑区间,但近期在房贷新政以及降息等利好政策下,楼市开始出现回暖. 未来房价走势如何?任志

六款强大的开源数据挖掘工具推荐

当今这个大数据时代,数据就等于金钱.随着向一个基于应用的领域过渡,数据则呈现出了指数级增长.然而,百分之八十的数据是非结构化的,因此它需要一个程序和方法来从中提取有用信息,并且将其转换为可理解.可用的结构化形式. 在数据挖掘过程中,有大量的工具可供使用,比如采用人工智能.机器学习,以及其他技术等来提取数据. 以下为您推荐六款的数据挖掘工具: 1.WEKA WEKA 原生的非 Java 版本主要是为了分析农业领域数据而开发的.该工具基于 Java 版本,是非常复杂的,并且应用在许多不同的应用中,包