导出多年微信聊天记录,我用可视化分析了出自己的口头禅

为了能让读者对本文实现的效果有最直观的感受,本文中有四个实践案例,最后生成的图片如下:

准备工作:为了全面分析聊天记录,我们先要进行数据同步。将移动设备上的聊天记录都同步到MacBook上。在移动设备上点击「设置>通用>聊天记录迁移与备份>迁移」并根据实际情况选择「迁移全部聊天记录」或者「迁移指定聊天记录」。以笔者的52GB聊天记录为例,花了50分钟左右。

目前macOS平台有Intel和arm两种架构,两个构架使用的获取密钥的方法不同,请根据自己的MacBookCPU构架,选择对应的解密方式操作。

加密密钥在第二行,也就是353e开头的那行,但是这个十六进制的密钥,所以在实际使用的时候,需要在前面加上0x这两个字符,下一步使用这个密钥的时候会再具体说明。

安装lldb:lldb是Xcode内置的开发者工具,可以用来调试C/OC/C++/Swift程序的调试器。为了能够使用lldb,需要先安装一下开发者工具。在终端中执行lldb命令,弹出如下所示的提示框,那就是说明没有安装过lldb,根据指示进行安装即可。如果以前执行过xcode-select--install或者已经安装过Homebrew的话,电脑上应该已经有了这个工具。

正确安装lldb之后可以尝试输出版本号,如果能够正确输出版本号,就代表着安装成功了。如下图所示作者使用的lldb版本是:lldb-1403.0.17.67

输入命令brset-nsqlite3_key即可,lldb回显:Breakpoint1:2locations.,说明lldb已经成功在这两个地方打上了断点。

然后继续输入命令c回车即可,lldb回显:Process59241resuming,此处的c即为continue,执行完这条命令之后,程序就能正常继续向下执行,直到触发断点。

最后一步,输出内存里的密钥值。在日常生活中,大家可能听说过:「电脑上临时存储数据,经常会说把数据存在内存里,因为这样比较快等类似的话」。但是很少有人会直接跟内存去打交道。但是现在在lldb的帮助下,就可以直接读取到内存的值,此处要读取的就是数据库的密钥。

IntelCPU构架命令memoryread--size1--formatx--count32$rsi

armCPU架构命令memoryread--size1--formatx--count32$x1

对比上一个小节,使用ptrsx-dumper获取的密钥:353e9afab4b6422981d110d65e6d555557f1aca0afaa4431a5dab66fef384596,除了开头需要手动补全的0x之外完全一致。

在打开的Finder中,向外回退两层目录,所有的msg_数字.db里面存储的都是聊天记录。

#在桌面上创建WeChatDB目录mkdir~/Desktop/WeChatDB#切换到数据库文件所在的目录,不要直接复制此处的路径,直接从Finder拉到终端里cd/Users/james/Library/Containers/com.tencent.xinWeChat/Data/Library/Application\Support/com.tencent.xinWeChat/2.0b4.0.9/5a22781f14219edfffa333cb38aa92cf/Message#把所有的msg数据库文件拷贝到WeChatDB目录cpmsg*.db~/Desktop/WeChatDB#在WeChatDB目录里创建空文件夹,从db0到db9mkdir~/Desktop/WeChatDB/db{0..9}最终效果如下图所示,把所有的db数据库文件都拷贝到新建的WeChatDB目录下,并创建了从db0到db9十个空文件夹。

使用DBBrowserforSQLite任意打开一个数据库文件,此处有三个注意点:

密码类型:选择「原始密钥」

密码,第一种使用ptrsx-dumper获取到的密码前面没有0x字符,需要自己手动加上,第二种Python解析出来的密码可以直接使用,例如此处作者填写的密码就是:0x353e9afab4b6422981d110d65e6d555557f1aca0afaa4431a5dab66fef384596

加密设置:选择「SQLCipher3默认」

切换到「浏览数据」选项,通过选择不同表就可以查看和不同好友之间的聊天记录,如下所示就是一份聊天记录。其中模糊部分就是聊天信息的具体内容。

但是这样的浏览意义有限,可以将所有的聊天记录都导出JSON,以便接下来使用Python进行数据分析。前往「文件>导出」,点击「表到JSON…」

在弹出的表选择框中,按下command+A选择全部的数据表,也就是全部的聊天记录,继续点击「保存」。

如下图所示,就是全部数据库都导出之后的效果

接下来将会大量使用Python来实现绘制词云,绘制表格,生成Excel等功能,所以为了避免缺少各种库而导致报错,可以提前将环境都准备,使用如下命令安装所有依赖库:

pip3installwordcloudmatplotlibpandasjiebamplfontsimageioopenpyxlnumpy如果读者是使用conda来配置虚拟环境,也可以通过conda来创建虚拟环境来运行脚本:

使用完成之后如果退出删除环境,使用以下两条命令:

前置知识有了,就可以开始动手写代码了。制作词云图片,只需要提取出所有messageType等于1的记录,并把这些聊天记录进行分词之后,就可以制作词云了。

那么新的问题来了,如何快速找到那个好友/群聊对应的JSON文件?使用grep命令即可。找到想要生成词云的群聊,任意选择一句聊天记录,只要和别的群有一定区分度即可。例如图中的「每次放烟雾弹都有你」就是一句比较有区分度的话,其他群里不太可能有人发过类似的话。

打开终端,使用grep命令指定在WeChatDB目录下搜索这句话出现在哪个文件里即可,命令如下:

快速写一个Python脚本验证一下想法,但是可以看到,msgContent除了记录消息信息之外,还在第一行标记了是谁发的这条消息,这并不是期望的结果,所以需要对程序进行调整。

上图中,捂脸、偷笑、破涕为笑这几个都是表情,由于大家经常发这几个表情,所以占了比较大的面积。但是这样的词不具有生成词云的意义。所以可以引入wordcloud的stopwords停止词功能,将这些不太重要的词排除掉。

不少人会使用词云来生成和爱人的聊天记录图片,在这种场景下,可以在词云参数里配置一张爱心图片的遮罩,会更加符合使用场景需求。接下来就要开始设置爱心遮罩了。首先需要一个爱心的图片,网上的图片由于清晰度不够,生成的效果欠佳,所以可以自己绘制一个。将两个圆的半圆部分和正方形混合,再设置一下颜色,旋转315度即可得到一个高清自制的爱心图片。步骤截图如下:

更新后的代码如下所示:

自定义完了形状,为了让这张图片更加贴合主题,还可以再给它换一个背景颜色。单独摘出词云背景颜色的定义参数来看,只需要传入对应颜色名字即可修改背景颜色。除此之外还可以传入六位十六进制的RGB值,通过hexcode直接定义颜色,用这种方法可以定义任意一种颜色。

用#f0c9cf替换原来代码中的skyblue,就可以替换背景颜色了,效果图如下。

关键词出现频率分析完了,再对刚才忽略掉的表情进行专门统计。在上一小节的操作中,已经获取到了所有的表情定义,但是还不能直接拿来使用。重新放一下刚才上面这张配图,注意看它的表情是放在方括号里的。所以为了准确统计到每个表情数量,需要对原始表情文本重新加工一下。

此处依旧使用sed来处理一下表情数据,把它们变成带方括号的元素形式,方便接下来在Python中统计。

但是同时也发现了一些不足之处,有一部分表情从来都没发过,它们的计数是0,没有统计意义需要直接剔除掉。只需要一行代码即可实现:

接下来这部分pandas的代码都是ChatGPT实现的,如果读者有自己的个性化筛选或者排序需求,也可以试试让ChatGPT实现。对于pandas这种有固定语法且资料丰富的开源库来说,使用ChatGPT来生成对应代码的效率和准确性还是比较高的。

将数据复制到Numbers里,生成二维条形图,根据自己的喜欢修改一下颜色,添加必要的文字说明。此处为了做出的图表便于展示,只选择了前30条数据制作图表。

刚在上面的步骤中,为了演示添加指定单词统计的功能,将「哈哈」这个单词添加到了统计数据里。如下图所示,「哈哈」这个单词加起来的数量,已经比前三个表情的总和还多了,说明这个群聊气氛还是比较欢乐的。

再看到旺柴表情包,在表情的统计数量里也是一骑绝尘,断崖式地领先于其他各个表情包。特地算了一下,旺柴表情包在所有表情包里发送占比33%

如果想要更直观地体会一下如何从UnixTime转换到方便阅读的日期文本,可用使用命令brewinstallcoreutils安装GNU核心工具包,然后就可以使用gdate命令来转换UnixTime了。

经过上面的数据清洗、时刻分区和时刻排序之后,现在已经得到了「时刻-消息数量」关系字典,对于这样的x-y数据,使用matplotlib来生成二维柱状图是不错的选择。但是在此之前,还是和wordcloud一样的操作,需要配置一下中文字体,使得图片上能够正常显示中文。

此处配置中文字体的方式与wordcloud有所不同,matplotlib有专门用于管理字体的程序。在「环境配置」小节中已经安装过了,只要初始化一下就可以使用,命令如下:

#初始化mplfontsmplfontsinit如果稍后发现依旧无法正常显示中文,还有另一种解决方式,通过mplfonts导入本地的其他中文字体。例如在项目目录下有一个SIMSUN.ttf字体文件,使用如下命令也可以添加这个字体。

#导入本地字体mplfontsinstall--updateSIMSUN.ttf只需要以上简单的一条命令,即可完成中文字体的配置。maplotlib这一部分的代码比较简单,直接上代码来看:

直接上代码,读取文件,读取msgCreateTime的值,使用datetime库去解析UnixTime,这是上一个小节的内容,此处不再赘述。但是值得注意的是,此处作者将UnixTime解析成了%Y%W的格式。%Y是用四位数字表示的年份,%W是用两位数字表示的周数,例如当前的写稿日期2023年8月23日,是今年的第35周,那就标记为202335。

在week变量的后面加上了一个数字1,这是因为datetime库里第一周是用00表示,此处加一让它变为01更加符合大众的计数习惯。

下面就是一个数据结果的例子。拿202328这条数据来看,后面跟着[0,0,0,0,0,38,0]这样一个数组,代表周一发了7条消息,周二3条,周三周四0条,周五28条,周六0条,周末31条。

{202328:[7,3,0,0,28,0,31],202329:[20,0,0,16,0,0,0],202330:[0,0,78,10,7,0,0]}接下来就是代码实现,因为上面定义的statistics_dict里没有任何key,如何直接去set这个value会报错找不到这个key。所以要先判断一下当前循环的「年份周数」key是否存在,如何不存在就先进行初始化,然后再赋值。下面这段代码中从6到9行就是「年份周数」key的初始化。初始化完成之后,将对应天数的索引位置数值+1。在datetime库中使用%w来表示解析的日期是星期几,从0–6分别代表从周一到周末。

最后打印一下statistics_dict字典,可以看到已经正确收集到了所有的统计数据。

直接上代码,将元组里第0个元素追加到y_labels,第1个元素追加到values,可以看到最终的结果符合预期。

THE END
1.版式设计图片素材高清无水印下载版式设计矢量图片大全熊猫办公精心为用户挑选81张高清精美版式图片、支持专业级版式设计素材下载,更多风格的版式,免抠元素,卡通手绘素材图片、图标图案、免抠矢量图,尽在熊猫办公。https://www.tukuppt.com/speciall/banshi5262.html
2.素材分享建筑类展板设计优秀案例排版分享高清图集1 / 9 素材分享|建筑类展板设计优秀案例排版分享。建筑类展板设计需要注意内容呈现、视觉元素、布局及排版、细节处理以及互动性设计等细节 ? 0 谭晶演唱会嘉宾名单曝光,十个勤 一直以为老鼠偷油只是一个儿歌收藏 下载 评论8 分享到 微博 微信 分享 来源:其他 http://k.sina.com.cn/article_1936568054_p736daef6027025obw.html#p=1
3.效果图设计展板排版专题模板效果图设计展板排版图片素材下载我图网效果图设计展板排版专题为您整理了4818个原创高质量效果图设计展板排版图片素材供您在线下载,PSD/JPG/PNG格式效果图设计展板排版模板下载、高清效果图设计展板排版图片大全等,下载图片素材就上我图网。https://so.ooopic.com/search-d0a7b9fbcdbcc9e8bcc6d5b9b0e5c5c5b0e6-0-0_0_pres_0__80_ooo_0_1_.html
4.ppt怎么设计创意的格子排版效果图?powerpoint办公软件软件教程ppt怎么设计创意的格子排版效果图?ppt中的图片想要制作创意的效果,该怎么制作格子排版的效果呢?下面我们就来看看详细的教程,需要的朋友可以参考下 ppt想要制作格子创意图片该怎么制作呢?下面我们就来看看ppt图片处理攻略。 PowerPoint2017简体中文免费完整版 类型:办公软件 https://www.jb51.net/office/powerpoint/633019.html
5.新闻报纸排版设计效果图PSD样机01NewspaperPSDMockup01新闻报纸排版设计效果图PSD样机01 Newspaper PSD Mockup 01 新闻报纸排版设计展示样机,非常适合用于展示你的杂志报纸项目设计,易于使用的PSD文件,分辨率为3000*2000px。https://www.iamxk.com/716692.html
6.CAD操作技巧,会所地面大理石排版效果图建E网设计资讯CAD操作技巧,会所地面大理石排版效果图 【有石CAD下单排版软件】8000+石材企业都在用! 有石CAD CAD | 下单 | 排版 点击视频观 有石CAD下单排版软件 www.stonejia.com官网下载 体验更多功能 加客服微信安装软件 客服1:13328507991 客服2:19959844121https://www.justeasy.cn/news/22709.html
7.文案超多的海报设计该怎么排版?16个实用模板送给你!改稿效果图5 呐,看到这里,我干脆一鼓作气,给大家总结绘制了16种比较常见的文字超多海报该怎么排版的布局模版,大家收好啦!~ 还有很多布局样式我没有画出来,因为接下来我会告诉你该如何灵活变通,如果你学会了其中几种,基本剩下的都可以任意去设计了。 https://www.uisdc.com/16-e-commerce-design-template
8.设计方案高清效果图作品方案装修设计方案下载本栏提供:室内装修设计方案参考与下载,装修设计案例,实景案例,高清效果图方案,优秀作品集,名师资料集免费下载http://www.tzsucai.com/shejifangan.html
9.瓷砖设计软件瓷砖排版软件效果图瓷砖设计软件免费版三维家瓷砖设计软件平台,提供瓷砖排版软件、瓷砖3D效果图设计软件、瓷砖设计软件免费版下载,设计瓷砖效果图的软件、免费瓷砖排版软件、瓷砖设计软件哪家好选择三维家瓷砖排版软件。https://www.3vjia.com/Page/brickPaving.html
10.展板排版效果图图片展板排版效果图素材六图网为您提供3867张展板排版效果图设计作品免费下载服务,您还可以找到展板排版效果图图片、展板排版效果图素材、展板排版效果图模板等设计素材,我们为您提供展板排版效果图图片下载,展板排版效果图模板下载、展板排版效果图素材下载等服务!https://m.16pic.com/sucai/9282438.html?from=singlemessage
11.瓷砖排版软件大全瓷砖排版推荐下载【装修效果图】App内支持极速三维摆放,快速高清渲染,真实房型尺寸,一键渲染效果图和全景图,鸟瞰图,漫游图【全国百万户型库】开放全国百万户型库资源,搜索小区户型,立即装修设计【模拟现实】临摹户型图,快速生成三维模拟空间,通过海量素材库,可快速将居家、办公室还原在眼前,复原精装,便于更真实的搭配家具,软装等【量房https://wap.pp.cn/topic/520393/
12.排版设计软件排行榜前十名偏玩手游盒子分享十大排版设计软件排行榜前十名手机应用,编辑为您推荐手机排版设计软件排行榜第一名到前5名到前十名的应用。找排版设计软件有哪些、排版设计软件哪个好用,上偏玩手游盒子https://m.pianwan.com/s/zj-1048250
13.招聘网站网站设计制作思路创建动态网站前,需要绘制网站效果图,并对Fireworks进行优化,将其导出为网页,然后使用Dreamweaver进行网页布局和排版。 1、设计网站效果图 设计网站前,必须先绘制网站效果图。网页效果图是对网页风格、内容、基本布局等进行统一规划和定位。在Dreamweaver中仅进行网页排版,缺乏整体规划,就很难把漂亮的网页排版出来。 https://www.cdcxhl.com/news/225579.html
14.永川这15家企业招人,找工作的看过来!澎湃号·政务澎湃新闻负责家装、工装的设计工作; 任职要求: 1.室内设计、环艺、装饰或相关专业或以上学历优先; 2.熟练运用PS、CAD软件; 3.对工艺和材料有一定的了解; 4.有一定的审美能力; 加分项: 1.有一定的装修实习实操经验。 3DMAX效果图设计师 需求人数:60名 需求专业: https://www.thepaper.cn/newsDetail_forward_8515765
15.公司文化墙设计优点:含设计排版大爱版 时间:7-15天 材质:金属电镀仿古系列艺术布 内容:天马行空 优点:专业设计师一对一太空版 时间:不限制 材质:不限制 内容:来自外太空 优点:来自火星的设计公司文化墙图片大全,舍我选谁?公司文化墙设计方案 公司文化墙内容设计 公司文化墙效果图设计 公司文化墙设计图片 公司文化墙创意 公司文http://www.ledcw.com/gongsi/
16.A4竖版横版杂志画册手册封面排版设计贴图ps样机素材展示效果模板颜格视觉提供精品杂志/画册/书籍下载,当前预览的商品为A4竖版横版杂志画册手册封面排版设计贴图ps样机素材展示效果模板,源文件格式:jpg, psd,容量:1.7 GB ,分辨率:4500 x 3300 pxhttps://www.youngem.com/detail/6729
17.第7章第37节:七图排版:一张背景六张拼合布局[PowerPoint精美幻灯片本教程详细介绍了如何在PowerPoint中创建一个独特的七图排版设计。首先选择一张图片作为背景,调整其亮度。然后,将另外六张图片组合成两排三列的布局,并与文字区域并列。通过调整图片大小、位置以及组合操作,实现图片与文字的完美融合。最后,修改文字颜色以确保清晰可见,完成设计并保存文档。 https://blog.csdn.net/fzhlee/article/details/122296415
18.设计效果图一般几天出来一个设计效果图从开始到完成可能需要2周到1个月的时间。 基于一个中等复杂度的设计效果图 然而,这只是一个大致的时间估计,实际情况会因项目的要求、的工作效率和沟通的频率而有所不同。我可以基于一个中等复杂度的项目,为你介绍一下设计效果图的一般步骤以及时间估计。 https://www.to8to.com/yezhu/z185616.html
19.服装品牌公司系列效果图绘制15色彩,效果图排版付费10、系列效果图六(羽绒面料) 52:02 付费11、系列效果图七(网纱面料) 34:40 付费12、系列效果图八(针织面料) 22:42 付费13、系列效果图九(运动面料) 43:38 付费14、系列效果图十(印花面料) 43:43 第四章:系列设计作品排版 付费15、色彩,效果图排版 http://www.eeff.cn/lesson-8648.html
20.封面设计排版元小胖的封面设计、排版画板,该画板属于花瓣网平面相关类别的资源,其中共收集了63关于封面设计、排版相关的图片素材资源,共被0人关注。花瓣网, 设计师寻找灵感的天堂!https://m.huaban.com/boards/45364168/
21.排版设计原则及程序设计稿中,排版设计形式的选择范围应比小草图时明显收缩,但也未见得一两幅就能了事。应根据设计方案的需要画出几张效果图(可能是单色的,也可能的彩色的)进行比较,差异不一定要大。这个阶段要在编排格式上认真琢磨,仔细推敲,不断挖掘,以保证下一步正稿的质量。有电脑设备条件、采用计算机软件从事版式设计的人员,可以http://www.dmvi.cn/faq/Design/adbp/150.html
22.用网格排版!简单!高效!实用!用网格排版!简单!高效!实用! 网格是现代版式设计中最为重要的构成元素之一。在网格的作用下,版面中的构成元素可以更加协调地编排于版面之上,是从事平面设计必须掌握的基础知识。 网格设计将构成主义和秩序的概念引人到设计中,使设计元素,文字、图片以及点、线、面之间达到协调一致。https://www.bilibili.com/read/mobile?id=39555120