在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
目标:把fitbit的每日运动记录导入到R语言中进行分析,画出统计图表来 已有原始数据:fitbit2014年每日的记录电子表格文件,全部数据点此下载,示例如下:
1)转换xls为csv 首先要把xls电子表格导入,这里用最简单的办法,首先将xls另存为csv文件。为了输入命令方便,把列名都改为了英文。 2)将csv复制到工作目录中,或设置自己的工作目录,以让R环境可以找到相应的文件 将csv放在工作目录下,也可以用setwd("c:/myfitbit")设置自己的工作目录 3)导入csv文件到数据框 fitbit <- read.table("fitbit.csv", header=TRUE, sep=",", row.names="date") 也可以直接调用read.csv()函数,可以少填几个参数选项 4)看看数据的概貌 summary(fitbit) 可以看出每列数据的最小、最大、平均值、中位数等统计信息。 ka step dist floor 5)看看数据框的结构,即各列分别是什么类型? 用str函数,str是structure单词的缩写。 str(fitbit) 'data.frame': 243 obs. of 8 variables:
6)画出每天步数的统计图 plot(fitbit$step) 要取出某列,可以用$符号。 如果每次都写上fitbit$太麻烦,就可以用attach(fitbit)把这个数据框的搜索路径加上,这样以后就可以输入step来表示fitbit$step了。 与attach()相对的是detach()函数,为了避免编程错误,最好成对出现。 7)看看走的步数与公里数有什么关系? plot(setp, dist)
可以看出fitbit实际上就是一个非常简单的算法把步数换算为公里数,什么高级计算也没有。 8)给图加上标题 title("fitbit统计图") 9)用命令的方式将图形输出到jpeg文件中 jpeg("a.jpg") #将绘图送到jpeg图形文件中 plot(step, dist) title("fitbit统计图") dev.off() #最后要关闭设备 其它命令:dev.new()可以打开一个新的绘图窗口。dev.next(), dev.prev(), dev.set()... 当然在R交互环境中的图形上点右键,或用R环境的菜单功能,可以随便复制和输出图形。
看看步数的统计分布图hist(step)
平均下来每天超过1万步,有些记录在fitbit同步时丢失,所以有20多天走了零步。 显示日期日期是以"2014年10月28日"这样的字符串格式记录的,默认是不转换为日期型的,需要用as.Date函数转换一下。 month <- as.Date(row.names(fitbit), "%Y年%m月%d日") 这时可以看到水平轴已经显示的是日期了。 只统计某个月份的数据如果只统计9月份的数据,需要用到日期处理的函数。 monthData <- fitbit[as.double(format(fitbit$date, "%m"))==9, ] 自动生成统计图并保存为文件现在要自动生成fitbit的10月的统计图,并保存为文件fitbit_month_10.jpg。 m <- 10 jpeg(paste0("fitbit_month_", m, ".jpg")) monthData <- fitbit[as.double(format(fitbit$date, "%m"))==m, ] plot(format(monthData$date,"%d"), monthData$step, type="l", xlab="date", ylab="steps", main=paste("2014年",m,"月步数统计图",sep="")) dev.off()
分组统计每个月的平均步数meanMonthStep <- aggregate(fitbit$step, by=list(format(fitbit$date,"%m")), mean) plot(meanMonthStep,type="b",main="月平均步数", xlab="month", ylab="step")
由于4、5月份的数据同步有故障,丢失了部分数据,所以平均步数偏低。 后来发现用tapply函数也可以得到同样的结果: monthStep <- tapply(fitbit$step, format(fitbit$date,"%m"), mean) 实际上tapply将向量分割为组,然后对每组应用指定的函数。
显示一条平滑曲线plot(fitbit$date, fitbit$step, type="l") lines(lowess(fitbit$date, fitbit$step),col="blue") identify()误别图上的点plot(fitbit$date,fitbit$step,type="p", pch=16,ylim=c(0,30000)) identify(fitbit$date,fitbit$step) 鼠标在图形上点击,可以得到点的序号。我这里找了步数最少的两天,还有走得最多的一天。 查了一下为什么那两天走得最少?很可能忘了带计步器! fitbit[c(96,182,269),c("date","step")] date step 96 2014-04-06 2285 182 2014-07-24 25779 269 2014-10-19 1633
下面的代码把12个月的图画到一个PDF文件中。 fitbit <- read.csv("fitbit2014.csv") # 一定要转换为日期类型 fitbit$date <- as.Date(fitbit$date) PlotMonthGraph <- function(m) { monthData <- fitbit[as.double(format(fitbit$date, "%m"))==m, ] plot(format(monthData$date,"%d"), monthData$step, type="l", ylim=c(0,25000), xlab="日期", ylab="步数", main=paste("2014年", m, "月",sep="")) } pdf("fitbit2014年计步数据统计图.pdf", family='GB1') par(mfrow=c(4,3)) #4行,3列 for(i in 1:12) PlotMonthGraph(i) dev.off() par(mfrow=c(1,1)) png("全年步数统计图.png") plot(fitbit$date, fitbit$step, type="l", xlab="date", ylab="steps", main="2014年全年步数统计图") dev.off()
|
请发表评论