首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >周杰伦在唱什么?数据可视化告诉你!

周杰伦在唱什么?数据可视化告诉你!

作者头像
博文视点Broadview
发布于 2023-04-04 02:19:55
发布于 2023-04-04 02:19:55
81300
代码可运行
举报
运行总次数:0
代码可运行

👆点击“博文视点Broadview”,获取更多书讯

本案例中的歌词数据来自中文歌词数据库。

这个数据库提供了华语歌手的歌曲及歌词信息,数据以 JSON 格式存储。

为了尽量完整地呈现从原始数据到可视化的过程,接下来我们会先简单讲解数据的预处理过程,即如何将 JSON 数据转化为Excel 格式,以及如何对周杰伦的歌曲进行分词。

若你希望跳过数据预处理的过程,也可以在《数据可视化设计指南:从数据到新知》一书的下载文件中,直接使用分好词的 Excel 文件进行可视化练习。

数据预处理指的是将原始数据处理成我们希望的格式,并提取出我们需要的信息。

在本案例中,我们需要先从数据库中筛选出演唱者为周杰伦的歌曲,然后获得这些歌曲的歌词,并将它们存储到纯文本文档(.txt 格式)中。以下提供两种方法。

第一种方法,先把 JSON 文件转换为 Excel 可以打开的 .csv 文件或 .xlsx 文件格式。这可以借助一些在线的转换工具完成(如 JSON to CSV Converter)。一般而言,只需将文件拖入这些工具,选择好转换格式类型,即可转换完成。接着,我们便可以在 Excel 中打开该数据,然后单击“数据→筛选”命令,选择歌手为“周杰伦”的歌曲。之后,选中它们的歌词,并将其粘贴到纯文本文档中。

第二种方法,通过 Python 进行数据预处理。代码如下。

首先,需要引入 JSON 库(未安装者通过 pip install json 安装)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import json

然后,读取我们下载的 JSON 文件,存储在名为 data 的变量中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with open(‘ lyrics.json’ , ‘ r’ ) as f:data = json.load(f)

接着,遍历 data 中的每一项,找出“歌手”=“周杰伦”的数据项,存到data_zjl 中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data_zjl = [item for item in data if item[‘ singer’ ]==’ 周杰伦’ ]print(len(data_zjl))

建立一个空列表 zjl_lyrics,用于存储歌词。遍历 data_zjl 中的每一首歌,将它们的歌词存到 zjl_lyrics 中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Zjl_lyrics = []for song in data_zjl:zjl_lyrics = zjl_lyrics + song[‘ lyric’ ]

最后将 zjl_lyrics 写入一个新的 .txt 文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with open(“ zjl_lyrics.txt” , “ w” ) as outfifile:outfifile.write(“ \n” .join(zjl_lyrics))

通过这几行代码,我们就获得了周杰伦所有歌曲的歌词数据(见图1)。以这个 .txt 文件为基础,我们便可以进行词频统计了。

图1

以下附上一种在 Python 中分词的方法。首先引入 jieba 库(安装 :pip install jieba)、pandas 库(安装 :pip install pandas)、用于频次统计的 Counter 库,以及表单工具,代码如下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import jiebaimport jieba.analyseimport pandas as pdfrom collections import Counter

事先准备好一个中文的停用词表(.txt 文件,里面包含一些常见的、需要过滤的中文标点和虚词,可在网上下载),代码如下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with open(‘ chinese_stop_words.txt’ ) as f:stopwords = [line.strip() for line in f.readlines()]

打开歌词文件,利用 jieba 库进行分词。分词之后,删除停用词、去除无用的符号等。用 Counter 库对清洗干净的词语进行频次统计。然后将统计结果用 pandas库转换为数据表单,存储为 Excel 文件,代码如下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fifile = open(“ zjl_lyrics.txt” ).read()words = jieba.lcut(fifile, cut_all=False, use_paddle=True)words = [w for w in words if w not in stopwords]words = [w.strip() for w in words]words = [w for w in words if w != ‘ ’ ]words_fifilter = [w for w in words if len(w) > 1]df = pd.DataFrame.from_dict(Counter(words_fifilter), orient=’ index’ ).reset_index()df = df.rename(columns={‘ index’ :’ words’ , 0:’ count’ })df.to_excel(“ 周杰伦分词结果 .xlsx” )

由此,我们便获得了分词后的单词及词频(见表1)。使用这个文档,我们就可以开始制作可视化了。

表1

由于是文本类数据,我们首先想到的可视化形式可能是文字云。如果你使用 Python,则可以直接基于刚才的分析结果,调用wordcloud库绘制文字云,代码如下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from wordcloud import WordCloud# 注 :这里需要引入一个中文字体,否则会乱码wc = WordCloud(font_path = ‘ Alibaba-PuHuiTi-Regular.ttf’ ,background_color=” white” ,max_words = 2000)wc.generate(‘ ‘ .join(words_fifilter))import matplotlib.pyplot as pltplt.imshow(wc)plt.fifigure(fifigsize=(12,10), dpi = 300)plt.axis(“ off” )plt.show()

绘制结果如图2所示。

图2

不过,在代码工具内绘制文字云,进行定制化设计相对比较复杂。因此,也可以借助一些在线工具帮助我们实现更好的可视化效果。

目前,许多中文的工具都可以专门用来制作文字云,如微词云、易词云、图悦等(相关总结可参考知乎专栏的一篇文章《词频统计工具哪家强,对比 8 款工具得出了结果》)。下面,我们以微词云为例进行演示。

进入微词云界面后,首先单击“导入单词”,进行数据导入。选择“从 Excel 中导入关键词”,然后上传我们刚才得到的包含单词和词频的 Excel 文档(需要注意的是,微词云目前对上传的 Excel 文件格式有一定要求,比如,列名必须叫“单词”和“词频”才能识别,详见其页面指引),即可生成文字云(见图3)。

图3

可以看到,微词云的页面上还有另外两种导入数据的选项。其中,“简单导入”支持用户输入用逗号隔开的单词。“分词筛词后导入”则支持用户粘贴长文本,然后由系统自动进行分词和词性判别。换句话说,如果你有一个文档文件,也可以直接粘贴进微词云进行分词。

接下来我们用周杰伦的歌词文档来尝试一下。选择“分词筛词后导入”,然后将图1 的 .txt 格式的文档粘贴进微词云。之后,单击“开始分词”,软件就会自动把词语切割出来,并按词性归类,结果如图4所示。

图4

可以看到,所有的词语被按照动词、名词、形容词、人名等归类。词语后面的括号标注了词频。同时,微词云还自动帮我们把高频的词汇勾选出来。我们也可以根据个人需求,在这个界面中进一步编辑,例如只显示名词、只显示动词等,然后单击“确定使用所选单词”按钮,即可生成词云。

之后,我们可以在“配置”栏中编辑词云的显示方式。其中,“计算模式”指的是字体的大小是否严格与词频匹配,因此我们选择“严格比例”。另外,我们还可以更改文字的颜色,以及文字云中单词的数量等。在本案例中,我们把单词数量调整到 200(见图5)。调整完毕后,单击右上角的“下载到本地”按钮即可。

图5

在左侧编辑区的“形状”中,可以替换词云的蒙版。其中既有内置的一些矢量形状, 也可以上传自己的图片(见图6,笔者上传了一张周杰伦的素材图片)。

图6

当然,虽然词云在视觉上比较有趣,但在展示数据上却不一定清晰。因此,我们也可以使用其他的图表来进行可视化。比如,可以用圆面积来展示最高频的词汇。

图7 是使用 AI 工具绘制的。首先,我们在“图表工具”中选择“饼图”,按竖直方向将数据粘贴进去,单击“确定”按钮,即可生成对应面积的一系列圆形。

图7

然后,选中所有圆形,取消分组,即可对它们进行单独编辑。之后,我们分别为它们加上文字,并调整颜色、背景等,即可得到一幅圆面积图。

以上,我们讲解了使用 Python 分词和使用在线工具分词的两种方法。

需要提醒的是,不同的分词途径,分词的结果可能不同(尤其是在语句比较复杂、生僻的情况下)。

因此,对分词质量比较看重的读者有必要对比不同方法分词的效果,选择最优的方案。

本文节选自《数据可视化设计指南:从数据到新知(全彩)》一书,欢迎阅读本书了解更多精彩内容。

限时五折优惠,快快扫码抢购吧!

参与抽奖

免费获赠本书

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
发布:刘恩惠
审核:陈歆懿 

如果喜欢本文欢迎 在看丨留言丨分享至朋友圈 三连<  PAST · 往期回顾  >
【值得收藏】9种让你受益终身的数据分析思维

点击阅读原文,查看本书详情!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 博文视点Broadview 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python 万能代码模版:数据可视化篇
上一篇,我写了:Python 万能代码模版:爬虫代码篇 接下来,是第二个万能代码,数据可视化篇。
AI悦创
2021/09/18
2.2K0
Python 万能代码模版:数据可视化篇
基于jiebaR包的周杰伦歌词文本挖掘分析
虽然是听了十几年的周杰伦,各种周氏情歌和中国风也算信手拈来,但昨天把13张专辑和十几首单曲的歌词整理成规范的txt文档也着实花了不少时间,这篇文章没做多少深度的分析,只是用杰伦的歌词基于jiebaR包做了简单的分词并用wordcloud2包做了几个词云图,在NLP和文本挖掘领域目前了解不多,但还是胡适那句话:“怕什么真理无穷尽,有一寸得一寸的欢喜!”
IT阅读排行榜
2018/08/16
8730
基于jiebaR包的周杰伦歌词文本挖掘分析
基于char-rnn和tensorflow生成周杰伦歌词
这个有趣的项目,具体就是基于字符预测下一个字符,比日说已知hello的前四个字母hell,那我们就可以据此预测下一个字符很可能是o,因为是字符char级别的,并没有单词或句子层次上的特征提取,相对而言比较简单易学。
机器学习AI算法工程
2019/10/28
8400
基于char-rnn和tensorflow生成周杰伦歌词
无题
1 月 9 号张小龙在微信之夜上演讲了近 4 个小时,第二天就一堆文字稿出现了,接着是下面这一张图被大量转发
伪君子
2019/03/01
4320
无题
用Python绘制词云:让数据可视化变得生动有趣
导读:你是否曾想过,如何将一堆枯燥的数据转化为一幅幅引人入胜的视觉艺术品?词云,作为一种流行的数据可视化技术,能够将文本数据中的关键词以不同大小和颜色呈现,直观地展示信息的密度和重要性。在本文中,我们将探索如何使用Python——一种强大而灵活的编程语言——来绘制出既美观又富有洞察力的词云图。
三猫
2024/06/26
5500
用Python绘制词云:让数据可视化变得生动有趣
用Python分析周杰伦6.5W字的歌词,原来他是这样的人
一、准备歌词素材 歌词选择:杰伦至今的所有专辑(从最开始的<JAY>到最新的<周杰伦的床边故事>) 由于爬虫木有学会,就只能手动收集歌词。经过一系列的 google、baidu,终于找到别人整理好的歌
AI研习社
2018/03/28
1.7K0
用Python分析周杰伦6.5W字的歌词,原来他是这样的人
分析完吴亦凡的所有歌曲,我震惊了
我写了一个代码,从QQ音乐上收集了吴亦凡所有的歌词信息,自动汇总整理成一个txt文件,代码在下面:https://github.com/godweiyang/lyric-crawler
godweiyang
2021/08/12
2.3K0
分析完吴亦凡的所有歌曲,我震惊了
分析为周杰伦打榜的夕阳红老年团,告诉你他们真实年龄!
因为cxk的粉丝们质疑周杰伦微博没有数据 (周杰伦没有开通微博) 于是,无数隐匿江湖多年 看不下去的周杰伦老年粉开始被迫营业
xujjj
2019/08/06
1.1K0
Python 词云分析周杰伦新歌《说好不哭》
周杰伦难得出新歌 ,最近终于推出了单曲《说好不哭》,然后直接把QQ音乐服务器干崩了,天王的实力可见一斑,QQ音乐还把这个当作 今天过年
苏生不惑
2019/10/30
8300
Python 词云分析周杰伦新歌《说好不哭》
那些年,我们追过的周杰伦
很早之前写了个网易云音乐的爬虫,准备把网易云音乐的所有歌曲信息和评论信息抓下来,但是爬虫开始工作不到一天,服务器就被网易云音乐给ban了>_<…然后爬虫就这么被搁置了。
尾尾部落
2018/09/04
8940
那些年,我们追过的周杰伦
Python带你看不一样的《青春有你2》小姐姐之评论内容可视化
详细介绍和用法可以去github看:https://github.com/fxsjy/jieba,这里不多做介绍,只介绍本次用到的
极简小课
2022/06/27
6090
Python带你看不一样的《青春有你2》小姐姐之评论内容可视化
【致敬周杰伦】基于TensorFlow让机器生成周董的歌词(附源码)
周杰伦 深深地 影响了我们 一代人 这句话 不足为过 前言 今日推文将介绍如何使用TensorFlow一步步来搭建一个序列建模的应用——机器创作歌词,训练样本是周杰伦出道以来的所有歌曲的歌词,文末生成
量化投资与机器学习微信公众号
2018/01/29
4K0
【致敬周杰伦】基于TensorFlow让机器生成周董的歌词(附源码)
如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化展示
大前天我们通过Python网络爬虫对朋友圈的数据进行了抓取,感兴趣的朋友可以点击进行查看,如何利用Python网络爬虫抓取微信朋友圈的动态(上)和如何利用Python网络爬虫爬取微信朋友圈动态——附代码(下)。今天小编带大家通过词云去将其进行可视化,具体的教程如下。
Python进阶者
2018/08/03
5240
如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化展示
分析周杰伦75775字歌词后,我们用他最爱的词重写了《说好不哭》
有人觉得,听着这首歌,仿佛自己的青春岁月回来了,说好不哭,可还是哭了下来,那个周杰伦又回来了!
IT阅读排行榜
2019/10/15
7550
分析周杰伦75775字歌词后,我们用他最爱的词重写了《说好不哭》
数据可视化有意思的小例子:Taylor Swift 歌词数据分析和可视化
Data Visualization and Analysis of Taylor Swift’s Song Lyrics
用户7010445
2020/03/03
1.2K0
数据可视化:认识WordCloud
wordcloud是优秀的词云展示的第三方库,我们可以借助wordcloud轻松实现词云图。使用Wordcloud之前需要先了解它的以下几个特点:
马拉松程序员
2023/09/02
7630
数据可视化:认识WordCloud
手把手教你对抓取的文本进行分词、词频统计、词云可视化和情感分析
前几天星耀群有个叫【小明】的粉丝在问了一道关于Python处理文本可视化+语义分析的问题,如下图所示。
Python进阶者
2022/03/09
3K1
手把手教你对抓取的文本进行分词、词频统计、词云可视化和情感分析
手把手教你用Pyecharts库对淘宝数据进行可视化展示
大家好,我是Python进阶者,上个礼拜的时候,我的Python交流群里有个名叫程序的大佬,头像是绿色菜狗的那位,在Python交流群里边的人应该都知道我说的是哪个大佬了,他提供了一份初始淘宝数据,数据乍看上去非常杂乱无章,但是经过小小明大佬的神化处理之后,一秒就变清晰了,真是太神了,然后就有了后续的数据分词处理和可视化等内容了,可能群里的人平时工作太忙,没有来得及看群消息,作为热心的群主,这里给大家整理成一篇文章,感兴趣的小伙伴,可以去实操一下,还是可以学到很多东西的。言归正传,一起来学习下今天的数据分析内容吧。
Python进阶者
2021/08/27
7110
python数据可视化——词云
词云百度百科:“词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨
Python知识大全
2020/02/13
1.5K0
python数据可视化——词云
爬虫(106)pymongo 存储周杰伦歌曲信息
我们打开qq音乐的网址:https://y.qq.com/ 然后输入 周杰伦, 点击搜索; 再打击歌词那一项,F12打开控制台,打开如下:
公众号---人生代码
2020/05/16
7770
推荐阅读
相关推荐
Python 万能代码模版:数据可视化篇
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验