第1章
探索数据分析
在本书深入研究复杂的数据分析方法之前,先来关注一些基本的数据探索任务,这些任务几乎会占据数据科学家80%~90%的工作时间。据估计,每年仅仅是数据准备、清洗、转换和数据聚合就有440亿美元的产值(Data Preparation in the Big Data Era by Federico Castanedo; Best Practices for Data Integration, O?Reilly Media, 2015)。即便如此,人们最近才开始把更多的时间花费在如何科学地开发最佳实践,以及为整个数据准备过程建立文档、教学材料的良好习惯上,这是一件令人惊讶的事情(Beautiful Data: The Stories Behind Elegant Data Solutions, edited by Toby Segaran and Jeff Hammerbacher, O?Reilly Media, 2009;Advanced Analytics with Spark: Patterns for Learning from Data at Scale by Sandy Ryza et al., O?Reilly Media, 2015)。
很少有数据科学家会对数据分析的具体工具和技术看法一致,因为有多种方式可进行数据分析,从UNIX命令行到使用非常流行的开源包,或商业的ETL和可视化工具等。本章重点介绍在笔记本电脑上如何通过Scala进行函数式编程。后面的章节会讨论如何利用这些技术在分布式框架Hadoop/Spark下进行数据分析。
那函数式编程有什么用呢?Spark用Scala开发是有原因的。函数式编程的很多基本原则(比如惰性求值、不变性、无副作用、列表推导式和单子(monad)),在分布式环境下做数据处理都表现得很好,特别是在大数据集上做数据准备和转换等任务时更是如此。也可在PC或笔记本上使用这些技术。通过笔记本电脑连接到分布式存储/处理集群就可处理多达数十TB的超级数据集。可以一次只涉及一个主题或关注一个领域,但通常进行数据采样或过滤时,不必考虑分区是否合适。本书使用Scala作为基本工具,必要时也会采用其他工具。
从某种意义上讲,Scala能实现其他语言所能实现的一切功能。Scala从根本上讲是一种高级语言,甚至可称其为脚本语言。Scala有自己的容器,并且实现了一些基本的算法,这些功能已经通过大量的应用程序(比如Java或C++)和时间的测试,程序员不必关心数据结构和算法实现的底层细节。本章也只会关注如何用Scala/Spark来实现高级任务。
本章会涉及如下主题:
安装Scala
学习简单的数据挖掘技术
学习如何下采样(downsample)原始数据集来提高效率
探讨在Scala上实现基本的数据转换和聚合
熟悉大数据处理工具,比如Spark和Spark Notebook
通过编程实现对数据集的简单可视化
《Scala机器学习》一一第1章 探索数据分析
时间: 2024-11-23 15:58:20
《Scala机器学习》一一第1章 探索数据分析的相关文章
《Scala机器学习》一一导读
前 言 这是一本关于机器学习的书,它以Scala为重点,介绍了函数式编程方法以及如何在Spark上处理大数据.九个月前,当我受邀写作本书时,我的第一反应是:Scala.大数据.机器学习,每一个主题我都曾彻底调研过,也参加了很多的讨论,结合任何两个话题来写都具有挑战性,更不用说在一本书中结合这三个主题.这个挑战激发了我的兴趣,于是就有了这本书.并不是每一章的内容都像我所希望的那样圆满,但技术每天都在快速发展.我有一份具体的工作,写作只是表达我想法的一种方式. 下面先介绍机器学习.机器学习经历了翻天
《Python数据分析与挖掘实战》一第2章 Python数据分析简介
第2章 Python数据分析简介 Python是一门简单易学且功能强大的编程语言.它拥有高效的高级数据结构,并且能够用简单而又高效的方式进行面向对象编程.Python优雅的语法和动态类型,再结合它的解释性,使其在许多领域成为编写脚本或开发应用程序的理想语言. 要认识Python,首先得明确一点,Python是一门编程语言!这就意味着,原则上来说,它能够完成Matlab能够做的所有事情(因为大不了从头开始编写),而且在大多数情况下,同样功能的Python代码会比Matlab代码更加简洁.易懂:另一
《动手玩转Arduino》——第2章 探索Arduino板和IDE 2.1 Arduino板
第2章 探索Arduino板和IDE 本章我们将研究Arduino板和IDE软件,我们要用IDE软件创建和上传Arduino程序到Arduino板(Arduino用草图表示程序,我们还是继续用程序这个传统术语).我们会学到程序的基本框架和程序里可以实现的基本功能,我们要创建和上传我们的第一个程序. 2.1 Arduino板 Arduino到底是什么?根据Arduino网站(http://www.arduino.cc/ )的介绍,它是一个开源的电子原型平台,这个平台是由灵活易用的硬件和软件所组成的
《动手玩转Arduino》——第2章 探索Arduino板和IDE
第2章 探索Arduino板和IDE 动手玩转Arduino本章我们将研究Arduino板和IDE软件,我们要用IDE软件创建和上传Arduino程序到Arduino板(Arduino用草图表示程序,我们还是继续用程序这个传统术语).我们会学到程序的基本框架和程序里可以实现的基本功能,我们要创建和上传我们的第一个程序.
《Scala机器学习》一一第2章 数据管道和建模
**第2章数据管道和建模**上一章介绍了一些研究数据的基本工具.本章将深入介绍一些更复杂的主题,其中包括建立统计模型.最优控制以及科学驱动(science-driven)的工具等问题.不过事先声明,本书只会涉及最优控制的若干主题,因为本书是介绍基于Scala的机器学习(ML),而不是数据驱动的企业管理理论,企业管理理论本身就足以写成一本书.本章不会介绍基于Scala的具体实现,而是在一个高层次上探讨构建数据驱动型企业的问题.后面的章节将详细讨论如何实现这些细节.本章也特别强调不确定性的处理.不确
《Scala机器学习》一一第3章 使用Spark和MLlib
第3章 使用Spark和MLlib 上一章介绍了在全局数据驱动的企业架构中的什么地方以及如何利用统计和机器学习来处理知识,但接下来不会介绍Spark和MLlib的具体实现,MLlib是Spark顶层的机器学习库.Spark是大数据生态系统中相对较新的成员,它基于内存使用而不是磁盘来进行优化.数据仍然可以根据需要转储到磁盘上,但Spark只有在明确指示这样做或活动数据集不适合内存时才会执行转储.如果节点出现故障或由于某些原因从内存中擦除信息,Spark会利用存储的信息来重新计算活动数据集.这与传统
《Scala机器学习》一一2.3 探索与利用问题
2.3 探索与利用问题 探索(exploration)与利用(exploitation)的应用很广,从资金分配到研究自动驾驶汽车项目都在使用,但它最初也是源于赌博问题.该问题的经典形式是一个多臂赌博机(老虎机)问题,即假设有一个或多个手臂的赌博机,按次序以未知概率来拉动每个手臂,以此来表示独立同分布的回报.在这种简化模型中不断独立地重复.假设多个手臂间的回报是独立的.其目标是最大化回报(比如赢钱的金额),同时还要最小化学习成本(即在小于最优获胜率的情况下拉动手臂的次数).假设已经给定了一个手臂选
《Scala机器学习》一一3.3 应用
3.3 应用 下面会介绍Spark/Scala中的一些实际示例和库,具体会从一个非常经典的单词计数问题开始.3.3.1 单词计数 大多数现代机器学习算法需要多次传递数据.如果数据能存放在单台机器的内存中,则该数据会容易获得,并且不会呈现性能瓶颈.如果数据太大,单台机器的内存容纳不下,则可保存在磁盘(或数据库)上,这样虽然可得到更大的存储空间,但存取速度大约会降为原来的1/100.另外还有一种方式就是分割数据集,将其存储在网络中的多台机器上,并通过网络来传输结果.虽然对这种方式仍有争议,但分析表明
《Scala机器学习》一一2.5 数据驱动系统的基本组件
2.5 数据驱动系统的基本组件 简单地说,一个数据驱动架构包含如下的组件(或者可精简为以下这些组件): 数据收集:需要从系统和设备上收集数据.大多数的系统有日志,或者至少可选择将日志写入本地文件系统.一些系统可以通过网络来传输信息,比如syslog.但若没有审计信息,缺少持久层意味着有可能丢失数据. 数据转换层:也被称为提取.变换和加载(ETL).现在数据转换层也可以进行实时处理,即通过最近的数据来计算汇总信息.数据转换层也用来重新格式化数据和索引数据,以便能被UI组件有效地访问. 数据分析和机