Music in December1

top2000_header

week 1 | data

当你和荷兰人谈论“12月的音乐,他们很有可能想到Top 2000,一个在圣诞节或1231日午夜播放的年度音乐榜单。我在之前的确玩过这份数据。它是我第二份正式的个人项目,但是对于d3我仍然是个新手。有时我会看到艺术家重温自己过去完成的作品,来审视自己风格的变化(这也是我很爱做的事),我认为这很适合去尝试一下(在sketch部分,我已经思考这个想法长达几个月了)。所以,在我初次尝试的两年之后,我将再次开始关注Top2000并将一些见解可视化。

不用担心你不是荷兰人,Top2000榜单中90%是英文歌,Queen乐队常常排榜首,还有许多BeatlesU2Michael Jackson songs的歌,所以这份列表对你来说可能很熟悉。

Top2000网站分享了一份包含2000首歌的歌名、歌手、发行年份等特征的Excel文件,在今年1219日公开。但是我需要另一个重要的变量,即在每周中达到的最高排名。这在荷兰比较少见,我选择用Top40,它从1965年开始持续到今日,选择它的另一个原因是它的数据看起来很好抓取。因此我写了一个小爬虫程序,爬取了近50年的列表,保存了歌手名字、歌曲名称、歌曲界面地址以及排名位置。每一首歌都是唯一的(歌曲的URL是唯一键),并保存额外的信息,例如达到的最高排名以及在Top40上榜的周数。

接下来是麻烦的地方,将Top40的歌手和歌曲与Top2000相匹配。当然我首先尝试直接融合两张榜单来对应歌手和标题,结果大概60%。浏览剩下的歌曲,我发现两张榜单有时候会使用比对方更多的词,比如John Lennon-Plastic Ono Band 对应John Lennon。所以我开始在两张榜单中搜索部分匹配的歌曲,只要这首歌标题和歌手的所有单词都能被另一张榜单的某一项包含。这种方法帮助我又匹配了10%的歌曲。

随后是令人困惑的部分。有时候有些单词的拼写存在微妙的区别,例如Don’t stop ’til you get enough 对应Don’t stop ’till you get enough。我使用R语言的stringdist,用其中的Full Damerau-Levenshtein距离来比较两个榜单的标题与歌手(它计算了将b转为a时相邻字符发生的删除、插入、替换、转置等变换的数量)。我在处理上有所限制,设定在标题和歌手名匹配时只能有两次变换(否则歌曲 U2Bad 可能会被转换为任意三个词的歌或2-3个词的歌手)。令人悲伤的是,这种方法只提高了2.5%的匹配率。这侧面说明,我非常需要快速检查一下所有的匹配歌曲,以在每一步处理后找出错误的匹配。

此时还有大约600首歌未被匹配。不过这并不是很糟糕的事,因为不是所有的歌都在Top40中,例如排名第三的歌,Led Zeppelin with Stairway to Heaven ,因为它只发行了唱片而没有发行单曲。但是如何判断未匹配的歌是允许未匹配的呢,哪些歌的确出现在Top40中但是未被匹配呢?我采用的最后一个想法是使用周数据的Tips。从1970年代开始,音乐网站在评选Top40时,还提供了一个扩充列表20/30;一些不在Top40中的歌曲,被DJ认为将在或应该在榜单中。因此我抓取了所有年份的列表,然后像Top40那样处理一遍。这个方法提高了8%的匹配率,匹配了许多我第一次看见但是在Top40中从未出现的歌曲(但是它们的确被提到过)。

对于剩余的430首歌,我大致浏览了列表中的较长或少见的歌手名字或歌曲标题,这些是我认为可能是匹配方法没有成效但的确出现在Top40中的歌曲,例如Top2000中的 Andrea Bocelli & Sarah Brightman对应Top40中的  Sarah Brightman & Andrea Bocelli 。我无法说剩下的380首歌中哪几首曾出现在Top40里,但是说实话,经过所有的数据处理以及我对数据的检查,我认为这种情况只占10%

week 2 | sketches

今年春天我在 Juan Velasco一家很棒的工作坊叫 Information Graphics for Print and Online。这家工作坊的一部分工作是绘制信息图。我的三人小团队对Top2000歌曲榜单都非常感兴趣,写下了大约40个可能的想法。从我之前对这份数据进行可视化的尝试中,我已经知道在过去几年中,我最喜欢的这十年发生了一个非常有趣的变化。因此,我们选择以它作为整体概念,围绕着它来设计信息图的每一个基础部分。

最近一期榜单将放在中心位置,将同一年发行的歌曲聚集在一起,通过蜜蜂群图来可视化。每一个圈(例如一首歌)的大小由它们在Top40的最高排名来决定,颜色由它们在Top2000的排名决定。其中一些歌曲会添加注释,并高亮提示,例如排名最高的新歌

dav

最后,底栏中是一些迷你图标,突出展示了199920082016年版本的Top2000榜单中被选歌曲的发行年份分布。这强调了一个事实即1999年,大部分歌曲都是在70年代发行的,但是它们慢慢地进入了下几个十年。

在工作坊的第二天,我们在之前的概念上设计了一款手机应用。这一次我们引入了一张很长的可滑动的蜜蜂群图,理论上你可以点击播放每一首歌,并查看额外信息。

Top_2000_Mobile_idea_small.jpg

虽然我没有时间开发这一款手机应用,但是我还是想展示一下我们的概念图。

week 3 & 4 | code

这个月我终于开始集中精力做一个静态海报。无论如何我还是准备使用d3来创建核心作品蜂群图。然后我把它拖进Illustrator。底部的直方图我直接用R生成导入Illustrator,这就是我所使用的所有工具了。

使用d3v4(数据可视化软件D3.js V4版本)可以定义横跨x/y轴的力,使得创建蜂群图变得十分简单。我使用水平轴向的力把歌曲按照发行年份进行汇聚。我花了好几个迭代来找出x轴和y轴方向的力平衡(为了避免圆圈的重叠,我加了偏移量)。这些歌曲在年代轴上分布的非常完美也没有出现有些歌偏离发行年代太远的情况。

起初,我用歌曲在TOP 40榜单的最高排名生成圈圈的大小,用他们在TOP 2000的排名来分配颜色。但是,却生成了大量相同大小亮灰色的圆圈(请看下图),这看起来比较low

beeswarm_initial_scales.png

所以我交换了这两个规则(即大小使用Top 2000的排名,颜色使用Top 40的排名),效果立竿见影。然后我对想要注释的圆圈(歌曲)进行标记。受到黑胶唱片那强烈黑色的灵感启发,我想用黑白来展现,只使用红色标记有些趣事的歌曲,蓝色标记列表里拥有最多歌曲的艺术家或者乐队(披头士乐队)。针对David Bowie and Prince这两个著名歌手今年(2016年)辞世的噩耗,我特意用黄色和紫色进行了标记。

由于排名前十的格局圆圈最大,我赋予他们黑胶唱片的外形(其实也就类似一个红圈上面叠加一个小的白圈)

vinyl_records.png

一个小提示:不可以对SVG(可缩放矢量图)矢量图的外侧描边,当对一个元素描边的时候,笔画的宽度会集中在元素的轮廓上。这种情况下我需要让整个灰色圆圈都被看到而不是被描边挡住部分(这种情况对于小圆圈非常明显)我在灰色圆圈后面画了稍微大几个像素的彩色圆圈模拟彩色的描边。下面的动图中这种大一点的圆圈使用这种背景圆圈使灰色圆圈保持真实半径。

circle_stroke_animated_small.gif

完成这些简单的元素后,我确定不会再做任何更改了,我使用SVG Crowbar工具保存蜂群图并用Illustrator打开。然后我把图片旋转25度角这样看起来效果更好,并且放上注释(使用网络线来对齐行和列)。通过数据和Top 2000网站可以得到一些有趣的结论,比如Justin Timberlake2016年拥有一首排名最高的歌曲。

underlying_grid_small.jpg

完成蜂群图(信息图的上部分)后,我认为需要有个小巧的交互版本,这样可以移动到圆圈上看看它是哪首歌。我花了2,3个小时把蜂群图用提示插件和注释进行了优化。

top2000_tooltip_small

我还想知道不同发行年代的歌曲分布在90年代和00年代发生的变化。

这是一个额外的细节,是对数据更深入的理解。我把他放在主图的下面,但是犹豫使用哪种可视化的方式来表现这个信息。2年前我已经有了历史的Top 2000数据,所以我把20152016的数据添加进去做一些图。从一开始我就觉得应该像直方图那样呈现,但是是否应该做平滑处理?该展示哪些年份的数据?是重叠还是分开的形式?

Top2000_all_editions_histogram_small.jpg

最后我选择了4个简单的直方图分开展示过去18年里四个时期的数据,为了让这4个图更容易比较,我添加了平滑密度曲线。下面的图就是我直接通过R调用ggplot2绘图包制作的图(柱状的高度使用了不同灰度的颜色。为了不让这些直方图喧宾夺主吸引太多的眼球,最终我还是把柱状都变成为灰色)。

histograms_from_R_small.jpg

下面就是最终的信息图,可交互的版本在这里。除了英文版的我还做了一个荷兰语版本,毕竟数据反映的是荷兰的流行音乐文化。

Top2000PosterEnglish.png

关于图的翻译

1标题:7080年代最受欢迎的2000首歌

2自从2000开始,由听众票选出的年度最流行的2000首歌曲会在荷兰国家广播电台2频道滚动播出一年。在圣诞节中午(1225日中午)至新年零点期间的播出会有一半的荷兰人收听。

3 右图中所有的黑色圈圈都代表代表Top 2000中的一首歌。歌曲的位置对应它们的发行日期。从下面的注释你能知道圆圈大小和颜色的含义。

4 歌曲在Top 2000中的位置

5 歌曲在每周Top 40的历史最高排名   从未进入过前40

6 经典歌曲  其中最老的歌曲是1939年发行的 Billie Holiday’s Strange Fruit,它比第二老的歌曲要早17年,如果要发行2017版的Top 2000的话,目前排在1989名的它可能有点悬。

7 发行年份

8 披头士

再没有艺术家或者乐队能够超越披头士。1970年之前他们的38首歌包揽了14% 的音乐头衔。即便是5年以前他们仍有50首歌在Top 2000里。

9 新近发现 

虽然已经在1972就发行了,但是David BowieStarman却成为了排名最高的新入围歌曲。在之前的17Top 2000中它均未入围,如今在2016年第一次入围就排名第270.

10 王子   

2016年过世(确切的日子是421日)的王子是另一个传奇。可能是更多的人发现了他的歌曲,歌曲入围数从2015年的9首歌突增到2016年的17首。

11 排名第一的是Queen(女王乐队)1975年发行的Bohemian Rhapsody(波希米亚狂想曲)

12 排名第二的是Eagles(老鹰乐队)1977年发行的Hotel California(加州旅馆)

13 排名第三的是Led Zeppelin(齐柏林飞艇)1971年发行的Stairway to Heaven(天堂之阶)

14 排名第四的是Billy Joel 1974年发行的Piano Man(钢琴师)

15 排名第五的是Deep Purple(深紫乐队) 1972年发行的Child in Time(时间中的孩子)

16 排名第六的是Avond 1997年发行的Boudewijn de Groot

17 排名第七的是David Bowie 1977年发行的Heroes(英雄)

18 排名第八的是Mag ik dan bij jou 2011年发行的Claudia de Breij(荷兰歌曲)

19 排名第九的是Pink Floyd(平克弗洛伊德)1975年发行的Wish you were here(希望你在这里)

20 排名第十的是Pearl Jam(珍珠酱乐队)1991年发行的Black

21 David Bowie 在他的新专辑BlackStar发行仅几天后就于2016110日离世。但是他的影响力依然强大,共有26首歌入围Top2000 最受欢迎的Heroes 从第34跃升至第七名。

22排名上升最大的歌曲  Adele 2015年发行的When we were young看来确实需要时间被大家接受。这首歌是排名上升最大的歌曲从1599名上升1743名至144名。

23 口袋妖怪  由于社交游戏口袋妖怪的原因2015年上榜,2016年该游戏的风靡让更多人熟悉了主题曲——Jason Paige Gotta catch ‘em all(把他们都抓住),于是排名从 1434名上升到232名。

24 2016年发行的最流行歌曲  Justin Timerlake 欢快灵动的新歌Can’t stop the feeling,成为2016年发行的最受欢迎的歌曲。它也是动画片Trolls(魔发精灵)电影原声带的一部分。

25 Top 2000歌曲发行年份分布(不同时期的四个版本)

26 右图分别是2000年、2005年、2010年以及最近的20164个版本的Top 2000发行年份分布图。

27 歌曲按照发行的年份叠加起来,高度越高代表这个年度发行的Top 2000歌曲越多。

28 平滑的黑色虚线让这四个图更容易进行对比。

29 歌曲数量

30 第一版的Top 20001999年发布的

31 基本上没有90年代发行的歌曲

32 越来越多90年代发行的歌曲进入Top 2000

33 新千年的排名中有很多歌曲正在流失   

直观的看,随着新歌不断的出现Top 2000会越来越分散。但是如果我们比较这四个图,我们会发现90年代的歌正在越来越流行。

尽管除了少量歌曲入围,但大部分90年代的歌曲都没有进入2000年的Top 2000。然而2016年版本中90年代歌曲的数量剧增。很可能的原因是90年代成长起来的新一代听众取代了那一批在2000年投票的不太接受新歌曲的老听众。

34 数据源 广播2频道的Top 2000歌曲列表|传媒市场每周Top40歌曲信息

我决定做一个信息图的另一个原因是这个月时间比较紧;127号了我才完成11月的数据草图,我计划去伦敦过一个短暂的假期(8个月之后,我在那里遇见了雪莉)我们一起度过了12月的最后几天。我做静态视图一向很快,况且这些还部分基于我之前用d3做的东西。

数据的爬取和清洗工作耗费了我大概20个小时,构思和草图大概3小时,写代码和作图大概20-30小时(我一直告诉自己要开始跟踪自己的进度,呵呵)。完成这些静态图后,我总是记得我是多么喜欢制作可打印的东西。

原文:http://www.datasketch.es/december/

留下评论