51

玩转词云 | 天王刘德华歌词可视化,没有那么难!

 5 years ago
source link: http://www.10tiao.com/html/314/201806/2672940967/1.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.



刘德华(Andy Lau),1961年9月27日生于香港新界,祖籍广东江门,香港非官守太平绅士衔,香港特别行政区荣誉勋章佩戴者,中国残疾人福利基金会副理事长,亚洲新星导计划的发起人。大中华区乐坛和影坛巨星,华人娱乐圈影、视、歌综合发展最成功的代表性人物之一。1985年发行首张个人专辑《只知道此刻爱你》。1990年凭借专辑《可不可以》在歌坛获得关注。1994年获得十大劲歌金曲最受欢迎男歌星奖 。1995年在央视春晚上演唱歌曲《忘情水》。2000年被《吉尼斯世界纪录大全》评为“获奖最多的香港男歌手”。2004年第六次获得十大劲歌金曲最受欢迎男歌星奖。2016年参与填词的歌曲《原谅我》正式发行。


        天王刘德华一直是不老男神,娱乐圈常青树。先来看看百度指数,通过百度指数我们看出,近7年一直很平稳,可以说相当低调。只有在2014年底有一个小高峰,因为参加了湖南卫生的跨年演唱会的原因把。




再来看一下微信指数,基本和百度指数一样,没有什么大的起伏。


     


    从上面的指数,可以看出天王刘德华近几年非常的低调。但是刘德华绝对称得上是娱乐圈里最早的鲜肉级别的明星了,当年华仔帅气的模样也可谓是惊艳了整个娱乐圈啊!出道多年,往常身价早已过10亿。他在业界口碑不断很好,敬业、爱国。很多人肯定以为,天王的父母过着奢华的生活,但是华仔的父母朴实到如同所有的老年人一样,任凭岁月的自然老去,也不曾因为自己的儿子是大明星而显示出任何特殊。小编也终于明白为什么华仔在娱乐圈这么多年了,依旧那么低调尽责,父母给予的教育也有很大的原因啊!


了解了这些以后,我们切换到今天的主题,天王刘德华的歌词可视化。数据可视化的方法有很多种,比如折线图、饼图、数据透视表等。今天我们主要说一下利用词云可视化。


环境



环境:MAC + Python3.6
IDE:Spyder
模块: jieba、wordcloud、matplotlib、 scipy、 pandas  numpy 

    

明确任务与数据收集



做任何事情都要有个目标 ,数据分析也不例外。数据分析的第一步就是明确分析任务,然后根据目的来梳理分析思路、并搭建分析框架。本次的分析任务就是词云可视化天王刘德华的歌词。

 

数据收集是按照确定的数据分析框架,收集相关数据的过程,它为数据分析提供了素材和依据。一般的数据来源主要是数据库、公开出版物、互联网、市场调查等。本次的数据来源主要是互联网查看Andy歌词,收集到一个命名为andy.txt的文件,然后利用python中的open函数打开,它接受一个路径名(可以使用绝对路径)。你还可以收集任何你喜欢的明星的歌词来分析,只要数据源不一样,可视化的结果就不一样。要不要尝试可视化一下你喜欢的明星?


具体代码如下:

     

def open_andy():
   """
       step 1: 数据收集
   """

   #读取文本文件
   andy = open('/Users/yoni.ma/Documents/python_l/scraping/Andy/andy.txt').read()
   print(andy)
   return andy



数据处理与分析


数据处理是指对收集到的数据进行加工整理,形成适合数据分析的样式,他是数据分析前必不可少的阶段,主要包括数据清洗、数据转化、数据提取、数据计算等处理方法。

数据分析是指用适当的分析方法以及工具,对处理过的数据进行分析,提取有价值的信息,形成有效结论的过程。

在本次的可视化任务中,小编主要是用的是结巴包(jieba),它是一个内置库,直接可以使用,不需要按照。它主要用于中文文本切词,如果碰到英文单词,也会以英文的默认形式切分。按照精度不同,分为三种模式式,结巴分词分为三种模式:精确模式(默认)、全模式和搜索引擎模式(精度从低到高)。本次使用的是全模式。在切分以后,也可以进行词频分析。


具体代码如下:


def analyze_andy(data_andy):
   """
       step 2 and 3 : 数据处理与分析
   """



   #全模式,把文本分成尽可能多的词
   #cut_andy = jieba.cut(data_andy,cut_all = True)

   cut_andy = jieba.lcut(data_andy)
   #返回的是一个生成器
   print(type(cut_andy))
   #打印输拆分后的结果
   #print(','.join(cut_andy))

   # 按照空格拆分歌词
   wc_andy = " ".join(cut_andy)

   #打印输拆分后的结果
   print(wc_andy)
   return wc_andy


   #词频统计


   words_df = pd.DataFrame({'wc_andy':wc_andy},index=[0])

   print (words_df)

   words_stat = words_df.groupby(by=['wc_andy'])['wc_andy'].agg({"计数":numpy.size})
   words_stat = words_stat.reset_index().sort_values(by=["计数"],ascending=False)

   print(words_stat)
   word_frequence = {x[0]:x[1]for x in words_stat.head(10000).values}
   print(word_frequence)

   word_frequence_dict = {}
   for key in word_frequence:
       word_frequence_dict[key] = word_frequence[key]
       print(word_frequence_dict[key])

   print(word_frequence_dict)



数据展现


数据是通过表格和图形的方式呈现出来,常用的数据图表有饼图、柱状图、条形图、折线图、雷达图等。但是今天我们主要是使用python里面的词云包来展示,也就是wordcloud. 使用执行必须先安装:

具体安装方法如下:

安装模块 wordcloud:

方法1: pip install wordcloud

方法2: 下载Packages安装:pip install 软件包名称

软件包下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud

注意:要把下载的软件包放在Python安装路径下。

    

为了能让词云显示中文,你需要下载一个中文字体,simhei.ttf,让后放在当前工作目录下面。为了能使的生成的词云好快,你可以根据指定的图片生成,主要是使用imread方法完成。在指定词云的属性时候,指定背景图片即可,也就是mask 的值为你的图片名。有时候为了能避免不必要的词在词云中展示,你可以使用STOPWORDS.add("流泪")把词去掉,比如去掉眼泪。


词云属性设置完成以后,就是使用matplotlib模块进行展示词云了。


具体代码如下:


def show_andy(analyze_data):
   """
       step 4: 数据处理
   """
   
   # 设置词云属性
   color_mask = imread('andy2.jpeg')
   wc_andy = WordCloud(
           #设置中文字体,否则出现乱码
           font_path ="simhei.ttf",
           #设置背景颜色
           background_color = 'white',
           #设置背景图片
           mask = color_mask,
           #设置图片默认的大小,如果使用背景图片
           width = 1500,height =860,margin=2,

           stopwords=STOPWORDS.add("流泪"),
           #词云显示的最大词数
           max_font_size=100,
           #设置词云显示的最小词数
           min_font_size=0,

           random_state=42,
           )
   #产生词云
   wc_andy.generate(analyze_data)


   #wc_andy.generate_from_frequencies(analyze_data)

    # 从背景图片生成颜色值  
   image_colors = ImageColorGenerator(color_mask)

   # 重新上色
   wc_andy.recolor(color_func=image_colors)

   #保存图片
   wc_andy.to_file("andy.png")

   #保存图片
   plt.figure("andy")

   #显示图片
   plt.imshow(wc_andy)

   #关闭图像坐标系
   plt.axis("off")
   plt.show()


效果展示



根据刘德华的背景图生成的词云


根据Alice的图生成词云




关于天王刘德华的歌词可视化就到这了,关于刘德华你有什么想说的,发信给小编吧。

感谢您的阅读。

转自:人工智能与大数据生活(data_circle)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK