数据分析:当赵雷唱民谣时他唱些什么?

news/2024/7/19 9:53:00 标签: python, 爬虫

赵雷的一曲《成都》,成为了湖南卫视知名飙高音节目《歌手》里的一股清流。

《歌手》纯享:赵雷《成都》

这个几年前在 live house 里被粉丝喊着“赵雷不红,天理不容”的民谣歌手,终于大众市场上火了一把。

作为一个名老粉丝,我也倍感欣慰。(虽然以后的现场票价估计要更贵了)

所以今天,决定不按常理地来一发安利:

利用 Python 分词,分析下赵雷的歌里到底写了什么?

1. 样本

赵雷公开发行的三张专辑《无法长大》、《吉姆餐厅》、《赵小雷》和单曲《再也不会去丽江》,共 32 首。

这些歌词可以通过爬虫脚本从音乐网站上抓取,不过因为只有 32 首,不算太多,我就偷懒直接手动复制到了本地文件中。

虽然还有些很不错的未收录歌曲,比如我个人非常喜欢的《飞来飞去》,但这次不纳入统计。

2. 统计方法

我的目的是要看一看赵雷的歌曲里,哪些词出现的次数最多,以此对赵雷的歌曲风格管中窥豹。当然,同一首歌中出现多次的词,只能算作一次,不然像“北京”这种在副歌中反复出现的词就不得了了。

所以大体的思路是:

  1. 把一首歌的歌词按词划分。这里要用到分词库,下面会具体介绍下。
  2. 去除重复的词,得到这首歌的用词表。通过集合 set() 可以轻松做到。
  3. 把所有歌曲的用词合并到一起,统计出现次数。可以借助 collections.Counter 实现。
  4. 按照次数排序。由于 Python 的字典本身是无序的,所以使用 sorted 方法排序时还需要一点小技巧,详情可参见代码。

在公众号(Crossin的编程教室)中回复“赵雷”可获取代码及统计样本。

3. 分词库

使用“结巴中文分词”。这是个效果不错、使用方便的 python 中文分词库,强烈推荐。

项目地址:

fxsjy/jieba

安装方法:

pip install jieba
复制代码

分词示例:

python copyable">seg_list = jieba.cut("我来到北京清华大学")
print("/ ".join(seg_list))
复制代码

输出:

我/ 来到/ 北京/ 清华大学
复制代码

4. 结果

经过分词、去重、计数、排序后,得到了频率最高的一些词。去掉没有太多特殊意义的助词、代词、介词、连词等虚词,以及“走”、“想”这种十分普遍的动词,剩下值得关注的热词有(后面的数字为该词出现的歌曲数):

生活 10
衣裳 10
笑 8
阳光 8
青春 8
月亮 8
寂寞 7
无法 7
车 7
离开 7
时光 7
时间 7
永远 6
沉默 6
世界 6
她 6
谁 6
自己 6
孩子 6
看到 6

果真是歌如其人。从这些词,仿佛就拼出一个:外表“沉默”,内心热爱“生活”,白天晒“阳光”,晚上晒“月亮”,“寂寞”时候常常回味起往日“青春”“时光”的大“孩子”。

不过我没料到,赵雷是有多喜欢“衣裳”……

over:穿着你送的衣裳
再也不会去丽江:别给性穿上爱情的衣裳
北京的冬天:北京的冬天太冷我没有足够的衣裳过冬
南方姑娘:阳光里她在院子中央晾晒着衣裳
吉姆餐厅:穿上那件未见过太阳的新衣裳
孤独:却只有你洗净叠好的衣裳 放在我枕旁
家乡:就像一件俗气的衣裳
朵:若她只是件衣裳 那我就没有必要隐藏欲望
窑上路:那时树影下的母亲在为我缝补衣裳
赵小雷:他捋捋头发换上新的衣裳要出门去

生活”也是赵雷歌曲中一个重要的主题:

over:我要创造新的生活,和你重新来过,
三十岁的女人:是不是一个人的生活 比两个人更快活
人家:生活简单的就像是一块石子
八十年代的歌:我想过平常人的生活
无法长大:爱情是否能解除生活的狼狈
未给姐姐递出的信:生活一下子变得冷清
梦中的哈德森:我每天面对着同样的生活没有变化
民谣:歌是生活 歌是纯真
理想:又让我沉入失望的生活里
赵小雷:生活要自己为自己创造惊喜

反倒通常流行歌曲中常常出现的“爱”、“喜欢”等词,在赵雷的歌曲中有着更含蓄的表达。

或许这也是为什么如今越来越多人喜欢赵雷的原因:真实、接地气,好像是邻居家的朋友,对你把他的故事娓娓道来。因为正如他歌里所唱,他坐着火车走南闯北,然后回到一间十四五平米的北京小院里,写下了这些歌曲,掺杂着浓浓的生活气息。


公众号(Crossin的编程教室)中回复“赵雷”,可下载本篇源代码。



其他文章及回答:

学习编程的过程中可能会走哪些弯路,有哪些经验可以参考? - Crossin 的回答

你是如何自学 Python 的? - Crossin 的回答

爆款游戏《贪吃蛇大作战》的 Python 实现 - Crossin的编程教室 - 知乎专栏

想用 Python 做数据分析?先玩玩这个再说 - Crossin的文章 - 知乎专栏

Crossin的编程教室

微信ID:crossincode
论坛:Crossin的编程教室


http://www.niftyadmin.cn/n/975442.html

相关文章

冰释前嫌——转入Android Studio与连接手机无法识别问题

前言:曾有段时间被ASgradle虽紧密结合却依然搞不定联网依赖的模样弄的头疼,尝试了各种改代理、改配置均无果,于是坚守Eclipse进行开发学习,结果一方面受制于gradle Android项目的铺天盖地(Eclipse对gradle支持并不好&a…

JavaScript—数组(17)

数组 数组是值的有序集合,每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引。 JavaScript数组的索引是基于零的32位数值,第一个元素索引为0,数组最大能容纳4294967295(即2…

Django2.2 学习笔记 (3)_配置mysql和model

1、新建数据库 ps1:注意字符集和排序规则的选择 ps2:不用新建任何表 2、配置settings.py里的database ########在setting原来默认的sqlite DATABASES {default: {ENGINE: django.db.backends.sqlite3,NAME: os.path.join(BASE_DIR, db.sqlite3),} } …

SnapChat 明年上市,现在正做这些准备工作

阅后即焚应用 Snapchat 背后的公司明年要准备上市了。 今天的消息是,Snap 最近正准备 IPO 相关材料,计划于今年年底或迟至明年三月,向美国证券监管机构递交上市申请。它们计划上市募集 40 亿美元资金,谋求公司达到 250 - 350 亿的…

《视觉SLAM十四讲》笔记(ch12)

ch12——回环检测 主要目标:1.理解回环检测的比要性 2.掌握基于词袋的外观式回环检测 3.通过DBoW3的实验,学习词袋模型的实际用途 SLAM主体(前端[提供特征点的提取和轨迹、地图的初值]和后端[负责对所有这些数据进行优化])主要目的…

Django2.2 学习笔记 (4)_model增删改查

1、在views.py文件中更改代码 from django.shortcuts import render# Create your views here. from apps.message_form.models import Message# 官方文档 # https://docs.djangoproject.com/zh-hans/2.2/ref/models/querysets/ # queryset to json # https://www.cnblogs.com…

python如何在一个for循环中遍历多个列表

推荐使用python内置函数zip,它可以将x个y维列表变成一个zip对象,将zip对象拆包可以发现它变成了y个x维元组。我们还可以将这个对象变成一个元组或列表。如下所示: 如果是两个列表的zip,我们还可以将其变成字典形式。 下面是一个小…

Java程序员使用哪些大数据开发工具?

这是作者在另一个帖子中发布的一项近期调查结果,调查为作者询问一些Java程序员,其在12个月内使用了什么框架开发工具。本次调查中覆盖了大数据工具。 以下是调查所覆盖的主题: 1、语言 2、Web框架 3、应用服务器 4、SQL数据访问工具 5、SQL数…