(点击
上方公众号
,可快速关注)
英文:Roman Trusov
译文:伯乐在线专栏作者 - XiaoxiaoLi
http://python.jobbole.com/85704/
【伯乐在线导读】:有位网友在 Quora 提问,并补充说「我有10天空闲时间,每天想花十个小时学习数据科学入门知识,应该学点什么呢?谢谢」伯乐在线摘编了 Roman Trusov 的回复,非常值得新手参考。
哥们我太羡慕你了,不是谁都有像你这样的机会的。
10天100小时的学习时间里应该分配给尽量多样化的知识。这也算是一大笔投资,所以应当严肃对待,根据学出来的结果可以把拿到实习 offer 之类的当做目标。
说实话,我不觉得学习在线课程对你这次的学习有什么用,上课也不过就能给你点成就感罢了。如果你有不错的数学和编程基础,那么直接上手写代码、跑数据、看结果,比上在线课程有意思得多。那可是一百个小时呀!如果你真能在接下来十天的一百个小时里尽自己最大的努力学习,就能学到世界级专家所需知识的百分之一。时间紧任务重,你,准备好了嘛?
库和算法的内部实现之类的将来有得是时间学,你现在还用不上。我下面列出的任务量巨大,需要你全身心投入,目标是让你能够广泛地接触到这个领域的一些主要工具。
第一天和第二天
下载 StackExchange 的公开数据:下载链接:https://archive.org/details/stackexchange (需梯子)
处理数据需要关系数据库管理系统,第一天大概要干这些:
-
安装 MySQL 配置好后把上面下载的数据导入数据库
-
阅读 SQL 基础知识。花点时间做几个小练习题来熟悉数据操作。比如说,写个能够抽取所有满足下面条件的提问的脚本:提问是关于 Python 和 SQL的、回答多于三个、最佳回答的作者在这两个主题下拥有大于十个被选中的回答。你有可能会发现脚本性能有问题。
-
阅读 SQL 索引知识,了解哈希和排序等。修改上面的脚本让它能立刻马上跑出结果。
-
写个能处理上面查询语句的 Python 类。这就需要学习 Python MySQL driver。你需要一个工具,能帮助你从数据库中抽取数据并且能把它们以比较方便的形式呈现出来。
虽不清楚题主底子怎么样,但我觉得上面的任务即使对菜鸟来说也是完全能够完成的。你只要有些基础的 Python 知识就足够了。
第二天可以用来了解用 pandas 来读取数据,以及用 numpy 来对数值型数据进行操作。这些库的文档看起来页数多很吓人,但不用都读。只要学会导入 CSV 文件、添加提取数据列、合并两个数据库这些操作就行了。
第三天
虽然实际工作中通常都是在整个数据库上做查询,但学习如何在小量级的数据做操作并且得到有意义的结果也是相当重要的。比如说,可以试着从整个数据集中自己随机抽取一些数据,然后把它们的得分的分布和整个数据集上的得分分布做比较。
现在可以再进一步了。虽然手握整个 Stack Exchange 的数据库,但是因为我对 StackOverflow 里面的数据比较熟悉一点,下面只会用到 StackOverflow 的数据。我能想到的一个有意思的练习:根据时间看编程语言的流行程度。
为什么这个练习有用呢?
会做上面的例子,自然而然就可以探寻更多数据里有意思的属性了。学会问问题是一个很重要的能力。
第四天和第五天
数据科学家曾被评为“21 世纪最性感的职业”。你知道还有什么很性感么?图论哦!
问题标签之间是如何联系在一起的?是否能仅仅用 Stack Overflow 上的回答就构建一个和技术有关的图?该选哪个标准来计算两个标签有多相似?图的可视化该如何做?试 Gephi 了吗?
都做好了之后,需要给上面生成的图添加描述。仅仅一张图本身能提供的价值有限,你需要一直盯着它看,直到理解它背后所代表的意义。
学习聚类算法 (至少要学 k-means 和 DBSCAN)和 K 近邻算法。要是愿意钻研的话,还可以试试各种图论算法,算图的各项指标。建议使用 networkx 这个库和 scikit-learn 库里的一些相关部分,这些库能大大简化任务的难度。
做这个有什么用?