博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QQ 聊天记录简单数据分析
阅读量:6420 次
发布时间:2019-06-23

本文共 2358 字,大约阅读时间需要 7 分钟。

手机里的聊天记录一直没删,有的群的消息已经几万条了,所以做一下简单的数据分析。

提取数据

Android 的 QQ 聊天记录比较容易导出,这里说一下 iOS 未越狱的,将 iOS 用 iTunes 备份,进入备份文件夹,按照文件大小进行排序,最大的几个文件夹,一个是 QQ 聊天记录,一个是微信聊天记录,聊天记录是 SQLite 格式的,这里我使用 SQLiteStudio 打开。 打开后是这个样子。

直接选择对应的好友或者群的 QQ 号打开就可以看到聊天记录。分别对应发送时间,发送人,发送的消息等等。用 SQL 语句将要的某一列或者几列数据导出 CSV 便于分析: select msgtime from tb_TroopMsg_xxxxxxx where senduin=xxxxxxxx

开始分析

主要用 pandas 和 matplotlib。

import pandas as pdimport matplotlib.pyplot as pltimport matplotlibimport time%matplotlib inline# 解决matplotlib显示中文问题plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题plt.style.use(u'ggplot')复制代码

然后导入数据,这里导入的是昵称列,用于分析群里谁的话最多

df=pd.read_csv(r'names.csv',encoding='gb18030')s=df.iloc[:,0]v=s.value_counts() #选出该列做频数统计fig, ax = plt.subplots()plt.rcParams['figure.figsize'] = (6, 15)v[0:50][::-1].plot(kind='barh') #发言数排在前五十的plt.xticks(fontsize=15)plt.yticks(fontsize=15)ax.tick_params(labelbottom='on',labeltop='on')#plt.savefig('phone.png',bbox_inches='tight')复制代码

结果如图:

然后做个词云。 先准备好字符串。

df=pd.read_csv(r'chat.csv',encoding='gb18030')chats=list(df['h'].values) #取出聊天消息列chattext=' '.join(map(str,chats))import res,c =re.subn(r'<(.*?)>','',chattext) ss,c =re.subn(r'{(.*?)}','',s)  #去除聊天对话中的链接和图片复制代码

制作词云。

import jiebaimport wordcloudfrom wordcloud import WordCloudimport jieba.analyseimport PILfrom wordcloud import ImageColorGenerator# 有两种统计词频的方式freq = jieba.analyse.extract_tags(ss,topK=100,withWeight=True)freq2 = jieba.analyse.textrank(ss,topK=100,withWeight=True)freq_dict={}for i in freq:    freq_dict[i[0]] = i[1]freq_dict2={}for i in freq2:    freq_dict2[i[0]] = i[1]        import numpy as npalice_mask = np.array(PIL.Image.open(r'h.png'))wc = WordCloud(background_color = "white", #设置背景颜色                 width=600, height=600,               max_words = 300, #设置最大显示的字数                 #stopwords = "", #设置停用词  #                font_path = "simhei.ttf",               mask=alice_mask, #设置背景图片                font_path = "FZKaTong-M19S.TTF",        #设置中文字体,使得词云可以显示(词云默认字体是“DroidSansMono.ttf字体库”,不支持中文)                 max_font_size = 60,  #设置字体最大值                 random_state = 30, #设置有多少种随机生成状态,即有多少种配色方案      )      plt.rcParams['figure.figsize'] = (100, 100)wc.generate_from_frequencies(freq_dict2)plt.imshow(wc)plt.axis("off")# plt.savefig('ciyun2.png')plt.show()复制代码

结果如图

结束,此外还可以统计每天的发言数,情感分析等等。

转载地址:http://zamra.baihongyu.com/

你可能感兴趣的文章
作为一个开源软件的作者是一种什么样的感受?
查看>>
移动端适配知识你到底知多少
查看>>
TiDB 在 G7 的实践和未来
查看>>
重新认识javascript对象(三)——原型及原型链
查看>>
小学生学“数学”
查看>>
【Vue】组件使用之参数校验
查看>>
FastDFS蛋疼的集群和负载均衡(十七)之解决LVS+Keepalived遇到的问题
查看>>
深入剖析Redis系列(二) - Redis哨兵模式与高可用集群
查看>>
Android 用于校验集合参数的小封装
查看>>
iOS混合开发库(GICXMLLayout)七、JavaScript篇
查看>>
instrument 调试 无法指出问题代码 解决
查看>>
理解缓存
查看>>
im也去中心化?Startalk(星语)的去中心化设计之路
查看>>
BAT 经典算法笔试题 —— 磁盘多路归并排序
查看>>
一次完整的HTTP请求
查看>>
Nginx限制带宽
查看>>
All Web Application Attack Techniques
查看>>
归档日志ORA-19809: 超出了恢复文件数的限制
查看>>
精品德国软件 UltraShredder 文件粉碎机
查看>>
PANDAS 数据合并与重塑(join/merge篇)
查看>>