如何用Python探究你喜爱的歌手的音乐风格?

开发 后端
我将使用基本的python技能来分析Tones and I的两首热门歌曲:《Dance Monkey》和《Never Seen The Rain》,查看它们之间是否存在任何相似之处,以及她如何通过歌词的重复创建自己的音乐风格,比如使用语音单词等。

 本文转载自公众号“读芯术”(ID:AI_Discovery)。

2019年5月, Tones and I发行了她的第二张单曲《Dance Monkey》,这首歌一直在世界各地流行,你肯定曾经随着这首歌的节奏摇摆过!

我第一次知道这首歌是在某节课上,我朋友一直唱着它。一开始,笔者感觉他好像一遍又一遍地重复同样的歌词:“dance for me, dance for me, dancefor me”。听了原曲后,我注意到它确实有一些重复的歌词。笔者接着听了她的另一首热门歌曲《Never Seen The Rain》,也发现了类似的模式。

[[336001]]

笔者决定以这个小项目为基础,探究艺术家在选择歌词措辞时有自己的风格。

我将使用基本的python技能来分析Tones and I的两首热门歌曲:《Dance Monkey》和《Never Seen The Rain》,查看它们之间是否存在任何相似之处,以及她如何通过歌词的重复创建自己的音乐风格,比如使用语音单词(例如“oh”和“ah”)等。

1. 收集和清理数据

笔者从Metro Lyrics获得了这两首歌的歌词并对其进行了编辑,确保歌词之间没有逗号或多余的空格,还将诸如“You’ve”改为“You have”以保持一致性。之后,笔者将其作为字符串上传到JupyterNotebook上,并为其分配了一个变量(dm&nstr)。

  1. #Dance Monkey Lyrics 
  2. dm = "They say oh my god I see the way you shine Take your hand my...makeyou do it all again All again" 
  3. dmdm = dm.lower()#Never Seen The Rain Lyrics 
  4. nstr = "All your life no You could...never felt the rain rain rain" 
  5. nstrnstr = nstr.lower() 

dm.lower()函数更改了单词以确保它们全部为小写。如果不这样做,程序会认为“You”与“you”有所区别,认为它们是不同的词。打印后,结果将如下所示:

如何用Python探究你喜爱的歌手的音乐风格?

由于目的之一是找出歌词中总共有多少个单词,所以当所有单词都在一个字符串中时,就无法做到这一点。为了分隔它们,笔者使用了以下代码:

  1. split_dm = dm.split(' ') 
  2. print(split_dm) 
如何用Python探究你喜爱的歌手的音乐风格?

我对Never Seen The Rain的歌词也进行了同样的处理。

2. 分类数据

下一步是计算单词和唯一单词的总数。为了计算单词总数,笔者在初始变量上使用了LEN()函数:

  1. len(split_dm) 

总共453个单词。然后,为了计算用于创作歌曲的单个词的数量,笔者在split_dm变量上使用了SET()函数。

  1. unique_dm = set(split_dm) 
  2. print(unique_dm) 

此函数确保列出至少使用一次的单词,因此结果如下所示:

如何用Python探究你喜爱的歌手的音乐风格?

为了计算新列表中的单词数,笔者使用了LEN()函数:

  1. len(unique_dm) 

总共有72个唯一单词,指的是是只有这些单词才被用于这首歌的创作。

3. 最常用的词

在要使用的单词中,笔者想确定前10个单词(重复最多的单词)以及仅使用一次的单词。下面使用的代码显示了每个单词及其用法计数:

  1. word_dm = {} 
  2. for word in unique_dm: 
  3.     word_dm[word] = 0for word insplit_dm: 
  4.     word_dm[word] = word_dm[word] + 1 
  5. print(word_dm) 
如何用Python探究你喜爱的歌手的音乐风格?

为了更易于阅读,笔者使用以下代码将单词和值绑定在一起:

  1. dm_count = sorted(word_dm.items(),key = lambda t:t[1], reverse =True
  2. print(dm_count) 
如何用Python探究你喜爱的歌手的音乐风格?

然后,使用此代码检索前10个最常用的单词:

  1. dm_top_10 = dm_count[0:10] 
  2. dm_top_10 

合并后的数据如下所示:

如何用Python探究你喜爱的歌手的音乐风格?

笔者可以肯定地说,“Tones and I”的独特风格(在她的所有歌曲中都绝对可以听到)就是在歌曲中使用“oh”和“ay”之类的原声单词,这两个词的数量在她的两首歌曲中均排在前10位。

4. 只使用了一次的单词

[[336005]]

图源:unsplash

使用类似于上面的代码,笔者还发现只使用了一次的单词:

  1. dm_least_used = dm_count[49:72] 
  2. len(dm_least_used) 

只有23个只使用了一次的单词。另一首歌曲也运用了相同的函数。

5. 重复字数

下一个目标是找出不止被重复一次的单词数:

  1. len(unique_dm)-len(dm_least_used) 

这首歌里重复了49个单词。为了找到重复的次数,笔者使用了以下代码:

  1. len(split_dm)-len(dm_least_used) 

这49个单词共被重复了430次!同样,在另一首歌里也执行相同的代码。

6. 可视化

笔者将两首歌曲中的数据合并到excel的表格中,然后在笔记本上读取。

  1. table = pd.read_csv('song_values.csv') 
如何用Python探究你喜爱的歌手的音乐风格?

比较数据的最有效方法是使用条形图:

  1. x = table.Name 
  2. y1 = table.words_in_song 
  3. y2 = table.words_in_lyrics 
  4. y3 = table.Words_used_once 
  5. y4 = table.Words_used_more_than_once 
  6. y5 = table.Number_of_times_words_repeatedfig = go.Figure(data=[ 
  7.     go.Bar(name='Total number of words insong'xx=x, y=y1), 
  8.     go.Bar(name='Total Number of RepeatedWords'xx=x, y=y5), 
  9.     go.Bar(name='Number of words used inLyric'xx=x, y=y2), 
  10.     go.Bar(name='Words used once'xx=x,y=y3), 
  11.     go.Bar(name='Words used more thanonce'xx=x, y=y4)])#Change the bar mode 
  12. fig.update_layout(barmode='group'title ="Comparison Between The TwoSongs"
  13. fig.show() 
如何用Python探究你喜爱的歌手的音乐风格?

查看图表,我们可以得出以下结论:

  • 两首歌曲在歌词中使用一次的单词和重复一次以上的单词数量相对一致,尽管“Dance Monkey”中的单词数略微多一些。
  • 尽管如此,“Dance Monkey”中重复单词的次数要比“Never Seen The Rain”的重复次数高得多。
  • 在构成歌词的单词中,只有不到一半的单词仅使用过一次。

7. 最后的想法

在进一步处理数据时,笔者发现一个非常有趣的现象,即标题中的两个单词是如何频繁使用的:“Dance”使用了19次,而“Monkey”在整首歌曲中仅使用了一次。

令人惊讶的是,用于创作歌词的单个单词的数量非常少(大约占15%-20%),其中约85%的单个词被重复使用以组成歌曲。

[[336006]]

图源:unsplash

做完这个项目,我几乎要被Dance Monkey这首歌洗脑了。同样的方法去试试探索你所喜爱的歌手,说不定能挖出他不为人知的创作习惯。

 

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2018-12-06 08:40:43

PythonR函数编程语言

2019-10-08 11:48:20

PythonGitHub程序员

2018-12-04 08:00:00

网络测量PerfSONAR网络性能

2012-03-27 09:36:59

编程语言

2023-09-05 14:15:03

AI音乐

2015-11-13 10:55:53

2022-09-04 15:40:39

JavaScrip状态模式软件

2009-02-01 14:34:26

PythonUnix管道风格

2018-04-19 10:20:19

机器学习神经网络音乐

2017-06-29 11:11:17

2018-05-13 21:34:00

Python妹子网页

2015-08-26 16:26:19

SQL

2024-03-25 08:18:31

2013-07-23 15:11:41

流行编程风格

2021-04-06 11:01:06

比特币加密货币去中心化

2020-09-25 08:40:02

Python开发网络

2019-12-26 09:28:34

TCPPython通信

2021-03-04 13:40:57

Python文件代码

2024-07-31 09:01:05

VSCode主题Dracula

2017-04-10 18:45:47

点赞
收藏

51CTO技术栈公众号