名字学 > 微信名字 > 微信(QQ)聊天记录数据挖掘以及应用设想

微信(QQ)聊天记录数据挖掘以及应用设想

投稿人:名字学起名网2021-04-26 11:04:00

受朋友启发,现对聊天记录进行高频词挖掘,生成无向图,应该能找到有意思的内容。

环境介绍

软件环境: Pycharm 2019.1.3+Python3.6+Pandas0.25+jieba0.39+networkx2.5.1+wordcloud1.5.0+matplotlib3.1.1+Navicat11.1.14+楼月免费iTunes备份管理器

硬件环境: Win10 专业版64位+Intel(R)Core(TM)i5-6500 CPU @3.20GHz+20.0GB

数据获取

1.ios端

ios端数据获取比较麻烦,必须用到iTunes或者其他类似爱思这样的第三方软件对移动设备进行数据备份。

可参考: 如何用iTunes备份iPhone

下一步借助楼月iTunes备份管理器工具,将备份文件解密还原。

下载网站和指南在这里: 楼月免费iTunes备份管理器,不多赘述。

到这一步就可以得到包含以下文件夹的Documents文件夹了,其中这三个以md5值为名的文件夹包含的就是该设备登陆过的三个微信号数据。

微信群聊昵称颜色

微信群聊昵称颜色

下一步,还需要将用户数据解密为可解释的聊天记录数据。这里可以使用各种已经商用的工具(雨辰、楼月、迅捷等,但都需收费)

不想交费的话,仔细研究下这个Documents文件夹下的文件,可以发现在这个路径下有大量的sqlite文件。

微信群聊昵称颜色

微信群聊昵称颜色

这里直接用Navicat对这些sqlite文件创建连接。

微信群聊昵称颜色

微信群聊昵称颜色

微信群聊昵称颜色

微信群聊昵称颜色

就能找到大量的聊天记录表了,可是聊天对象的id又经过了md5加密。在这里,可以借助Navicat的搜索功能找出聊天对象,直接搜索最近聊天的内容,就可以找出对方的表名,然后找到这张表导出为xlsx或csv即可。

微信群聊昵称颜色

微信群聊昵称颜色

微信群聊昵称颜色

微信群聊昵称颜色

导出文件就是聊天记录数据表了。

2.安卓端

root后直接将这个文件导入Navicat: /data/data/com.tencent.mm/MicroMsg/(长字符串)/EnMicroMsg.db

之后查找指定对象聊天记录方式和ios端一致。

3.TIM/QQ(PC端)聊天记录获取与转换

参考该文: QQ/TIM聊天记录如何导出来和导进去,可获得txt格式的聊天记录,内容格式如下。

微信群聊昵称颜色

微信群聊昵称颜色

故还需要转换成上文xlsx格式文件,方便后续操作一致。

格式转换核心代码: 

    f = io.open(filepath, "r", encoding='utf-8')
    id = 1
    for line in f.readlines():
        line = line.strip() # 去除首尾无意义符号
        if not len(line):
            continue # 空行则跳过
        if line.startswith("[图片]"):# 去除无意义聊天
            continue
        if line.startswith("您好,我现"):# 去除无意义聊天
            continue
        if line.endswith("***"):# ***为本人QQ昵称,现隐去
            status = 0
            continue
        if line.endswith("***"):# ***为聊天对象昵称,隐去
            status = 1
            continue
        # time不用到的话,直接0填充,只是为了保持格式一致性
        xls = xls.append({'time': 0, 'status': status, 'none': 0, 'id': id, 'content': line}, ignore_index=True)
        id += 1
    f.close

高频词网图

数据获取到后,就该使用jieba分词,networkx画图了。

分词以及计算词频核心代码: 

words = pseg.cut(txt)
    for word, flag in words:
        if flag in ("n", "nr", "ns", "nt", "nw", "nz"):#只要名词
            seg_list.append(word)
    c = Counter() # 计数器
    for x in seg_list:
        if len(x)>1 and x not in ("\r\n"):
            c[x] += 1 #计数器加一
    return c.most_common(300)

高频词生成网状图核心代码: 

    G.add_node("我")# 创建点
    node_list.append("我")
    node_color_list.append('#ede85a') #设置颜色
    i = 0
    for j in lista[:60]:# 取前60个高频词
        if i < 15:
            node_color_list.append('#095dbe')# 不同颜色表频度
        elif i < 30:
            node_color_list.append('#5a9eed')# 不同颜色表频度
        elif i < 45:
            node_color_list.append('#7face1')# 不同颜色表频度
        else:
            node_color_list.append('#e1e8ef')# 不同颜色表频度
        G.add_node(j[0])
        node_list.append(j[0])
        G.add_edge("我", j[0])# 连接两点的边
        i += 1

最后,可得到这样的图。颜色深浅表词频度,中间多边连接点为双方共同高频词。

微信群聊昵称颜色

这张图看共同高频词,感觉很文青呢。

微信群聊昵称颜色

可以看到,结婚后的好友B聊天还是更多涉及到家庭成员,哈哈哈。

微信群聊昵称颜色

这张图就满满的科研和就业压力了。

说到科研压力微信群聊昵称颜色,就不得不看看和导师的聊天记录高频词是些什么了。

微信群聊昵称颜色

任务下达和反馈,想必我的最高频词应该是“恩恩”,哈哈哈。

词云图

个人聊天记录可以用网图直观表现,那群聊记录呢?

词云图应该是个很好的载体来体现群热点话题。

词云图生成核心代码: 

cloud = WordCloud(
        #设置字体,不指定就会出现乱码,文件名不支持中文
        font_path = "simhei.ttf",
        #设置背景色,默认为黑,可根据需要自定义为颜色
        background_color='white',
        #允许最大词汇
        max_words=300,
        #最大号字体,如果不指定则为图像高度
        max_font_size=80,
        #画布宽度和高度,如果设置了msak则不会生效
        width=600,
        height = 400,
        margin = 2,
        #词语水平摆放的频率,默认为0.9.即竖直摆放的频率为0.1
        prefer_horizontal = 0.8
    ).generate_from_frequencies(c)# 计算词频后的字典直接输入
    plt.imshow(cloud)
    plt.axis("off")
    plt.show()

直接上图。

微信群聊昵称颜色

微信群聊昵称颜色

很显然,这是聊电影的群。

微信群聊昵称颜色

微信群聊昵称颜色

这是数据分析学习群。

微信群聊昵称颜色

微信群聊昵称颜色

球迷群。

应用场景

功利性的技术学习微信群聊昵称颜色,必不可少的一环就是阐述应用场景。因为这个问题我最后才来思考,所以按照我的思路顺序,也就放在了文章的最后部分。

那么词云图和network图能应用到那些领域呢?

1.根据好友A的提示,可以用于社交共同热点话题发现与推荐。

2.我自己的想法呢,就是可以用于重点政策报告的分析,挖掘未来热点。

比如对十四五规划报告内容高频词绘制词云图,为行业提前布局。

微信群聊昵称颜色

微信群聊昵称颜色

对国家基金项目立项名单绘制词云图,为项目申报方向提供参考。

微信群聊昵称颜色

微信群聊昵称颜色

对各教育部门教育改革文件绘制网状图,发现未来教育发展走向。

微信群聊昵称颜色

附件资源

本文代码、字体和原图可在这里找到: 

ljyw17/Wechat_chatRecord_dataMing​github.com

图标

(代码未写详细注释,而且未封装成函数,需要一定基础先理解再实现)

分享:

扫一扫在手机浏览本文