从0到1:文科生也谈数据分析
按:本文从一个自学者的视角并结合自身经历来谈一谈自己作为一个文科生如何从零基础开始学习R,并逐渐深入这一领域,可能存在不足之处,欢迎指正。
阅读全文大约需要8~15分钟,全文内容结构如下:
一、文科生学也可以学编程吗?
二、从0到1
三、疯狂输出
3.1 写作
3.2 解决实际问题
四、敢问路在何方?
后话
在开始之前,我先就自己以前经常探索或者是见到过的几个关键问题谈谈我自己的一些想法:
Q1:文科生可以学数据分析,或者说可以学编程吗?
A1:完全可以。随着学习的深入,你的自学能力会越来越强;而且你可以发现,目前一些大热的语言(如Python)门槛简直不要太低。
Q2:应该如何开始系统学习或者入门? A2:在我看来说无非就是以下三种方式:看书自学、看视频教程、网课。其实这三种途径互相都有重合的地方,但是这三种途径在学习的过程中起到的作用却有不同。
Q3:学习了一段时间,但是不会用 A3:“道理我都懂,可是我还是不会用”的体会想必大家都有。那应该怎么办?输出与写作。
Q4:能够熟练运用了,该怎么深入学习? A4:探索与尝试。当能够熟练运用的时候,就说明学习已经是水到渠成了。但是这仅是冰山一角,还没有一览众山小。
为什么这么说?本文就围绕着这四个问题来说一说我的看法。
一、文科生学也可以学编程吗?
虽然说R语言并不算是完全意义上的编程语言,但是也是属于编程范畴。那么文科生想学习这些看似只有理科接触的东西,是否可行?我觉得是完全可以学习的。
可能你看过许多例子,这里我以我个人为例讲述我学习的经过。
本人是大四社会学本科生一枚,唯一与敲代码有关系的必修课就是和《社会统计》相配套的《STATA统计软件应用》(社科专业的朋友应该会知道)。最初对于这种敲命令的东西就是感到头疼,所以基本只想求个及格分。但是后面来了兴趣后,在寒假期间就照书重新自学了一遍,豁然顿悟。于是乎我为代码的魅力所吸引,开始接触了与之相关的东西从SPSS、SAS、Eviews再到R语言。当时R可能正处于和Python一样火热上升的趋势,恰好图书馆里有《R语言实战》这本“圣经”,因此趁着兴趣,大二暑假期间我就每天照着书一点点的学。
虽然磕磕绊绊煎熬地学了一个多月,但我在不知不觉中也渐入佳境,能够通过R语言来的基本操作来进行做一些小练习。后来又了解到了ggplot2这一让R语言充满了生命力的工具包,在深入学习ggplot2中碰到繁杂的函数使得学习曲线变得陡峭,最后也因课业和学校事务而中断。 大二下学期课程变少后,我又重新开始捡起ggplot2顺便还重新温习了一把之前学过的基础知识,真正不间断地把《ggplot2:数据分析与图形艺术》本书从头到尾的过了一遍,又学习了《R for data science》(中文版:《R数据科学》)和《R graphics cookbook》(中文版:《R数据可视化手册》)两本书之后我才掌握了ggplot2最核心的使用方法。
当然,在2017-2018年期间恰好学校有一位老师开设了有关R语言的选修课,虽然讲授的内容比较基础,但是凭借我自己之前的自学,我有幸拿到了这大学生涯中为数不多的满分,也在这时关注了R语言中文社区的公众号。或许可能也正是从这一年开始,我就开始了自己应用R语言的道路,并时不时在R语言中文社区公众号上发表了自己拙略的文章:
-
2018-02-26 我的第一篇文章 送给我的女票《使用ggplot2绘制心形》
-
2018-04-05 我讲我之前选修课上做的小论文作业重新通过R语言的方式呈现《定量论文:探究「健康水平、婚姻状况」对幸福感的影响》,当然也受到了读者朋友的指出的不足,很是感谢
-
2018-05-07 我萌生了对自己生活进行量化的想法,于是又有了第三篇文章,这里又是对ggplot2的又一次深化《个人生活的量化分析(一):时间管理》
-
2018-05-16 我的第四篇文章《个人生活的量化分析(二):Apple健康数据分析》
-
2018-06-20 考研复习期间也是今年的最后一篇文章《个人生活的量化分析(三):考研英语初探》
尽管我的文章在质和量上并没有比在R语言中文社区发文的其他R语言热爱者高出多少,但是通过投稿我有幸收到天善智能送给我的一套数据小魔方创始人杜雨老师ggplot2商务图表网课以及一本名为《R语言游戏数据分析与挖掘》的书籍,这算是对我来说学习这么久以来最大的鼓励吧。
至此,我的故事就结束了。
虽然由于考研占据了大量时间,数据分析学习的过程又中断了,但是重新回顾与温习并没有花费我太多时间。仔细想一想,从零基础学习R语言到底用了多少时间呢?我想,如果没有中断并且持续不断的学习,1个月的时间从入门到基本运用是绰绰有余。
那么,对于“文科生可以学数据分析,或者说可以学编程吗?”这一个问题,我想每一个零基础的新手们心里都会有一个答案。
二、从0到1
俗语云:“万事开头难”。对于R语言或者是其他编程语言完全不懂的人,到底怎么样入门才是正确姿势?
在我看来,学习的途径无非就是以下三种方式:看书自学、看视频教程、网课。
其实这三种途径互相都有重合的地方,但是这三种途径在学习的过程中起到的作用却有不同:看书>看视频≈网课。
看书最大的意义在于这是一个自我思考、整理、吸收、消化知识的过程。因此在这一过程中会感觉到特别煎熬,因为没有人可以帮你去理解建立完整的知识架构,这也是我在看《ggplot2:数据分析与图形艺术》一度中断的原因。在看《R数据科学》时并没有中文版,凭借着一点四六级的功底也硬是把英文版整本书看完了一遍;国外的教材并没有想象中的那么难或者无法理解,相反,反而有时候会比译文更容易让你理解。
当自己对于书中不解或者产生的问题得不到解决时,视频教程或网课就很有必要了。因为有人已经躺过这个坑,那么就大大节省了个人寻找答案的时间;或是因别人以通俗的语言解释后,自己的困惑就得到了“豁然开朗”般的顿悟。但是对于正处于学习的个人来说,视频或网课已经事先替你进行“思考”,已经帮你总结归纳了很多,因此总是让人产生自己好像已经明白,但实际中往往会出现非常容易忘却、不会使用的情况发生;可是一旦你自行先对书籍中的内容思考、吸收、消化之后,再看视频和网课可能一定程度上也加快了你提高的脚步。
这里我提一下杜雨老师的《R语言可视化和商务图表实战课程》这一套课程(这并不是在打广告!),如果我当时自学一遍ggplot2后再看这一套视频或许我精进的速度可能会更快。杜雨老师在视频中做了许多铺垫与精彩的总结(不过杜雨老师当时在录制视频时收音效果可能不太好,但是把耳机音量调大并不影响学习。):
image当时看到杜雨老师制作的PPT后我不禁感叹确实用心,而且概括的也十分全面。
但话又说回来,如果自己未曾看过一遍书,手动实操一遍,直接看视频的话,可能最后只会有“知其所以”却不“知其所以然”的懵懂感。不过关于R语言的书籍也是多不胜数,这里我只推荐以下几本:
入门:《R语言实战》
image前段时间我有看到公众号备受推崇的《R语言实战》真的值得如此好评吗?一文对这本书进行探讨,也引发了大家的激烈讨论,这里我说一说我的看法。如果说对于一个完全没有接触过编程的新手或是小白而言这无疑是能迅速用R语言操作的最佳选择。尽管说这本书中使用的一些方法或者是例子有些过时,但是对于入门R语言的人来说没有比这更通俗易懂的了;同时这本书的中文译本也有着电子版,就学习来说已经是十分方便
中期:《ggplot2:数据分析与图形艺术》、《R数据可视化手册》、《R数据科学》
前两本是学习ggplot2语法的必读书目:
- 第一本是让你了解ggplot2的整个绘图原理和作者绘图的美学哲学,形成对ggplot2形成整体的认知框架
- 第二本是由 Winston Chang 所写对于ggplot2细致的展开,从绘图到细节调整、再到其他进阶图形都有涉及,也正是这本书让我真正理解第一本书并能够开始熟练运用ggplot2,一定要看!!
后一本是由 Hadly Wickham 大神亲自编写的一本如何用R语言进行一套完整的数据分析流程的书籍。当中最重要的是Tidyverse包的运用,这一大包糅合了Tidyr、dplyr、ggplot2等许多高效的数据处理工具包,相信学完后个人处理数据的功力会更上一层。当时我看的时候还未曾有中文版,现今中文版已出版,但是翻译质量如何我没看过我就不作评述;但是英文版可以通过 Hadly Wickham 的个人主页免费在线阅读电子版
image通过这几本书,我相信入门R语言的朋友不仅已经是从0到1,而且已经向高级进阶学习迈进了。
三、疯狂输出
“疯狂输出”一词是在英雄联盟S4全球联盟总决赛时前IG战队辅助笑笑作为解说时随口而成的一个梗。但从字面意思来理解应该是通俗易懂。
在学习过程中最痛苦的烦恼莫过于“自己学了的都忘了”以及“自己懂但是却不知道怎么用”。
但是不同于上学时学到的知识,编程语言的知识最大的特点在于,一旦你理解并能开始运用后,这些知识会比课本上学到的知识更容易被记住。或许这就和高中数学一般,只要你开始使用,那么你就不需要去死记硬背,因为早已存在在你深深的脑海里(不自觉就唱出来了)
输入(学习)和输出(应用)的过程其实就好比是我们与编程语言交互的过程,我输入一行代码,电脑返回一个对应的结果;因此,对于学习R语言或者是其他语言的人来说,输出的方式也有两个:
-
写作
-
用所学去解决实际遇上问题
3.1 写作
很明显,本文的写作就是我输出形式之一。我之前在R语言中文社区的投稿既是写作,也是我用R来解决实际问题的实践。
但在实际的写作往往是一个“难产”的过程,因为这不仅是输出,更是一种自我创作的过程。所以当中会暴露出各种小错误或是自己知识面上的不足。
对我来说,写作带来最珍贵的不是受到各种点赞或是各种夸奖。那是什么呢?是别人在阅读你的文章后指出的不足或者说是批评。 能让一个人快速成长的方式是发现自己的不足,而发现不足最佳的途径就是让别人指出你的不足。
我明白,在这个“键盘侠”遍布网络的时代,每个人或多或少都见过不少语言暴力。但是从辩证法的角度来看,如果一件事情或者话题能够被人们激烈的争论、关注,那么这件事情本身就具备一定的意义或价值。
在我第二篇文章《定量论文:探究「健康水平、婚姻状况」对幸福感的影响》评论里,有读者对我文中的一些观点表示不赞同,也指出了我的一些不足。确实,如果没有这些批判的发声,或许我也不可能会去发现我R语言知识面中的一些不足之处。
所以无论自己对于R语言或是其他编程语言的掌握如何,尝试用已经学到的东西去写作,这本身既是在复习,也是在不断提高自己的过程。
当然,希望大家看到这也能多多尝试去投稿,或者将自己的小经验小心得在简书、知乎等地方分享出来,说不定帮助到了别人,会收获一点点让自己成就感满满的“赞”。
那么在写作的时候推荐大家可以使用Markdown语法或者Rmarkdown来写作,不仅能够一定程度上避免后期排版问题,还可以输出代码块;而且Markdown语法十分简单,可能只需要短短的十分钟就可以入门!
Markdown编辑器我常用的软件是Typora,至少是目前我用过最为舒服的编辑器了。
3.2 解决实际问题
在学习R语言后给我带来最大的感受就是,似乎生活总有许多地方可以量化,正如我三篇“量化生活”中所尝试的一样。如果敢于折腾,总能发现一些隐藏在量化生活背后有意思的东西。
可能有的人最开始学习R语言或者是Python等其他语言并非是出于一种想要探究的兴趣,更多也可能是出于一种实际的需要或者是用来解决实际的问题。
比如说——“爬虫”。
在程序员眼里,能让程序代码重复去做的事绝不自己一个一个手动的去操作。
说实话,其实就是“懒”。
正是因为享受这种“偷懒”而带来的便捷和满足让我第一次对编程语言充满了兴趣。当我看到别人能通过短短几十行代码能将一个网站上每个资料的下载链接爬取下来,或是通过代码获得到链家网房价信息的数据时也是我第一次见识到“爬虫”的威力。
那么在我所学的知识里,有能够让我也实现爬虫的地方吗?没有。
于是便又尝试开启了新的学习过程,对于爬虫的学习。等具备了基本的爬虫技能后,可能又会遇到新的问题,但是对于一些容易获取资料的网站来说,显然我们已经解决了一个自己曾经想要解决的实际问题——获得资料。
这实际就是输出。
爬虫当然只是其中的一个小小的例子,在实际中我们往往还会遇到很多,比如:
-
希望对快速高效地数据进行清洗
-
希望快速生成包含日期和项目来记录自己的开销
-
希望能将Excel的图片以更漂亮的方式呈现,而不用自己手动去调细节
-
希望……
等等之类的问题,只有试着输出自己所学的东西去解决实际的问题或者想要实现的效果,对于R语言运用这一“技能树”才会更加庞大。
当你输出得足够多时,恭喜你,你可能在某方面已经水到渠成了!
四、敢问路在何方?
对于新手,其实前三部分已经足够花一定的时间去探索、实践了。而最后这一部分不仅是写给各位观看这篇文章的朋友,也写给自己对未来学习的规划。
学会用R来做基本的数据分析仅仅只是数据科学这一领域小小的一隅。如果想继续深入这一领域,或许前面仍有许多路要走。
image可应该走怎样的方向?又何去何从?这是一个没有现成答案的问题。虽然没有现成的答案,但是有能够获取答案的途径——多尝试。
编程语言都有共通之处,对某一种语言的熟悉可能有助于你快速掌握其他的语言。因此我开始了一些满足自己求知欲的尝试:
-
我尝试着去了解SQL的用法,通过MySQL来进行实践,掌握了基本的SQL语句
-
我尝试着去学习Python,希望通过与R语言对照来学习能更快的也熟悉Python(毕竟现在是世界最简单而且也最热门的语言)
-
我尝试着去了解Linux操作系统,毕竟与这是目前较多人使用的开源的操作系统之一
-
我尝试着去学习Vim,体验一把丢弃鼠标只用键盘就能进行各种操作的酸爽
-
我尝试着去学习Git的使用,发现Git甚至还能作为轻量的资料存放仓库来使用,这样以后所写的文章、代码和数据就不会这么轻易丢失了
-
我尝试凭借着自己所学的一点蹩脚编程知识,终于开始把在iPad上一直不会玩Playgrouds一点点的在引导下编写代码,使游戏渐渐通关,这也使得我对苹果的Swift语言充满了兴趣
-
在帮同学思考如何处理将文本数据分类时,我接触到了NLP(Natural Language Processing)自然语言处理领域最基本的分词,经过几个小时的尝试作出了自己第一个用R实现的词云图
-
……
我还尝试了许多许多,无论这是否有助于我以后的学习,但是这些体验让我保持着对这些与我专业毫不相关的东西的兴趣,饶有兴致地去折腾。
但是这也就意味着又是重新学习、重新输入的过程,虽然可能仅是浅尝辄止,但是如果当初我没有也像这样去尝试R语言,那么我又怎么会开始一段学习的历程呢?
趁年轻,多折腾。
后话
这篇文章算是我对2017年-2019这两年学习R语言的一个年度总结吧。或许这个总结来的有些晚,但是希望能给那些正在学习R语言的新手们,或是和我一样正在不断探索、折腾的人一些启发。同时也督促我抓紧这仅存的最后半年大学时光,去探索、去折腾。
当然,崭新的一年Flag是不可能不立的,但还是希望自己多多输出、多多写作吧。
最后,也感谢天善智能和R语言中文社区为我R语言的学习之旅提供了一个学习、展示自我的平台。
2019.01.22