做数据分析这些年,我经常被问到的一个问题是:手头没有像样的数据可以练手怎么办。其实每个人的微信好友列表就是一个现成的、真实的数据集。这个项目就是把我的微信好友数据批量导出来,用 Python 做了一轮完整的数据清洗、特征分析和可视化,最后产出一份能直接看的好友画像报告。整个过程不复杂,涉及的库就是 pandas、pyecharts、jieba 和 wordcloud,非常适合刚入门数据分析的同学作为第一个完整项目来练手,也可以给有经验的工程师当作一套标准化的数据处理流程参考。
先说清楚这个项目能解决什么问题:一是让你掌握“拿到原始数据之后,怎么一步步变成有价值的结论”的完整思路;二是把数据分析与可视化中最常用到的技能点都串起来,包括数据清洗、分组统计、文本挖掘、图表绘制和报告组装。你不用懂太深的理论,跟着流程走一遍,基本的数据分析思维就能建立起来。下面我直接把当时的实操过程、踩过的坑和最终代码都摊开来讲。
1. 项目概述与整体设计思路
1.1 我们到底在分析什么
很多人一听到“微信好友数据分析”,第一反应就是要爬聊天记录、采集朋友圈,其实不是。好友分析的对象只是通讯录里的基础信息,核心字段就这几个:昵称、性别、地区、个性签名、备注名、标签分组。这些字段在你自己的通讯录里都能看到,不涉及聊天内容,合规性上要友好很多。
基于这些字段,我们能回答的问题很实在:
- 好友中男女比例大约是多少,未知性别占比高不高
- 好友都集中在哪些省市,社交圈是否偏地域化
- 个性签名里出现最多的关键词是什么,反映了什么特征
- 大家的备注习惯是什么样的,有没有统一规律
- 标签分组分布如何,是否有人做了很好的好友分类管理
我当时做这个项目的目标,就是把这几个问题用图表直观地呈现出来。最终产出的不是一堆表格,而是一个可以滚动查看、可以交互的 HTML 报告,发给朋友看的时候大家都觉得很有意思。这种“从数据到结论再到分享”的完整闭环,才是数据分析的真实价值。光有一堆图表没有洞察,那叫画图,不叫分析。
1.2 技术选型:为什么是 pandas 加 pyecharts
技术选型上其实我纠结过一阵子,因为可视化的库实在太多了。matplotlib 是基础,但画出来默认风格偏老,中文乱码问题能把人折磨死;seaborn 统计图表漂亮,但做地图和交互式图表要额外组合;plotly 交互能力很强,不过在离线环境下使用和部署有点繁琐。
我最终把主力放在 pandas 加 pyecharts 这套组合上。pandas 负责数据清洗和统计计算,这是它的看家本领;pyecharts 负责所有图表输出,它在底层封装了 ECharts,既支持交互、又对中文字体支持得不错,生成的 HTML 文件可以直接发给任何人打开看,不需要搭建服务,也不依赖网络。
| 对比项 | matplotlib | pyecharts | plotly |
|---|---|---|---|
| 中文支持 | 需要手动设置字体 | 默认较好 | 需要配置字体 |
| 交互性 | 弱 | 强,自带 tooltip | 强 |
| 地图支持 | 弱,需要额外库 | 内置地图组件 | 需要在线资源 |
| 学习成本 | 中等 | 低,API 简洁 | 中等 |
| 输出形式 | 静态图片 | HTML/图片 | HTML/图片 |
当然我不是说 matplotlib 没用,它是很多高级定制的基础。但如果你做的是一份要发给别人看、要带交互效果的分析报告,pyecharts 是更省事的选择。环境方面,Python 3.8 以上都行,安装命令很简单:
bash复制pip install pandas pyecharts jieba wordcloud
这里提个醒:pyecharts 版本变化挺大,网上很多旧教程用的是 1.x 版本,代码写法完全不一样。本文代码基于 pyecharts 2.x 版本,也就是当前 pip 默认安装的版本,如果你发现 from pyecharts.charts import Bar 报错,先检查版本。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据获取与预处理:先把数据搞干净
2.1 数据获取的现实情况与合规底线
先聊一个绕不开的现实情况:微信官方目前没有提供一套公开、稳定的批量导出好友信息接口。早年大家常用的网页协议版方案现在大范围失效,而且扫码登录有风控风险;本地数据库解析的方案又涉及逆向和隐私,工具版本跟着微信更新走,今天能跑通明天可能就不行。所以在这个环节,我不建议你把精力全部押在“一定要拿到全量真实数据”上。
我的建议是两条腿走路:如果你想先跑通流程,直接用下面的模拟数据脚本,几分钟就能生成一份结构完全一致的 CSV 文件,所有分析和可视化代码都不受影响;如果你确实想分析自己的通讯录,可以用手机通讯录里能看到的字段,在 Excel 里手动整理一份脱敏版本,几十条数据一样能学会整套分析方法。等你真正确认某个数据导出工具可靠、且只在自己电脑上处理不对外泄露,再去做完整导入也不迟。
这里我需要强调一个底线:整个项目只允许分析你自己的账号、你自己的好友数据,不能在公开渠道传播好友的原始信息。我后面在报告展示环节也做了昵称打码处理,这是对数据最基本的尊重。合规和安全永远排在技术前面。
2.2 定义统一的数据格式
为了让后续代码复用性更强,我一开始就把数据格式固定了下来。不管数据从哪来,最终都要转换成这样一个 CSV,包含六个字段:昵称、性别、省份、城市、签名、备注、标签。标签字段可能存在多条,用英文分号分隔。
| 字段名 | 说明 | 示例 |
|---|---|---|
| nickname | 好友昵称 | 阿哲 |
| sex | 性别代码 | 1 表示男,2 表示女,0 表示未知 |
| province | 省份 | 广东 |
| city | 城市 | 深圳 |
| signature | 个性签名 | 但行好事,莫问前程 |
| rem |
