今天我们用R语言来处理一下。我们会用到一下技术:、

(1)正则表达式

(2)词频统计

(3)文本可视化

(4)ggplot2绘图

(5)中文分词

一.数据处理

首先我们要讲QQ聊天记录导出成txt文件,至于怎么导,我相信大家都会,不会自行百度。导出来之后我们打开文件看看

首先读入数据

root<-"C:/Users/henry wang/Documents/"
file<-paste(root,"18考研备战群.txt",sep="")
#读取数据
file.data<-scan(file,what = "",sep="\n",encoding = "UTF-8")

  

通过head(file.data)查看数据如下,可以看到前5行都是一些没有的信息,我们需要删掉。

file.data<-file.data[-1:-5]#删除文件开头的说明内容

  

现在我们要通过正则表达式提取聊天记录里面的时间,用户,聊天消息。

数据框进行合并。

#message第一行na,所以不读如第一行
data<- data.frame(time=time,user=user,message=message[-1])
head(data)

  

我们可以看到数据框中有na存在,所以接下来我们要删掉这些行。

for(i in 1:dim(data)[1])
if(is.na(data[i,1]))
{
if(is.na(data[i,2]))
{
if(is.na(data[i,3]))
{
data<- data[-i,]
}
}
}
head(data)#查看删掉NA之后的数据

  

现在我们数据处理基本完成。

二. 分析讨论话题

library(rJava)
library(Rwordseg)
library(dplyr)
text<-as.character(data$message)
text<-enc2utf8(text) #转utf-8
text<-text[Encoding(text)!='unknown']#删除无法识别的字符
#下面这几个词在分词是会被分开
insertWords(c("何凯文","泪奔","卖萌","考研"),save=TRUE)
word.message<-segmentCN(text)#分词
#删除停用词
stop_words=readLines('停词.txt')
target_words <- unlist(word.message)
seg_word=target_words[which(is.element(target_words,stop_words)==FALSE)] #分词结束,现在开始统计词频
p=as.data.frame(table(unlist(seg_word)))%>% arrange(desc(Freq))
head(p)
library(wordcloud2)
wordcloud2(p)

  

为什么会有一个飘字。打开聊天记录我们会发现,有一个叫天天考研的管理员人用这个在刷屏

那也许就有人会有疑问,那为什么没有过字,那是因为我们的停用词中有“过”,所以在删除停用词的时候就给删了。因此我们需要要把“飘”字删除,然后重新绘制。

seg_word=gsub(pattern="[飘]","",seg_word);
q=as.data.frame(table(unlist(seg_word)))%>% arrange(desc(Freq))
wordcloud2(q)

看来图片和表情才是大家聊天的主要方式,怪不得表情包那么火。

三. .讨论时间点

现在,我们来一起讨论在这个群里大家一般在几点比较活跃。直接给出代码。

user.time<-data$time
user.time<-as.character(user.time)
user.time.h<-c()
for(i in 1:length(user.time))
{
user.time.h[i]<-substr(user.time[i],12,19)
}
#如果上面substr(user.time[i],12,19)写成substr(user.time[i],12,13)在
#后面会出错的,因为当时间在10点到23点之间没错,但如果是0点到9点,
#它也会把后面的那个冒号读进去。
user.time.h<- as.POSIXct(user.time.h,format="%H:%M:%S") #提取时分秒
hour <- format(user.time.h,"%H") #统计出小时发言
hour <- as.data.frame(table(hour))
library(ggplot2)
ggplot(data=hour,aes(x=hour,y=Freq,group=1))+geom_bar(stat = 'identity')+geom_line(color="red");#折线图和条形图叠加

  

结果如下图:

看来大家一般在11点下午2点和晚上8点左右比较活跃。11点左右一般是快要下课了。2点左右上快要上课了。晚上8点我估计是刚刚做到图书馆准备复习吧。这些还是比较大学生的习惯。

三.分析谁是话痨

一般在任何QQ群或者讨论组里面都有几个特别活跃的人家,现在我们就来分析一下。

#统计发言频率
user.n<-as.data.frame(table(user))
user.n.20<-user.n[order(user.n[,2],decreasing=T),]
user.n.20<-user.n.20[1:20,]
ggplot(data=user.n.20,aes(x=user,y=Freq))+
geom_bar(stat='identity')+coord_flip()
#coord_flip()的作用就是讲条形图这些这样90度的旋转。

  

结果这这样的:

由此可知,测控技术与仪器-六花这个人可真是话痨啊。

相关文章推荐:

(1)R语言如何画个性化词云图 地址:http://blog.csdn.NET/wzgl__wh/article/details/52420747

(2)快速学习ggplot2 地址:http://blog.csdn.Net/wzgl__wh/article/details/51901093

(3)使用R语言进行中文分词  地址:http://blog.csdn.net/wzgl__wh/article/details/52420747

(4)R语言之正则表达式 地址:http://blog.csdn.net/wzgl__wh/article/details/52938475

注:

(1)由于隐私问题,所有QQ号部分都已打码。

(2)本文会发布在csdn博客与作者微信公众号《跟着菜鸟一下学R语言》

(3)转载请注明原文链接:http://blog.csdn.net/wzgl__wh/article/details/69055369

QQ聊天记录分析的更多相关文章

  1. 文本分析实例---QQ聊天记录分析

    对QQ聊天记录进行分析,由于每天产生的聊天记录比較多,所以选取的是从2月份整月的聊天记录数据.分析要产生的结果有三个,聊天记录中发消息的人前top15.统计24小时时间段那个时间段发贴人最多,还有对消 ...

  2. 如何找回QQ聊天记录、语音、图片?

    多图长图预警,本教程适用于 安卓手机 认真仔细看完答案的成功几率翻倍哟! 请各位认真看答案!求您了~ 2020年/4/4日 更新 人民不会忘记,祖国不会忘记,我们不会忘记,先烈不朽. 调整答案顺序,使 ...

  3. 用python做些有意思的事——分析QQ聊天记录——私人订制

    之前,写了这篇文章,用python提取全部群成员的发言时间,并简单做了下分析.先补充一下,针对特定单个群成员(这里以  小小白   为例)消息记录的获取. 代码比较简单,主要是正则表达式的书写.(附: ...

  4. 用python做些有意思的事——分析QQ聊天记录

    ####################################### 已更新续集,戳这里. ######################################## 是这样的,有位学 ...

  5. 把QQ聊天记录插入数据库中

    最近在做毕设,其中一个环节是分析qq聊天记录,在分析之前需要先把qq聊天记录导出,然后存入数据库中,qq聊天记录导出后是文本文档,导出方式: 1.登录qq后,点击任意一个好友,查看与他的聊天记录,点击 ...

  6. 重装系统后QQ聊天记录恢复方法

    重装系统后QQ聊天记录恢复方法 近日又一次安装了系统,又一次安装了腾讯的.TM,TM也是安装在之前的文件夹底下,可是聊天记录和之前的自己定义表情都不见了,看来没有自己主动恢复回来. 我这里另一个特殊的 ...

  7. Android解析qq聊天记录表情

    偶然在一个需求中需要解析qq聊天记录表情,表情的格式是以/开始,比如:你好啊?/微笑,在网上找了半天,也没能找到一个比较合适的,所以准备自己实现一下,首先要将表情图片和表情字符对上号,我想了几种解决方 ...

  8. QQ聊天记录备份助手 v1.0——搜索、备份、恢复QQ聊天记录文件,重装系统必备

    项目地址 https://github.com/guoyaohua/QQBackUp 开发环境 Netbean JAVA 功能描述 自动搜索硬盘中的QQ聊天记录文件 可选择的备份QQ数据记录 还原QQ ...

  9. QQ聊天记录快速迁移

    QQ聊天记录快速迁移 在工作中大家经常会用到QQ来沟通,但是很多时候在其它设备上登录QQ就无法查看到之前的聊天记录和图片,这是因为电脑上的QQ聊天记录一般都是保存在电脑本地硬盘里,所以我们在换设备登录 ...

随机推荐

  1. Mycat 配置文件rule.xml

    rule.xml配置文件定义了我们对表进行拆分所涉及到的规则定义.我们可以灵活的对表使用不同的分片算法,或者对表使用相同的算法但具体的参数不同. 该文件里面主要有tableRule和function这 ...

  2. _self.$scopedSlots.default is not a function报错

    问题: 当同一页面有elementUI的多个table表格时,如果用到v-if来动态展示表格,切换时出现如下报错: 原因: 是因为表格是element-ui通过循环产生的,而vue在dom重新渲染时有 ...

  3. 快学Scala 第四课 (多维数组,与Java集合的互操作)

    Scala二维数组的定义: val arr2 = Array.ofDim[String](2, 2) arr2(0)(0) = "aa" arr2(1)(0) = "bb ...

  4. 访问http接口时返回502 Bad Getway什么原因怎么解决

    使用 httpclient 工具通过代理服务器请求第三方http 接口,多次返回 502 Bad Getway,少数返回正常. 502 Bad Getway是什么意思? 502 Bad Gateway ...

  5. Android Studio 优秀插件:GsonFormat

    作为一个Android程序猿,当你看到后台给你的json数据格式时: { "id":123, "url": "http://img.donever.c ...

  6. java中的Collection和Collections

    Collection是集合类的上级接口,继承他的接口主要有Set和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索.排序.线程安全化等操作.

  7. 什么是Cookie?——每日一题20190623

    什么是Cookie? Cookie实际上是一小段的文本信息,客户端请求服务器,如果服务器需要记录该用户状态,就使用 response 向客户端浏览器颁发一个Cookie.客户端会把Cookie存起来, ...

  8. MYSQL SQL语句 之 select

    select语句在数据库操作中是操作频率最高的语句,使用方式也是多种多样,它的基本功能是:从表中选取数据,结果存储在一个结果集中.可以联合where,and,or,Order By,distinct, ...

  9. BS结构的一个注册用户的功能

    注册用户功能   学了Java一段时间,就想折腾折腾,就做了一个注册的功能,用HTML写了一个网页上的比较简陋的界面,用Java做了一个后台简陋的服务器处理数据,最后将数据存储到数据库中. 注册界面 ...

  10. ios手机通过fiddler抓去Https协议包时证书问题

    解决Fiddler无法抓取ios端HTTPS请求的问题 南天E心 关注 2018.01.15 10:36 字数 281 阅读 909评论 0喜欢 0 近日公司服务升级,将所有的接口请求由HTTP升级为 ...