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语言的神奇控制只有你想不到,没有你做不到,只要你能力超强,天马行空无所不能,我就喜欢这种自由。

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