想搞清楚自己这一年到底在听什么,别只用 Spotify 官方的 Wrapped 年终总结,那玩意儿好看是好看,但信息密度太低了。我去年整理自己的听歌数据时发现,用 Python 把 Spotify 的播放记录拉下来做一次完整分析,能看到的维度远比官方总结丰富——几点钟最沉迷、周末和通勤时段在听什么、口味在一年里怎么漂移、音频特征有没有变“丧”,这些都能量化。这篇文章就完整记录我是怎么用 Python 分析 Spotify 听歌数据的,从授权拿数、清洗处理到可视化出图,全程可复现,适合刚学 Python 想找真实项目练手的人,也适合想深度了解自己听歌习惯的老玩家。
1. 项目思路与整体设计:先想清楚要分析什么,再动手写代码
做个人数据分析项目最大的坑就是一上来就写代码。我一开始也犯过这个毛病,急着调通接口看到数据,结果拿到一堆 JSON 之后不知道拿字段干什么,又回头重新设计。所以先花几分钟把分析目标定下来,后面会省一大半时间。
1.1 拿到了数据,能回答哪些问题
Spotify 的听歌数据能分析的方向非常多,我这次主要锁定了五个问题:
- 每天什么时候听歌最集中,工作日和周末的模式有什么差异
- 播放时长最长的 Top 歌手、Top 歌曲分别是谁
- 一周七天里哪几天听歌最猛,哪个季节或月份听歌时长有明显变化
- 我的听歌时段分布是“通勤型”“工作背景音型”还是“深夜emo型”
- 如果拿到音频特征数据,还能看出我喜欢歌曲的平均能量、愉悦度、声学度倾向
这些问题拆开看就是数据聚合和可视化的事,难度不高,但能拼出一张完整的“听歌画像”。我建议你把想解决的问题写到纸上,后面每一步处理都对照这些问题,避免瞎逛。
1.2 为什么首选官方 API,而不是去做爬虫
很多新手第一反应是去爬网页版 Spotify,或者抓公共播放列表。我很不推荐这么干,原因有两个。第一,Spotify Web API 是官方提供的数据接口,播放记录、歌曲信息、音频特征都有结构化字段,做数据分析要的是干净数据,不是从 HTML 里辛苦抠出来的文本;第二,自己账号的数据涉及隐私,用官方 API 走正规授权流程,比抓包和模拟请求安全得多,也省心得多。
爬虫不是不能用,但在这个场景里属于“吃力不讨好”。API 一次请求返回的都是规整的 JSON,字段名稳定、文档齐全,数据量大一点还能分页拿到更多记录。所以我下面所有流程都基于 Spotify 官方 Web API。
1.3 两种数据获取路线,按需求选一种
我之前以为 Web API 能把开号以来的全部听歌记录都拉回来,跑完才发现不是这么回事。recently-played 这个端点一次最多返回 50 条,能查到的范围也锁死在最近 90 天内,所以想做“全年完整回顾”,单靠 API 不现实。
| 数据获取方式 | 覆盖范围 | 数据量 | 适合场景 |
|---|---|---|---|
| Web API(recently-played) | 最近 90 天 | 最多 50 条/页,可分页 | 了解近期听歌习惯、做实时监控 |
| Web API(user-top-read) | 长期聚合 | Top 50 歌曲/歌手 | 看长期口味,不需要时间维度 |
| 官方数据导出(Extended streaming history) | 全部历史记录 | 全部播放事件 | 长期趋势分析、完整回顾 |
我自己最后是两条路线都跑了:先用 API 拿近期数据做“近期画像”,然后去 Spotify 账号后台申请了完整历史数据导出,等到邮件通知后下载了 JSON 文件,这样才拿到了真正意义上从第一天用 Spotify 开始的完整播放记录。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与工具选型:Python 环境、虚拟环境和核心库
这个项目用到的库不算多,但有一个算一个都是数据分析和处理的主力。先把环境配好,后面才不会装依赖装到怀疑人生。
2.1 Python 版本和虚拟环境
我本机用的是 Python 3.10+,其实 3.9 以上都能跑。如果你是第一次装 Python,Windows 上记得安装时勾选 “Add Python to PATH”,不然命令行里敲 python 会提示找不到命令。macOS 用户系统自带的是 2.7 时代遗留下来的问题,我建议直接用 Homebrew 装一个新版,省得后面跟系统自带版本搞混。
装好 Python 之后,我强烈建议为这个项目单独建一个虚拟环境,别往全局环境里怼依赖。我有一次直接全局装了一大堆包,后来版本冲突把系统工具都搞出问题了,老老实实敲了这么几条命令:
bash复制python -m venv spotify_env
# Windows 激活
spotify_env\Scripts\activate
# macOS / Linux 激活
source spotify_env/bin/activate
虚拟环境能隔离项目依赖,之后不管装哪个版本的 pandas 或 spotipy,都不会污染系统 Python,出问题删掉重建就行,成本几乎为零。
2.2 核心库清单和安装命令
这个项目用到的核心库和它们各自的职责如下:
spotipy:Spotify Web API 的 Python 封装,处理授权、请求、分页都方便,不用自己写一堆请求头pandas:数据分析的地基,加载 JSON、清洗、聚合、统计全靠它matplotlib:基础的静态图表,画折线、柱状图、热力图都够用seaborn:基于 matplotlib 的高级绘图库,默认主题比裸 matplotlib 好看几个档次python-dotenv:管理 Client ID 和 Client Secret,避免把密钥硬编码在代码里plotly(可选):生成交互式图表,适合导出 HTML 自己慢慢玩
安装就一句话:
bash复制pip install spotipy pandas matplotlib seaborn python-dotenv plotl
