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

对QQ用户发贴次数进行统计,须要注意QQ导出的聊天记录格式。【年月日时分秒 QQ账号相关信息】,须要对聊天记录做解析。另外对聊天内容也要做解析。

详细思路不做详解,仅仅贴结果和部分代码。相信大家一看就明确。

统计24小时时间段QQ消息数量

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

能够看出每天下午3点到5点大家都非常活跃

另一个就是对讨论的话题做分析,首先要对发的消息做分词处理。去掉一个停用词,然后按词频出现的次数统计,得到例如以下结果。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

第一个表示出现的词,第二个表示在某个时间段内出现的次数,总的来说,我们这个群还算是一个技术群吧。

相关部分代码:

def userProcess():
userArray = []
contentArray = LoadUserInfo.loadUser()
for userInfo in contentArray:
if(len(userInfo)==3):
userArray.append(userInfo[2]) print(len(userArray))
#Counter(words).most_common(10)
userGroupInof = Counter(userArray).most_common(15)
#print(userGroupInof) userNameLable = []
postMessageNum = [] for key,value in userGroupInof:
userNameLable.append(key)
postMessageNum.append(value) #performance = 3 + 10 * np.random.rand(len(people))
#error = np.random.rand(len(people)) zh_font = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc') plt.barh(np.arange(len(userNameLable)), postMessageNum, align='center', alpha=0.4)
plt.yticks(np.arange(len(userNameLable)), userNameLable,fontproperties=zh_font)
plt.xlabel('发贴数量',fontproperties=zh_font)
plt.title('java-Endless Space群(4881914)发贴最多的15个人',fontproperties=zh_font) plt.show()
def hourProcess():
hourArray = []
contentArray = LoadUserInfo.loadUser()
for userInfo in contentArray:
if(len(userInfo)==3):
messageDate = userInfo[1]
hourInfo = re.split('[:]',messageDate)
hourArray.append(hourInfo[0]) print(len(hourArray))
#Counter(words).most_common(10)
hour_counts = Counter(hourArray)
#对数据进行排序
sortByHour = sorted(hour_counts.items())
print(sortByHour) postMessageLable = []
postMessageNum = [] for key,value in sortByHour:
postMessageLable.append(key)
postMessageNum.append(value) print(postMessageLable)
print(postMessageNum) #生成发贴柱状图
N = len(postMessageNum) ind = np.arange(N)+0.5 # the x locations for the groups
#print(ind) #x轴上的数值
width = 0.35 # the width of the bars fig, ax = plt.subplots()
rects = ax.bar(ind, postMessageNum, width, color='r') # add some text for labels, title and axes ticks
ax.set_ylabel('message number')
ax.set_title('QQ message number of hour,total message ( '+ str(len(hourArray)) + ")")
ax.set_xticks(ind+width)
ax.set_xticklabels(postMessageLable) def autolabel(rects):
# attach some text labels
for rect in rects:
height = rect.get_height()
ax.text(rect.get_x()+rect.get_width()/2., height, '%d'%int(height), ha='center', va='bottom') autolabel(rects) plt.show()

#对导入的文件第四列做中文分词处理
#对用户发出的消息进行处理 def messageProcess():
wordArray = []
contentArray = LoadMessageInfo.loadMessage()
print("processing original data ........")
for messageInfo in contentArray:
#print(messageInfo[3])
word_list = jieba.cut(messageInfo, cut_all=False)
for word in word_list:
#过滤掉短词,仅仅有一个长度的词
if(len(word)>1):
wordArray.append(word) #print(wordArray)
print("remove stop word data ........")
jsonResource = open('./data/stopword.json','r',encoding='utf8')
stopwords = json.load(jsonResource)
#print(stopwords)
for word in wordArray:
print(word)
if (word in stopwords):
wordArray.remove(word) #print(wordArray)
print("text is processing.......")
word_counts = Counter(wordArray)
print(word_counts)
print("processing is over")

文本分析实例---QQ聊天记录分析的更多相关文章

  1. QQ聊天记录分析

    今天我们用R语言来处理一下.我们会用到一下技术:. (1)正则表达式 (2)词频统计 (3)文本可视化 (4)ggplot2绘图 (5)中文分词 一.数据处理 首先我们要讲QQ聊天记录导出成txt文件 ...

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

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

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

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

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

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

  5. 协议分析之qq协议---qq登录

    QQ 协议分析:获取各类登录会话密钥 我们知道QQ的一些会话密钥是在登录过程中生成的,尤其是Session Key,有了它便可以解密出聊天文本内容.本文主要是了解一下QQ的加密机制,首先是用嗅探工具W ...

  6. JavaBean 基础概念、使用实例及代码分析

    JavaBean 基础概念.使用实例及代码分析 JavaBean的概念 JavaBean是一种可重复使用的.且跨平台的软件组件. JavaBean可分为两种:一种是有用户界面的(有UI的):另一种是没 ...

  7. Oracle dbms_lock.sleep()存储过程使用技巧-场景-分析-实例

    <Oracle dbms_lock.sleep()存储过程使用技巧>-场景-分析-实例 摘要:今天是2014年3月10日,北京,雾霾,下午组织相关部门开会.会议的结尾一名开发工程师找到了我 ...

  8. [软件逆向]实战Mac系统下的软件分析+Mac QQ和微信的防撤回

      0x00  一点废话 最近因为Mac软件收费的比较多,所以买了几款正版软件,但是有的软件卖的有点贵,买了感觉不值,不买吧,又觉得不方便,用别人的吧,又怕不安全.于是我就买了正版的Hopper Di ...

  9. ELK 日志分析实例

    ELK 日志分析实例一.ELK-web日志分析二.ELK-MySQL 慢查询日志分析三.ELK-SSH登陆日志分析四.ELK-vsftpd 日志分析 一.ELK-web日志分析 通过logstash ...

随机推荐

  1. jquery插件编写【转载】

    如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论下jq ...

  2. x86实模式到保护模式 李忠 王晓波

    x86实模式到保护模式  李忠 王晓波 第3到4章 各个进制间的转换省略 实验环境 编译器  nasm 虚拟机 virtual box 小程序  hexview   观察编译后的机器代码 fixvhd ...

  3. BNUOJ 6727 Bone Collector

    Bone Collector Time Limit: 1000ms Memory Limit: 32768KB   This problem will be judged on HDU. Origin ...

  4. 【JavaScript 4—基础知识点】:函数

    导读:函数这个东西,从VB开始就一直在用,不过那时候一般写不出来自己的函数或者类,觉得最高大上的,就是调用API函数了.现在,学习到了JavaScript,总结总结函数,显得很有必要.这篇文章,就从最 ...

  5. [UOJ#219][BZOJ4650][Noi2016]优秀的拆分

    [UOJ#219][BZOJ4650][Noi2016]优秀的拆分 试题描述 如果一个字符串可以被拆分为 AABBAABB 的形式,其中 A 和 B 是任意非空字符串,则我们称该字符串的这种拆分是优秀 ...

  6. KD-Tree 的笔记

    声明: 蒟蒻对于 KD-Tree 的一点理解,写在博客里面作为笔记. 1.KD-Tree 的定义 1)关于 K-D KD-Tree 中的 D 即为 Dimension ,意思也就是维度. 所以 KD- ...

  7. Java程序性能优化之缓冲优化

    优化前的代码: package com; import javax.swing.*; import java.awt.*; /** * 使用Eclipse,右键Run As,Java Applet运行 ...

  8. 解决centos7中ens33中不显示IP等问题

    在虚拟机中安装centos7,输入ifconfig显示command not found.在sbin目录中发现没有ifconfig文件,这是因为centos7已经不使用 ifconfig命令了,已经用 ...

  9. Laravel 修改操作

    增加路由: Route::any('Student/update/{id}',['uses'=>'StudentController@update']); 控制器代码:(Request $req ...

  10. android中自定义下拉框(转)

    android自带的下拉框好用不?我觉得有时候好用,有时候难有,项目规定这样的效果,自带的控件实现不了,那么只有我们自己来老老实实滴写一个新的了,其实最基本的下拉框就像一些资料填写时,点击的时候出现在 ...