2020-02
14

入门R语言

By xrspook @ 9:14:06 归类于: 烂日记

我前天开始系统地学习R语言,用的是一本叫做《R语言统计入门(第二版)》的书。那本书从最最基础的东西开始说起,基本可以说是零基础也能学会。我去说,书里面的内容是统计学和工科大一学生应该掌握的基本概念。现在我只看了一点点,感觉挺有趣,有些东西很容易理解,但有些东西却要绕一个弯。其实之所以这样,是因为R语言设置了很多潜规则。跟我之前学过的C语言不一样,R语言的潜规则多得多,也正是因为,它固有的规则多,所以有些东西毫不费劲就可以得出一个高端的结果。比如,当你要算一个数组的平均值,又或者是标准差的时候,一个简单到爆的函数就搞定了。如果要手工实现那个函数,真的很费神。我觉得R语言这个东西,只要你领会到规则的制定方法,很多东西都可以融会贯通。重点就是你能不能领会到那个精神,消化他们的东西成为自己的一部分。Excel的VBA里面也有很多潜规则,但是,跟R语言比起来,Excel里的很多东西貌似就有点复杂麻烦了,比如说,连起个名字,Excel里面的东西都要比R语言长。

我觉得对我来说,学习R语言跟学习Excel VBA,虽然都是编程语言,但二者不一样。VBA更侧重于技术实现的层面,要解决一些具体的东西,之所以要写VBA,不是要做研究,而是要得出某些结果,通过简单的操作就可以把复杂的流程秒杀搞定。其中的逻辑在写VBA程序的时候就必须已经想得很透彻。又或者可以这么说,在写VBA的时候,实际上你已经通过其它方式,得出了一个你要得到的结论。虽然你不可能所有数据都已经得有结论,但起码在某些数据上面,你已经确信那就是你想要的结果。大概因为我对R语言还了解得不够透彻,所以我觉得R语言最看重的不是结果本身,你不是为了要验证某个结果而去用R语言,而是要让R语言帮助你找到某些东西的规律。

之所以认会到R语言,是因为它有强大的绘图功能,几乎可以这么说,只有你想不到,没有它做不到的。R语言做出来的那些图,跟艺术家很写意地画出来的不一样,R语言做出来的图都是根据某些数据按照某些规则合并计算而来。有些数据摆在一起,我们不运行软件,也能预测到那估计是一个什么样的趋势。在一开始的时候,我们必须了解这个趋势,当R语言把图做出来的时候,我们才可以判定我们的方法有没有用错。当R语言我们已经用得很熟练的时候,我们可以要把我们的数据放到R语言里,然后通过某些我们已经应用成熟的方法让软件给我们得出图像,接着我们再从图像里得出某些结论。

不知道从什么时候开始,我迷上了数据可视化。把一堆数据用表格体现出来,和用图像表达出来效果很不一样。如果图做得好的话,那会给人一种惊艳的效果。如果你只看到一堆表,你的大脑还得寻找表格里数据的相关性,然后在脑子里想象出它们应有的关系。在靠谱的图里面,数据关系直截了当很明白,无论你是老手还是小朋友,在看图的时候,你都能很直观地感受到。

有时我会想,为什么现在理工科的学生仍然要学习C语言,而不直接学习R语言呢?尤其是那些非计算机专业的。理工科学生的课程里必然会遇到带入各种实验和数据分析。不过呢,大学的课程连Excel都不会很细致地讲明白,他们又怎么会把R语言放在眼里呢。

编程语言是种必需掌握的技能,谁是你的菜就得看这个社会推动的是哪种,又或者是你打算用在哪个领域了。

2019-12
14

R语言,我们做朋友吧

By xrspook @ 21:11:49 归类于: 烂日记

R语言这个东西貌似我已经连续纠结了两个星期,但准确来说我只是纠结了两个周五,再准确一点,应该是纠结了两个周五的半天,因为我大概都是从中午吃完饭开始折腾的。到昨天为止,经过不懈的努力,貌似最终我已经做出了自己想要的效果。理论上,这本来应该是比较简单的事情,但是现实总是不如我想象中的那样。比如说R语言把我觉得那些日期的东西他们只认为是文本,所以没办法对那个进行自动排序,于是我也就只能把那些日期用数字表达出来,然后我再用替换的方式把数据换成我想要的文本,这样做挺折腾。上个星期我折腾我的还有输出绘图框的大小。理论上,作为一个可视化的软件,那个东西应该可以在系统的某些地方修改,但因为那个软件是开源的,而且自主操控性也很强,所以在系统的可选界面没有那个选项,于是上个星期我也就只能很傻地在显示器上边框做记号,大概记录我那个绘图框的大小。因为最终绘图框得出来的图,我要把它粘到Word文档里的。或许你会说我不应该这么直接粘,而应该把R语言绘制出来的图输出成图片,然后再往Word里粘,但我觉得貌似那样做的话图片质量会更差,还不如我直接把图片在R语言里粘过去,但要保证每张图片的大小都一样的话,实在让我很烦恼。即便我在显示器的边框上已经做好标记,但最终出来的东西还是不能保证完全一致。昨天,我终于征服了这个东西。如果我用的是R语言基本的绘图功能,控制那个东西的是另外一个选项,但因为我的图用到的是lattice包,所以我就必须采用lattice包适用的方式。能控制输出绘图框的大小,已经让我解脱了一大半。

之前,我绘图所用的数据,都是我经过了各种精简筛选保存下来的csv文件,因为如果直接导入Excel文件会很麻烦,所以我宁愿在Excel里另存csv文件。我要作图的数据其实都在一个大表里,但是我却要作好几个图,那些图需要对不同范围内的数据进行合并对比。我也非常清楚R语言在增加或者剔除数据方面有他的方法,学会这一招,我就不需要保存N个csv文件,我只需要保存一个,然后再一层一层地往下筛选。在Excel里进行数据筛选,你就只需要在下拉框里选择,而在R语言里,你需要编程。对新手来说的确挺麻烦,但我觉得只要熟练了,一切都好。昨天晚上我追我征服的是修改绘图区域的空白边距。因为我输出的绘图框较小,而R语言默认的空白边距在那个小图里就显得很大。一开始我想到的是自行修改lattice包里面的默认选项,但后来我选择的是拷贝一个别人写的自定义函数,引用那个函数就把可以去掉的空白全部干掉了。因为去掉了多余的空白,所以我图片的尺寸可以更小,但是实际上里面的内容更大。

R语言非常强大,我觉得这个东西不是为应付工作的人准备的,因为没有一定的折腾信仰,这根本玩不过来。但我觉得,这个东西很符合我的口味,因为的那里的奇迹是通过编程出来的,在处理数据方面效率非常高。如果我用同样的数据在Excel里面作图,即便我用的已经是最新的版本,但依然会卡机。R语言的神奇控制只有你想不到,没有你做不到,只要你能力超强,天马行空无所不能,我就喜欢这种自由。

2019-12
7

2020年的目标:学习R语言

By xrspook @ 21:57:29 归类于: 烂日记

昨天我花了很多时间去研究R语言里面的绘图。R语言这种东西是今年夏天我才开始接触的,当时我看的是head first系列的数据分析。在这本书里面,R语言用得非常多。首次接触那个东西时我就觉得,那个比Excel厉害太多了。作图这种东西,貌似是美工,但实际上,在R语言里面,只要你想得出来,你就可以通过编程去实现,牛逼轰轰的。无论你想得出的,又或者是想不出的功能,它都能做到。突然之间我觉得自己在统计分析这个问题上真的是个白痴。一直以来我都觉得自己在理论知识方面很缺乏,但原来我在技术的使用方面更加是井底之蛙。如果我要提高我的理论水平,如果直接从案例从技术方面入手,也是可以实现的。我得知道别人是怎么做的。别人用什么方式去实现的。为什么别人可以从那个视角去分析问题,而我却没想到。同样的原始数据,为什么别人就能揪出一些我没想到的东西。这一点我必须努力加把劲探索。

昨天从中午开始我就纠结R语言的散点图。散点图这种东西,Excel里也能做,但问题是Excel里面没办法做出矩阵散点图。之所以我中午开始纠结R语言,因为我在几个月前到数据分析教程里知道学习里知道了R语言可以用几句非常简单的编程,绘制出神一般的的矩阵散点图。矩阵散点图这个东西,第一次看到就把我惊呆了。在那之前我见过的散点图只是两坐标或者三坐标上面标注点,绝大多数情况下我只看到过两坐标的。我们大都从点的分布,点的密度,点的聚集模式得出一些规律,找到一些结论。这是以前我一直在做的,我也只看到别人做到了那个程度,但在今年夏天我学习的那本数据分析里面,他们用两维数据作出一个散点图,在用第三维数据对比N个散点图。这些矩阵散点图是一次性做出来的,并不需要一个个的手动合并,而且那些散点图也不需要手工去设行列数。你只需要提出处理数据的要求,他们就会选择最佳的方式表达出来。第一次看到那个的时候,我觉得那简直是屌爆了!前几天我也尝试过用我的数据做矩阵散点图。后来发现,别说散点图,即便是要我提供一个能正确读取数据的csv文件好像也很麻烦。昨天中午,当我把一个一个Excel做出来的散点图罗列堆砌到Word里的时候,我明白到如果只是一两个,没问题,但我需要2个散点图一起做对比,4个散点图一并罗列出来找差异,显然只能使用矩阵散点图的方式,而不能一个一个贴浪费篇幅且让人疲劳。

在学习数据分析那本书的时候,虽然我也用过R语言,但是那纯粹是把书本上的命令行抄写过去,我完全没有动脑筋,所以当我把自己的数据放到R语言里面处理,希望得到我想要的东西的时候,无论我怎么纠结,貌似都得不出我想要的东西。在奋斗了几个小时以后,我才发现原来plot跟xyplot是两个完全不一样东西。plot是R语言的一个原生作图函数,xyplot则需要调用lattice数据包。数据包就像是一个插件,不过lattice那个插件已经常规到已经默认安装在R语言的主体软件里。在折腾的时候,我因为发现plot函数xyplot函数得出来的图不一样,我才明白到了这点。最明显的区别是他俩的图形颜色不一样,坐标轴的字体不一样,以及坐标轴的刻度分布不一样。我个人觉得lattice数据包作出来的图要比R语言原生的好看一些。

昨天我足足折腾了接近12个小时,才稍微得到了我想要的东西。之所以说稍微,是因为某些因素我还不能自如控制,有些参数我纯粹只是停留在猜想的层面。我不能满足自己只知道一些。我也知道有一些轻量级的作图软件大概也可以做到我想要的功能,但既然R语言如此强大,我愿意花更多的时间去认识他拥抱他。

用编程的方式去作图,想想都觉得这实在太牛逼了。于是,昨天晚上我也定下了目标,2020年我要加把劲学习R语言。

© 2004 - 2020 我的天 | Theme by xrspook | Power by WordPress