今天我们用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. Vue Element 导航子路由不选中问题

    首先说下遇到的问题 1.进入嵌套路由,当前父导航无法高亮显示 2.页面刷新后导航重置问题 3.在嵌套路由刷新页面也会导致导航重置问题 接下来是解决方案: elementUI 里面有个属性 defaul ...

  2. Marshmallow权限使用

    Google发布Android 6.0后对用权限的控制更加严格,在Android5.1或更低的版本中用户能在App的安装期间或使用设置应用程序权限来同意或拒绝某个权限,而在Android6.0或更高的 ...

  3. 005-做题:使用 Python 生成 200 个激活码

    题目:使用 Python 生成 200 个不重复的激活码 编写思路# 激活码一般是由26个大写字母和10个数字任意组合而成# 长度为12位或者16位的居多激活码# 一个激活码里的字符是可以重复的,而且 ...

  4. python简单爬虫(爬取pornhub特定关键词的items图片集)

    请提前搭好梯子,如果没有梯子的话直接403. 1.所用到的包 requests: 和服务器建立连接,请求和接收数据(当然也可以用其他的包,socket之类的,不过requests是最简单好用的) Be ...

  5. word2vec预训练词向量

    NLP中的Word2Vec讲解 word2vec是Google开源的一款用于词向量计算 的工具,可以很好的度量词与词之间的相似性: word2vec建模是指用CBoW模型或Skip-gram模型来计算 ...

  6. Asp.NetCore源码学习[2-1]:日志

    Asp.NetCore源码学习[2-1]:日志 在一个系统中,日志是不可或缺的部分.对于.net而言有许多成熟的日志框架,包括Log4Net.NLog.Serilog 等等.你可以在系统中直接使用这些 ...

  7. Executor线程池原理详解

    线程池 线程池的目的就是减少多线程创建的开销,减少资源的消耗,让系统更加的稳定.在web开发中,服务器会为了一个请求分配一个线程来处理,如果每次请求都创建一个线程,请求结束就销毁这个线程.那么在高并发 ...

  8. linux上安装LAMP笔记

    B哥最近在参加比赛,需要把一个php项目部署到服务器上,故此在linux上安装LAMP环境,用于部署项目,第一次安装,做点儿笔记记录一下. 安装条件: Redhat或者CentOS linux环境已装 ...

  9. Centos 7.2天兔(Lepus 3.8)数据库监控系统部署

    天兔(Lepus 3.8)数据库监控系统部署 转载自:https://blog.csdn.net/m0_38039437/article/details/79613260 一.安装LAMP基础环境 首 ...

  10. Linux之常用命令I

    一.Linux简介 1)Minix(只为教学,开源的)-->Linux(以前者为模板,添加了一些软件) 2)Linux分为内核版本和发行版本 区别:Linux内核版本就是核心版本,不用最新版本, ...