五月天線上演唱會:用Python解讀,分析這裏有你的青春嗎?

【導語】:今天我們來聊聊五月天這場刷屏朋友圈的線上演唱會,Python技術部分請看第四部分

Show me data,用數據說話!

在五月的最後一天,五月天實現了他們2020年的“五月之約”。5月31日 一場席捲朋友圈的線上演唱會如約上演。

空蕩的體育館,數萬根銀光棒,一個樂隊獨自在開狂歡的party ,感覺最近真的被蛋黃長裙洗腦了,深陷Jony J 魔咒。

好,讓我們言歸正傳。五月天實現了5月的約定,歌迷滿足了娛樂填補內心空虛的需求,要不真的要去擺地攤了,所以這場演唱也是瞬間火遍了全網,朋友圈刷屏的都是“五月天線上演唱會”。

雖然只有短短一個小時,沒有安可的喊聲,但是現場的效果還是非常好的。五月天唱着青春、夢想,唱着自己的人生經歷,而身處人生各個階段、懷着各種心情的歌迷,似乎都能找到共鳴,得到激勵。

那麼五月天的線上演唱會里,有你的青春嗎?下面讓我們用數據說話。

01、豆瓣9.4分,這場線上演唱會到底多好看?

 首先讓我們看到豆瓣上的數據:

截止到目前爲止,五月天的這次線上演唱會共有10萬餘人進行了評價,目前豆瓣評分爲9.4分,是非常高的成績了。

豆瓣評分分佈

進一步分析可以看到,評論中有68.4%的人給出了滿分5星,其次24.2%的人給出了4星。

豆瓣評論詞雲圖

豆瓣評論中大家都在說些什麼呢?可以看到"太短"是大家的統一呼聲,這樣的演唱會一個小時實在是太短了,還有歌迷感嘆到 “五月天的演唱會就像我的青春,猝不及防結束了。”與此同時"青春"、"感動"、"永遠"等也是常出現的高頻詞。

02、喜歡五月天的都是哪些人?

那麼喜歡五月天的都是哪些人呢?最後讓我們看到五月天微博的粉絲畫像,我們一共收集整理的微博評論和粉絲數據在去重後,分別是4288條和4213條。

微博粉絲性別佔比

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

微博粉絲地區分佈

在粉絲分佈方面,廣東省是最多的位居榜首,其次身處海外的歌迷也不少,位居第二。北京、浙江、江蘇分別位居三四五名。

微博粉絲年齡分佈

粉絲的年齡分佈方面,不用想,90後妥妥的佔到了絕大多數,佔比高達71.11%。其次是00後,佔比12.74,80後位居第三7.88%。粉絲中也不乏一些10後,佔比4.81%。

03、線上開唱1小時,3500萬人在線同步觀看

我們整理分析了QQ音樂上五月天的評論數據,去重之後得到7126條樣本。下面先看到結論:

 評論實時走勢圖

 

可以看到,在整體評論的實時走勢圖來看:關於五月天的評論留言在5月31日線上演唱會當天達到頂峯,之後逐步回落,趨於平穩。

整體評論詞雲

那麼評論中大家都在說些什麼呢?

看到整體評論的詞雲圖,我們發現在當中"喜歡"、"希望"、"感動"都是出現頻率特別高的詞;還有就是"青春"這個詞也多次出現,的確,尤其對於90後來說,五月天就是我們這一代人的青春記憶。

同時關於本次線上演唱會也是討論的焦點,比如"直播"、"現場"、"回放"等都被大家提及。與此同時,《知足》、《倔強》等歌也在評論中多次出現,這些也是最讓人產生共鳴的歌曲。

評論中關注成員對比

那麼五月天的成員中,大家關注度最高的是哪位成員呢?沒錯,在這方面,阿信是毫無懸念的第一位。其他幾位成員冠佑、怪獸、石頭和瑪莎的關注度就差不多了,平分秋色。

阿信評論詞雲圖

關於阿信的評論大家都在說些什麼?看到詞雲圖,最主要的就是"喜歡"、"希望"、表達歌迷對阿信的喜愛和美好祝願的,其次還提到其他幾個樂隊成員,有意思的是提"前女友"的也特別多。

評論關注歌曲對比

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

通過分析整理可以看到,提到最多的就是《突然好想你》了,然後就是《知足》《倔強》。除此之外,還有《我不願讓你一個人》《星空》《盛夏光年》等等,全都是耳熟能詳的名曲。

04、教你用Python分析,QQ音樂評論數據 

我們使用Python分別獲取了QQ音樂五月天/TME live評論數據、豆瓣短評數據和微博樂高中國的評論和粉絲數據,進行了數據分析。此處展示QQ音樂評論分析部分關鍵代碼,整體的分析流程如下:

  1. 評論數據獲取
  2. 數據預處理
  3. 數據可視化分析

01 數據獲取

首先,我們獲取五月天/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()

02 讀入數據和數據預處理

此處我們主要對以上獲取的數據集進行整理和清洗。工作包含:

  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() 

03 數據可視化分析

接下來我們使用數據可視化庫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:\Windows\Fonts\msyh.ttc',
                          icon_name='fas fa-comments',
                          size=768,
                          output_name='QQ音樂評論整體詞雲圖.png'
                         )

作者:澤龍、Mika

數據:真達  

後期:澤龍

 

(1)獲取更多優質內容及精彩資訊,可前往:https://www.cda.cn/?seo

(2)瞭解更多數據領域的優質課程:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章