R语言是一门好语言,但很多人在读取文件中数据时会遇到问题。比如我遇到的问题就是从文件中读取数据后,数据无法用于画图。
检索了N篇博文(抱歉我实在无法一一列举30+篇博文)后,终于看到曙光,事实告诉我学任何一门语言都需要至少投资一本教材(譬如《R语言编程艺术》(美)Norman Matloff著,陈堰平、邱怡轩、潘岚锋 等译)。
下面展示一个栗子:
D市每日接电话报警数已知,求何时警情比较集中?
这明摆着是个统计问题,频数分布直方图就能完美解决。
鉴于并不是所有Office软件都支持直接画频数分布直方图,我想到了大学时代刘苗老师教我们的现代统计软件课——没错,就是R。
R语言在于短小精悍且图形优美,感觉就是统计软件界的python嘛!
下面开始:
1.数据清洗
为了便于技术分享,我将数据脱敏。去掉接报警详细内容,只保留接报警时间一列:
图片只截取了一部分,日期是从2023-05-01到2023-05-31的,我们统计的是每日接报警集中情况,所以应将日期元素清洗掉。该怎么办呢?
这里康妮猫用了一个比较讨巧的做法:分列
是的,就是WPS自带的分列功能,可以将每一行“日期+时间”的数据拆分开。得到下图:(左列40000多是用WPS自带的格式转换为数据后得到的,右边是我们提取的时间数据)
将无用的左列删掉,再用WPS自带的格式转换将时间数据转换为小数。
2.数据读取
getwd()#获取工作空间地址
setwd("D:/data")#设置工作空间地址
times=read.table("ds2023May.txt")#把WPS里的数据复制粘贴到记事本,读取
typeof(times)#检验数据类型,发现是“list”
times=as.numeric(unlist(times))#这一步非常重要,接下来就可以操作咯
一定要用unlist()函数,否则读取的数据无法用于画图。发现其他方式的小伙伴一定要留言告诉我!
3.画图
hist(times)#这句虽然能出图,但横坐标不对,我们来个操作
hist(times*24)
hist(times*24,xlab="h",ylab="人次",main="XX区5月电话报警峰谷图",sub="制图:Connie",xlim=c(0,25),ylim=c(0,500),col="blue",xaxt="n",yaxt="n")#这句出来个没坐标的图
执行代码,画出无坐标的图(因为我们要个性化坐标: ))
hist(times*24,xlab="h",ylab="人次",main="X区5月电话报警峰谷图",sub="制图:Connie",xlim=c(0,25),ylim=c(0,500),col="blue",xaxt="n",yaxt="n")#
axis(1,a)
axis(2,b)
如图所示,每日接报警情自6时起至8时不断增加,到中午12至13时有所下降,后上升至19时达到最高后又逐步下降。(我这个分析= =#仅供参考)
4.总结
a.前期数据清洗很重要。不然就会困死在一条代码上拔不出来。要灵活利用WPS自带的功能为我们减少工作负担~(别问我自动化水平降低怎么破,那是大神们的事)
b.画图要循序渐进,不要指望一条代码就解决整张图。
c.unlist()函数很重要,如果实在不知道数据类型就用typeof()查一查,秒懂!
好啦今天的分享就到这里,热爱Coding的你们,再会!