前言

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

作者: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='')),
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:\Windows\Fonts\msyh.ttc',
icon_name='fas fa-comments',
size=768,
output_name='QQ音乐评论整体词云图.png'
)

五月天的线上演唱会你看了吗?用Python分析网友对这场线上演唱会的看法的更多相关文章

  1. Python 分析后告诉你闲鱼上哪些商品抢手?

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:[Airpython] PS:如有需要Python学习资料的小伙伴可以 ...

  2. 预备知识-python核心用法常用数据分析库(上)

    1.预备知识-python核心用法常用数据分析库(上) 目录 1.预备知识-python核心用法常用数据分析库(上) 概述 实验环境 任务一:环境安装与配置 [实验目标] [实验步骤] 任务二:Pan ...

  3. 2021 .NET 开发者峰会顺利在网上落幕,线上直播回看汇总

    .NET Conf China 2021 是面向开发人员的社区峰会,基于 .NET Conf 2021的活动,庆祝 .NET 6 的发布和回顾过去一年来 .NET 在中国的发展成果展示,它是由中国各地 ...

  4. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! 是否有一个全局视角来查看系统的运行状况? 有什么办法可以监控到JVM的实时运行状态?

    https://alibaba.github.io/arthas/ Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决 ...

  5. 4张图看懂delphi 10生成ipa和在iPhone虚拟器上调试(教程)

    4张图看懂delphi 10生成ipa和在iPhone虚拟器上调试(教程) (2016-02-01 03:21:06) 转载▼ 标签: delphi ios delphi10 教程 编程 分类: 编程 ...

  6. 零元学Expression Blend 4 - Chapter 37 看如何使用Clip修出想要的完美曲线(上)

    原文:零元学Expression Blend 4 - Chapter 37 看如何使用Clip修出想要的完美曲线(上) 几何外部的 UIElement 会在呈现的配置中以视觉化方式裁剪. 几何不一定要 ...

  7. Python分析离散心率信号(上)

    Python分析离散心率信号(上) 一些理论和背景 心率包含许多有关信息.如果拥有心率传感器和一些数据,那么当然可以购买分析包或尝试一些可用的开源产品,但是并非所有产品都可以满足需求.也是这种情况.那 ...

  8. 4.总结近5周以来的github上的工作情况,以图表方式分析你小组的工作情况、存在的问题及解决的方案。(尤心心)

    4.总结近5周以来的github上的工作情况,以图表方式分析你小组的工作情况.存在的问题及解决的方案. (1)利用github本身的graphs可以清晰的看出小组成员在github上面的交互,可以直接 ...

  9. python经典书籍必看:流畅的Python

    作者:熊猫烧香 链接:www.pythonheidong.com/blog/article/26/ 来源:python黑洞网 目标读者 本书的目标读者是那些正在使用 Python,又想熟悉 Pytho ...

随机推荐

  1. python3.x 基础四:生成器与迭代器

    1.预先存值到内存,调用之前已经占用了内存,不管用与不用,都占用内存 >>> a=[1,2,3,4,5] >>> type(a) <class 'list'& ...

  2. dubbo分布式应用

    dubbo介绍: dubbo是一款分布式服务框架,支持高性能和透明化的RPC远程服务调用方案,每天为2千多个服务提供大于30亿次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点以及别的公司的业务中. ...

  3. golang如何优雅的编写事务代码

    目录 前言 需求 烂代码示例 重构套路 一.提前返回去除if嵌套 二.goto+label提取重复代码 三.封装try-catch统一捕获panic 前言 新手程序员概有如下特点 if嵌套特别多.重复 ...

  4. 第4章 最基础的分类算法-k近邻算法

    思想极度简单 应用数学知识少 效果好(缺点?) 可以解释机器学习算法使用过程中的很多细节问题 更完整的刻画机器学习应用的流程 distances = [] for x_train in X_train ...

  5. Win10企业版远程桌面结合frp实现公网远程

    Win10企业版远程桌面结合frp实现公网远程 前言 由于经常下班后还要处理问题,但是又没有运维那么频繁,就不想天天背着电脑来回跑,刚开始用的teamviewer,后来被商业劝退了(就是不让用了,让买 ...

  6. WebStorm 2019.3.1 破解 永久使用 亲测100%成功

    声明:本教程 WebStorm 破解补丁.激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除. 前言 今天问公司前端的美眉,你的激活码哪里来的,她说淘宝买的,我说给我用一下,当时 ...

  7. Python中出现 SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 12-13: truncated \UXXXXXXXX escape

    Python中出现 SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 12-13: t ...

  8. 域渗透分析工具BloodHound

    简介:BloodHound是一款将域内信息可视化的单页的web应用程序,是一款在域内进行信息收集的免费工具: Kali中直接命令安装即可 apt-get install bloodhound 打开lo ...

  9. 此flash player与您的地区不相容——更换新版本edge后出现的问题

    最新切换到了edge浏览器,使用flash时提示:"此flash player与您的地区不相容",而chrome是没有问题的.网上找到解决方案,发现一个可以有效解决的方式,如下: ...

  10. 小谢第8问:ui框架的css样式如何更改

    目前有三种方法, 1.使用scss,增加样式覆盖,但是此种方法要求css的className需要与框架内的元素相一致,因此修改时候需要特别注意,一个父级的不同就可能修改失败 2.deep穿透,这种方法 ...