前言:    因为最近接触到了词云图,所以就想做一个关于和女朋友聊天的词云图,但是现在很少使用QQ了,所以就不得不使用微信导出聊天记录。于是我坐在电脑面前查阅资料查了一天,但是在走到快导出微信聊天记录的时候,还是被卡住了。
    通过手机备份微信聊天记录到电脑,我拿到了下面几个文件

    我想通过SQLCipher打开EnMicroMsg这个数据库文件,但是需要输入密码,根据网上所述,需要找到IMEI和微信UIN,然后IMEI+UIN通过MD5加密取32位小写前七位就是数据库密码,可是我试了很久都打不开,于是我放弃了。还有其他方法我也获取不了密码,不知道怎么回事。于是我选择了复制粘贴的办法,一天一天的把聊天记录保存到txt文件中。如果有人知道怎么导出微信聊天记录,请告诉我一下呗,不胜感激,如果不知道怎么导出微信聊天记录,那么你也可以采用我这个笨办法保存聊天记录,但是作词语图的方法都一样~
下面操作是基于聊天记录保存到txt文本中的,数据格式如下:

首先我想的是把这个txt文件中的数据保存到csv中,因为这样还可以把聊天记录发给她,csv文件看起来也方便。
代码如下:

import csv
role=[]     #角色
dialogue=[]   #对话
time=[]  #时间
with open(r'C:\Users\23993\Desktop\微信聊天记录\聊天记录.txt',encoding='utf-8') as notes:sentence=notes.readlines()for lineID,line in enumerate(sentence):if lineID % 3 == 0:if '-' in line:time.append(line.strip())role.append('')if line.strip()=='啦什么啦:':    #将微信昵称改成你想要的昵称role.append('我')time.append('')if line.strip() in ['啦啦:','大宝贝:']:role.append('大宝贝')time.append('')if lineID % 3 == 1:dialogue.append(line.strip())with open("聊天记录.csv","w+",newline = '',encoding = "gb18030") as f:writer = csv.writer(f,dialect = 'excel')writer.writerow(["时间","角色","对话"])writer.writerows(zip(time,role,dialogue))

经过上述操作,已经将txt文件转换为了csv文件,我们这时可以看效果:

PS:如果你知道如何导出聊天记录,那肯定原本就是一个csv文件,也不会像我这么麻烦。我这个是个笨方法~

接下来就是如下步骤:
①查看数据,看看聊天记录主要内容,删除空值所在行

import pandas as pd
datas=pd.read_csv('聊天记录.csv',encoding = "gb18030")  #读取csv文件
datas.head()  #查看DataFrame头部数据
datas=datas.dropna(axis='index', how='any', subset=['角色','对话'])  #删除'角色''对话'列存在空值的行
print(datas)

②通过观察,我们发现消息中存在[干嘛]、[语音]等格式的数据,这是因为它们是表情包和语音,我们需要把它们剔除掉,以免对重要词造成影响。

#删除表情包,和语音,他们都在"[]"中
dropdata=datas[datas['对话'].str.contains(']')]   #找到含有‘]’所在的行
print(dropdata)
test1=list(dropdata['对话'])   #将dropdata的'对话'列表示为列表test1
test2=list(datas['对话'])   #将datas的'对话'列表示为列表test2
dialogue=list(set(test1)^set(test2))    #采用列表求差集的方法将数据中含有'[]'的元素除去
print(dialogue)
print(str(len(dialogue))+'个元素')   #查看列表dialogue中还有多少个元素

③操作后所有消息都在列表中,一条消息就是一个元素,接下来就利用jieba库进行分词。

import jieba
#利用jieba分词
words=[]
for sentence in dialogue:word=jieba.lcut(sentence)    #分词words += word
result=' '.join(words)
print(result)

④利用wordcloud库生成词云图

import matplotlib.colors as colors
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from PIL import Image
import numpy as np
#stop_words.txt是一个停用词文本,用于除去result中的停用词
stop_words = open("stop_words.txt",encoding="utf8").read().split("\n")
#图片
picture=np.array(Image.open('爱心.png'))
#红色 #FF0000   蓝色 #0000FF       牡丹红 #FF00FF     青色 #00FFFF   黄色 #FFFF00
#海蓝 #70DB93   橙色 #FF7F00      黑色 #000000       蓝紫色 #9F5F9F  黄铜色 #B5A642
#金色 #CD7F32   紫红色 #D8BFD8    紫罗兰色 #4F2F4F   粉红色 #BC8F8F   珊瑚红 #FF7F00
#深紫色 #871F78 巧克力色 #5C3317  橙色 #FF7F00      橙红色 #FF2400     浅蓝色 #C0D9D9
colormaps=colors.ListedColormap(['#ffadbb','#ffb6c1','#ffb3e6','#ffd9e6'])  #编辑文字颜色
#推荐颜色
#'#FF0000','#D8BFD8','#FF2400','#FF7F00'
#'#C7EDCC','#DCE2F1'
#'#ffadbb','#ffb6c1','#ffb3e6','#ffd9e6'#使用WordCloud生成词云
word_cloud = WordCloud(mask=picture, #设置图片background_color="white", # 词云图的背景颜色font_path="simsun.ttc",  # 设置词云字体colormap=colormaps,  # 指定字体颜色stopwords=stop_words) # 去掉的停词
word_cloud.generate(result)
#运用matplotlib展现结果
plt.subplots(figsize=(12,8))
plt.imshow(word_cloud)
plt.axis("off")
# 保存生成的词云图
word_cloud.to_file('聊天词云图.jpg')

最后查看效果:

用到的爱心图片:

最后呢,我想祝愿天下所有有情人终成眷属,纵使所爱隔山海,山海亦可平
感想:(此处可以略过~)
    其实通过词云图就可以看出我们现在聊天基本上都是在聊上班,甚至还有一个字特别明显—‘哭’,我们其实已经恋爱五年了,但异地估计都有四年,大学也是异地,期间经历了很多事情。
    在她刚读大一,我选择了复读,在她工作了,我还没毕业,所以现在我还在上学,她在上班。因为陪我,去年来我学校这边工作,所以就这一段时间我们才真正的不算异地,因为不确定因素,导致今年我们又异地了,她在她家那边上班。每天都感觉她很累,有时候她也会自己哭,然而我自己钱也不多,以前读大学异地的时候,我每个月还可以去找她两次,现在异地可能一个月只能去找她一次。真的感觉是我害了她一样,如果不遇见我,可能她会过的更好。但是我现在很舍不得她,当然以后肯定是准备和她结婚,所以我希望,在这个学期不要浑浑噩噩,复习备考公务员和学好如何做一个数据分析师两手抓,在马上到来的职场中能有所作为。
    我不知道为什么在这里留下了这么多文字,我也不希望陌生人看见了会觉得我怎么怎么样,我只希望如果以后的我看见这段话,会勾起那些回忆和承诺,不要辜负了她

做一个关于我和她微信聊天记录的爱心词云图相关推荐

  1. 做一个派发工单的微信小程序

    要制作一个派发工单的微信小程序,需要以下步骤: 了解微信小程序的开发环境和技术栈,比如微信小程序的前端语言.后端语言.数据存储方式等. 设计应用的功能需求,包括工单的创建.分配.执行和查询等. 根据功 ...

  2. 在Python中用WordCloud生成聊天记录热点词汇词云图

    刚开学第一天,因为老师没在实验室,所以就没去.之前有看到过别人展示过热点词汇的那种图片,闲着也是闲着,所以就捣鼓了一下午,为了整理一下学的东西,下面就以QQ聊天记录为例子,生成热点词汇.具体的效果如下 ...

  3. cocos creator做一个儿童数字答题的微信小游戏(1)

    接了个外包要做个数字答题的微信小游戏 给小学生玩的 准备大概15天完成吧,每天抽点一两个小时做一下 今天第一天先做主界面,先用cocos creator拼一个主界面出来 下面的每个按钮都是一个butt ...

  4. cocos creator做一个儿童数字答题的微信小游戏(2)

    今天写个设置scene出来

  5. Python玩转微信 个性签名生成词云图

    本博客代码参照http://www.cnblogs.com/jiaoyu121/p/6944398.html. 运行如下代码之前,将下图的wechat.jpg放入F盘下,需安装itchat.jieba ...

  6. python生成微信个性签名的词云图

    需要用到的库:itchat,jieba,numpy,wordcloud import itchat import re import jieba import matplotlib.pyplot as ...

  7. python解密微信聊天记录

    python解密微信聊天记录(适用于大部分安卓系统) 第一步 备份微信聊天记录 第二步 将备份同步至电脑 第三步 解压备份文件 第四步 获取当前手机的IME号 第五步 获取数据库存储位置以及密码 第六 ...

  8. 解密安卓微信聊天记录

    参考博客:傻瓜教程:使用小米系列手机提取微信聊天记录并制作词云图 分析微信聊天记录(1)--获取微信聊天记录 先获取数据文件 参考:通过小米手机获取文件​​​​​​ 其它的方法自行百度 然后我们得出来 ...

  9. 利用python做微信聊天记录词云分析——记录美好回忆

    目录 1 概述 2 数据准备 2.1 安卓设备 2.1.1 Root手机,安装Root Explorer 2.1.2 用Root Explorer将聊天记录的数据文件导出并存入电脑 2.1.3 对En ...

最新文章

  1. Python深度学习之搭建小型卷积神经网络(Kaggle网站Dogs-vs-Cats数据集)
  2. boost::pfr::detail::offset_based_getter相关的测试程序
  3. python3.72教程_python3教程_编程入门教程_牛客网
  4. SQL多列查询最大值
  5. 92款jQuery图片展示/幻灯插件开源软件
  6. js list操作_使用 Node.js 实现一个命令行 todo-list(1)- 基本功能
  7. Quest v31 Passthrough API无法透视的问题解决办法
  8. 百度云盘免下载百度云盘全速下载方法
  9. 值类型、引用类型 再次理解
  10. [APK拆解]谷歌眼镜XE16设置新语言,当你盯着屏幕时可同步检测
  11. 线性移位寄存器序列(m序列)之MATLAB实现
  12. asp.net中使用mschart控件
  13. 【实习日报】2019年4月下半月 前端开发实习工作日报汇总
  14. hibernatexml方式和注解方式实现单实体映射和继承关系映射,eclipse实现
  15. TCP/IP协议头部结构与解析
  16. 南京微盟最新推出:PD电源六级能效 外推芯片 ME8224AM6G ME8224BM6G SOT23-6
  17. PID控制器中的常见问题
  18. CTF--2016中国西安西电华山杯网络安全技能大赛之crackme6
  19. JAVA中pin什么意思_pin是什么意思用法
  20. 求函数依赖集F的最小覆盖

热门文章

  1. 让IE浏览器提示下载或直接打开word文档
  2. arm放弃服务器芯片,ARM溃败:Applied Micro拆分ARM架构服务器芯片业务
  3. Java基础篇3——流程控制
  4. 如何用php查不同,php-MySql调查不同查询
  5. python elif可以单独使用_Python的elif语句怎么用
  6. iatf16949内审员_申请IATF16949认证有什么要求
  7. android 百度map 一个layout加载多个mapview,android 百度地图API 使用Marker和InfoWindow
  8. 命名空间中不存在名称_原木定制中不开裂的木材真的存在吗?
  9. java摘要_java 摘要
  10. php 编译原理,编译原理