微信聊天记录导出
确认一下微信里聊天记录是否健在(bushi),如果方便,可以提前把其他人的聊天记录都删了,这样备份快,并且好找。
如果有一些其他人的重要信息不太能删的,那最好确保你想要导出的这个人的聊天记录是所有人当中最多的,这样方便我们之后在导出到电脑后快速定位。(什么?你说你跟你npy的聊天记录不是最多的?那你直接?️了。)
(实际上关于如何确定哪个记录属于谁这个问题,可以通过微信ID来定位,然而这个方法貌似只适用于没有修改过微信默认ID的情况,因此这里就先不介绍了)
首先,我们下载iTunes,将手机连上电脑后,进行备份。如果你手机内容很多的话,这个过程可能要很久……
备份成功后,我们在 编辑/偏好设置/设备/
中能够看到已经备份好的手机。
这之后我们下载“楼月免费iTunes备份管理器”,选择左侧微信聊天记录
,选择Documents
文件夹,点击上方导出,即可导出到我们电脑中的本地目录。
Documents
文件下内,会有一个由数字字母组成的乱码一样的文件夹,该文件夹便是我们聊天记录所在的位置。(如果有多个微信账号,会有多个乱码文件夹,这时候判断一下文件大小应该分辨出不同的微信账号)
这一步卡了我最久,后来我的解决方法是,下载SQLiteSpy软件。
用该软件打开刚才的Documents/一堆乱码的文件夹/DB/MM.sqlite
文件。然后,我们在软件左侧最下面找到一个名为sqlite_sequence
的表,点击seq进行从大到小的排列。就可以定位出哪个表代表了你想要的那个人。表名形如Chat_xxxxxxxxxx
确定了我们想要的与某人的聊天记录Chat_xxxxxxxxxx
,下一步工作就是提取并进行分析,为了方便,这里我使用 python 脚本将聊天记录提取成 excel 表格。
#该程序可以实现将聊天记录导出为excel
import sqlite
import pandas as pd
with sqlite.connect(r聊天记录目录/DB/MM.sqlite) as con:
df = pd.read_sql_query("select * from Chat_xxx", con) #xxx即为刚才找到的制定好友代号
#保存至excel,这里直接用的相对路径
writer = pd.ExcelWriter(wechat.xlsx)
df.to_excel(writer, Sheet)
writer.save()
至此,导出聊天记录部分便大功告成,之后的分析就各显神通了。
你可以选择继续往下看我的聊天记录分析部分,这里我选择的是matlab。当然,直接用excel基本也能实现想要的功能了。
excel 列表中的时间为 unix时间戳(定义为距离年月日的时间),因此我们首先要做的是将这个格式的时间转换为北京时间。
实际上,MATLAB 中有一个datenum
函数,可以计算两者之间的时间差,因此从定义出发,我们可以将unix时间戳转换成北京时间:
date = datestr(unix_time// + datenum(,,))
新版的matlab中,可以直接运用datetime
函数:
dt = datetime( unix_time, ConvertFrom, posixtime )`
有了时间之后,剩下的事情其实都好做了。我们可以算一下总条数,总字数之类的统计值,还可以画出这些值随时间变化的时序图。不过在确定字数的时候,我们会遇到一个问题,就是如何判断聊天记录的类型,因为聊天记录分为纯文字、图片、语音、视频、链接等不同类型。然而在我们导出的数据里面,这些内容都是以字符串的形式出现的。在跟手机上的消息对比后,我总结出如下:
% contains函数里msg之类的符号便代表不同的类型
if contains(message(i),<msg><emoji)
amount_sticker = amount_sticker + ;
elseif contains(message(i),<?xml) || contains(message(i),<msg><img)
amount_figure = amount_figure + ;
elseif contains(message(i),<msg><voice)
amount_voice = amount_voice + ;
elseif contains(message(i),<msg><video)
amount_video = amount_video + ;
elseif contains(message(i),<msg><appmsg)
amount_other = amount_other + ;
else
amount_text = amount_text + ;