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语言。

2019-09
10

Excel内部套打

By xrspook @ 11:03:09 归类于: 烂日记

我花了一个下午的时间,做了一件Excel内部套打,实际上这个功能很早以前我就已经可以用Word和Excel联合实现。出来的效果很完美,问题只是核心数据要贴在Excel,打开Word的时候,必须点一个对新手来说可能不知道该怎么办的窗口。如果那是一大堆的数据的话,这样的操作绝对值得,但如果那只是仅仅一两条数据,这样的操作貌似比较麻烦。所以昨天我就在Excel里面做了个模板,然后用定位的方式在文件内部实现套打。这样的好处是只需要打开一个文件,就能实现打印而且不会弹出一些让新手很困惑的窗口。很多函数都可以实现这个功能,但最终我选择的是一个定位函数,虽然那是一个动态函数。但因为我要实现的东西很简单,提取的东西不会超过10条结果,我需要进行筛选的总表里面也没有成千上万的东西需要纠结,所以我无需考虑运行效率这个问题。之所以选择INDIRECT这个函数,是因为参数比较少,而且在我定义函数的时候我可以轻松地借用到原数据的列标签,不需要思考一下我要怎么把那个转化为数字。

打印数据的控制可以通过手动输入,也可以通过我随手拉出来的一个控件。控件的好处是可以一个一个地向上增加或减少,这样漏掉的几率就会比较低。当然,如果要暴力一点的话,可以直接在单元格里面输入任何你想输入的东西。当然那样的话就得不到应该有的效果。在不用VBA的前提下,我觉得这样应该实现不了批量数据生成。如果我在现在这个东西的基础上再加一些VBA语句,应该可以实现批量打印,而且难度不算太大。这样的话我就可以用它完全取代Word和Excel黄金搭档的邮件合并功能。虽然我现在做出来的这个小表格很直白简单,用起来方便,但入门的门槛不低。纯粹只是套用,其实没什么难度,但要把整套东西设计出来,还是得花一定的时间。相对而言,相比之下,Word和Excel的邮件合并好用得多。之所以那么好用,是因为一些我需要在Excel里DIY控件实现的功能他们有内置的控件。之所以我想到要加一个控件控制单元格步长,就是受到他们的影响,当然我也可以设置直接跳转到第一条数据和最后一条数据。之所以想到这个也是因为我看到他们可以实现。要如何在Excel里实现批量打印,我想出来的方法不是在一个工作表里面生成一大堆表格,而是一个表格生成一个工作表。打印的时候,我可以筛选有特定字符的工作表批量打印。其实在Word里面也是这么控制的。我之所以想到要生成一大堆工作表是因为我不知道如何在一个工作表里面连续生成N个格式一样的表格,这些表格在打印的时候必须刚好1表1页。要控制好这个,Word里在表格的后面插一个分页符就好,但是Excel里面貌似没有这个东西。当然如果我把表格的高度刚好就是一页纸的话,就应该能达到我想要的效果,但这该如何做到呢?暂时我还没想通。

一个下午就只干一件事,貌似工作效率有点低,但起码我做成了这件事。接下来我将继续在这个问题上动动脑筋研究出我想要的效果。

2019-07
16

看书自学,提升技能

By xrspook @ 8:58:29 归类于: 烂日记

第一次接触O’REILLY的head first系列的Java书本。已经不记得那本书我是从哪里买的了。当时我想学Java,网上的教程说那本书很不错,于是我就买回来了。不知道是那本书太高端了,还是我太低端,一开始的时候挺爽,但看着看着我就觉得自己跟不上那个进度。虽然我已经觉得自己非常努力,但是那些叫我动脑筋的练习题我几乎回答不出来。如果不看答案,那是想到天荒地老估计都得不出答案。看那本书需要具备相当优秀的逻辑水平,现在回想起来,那不过是用判断和循环不断搭配而已。在冥思苦想用Excel VBA出了一些小程序满足我的日常需要以后,现在倒过来看,觉得head,first那本书的Java题目,的确有难度,但却不至于让我落入到当年那种困苦的程度。当年因为觉得自己实在无药可救,所以我换了一本入门的书。因为第一本高端,换的那本低端一点,所以看第二本的时候我有种豁然开朗的感觉,前面的部分几乎可以一目十行地飞快前进。但到达一定程度,我就没看下去了,因为当时刚好碰上我换了份工作,所以很多时间需要用在重新上手上,我再没有那么多时间去继续自己的兴趣了。因为工作迫切需要我提升Excel技能。于是Java那本低端一点的书我没继续看下去,取而代之我开始Excel三剑客,它们分别是数据透视表,函数,以及VBA。

我首先看完的是数据透视表,函数看了一部分,VBA现在算是看完了。个人感觉数据透视表那本是我看得最酣畅淋漓的,我从中学到了很多,但具体你要我一个部分一个部分介绍,我说不出来,但是你给我份工作,我可以融会贯通。我买回来的那套书基于的是Excel 2013,当时我是用2003边看边实操,很多功能都做不到。现在我用的是Office 365,对应的版本应该是Excel 2019,2019和2013比起来,又多了一些高端的功能,从前那些只是试验性质的东西现在已经成为了2019的标配。在数据透视表方面,的确可以使用一些高端的功能了,但是要完成我的日常工作,通常来说,用2003的层次就可以了。接下来我看的那本是Excel的函数公式,这本书我只看的很少的一部分,因为我觉得与其说那本书是用来看的,不如说那本书是一本手册,是当你有困惑的时候去查阅的。因为里面的内容实在太多。普通人也不可能把所有函数的应用都了如指掌。对我来说,处理数据我最熟手的招数是数据透视表。函数部分有一些我知道它能实现某些功能,但具体要怎么折腾,需要试验一下。我觉得函数和数据透视表虽然有些东西二者都可以实现,但在数据汇总计算方面,数据透视表显然人性化很多。但是数据透视表很难进行数据进行提取,又或者把无序的东西归一。函数高手估计可以实现所有数据透视表的功能。如果把函数比作英语等级考试,估计能做到那个的人已经到达专八以上了,而对一般人来说,四级已经不容易。我觉得自己在函数方面,不过是中等的四级水平而已,而且是还没到可以参加口语考试的那种。之所以我没有非常努力地去学习函数,是因为暂时我还没有需要非常努力的动力。

还有很多东西很好玩,我想接触,我想学习。我觉得在外人眼里,貌似不成章法却能很好解决问题的,是最高的境界。那估计就是《笑傲江湖》里,独孤九剑的精髓——无招胜有招,但实际上那又不是真正的无招,因为招数已经和身体融为一体,到达了随心所欲的层次。

2019-07
9

牛逼的数组

By xrspook @ 10:36:42 归类于: 烂日记

我把《别怕,Excel VBA其实很简单》这本书看完以后我才发现自己略略明白到了数组的牛逼之处。在书本的某些章节提到过数组,但没有很详细地展开。毕竟在Excel的VBA里,即便你不懂得数组,你也依然可以得到你想要的效果,只不过用数组跟用其它方式对比,其它方式的效率会差了一大截而已。直到我把这本书看到倒数第几页,他们举例子的时候,我才恍然大悟。看书的时候我并不觉得不用数组有什么问题,毕竟那些思路都是很明白的。暂时来说,我要解决那些问题在高手的眼里不过是小菜一碟而已,只不过对我这个新手来说,必须得费九牛二虎之力才能解决而已。

如果只是用Excel的VBA做一些格式的转换,尤其门面工程的格式转换,根本用不着数组这种高端东西,但是,如果要对批量的数据进行处理,比如说筛选或者转换,数组的效率要比频繁地操作单元格高效很多。当然,如果你的处理量很少,比如说,数据在一页纸之内,用不用数组都无所谓,反正都是秒杀出结果,但是,如果你要处理的是几十个工作表里面的几百行数据。用数组处理就意味着如果你的程序得当,可以秒杀得到结果。我这里指的秒杀,是答案会在0.5秒之内展示出来。通常来说,人的反应时间是0.2-0.3秒,0.1秒的差别几乎看不出来。而之所以我有这个猜测,是因为我做过字幕时间轴的调整。如果字幕的出现和消失完全按照音频音频来,你会觉得那人开始说话了,但是还没有字幕,或者那人的话还没说完字幕就没了,或者字幕消失得很着急,所以,通常来说,在正常语速的情况下,字幕要比音频早起码0.15秒出现,结束时间则要控制在音频结束后0.3秒左右。结束时间到底要延迟多少主要看说话人的语速,如果那是很干脆的一个词,又或者那个人说话非常快,那么这个结束时间得控制到0.15秒以内,但如果那个人说话很慢,又或者他磨磨蹭蹭,每句话之间都要间隔一段时间,但实际上那句话是连续的,那段字幕的结束时间可能要跟下一句话的开始时间连上,0.5秒的延迟很正常。某些情况下,你甚至会觉得0.5秒太少。如果Excel通过数组完成一个转换用时不到0.5秒,对普通人来说,那是稍微顿一下的功夫而已。而昨天,我写的那些运用了数组的汇总程序在处理80多个工作表300多条数据的时候,如果要加上最后的删除空白行,尚且用时不到0.4秒,如果去掉删除空白行的功能,那么总用时将只需要0.2秒不到。0.2秒是什么概念?那就几乎等于鼠标按下去,你觉得结果马上就出来了。这就是我想要的秒杀结果。。

在Excel VBA里使用数组,我上个星期下半段才开始研究。没人强迫我必须得这么做,但是我觉得这非常有趣。对高手来说,这根本不算什么,但对我来说我觉得这是个非常牛逼的效果。其实能用Excel的VBA把那些数据自动汇总出来已经很可以了,一两秒钟的运算时间其实也不算很多,但是,当我发现了数组可以让这个功能进化很多的时候,我兴奋不已。其实,做的时候我完全没料到数组居然可以这么高效,虽然我知道它的用时肯定要比一般的方法快很多,一开始我以为可以达到10倍以上,但实际上还没到那个程度,不过这已经很鼓舞人了。

还是学生,要去考试的时候,我还是没有很好的掌握数组,但现在我对那个东西算是有点感觉了。

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