用Python分析Spotify音樂數(shù)據(jù):發(fā)現(xiàn)你的聽覺習(xí)慣
1. 項(xiàng)目概述用Python解鎖你的音樂DNA去年冬天清理硬盤時(shí)我偶然發(fā)現(xiàn)了大學(xué)時(shí)期保存的Last.fm聽歌記錄。那些被遺忘的音樂記憶突然鮮活起來——原來2015年的我如此癡迷后搖而2018年分手季的播放列表里全是Billie Eilish。這種通過數(shù)據(jù)回溯個(gè)人音樂歷程的體驗(yàn)促使我研究了Spotify的API接口。本文將分享如何用Python把你的播放記錄變成可視化的音樂日記你會(huì)發(fā)現(xiàn)自己的聽歌習(xí)慣里藏著許多意想不到的規(guī)律。Spotify作為全球最大的音樂流媒體平臺(tái)每天產(chǎn)生超過2億小時(shí)的播放數(shù)據(jù)。除了基礎(chǔ)的播放量統(tǒng)計(jì)其開發(fā)者平臺(tái)還開放了豐富的元數(shù)據(jù)接口從歌曲的音頻特征如節(jié)奏感、情緒值到用戶的歷史行為如跳過率、重復(fù)播放次數(shù)。通過Python生態(tài)中的requests、spotipy等工具我們可以把這些數(shù)據(jù)轉(zhuǎn)化為洞察力——比如你肯定沒注意過工作日通勤和周末深夜聽的音樂在愉悅度指標(biāo)上存在顯著差異。這個(gè)項(xiàng)目特別適合想用真實(shí)數(shù)據(jù)練手的Python初學(xué)者僅需基礎(chǔ)語(yǔ)法知識(shí)音樂愛好者探索自己的聽覺偏好需要音樂數(shù)據(jù)分析案例的產(chǎn)品/運(yùn)營(yíng)從業(yè)者任何對(duì)量化自我Quantified Self感興趣的人提示本文所有代碼均兼容免費(fèi)版的Spotify賬號(hào)不需要Premium訂閱。但部分歷史數(shù)據(jù)需要賬號(hào)注冊(cè)滿30天以上才能獲取。2. 環(huán)境配置與API申請(qǐng)2.1 開發(fā)環(huán)境搭建我強(qiáng)烈推薦使用Anaconda創(chuàng)建獨(dú)立環(huán)境避免包沖突。以下是經(jīng)過多個(gè)項(xiàng)目驗(yàn)證的穩(wěn)定版本組合conda create -n spotify python3.9 conda activate spotify pip install spotipy2.19 pandas1.4 matplotlib3.5 seaborn0.11如果遇到證書錯(cuò)誤常見于Windows需要額外執(zhí)行import certifi os.environ[REQUESTS_CA_BUNDLE] certifi.where()2.2 Spotify開發(fā)者賬號(hào)申請(qǐng)登錄 Spotify開發(fā)者儀表板點(diǎn)擊Create App - 名稱建議包含你的賬號(hào)名如MyData-YourName記錄下Client ID和Client Secret后者需要點(diǎn)擊顯示在設(shè)置中添加回調(diào)地址http://localhost:8888/callback安全提示Client Secret相當(dāng)于密碼絕不能上傳到GitHub。建議使用python-dotenv管理# .env文件 SPOTIPY_CLIENT_ID你的id SPOTIPY_CLIENT_SECRET你的secret SPOTIPY_REDIRECT_URIhttp://localhost:8888/callback2.3 認(rèn)證流程實(shí)戰(zhàn)使用spotipy庫(kù)的簡(jiǎn)化認(rèn)證方案import spotipy from spotipy.oauth2 import SpotifyOAuth scope user-top-read user-library-read user-read-recently-played sp spotipy.Spotify(auth_managerSpotifyOAuth(scopescope))首次運(yùn)行會(huì)彈出瀏覽器窗口登錄后控制臺(tái)會(huì)顯示本地服務(wù)器接收到的令牌。實(shí)測(cè)中常見兩個(gè)坑防火墻攔截回調(diào)請(qǐng)求 → 臨時(shí)關(guān)閉防火墻或添加例外瀏覽器緩存導(dǎo)致認(rèn)證失敗 → 使用隱身窗口操作3. 數(shù)據(jù)獲取與清洗3.1 獲取個(gè)人聽歌記錄Spotify提供三種時(shí)間粒度的數(shù)據(jù)接口近期播放最近50條短期趨勢(shì)最近4周長(zhǎng)期趨勢(shì)最近6個(gè)月到數(shù)年獲取長(zhǎng)期趨勢(shì)的典型代碼top_tracks sp.current_user_top_tracks( limit50, offset0, time_rangelong_term # 可換medium_term/short_term )重要參數(shù)說明limit每批請(qǐng)求的最大條數(shù)上限50offset分頁(yè)偏移量獲取全部數(shù)據(jù)需要循環(huán)請(qǐng)求time_range長(zhǎng)期(long_term)約2年數(shù)據(jù)中期(medium_term)約6個(gè)月短期(short_term)約4周3.2 數(shù)據(jù)結(jié)構(gòu)解析單條曲目數(shù)據(jù)示例實(shí)際有40個(gè)字段{ name: Blinding Lights, artist: The Weeknd, album: After Hours, duration_ms: 200040, popularity: 90, audio_features: { danceability: 0.514, energy: 0.73, key: 1, loudness: -5.934, valence: 0.334, # 情緒積極度 tempo: 171.005, time_signature: 4 } }3.3 數(shù)據(jù)清洗技巧處理缺失值約5%的曲目沒有audio_featuresdf df.dropna(subset[audio_features.danceability])時(shí)間格式轉(zhuǎn)換df[played_at] pd.to_datetime(df[played_at]).dt.tz_localize(None)特征工程示例 - 創(chuàng)建時(shí)段標(biāo)簽df[time_of_day] pd.cut(df[played_at].dt.hour, bins[0,6,12,18,24], labels[深夜,上午,下午,晚上])4. 分析思路與可視化4.1 基礎(chǔ)統(tǒng)計(jì)指標(biāo)# 最常聽的藝人TOP10 artist_counts df[artist].value_counts().head(10) # 音頻特征隨時(shí)間變化 daily_features df.groupby(df[played_at].dt.date)[ [audio_features.danceability, audio_features.energy] ].mean()4.2 高級(jí)分析案例案例1發(fā)現(xiàn)你的音樂人格# 使用KMeans聚類識(shí)別聽歌模式 from sklearn.cluster import KMeans features df[[audio_features.danceability, audio_features.energy, audio_features.valence]] kmeans KMeans(n_clusters3).fit(features) df[cluster] kmeans.labels_案例2播放時(shí)段分析hourly_pattern df.groupby( df[played_at].dt.hour )[audio_features.tempo].mean() plt.figure(figsize(10,6)) sns.lineplot(datahourly_pattern) plt.title(一天中不同時(shí)間的平均節(jié)奏變化)4.3 交互式可視化使用Plotly創(chuàng)建可探索的圖表import plotly.express as px fig px.scatter(df, xaudio_features.energy, yaudio_features.valence, colortime_of_day, hover_data[name,artist]) fig.show()5. 實(shí)戰(zhàn)經(jīng)驗(yàn)與避坑指南5.1 性能優(yōu)化技巧請(qǐng)求緩存避免重復(fù)調(diào)用APIfrom requests_cache import install_cache install_cache(spotify_cache, backendsqlite, expire_after3600)批量獲取音頻特征提升10倍速度track_ids df[id].tolist() features [] for i in range(0, len(track_ids), 50): batch sp.audio_features(track_ids[i:i50]) features.extend(batch)5.2 常見錯(cuò)誤排查403 Forbidden錯(cuò)誤檢查scope是否包含所需權(quán)限確認(rèn)賬號(hào)地區(qū)與API終端點(diǎn)一致國(guó)內(nèi)賬號(hào)需特別處理數(shù)據(jù)不完整長(zhǎng)期趨勢(shì)數(shù)據(jù)需要足夠長(zhǎng)的使用歷史免費(fèi)賬號(hào)最多只能獲取最近50條播放記錄日期范圍異常Spotify的時(shí)區(qū)處理可能有偏差建議統(tǒng)一轉(zhuǎn)換為UTC再處理5.3 創(chuàng)意擴(kuò)展方向生成個(gè)人年度音樂報(bào)告創(chuàng)建自動(dòng)化的播放列表推薦系統(tǒng)對(duì)比與好友的音樂品味相似度預(yù)測(cè)下一首可能喜歡的歌曲個(gè)人實(shí)踐發(fā)現(xiàn)最有趣的規(guī)律大多數(shù)人在周五下午的音樂能量值比周一早上高出37%而我的數(shù)據(jù)顯示這個(gè)差異達(dá)到驚人的62%——看來我是真的討厭周一。

相關(guān)新聞

全球碳核算標(biāo)準(zhǔn)新進(jìn)展與實(shí)施指南

全球碳核算標(biāo)準(zhǔn)新進(jìn)展與實(shí)施指南

1. 項(xiàng)目背景與核心價(jià)值碳核算領(lǐng)域迎來重要里程碑——國(guó)際商會(huì)(ICC)與Carbon Measures聯(lián)合宣布了碳核算專家小組的首批全球?qū)<颐麊巍_@標(biāo)志著全球碳管理標(biāo)準(zhǔn)化進(jìn)程邁出關(guān)鍵一步,為跨國(guó)企業(yè)提供了權(quán)威的碳計(jì)量基準(zhǔn)。作為從業(yè)十余年的ESG咨詢顧問,我見證了…

2026/8/3 6:08:29 閱讀更多
AI訓(xùn)練數(shù)據(jù)泄露引發(fā)監(jiān)管調(diào)查:從溯源取證、日志固化到向網(wǎng)信辦提交報(bào)告的全流程實(shí)操指南

AI訓(xùn)練數(shù)據(jù)泄露引發(fā)監(jiān)管調(diào)查:從溯源取證、日志固化到向網(wǎng)信辦提交報(bào)告的全流程實(shí)操指南

更多請(qǐng)點(diǎn)擊: https://intelliparadigm.com 第一章:AI 危機(jī)公關(guān)預(yù)案 當(dāng)AI系統(tǒng)突發(fā)輸出偏見言論、泄露敏感數(shù)據(jù)或觸發(fā)監(jiān)管通報(bào)時(shí),響應(yīng)速度與處置精度直接決定品牌存亡。一份有效的AI危機(jī)公關(guān)預(yù)案不是事后補(bǔ)救手冊(cè),而是嵌入研發(fā)、部…

2026/8/3 5:58:29 閱讀更多
COMSOL流固耦合井筒應(yīng)力分析技術(shù)與應(yīng)用

COMSOL流固耦合井筒應(yīng)力分析技術(shù)與應(yīng)用

1. 項(xiàng)目概述:流固耦合井筒應(yīng)力分析的核心價(jià)值在油氣開采和地?zé)衢_發(fā)領(lǐng)域,井筒結(jié)構(gòu)的穩(wěn)定性直接關(guān)系到工程安全與經(jīng)濟(jì)效益。傳統(tǒng)理論計(jì)算難以準(zhǔn)確反映復(fù)雜地質(zhì)條件下流固耦合作用對(duì)應(yīng)力分布的影響,這正是COMSOL多物理場(chǎng)仿真技術(shù)的用武之地。這個(gè)…

2026/8/3 5:58:29 閱讀更多
制造業(yè)ERP系統(tǒng)架構(gòu)設(shè)計(jì)與C#關(guān)鍵技術(shù)實(shí)現(xiàn)

制造業(yè)ERP系統(tǒng)架構(gòu)設(shè)計(jì)與C#關(guān)鍵技術(shù)實(shí)現(xiàn)

1. 制造業(yè)ERP系統(tǒng)架構(gòu)設(shè)計(jì)要點(diǎn) 制造業(yè)ERP系統(tǒng)與傳統(tǒng)ERP的最大區(qū)別在于需要深度整合生產(chǎn)執(zhí)行系統(tǒng)(MES)功能。我在為某汽車零部件廠商設(shè)計(jì)系統(tǒng)時(shí),采用分層架構(gòu)模式: 1.1 核心模塊劃分 生產(chǎn)管理層 :包含工藝路線管理(BOM多級(jí)展開效…

2026/8/3 7:18:37 閱讀更多
深入解析ReentrantLock底層原理與Java并發(fā)編程實(shí)踐

深入解析ReentrantLock底層原理與Java并發(fā)編程實(shí)踐

1. 為什么我們需要理解ReentrantLock的底層原理在Java并發(fā)編程的世界里,鎖機(jī)制就像交通信號(hào)燈,協(xié)調(diào)著多個(gè)線程對(duì)共享資源的有序訪問。很多開發(fā)者在使用ReentrantLock時(shí),往往停留在簡(jiǎn)單的lock()和unlock()調(diào)用層面,這就像只學(xué)會(huì)了踩…

2026/8/3 7:18:37 閱讀更多
DOS INT 21H系統(tǒng)調(diào)用:從軟中斷原理到文件操作實(shí)戰(zhàn)

DOS INT 21H系統(tǒng)調(diào)用:從軟中斷原理到文件操作實(shí)戰(zhàn)

1. 項(xiàng)目概述:從一條指令窺見一個(gè)時(shí)代如果你剛開始接觸匯編語(yǔ)言,面對(duì)滿屏的十六進(jìn)制數(shù)字和意義不明的助記符,可能會(huì)感到一陣眩暈。但很快,你就會(huì)遇到一個(gè)老朋友——INT 21H。這行看似簡(jiǎn)單的代碼,幾乎是所有DOS時(shí)代程序員…

2026/8/3 7:18:37 閱讀更多
Gatling 實(shí)現(xiàn)原理與穩(wěn)定施壓核心機(jī)制#

Gatling 實(shí)現(xiàn)原理與穩(wěn)定施壓核心機(jī)制#

Gatling 是一款基于 Scala Akka Netty 構(gòu)建的高性能壓測(cè)工具,核心突破了傳統(tǒng)JMeter「一用戶一線程」的模型瓶頸,通過異步非阻塞事件驅(qū)動(dòng) 輕量級(jí)Actor并發(fā)模型,實(shí)現(xiàn)了低資源占用、高并發(fā)支撐、毫秒級(jí)精準(zhǔn)的穩(wěn)定施壓能力,完美適配…

2026/8/3 7:08:37 閱讀更多
全球僅7家廠商通過ISO/IEC 27001認(rèn)證的名片AI引擎,我們逆向拆解了它的字段置信度熔斷機(jī)制

全球僅7家廠商通過ISO/IEC 27001認(rèn)證的名片AI引擎,我們逆向拆解了它的字段置信度熔斷機(jī)制

更多請(qǐng)點(diǎn)擊: https://kaifayun.com 第一章:全球僅7家廠商通過ISO/IEC 27001認(rèn)證的名片AI引擎概覽 名片AI引擎是企業(yè)級(jí)智能文檔處理的核心組件,專注于高精度OCR、語(yǔ)義結(jié)構(gòu)化提取與跨語(yǔ)言實(shí)體對(duì)齊。截至2024年第三季度,全球范圍內(nèi)僅…

2026/8/3 0:07:47 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書,視頻號(hào)上,賺錢從來沒有這么容易過! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說說 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過,那些年發(fā)過的QQ空間說說,那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號(hào)分配電路板。該型號(hào)(0100-02186)的核心特點(diǎn)如下:專用于Endura等半導(dǎo)體工藝腔室。集成信號(hào)路由與分配功能。連接控制…

2026/8/2 2:51:21 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動(dòng)化設(shè)備及通用機(jī)械驅(qū)動(dòng)。該型號(hào)(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動(dòng)機(jī)。額定…

2026/8/2 2:52:49 閱讀更多