微信好友加到一定数量之后,通讯录其实就不再是单纯的通讯录了。两千个好友的性别比例、地区分布、昵称风格、签名文案,本质上都是一份可以拿来练手的数据集。我这两年陆陆续续做过几轮“微信好友数据分析”,从最早用表格手工整理,到后来写 Python 脚本做清洗、可视化和词云,踩了不少坑,也沉淀了一套比较稳定的流程。这篇博客就用一个完整的个人实战项目,把数据怎么来、怎么洗、怎么分析、怎么做图、怎么避坑都讲清楚。适合刚开始接触数据分析的 Python 学习者,也适合那些手里有一堆微信好友但不知道能玩出什么花样的同学。
先说清楚边界:这篇文章只讨论合规的个人数据分析,所有数据来自你自己能合法接触的通讯录、自己维护的表格或者自己的企业微信客户数据。不碰任何非官方外挂、不搞抓包、不推荐任何灰色工具,所有代码和思路都能在普通电脑上直接跑。
1. 先想清楚:这个项目到底能分析什么
1.1 好友数据的几个常见维度
很多人一听到“微信好友数据分析”,第一反应是“好友列表能有什么好分析的”。实际上可玩的东西远比想象中多。我从实际项目里总结出了四个比较有价值的维度。
第一是基础画像类,包括性别、地区、微信号长度、昵称长度、备注名长度等。这类数据最直观,也是最容易出图的部分。性别比例能看出你的社交圈结构,省份和城市能看出你的人际关系地理分布。比如我自己的通讯录里,广东和北京两个省份占了近三分之一,和我的求学、工作经历完全对得上,这种数据和现实生活的映射本身就很有意思。
第二是文本类,主要是个性签名和昵称。签名是用户主动暴露出来的“人设”,有人写“努力搬砖”,有人写“岁月静好”,把两三百个签名汇总起来做分词和词云,能很直观地看到你的好友群体整体情绪和生活状态。昵称则可以统计常见前缀、长度分布,比如“A-”开头的微商昵称、“.”号结尾的中年商务风,都带有很强的群体标签属性。
第三是视觉类,主要是头像。头像可以下载下来做拼图矩阵,也可以按颜色、类型粗略分类。虽然程序很难自动判断头像里是人是猫,但单纯把所有头像拼成一张大图,视觉冲击力就足够强了。
第四是互动类,前提是你导出了聊天记录。聊天记录里的时间戳可以统计出你和好友的聊天活跃时段、高频联系人排行、每月聊天条数变化趋势。这类数据比单纯的通讯录静态信息更“重”,分析价值也更高,但获取门槛也更高,我放在后面扩展方向里讲。
1.2 数据从哪来:合规获取这件事必须放在第一位
我见过不少人在这一步直接跑偏。网上确实有一些工具能一键导出好友列表和聊天记录,但你得想清楚:这类工具要么用了非官方接口,要么需要注入破解后的库,轻则功能失效,重则账号被限制,更不用说隐私风险。所以我的建议非常明确:能用官方渠道就用官方渠道,能自己动手整理就自己动手整理。
目前比较靠谱的合规路径有三条。
第一条是微信官方自带的“个人信息与账单”导出功能。在微信的“设置-个人信息与权限-个人信息与账单”里,可以申请导出你的个人资料、支付账单等信息。这个导出的数据以个人注册信息为主,好友明细字段有限,但对做基础画像已经够用了。第二条是自己建表维护。我把微信通讯录里能看到的公开信息(昵称、备注名、性别、地区、签名)手动录入或半自动录入 Excel,再导入 Python 处理。听起来原始,但胜在完全合规、完全可控,而且数据量在几百到几千这个级别时,手工整理的成本其实没有想象中高。第三条是企业微信或公众号后台。如果你做运营,企业微信的客户联系功能可以直接导出客户列表和标签,公众号后台也能看到粉丝的地区和性别分布,这些都是官方接口,适合做商业向的用户画像分析。
我不建议碰的包括:任何基于非官方 hook 的导出工具、任何教你逆向 PC 端本地数据库的教程、任何需要扫码授权的第三方平台。原因很简单:个人数据合规本身就是数据分析从业者该有的基本素养,而且这类工具往往生命周期短、风险不可控,你辛苦跑出来的数据没准哪天就变成一堆乱码。
1.3 技术栈选型与技术理由
这个项目用 Python 是天然的选择,因为生态里能用的库实在太顺了。我用的核心库不多,但每一个都有明确用途。
pandas 负责数据清洗和统计,这是数据分析的地基。matplotlib 负责基础图表,饼图、柱状图、直方图都用它。pyecharts 负责地图和交互式图表,用来展示省份分布比 matplotlib 好看得多。jieba 做中文分词,处理个性签名文本。wordcloud 生成词云,Pillow 处理头像拼图。如果你想把结果汇报给团队或发到网上,jupyter notebook 再加 notebook 转 HTML 也很方便。
全套依赖就一行命令:
bash复制pip install pandas matplotlib pyecharts jieba wordcloud pillow
我建议把项目放在一个独立目录里,用虚拟环境隔离依赖,避免和系统 Python 环境互相污染。这个项目本身不重,CPU 和内存要求都很低,普通的办公笔记本就能流畅跑完所有分析流程。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据准备与清洗:动手前要处理的脏活
2.1 原始数据长什么样:字段设计与采集表
做数据清洗之前,先得有一张结构化的原始表。我自己的采集表在 Excel 里维护,字段设计如下:
| 字段名 | 含义 | 示例 |
|---|---|---|
| wechat_id | 微信号(可选) | wx_abc123 |
| nick_name | 昵称 | 阿明 |
| remark_name | 备注名 | 大学室友-阿明 |
| gender | 性别,0未知/1男/2女 | 1 |
| region | 地区,原始文本 | 山东省 青岛市 |
| signature | 个性签名 | 一直在路上 |
| head_img_path | 头像本地文件路径 | head/001.jpg |
| source | 好友来源 | 同学 / 同事 / 社群 |
这里有一个我踩过的坑:微信号字段并不是每个好友都看得到,有相当多的人微信号一栏被隐藏了。所以采集的时候不要把微信号当唯一标识,建议用“备注名+昵称+手机号”组合起来做一个临时 ID,保证去重时不误删。如果采集表是手工录入的,多花十分钟把备注名规范一下,后面清洗会省很多事。
数据量方面,我建议少于 200 人也别觉得不够。数据分析不要求你一定有几万条数据,重点是你能不能把有限的数据讲出有价值的故事。200 个好友足够画一张漂亮的性别饼图,也足够做一张不空洞的词云。
2.2 数据清洗的四个核心步骤
原始表录完之后,第一件事不是画图,而是让 pandas 读进来跑一次基础清洗。我常用的清洗步骤有四个,每一步都对应一个真实存在的坑。
第一步是去重。同一个好友可能因为换昵称或者我重复录入出现了两行数据,直接跑统计会把人数放大。我一般用“备注名 + 昵称”这两列的组合作为去重键:
python复制import pandas as pd
