加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSS
考试时间表
您当前的位置:首页 > 考试科目 > 学历类 > 高考 > 高考考试时间

经管/统计专业的同学如何学好R语言?

时间:2020-06-10 15:30:48  来源:  作者:

学习新知识的过程总是痛苦和逆人性的,古往今来皆是如此,否则也不会有十年寒窗苦读一说。从小学开始算起到大学毕业,绝大多数人起码经历了16年(跳级的神童与学霸除外),读完硕士那就是19年,如果再继续读个博士再加三年(如果你足够幸运能够如期毕业的话)。与十几年寒窗苦读所经历的煎熬相比,学习一门新编程语言就算是相当容易了,你所需要花费的时间仅有前者的十分之一不到,而且也无需昂贵的学费。

可为什么还是有很多人觉得编程语言那么难学呢。究竟应该学些什么、具体怎么学、有没有捷径呢?我复盘了自己3年前学习R语言的经验,结合给部分网友提供问题咨询以及学习建议的经历,给出自己的答案。

经管/统计专业的同学如何学好R语言?

为什么你觉得R语言难学?

首先来说说为什么有很多人会觉得学R语言很难。我猜大部分觉得学起来很难的同学,应该都是文史社科类专业。这些专业所使用的研究方法以定性研究居多,对数学、统计、计算机与编程等知识几乎是绝缘的(当然财经与管理类专业应该会接触一些比较浅显的数学与统计学课程,但是编程这一块儿也近乎空白)。

专业背景导致与编程知识绝缘,这是造成你对R语言恐惧的头号大敌(不要问我怎么知道的,因为我也是文科生)。

专业背景造成的恐惧感简直贻害无穷,它让你相信编程就不应该出现在你的生命里、你是属于那种不适合也不可能学会编程的人,那是属于计算机专业才有的特权、让你误以为即便要学习这个也没有理工科有编程基础的人学的好。

曾经听到过一句特别有感触的话:我一个文科生为啥要学习编程,我以后又不当码农。

专业背景导致专业课程范围狭窄,无形中构筑了一堵墙,让你与编程绝缘。

专业背景构筑的藩篱使得你将自己定位成一个不适合、不可能、学不会、学不精、学了没用的人。

专业背景甚至无形中构筑了你未来的职业围墙,让你直接对编程敬而远之。(文科生就应该去做不和数字打交道、不和代码打交道的工作,计算机和理工专业才应该去学编程、去当程序员)

如今已经21世纪了,人工智能已经越来越多的应用于改造我们的生活与工作,AI与人类竞争工作岗位的趋势越演越烈,那些存在高度重复性、流程性的工作领域或者环节,是极有可能被计算机替代的,而编程是推动这一趋势的重要推动力。这个世界变化的速度让你我难以想象,而专业背景,那是工业革命时代用来输出熟练工人、发挥分工与专业化的优势而设立的学科制度,如今却成为了束缚学生们职业生涯最苛刻的天花板,但它在互联网与大数据时代,脆弱的不堪一击。如果你停留在专业背景给你创造的保护伞下,刻意逃避、疏远、畏惧编程的话,你与这个时代的脚步将会愈行愈远。

这里我想表达的不是人人都应该成为程序员,都应该以编程为生,而是你要打心底改变一个观念:编程像你学过的任何一门学科一样,它是一种工具,并不神秘;编程一点儿也不难学,只要想学就可以学会,与专业背景无关。

学习R语言的二号大敌是学习方法,不科学的学习方法就算让你学上一万小时,你也大概率成不了这方面的专家,甚至只是学了一些零零散散的知识皮毛,一直在原地踏步,低水平重复。我遇到过一些提问者,简单聊过几句,看过他们的问题与困惑之后,就大概知道它的问题出在哪里了。

有的人之前完全没有接触过R语言,仅仅是因为导师要求或者专业论文必须,在没有任何基础的情况下,就开始copy网络上或者相关文献上收录的有一定难度的代码(比如一些爬虫类的、算法类的),这样问题自然就层出不穷。虽然说这种“干中学”的方式也不失为一种快速上手的方法,但是成本极高、效果极差。

具体来说,你遇到的很多问题,本应是入门基础书中的常规内容,当你在没有系统学习入门书就直接上手复制代码时,需要借助网络、参考书、甚至身边你能接触到的人一个问题一个问题的咨询,因为你不知道之后还会遇到多少问题,所以这种外部求助的方式接下来也不知道还需要浪费你多少时间。其次,这些本应属于入门级的简单问题,任何一个都能阻断你的研究进程,你会苦恼、烦躁,会对R失去兴趣甚至产生厌恶,更有甚者,会怀疑自己的智商。

这些困扰或者让你烦躁的问题,你甚至仅需哪怕一周左右的时间系统的看过任何一本R语言基础书,那么几乎半数以上都可以迎刃而解,而且你还能节省下来大量精力用在研究上,可你偏偏试图走捷径,结果走了一条世界上最难走的路。

急于求成让你弃正求邪

捷径带来自食恶果,进而苦恼、烦躁、厌恶、甚至自我怀疑

然后你彻底弃疗了,从此与R语言说拜拜,坚定而果断,头都不回一下。

为什么我会有如此真切的感受呢,因为这确实就是我自己曾经走过的路哇,当然我自己跳出来了,但是仍然还有很多同学在重复着这条路。

为什么要学习R语言?

这个问题涉及到学习R语言的动机,也是前面提到的刻意学习原则第一步。为什么要先制定学习目标呢,原因很简单,如果你不能量化它,你就不能掌握它,这是目标管理中非常重要的一条规则。如果没有目标,学习过程就容易变成无头苍蝇到处乱撞、浅尝辄止。你能一路扛过高考并不是因为你是天才,而是因为有高考分数线在约束着你,让你神经时刻紧绷,不敢懈怠;你能挺过大学毕业、研究生毕业,也是因为有赚学分、拿学历、找工作、发期刊这些目标在时刻提醒与督促着你,让你不敢肆意妄为、惶惶度日吗。

试想一下,你说你要学好R语言,但是为什么要学,你说不清楚,所以你没有压力和约束,也不知道学多久、学到什么水平算好,所以你没有规划、行动上拖沓与懒散、没有惩罚措施,你觉得即便放弃了也不会对你造成太大损失,所以你很难学好。

我来说说当时我自己的学习动机吧。

起初是为了画好图表,因为平时学术研究以及实习都需要画很多图,之前只会使用Excel画图,画的不仅丑而且能支持的图表非常有限,于是在网络上了解到R语言是数据可视化非常专业的工具,但是需要先学会编程。

再后来要写毕业论文,其中涉及到非常复杂的数目模型和数据处理工作,如果只用Excel来处理,没有办法保留计算过程,后期验证起来非常麻烦,这也算是我学习R语言的一个动机。
再后来面临着求职,当时了解了各个行业不同类型的工作岗位,不想受专业背景限制,想进入互联网行业从事数据分相关析工作,而R语言是这类位的必要技能之一。
实习期间画图、毕业论文处理数据、求职技能需要成了我最初坚定学习R语言的三个动机。

但我自己是一个只要投入时间学一样东西,就一定要学成体系的那种执着性格,不会满足于蜻蜓点水。所以我当时给自己制定了明确的目标和学习计划。

目标:
要能够熟悉全套的基础语法并能熟练运用;
要熟练掌握其中数据可视化模块并能灵活自如的运用;
要能够经得起实习期间的画图需求、毕业论文数据处理需要的考验
要能够经得起面试官考核(虽然不一定会考你代码,但是你熟练了至少有底气无所惧)

所以我从头到尾看完并敲完了《R语言实战》这本入门级参考书的代码,然后又陆续看完《ggplot2:数据分析与图形艺术》、《R语言可视化手册》这两本可视化方向的进阶书。那段时间刚好处于研二阶段,专业课很少、实习是自由安排时间(按日计薪的),所以我有大量时间可以用于看书与敲代码。

但是我依然觉得自己每日时间无法保障、计划容易中断,很多东西学完就忘。

后来我开通了一个微信公众号,每天恪守学习将近3小时时间,把自己每天的学习内容整理成笔记发在公众号上,累计写了350+篇R语言相关的原创文章。这种措施极其有效,成为了学习时间保障、效果保障的主要推动力。

实习期间接触的项目报告涉及大量绘图工作,我跟老板提议可否用R语言来处理,效果更好、效率也更高,而且很容易复用。当时我还心里没底儿毕竟刚学,但是先把话撂那儿万一搞不出来岂不打脸,这样学习的动力和约束就更强了,我实习期间在寝室里加班搞工作,事实证明这种倒逼机制相当成功,不仅项目效果图非常棒,而且自我提升相当明显。

周末或者节假日空闲时间,我就自己在网络上找数据,因为如果一直用书本里面案例数据,相当于一直在咀嚼旧知识,没有挑战性就不会有新认知和收获。

毕业论文写作过程中咬着牙把整个数据处理流程全部使用R语言完成,一共写了近1000+行的代码。

直到此刻才觉得对R语言知识的掌握逐渐系统化、体系化,也算是入门了,这段时间一共用了半年,500小时左右。

R语言具体要怎么学?

刻意学习原则指出,科学有效的学习方法需要你有明确的学习目标、有专注和高质量的学习时间投入、要有实时的激励与反馈系统、要能阶段性的突破舒适区,及时进入更有挑战性的学习区间。

关于学习目标上一个话题我已经详细阐述了,接下来我就讲讲关于后面三个:专注和高质量的学习时间投入、实时的激励与反馈系统、阶段性的突破舒适区。

1)专注和高质量的学习时间投入
因为是在研二期间学的,所以每天腾出3小时学习是绰绰有余的,但是实践证明,如果你心不在焉的话,每天就算学习10小时那也无济于事。我属于那种注意力特别容易被周边事物分散的人,任何风吹草动都能把我的注意力带跑。

怎么办呢,那就选择周边学习环境,我会选教学楼最底层的阶梯教室,一般这种教室都很大很空,除了有课之外很少人去,而且夏天很热冬天很冷。对我就要这种感觉,周边人越少我越能集中注意力。周末或者节假日我就在宿舍或者图书馆里学,晚上12点以后室友都睡了我就一个人开着灯再看一会儿,凌晨的时候学习效率特别高。

当时因为计划未来职业转行,所以没有像很多同学一样去考注会、司考、注税之类的证书,学院里的公共活动和社团、讲座活动我很少参与(暴露了学渣本质),这为我学习R语言挤出了大量可用时间。

后来工作后逐步开始阅读关于学习方法之类的书籍,其中《心流》《自控力》《深度工作》《刻意学习》《复盘》这几本书,我印象特别深刻,强烈推荐,都是讲让你如何快速集中注意力,保持高质量的学习时间,才明白当初在学校的时候已经有意无意的使用了这些学习方法。

2)有实时的激励与反馈系统
只顾着学,没有反馈与激励是极其糟糕的,很容易让你陷入学了没用的自我怀疑中。所以我找到了几种反馈方式:

随着推送的原创内容日益增多,腾讯给我的公众号陆续开通了原创保护功能、打赏功能。这意味着你提供的原创内容价值凸显,你可以获得用户打赏,这算是物质激励了吧。
随着公众号积累的用户越来越多,内容被转载和授权发布的平台越来越广,我接到了很多广告主的广告投放邀请(这意味着你的公众号内容价值和用户价值得到了广告商的认可,具备了一定的商业变现能力,虽然我一篇广告都没有接受,毕竟情怀还是要有,广告费也不算特别多,不能向金钱低头)。
随着公众号名气的增大,我拿到了大数据培训机构的课程开发合作邀请,对方认可了我的内容价值及技能水平,认为我可以尝试着在平台上提供系统的教学课程,这样既可以补充他们在这块儿内容领域的缺口,增大影响力,自己也可以拿到一些副业收入。
再后来我在知乎上开通了专栏,并同时接私人订单,都是可视化设计相关的,点对点定制服务,直接谈价格。
在学校期间,我帮助学弟学妹们辅导论文中需要用到R语言的数据模型处理,能够用自己所学帮到别人,这是很有成就感的事情。
在公众号后台以及知乎主页,我回答、提供相关咨询服务不下100+次,无论是否有物质回报,能够解决别人棘手的问题,感觉都非常棒。
因为公众号的影响力扩散,我认识了好多同样对可视化感兴趣的小伙伴儿,我们平时经常在一起讨论问题,也相互分享关于可视化领域的一些见解以及技术趋势,这是学习R语言给我带来的最棒的资源。

以上激励与反馈中,主要有以下三类:

物质上的激励:打赏、广告、课程费用、咨询费、付费定制。
精神上的激励:指导别人处理模型、给别人提供问题咨询。
人脉上的激励:认识了一些志同道合的朋友,有很多本身就是从事互联网行业,为我未来的职业发展坚定了基础。

3)阶段性的突破舒适区

学习如逆水行舟,不进则退,学习编程也是。

如果你天天就揪着那些书本上的案例和代码不放,一遍一遍的重复敲,那你就算把那些代码倒背如流也不见得能够得心应手的应用。毕竟实际应用场景是复杂而多变的,需要你随机应变,灵活应对。

对于突破舒适区,我当初也深有感触。

R语言学习具体要学些什么?

这是一个没有标准答案的问题,我只能根据自己的经验来勉强回答,可能每个人给出的答案都会略有不同,跟各自的专业/职业背景有关,但是其中必定存在一个最大公约数,或者说是交集。在产品研发领域有一个专业名词叫做“MVP”,大意是说做产品不能求大而全,要先做一个最小化可用版本,先满足用户最基本需求,抢先占领市场,之后再根据用户反馈,快速迭代,站稳脚跟,市场瞬息万变,机会稍纵即逝。

对标到R语言的学习,我们每个人也都需要一个自己的内容“MVP”,我的MVP是这样的。

基础语法
导入导出:黏贴板导入、txt、csv、xlsx、sql等数据导入导出
数据结构:向量(vector)、矩阵(matrix)、数组(array)、数据框(data.frame)、列表(list)
基础函数:循环语句(for/while)、判断语句(if else) 自定义函数(function)

实践应用

数据抓取:RCurl、rvest、httr、XML、xml2
数据清洗:plyr、tidyr、lubridate、dplyr、jsonlite、rlist、%>%
文本分析:stringr、jiebaR、wordclound2、topicmodels、RTextTools
数据可视化:ggplot2、shiny、rmarkdown、leaflet、ggmap、sf、sp、rgdal

如果你能按照以上所列用心搞懂每一个包的核心函数用法,并且能够锲而不舍的保持高频练习、阶段性总结与复盘、阶段性突破,那么熟练掌握R语言并非什么难事。

当然每个人都应该拥有自己的学习路线和风格,不必强求千篇一律的模式,只要你时刻牢记学习目标、投入高质量的学习时间、构造合适的激励与反馈系统,最后在适当的时机勇敢突破舒适区,走进更高阶的学习区间。时间会证明一切,你不需要一万小时就可以成为高手。

来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
相关文章
    无相关信息
栏目更新
栏目热门