|
|
本帖分析的榜单数据来源于Billboard官网,通过Python爬虫爬取,具体见此篇文章:基于Python爬虫获取Billboard榜单数据 - 知乎 (zhihu.com)。
曲目特征数据通过Spotify Api接口获取,采用python的pandas和matplotlib模块分析数据并实现结果可视化。
本文先把分析结果放出来,后续会介绍具体操作流程。
数据样本:共计200首曲目
https://www.billboard.com/charts/greatest-billboards-top-songs-80s/ 1980s单曲榜
https://www.billboard.com/charts/decade-end/hot-100/ 2010s十年榜
Spotify歌单地址:
https://open.spotify.com/playlist/05wgkugH2N9a2zeDl76s7C 1980s单曲榜
https://open.spotify.com/playlist/3TiuCQ2oO1S9HcS2oYgHON 2010s十年榜
一、分析维度
通过Spotify Api接口,我们能获取到以下曲目特征:
- Popularity:流行度,描述曲目在Spotify的流行程度,值介于0到100之间
- Acousticness: 原声程度,值介于0到1之间,代表音轨中所含非电子音程度
- Danceability: 可舞性,值介于0到1之间,根据节奏的稳定性、节拍强度来衡量曲目是否适合跳舞
- Duration_ms: 音轨时长,单位毫秒
- Energy: 冲击感,值介于0到1之间,代表对音乐强度与节奏的感知,该值越高代表音乐听起来越快节奏,大声且嘈杂
- Liveness: 现场感,值介于0到1之间,大于0.8代表现场录音的可能性较大
- Loudness: 响度,单位分贝
- speechiness: 语音比例,检测音轨中语音的存在。音轨越像语音(如脱口秀、有声读物、诗歌),值越接近1。
- tempo: 每分钟节拍数(BPM)
- valence: 情绪效价(心理学概念),值介于0到1之间,该值越高表示音乐给人的感受更正向,积极
二、数据处理
将以上几个概念作为我们的分析维度,在分析开始之前需要对数据进行处理。例如像曲目时长的单位是毫秒,我们要将它转换成秒。同时还要对数据进行标准化,采用min-max法也叫离差标准化,对原始数据进行线性变换,使结果映射到[0,1]区间。
三、分析结果
将数据标准化后,利用matolotlib绘制概率分布图,实现数据可视化。以下是分析结果:
绿色分布是1980s的曲目,红色则是2010s。
根据结果,我们发现80年代和上个十年最大的不同在于曲目的情绪效价,80年代集中分布偏右,而10年代明显偏左。这可能说明10年代相比80年代,榜单上出现了更多消极、悲观、颓废的歌曲(个人猜测是电子舞曲和黑人说唱流行导致的,没有贬低的意思)。
在可舞性方面,两个十年的分布均偏右,但10年代的分布相对更为集中,这说明可舞性低的曲目出现在榜单上的几率变小了。
在响度方面,10年代的分布明显较偏右,个人觉得这可能跟录音设备的发展有关,有没有懂哥来解释下。
其他特征方面,两个十年并没有明显不同。 |
|