对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="">

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

相关部分代码:

  1. def userProcess():
  2. userArray = []
  3. contentArray = LoadUserInfo.loadUser()
  4. for userInfo in contentArray:
  5. if(len(userInfo)==3):
  6. userArray.append(userInfo[2])
  7.  
  8. print(len(userArray))
  9. #Counter(words).most_common(10)
  10. userGroupInof = Counter(userArray).most_common(15)
  11. #print(userGroupInof)
  12.  
  13. userNameLable = []
  14. postMessageNum = []
  15.  
  16. for key,value in userGroupInof:
  17. userNameLable.append(key)
  18. postMessageNum.append(value)
  19.  
  20. #performance = 3 + 10 * np.random.rand(len(people))
  21. #error = np.random.rand(len(people))
  22.  
  23. zh_font = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
  24.  
  25. plt.barh(np.arange(len(userNameLable)), postMessageNum, align='center', alpha=0.4)
  26. plt.yticks(np.arange(len(userNameLable)), userNameLable,fontproperties=zh_font)
  27. plt.xlabel('发贴数量',fontproperties=zh_font)
  28. plt.title('java-Endless Space群(4881914)发贴最多的15个人',fontproperties=zh_font)
  29.  
  30. plt.show()
  1. def hourProcess():
  2. hourArray = []
  3. contentArray = LoadUserInfo.loadUser()
  4. for userInfo in contentArray:
  5. if(len(userInfo)==3):
  6. messageDate = userInfo[1]
  7. hourInfo = re.split('[:]',messageDate)
  8. hourArray.append(hourInfo[0])
  9.  
  10. print(len(hourArray))
  11. #Counter(words).most_common(10)
  12. hour_counts = Counter(hourArray)
  13. #对数据进行排序
  14. sortByHour = sorted(hour_counts.items())
  15. print(sortByHour)
  16.  
  17. postMessageLable = []
  18. postMessageNum = []
  19.  
  20. for key,value in sortByHour:
  21. postMessageLable.append(key)
  22. postMessageNum.append(value)
  23.  
  24. print(postMessageLable)
  25. print(postMessageNum)
  26.  
  27. #生成发贴柱状图
  28. N = len(postMessageNum)
  29.  
  30. ind = np.arange(N)+0.5 # the x locations for the groups
  31. #print(ind) #x轴上的数值
  32. width = 0.35 # the width of the bars
  33.  
  34. fig, ax = plt.subplots()
  35. rects = ax.bar(ind, postMessageNum, width, color='r')
  36.  
  37. # add some text for labels, title and axes ticks
  38. ax.set_ylabel('message number')
  39. ax.set_title('QQ message number of hour,total message ( '+ str(len(hourArray)) + ")")
  40. ax.set_xticks(ind+width)
  41. ax.set_xticklabels(postMessageLable)
  42.  
  43. def autolabel(rects):
  44. # attach some text labels
  45. for rect in rects:
  46. height = rect.get_height()
  47. ax.text(rect.get_x()+rect.get_width()/2., height, '%d'%int(height), ha='center', va='bottom')
  48.  
  49. autolabel(rects)
  50.  
  51. plt.show()

  1. #对导入的文件第四列做中文分词处理
  2. #对用户发出的消息进行处理
  3.  
  4. def messageProcess():
  5. wordArray = []
  6. contentArray = LoadMessageInfo.loadMessage()
  7. print("processing original data ........")
  8. for messageInfo in contentArray:
  9. #print(messageInfo[3])
  10. word_list = jieba.cut(messageInfo, cut_all=False)
  11. for word in word_list:
  12. #过滤掉短词,仅仅有一个长度的词
  13. if(len(word)>1):
  14. wordArray.append(word)
  15.  
  16. #print(wordArray)
  17. print("remove stop word data ........")
  18. jsonResource = open('./data/stopword.json','r',encoding='utf8')
  19. stopwords = json.load(jsonResource)
  20. #print(stopwords)
  21. for word in wordArray:
  22. print(word)
  23. if (word in stopwords):
  24. wordArray.remove(word)
  25.  
  26. #print(wordArray)
  27. print("text is processing.......")
  28. word_counts = Counter(wordArray)
  29. print(word_counts)
  30. 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. Python paramiko模块 + 堡垒机

    paremiko SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: import paramiko    # 创建SSH对象 ssh = paramiko.SSHClient ...

  2. vmware的vmdk格式虚拟机转换为qcow2格式

      今天应其他部门的需求,把一个笔记本里的vmware的window2008的虚拟机转换为qcow2格式,在公司服务器上运行. 第一次做,用了许多时间 首先: 虚拟机的镜像分为多个vmdk文件,所以我 ...

  3. .NET重构(四):窗体继承+模板方法,完美实现组合查询

    导读:在机房重构中,有好些个查询都是大同小异,最为显著的就是组合查询了.怎样给自己省事儿,相同的东西能不能重复利用,就成了一个现实的问题.第一遍做机房的时候,使用的更多的是:复制+粘贴.学习了设计模式 ...

  4. 浏览器BOM模型

    百度百科:浏览器对象模型(BrowserObjectModel) 主要功能 1. 弹出新浏览器窗口的能力: 2. 移动.关闭和更改浏览器窗口大小的能力: 3. 可提供WEB浏览器详细信息的导航对象: ...

  5. MySQL5.7 MTS work线程stack

    复制现象是,slave线程状态正常,但是sql 线程不应用,所以delay越来越大,查看复制状态 mysql> show slave status\G********************** ...

  6. tomcat的安装和优化

    tomcat的安装 jdk版本安装 #!/bin/bash # desc: jdk安装脚本1. 1.7 1.8 download_url='http://**************' jdk_env ...

  7. 【Luogu】P3708Koishi的数字游戏(数论)

    题目链接 考虑f(i)=i%1+i%2+i%3+.....+i%n f(i+1)=(i+1)%1+(i+1)%2+......+(i+1)%n 其中不是i+1的因数的部分在f(i+1)的地方都加了1. ...

  8. 【Luogu】P1410子序列(DP)

    题目链接 我DP是真的菜啊啊啊啊啊! f[i][j]表示考虑前i个数,有i-j+1个数组成一个上升子序列,且不以i结尾的尾端最小值. 设a为j个数组成的序列,且以i结尾:b为i-j+1个数组成的序列, ...

  9. 常州模拟赛d4t2 陶陶摘苹果

    题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 n 个苹果.苹果成熟的时候,陶陶就会 跑去摘苹果. 陶陶的手不能弯 (他仅能把手伸直),当且仅当陶陶达到的高度与苹果的高度相等的时候,陶陶 ...

  10. LightOJ1106 Gone Fishing

    Gone Fishing John is going on a fishing trip. He has h hours available, and there are n lakes in the ...