Tuesday, May 27, 2014

Whatsapp 通话统计

拿R 统计一下whatsapp的发消息的时段和频率。


首先导出whatsapp通话记录,whatsapp可以发送记录到信箱,下载保存。
在命令行下提取前两行
cut -d " " -f 1,2  WhatsApp\ Chat.txt > ~/Desktop/whatsappFeb-May.txt


进入R
setwd("~/Desktop")
text <- read.table("whatsappFeb-May.txt", head=FALSE, as.is=TRUE, sep="\t")
text$V2 <- strptime(text$V1,"%Y/%m/%d %H:%M:%S:") #将字符串转换成时间格式
attach(text)


# 月份的统计
table(format(V2,format="%B"))
April  February  March     May
3194      2499           2370    3835

# 周一到周日的统计
table(format(V2,format="%A"))
Friday Monday Saturday Sunday Thursday Tuesday Wednesday
1316     1478         2358           2633         1531          1084           1498

# 按小时的汇总
table(format(V2,format="%H"))
00 01 02 07 08 09 10 11 12 13 14 15 16 17
1156 208 7 30 738 67 145 224 422 678 775 563 311 528
18 19 20 21 22 23
510 753 617 1215 1387 1564

统计结果如下,周末消息最多,其次周四,周二最少
晚上10点至12点消息最多
每月消息数有所上涨。

但是上边可以看到星期和月份的顺序并不是按实际顺序排列的
因此改为数字表示
table(format(V2,format="%m"))
02       03        04      05
2498 2370    3194   3835

table(format(V2,format="%u")) # weekday

1         2          3          4            5           6           7
1478   1084   1497   1531    1316   2358    2633



当然也可以同时显示月份和weekday
Screen Shot 2014-05-27 at 2.47.29 PM

为了将这个表格转换成频率,
可以写一个函数
tofreq <- function(x){
new <- x
for (i in 1:nrow(x)){
new[i,] <- as.numeric(sprintf("%.2f", x[i,]/sum(x[i,])))
}
return(new)
}
matrix <- table(format(V2,format="%m"),format(V2,format="%u"))
tofreq(matrix)
Screen Shot 2014-05-27 at 2.50.18 PM


可以看到2月份周六消息比较多,3月份则为周五周六,4月份周日最多,周六其次,5月份则想对比较平均。

同理也可以看月份和小时的分布,
monthhour <- table(format(V2,format="%m"),format(V2,format="%H"))
tofreq(monthhour)
RStudio

可以看到早上8点多了morning call 服务,频率有所下降。
同理也可以看月份,星期,时刻的关系,
RStudio

可以看到周三早上8点的消息最少。周一和周五比较多。
以上。