论如何成为一名数据分析师part 2

数据科学入门的自学之路。对于那些想要入门数据科学的新手,这里有一份大纲,或许能够为大家提供一些思路。(其内容摘自我的一篇博客:如何获得"基本技能集"—自主学习的方式)。我的建议是从下面每项建议中逐一挑选一到两个资料或链接,掌握其中介绍的内容。
1.基本的先决条件
数学、算法与数据库:Mathispower4u - 微积分、Coursera - 线性代数、Coursera - 算法分析、Coursera - 数据库导论
统计学:面向程序员的概率论与统计学、面向程序员的统计学公式、Coursera - 数据分析、Coursera - 统计学
编程:Google开发者社区 - R语言编程讲座、DataCamp - R语言导论、Python科学计算简介、如何像一名计算机科学家一样思考
2.数据采集与清洗
分布式文件系统与数据库:Coursera - Hadoop平台与应用框架、Yahoo - Hadoop入门教程、Udacity - Hadoop与MapReduce新手指南、MongoDB初学者指南)
数据再加工:预测分析 - 数据预处理、基于Pandas的数据清洗、使用Pandas分析与管理数据、Data Wrangler、OpenRefine
3.数据挖掘与过滤
基于R的数据分析:R语言数据科学、Coursera - 基于R的数据分析计算
基于Python的数据分析(numpy、scipy、pandas、scikit):Python数据科学入门、SciPy 2015简介 - NumPy入门、Python与Pandas统计数据分析、SciPy 2013 - SciKit Learn入门教程I&II
探索性数据分析:基于R的探索性数据分析、基于Python的探索性数据分析、UC Berkeley - 描述性统计学、Unix Shell数据科学命令基础
数据挖掘、机器学习:数据挖掘学习路线图、Coursera - 机器学习、Stanford - 统计学习、MITx - 分析学应用、STATS 202 数据挖掘与分析、CalTech - 数据驱动学习、Coursera - Web智能与大数据
大数据机器学习:AMP Camp Berkeley Spark导论与练习、EdX - 基于Apache Spark的大数据分析、Stanford - 海量数据集挖掘
数据表示与优化:
Tableau - 训练教程、基于ggplot2与plyr的R语言数据可视化、预测分析 - 概述与数据可视化、Flowing Data - 使用手册、UC Berkeley - 数据可视化、D3.js入门教程
领域知识:
此类技能来自于行业中实际的工作经验。不同数据集往往具有不同的特点,且基于某些假设和行业知识。例如,专注于股票市场数据研究的数据分析师可能需要额外的时间来研究餐馆交易数据的相关知识。
综合材料:
• Data Literacy Course – IAP
• Coursera - Introduction to Data Science
• Coursera - Data Science Specialization
图书:
• Elements of Statistical Learning
• Python Machine Learning
具体应用:
• Harvard Data Science Course Homework
• Kaggle: The Home of Data Science
• Analyzing Big Data with Twitter
• Analyzing Twitter Data with Apache Hadoop
数据科学入门的系统方法
有很多种方法可以使你成为一名数据科学家,如果你希望以一种更为系统、完善的方式学习数据科学,你可以参考这篇博客:如何获得"基本技能集"—系统化学习的方式。

基本技能集(Essential Skill Set)是每一名数据科学家都需要了解的基础技能。一般来说,这些技能可以通过在相关机构攻读计算机科学学位或统计学学位的方式获得。斯坦福大学的计算机科学课程与统计学课程提供了一份很不错的参考课程列表。如今,这些课程中有一些课程彼此关联,相互联系,但也有许多课程与其他课程的联系并不大。例如,对于计算机科学专业来说,尽管学习大规模分布式数据库与算法很重要,但是学习人机界面交互和用户体验设计似乎没有那么大的必要,类似的还有单一类型存储、操作系统以及通信网络等等。同样地,有些统计学课程过于注重书本知识,换句话说,仅教授"古老的的学校统计学",其中包括成千上万种假设检验的方法,而不是把重心放在机器学习(聚类、回归、分类等)上。因此,无论是传统统计学还是计算机科学,它们都有一些很优秀的、对于数据科学学习必不可少的课程,但也有很多可有可无、与数据科学无关的课程(我敢说,就目前的情况而言,传统统计学中值得学习的课程比例,要比计算机科学中的比例更大一些)。因此,我们需要谨慎且明智地选择课程。

或者,我们也可以考虑那些新开设的数据科学课程,一些大学正在提供我前面提到的一些技能。这些大学将传统统计学同计算机科学合并在一起,以向学生传授前面第四项提到的那些基本技能,此外,也包括锻炼学生差异化技能的相关课程。纽约大学的数据科学理学硕士与旧金山大学的分析学理学硕士等都对此类基本课程进行了结合。这里列出了这类课程的完整列表:设有数据科学学位的学院。

数据科学家在具体职能上也存在着不同的分支。O’Rielly出版社近期出版的一本名为"Analyzing the Analyzers"的图书对数据科学家的划分提供了一项很好的参考,书中数据科学家的众多角色根据技能的不同被划分至四种不同的类型。因此,我们可以根据数据科学家的这四种类型,选择最适合自己的学习方向,数据科学家的四种类型如下:

• 数据商人,专注于产品与盈利的数据科学家。他们是领导者、管理者和企业家,同时也热衷于技术。比较普遍的成长路线是在获得工程学位的同时,攻读工商管理硕士学位或前面提到的新型数据科学学位。
• 数据创意顾问,不拘一格的多面手,能够结合各种各样的数据和工具进行工作。他们对自己的定位可能是艺术家或者黑客,并且擅长数据可视化以及开源技术。这类数据科学家需要具备工程学位(主要是统计学或经济学),但是对商业技能没有过多的要求。
• 数据开发人员,专注于相关软件和工具的编写,以便在生产环境中进行数据分析、统计以及机器学习等任务。他们一般都有计算机科学学位,并具备所谓的"大数据"领域的相关工作经验。
• 数据研究人员,应用科学训练方法以及在学术界中学到的工具和技术来组织数据。他们可能具有统计学、经济学或物理学等领域的理学学位或博士学位,他们对数学工具的创造性应用能够产生宝贵的洞察和数据产品。
正如前面所介绍的,数据科学家角色的四种主要类型所对应的不同技能需求如下图所示:

Vik Paruchur,开发者,数据科学家,Dataquest创始人


Pathan Karimkhan
开发人员,专注于大数据、机器学习、自然语言处理
我大约在四年前开始学习数据科学。那时我没有一点实际编程的经验。下面的建议非常适合那些与我过去经历类似的初学者。
围绕着数据科学学习的许多建议首先都会从Python开始,或者是从一门基础的线性代数课程开始。 这个建议没有任何问题,但是,如果我采纳了这些建议,我可能永远都不会学到任何真正与数据科学相关的知识。

  1. 学会热爱数据
    似乎没有人谈论过学习数据科学的动机是什么。数据科学是一个广泛却又模糊的领域,这使得数据科学很难入门。这真的很难。如果没有一个强大的动机激励着自己,你最后很可能会半途而废,认为自己不适合这个领域。

你需要一些能够激励你的动力,即使是在凌晨一点,公式看起来越来越困惑,甚至开始怀疑自己今晚究竟能不能搞明白神经网络,你仍然能够打起精神继续学习。

你需要学会找到不同事物间的联系,例如统计学、线性代数以及神经网络。你应该避免问出类似"我下一步该学些什么?"这样的问题。

我学习数据科学时的切入点是股市预测,尽管当时我并不知道自己在做些什么。我最开始为了预测股市编写的代码基本上没有使用任何统计数据。但是我可以知道的是,程序的结果并不理想,因此我需要日夜不停地工作,让程序的效果更好。

我痴迷于程序性能的优化。我迷恋股市。我在培养我对数据的热爱。而正是因为我对数据的热爱,我才会有动力学习任何我需要的技术,让我的程序运行得更好。

我知道不是每个人都会痴迷于预测股市。但是,找到那些你真正感兴趣、能够激励你学习的东西真的非常重要。

能够引起你兴趣的事情有很多,例如找出你所在城市的新鲜或者有趣的事物,为互联网上的所有设备建立映射关系,找出NBA球员打球时的真正位置,或者其他任何不同寻常的事情等等。学习数据科学最神奇的地方在于有无限多的有趣的事情值得我们去研究——你需要做的只是提出一个问题,然后找到一种能够获得答案的方法。

调整你的学习过程,根据兴趣引导自己下一步的学习方向,而不是相反。

  1. 在实践中学习
    学习神经网络、图像识别以及其他的尖端技术非常重要。但是大多数的数据科学并不涉及这些内容。这里有一些很重要的准则:
    • 你实际工作中90%的时间都会用来清洗数据。
    • 深入理解几个算法要比浅显地了解很多算法好得多。如果你对线性回归、k均值聚类和逻辑回归有很深入的理解,能够解释算法的原理和结果,推导其中的公式,能够把这些算法应用到实际的数据项目中去,那么比起那些只知道每个单独的算法、却不懂得如何应用的人,你的就业优势会大得多。
    • 大多数情况下,当你需要使用某一个算法时,你都可以在现有的工具库中找到现成的版本(你很少需要自己编写代码实现支持向量机——这会耗费大量的时间)。
    • 这意味着学习数据科学最好的方式是在项目中实践。在具体项目中,你可以接触到那些真正有效且有用的技术。你也会有一个更好的方式来搭配你在股市的投资组合。

在项目中实践的首要任务是找到一份你感兴趣的数据集。根据这个数据集的特点,回答一个有趣的问题。反复重复这样的过程。

这里有一些网站提供免费的数据资源,或许是一个不错的选择:
• 100多个有趣的统计数据集
• 数据集归档

另一个关键点在于找到一个深层次的问题(我也正是这样做的),预测股市的任务仍然可以把它分解成若干个小的可实施的步骤。我首先使用了雅虎财经提供的API,获取了每日的股价数据。随后,我设置了一些指标,比如过去几天股票的均价,并使用这些指标来预测未来股价的走势(请注意,在这里我并没有使用真正的算法,只是从技术的角度进行分析)。这样做的效果并不是很理想,因此,我学习了一些统计学的知识,然后使用了线性回归。我使用了另一个API爬取每分钟的股价变化,并把这些数据存储在SQL数据库中。就这样一直不断调整预测策略,直到算法的效果达到我的要求。
这样做的意义在于我从中找到了学习的动力。我不是简单地学习SQL语法——而是使用SQL语句来存储股价数据,在这个过程中我学到的知识远比单纯学习SQL学到的多得多。如果没有实践,学到的知识很快就会遗忘,你也永远不会为真正的数据科学工作做好准备。

  1. 学会交流经验
    数据科学家经常需要将自己的分析结果展示给其他人。良好的沟通技巧能够让一名还不错的数据科学家成为一名真正伟大的数据科学家。

在与他人交流经验的过程中,首先需要对主题和理论有很好的理解。另外,也需要清楚如何简洁地组织自己的数据。最后,还要清晰明了地阐述你的分析结果。

在交流一些比较复杂的概念时,我们很难做到有效地沟通,这里有一些你应该尝试的技巧:
• 写一篇博客。展示你的数据分析结果。
• 试着向那些没有技术背景的朋友和家人讲解一些数据科学中的概念。这样做的效果很神奇,你能够从中明白什么程度的介绍才能让其他人理解这些概念。
• 尝试在会议中发表自己的见解。
• 使用GitHub托管所有的分析结果和程序。
• 活跃于Quora、DataTau以及Reddit等相关社区。

  1. 向同龄人学习
    你无法想象在与他人合作的过程中能够学到多少知识。在数据科学领域,团队合作在工作环境中也同等重要。
    • 这里有一些具体的做法:
    • 在会议中寻找自己的同事。
    • 为开源软件包贡献自己的力量。
    • 如果你能够提供帮助或合作,联系那些发表了关于数据分析的有趣博客的作者。
    • 试试Kaggle,看自己能不能找到一个队友。

  2. 不断提高难度
    你对现在正在从事的项目是否满意?你最后一次尝试新的技术和概念是在什么时候?一个星期以前?是时候尝试一些更高难度的任务了。数据科学就像是一座陡峭的山峰,如果你停止攀爬,你永远都无法欣赏到山顶的美景。

如果你发现自己的工作已经没有什么挑战,这里有一些做法可供参考:
• 处理更大的数据集,学习使用Spark。
• 看看自己能不能让算法运行得更快。
• 你如何将算法扩展到多个处理器上?你能做到吗?
• 尝试教一个新手,做你现在做的同样的事情。

写在最后
这并不是一个从入门到精通的学习路线图,明确告诉你在各个阶段需要做什么,相反,这些内容是你在学习数据科学时需要遵循的一套粗略的指南。如果你做到了前面提到的这些事情,那么你会发现自己已经掌握了数据科学的专业知识。

我通常不喜欢那些介绍了一大堆资料的方法,因为这种方法提供了太多的选择,读者很难弄清楚下一步究竟该做些什么。我看到过很多人在面对一大批教科书和在线课程时选择了放弃。

我个人认为,如果端正自己的心态, 任何人都可以从事数据科学相关的工作。
我本人也是dataquest.io的创始人,这个网站可以帮助你在浏览器中学习数据科学。它封装了很多在前面内容中介绍的算法,可以为用户创造更好的学习体验。你可以通过分析有趣的数据集来学习数据科学,例如CIA文档和NBA球员统计数据。如果你不知道如何编程,请不要担心——我们会介绍如何使用Python。我们选择Python是因为它是最适合初学者学习的语言,可用于很多实际的数据科学工作,而且还可以应用在各种应用的开发当中。

一些有用的资源
在我参与一些项目时,我发现这些资源很有帮助。请记住,资源本身并没有任何效果——要为这些知识找到应用的场景:

• 可汗学院——不错的统计学和线性代数基础内容。
• 线性代数导论,第四版——Gilbert Strang的线性代数著作。
• 教科书|微积分 麻省理工学院公开课程——同样出自Gilbert Strang,微积分经典教科书。
• 统计学习基础:数据挖掘、推理与预测(第二版)——一本很好的机器学习图书。
• Andrew Ng的在线机器学习课程——Coursera上的热门课程。
• OpenIntro统计学——很好的统计学基础教程。
• 谷歌学术——阅读论文是了解当前研究进展的一个很好的方式。例如,这篇是Breiman最初发表的关于随机森林的论文。

成为一名数据科学家通常需要在计算机科学与应用、建模、统计学、分析以及数学等方面具有坚实的基础。

数据科学家的独特之处在于具有强大的商业头脑,以及能够以一种足以影响组织结构如何应对业务挑战的方式将分析结果传达给业务与IT领导的能力。 优秀的数据科学家不仅能够解决业务问题,他们还能够挑选出对组织机构最有价值的问题。

此外,我也相信在数据科学、机器学习以及自然语言处理领域的深入研究在未来能够有助于解决现实生活中的实际难题。在我看来,4-5年的开发经验才能够达到这样的水平。

  1. 计算机科学课程导论
    注意:这里仅涉及提供代码指导的计算机科学入门课程
    在线资源:
    • Udacity - 计算机科学入门课程
    • Coursera - 计算机科学101

  2. 至少使用一种面向对象编程语言编写代码
    适合新手的在线资源包括:
    • Coursera - 学习编程:基础
    • MIT - Java语言程序设计
    • Google - 相关的Python课程
    • Coursera - Python交互式编程
    • Python开源电子书
    • 进阶在线资源
    • Udacity - 计算机程序设计
    • Coursera - 学习编程:撰写高质量代码
    • Coursera - 程序设计语言
    • 布朗大学 - 编程语言导论

  3. 学习其他的编程语言
    注意:可以考虑这些编程语言——Java Script、CSS、HTML、Ruby、PHP、C、Perl、Shell、Lisp、Scheme。
    在线资源:
    • w3school.com - HTML教程
    • 学会编程

  4. 测试代码
    注意:学会如何定位bug,创建测试用例以及软件鲁棒性检测。
    在线资源:
    • Udacity - 软件测试方法
    • Udacity - 软件调试

  5. 提高逻辑推理与离散数学知识
    在线资源:
    • MIT - 计算机科学数学
    • Coursera - 逻辑学导论
    • Coursera - 线性离散优化
    • Coursera - 概率图模型
    • Coursera - 博弈论

  6. 深入了解算法与数据结构
    注意:学习基本的数据类型(栈、队列、背包等)、排序算法(快速排序、归并排序、堆排序等)、数据结构(二叉搜索树、红黑树、哈希表等)以及算法复杂度分析等等。
    在线资源:
    • MIT - 算法导论
    • Coursera - 算法导论 Part 1& Part 2
    • 维基百科 - 算法列表
    • 维基百科 - 数据结构列表
    • 图书 - 算法设计手册

  7. 深入理解操作系统
    在线资源:
    • UC Berkeley - 计算机科学162

  8. 学习人工智能
    在线资源:
    • 斯坦福大学 - 机器人导论、自然语言处理、机器学习

  9. 学习如何构建编译器
    在线资源:
    • Coursera - 编译器设计

  10. 学习密码学
    在线资源:
    • Coursera - 密码学
    • Udacity - 密码学应用

  11. 学习并发编程
    在线资源:
    • Coursera - 异构并行编程

针对大数据的工具和技术:

Apache Spark - Apache Spark是一个开源的数据分析集群计算框架,最早由加州大学伯克利分校的AMP实验室开发。Spark建立在Hadoop分布式文件系统(HDFS)之上,适用于Hadoop生态环境的中各种框架。同时,Spark并不局限于两阶段的MapReduce编程范式, 对于某些特定的应用,Spark的性能可以取得优于Hadoop MapReduce100倍的性能。

• 数据库管道 - 你会发现数据库不仅仅可以用来处理数据, 它也可以应用在很多其他功能的组件当中。采集、存储、探索、机器学习与可视化,对这个项目的成功来说都至关重要。

SOLR - Solr实现了一个高度可扩展的数据分析引擎,其用户能够进行快速实时的知识发现。Solr(读音同"solar")是一个Apache Lucene项目中的开源企业搜索平台。其主要功能包括全文搜索、命中标示、层面检索、动态聚类、数据库集成以及富文档处理(例如Word、PDF)。Solr支持分布式搜索以及索引复制,具有高度的可扩展性。Solr是最受欢迎的企业搜索引擎。在Solr 4中还增加了NoSQL特性。

S3 - Amazon S3是由Amazon Web Services提供的用于在线文件存储的Web服务。Amazon S3基于Web服务接口提供文件存储服务。

Hadoop - Apache Hadoop是一个开源软件框架,用于存储和大规模处理分布在商用硬件集群中的数据集。Hadoop是Apache中的一个顶级项目,由成员遍及全球的社区贡献者和用户共同构建和使用。Hadoop使用Apache License 2.0协议进行授权。

MapReduce:Hadoop MapReduce是一个软件框架,用于快速编写分布式应用程序,以可靠、容错的方式在大型商用硬件集群(数千个节点)上并行处理海量数据(TB规模的数据集)。

MapReduce作业通常将输入数据集拆分为若干个独立的数据块,这些数据块由map任务以完全并行的方式进行处理。MapReduce框架首先对map任务的输出进行排序,随后将其输入到reduce任务中。通常,MapReduce作业的输入和输出都存储在文件系统当中。 该框架负责任务调度、作业监视以及失败任务的重新执行。

Corona-Corona是一个新型调度框架,将集群资源管理与作业协调相分离。Corona引入了一个用于跟踪集群中的各个节点和可用资源总量的集群管理器。 Corona为每个作业构建了专用的作业跟踪程序,并且能够在与客户端(对于小型作业来说)相同的进程中运行,或者作为集群中的单独进程(对于大型作业来说)运行。

与我们在前面介绍的Hadoop MapReduce实现的一个主要区别在于,Corona使用了基于推送的,而不是基于拉式的任务调度机制。在集群管理器接收到作业跟踪程序发出的资源接收请求后,Corona将授权的资源推送至作业跟踪器当中。 此外,一旦作业跟踪器获得了授权的资源,它将创建相应的数据处理任务,并将这些任务推送至任务跟踪器以便后续执行。 在这种调度机制中并不涉及周期性的心跳检测,因此调度等待时间得以最小化。 详见:使用Corona更高效地调度MapReduce作业。

HBase - HBase是一个非关系型的分布式开源数据库,其以Google提出的BigTable为原型,并使用Java语言实现。它作为Apache软件基金会中Apache Hadoop项目的子项目进行开发,并运行在HDFS(Hadoop分布式文件系统)之上,为Hadoop提供类似于BigTable的功能。也就是说,HBase提供了一种存储海量规模稀疏数据的容错方法(在数据集中存在着大量的空值或无关数据集,仅含有少量的有效信息,例如,在一组20亿条的记录当中查找最大的50项,或者找到数量不足整个数据集0.1%的非零项数据)。

Zookeeper - Apache ZooKeeper是Apache软件基金会中的一个软件项目,为大型分布式系统提供开源的分布式配置、同步服务以及命名注册等服务。ZooKeeper由Apache Hadoop的Zookeeper子项目发展而来,而如今已经成为了Apache的顶级项目。

Hive - Apache Hive是一个基于Hadoop构建的数据仓库基础架构,用于提供数据汇总、数据查询以及数据分析等服务。尽管最初由Facebook开发,Apache Hive现在由Netflix等其他公司进行开发与使用。Amazon在其Amazon Web Services的Amazon Elastic MapReduce中也维护着Apache Hive的一个软件分支。

Mahout - Apache Mahout是Apache软件基金会的一个项目,提供分布式或其他可扩展机器学习算法的免费实现,主要用于协作过滤、聚类以及分类领域Mahout中许多算法的实现基于Apache Hadoop平台。Mahout还提供了用于常见数学操作(与线性代数和统计学相关的数学操作)以及原始Java集合的Java库。Mahout是一项正在进行中的工作,它实现的算法数量正在迅速增长,但目前来讲,仍有很多算法尚未实现。

• Lucene - 是一个包含NLP和搜索相关工具的软件集合,但它的核心功能是一个搜索索引和检索系统。它从HBase等数据存储中获取数据,并为其构建索引,以便后续在搜索查询时实现快速检索。Solr使用Lucene作为引擎,为数据索引和数据检索任务提供了一个便捷高效的REST API。ElasticSearch也与Solr类似。

Sqoop - 是一个用于实现关系型数据库与分布式数据仓库间数据转换的命令行接口。当你在每天晚上都为向Hive仓库导入数据库表的备份和快照时,这种工具或许可以提供帮助。

Hue - 是包含上述工具子集的基于Web的图形化用户界面。Hue将最常用的Apache Hadoop组件集成到单个接口中,以web程序的形式发布,对于单独的用户来说不需要额外的安装。Hue注重用户体验,它的主要目标是让用户"仅使用"Hadoop,而不需要关心底层复杂的分布式系统或使用命令行执行任务。

Pregel - 和它的孪生开源软件Giraph提供了一种在集群上对数十亿个节点和数万亿条边执行图算法的方法。值得注意的是,MapReduce模型不太适合图数据处理,因此在这个模型中,Pregel并没有使用Hadoop或MapReduce,但数据存储仍选择了HDFS或GFS。

NLTK - 自然语言工具集,通常简称为NLTK,包含一组为Python编程语言提供的用于符号形式和统计学自然语言处理(NLP)的工具库和程序。NLTK包括一些图形演示和示例数据。NLTK还有一本配套的图书,介绍了该工具集支持的语言处理任务隐含的基本概念,以及一本使用手册。

NLTK旨在为自然语言处理或其他密切相关领域的研究和教学提供支持,这些相关领域包括经验语言学、认知科学、人工智能、信息检索以及机器学习等。如果对于我上面说的内容还不太清楚的小伙伴,可以去九道门商业数据分析学员了解一下。

猜你喜欢

转载自blog.csdn.net/jiudaomen8888/article/details/109081177