用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")

image

identify()誤別圖上的點

plot(fitbit$date,fitbit$step,type="p", pch=16,ylim=c(0,30000))

identify(fitbit$date,fitbit$step)

鼠標在圖形上點擊,可以得到點的序號。我這里找了步數最少的兩天,還有走得最多的一天。

image

查了一下為什么那兩天走得最少?很可能忘了帶計步器!

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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM