内容简介
随着计算机技术的发展,我们的工作和生活中产生了大量的数据,从这些数据中获取有价值的信息变得越来越重要。Clojure是支持函数式编程和并发的Lisp方言,受到众多开发人员的欢迎,而使用Clojure进行数据分析和采集也成为当前的一个热门话题。本书通过一系列实用的、结构化的方法向读者展示如何使用Clojure从数据中获取新的视角和观点。
本书详细讲解了数据分析过程中每个阶段的实施细节和各种实用方法。不论是从网页上抓取数据,还是执行数据挖掘任务或者创建动态和可交互式图表,你都能从本书中找到行之有效的方法。
目录
目 录Contents
前言
关于技术审校者
第1章 导入分析数据 1
1.1 引言 1
1.2 新建项目 1
1.3 将CSV数据读入Incanter数据集 2
1.4 将JSON数据读入Incanter数据集 4
1.5 使用Incanter读入Excel数据 5
1.6 从JDBC数据库读取数据 6
1.7 将XML数据读入Incanter数据集 9
1.8 从网页表中抓取数据 11
1.9 从网页中抓取文本数据 15
1.10 读取RDF数据 17
1.11 使用SPARQL读取RDF数据 20
1.12 整合不同格式的数据 24
第2章 清洗和校验数据 29
2.1 引言 29
2.2 使用正则表达式清洗数据 30
2.3 使用同义词映射保持一致性 31
2.4 识别并去除重复数据 33
2.5 标准化数字格式 35
2.6 调整词频值的度量 36
2.7 标准化日期和时间 38
2.8 大数据集的延迟处理 40
2.9 大数据集抽样 42
2.10 修正拼写错误 43
2.11 解析自定义数据格式 46
2.12 使用Valip校验数据 49
第3章 使用并发编程管理复杂度 51
3.1 引言 51
3.2 使用STM管理程序复杂度 52
3.3 使用agent管理程序复杂度 55
3.4 使用commute获得更好的性能 57
3.5 将agent和STM结合使用 58
3.6 使用ensure维护一致性 60
3.7 将安全的副作用引入STM中 63
3.8 使用validator维护数据一致性 65
3.9 使用watcher追踪处理过程 68
3.10 使用watcher调试并发程序 70
3.11 从agent中错误恢复 71
3.12 使用sized queue管理输入 73
第4章 使用并行编程提高性能 74
4.1 引言 74
4.2 使用pmap并行处理 75
4.3 使用Incanter并行处理 77
4.4 将蒙特卡罗模拟进行划分使pmap性能提升 79
4.5 使用模拟退火算法化分块大小 83
4.6 使用reducers并行处理 86
4.7 使用reducers生成在线统计 89
4.8 使用OpenCL和Calx驾驭你的GPU 91
4.9 使用类型提示 94
4.10 使用Criterium制定基准 96
第5章 使用Cascalog进行分布式数据处理 100
5.1 引言 100
5.2 使用Cascalog和Hadoop分布式处理 101
5.3 使用Cascalog查询数据 104
5.4 使用Apache HDFS分布数据 105
5.5 使用Cascalog解析CSV文件 108
5.6 使用Cascalog执行复杂查询 110
5.7 使用Cascalog聚合数据 112
5.8 定义新Cascalog操作符 113
5.9 组成Cascalog查询 116
5.10 处理Cascalog工作流中的错误 118
5.11 使用Cascalog转换数据 119
5.12 使用Pallet在云上执行Cascalog查询 120
第6章 使用Incanter数据集 126
6.1 引言 126
6.2 加载Incanter样例数据集 126
6.3 将Clojure数据结构加载到数据集中 127
6.4 使用view交互式查看数据集 129
6.5 将数据集转换为矩阵 130
6.6 在Incanter中使用infix公式 132
6.7 使用$选择列 133
6.8 使用$选择行 135
6.9 使用$where过滤数据集 136
6.10 使用$group-by对数据分组 138
6.11 将数据集另存为CSV和JSON 139
6.12 使用$join进行多数据集投影 141
第7章 使用Incanter准备并执行统计数据分析 144
7.1 引言 144
7.2 使用$rollup生成汇总统计 144
7.3 通过变量差别展示变化 146
7.4 调整变量以简化变量关系 148
7.5 使用Incanter Zoo处理时间序列数据 150
7.6 平滑数据以降低噪声 152
7.7 使用bootstrapping验证抽样统计 154
7.8 线性关系建模 156
7.9 非线性关系建模 158
7.10 多峰贝叶斯分布建模 162
7.11 使用本福德定律找出数据错误 165
第8章 使用Mathematica和R 167
8.1 引言 167
摘要与插图
第1章导入分析数据
1.1 引言
如果没有大量数据是无法进行数据分析的,因此任何项目的第一步都是评估有什么样的数据和需要什么样的数据。一旦知道需要什么样的数据,就要想办法得到它。
本章和本书中的许多方法使用Incanter(http://incanter.org/)导入数据并规定使用Incanter数据集。Incanter是Clojure中完成统计分析和图形化显示的库,其作用类似于R。Incanter可能并不适用于所有任务(后面将使用Weka库进行聚类和机器学习),但它仍是在Clojure中进行数据分析的重要工具。本章介绍如何收集数据和使数据适用于Clojure。先来看一下如何创建一个新的项目。我们将从以逗号分隔值(Comma-Separated Value,CSV)的简单数据格式开始,然后学习使用JDBC从关系数据库中读取数据。考虑更复杂的数据源,例如从网络上抓取的数据和链接数据(RDF)。
1.2 新建项目
本书将用到许多第三方库和外部依赖包,因此需要一款下载并记录它们的工具,也需要一款工具用于搭建环境并启动交互式终端解释器(REPL),以便查看代码或者执行程序。
可以使用Leiningen(http://leiningen.org/)完成这项工作,它已经成为标准的自动打包和管理系统。
1.2.1 准备工作
访问Leiningen官方网站(http://leiningen.org/)并下载lein脚本,执行该脚本会下载Leiningen所需的JAR文件。安装说明很清晰,整个安装过程比较简单。
1.2.2 具体实现
用lein new命令生成一个新项目,将项目名称作为参数传入:
现在你会发现一个名为getting-data的子目录,其中将包含getting-data.core命名空间和测试用的桩程序。
下载样例代码
你可以从http://www.packtpub.com你的账户中下载购买的所有Packt书籍中的样例代码文件。如果你通过其他渠道购书,可以访问http://www.packtpub.com/support并注册,这些文件会通过邮件直接发送给你。
1.2.3 实现原理
新建项目目录下有一个名为project.clj的文件,这个文件中包含关于该项目的元数据信息:项目名、版本和许可。文件中也包含代码需要使用的依赖列表。该文件中所使用的规范允许在Maven仓库目录和Clojure库目录(Clojars,https://clojars.org/)搜索下载项目的依赖包。
在每种方法的准备部分,都可以从这个文件的:dependencies部分看到项目需要列出的库。
1.3 将CSV数据读入Incanter数据集
以逗号分隔值(CSV)是单的数据格式之一,并且这种数据格式应用普遍。Excel可以直接读写CSV文件,而且多数数据库也可以。由于CSV文件就是无格式的文本,因此使用任何编程语言都很容易生成或者访问它。
1.3.1 准备工作
先,确保加载了正确的库。Leiningen(https://github.com/technomancy/leiningen)的项目文件project.clj file应该包含以下依赖(也可以使用更新的版本):
另外,在REPL或者代码文件中,包含以下代码:
,我将包含以下数据的文件命名为data/small-sample.csv。
这个文件可以从http://www.ericrochester.com/clj-data-analysis/data/small-sample.csv下载,还有一个带有标题行的版本,可以从http://www.ericrochester.com/clj-data-analysis/data/small-sample-header.csv下载。
1.3.2 具体实现
1. 使用incanter.io/read-dataset函数。
2. 如果CSV文件中有标题行,在调用read-dataset函数时应包含 :header true。