NoobZhou 2020-08-03
本文转载自公众号“读芯术”(ID:AI_Discovery)。
2019年5月, Tones and I发行了她的第二张单曲《Dance Monkey》,这首歌一直在世界各地流行,你肯定曾经随着这首歌的节奏摇摆过!
我第一次知道这首歌是在某节课上,我朋友一直唱着它。一开始,笔者感觉他好像一遍又一遍地重复同样的歌词:“dance for me, dance for me, dancefor me”。听了原曲后,我注意到它确实有一些重复的歌词。笔者接着听了她的另一首热门歌曲《Never Seen The Rain》,也发现了类似的模式。
笔者决定以这个小项目为基础,探究艺术家在选择歌词措辞时有自己的风格。
我将使用基本的python技能来分析Tones and I的两首热门歌曲:《Dance Monkey》和《Never Seen The Rain》,查看它们之间是否存在任何相似之处,以及她如何通过歌词的重复创建自己的音乐风格,比如使用语音单词(例如“oh”和“ah”)等。
1. 收集和清理数据
笔者从Metro Lyrics获得了这两首歌的歌词并对其进行了编辑,确保歌词之间没有逗号或多余的空格,还将诸如“You’ve”改为“You have”以保持一致性。之后,笔者将其作为字符串上传到JupyterNotebook上,并为其分配了一个变量(dm&nstr)。
#Dance Monkey Lyrics dm = "They say oh my god I see the way you shine Take your hand my...makeyou do it all again All again" dmdm = dm.lower()#Never Seen The Rain Lyrics nstr = "All your life no You could...never felt the rain rain rain" nstrnstr = nstr.lower()
dm.lower()函数更改了单词以确保它们全部为小写。如果不这样做,程序会认为“You”与“you”有所区别,认为它们是不同的词。打印后,结果将如下所示:
由于目的之一是找出歌词中总共有多少个单词,所以当所有单词都在一个字符串中时,就无法做到这一点。为了分隔它们,笔者使用了以下代码:
split_dm = dm.split(' ') print(split_dm)
我对Never Seen The Rain的歌词也进行了同样的处理。
2. 分类数据
下一步是计算单词和唯一单词的总数。为了计算单词总数,笔者在初始变量上使用了LEN()函数:
len(split_dm)
总共453个单词。然后,为了计算用于创作歌曲的单个词的数量,笔者在split_dm变量上使用了SET()函数。
unique_dm = set(split_dm) print(unique_dm)
此函数确保列出至少使用一次的单词,因此结果如下所示:
为了计算新列表中的单词数,笔者使用了LEN()函数:
len(unique_dm)
总共有72个唯一单词,指的是是只有这些单词才被用于这首歌的创作。
3. 最常用的词
在要使用的单词中,笔者想确定前10个单词(重复最多的单词)以及仅使用一次的单词。下面使用的代码显示了每个单词及其用法计数:
word_dm = {} for word in unique_dm: word_dm[word] = 0for word insplit_dm: word_dm[word] = word_dm[word] + 1 print(word_dm)
为了更易于阅读,笔者使用以下代码将单词和值绑定在一起:
dm_count = sorted(word_dm.items(),key = lambda t:t[1], reverse =True) print(dm_count)
然后,使用此代码检索前10个最常用的单词:
dm_top_10 = dm_count[0:10] dm_top_10
合并后的数据如下所示:
笔者可以肯定地说,“Tones and I”的独特风格(在她的所有歌曲中都绝对可以听到)就是在歌曲中使用“oh”和“ay”之类的原声单词,这两个词的数量在她的两首歌曲中均排在前10位。
4. 只使用了一次的单词
图源:unsplash
使用类似于上面的代码,笔者还发现只使用了一次的单词:
dm_least_used = dm_count[49:72] len(dm_least_used)
只有23个只使用了一次的单词。另一首歌曲也运用了相同的函数。
5. 重复字数
下一个目标是找出不止被重复一次的单词数:
len(unique_dm)-len(dm_least_used)
这首歌里重复了49个单词。为了找到重复的次数,笔者使用了以下代码:
len(split_dm)-len(dm_least_used)
这49个单词共被重复了430次!同样,在另一首歌里也执行相同的代码。
6. 可视化
笔者将两首歌曲中的数据合并到excel的表格中,然后在笔记本上读取。
table = pd.read_csv('song_values.csv')
比较数据的最有效方法是使用条形图:
x = table.Name y1 = table.words_in_song y2 = table.words_in_lyrics y3 = table.Words_used_once y4 = table.Words_used_more_than_once y5 = table.Number_of_times_words_repeatedfig = go.Figure(data=[ go.Bar(name='Total number of words insong', xx=x, y=y1), go.Bar(name='Total Number of RepeatedWords', xx=x, y=y5), go.Bar(name='Number of words used inLyric', xx=x, y=y2), go.Bar(name='Words used once', xx=x,y=y3), go.Bar(name='Words used more thanonce', xx=x, y=y4)])#Change the bar mode fig.update_layout(barmode='group', title ="Comparison Between The TwoSongs") fig.show()
查看图表,我们可以得出以下结论:
7. 最后的想法
在进一步处理数据时,笔者发现一个非常有趣的现象,即标题中的两个单词是如何频繁使用的:“Dance”使用了19次,而“Monkey”在整首歌曲中仅使用了一次。
令人惊讶的是,用于创作歌词的单个单词的数量非常少(大约占15%-20%),其中约85%的单个词被重复使用以组成歌曲。
图源:unsplash