使用 R 语言挖掘 QQ 群聊天记录

1、获取数据

从 QQ 消息管理器中导出消息记录,保存的文本类型选择 txt 文件。这里获取的是某群从 2016-04-18 到 2016-05-07 期间的聊天记录,记录样本如下所示。

消息记录(此消息记录为文本格式,不支持重新导入)

================================================================
消息分组:我的QQ群
================================================================
消息对象:QQGroup
================================================================

2016-04-18 20:04:00 谁来弄死我(1122334455)
ip 主机名

2016-04-18 20:04:20 我来弄死谁(66554432)
这个我配了

2016-04-18 20:04:29 我来弄死谁(66554432)
hadoop集群是正常的

2016-04-18 20:05:07 谁来弄死我(1122334455)
自己找吧

2016-04-18 20:05:20 我来弄死谁(66554432)
spark集群运行作业的时候就抱这错了

2016-04-18 20:05:29 我来弄死谁(66554432)
我都找了好几天了

2、数据预处理

打开 R 软件,先通过 File—>Change dir 切换到聊天文件所在目录。

引入包:

library(stringr)
library(plyr)
library(lubridate)
library(ggplot2)
library(reshape2)
library(igraph)

没有的包要通过命令 install.packages(”扩展包名”)  安装。

读取聊天记录文件到内存:

qqsrcdata<-readLines("QQGroup.txt",encoding="UTF-8")

这里我们不关心聊天内容,只看时间和发言人,所以,我们把类似 “2016-04-18 20:04:20 我来弄死谁(66554432)” 这样的内容提取出来。这里要用到正则表达式,对此不懂的可参考 正则表达式30分钟入门教程。对 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={}  # 创建一个空的 list
data$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){
  substring(s,g,g+attr(g,‘match.length‘)-1)  # 读取 s 中的数据
}

gg<-gregexpr("\\d{4}-\\d{2}-\\d{2} \\d+:\\d{2}:\\d{2}",srcdata,perl=TRUE)
for(j in 1:length(gg))
{
data$time[j]<-getcontent(srcdata[j],gg[[j]])
}

现在时间和发言人信息都读到 data 的 time 和 id 中了,可以确认下提取内容:data、data$id、data$time。

还没完,时间还是字符串,还需要继续处理:

# 数据整理
# 将字符串中的日期和时间划分为不同变量
temp1 <- str_split(data$time,‘ ‘)
result1 <- ldply(temp1,.fun=NULL)
names(result1) <- c(‘date‘,‘clock‘)

#分离年月日
temp2 <- str_split(result1$date,‘-‘)
result2 <- ldply(temp2,.fun=NULL)
names(result2) <- c(‘year‘,‘month‘,‘day‘)

# 分离小时分钟
temp3 <- str_split(result1$clock,‘:‘)
result3 <- ldply(temp3,.fun=NULL)
names(result3) <- c(‘hour‘,‘minutes‘,‘second‘)

# 合并数据
newdata <- cbind(data,result1,result2,result3)

# 转换日期为时间格式
newdata$date <- ymd(newdata$date)

# 提取星期数据
newdata$wday <- wday(newdata$date)

# 转换数据格式
newdata$month <- ordered(as.numeric(newdata$month) )
newdata$year <- ordered(newdata$year)
newdata$day <- ordered(as.numeric(newdata$day))
newdata$hour <- ordered(as.numeric(newdata$hour))
newdata$wday <- ordered(newdata$wday)

至此,数据预处理完成,时间和发言人数据都已合适地存到 newdata 中,可以开始任性地分析了~

3、数据分析

先来看一星期中每天合计的聊天记录次数,可以看到该 QQ 群的聊天兴致随星期的分布。

qplot(wday,data=newdata,geom=‘bar‘)

周三是工作日,还这么活跃,周六话最多,周日估计出去玩了,周一专心上班。

再来看看聊天兴致在一天中的分布。

qplot(hour,data=newdata,geom=‘bar‘)

这群一天中聊得最嗨的是上午 10 点和下午 17 点,形成两个高峰。

参考资料:

[1] 正则表达式30分钟入门教程

[2] http://blog.csdn.net/stdcoutzyx/article/details/37568225

时间: 2024-10-24 10:08:06

使用 R 语言挖掘 QQ 群聊天记录的相关文章

探讨原创内容之:提取qq群聊天记录作为网页的案例

一直在找原创内容.其实qq群就是一个很好的原创内容. 我提取出来了,直接保存为网页.如下: http://www.dlnulib.com/jiemengshili.htm 解梦实例 附上步骤: 一.基本步骤: 登陆QQ--主菜单--工具--消息管理器--消息分组 二.分类步骤: 1.提取与单个Q友的聊天记录 消息分组--找到目标网友--右键点击--导出消息记录--保存文件格式--建议选"网页格式"(有图)或"文本文件"(仅有文字)--保存 2.提取与所有Q友.某个分

R语言中的并行计算——搭建R的集群

转载:http://blog.sina.com.cn/s/blog_83bb57b70101qeys.html 一直纠结于R的大数据计算问题,希望可以找到一个彻底的方案解决它.而云服务器当然是解决这个问题的最佳方案,所以,至少从这方面入手. R的云服务器部署有两种解决方案,一种是使用R语言的并行计算,另外一种是使用RHadoop框架. RHadoop框架其实就是M / R 算法的R语言实现,需要使用者有M / R的计算基础,和R语言平常使用的计算方式有很大的不同,因此,我采用的解决方案是搭建R

python-使用正则快速解析QQ群聊记录

使用正则表达式,对QQ群聊天记录进行解析,用于分析日期.成员等维度发言情况. 原始文本是2014-03-28 15:04:25 №┽◎Eagle(369029696) 解析之后yyyy=2014mm = 03dd = 28hh = 15mi  =04ss = 25nick = №┽◎Eagleqq = 369029696 代码如下 # -*- coding: utf-8 -*- """ zhangbo2012 http://www.cnblogs.com/zhangbo201

R语言︱异常值检验、离群点分析、异常值处理

在数据挖掘的过程中,数据预处理占到了整个过程的60% 脏数据:指一般不符合要求,以及不能直接进行相应分析的数据 脏数据包括:缺失值.异常值.不一致的值.重复数据及含有特殊符号(如#.¥.*)的数据 数据清洗:删除原始数据集中的无关数据.重复数据.平滑噪声数据.处理缺失值.异常值等 缺失值处理:删除记录.数据插补和不处理 主要用到VIM和mice包 install.packages(c("VIM","mice")) 1.处理缺失值的步骤 步骤: (1)识别缺失数据:

下载零基础数据分析与挖掘R语言实战课程(R语言)

随着大数据在各行业的落地生根和蓬勃发展,能从数据中挖金子的数据分析人员越来越宝贝,于是很多的程序员都想转行到数据分析,挖掘技术哪家强?当然是R语言了,R语言的火热程度,从TIOBE上编程语言排名情况可见一斑.于是善于学习的程序员们开始了R语言的学习之旅.对于有其他语言背景的程序员来说,学习R的语法小菜一碟,因为它的语法的确太简单了,甚至有的同学说1周就能掌握R语言,的确如此.但是之后呢?……好像进行不下去了!死记硬背记住了两个分析模型却不明其意,输出结果如同天书不会解读,各种参数全部使用缺省值,

基于R语言的数据分析和挖掘方法总结——均值检验

2.1 单组样本均值t检验(One-sample t-test) 2.1.1 方法简介 t检验,又称学生t(student t)检验,是由英国统计学家戈斯特(William Sealy Gosset, 1876-1937)所提出,student则是他的笔名.t检验是一种检验总体均值的统计方法,当数据中仅含单组样本且样本数较大时(通常样本个数≧30的样本可视为样本数较大),可用这种方法来检验总体均值是否大于.小于或等于某一特定数值.当数据中仅含单组样本但样本数较小时(通常样本个数<30的样本可视为

零基础数据分析与挖掘R语言实战课程(R语言)

随着大数据在各行业的落地生根和蓬勃发展,能从数据中挖金子的数据分析人员越来越宝贝,于是很多的程序员都想转行到数据分析, 挖掘技术哪家强?当然是R语言了,R语言的火热程度,从TIOBE上编程语言排名情况可见一斑.于是善于学习的程序员们开始了R语言的学习 之旅.对于有其他语言背景的程序员来说,学习R的语法小菜一碟,因为它的语法的确太简单了,甚至有的同学说1周就能掌握R语言,的确如 此.但是之后呢?……好像进行不下去了!死记硬背记住了两个分析模型却不明其意,输出结果如同天书不会解读,各种参数全部使用缺

[译]用R语言做挖掘数据《五》

介绍 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到程序: 1. LX终端(LXTerminal): Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令2. GVim:非常好用的编辑器,最简单的用法可以参考课程[Vim编辑器](http://www.shiyanlou.com/courses/2)3. R:在命令行输入‘R’进入交互式环境,下

[译]用R语言做挖掘数据《四》

回归 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到程序: 1. LX终端(LXTerminal): Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令2. GVim:非常好用的编辑器,最简单的用法可以参考课程Vim编辑器3. R:在命令行输入‘R’进入交互式环境,下面的代码都是在交互式环境运行. 3. 环境使用 使用R语言交互式环境输入实验