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

前言:    因为最近接触到了词云图,所以就想做一个关于和女朋友聊天的词云图,但是现在很少使用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')

最后查看效果:
在这里插入图片描述
用到的爱心图片:
在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【youcans 的 OpenCV 例程200篇】123. 形态算法之孔洞填充

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 【youcans 的 OpenCV 例程 200 篇】123. 形态算法之孔洞填充 3. 形态学算法 形态学处理的主要应用是提取图像中用来表示和描述形状…

弹框提示

jquery弹框提示框的实现。 原理分析 1.点击按钮出现弹框 2.设置弹框标题和内容 3.设置取消和确定两个按钮 4.点击确定继续执行 5.点击取消返回此页面 效果演示 原始样式 点击之后 点击确认按钮 代码演示 在开始我们的程序之前注意&#xff1a; 引入Jquery.js架包 <…

el-tooltip位置不灵活_美团研究院:超五成生活服务业商户有灵活用工需求

更多精彩&#xff0c;请点击上方蓝字关注我们&#xff01;美团研究院于 9 月 15 日发布《生活服务业新就业形态和灵活就业的发展特征和发展趋势》报告&#xff0c;报告指出我国目前灵活用工岗位类型众多&#xff0c;是从业者的重要收入来源&#xff0c;从业者通过灵活就业拓宽了…

【youcans 的 OpenCV 例程200篇】124. 孔洞填充的泛洪算法

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程 200 篇】124. 孔洞填充的泛洪算法 3. 形态学算法 形态学处理的主要应用是提取图像中用来表示和描述形状…

域名可以转让注册人吗_网店可以转让吗?

随着经济市场的快速发展&#xff0c;市场决定需求&#xff0c;所以有很多人紧跟时代&#xff0c;选择了天猫店铺。有一些人想可以不可以购买网店&#xff0c;网店可以转让吗&#xff0c;可以直接经营吗&#xff1f;还有一些人在一同经营之后&#xff0c;或许是业绩不佳或许是有…

java - 菱形输出

程序首先会让你输入一个奇数&#xff0c;即将要生成菱形的总行数&#xff0c;当你输入奇数后按Enter按键就会在控制台看到此菱形了。 效果演示&#xff1a; 代码展示 package com.zsh;import java.util.Scanner;public class lingxing {public static Scanner input new Sc…

MySQL的DDL(数据定义语言)

笔记本 SQL语言一共分为4大类&#xff1a; DQL&#xff08;数据查询语言&#xff09;、 DDL&#xff08;数据定义语言&#xff09;、 DML&#xff08;数据操纵语言&#xff09;、 DCL &#xff08;数据控制语言&#xff09; 本文就介绍的是其中的DDL&#xff08;Data D…

【youcans 的 OpenCV 例程200篇】125. 形态算法之提取连通分量

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程 200 篇】125. 形态算法之提取连通分量 3. 形态学算法 形态学处理的主要应用是提取图像中用来表示和描述…

2评分标准多少分_高新企业认定评分标准,需要多少分才能拿到高新认证证书...

在高新技术企业认定工作中&#xff0c;企业要想成功拿到高新认证证书&#xff0c;那么就必须要符合高新企业认定评分标准&#xff0c;只有达到异地拿到评分数之后&#xff0c;企业才有可能拿到高新认证证书。根据相关文件的规定&#xff0c;我们在申请高新企业认定过程中&#…

java - 猴子吃桃

著名的猴子吃桃问题&#xff0c;计算摘桃子的个数。 猴子吃桃问题&#xff1a;猴子第一天摘下若干个桃子&#xff0c;当即吃了一半&#xff0c;还不瘾&#xff0c;又多吃了一个 第二天早上又将剩下 的桃子吃掉一半&#xff0c;又多吃了一个。以后每天早上都吃了前一天剩下 的一…

【youcans 的 OpenCV 例程200篇】126. 形态算法之凸壳(Convex hull)

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程 200 篇】126. 形态算法之凸壳 3. 形态学算法 形态学处理的主要应用是提取图像中用来表示和描述形状的元…

java - 人员分配组合

在进行体育赛事比赛的时候往往会因为对比赛队员的组合排序而烦恼&#xff0c; 下面程序能够帮助进行队列组合的分配。 有两个乒乓球队进行比赛&#xff0c;各出三人。甲队为 a,b,c 三人&#xff0c;乙队为 x,y,z 三人。已抽签决定比赛名单。 有人向队员打听比赛的名单。a 说他…

【youcans 的 OpenCV 例程200篇】127. 形态算法之细化

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程 200 篇】127. 形态算法之细化 3. 形态学算法 形态学处理的主要应用是提取图像中用来表示和描述形状的元…

【youcans 的 OpenCV 例程200篇】128. 形态算法之骨架 (skimage)

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程200篇】128. 形态算法之骨架 (skimage) 3. 形态学算法 形态学处理的主要应用是提取图像中用来表示和描述…

java -从小到大排序

用java程序对几个数字进行排序并按照从小到大输出。 结果演示 代码展示 package com.zsh;import java.util.Arrays; import java.util.Scanner;public class paixu {public static Scanner input new Scanner(System.in);public static void main(String[] args) {long sta…

车联网大数据框架_大数据基础:ORM框架入门简介

作为大数据开发技术者&#xff0c;需要掌握扎实的Java基础&#xff0c;这是不争的事实&#xff0c;所以对于Java开发当中需要掌握的重要框架技术&#xff0c;也需要有相应程度的掌握&#xff0c;比如说ORM框架。今天的大数据基础分享&#xff0c;我们就来具体讲一讲ORM框架入门…

【youcans 的 OpenCV 例程200篇】129. 形态算法之骨架 (重建开运算)

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程200篇】129. 形态算法之骨架 (重建开运算) 3. 形态学算法 形态学处理的主要应用是提取图像中用来表示和…

java - 根据条件求对应数字

根据相应的条件求对应的数字是多少&#xff0c;如 &#xff1a; 一个整数&#xff0c;它加上 100 后是一个完全平方数&#xff0c;再加上 168 又是一个完全平方数&#xff0c;请问该数是多少 结果展示 代码展示 package com.zsh;public class pinfs {public static void mai…

linux下将多个文件去除文件头合并_命令行生存指南:拆分与合并 | Linux 中国

这一节将会介绍 Linux 命令行下的文件拆分与合并操作。作者&#xff1a;Psiace&#xff08;本文字数&#xff1a;2706&#xff0c;阅读时长大约&#xff1a;3 分钟&#xff09;作为一个工程师&#xff0c;我们经常与命令行打交道&#xff0c;但除了工作用的命令&#xff0c;你是…

【youcans 的 OpenCV 例程200篇】130. 形态学之提取水平和垂直线

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程200篇】130. 形态学之提取水平和垂直线 3. 形态学算法 形态学处理的主要应用是提取图像中用来表示和描述…