大数据编程入门经典
Ⅰ 大数据如何入门
导读:
第一章:初识Hadoop
第二章:更高效的WordCount
第三章:把别处的数据搞到Hadoop上
第四章:把Hadoop上的数据搞到别处去
第五章:快一点吧,我的SQL
第六章:一夫多妻制
第七章:越来越多的分析任务
第八章:我的数据要实时
第九章:我的数据要对外
第十章:牛逼高大上的机器学习
经常有初学者会问,自己想往大数据方向发展,该学哪些技术,学习路线是什么样的,觉得大数据很火,就业很好,薪资很高……首先,如果你确定了想往这个方面发展,先考虑自己的过去从业经历、专业、兴趣是什么。计算机专业——操作系统、硬件、网络、服务器?软件专业——软件开发、编程、写代码?还是数学、统计学专业——对数据和数字特别感兴趣?
其实这就是想告诉你大数据的三个发展方向,平台搭建/优化/运维/监控、大数据开发/设计/架构、数据分析/挖掘。
先扯一下大数据的4V特征:
数据量大,TB->PB
数据类型繁多,结构化、非结构化文本、日志、视频、图片、地理位置等;
商业价值高,但是这种价值需要在海量数据之上,通过数据分析与机器学习更快速的挖掘出来;
处理时效性高,海量数据的处理需求不再局限在离线计算当中。
Hadoop 1.0、Hadoop 2.0
MapRece、HDFS
NameNode、DataNode
JobTracker、TaskTracker
Yarn、ResourceManager、NodeManager
HDFS目录操作命令;
上传、下载文件命令;
提交运行MapRece示例程序;
打开Hadoop WEB界面,查看Job运行状态,查看Job运行日志。
知道Hadoop的系统日志在哪里。
- SELECT word,COUNT(1) FROM wordcount GROUP BY word;
- 这时,使用Flume采集的数据,不是直接到HDFS上,而是先到Kafka,Kafka中的数据可以由多个消费者同时消费,其中一个消费者,就是将数据同步到HDFS。
- 至此,大数据平台底层架构已经成型了,其中包括了数据采集、数据存储与计算(离线和实时)、数据同步、任务调度与监控这几大模块。接下来是时候考虑如何更好的对外提供数据了。
现如今,正式为了应对大数据的这几个特点,开源的大数据框架越来越多,越来越强,先列举一些常见的:
文件存储:Hadoop HDFS、Tachyon、KFS
离线计算:Hadoop MapRece、Spark
流式、实时计算:Storm、Spark Streaming、S4、Heron
K-V、NOSQL数据库:HBase、Redis、MongoDB
资源管理:YARN、Mesos
日志收集:Flume、Scribe、Logstash、Kibana
消息系统:Kafka、StormMQ、ZeroMQ、RabbitMQ
查询分析:Hive、Impala、Pig、Presto、Phoenix、SparkSQL、Drill、Flink、Kylin、Druid
分布式协调服务:Zookeeper
集群管理与监控:Ambari、Ganglia、Nagios、Cloudera Manager
数据挖掘、机器学习:Mahout、Spark MLLib
数据同步:Sqoop
任务调度:Oozie
······
第一章:初识Hadoop
1.1学会网络与Google
不论遇到什么问题,先试试搜索并自己解决。
Google首选,翻不过去的,就用网络吧。
1.2参考资料首选官方文档
特别是对于入门来说,官方文档永远是首选文档。
相信搞这块的大多是文化人,英文凑合就行,实在看不下去的,请参考第一步。
1.3先让Hadoop跑起来
Hadoop可以算是大数据存储和计算的开山鼻祖,现在大多开源的大数据框架都依赖Hadoop或者与它能很好的兼容。
关于Hadoop,你至少需要搞清楚以下是什么:
自己搭建Hadoop,请使用第一步和第二步,能让它跑起来就行。
建议先使用安装包命令行安装,不要使用管理工具安装。
另外:Hadoop1.0知道它就行了,现在都用Hadoop 2.0.
1.4尝试使用Hadoop
1.5了解它们的原理
MapRece:如何分而治之;
HDFS:数据到底在哪里,什么是副本;
Yarn到底是什么,它能干什么;
NameNode到底在干些什么;
ResourceManager到底在干些什么;
1.6自己写一个MapRece程序
仿照WordCount例子,自己写一个(照抄也行)WordCount程序,
打包并提交到Hadoop运行。
不会Java的话,Shell、Python都可以,有个东西叫Hadoop Streaming。
如果能认真完成了以上几步,恭喜你,你的一只脚已经进来了。
第二章:更高效的WordCount
2.1学点SQL吧
如果不懂数据库的童鞋先学习使用SQL句。
2.2 SQL版WordCount
在1.6中,你写(或者抄)的WordCount一共有几行代码?
如果用SQL的话:
这便是SQL的魅力,编程需要几十行,甚至上百行代码,SQL一句就搞定;使用SQL处理分析Hadoop上的数据,方便、高效、易上手、更是趋势。不论是离线计算还是实时计算,越来越多的大数据处理框架都在积极提供SQL接口。
2.3安装配置Hive
Hive算是数据仓库工具,安装不难,网上有很多教程,配置完成后,可以正常进入Hive命令行。
2.4试试使用Hive
尝试在Hive中创建wordcount表,并运行2.2中的SQL语句。在Hadoop WEB界面中找到刚才运行的SQL任务。看SQL查询结果是否和1.4中MapRece中的结果一致。
明明写的是SQL,为什么Hadoop WEB界面中看到的是MapRece任务?
2.5学会Hive的基本命令
创建、删除表;加载数据到表;下载Hive表的数据;并学习更多关于Hive的语法和命令。
以上如果按照第一章和第二章的流程认真完整的走了一遍后,应该已经具备以下技能和知识点:
0和Hadoop2.0的区别
MapRece的原理(还是那个经典的题目,一个10G大小的文件,给定1G大小的内存,如何使用Java程序统计出现次数最多的10个单词及次数);
HDFS读写数据的流程;向HDFS中PUT数据;从HDFS中下载数据;
自己会写简单的MapRece程序,运行出现问题,知道在哪里查看日志;
会写简单的SELECT、WHERE、GROUP BY等SQL语句;
Hive SQL转换成MapRece的大致流程;
Hive中常见的语句:创建表、删除表、往表中加载数据、分区、将表中数据下载到本地;
从上面的学习,你已经了解到,HDFS是Hadoop提供的分布式存储框架,它可以用来存储海量数据,MapRece是Hadoop提供的分布式计算框架,它可以用来统计和分析HDFS上的海量数据,而Hive则是SQL On Hadoop,Hive提供了SQL接口,开发人员只需要编写简单易上手的SQL语句,Hive负责把SQL翻译成MapRece,提交运行。
此时,你的认知中“大数据平台”是这样的:
总结:
为什么Spark比MapRece快。
使用SparkSQL代替Hive,更快的运行SQL。
使用Kafka完成数据的一次收集,多次消费架构。
自己可以写程序完成Kafka的生产者和消费者。
前面的学习已经掌握了大数据平台中的数据采集、数据存储和计算、数据交换等大部分技能,而这其中的每一步,都需要一个任务(程序)来完成,各个任务之间又存在一定的依赖性,比如,必须等数据采集任务成功完成后,数据计算任务才能开始运行。如果一个任务执行失败,需要给开发运维人员发送告警,同时需要提供完整的日志来方便查错。
第七章:越来越多的分析任务
不仅仅是分析任务,数据采集、数据交换同样是一个个的任务。这些任务中,有的是定时触发,有点则需要依赖其他任务来触发。当平台中有几百上千个任务需要维护和运行时候,仅仅靠crontab远远不够了,这时便需要一个调度监控系统来完成这件事。调度监控系统是整个数据平台的中枢系统,类似于AppMaster,负责分配和监控任务。
7.1 Apache Oozie
1. Oozie是什么?有哪些功能?
2. Oozie可以调度哪些类型的任务(程序)?
3. Oozie可以支持哪些任务触发方式?
4.安装配置Oozie。
7.2其他开源的任务调度系统
Azkaban
light-task-scheler
alibaba/zeus
……
此时:
第八章:数据要实时
在第六章介绍Kafka的时候提到了一些需要实时指标的业务场景,实时基本可以分为绝对实时和准实时,绝对实时的延迟要求一般在毫秒级,准实时的延迟要求一般在秒、分钟级。对于需要绝对实时的业务场景,用的比较多的是Storm,对于其他准实时的业务场景,可以是Storm,也可以是Spark Streaming。当然,如果可以的话,也可以自己写程序来做。
8.1 Storm
1. 什么是Storm?有哪些可能的应用场景?
2. Storm由哪些核心组件构成,各自担任什么角色?
3. Storm的简单安装和部署。
4. 自己编写Demo程序,使用Storm完成实时数据流计算。
8.2 Spark Streaming
1. 什么是Spark Streaming,它和Spark是什么关系?
2. Spark Streaming和Storm比较,各有什么优缺点?
3. 使用Kafka + Spark Streaming,完成实时计算的Demo程序。
此时:
第九章:数据要对外
通常对外(业务)提供数据访问,大体上包含以下方面:
离线:比如,每天将前一天的数据提供到指定的数据源(DB、FILE、FTP)等;
离线数据的提供可以采用Sqoop、DataX等离线数据交换工具。
实时:比如,在线网站的推荐系统,需要实时从数据平台中获取给用户的推荐数据,这种要求延时非常低(50毫秒以内)。
根据延时要求和实时数据的查询需要,可能的方案有:HBase、Redis、MongoDB、ElasticSearch等。
OLAP分析:OLAP除了要求底层的数据模型比较规范,另外,对查询的响应速度要求也越来越高,可能的方案有:Impala、Presto、SparkSQL、Kylin。如果你的数据模型比较规模,那么Kylin是最好的选择。
即席查询:即席查询的数据比较随意,一般很难建立通用的数据模型,因此可能的方案有:Impala、Presto、SparkSQL。
这么多比较成熟的框架和方案,需要结合自己的业务需求及数据平台技术架构,选择合适的。原则只有一个:越简单越稳定的,就是最好的。
如果你已经掌握了如何很好的对外(业务)提供数据,那么你的“大数据平台”应该是这样的:
第十章:牛逼高大上的机器学习
这里本人也没有接触太多,稍微讲一下我们的业务场景应用,遇到的能用机器学习解决的问题大概这么三类:
分类问题:包括二分类和多分类,二分类就是解决了预测的问题,就像预测一封邮件是否垃圾邮件;多分类解决的是文本的分类;
聚类问题:从用户搜索过的关键词,对用户进行大概的归类。
推荐问题:根据用户的历史浏览和点击行为进行相关推荐。
大多数行业,使用机器学习解决的,也就是这几类问题。
入门学习线路:
数学基础;
机器学习实战(Machine Learning in Action),懂Python最好;
SparkMlLib提供了一些封装好的算法,以及特征处理、特征选择的方法。
那么把机器学习部分加进 “大数据平台”。
Ⅱ 有哪些 Python 经典书籍
【Python从入门到精通经典书籍推荐】
Python入门
目的:了解Python,学会用Python编程。
Python入门书众多,没必要全部阅读,根据介绍挑选合适自己的。PS:排名不分先后。
《Python编程入门:从入门到实践》
【同时使用Python 2.X和3.X讲解】
Amazon编程入门类榜首图书,最值得关注的Python入门书
从基本概念到完整项目开发,帮助零基础读者迅速掌握Python编程,开发实际项目
这本书分两部分:
第一部分介绍用Python编程所必须了解的基本概念,包括matplotlib、NumPy和Pygal等强大的Python库和工具介绍,以及列表、字典、if语句、类、文件与异常、代码测试等内容;
第二部分将理论付诸实践,讲解如何开发三个项目,包括简单的Python 2D游戏开发,如何利用数据生成交互式的信息图,以及创建和定制简单的Web应用,并帮读者解决常见编程问题和困惑。
《Python基础教程(第2版·修订版)》
【Python 2.5讲解,Python 3上也能运行】
各大网店最畅销的Python入门书
全书分为三部分。
第一部分讲述Python语法,没有废话,还掺入了一些Python 3.0要注意的细节。
第二部分介绍了常用的GUI、框架等应用,点到即止,算是为第三部分做铺垫了,从数目众多的应用中可以了解到Python的强大。
第三部分是Project,全书最大的亮点,大家肯定喜欢。
作者将前面讲述的内容应用到10个引人入胜的项目中,并以模板的形式介绍了项目的开发过程,手把手教授Python开发。
《Python语言及其应用》
【Python 3.X】
语言风格轻松诙谐,讲解多种Python工具和第三方库
实例涉及商业、科研以及艺术领域使用Python开发各种应用
亚马逊最受欢迎的Python编程书之一,评分4.5
书中首先介绍了Python的基础知识,然后逐渐深入多种主题,结合教程和攻略式风格来讲解Python 3中的概念。每章结尾的练习可以帮助你巩固所学的知识。
本书会为你学习Python打下坚实的基础,包括测试、调试、代码复用的最佳实践以及其他开发技巧。
《Python编程入门(第3版)》
【Python 3.X 】
从算术运算、字符串、变量,到函数、数据结构、输入输出和异常处理,应有尽有
《父与子的编程之旅:与小卡特一起学Python》
【Python 2.X 】
原版Amazon 最受欢迎的青少年编程图书
最简单易学的内容组织方式,老少皆宜
第一版获Jolt大奖
本书中,Warren和Carter父子以亲切的笔调、通俗的语言,透彻全面地介绍了计算机编程世界。
他们以简单易学的Python语言为例,通过可爱的漫画、有趣的例子,生动地介绍了变量、循环、输入和输出、数据结构以及图形用户界面等编程的基本概念。
只要懂得计算机的基本操作,如启动程序、保存文件,任何人都可以跟随本书,由简入难,学会编写程序,甚至制作游戏。
本书内容经过教育专家的评审,经过孩子的亲身检验,并得到了家长的认可。
《编程导论》
【Python 2.7】
以麻省理工学院开放式课程(OpenCourseWare)中最受欢迎的计算机科学课程为基础,旨在培养读者的编程思维,使读者拥有计算机科学家的视野
本书涵盖了Python的大部分特性,重点介绍如何使用Python这门语言,共包含编程基础、Python程序设计语言、理解计算的关键概念、计算问题的解决技术等四个方面。
本书将Python语言特性和编程方法贯穿全书,目的是帮助读者在学习Python的同时掌握如何使用计算来解决有趣的问题。
Python进阶
需要一定Python基础。
《流畅的Python》
【兼顾Python 3和Python 2】
PSF研究员、知名PyCon演讲者心血之作
Python核心开发人员担纲技术审校
全面深入,对Python语言关键特性剖析到位
大量详尽代码示例,并附有主题相关高质量参考文献和视频链接
本书致力于帮助Python开发人员挖掘这门语言及相关程序库的优秀特性,避免重复劳动,同时写出简洁、流畅、易读、易维护,并且具有地道Python风格的代码。本书尤其深入探讨了Python语言的高级用法,涵盖数据结构、Python风格的对象、并行与并发,以及元编程等不同的方面。
《Python项目开发实战(第2版)》
【Python 2.7】
网罗Python项目开发中的流程,让你的编程事半功倍
Python项目与封装/团队开发环境/问题驱动开发/源码管理(Mercurial) Jenkins持续集成(CI)/环境搭建与部署的自动化(Ansible)/Django框架……
这是一本偏工程的图书,没怎么讲Python语言基础知识,直接告诉你怎么搭建开发环境,做好代码管理和文档管理以及缺陷管理等工作。
《Python网络编程攻略》
【Python 2.7】
可作为任何一门网络编程课程中培养实践技能的补充材料
需要读者对Python语言及TCP/IP等基本的网络概念有了解,但即使不精通也能通过本书理解相关概念
本书全面介绍了Python网络编程涉及的重要问题,包括网络编程、系统和网络管理、网络监控以及Web应用开发。作者通过70多篇攻略,清晰简明地描述了各种网络任务和问题,提出了可用于多种场景的解决方案,并细致地分析了整个操作过程。
《Python网络编程(第3版)》
【Python 3.X】
涵盖网络编程所有经典话题,提供大量代码清单及示例
从应用开发角度介绍网络编程基本概念、模块以及第三方库
本书针对想要深入理解使用Python来解决网络相关问题或是构建网络应用程序的技术人员,结合实例讲解了网络协议、网络数据及错误、电子邮件、服务器架构和HTTP及Web应用程序等经典话题。
具体内容包括:全面介绍Python3中最新提供的SSL支持,异步I/O循环的编写,用Flask框架在Python代码中配置URL,跨站脚本以及跨站请求伪造攻击网站的原理及保护方法,等等。
《Python性能分析与优化》
【Python 2.X】
全面掌握Python代码性能分析和优化方法
消除性能瓶颈,迅速改善程序性能
本书首先介绍什么是性能分析,性能分析如何在项目开发周期中发挥作用,以及通过在项目中进行性能分析实践能够取得的效果。
紧接着介绍分析性能所需的核心工具(性能分析器和可视化性能分析器)。
然后介绍一系列性能优化技术,最后一章会介绍一个具有实际意义的优化案例。
《精通Python设计模式》
【Python 3.X】
用现实例子展示各模式的关键特性
16种基本设计模式,轻松解决软件设计常见问题
本书分三部分,共16章介绍一些常用的设计模式。
第一部分介绍处理对象创建的设计模式,包括工厂模式、建造者模式、原型模式;
第二部分介绍处理一个系统中不同实体(类、对象等)之间关系的设计模式,包括外观模式、享元模式等;
第三部分介绍处理系统实体之间通信的设计模式,包括责任链模式、观察者模式等。
《Flask Web开发:基于Python的Web应用开发实战》
【Python 2.7和3.3】
从安装与环境设置讲起,一步一步搭建服务器端Web应用
全流程讲解Web应用开发,给出最佳实践
本书共分三部分,全面介绍如何基于Python微框架Flask进行Web开发。
第一部分是Flask简介,介绍使用Flask框架及扩展开发Web程序的必备基础知识。
第二部分则给出一个实例,真正带领大家一步步开发完整的博客和社交应用Flasky,从而将前述知识融会贯通,付诸实践。
第三部分介绍了发布应用之前必须考虑的事项,如单元测试策略、性能分析技术、Flask程序的部署方式等。
《Python Web开发:测试驱动方法》
【(Django、Selenium)相关部分使用Python 3.3讲解】
亚马逊4.8星评好书
实战式TDD开发指南,使用Django等流行框架开发现代Web应用!
学习Django、Selenium、Git、jQuery和Mock,以及其他当前流行Web开发技术
“这本书很棒、很有趣,所讲的全都是重点知识。如果有人想用Python做测试、学习Django或者想使用Selenium,我极力推荐这本书。要使开发者保持头脑清醒,测试可谓至关重要。Harry完成了一项不可思议的工作,他不仅吸引了我们对测试的关注,而且还探索了切实可行的测试实践方案。”
——Michael Foord,Python核心开发者,unittest维护者
Python应用
用Python数据分析,数据处理,机器学习等等。
《数据科学入门》
【Python 2.7】
Google数据科学家、软件工程师Joel Grus作品
用Python从零开始讲解数据科学的重量级读本
数据科学、机器学习、模式识别领域必备
本书从零开始讲解数据科学。
具体内容包括Python简介,可视化数据,线性代数,统计,概率,假设与推断,梯度下降法,如何获取数据,k近邻法,朴素贝叶斯算法等。
作者借助大量具体例子以及数据挖掘、统计学、机器学习等领域的重要概念,通过讲解基础数据科学工具和算法实现,带你快速跨入数据科学大门。
书中含大量数据科学领域的库、框架、模块和工具包。
《机器学习实战》
【Python 2.7】
最畅销机器学习图书
介绍并实现机器学习的主流算法
面向日常任务的高效实战内容
全书通过精心编排的实例,切入日常工作任务,摒弃学术化语言,利用高效的可复用Python代码来阐释如何处理统计数据,进行数据分析及可视化。
通过各种实例,读者可从中学会机器学习的核心算法,并能将其运用于一些策略性任务中,如分类、预测、推荐。另外,还可用它们来实现一些更高级的功能,如汇总和简化等。
《机器学习系统设计》
【Python 2.7及以上】
微软Bing核心团队成员推出
聚焦算法编写和编程方式
结合大量实例学会解决实际问题
本书将向读者展示如何从原始数据中发现模式,首先从Python与机器学习的关系讲起,再介绍一些库,然后就开始基于数据集进行比较正式的项目开发了,涉及建模、推荐及改进,以及声音与图像处理。通过流行的开源库,我们可以掌握如何高效处理文本、图片和声音。同时,读者也能掌握如何评估、比较和选择适用的机器学习技术。
《Python数据处理》
【Python 2.7】
将数据处理过程自动化!
全面掌握用Python进行爬虫抓取以及数据清洗与分析的方法,轻松实现高效数据处理!
本书采用基于项目的方法,介绍用Python完成数据获取、数据清洗、数据探索、数据呈现、数据规模化和自动化的过程。
主要内容包括:Python基础知识,如何从CSV、Excel、XML、JSON和PDF文件中提取数据,如何获取与存储数据,各种数据清洗与分析技术,数据可视化方法,如何从网站和API中提取数据。
《Python数据分析基础教程:NumPy学习指南(第2版)》
【Python 2.7】
NumPy中文入门教程,Python数据分析首选
从最基础的知识讲起,手把手带你进入大数据挖掘领域
囊括大量具有启发性与实用价值的实战案例
本书从NumPy安装讲起,逐渐过渡到数组对象、常用函数、矩阵运算、线性代数、金融函数、窗函数、质量控制等内容,致力于向初中级Python编程人员全面讲述NumPy及其使用。
另外,通过书中丰富的示例,你还将学会Matplotlib绘图,并结合使用其他Python科学计算库(如SciPy和Scikits),让工作更有成效,让代码更加简洁而高效。
《Python数据挖掘入门与实践》
【Python 3.4】
全面释放Python的数据分析能力
掌握大数据时代核心技术,轻松入门数据挖掘技术并将其应用于实际项目
本书使用简单易学且拥有丰富第三方库和良好社区氛围的Python语言,由浅入深,以真实数据作为研究对象,真刀实枪地向读者介绍Python数据挖掘的实现方法。通过本书,读者将迈入数据挖掘的殿堂,透彻理解数据挖掘基础知识,掌握解决数据挖掘实际问题的最佳实践!
《Python科学计算基础教程》
【Python 2.7及以上】
精彩案例展示Numpy等科学计算模块的强大功能和广泛应用
剖析Python关于并行与大数据计算的方法
总结科学计算的任务、难点以及最佳实践经验
本书是将Python用于科学计算的实用指南,既介绍了相关的基础知识,又提供了丰富的精彩案例,并为读者总结了最佳实践经验。
其主要内容包括:科学计算的基本概念与选择Python的理由,科学工作流和科学计算的结构,科学项目相关数据的各个方面,用于科学计算的API和工具包,如何利用Python的NumPy和SciPy包完成数值计算,用Python做符号计算,数据分析与可视化,并行与大规模计算,等等。
《Python数据分析实战》
【Python 2.X】
了解Python在信息处理、管理和检索方面的强大功能
学会如何利用Python及其衍生工具处理、分析数据
三个真实Python数据分析案例,将理论付诸实践
《Python数据分析实战》展示了如何利用Python 语言的强大功能,以最小的编程代价进行数据的提取、处理和分析,主要内容包括:数据分析和Python 的基本介绍,NumPy 库,pandas 库,如何使用pandas 读写和提取数据,用matplotlib 库和scikit-learn 库分别实现数据可视化和机器学习,以实例演示如何从原始数据获得信息、D3 库嵌入和手写体数字的识别。
《Python网络数据采集》
【Python 3.X】
原书4.6星好评,一本书搞定数据采集
涵盖数据抓取、数据挖掘和数据分析
提供详细代码示例,快速解决实际问题
本书介绍网络数据采集,并为采集新式网络中的各种数据类型提供了全面的指导。
第一部分重点介绍网络数据采集的基本原理:如何用Python从网络服务器请求信息,如何对服务器的响应进行基本处理,以及如何以自动化手段与网站进行交互。
第二部分介绍如何用网络爬虫测试网站,自动化处理,以及如何通过更多的方式接入网络。
《Python计算机视觉编程》
【Python 2.6及以上】
亚马逊计算机视觉类图书No.1
详细剖析多种计算机视觉工具
大量示例极易上手
本书是计算机视觉编程的权威实践指南,通过Python语言讲解了基础理论与算法,并通过大量示例细致分析了对象识别、基于内容的图像搜索、光学字符识别、光流法、跟踪、3D重建、立体成像、增强现实、姿态估计、全景创建、图像分割、降噪、图像分组等技术。
Ⅲ 如何入门大数据
大数据
数据科学并没有一个独立的学科体系,统计学,机器学习,数据挖掘,数据库,分布式计算,云计算,信息可视化等技术或方法来对付数据。
但从狭义上来看,我认为数据科学就是解决三个问题:
1. data pre-processing;(数据预处理)
2. data interpretation;(数据解读)
3.data modeling and analysis.(数据建模与分析)
这也就是我们做数据工作的三个大步骤:
1、原始数据要经过一连串收集、提取、清洗、整理等等的预处理过程,才能形成高质量的数据;
2、我们想看看数据“长什么样”,有什么特点和规律;
3、按照自己的需要,比如要对数据贴标签分类,或者预测,或者想要从大量复杂的数据中提取有价值的且不易发现的信息,都要对数据建模,得到output。
这三个步骤未必严谨,每个大步骤下面可能依问题的不同也会有不同的小步骤,但按我这几年的经验来看,按照这个大思路走,数据一般不会做跑偏。
这样看来,数据科学其实就是门复合型的技术,既然是技术就从编程语言谈起吧,为了简练,只说说R和Python。但既然是荐数据科学方面的书,我这里就不提R/Python编程基础之类的书了,直接上跟数据科学相关的。
R programming
如果只是想初步了解一下R语言已经R在数据分析方面的应用,那不妨就看看这两本:
R in action:我的R语言大数据101。其实对于一个没有任何编程基础的人来说,一开始就学这本书,学习曲线可能会比较陡峭。但如果配合上一些辅助材料,如官方发布的R basics(http://cran.r-project.org/doc/contrib/usingR.pdf),stackoverflow上有tag-R的问题集(Newest ‘r’ Questions),遇到复杂的问题可在上面搜索,总会找到解决方案的。这样一来,用这本书拿来入门学习也问题不大。而且这本书作者写得也比较轻松,紧贴实战。
Data analysis and graphics using R:使用R语言做数据分析的入门书。这本书的特点也是紧贴实战,没有过多地讲解统计学理论,所以喜欢通过情境应用来学习的人应该会喜欢这本入门书。而且这本书可读性比较强,也就是说哪怕你手头没电脑写不了代码,有事没事拿出这本书翻一翻,也能读得进去。
但如果你先用R来从事实实在在的数据工作,那么上面两本恐怕不够,还需要这些:
Modern applied statistics with S:这本书里统计学的理论就讲得比较多了,好处就是你可以用一本书既复习了统计学,又学了R语言。(S/Splus和R的关系就类似于Unix和Linux,所以用S教程学习R,一点问题都没有)
Data manipulation with R:这本书实务性很强,它教给你怎么从不同格式的原始数据文件里读取、清洗、转换、整合成高质量的数据。当然和任何一本注重实战的书一样,本书也有丰富的真实数据或模拟数据供你练习。对于真正从事数据处理工作的人来说,这本书的内容非常重要,因为对于任何研究,一项熟练的数据预处理技能可以帮你节省大量的时间和精力。否则,你的研究总是要等待你的数据。
R Graphics Cookbook:想用R做可视化,就用这本书吧。150多个recipes,足以帮你应付绝大多数类型的数据。以我现在极业余的可视化操作水平来看,R是最容易做出最漂亮的图表的工具了。
An introction to statistical learning with application in R:这本书算是著名的the element of statistical learning的姊妹篇,后者更注重统计(机器)学习的模型和算法,而前者所涉及的模型和算法原没有后者全面或深入,但却是用R来学习和应用机器学习的很好的入口。
A handbook of statistical analysis using R:这本书内容同样非常扎实,很多统计学的学生就是用这本书来学习用R来进行统计建模的。
Python
Think Python,Think Stats,Think Bayes:这是Allen B. Downey写的著名的Think X series三大卷。其实是三本精致的小册子,如果想快速地掌握Python在统计方面的操作,好好阅读这三本书,认真做习题,答案链接在书里有。这三本书学通了,就可以上手用Python进行基本的统计建模了。
Python For Data Analysis: 作者是pandas的主要开发者,也正是Pandas使Python能够像R一样拥有dataframe的功能,能够处理结构比较复杂的数据。这本书其实analysis讲得不多,说成数据处理应该更合适。掌握了这本书,处理各种糟心的数据就问题不大了。
Introction to Python for Econometrics, Statistics and Data Analysis:这本书第一章就告诉你要安装Numpy, Scipy, Matplotlib, Pandas, IPython等等。然后接下来的十好几章就是逐一介绍这几个库该怎么用。很全面,但读起来比较枯燥,可以用来当工具书。
Practical Data Analysis: 这本书挺奇葩,貌似很畅销,但作者把内容安排得东一榔头西一棒子,什么都讲一点,但一个都没讲透。这本书可以作为我们学习数据分析的一个索引,看到哪块内容有意思,就顺着它这个藤去摸更多的瓜。
Python Data Visualization Cookbook: 用Python做可视化的教材肯定不少,我看过的也就这一本,觉得还不错。其实这类书差别都不会很大,咬住一本啃下来就是王道。
Exploratory Data Analysis 和 Data Visualization
Exploratory Data Analysis:John Tukey写于1977年的经典老教材,是这一领域的开山之作。如今EDA已经是统计学里的重要一支,但当时还是有很多人对他的工作不屑一顾。可他爱数据,坚信数据可以以一种出人意料的方式呈现出来。正是他的努力,让数据可视化成为一门无比迷人的技术。但这本书不推荐阅读了,内容略过时。要想完整地了解EDA,推荐下一本:
Exploratory Data Analysis with MATLAB:这本书虽然标题带了个MATLAB,但实际上内容几乎没怎么讲MATLAB,只是每讲一个方法的时候就列出对应的MATALB函数。这本书的重要之处在于,这是我读过的讲EDA最系统的一本书,除了对visualization有不输于John Tucky的讲解外,对于高维的数据集,通过怎样的方法才能让我们从中找到潜在的pattern,这本书也做了详尽的讲解。全书所以案例都有对应的MATALB代码,而且还提供了GUI(图形用户界面)。所以这本书学起来还是相当轻松愉悦的。
Visualize This:中译本叫“鲜活的数据”,作者是个“超级数据迷”,建立了一个叫http://flowingdata.com的网页展示他的数据可视化作品,这本书告诉你该选择什么样的可视化工具,然后告诉你怎样visualize关系型数据、时间序列、空间数据等,最后你就可以用数据讲故事了。如果你只想感受一下数据可视化是个什么,可以直接点开下面这个链接感受下吧!A tour through the visualization zoo(A Tour Through the Visualization Zoo)
Machine Learning & Data Mining
这一块就不多说了,不是因为它不重要,而是因为它太太太重要。所以这一部分就推两本书,都是”世界名著“,都比较难读,需要一点点地啃。这两本书拿下,基本就算是登堂入室了。其实作为机器学习的延伸和深化,概率图模型(PGM)和深度学习(deep learning)同样值得研究,特别是后者现在简直火得不得了。但PGM偏难,啃K.Daphne那本大作实在太烧脑,也没必要,而且在数据领域的应用也不算很广。deep learning目前工业界的步子迈得比学术界的大,各个domain的应用如火如荼,但要有公认的好教材问世则还需时日,所以PGM和deep learning这两块就不荐书了。
The Element of Statistical Learning:要学机器学习,如果让我只推荐一本书,我就推荐这本巨著。Hastie、Tibshirani、Friedman这三位大牛写书写得太用心了,大厦建得够高够大,结构也非常严谨,而且很有前瞻性,纳入了很多前沿的内容,而不仅仅是一部综述性的教材。(图表也做得非常漂亮,应该是用R语言的ggplot2做的。)这本书注重讲解模型和算法本身,所以需要具备比较扎实的数理基础,啃起这本书来才不会太吃力。事实上掌握模型和算法的原理非常重要。机器学习(统计学习)的库现在已经非常丰富,即使你没有完全搞懂某个模型或算法的原理和过程,只要会用那几个库,机器学习也能做得下去。但你会发现你把数据代进去,效果永远都不好。但是,当你透彻地理解了模型和算法本身,你再调用那几个库的时候,心情是完全不一样的,效果也不一样。
Data Mining: Concepts and Techniques, by Jiawei Han and Micheline Kamber 数据挖掘的教材汗牛充栋,之所以推荐这本韩家炜爷爷的,是因为虽然他这本书的出发点是应用,但原理上的内容也一点没有落下,内容非常完整。而且紧跟时代,更新的很快,我看过的是第二版,就已经加进去了social network analysis这种当时的前沿内容。现在已经有第三版了,我还没看过,但应该也加入了不少新内容。其实这本书并不难读,只是篇幅较长,啃起来比较耗时。
其实这两本书里单拎出来一块内容可能又是几本书的节奏,比如bayesian方法,再拿出两三本书来讲也不为过,我个人用到的比较多,而且也确实有不少好书。但并非是所有data scientist都要用到,所以这一块就不再细说。
还有一些印象比较深刻的书:
Big Data Glossary: 主要讲解大数据处理技术及工具,内容涵盖了NoSQL,MapRece,Storage,Servers,NLP库与工具包,机器学习工具包,数据可视化工具包,数据清洗,序列化指南等等。总之,是一本辞典式的大数据入门指导。
Mining of Massive Datasets:这本书是斯坦福大学Web Mining的讲义,里面很多内容与韩家炜的Data Mining那本书重合,但这本书里详细地讲了MapRece的设计原理,PageRank(Google创业时期的核心排序算法,现在也在不断优化更新)讲解得也比较详细。
Developing Analytic Talent: 作者是个从事了十几年数据工作的geek,技术博客写得很有个人风格,写的内容都比较偏门,通常只有具备相关数据处理经验的人能体会出来,丝毫不照顾初学者的感受。比如他会谈到当数据流更新太快时该怎么办,或者MapRece在什么时候不好用的问题,才不管你懂不懂相关基础原理。所以这本书不太适合初学者阅读。这本书其实是作者的博客文章的集结,用how to become a data scientist的逻辑把他近几年的博客文章串联了起来。
Past, Present and Future of Statistical Science:这本书是由COPSS(统计学社大大委员会,由国际各大统计学会的带头人组成)在50周年出版的一本纪念册,里面有50位统计学家每人分别贡献出的一两篇文章,有的回忆了自己当年如何走上统计学这条路,有的探讨了一些统计学的根本问题,有的谈了谈自己在从事的前沿研究,有的则给年轻一代写下了寄语。非常有爱的一本书。
其它资料
Harvard Data Science:这是H大的Data science在线课,我没有修过,但口碑很好。这门课需要费用8千刀左右,比起华盛顿大学的4千刀的Data science在线课虽贵一倍,但比斯坦福的14千刀要便宜将近一半(而且斯坦福的更偏计算机)。如果想自学,早有好心人分享了slides: (https://drive.google.com/folderview?id=0BxYkKyLxfsNVd0xicUVDS1dIS0k&usp=sharing)和homeworks and solutions: (https://github.com/cs109/content)
PyData:PyData是来自各个domain的用Python做数据的人每年举行一次的聚会,期间会有各路牛人举行一些规模不大的seminar或workshop,有好心人已经把video上传到github,有兴趣的去认领吧(DataTau/datascience-anthology-pydata · GitHub)
工具
R/Python/MATLAB(必备):如果是做数据分析和模型开发,以我的观察来看,使用这三种工具的最多。R生来就是一个统计学家开发的软件,所做的事也自然围绕统计学展开。MATLAB虽然算不上是个专业的数据分析工具,但因为很多人不是专业做数据的,做数据还是为了自己的domain expertise(特别是科学计算、信号处理等),而MATLAB又是个强大无比的Domain expertise工具,所以很多人也就顺带让MATLAB也承担了数据处理的工作,虽然它有时候显得效率不高。Python虽然不是做数据分析的专业软件,但作为一个面向对象的高级动态语言,其开源的生态使Python拥有无比丰富的库,Numpy, Scipy 实现了矩阵运算/科学计算,相当于实现了MATLAB的功能,Pandas又使Python能够像R一样处理dataframe,scikit-learn又实现了机器学习。
SQL(必备):虽然现在人们都说传统的关系型数据库如Oracle、MySQL越来越无法适应大数据的发展,但对于很多人来说,他们每天都有处理数据的需要,但可能一辈子都没机会接触TB级的数据。不管怎么说,不论是用关系型还是非关系型数据库,SQL语言是必须要掌握的技能,用什么数据库视具体情况而定。
MongoDB(可选):目前最受欢迎的非关系型数据库NoSQL之一,不少人认为MongoDB完全可以取代mySQL。确实MongoDB方便易用,扩展性强,Web2.0时代的必需品。
Hadoop/Spark/Storm(可选): MapRece是当前最著名也是运用最广泛的分布式计算框架,由Google建立。Hadoop/Spark/storm都是基于MapRece的框架建立起来的分布式计算系统,要说他们之间的区别就是,Hadoop用硬盘存储数据,Spark用内存存储数据,Storm只接受实时数据流而不存储数据。一言以蔽之,如果数据是离线的,如果数据比较复杂且对处理速度要求一般,就Hadoop,如果要速度,就Spark,如果数据是在线的实时的流数据,就Storm。
OpenRefine(可选):Google开发的一个易于操作的数据清洗工具,可以实现一些基本的清洗功能。
Tableau(可选):一个可交互的数据可视化工具,操作简单,开箱即用。而且图表都设计得非常漂亮。专业版1999美刀,终身使用。媒体和公关方面用得比较多。
Gephi(可选):跟Tableau类似,都是那种可交互的可视化工具,不需要编程基础,生成的图表在美学和设计上也是花了心血的。更擅长复杂网络的可视化。
Ⅳ 大数据入门书籍有哪些
1:<大数据时代>
这是学习大数据必读的一本书,也是最系统的关于大数据概念的一本书,由维克托·迈尔-舍恩伯格和肯尼斯·库克耶编写,主要介绍了大数据理念和生活工作及思维变革的关系。
它被包括宽带资本董事长田朔宁、知名IT评论人谢文等专业读者鉴定为“大数据领域最好的著作没有之一,一本顶一万本”。有这么好吗?看完自己评价吧。这本书对这个大规模产生、分享和应用数据的新的大时代进行了阐述和厘清,作者围绕“要全体不要抽样、要效率不要绝对精确、要相关不要因果”三大理念,通过数十个商业和学术案例,剖析了万事万物数据化和数据复用挖掘的巨大价值。
2:<爆发>
由巴拉巴西编写,主要讲了在一个历史故事的连续讲述中,了解大数据的概念实质。从大数据的历史开始,能更深入的了解大数据的发展历程。
巴拉巴西整本书讲述的大数据根本目的,是预测。他甚至有零有整地判断,人类行为93%是可以预测的。打个比方,千百年前人类无法如今天般准确预测天气,以致某些大致预测的行为都被认为是“通神”,其实核心在于对天气数据的海量占有和分析能力。但假如全人类的所有基础及行为数据全部被占有全部能分析呢?比如通过智能终端LBS功能采集全部运动轨迹、通过金融系统采集所有支付记录、通过SNS采集所有社会关系和通过邮件、文档、社会视频监控和自我视频监测采集所有言行记录,24小时,每分每秒,一生,全地球70亿人,那会如何?
3:<大数据>
由徐子沛编写,看美国政府在大数据开放上的进程与反复,算是个案。如果能够基本了解这三本的观点,出门有底气,见人腰杆直,不再被忽悠。
全书讲述的,是大数据在美国政府管理中的应用,以及美国政府运行方式大数据变革的历史与斗争,其实也是故事性的。从奥巴马上台就颁布《信息公开法案》,到设立第一个美国政府首席信息官开始,讲述美国政府与民间在社会数据公开的斗争史,以及美国社会管理向大数据思维转变的过程。首先,这算是一个最详实的案例;其次,这代表的不是某种管理方式变革,深处是对民主运行机制的变革与进步。说好了,这本书用心良苦,远远超越科普技术领域;说坏了,其心可诛。有一段,民间斗争,逼迫奥巴马公布所有每日白宫全部日程,包括接见了谁、谈话的全部内容,这不就是个人大数据全公开在公众人物上的应用吗?这可比现在所谓官员公开财产的要求高了几十倍——这要求政府全部行为、全部数据、全部公开,全体公众随时可查——技术和成本上其实
Ⅳ 小白,想入门程序员,应该从什么开始学,顺序是什么
嗯,可以侬买进,然后进这个程序员,然后多学一些,最好是找认识的人