使用 R 语言挖掘 QQ 群聊天记录
|
1、获取数据 从 QQ 消息管理器中导出消息记录,保存的文本类型选择 txt 文件。这里获取的是某群从 2016-04-18 到?2016-05-07 期间的聊天记录,记录样本如下所示。 2、数据预处理 打开 R 软件,先通过 File—>Change dir 切换到聊天文件所在目录。 引入包: library(stringr) 没有的包要通过命令?install.packages(”扩展包名”) ?安装。 读取聊天记录文件到内存: qqsrcdata<-readLines("QQGroup.txt",encoding="UTF-8")
这里我们不关心聊天内容,只看时间和发言人,所以,我们把类似 “2016-04-18 20:04:20 我来弄死谁(66554432)” 这样的内容提取出来。这里要用到正则表达式,对 R 语言的 grep、sub、gregexpr 等字符串处理函数不熟的,网上搜一下,资料多的是。 srcdata<-qqsrcdata[grep("^d{4}-d{2}-d{2} d+:d{2}:d{2} .+$",qqsrcdata)]
看看 srcdata 内容,就已经全是发言时间和发言人信息了,没有其它闲杂数据。 然后再从 srcdata 中提取发言时间和发言人信息,分别存到列表 data 的 time 和 id 中。对发言人信息的提取很简单: data={} ?# 创建一个空的 listdata$id<-sub("d{4}-d{2}-d{2} d+:d{2}:d{2} ","",srcdata)
对发言时间的提取要稍麻烦些,因为时间字符串的长度不一样,有些是 18 位,如 “2016-04-18 7:36:32”,有些是 19 位,如 “2016-04-18 19:24:01”,所以,在提取时间时,需先用?gregexpr 确定时间字符串的起始和结束位置,然后再用 substring 提取出相应的时间,注意 substring 和 sub 是不同的函数。 getcontent <- function(s,g){
现在时间和发言人信息都读到 data 的 time 和 id 中了,可以确认下提取内容:data、dataid、datatime。 还没完,时间还是字符串,还需要继续处理: # 数据整理# 将字符串中的日期和时间划分为不同变量 至此,数据预处理完成,时间和发言人数据都已合适地存到 newdata 中,可以开始任性地分析了~ 3、数据分析
qplot(wday,data=newdata,geom='bar') 周三是工作日,还这么活跃,周六话最多,周日估计出去玩了,周一专心上班。
qplot(hour,geom='bar') 这群一天中聊得最嗨的是上午 10 点和下午 17 点,形成两个高峰。
user <- as.data.frame(table(newdata$id)) ?# 用 table 统计频数
# 活跃天数计算# 将数据展开为宽表,每一行为用户,每一列为日期,对应数值为发言次数
# 观察每天的发言次数# online.day为每天的发言次数online.day <- sapply(flat.day[,-1],sum) ?# -1 表示去除第一列,第一列是 IDtempdf <- data.frame(time=ymd(names(online.day)),online.day )
|

