用R语言分析我的fitbit计步数据
目标:把fitbit的每日运动记录导入到R语言中进行分析,画出统计图表来
已有原始数据:fitbit2014年每日的记录电子表格文件,全部数据点此下载,示例如下:
日期 | 消耗卡路里数 | 步 | 距离 | 攀爬楼层数 | 久坐不动的分钟数 | 不太活跃分钟数 | 中度活跃分钟数 | 非常活跃分钟数 |
2014年4月27日 | 2736 | 16581 | 11.84 | 7 | 1111 | 131 | 117 | 81 |
2014年4月28日 | 2514 | 12622 | 9.01 | 6 | 910 | 136 | 59 | 76 |
2014年4月29日 | 2231 | 8357 | 5.97 | 9 | 1208 | 129 | 76 | 27 |
2014年4月30日 | 2247 | 7959 | 5.68 | 9 | 1196 | 137 | 83 | 24 |
2014年5月1日 | 2563 | 13014 | 9.29 | 21 | 1107 | 156 | 131 | 46 |
2014年5月2日 | 2376 | 10010 | 7.15 | 17 | 1147 | 164 | 99 | 30 |
2014年5月3日 | 2553 | 13002 | 9.28 | 25 | 1119 | 151 | 120 | 50 |
2014年5月4日 | 2370 | 10090 | 7.23 | 19 | 1173 | 147 | 82 | 38 |
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
Min. :2031 Min. : 0 Min. : 0.000 Min. : 0.00
1st Qu.:2290 1st Qu.: 8593 1st Qu.: 6.135 1st Qu.: 11.00
Median :2408 Median :10515 Median : 7.570 Median : 16.00
Mean :2432 Mean :10152 Mean : 7.274 Mean : 17.35
3rd Qu.:2547 3rd Qu.:12665 3rd Qu.: 9.120 3rd Qu.: 20.00
Max. :3360 Max. :25779 Max. :18.410 Max. :165.00
sit inactive move active
Min. : 829 Min. : 0.0 Min. : 0.00 Min. : 0.00
1st Qu.:1119 1st Qu.:126.0 1st Qu.: 75.00 1st Qu.: 18.50
Median :1159 Median :146.0 Median : 93.00 Median : 37.00
Mean :1170 Mean :137.3 Mean : 91.89 Mean : 37.26
3rd Qu.:1188 3rd Qu.:163.0 3rd Qu.:113.00 3rd Qu.: 51.00
Max. :1440 Max. :238.0 Max. :222.00 Max. :137.00
5)看看数据框的结构,即各列分别是什么类型?
用str函数,str是structure单词的缩写。
str(fitbit)
'data.frame': 243 obs. of 8 variables:
$ ka : num 2496 2513 2228 2336 2508 ...
$ step : num 12803 12955 8768 8971 12078 ...
$ dist : num 9.14 9.47 6.31 6.41 9.05 ...
$ floor : int 15 12 16 16 8 20 12 13 13 13 ...
$ sit : num 1161 1188 1234 1140 1153 ...
$ inactive: int 123 112 97 174 130 177 156 121 126 123 ...
$ move : int 98 67 72 113 108 141 99 118 65 73 ...
$ active : int 58 73 37 13 49 61 40 37 47 56 ...
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日")
plot(month, step)
这时可以看到水平轴已经显示的是日期了。
只统计某个月份的数据
如果只统计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(,), xlab="日期", ylab="步数", main=paste("2014年", m, "月",sep=""))
} pdf("fitbit2014年计步数据统计图.pdf", family='GB1')
par(mfrow=c(,)) #4行,3列
for(i in :) PlotMonthGraph(i)
dev.off() par(mfrow=c(,))
png("全年步数统计图.png")
plot(fitbit$date, fitbit$step, type="l", xlab="date", ylab="steps", main="2014年全年步数统计图")
dev.off()
用R语言分析我的fitbit计步数据的更多相关文章
- R语言分析朝阳医院数据
R语言分析朝阳医院数据 本次实践通过分析朝阳医院2016年销售数据,得出“月均消费次数”.“月均消费金额”.“客单价”.“消费趋势”等结果,并据此作出可视化图形. 一.读取数据: library(op ...
- R语言分析(一)-----基本语法
一, R语言所处理的工作层: 解释一下: 最下面的一层为数据源,往上是数据仓库层,往上是数据探索层,包括统计分析,统计查询,还有就是报告 再往上的三层,分别是数据挖掘,数据展现和数据决策. 由上图 ...
- 利用R语言制作出漂亮的交互数据可视化
利用R语言制作出漂亮的交互数据可视化 利用R语言也可以制作出漂亮的交互数据可视化,下面和大家分享一些常用的交互可视化的R包. rCharts包 说起R语言的交互包,第一个想到的应该就是rCharts包 ...
- R语言数据分析利器data.table包—数据框结构处理精讲
R语言数据分析利器data.table包-数据框结构处理精讲 R语言data.table包是自带包data.frame的升级版,用于数据框格式数据的处理,最大的特点快.包括两个方面,一方面是写的快,代 ...
- 用R语言分析与预測员工离职
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/kMD8d5R/article/details/83542978 https://mmbiz.qpic ...
- 使用R语言分析股价波动
今天看的R语言.做个笔记. 使用R语言读取雅虎財经数据.分析微软公司(股票代码:MSFT)在2015年股价波动超过百分之十的日期. 然后通过检索新闻的方式,看看微软当天有什么新闻发生,导致股价波动. ...
- 使用R语言的RTCGA包获取TCGA数据--转载
转载生信技能树 https://mp.weixin.qq.com/s/JB_329LCWqo5dY6MLawfEA TCGA数据源 - R包RTCGA的简单介绍 - 首先安装及加载包 - 指定任意基因 ...
- 寻找与疾病相关的SNP位点——R语言从SNPedia批量提取搜索数据
是单核苷酸多态性,人的基因是相似的,有些位点上存在差异,这种某个位点的核苷酸差异就做单核苷酸多态性,它影响着生物的性状,影响着对某些疾病的易感性.SNPedia是一个SNP调査百科,它引用各种已经发布 ...
- R语言数据分析利器data.table包 —— 数据框结构处理精讲
R语言data.table包是自带包data.frame的升级版,用于数据框格式数据的处理,最大的特点快.包括两个方面,一方面是写的快,代码简洁,只要一行命令就可以完成诸多任务,另一方面是处理 ...
随机推荐
- 让文档和Demo生成更加简单和强大 - SmartDoc 0.1.1 说明
新特性 smartDoc 0.1.1版正式发布,其中加入了更多方便生成文档的功能,主要特性如下: * 加入@demo配置项,看可以动态抓取html和js的内容作为@example,同时支持扩展@dem ...
- MongoDB 基础命令行
本文专门介绍MongoDB的命令行操作.其实,这些操作在MongoDB官网提供的Quick Reference上都有,但是英文的,为了方便,这里将其稍微整理下,方便查阅. 登录和退出 mongo命令直 ...
- Direct3D11学习:(一)开发环境配置
转载请注明出处:http://www.cnblogs.com/Ray1024 从今天开始,开启一个新的系列:Direct3D11的学习教程. 因为一直对3D方面比较感兴趣,最近决定开始学习D3D知 ...
- #敏捷个人资料# 免费下载 《敏捷个人-认识自我,管理自我 v0.8.pdf》
快乐.高效.平衡,做一个爱学习.有目标.懂生活的影响者. 从今天开始至7月31日,点击http://t.cn/Rv3koHU 免费收到 1000多页的 <敏捷个人-认识自我,管理自我 v0.8. ...
- SQL Server中的事务日志管理(6/9):大容量日志恢复模式里的日志管理
当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...
- Jquery几个比较实用,但又让很多人忽略的几个函数
工作中接触的人中,这些函数的使用频率比较少,我用的又比较好用的几个函数 来给大家分享一下. 你有你喜欢的,也可以分享一下 1.filter 使用了我要什么就有什么 这个函数不但可以很方便的筛选自定义H ...
- 前端js的书写规范和高效维护的方案_自我总结使用的方案
作为程序员,人生最值得幸福的事有几件: 解决困扰了很长时间的问题 升职加薪 找个漂亮又靠谱的对象 深得领导的喜欢 带领团队冲锋陷阵 ... 哈哈,这些都是梦想,暂时想想就好了.这肯定和我说的东西不符合 ...
- [Code] C#与js的正则表达式
元字符: 单个字符: . [] 限定符: * + ? {n} {n,} {n,m} 头尾: ^ $' 其他: | () 正则表达式在js和C#中都有. C#中: 创建: var regex = new ...
- SpringMVC——类型转换和格式化、数据校验、客户端显示错误消息
在介绍类型转换和格式化之前,我首先来介绍 <mvc:annotation-driven />. 需要导入的 schema: xmlns:mvc="http://www.sprin ...
- dp - 2015 Multi-University Training Contest 2 1004 Delicious Apples
Delicious Apples Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5303 Mean: 一条长为L的环形路上种着n棵 ...