分析20萬條彈幕告訴你,8.9分的高分劇《隱祕的角落》到底好看在哪兒?

最近這部《隱祕的角落》徹底火了,目前在豆瓣高達8.9分,有45萬餘人進行了評論。

一時間劇中張東昇那句「爬山」、「你說我還有機會嗎」 承包了6月份的梗。各種表情包和段子齊飛。
在這裏插入圖片描述
在這裏插入圖片描述
作爲主演秦昊當年的同學,章子怡都出來打call。
在這裏插入圖片描述
刷完劇,那首「小白船」簡直成了新的恐怖童謠,讓人在腦海中無限循環,太上頭了。

在這裏插入圖片描述

那麼這部製作精良的國產劇爲何能收穫到觀衆的一致好評?大家在看劇時都在討論些什麼?今天我們就用數據來帶你看看。

01拿拍電影的態度拍網劇 ,不好看纔怪

該劇改編自紫金陳推理小說《壞小孩》 ,講述了沿海小城的三個孩子在景區遊玩時無意拍攝記錄了一次謀殺,他們的冒險也由此展開。撲朔迷離的案情,將幾個家庭裹挾其中,帶向不可預知的未來…
在這裏插入圖片描述

劇剛開始的畫面就是,文質彬彬的男青年帶着一對老人在山頂拍照,二老坐在石頭上,背後就是萬丈深淵,男青年上前親自指導姿勢,而就在一瞬間,他眼神一冷,兩隻手同時發力,將二老從山頂推了下去,甚至在推完還在佯作驚慌失措的樣子大喊:“爸!媽!”而這一切卻被三個遊玩的小孩無意拍了下來。

在這裏插入圖片描述

這一開場就把觀衆嚇了一跳,甚至都起了雞皮疙瘩。同時也讓人慾罷不能想看看接下來會發生什麼故事。

劇情不拖沓,演技全員在線

不同於國產劇一般動輒四五十集的篇幅,《隱祕的角落》只有短短的12集,故事緊湊,劇情毫不拖泥帶水。

而整部劇中,無論是從挑大樑的秦昊,到三位小演員,還是王景春、張頌文等一衆演員都奉獻出了無可挑剔的演技。

令人印象深刻的配樂

配樂也是《隱祕的角落》中的亮點之一。配合影視劇的懸疑劇情,這些配樂聽起來確實分外驚悚恐怖,也給大家留下了不可磨滅的陰影,被網友調侃:“能不能整點陽間的音樂?”如果問爲什麼本劇配樂這麼講究,要知道《隱祕的角落》的導演辛爽可是樂隊音樂人出身的。

在這裏插入圖片描述

02豆瓣8.9分 年度國劇之光!

首先,我們看到豆瓣的數據。這部劇一開播在豆瓣評分就衝上9.0分,一度衝到9.2分,隨着劇集完結,目前穩定在8.9分,已經有45萬餘人進行了評分。

在這裏插入圖片描述

總體評分
在這裏插入圖片描述
細看評分的分佈可以發現,有54.4%的人都給出了五星好評,其次23.4%的人給出四星。這個成績還是很不錯的。

評論熱度走勢圖
在這裏插入圖片描述
從評論走勢圖可以看到,《隱祕的角落》在6月16日首播,評論熱度最高。之後不同於其他劇,隨着播出時間評論數量趨於平緩,這部劇再播出後也不時帶來熱度,引發觀衆的評論潮。

評論中提及主演

大家在評論時都提到哪些角色了呢?
在這裏插入圖片描述

分析發現,主演張東昇的討論度果然是最高的,其次是三個小演員之一的朱朝陽。演技派演員王景春和張頌文飾演的陳警官和朝陽爸爸討論度也很高。

主演評價分佈
在這裏插入圖片描述

我們分析了豆瓣短評中用戶關於主演的好評/一般/差評分佈佔比。

細緻到個人表演來看,小演員們的表現相當突出,比如朱朝陽的扮演者榮梓杉,有超過9成的觀衆肯定了他的表現。秦昊、王景春兩位的表現自然也是很厲害的。他們在劇中的表現,分別獲得了88.08%和89.29%的好評率。

0320萬條彈幕告訴你

追劇時大家都在說些什麼?

接下來我們分析一下《隱祕的角落》在愛奇藝的彈幕數據,我們分析整理了全部12集的彈幕,共200672條。下面看到分析結論:

用戶使用的彈幕角色

觀衆在愛奇藝追劇發彈幕時,可以選擇自己喜歡的角色頭像。那麼觀衆都最喜歡用哪些用人物角色發彈幕呢?
在這裏插入圖片描述
可以看到,這方面張東昇在這方面是榜首。其次是朱朝陽,然後可愛的小妹妹普普位居第三。

彈幕字數分佈

在這裏插入圖片描述

在彈幕的字數上我們可以看到,5-10個字的是最多的,共有11萬餘條彈幕。其次是10-15個字,48032條彈幕。0-5個字的彈幕也有不少,共25420條。可見在追劇發彈幕時,大家還是傾向多說點,表達自己的想法。

整體彈幕詞雲
在這裏插入圖片描述
在整體彈幕詞雲中,「孩子」、「嚴良」、「普普」被提到的頻率很高。看到三位小主演的一舉一動還是牽動着觀衆的心的。

接下來,我們分別看到幾位主演的人物彈幕詞雲吧。

張東昇
在這裏插入圖片描述

首先就是張東昇了,不同於一般臉譜化的反派角色。在張東昇的身上,大家既看到他的冷酷,兇殘,也看到他的無奈和隱忍。在彈幕中,關於他,提到「爬山」、「機會」的特別多,這幾句張東昇的話實在太出圈了。

有意思的是,張東昇的「頭髮」也被頻頻提及,畢竟這個禿頭造型實在是太令人印象深刻了。
在這裏插入圖片描述

朱朝陽
在這裏插入圖片描述

下面再看到三位小主演中最受關注的朱朝陽。品學兼優的他,因爲父母離異性格有些內向和孤僻。在詞雲中,他與「爸爸」、「媽媽」的感情也是大家討論最多的。其次他與「張東昇」間的對手戲,以及後面他角色的「黑化」也是討論焦點。

普普
在這裏插入圖片描述
劇中的小妹妹普普也是很多人喜歡的角色了,在詞雲中可以看到觀衆對她的「喜歡」,以及對她「演技」的肯定。此外,「善良」等詞也常被提到。

嚴良
在這裏插入圖片描述
劇中的另一位小演員角色——嚴良也是彈幕中關注度很高的。關於他,大家經常會提到跟他形影不離的「普普」,此外「演技不錯」「厲害」等詞也頻出。

04教你用Python分析愛奇藝彈幕數據

我們使用Python獲取並分析愛奇藝的彈幕數據,整個數據分析的流程分爲以下三個部分:

數據讀入

數據預處理

數據可視化分析

下面看到具體步驟:

首先導入所需包,其中pandas用於數據讀入和數據處理,os用於文件操作,jieba用於中文分詞,pyecharts和stylecolud用於數據可視化。

# 導入庫
import pandas as pd 
import os  
import jieba

from pyecharts.charts import Bar, Pie, Line, WordCloud, Page
from pyecharts import options as opts 
from pyecharts.globals import SymbolType, WarningType
WarningType.ShowWarning = False

import stylecloud
from IPython.display import Image

我們將爬取的數據存放在data文件夾下,使用os操作獲取需要讀取的csv文件列表。

# 文件列表
data_list = os.listdir('../data/')
data_list
['df_第一集.csv',
 'df_第七集.csv',
 'df_第三集.csv',
 'df_第九集.csv',
 'df_第二集.csv',
 'df_第五集.csv',
 'df_第八集.csv',
 'df_第六集.csv',
 'df_第十一集.csv',
 'df_第十二集.csv',
 'df_第十集.csv',
 'df_第四集.csv']

然後使用pandas將csv文件讀入並循環追加到總表df_all中,打印以下數據集大小看一下,一共有200672條。

# 存儲數據
df_all = pd.DataFrame()

# 循環寫入
for i in data_list:
    df_one = pd.read_csv(f'../data/{i}', engine='python', encoding='utf-8', index_col=0)  
    df_all = df_all.append(df_one, ignore_index=False)

# 打印數據集大小
print(df_all.shape) 

(200672, 6)

再預覽一下前五行數據。

# 預覽數據
df_all.head() 

在這裏插入圖片描述
數據讀入之後,接下來簡單對數據集進行預處理的工作,我們針對name字段進行以下處理:使用strip操作去除字符串前後的空格;定義一個轉換函數,根據name字段新增name_level字段,標註用戶等級,效果如下:

# 字符串處理
df_all['name'] = df_all.name.str.strip() 

def transform_name(x):
    if x=='張東昇' or x=='朱朝陽' or x=='普普' or x=='嚴良' or x=='陳冠聲' or x=='周春紅' or x=='朱永平' or x=='葉軍':
        return 'VIP用戶'
    elif x=='未知用戶':
        return '未知用戶'
    else:
        return '普通用戶'

# 新增列
df_all['name_level'] = df_all.name.apply(transform_name)
df_all.head() 

在這裏插入圖片描述
接下來使用pyecharts進行數據可視化。主要分析內容包含:

用戶最喜歡使用的彈幕角色-條形圖

彈幕發送字數分佈-條形圖

彈幕角色-詞雲圖

首先統計不同等級用戶的數量。

level_num = df_all.name_level.value_counts()
level_num 

未知用戶     157722
VIP用戶     41127
普通用戶       1823
Name: name_level, dtype: int64

使用pyecharts中的Pie類繪製餅圖,效果如下:

data_pair =  [list(z) for z in zip(level_num.index.tolist(), level_num.values.tolist())]

# 繪製餅圖
pie1 = Pie(init_opts=opts.InitOpts(width='1350px', height='750px'))
pie1.add('', data_pair, radius=['35%', '60%'])
pie1.set_global_opts(title_opts=opts.TitleOpts(title='彈幕發送人羣等級分佈'), 
                     legend_opts=opts.LegendOpts(orient='vertical', pos_top='15%', pos_left='2%'))
pie1.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%"))
pie1.set_colors(['#3B7BA9', '#6FB27C', '#FFAF34'])
pie1.render() 

name字段中標註了用戶發送彈幕時候使用的彈幕角色,統計並篩選不同彈幕角色的使用頻次。

role_num = df_all.name.value_counts()[1:9]
role_num

張東昇    18734
朱朝陽     8742
普普      4688
嚴良      2595
陳冠聲     2122
周春紅     1879
朱永平     1333
葉軍      1034
Name: name, dtype: int64

然後使用pyecharts中的Bar類繪製一張餅圖。

# 柱形圖
bar1 = Bar(init_opts=opts.InitOpts(width='1350px', height='750px'))
bar1.add_xaxis(role_num.index.tolist())
bar1.add_yaxis("", role_num.values.tolist(), category_gap='5%')
bar1.set_global_opts(title_opts=opts.TitleOpts(title="VIP用戶最喜歡使用的彈幕角色"), 
                     visualmap_opts=opts.VisualMapOpts(max_=18734),
                    )
bar1.render() 

content字段記錄了用戶評論的彈幕信息,此處根據這個字段計算字數並按照步長5進行分箱處理,得到不同字數段下的頻次分佈。

word_num = df_all.content.apply(lambda x:len(x)) 

# 分箱
bins = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50] 
word_num_cut = pd.cut(word_num, bins, include_lowest=False).value_counts()
word_num_cut = word_num_cut.sort_index()
word_num_cut
(0, 5]       25420
(5, 10]     113834
(10, 15]     48032
(15, 20]      9864
(20, 25]      2385
(25, 30]       645
(30, 35]       274
(35, 40]       109
(40, 45]        49
(45, 50]        46
Name: content, dtype: int64

同樣使用Bar類繪製一張條形圖。

# 柱形圖
bar2 = Bar(init_opts=opts.InitOpts(width='1350px', height='750px')) 
bar2.add_xaxis(word_num_cut.index.astype('str').tolist())
bar2.add_yaxis("", word_num_cut.values.tolist(), category_gap='4%')
bar2.set_global_opts(title_opts=opts.TitleOpts(title="彈幕發送字數分佈"), 
                     visualmap_opts=opts.VisualMapOpts(max_=113834),
                    )
bar2.render()

接下來我們定義一個分詞函數get_cut_words,這個函數的功能是傳入一列數據,得到使用jieba分詞之後的列表。

# 定義分詞函數
def get_cut_words(content_series):
    # 讀入停用詞表
    stop_words = [] 

    with open(r"C:\Users\wzd\Desktop\CDA\CDA_Python\Python文本分析\10.文本摘要\stop_words.txt", 'r', encoding='utf-8') as f:
        lines = f.readlines()
        for line in lines:
            stop_words.append(line.strip())

    # 添加關鍵詞
    my_words = ['秦昊', '張東昇', '王景春', '陳冠聲', '榮梓杉',
                '朱朝陽', '史彭元', '嚴良', '王聖迪', '普普',
                '嶽普', '張頌文', '朱永平', '十二集', '十二萬',
                '十二時辰']  

    for i in my_words:
        jieba.add_word(i) 

    # 自定義停用詞
    my_stop_words = ['真的', '這部', '這是', '一種', '那種',
                    '哈哈哈']   
    stop_words.extend(my_stop_words)               

    # 分詞
    word_num = jieba.lcut(content_series.str.cat(sep='。'), cut_all=False)

    # 條件篩選
    word_num_selected = [i for i in word_num if i not in stop_words and len(i)>=2]

    return word_num_selected

將角色張東昇的彈幕數據傳入函數,得到分詞之後的列表。

text1 = get_cut_words(content_series=df_all[df_all.name=='張東昇']['content'])
text1[:5] 
Building prefix dict from the default dictionary ...
Dumping model to file cache C:\Users\wzd\AppData\Local\Temp\jieba.cache
Loading model cost 1.280 seconds.
Prefix dict has been built successfully.
['爬山', '老弟', '十二集', '知足', '伊能靜']

然後使用stylecloud工具包繪製一張心形的詞雲圖,效果如下:

在這裏插入圖片描述

# 繪製詞雲圖
stylecloud.gen_stylecloud(text=' '.join(text1), max_words=1000,
                          collocations=False,
                          font_path=r'‪C:\Windows\Fonts\msyh.ttc',
                          icon_name='fas fa-heart',
                          size=653,
                          output_name='./詞雲圖/彈幕角色-張東昇詞雲圖.png')
Image(filename='./詞雲圖/彈幕角色-張東昇詞雲圖.png')

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