zoukankan      html  css  js  c++  java
  • 五月天的线上演唱会你看了吗?用Python分析网友对这场线上演唱会的看法

    前言

    本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

    作者:CDA数据分析师

    豆瓣9.4分!这场线上演唱会到底多好看?

    首先让我们看到豆瓣上的数据:
    在这里插入图片描述
    截止到目前为止,五月天的这次线上演唱会共有10万余人进行了评价,目前豆瓣评分为9.4分,是非常高的成绩了。

    豆瓣评分分布

    在这里插入图片描述

    进一步分析可以看到,评论中有68.4%的人给出了满分5星,其次24.2%的人给出了4星。

    豆瓣评论词云图

    在这里插入图片描述

    豆瓣评论中大家都在说些什么呢?可以看到"太短"是大家的统一呼声,这样的演唱会一个小时实在是太短了,还有歌迷感叹到 “五月天的演唱会就像我的青春,猝不及防结束了。”与此同时"青春"、“感动”、"永远"等也是常出现的高频词。

    喜欢五月天的都是哪些人?

    那么喜欢五月天的都是哪些人呢?最后让我们看到五月天微博的粉丝画像,我们一共收集整理的微博评论和粉丝数据在去重后,分别是4288条和4213条。

    微博粉丝性别占比

    在这里插入图片描述

    首先在性别占比方面,五月天的粉丝中女歌迷是主力,占到了79.84%,男歌迷占比20.16%。

    微博粉丝地区分布

    在这里插入图片描述

    在粉丝分布方面,广东省是最多的位居榜首,其次身处海外的歌迷也不少,位居第二。北京、浙江、江苏分别位居三四五名。

    微博粉丝年龄分布

    在这里插入图片描述

    粉丝的年龄分布方面,不用想,90后妥妥的占到了绝大多数,占比高达71.11%。其次是00后,占比12.74,80后位居第三7.88%。粉丝中也不乏一些10后,占比4.81%。

    线上开唱1小时,3500万人在线同步观看

    我们整理分析了QQ音乐上五月天的评论数据,去重之后得到7126条样本。下面先看到结论:

    评论实时走势图

    在这里插入图片描述

    可以看到,在整体评论的实时走势图来看:关于五月天的评论留言在5月31日线上演唱会当天达到顶峰,之后逐步回落,趋于平稳。

    整体评论词云

    在这里插入图片描述

    那么评论中大家都在说些什么呢?

    看到整体评论的词云图,我们发现在当中"喜欢"、“希望”、"感动"都是出现频率特别高的词;还有就是"青春"这个词也多次出现,的确,尤其对于90后来说,五月天就是我们这一代人的青春记忆。

    同时关于本次线上演唱会也是讨论的焦点,比如"直播"、“现场”、"回放"等都被大家提及。与此同时,《知足》、《倔强》等歌也在评论中多次出现,这些也是最让人产生共鸣的歌曲。

    评论中关注成员对比

    在这里插入图片描述

    那么五月天的成员中,大家关注度最高的是哪位成员呢?没错,在这方面,阿信是毫无悬念的第一位。其他几位成员冠佑、怪兽、石头和玛莎的关注度就差不多了,平分秋色。

    阿信评论词云图

    在这里插入图片描述

    关于阿信的评论大家都在说些什么?看到词云图,最主要的就是"喜欢"、“希望”、表达歌迷对阿信的喜爱和美好祝愿的,其次还提到其他几个乐队成员,有意思的是提"前女友"的也特别多。

    评论关注歌曲对比

    在这里插入图片描述

    五月天的金曲实在是太多太多了,哪些歌曲是最受大家关注的呢?

    通过分析整理可以看到,提到最多的就是《突然好想你》了,然后就是《知足》《倔强》。除此之外,还有《我不愿让你一个人》《星空》《盛夏光年》等等,全都是耳熟能详的名曲。

    教你用Python分析,QQ音乐评论数据

    我们使用Python分别获取了QQ音乐五月天/TME live评论数据、豆瓣短评数据和微博乐高中国的评论和粉丝数据,进行了数据分析。此处展示QQ音乐评论分析部分关键代码,整体的分析流程如下:

    1. 评论数据获取
    2. 数据预处理
    3. 数据可视化分析

    1 数据获取

    首先,我们获取五月天/TME live的评论数据,地址如下:

    https://y.qq.com/n/yqq/mv/v/k0034mj6ty2.html

    通过分析网页可以发现,评论的数据是通过js进行动态加载的,使用chrome浏览器简单的抓包分析,得到真实的数据传输接口,通过精简网址并修改其中的pageSize参数即可得到所有的数据。

    在这里插入图片描述

    代码如下:

    # 导入包
    import pandas as pd 
    import time  
    import requests
    import json
    from faker import Factory 
    
    def get_qq_comment(page_num):
        """
        功能:传入页面数,获取QQ音乐评论数据。
        """
        # 存储数据
        df_all = pd.DataFrame()
    
        for i in range(page_num):
            # 打印进度
            print('我正在获取第{}页的信息'.format(i))
    
            # 获取URL
            url = 'https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg?g_tk_new_20200303=1516279237&g_tk=470981629&loginUin=2315561922&hostUin=0&format=json&inCharset=utf8&outCharset=GB2312&notice=0&platform=yqq.json&needNewCode=0&cid=205360772&reqtype=2&biztype=5&topid=k0034mj6ty2&cmd=8&needmusiccrit=0&pagenum={}&pagesize=25&domain=qq.com&ct=24&cv=10101010'.format(i)
    
            # 添加headers
            headers = {
                'user-agent': Factory.create().user_agent()
            }
    
            # 发起请求
            r = requests.get(url, headers=headers) 
    
            # 解析网页
            json_data = json.loads(r.text)
    
            # 获取数据
            comment_list = json_data['comment']['commentlist']
            # 昵称
            nick_name = [i.get('nick') for i in comment_list]
            # 评论内容
            content =  [i.get('rootcommentcontent') for i in comment_list]
            # 评论时间
            comment_time = [i.get('time') for i in comment_list]
    
            # 存储数据
            df = pd.DataFrame({
                'nick_name': nick_name,
                'content': content,
                'comment_time': comment_time
            })
    
            # 追加数据
            df_all = df_all.append(df, ignore_index=True)
    
            # 休眠一秒
            time.sleep(1) 
    
        return df_all
    
    if __name__ == '__main__':
        # 运行函数
        df = get_qq_comment(page_num=286)

    通过以上程序,获取到7127条评论数据。获取数据格式如下所示:

    df.head()

    在这里插入图片描述

    2 读入数据和数据预处理

    此处我们主要对以上获取的数据集进行整理和清洗。工作包含:

    1. 检查重复值和空值
    2. comment_time:将时间戳转换成标准的时间格式
    3. content:替换错误值
    # 导入所需包
    import numpy as np
    import re
    import jieba
    
    # 读入数据
    df = pd.read_excel('../data/五月天QQ评论数据6.05.xlsx')
    
    # 删除重复值
    df = df.drop_duplicates()
    
    # 转换函数
    def transform_time(time_second):
        time_array = time.localtime(time_second)
        otherStyleTime = time.strftime('%Y-%m-%d %H:%M:%S', time_array) 
        return otherStyleTime
    
    # 时间数据处理
    df['comment_time'] = df['comment_time'].apply(lambda x: transform_time(x))
    
    # content初步处理
    pattern = re.compile('[em](.*?)[/em]')
    df['content'] = df.content.str.replace(pattern, '')
    df.head() 

    在这里插入图片描述

    3 数据可视化分析

    接下来我们使用数据可视化库pyecharts进行以下的数据可视化分析,词云工具使用stylecloud库。

    # 导入库
    from pyecharts.charts import Pie, Bar, Map, Line, WordCloud, Page
    from pyecharts import options as opts
    from pyecharts.globals import SymbolType
    import stylecloud

    五月天QQ音乐评论日期走势图

    # 日期数量
    df['comment_time'] = pd.to_datetime(df['comment_time'])
    
    day_num = df.comment_time.astype('str').str.split(':').str[0].value_counts().sort_index()
    
    # 产生数据
    x1_line1 = [i.split('2020-')[1] for i in day_num.index.values.tolist()]
    y1_line1 = day_num.values.tolist()
    
    # 绘制面积图
    line1 = Line(init_opts=opts.InitOpts(width='1350px', height='750px'))
    line1.add_xaxis(x1_line1)
    line1.add_yaxis('', y1_line1,
                    markpoint_opts=opts.MarkPointOpts(data=[
                        opts.MarkPointItem(type_='max', name='最大值'),
                        opts.MarkPointItem(type_='min', name='最小值')
                    ])) 
    line1.set_global_opts(title_opts=opts.TitleOpts('五月天QQ音乐评论日期走势图'), 
                          xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate='90')),
                          visualmap_opts=opts.VisualMapOpts(max_=2000)
                         ) 
    line1.set_series_opts(label_opts=opts.LabelOpts(is_show=False), 
                          linestyle_opts=opts.LineStyleOpts(width=3))
    line1.render() 

    QQ音乐评论中关注歌手对比

    # 计数
    axin = df.content.str.contains('阿信|陈信宏').sum()  
    guaishou = df.content.str.contains('温尚翊|阿翊|怪兽|团长').sum()  
    shitou = df.content.str.contains('石锦航|石头').sum()  
    masha = df.content.str.contains('蔡升晏|玛莎').sum()  
    guanyou = df.content.str.contains('刘冠佑|冠佑|刘谚明|刘浩明').sum()  
    
    actor_list = ['阿信', '怪兽', '石头', '玛莎', '冠佑']
    actor_num = [int(axin), int(guaishou), int(shitou), int(masha), int(guanyou)]
    
    # 条形图
    bar1 = Bar(init_opts=opts.InitOpts(width='1350px', height='750px'))
    bar1.add_xaxis(actor_list)
    bar1.add_yaxis('', actor_num)
    bar1.set_global_opts(title_opts=opts.TitleOpts(title='QQ音乐评论中关注歌手对比'), 
                         visualmap_opts=opts.VisualMapOpts(max_=150),
                        ) 
    bar1.render()

    QQ音乐评论中关注歌曲对比

    # 歌曲名称
    music_list = ['一颗苹果', '盛夏光年', '孙悟空', '星空', '我不愿让你一个人',
    '派对动物', '离开地球表面', '突然好想你', '爱情的模样', '恋爱ing',
    '知足', '诺亚方舟', '倔强']
    
    music_num = [int(df.content.str.contains(pattern).sum()) for pattern in music_list]
    
    # 创建df
    df_music = pd.DataFrame({
        'music_name': music_list,
        'music_num': music_num
    }).sort_values('music_num', ascending=True) 
    
    # 条形图
    bar2 = Bar(init_opts=opts.InitOpts(width='1350px', height='750px'))
    bar2.add_xaxis(df_music.music_name.values.tolist())
    bar2.add_yaxis('', df_music.music_num.values.tolist()) 
    bar2.set_global_opts(title_opts=opts.TitleOpts(title='QQ音乐评论中关注歌曲对比'), 
                         visualmap_opts=opts.VisualMapOpts(max_=307),
                        )
    bar2.set_series_opts(label_opts=opts.LabelOpts(position='right'))
    bar2.reversal_axis()
    bar2.render() 

    QQ评论整体词云图

    stylecloud.gen_stylecloud(text=' '.join(text_all),  # text需要是str类型
                              max_words=1000,
                              collocations=False,
                              font_path=r'‪C:WindowsFontsmsyh.ttc',
                              icon_name='fas fa-comments',
                              size=768,
                              output_name='QQ音乐评论整体词云图.png'
                             )
  • 相关阅读:
    对 Service中sqlsession对象的优化
    mybatis 接口绑定 和 动态SQL
    添加指定的日志信息
    数据库优化
    MyBatis 实现新增
    MyBatis中log4j 和 参数 和 分页和别名 功能
    OpenGL_混合
    android应用开发揭秘第13章01示例,移动图像,opengl绘制星星问题解决!
    《关于个人承接项目的注意事项》读后感
    Android OpenGL ES教程 第二部分 构建多边形
  • 原文地址:https://www.cnblogs.com/hhh188764/p/13054595.html
Copyright © 2011-2022 走看看