拿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
为了将这个表格转换成频率,
可以写一个函数
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)
可以看到2月份周六消息比较多,3月份则为周五周六,4月份周日最多,周六其次,5月份则想对比较平均。
同理也可以看月份和小时的分布,
monthhour <- table(format(V2,format="%m"),format(V2,format="%H"))
tofreq(monthhour)
可以看到早上8点多了morning call 服务,频率有所下降。
同理也可以看月份,星期,时刻的关系,
可以看到周三早上8点的消息最少。周一和周五比较多。
以上。