查看原文
其他

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

2017-02-06 crossin Crossin的编程教室

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


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


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


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

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


1. 样本


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



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


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


2. 统计方法


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


所以大体的思路是:

  1. 把一首歌的歌词按词划分。这里要用到分词库,下面会具体介绍下。

  2. 去除重复的词,得到这首歌的用词表。通过集合 set() 可以轻松做到。

  3. 把所有歌曲的用词合并到一起,统计出现次数。可以借助 collections.Counter 实现。

  4. 按照次数排序。由于 Python 的字典本身是无序的,所以使用 sorted 方法排序时还需要一点小技巧,详情可参见代码。


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


3. 分词库


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


项目地址:

https://github.com/fxsjy/jieba


安装方法:

pip install jieba


分词示例:

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的编程教室)中回复“赵雷”,可下载本篇源代码。






近期文章推荐阅读:

Python 爬虫爬取美剧网站

如何用 GUI 提高 python 程序的颜值?

个人开发者如何申请微信小程序

还你系统空间的 Python 小程序

今天,你抢到票了吗?

爆款游戏《贪吃蛇大作战》的 Python 实现

简单三步,用 Python 发邮件

NBA 举办编程马拉松 - 数据分析时代的到来

Python-Excel 模块哪家强?

想用 Python 做数据分析?先玩玩这个再说

用 Python 实现你的量化交易策略




Crossin的编程教室

crossincode.com

QQ 群:453300655

个人微信:crossin11

点击左下角“阅读原文”,查看更多学习资源

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存