劉渝妍 洪孫焱 曹嘉晨




摘? 要: 視頻網站的用戶評論、彈幕逐漸成為視頻內容之外的一個引起熱議的話題。視頻評論作為新的文化產品和文化形式,引起了社會的關注。文章以B站為例,通過網絡爬蟲收集數據,利用大數據相關技術,對評論數據進行處理分析,并以詞云圖及散點圖的方式呈現用戶的關注點及語言表達的差異性,直觀地為相關研究提供參考。
關鍵詞: 網絡爬蟲; 大數據; 評論數據; 詞云圖; 散點圖
中圖分類號:TP311? ? ? ? ? 文獻標識碼:A? ? ?文章編號:1006-8228(2022)02-76-04
Processing and analysis of the video website comments data
——Taking Station B as an example
Liu Yuyan, Hong Sunyan, Cao Jiachen
(College of Information Engineering,Kunming University, Kunming, Yunnan 650214, China)
Abstract: User comments and bullet screens of video websites have gradually become a hot topic outside the video content. As a new cultural product and form, video commentary has attracted social attention. Taking the station B as an example, this paper collects data through Web crawlers, processes and analyzes the comments data by using big data related technologies, and presents the differences of users' concerns and language expression in the form of word cloud diagram and scatter diagram, so as to intuitively provide reference for relative researches.
Key words: Web crawler; big data; comments data; word cloud map; scatter diagram
0 引言
B站,即嗶哩嗶哩(bilibili)視頻網站,誕生于2009年,是通過視頻表現形式傳播文化的網站,其發展至今已躋身于國內最大的實時彈幕視頻網站之列。B站作為一個創作、分享、討論交流的平臺,激勵用戶自制原創視頻成為UP主[1],吸引了越來越多的年輕人選擇在B站上創作視頻。據統計,B站平均每月產生約14億次視頻評論,其彈幕文化已作為青年亞文化的一種新的文化產品和文化形式,我們應當本著尊重和理解的態度嘗試去了解它[2]。本文以B站視頻評論數據為基礎數據,利用大數據技術對其進行處理與分析。
1 相關概念及技術
⑴ 大數據是指無法在一定時間范圍內用常規軟件工具進行捕捉、管理和處理的數據集合。
⑵ Python是一種跨平臺的程序設計語言。其爬蟲工具包使用方便,為數據抓取提供了可能[3]。調用jieba.cut實現視頻評論分詞;調用MLlib庫計算TF-IDF權重值和余弦相似度;調用Matplotlib、WordCloud庫繪制詞云圖和相似散點圖。
⑶ Spark作為大數據領域受到廣泛青睞的一代框架,通過調用Spark MLlib中的函數,構造評論數據特征向量。
⑷ 網絡爬蟲是一種自動收集網絡頁面信息的機器人程序,也被稱之為網絡蜘蛛[4]。
⑸ 正則表達式是一種字符串匹配模式,在處理自然語言文本數據之前常用于對查找結果毫無幫助的字或英文、數字、表情符號、特殊符號等進行過濾[5]。
⑹ TF-IDF(Term Frequency-Inverse Document Frequency)詞頻-逆向文件頻率統計方法。
TF表示文檔中詞條出現的頻率,其公式為:
IDF表示文檔集中包含詞條的文檔總數,是一個詞條重要性的度量,其公式為:
公式⑵中分母為包含詞條的文檔數+1,是為了避免分母為零。
TF-IDF公式為:
TF-IDF=TF*IDF? ⑶
⑺ 余弦相似度是通過計算兩個向量之間余弦值大小來判斷向量的相似度,余弦值接近1,夾角趨于0,表明兩個文本越相似。余弦相似度計算公式為:
式中,A為B分別為對比的兩個向量。
2 B站視頻評論數據分析
B站視頻評論數據分析框架如圖1所示。
2.1 數據采集
2.1.1 接口獲取
數據爬取接口可通過B站開放的API接口獲取。打開B站總榜頁面,選擇任意板塊進入開發者模式,即可直接抓取相應的數據(僅爬取評論本身內容,對發布評論的用戶信息不進行爬取)。如,要抓取音樂板塊數據,只需在下列網址中設置rid=3,即可獲得音樂板塊下的所有JSON格式視頻數據。
api.bilibili.com/x/web-interface/ranking/v2?rid=3&type=all
2.1.2 爬蟲實現步驟
⑴ 設置代理IP
通過設置代理IP(Internet Protocol),可突破網站對訪問者進行限制。如,定義代理IP為:
proxys={'http':'http://115.223.7.208:80',……}
將其作為參數傳入requests請求即可實現數據爬取。
xml_data=str(requests.get(xml_url,headers=headers,
proxies=proxys).content,encoding="utf-8")
⑵ 爬取視頻評論內容
l 定義視頻板塊字典
rid_dict={"全站":0,"動畫":1,"音樂":3,"游戲":4,"娛樂":5,
"科技":36,……}
字典中鍵值對格式為{板塊名稱:板塊編號},板塊編號通過url請求從api中獲取。
l 遍歷板塊字典對應網址
url="https://api.bilibili.com/x/web-interface/ranking/v2?rid=
{}&day={}".format(rid,day)
requests.get(url,headers=headers)
l 向網站發起請求獲取數據
res=url_get(url=url,mode="json")
l 存儲數據到csv文件中
with open("{}/{}.csv".format(save_path,k),……:
2.2 數據預處理
通過數據預處理提高后期數據處理的準確率和效率。
2.2.1 評論數據清洗
使用正則表達式將文本中的標點符號替換為空字符,獲取沒有干擾的純文本數據。
pattern=re.compile(r'[\s+\\r\\u3000\\!\/_,;
’:‘“”$%^*(+\"\']+|,……)
data_re=rdd.map(lambda x:re.sub(pattern,'##',x))
.map(lambda x:list(set(x.split("##"))))
2.2.2 評論本文分詞
jieba庫是優秀的中文分詞第三方庫,實現評論分詞如下:
words=jieba.cut(strings,cut_all=False)
2.3 數據處理
2.3.1 詞條特征向量構建
SparkMLlib將詞條特征通過hashing函數實現詞頻統計。但不同的詞條特征可能會得到相同的哈希值而產生hash沖突,本文以增加哈希表的桶數來避免沖突。
l 調用HasdingTf的transform把詞條哈希成特征向量,設哈希表的桶數為2000。
hashingTF=HashingTF(inputCol="words",
outputCol="rawFeatures",numFeatures=2000)
featurizeData=hashingTF.transform(wordsData)
l 調用IDF對詞頻特征向量進行修正,提高不同詞匯對文本的區別能力。
idf=IDF(inputCol="rawFeatures",outputCol="features")
idfModel=idf.fit(featurizeData)
l 調用transform,得到每一個單詞對應的TF-IDF度量值。
rescaledData=idfModel.transform(featurizeData)
2.3.2 評論相似度計算
對TF-IDF值進行歸一化處理,構建評論相似度權重向量。
normalizer=Normalizer(inputCol="features",
outputCol="norm")
data=normalizer.transform(rescaledData)
2.4 數據可視化及分析
通過可視化方式,將人們看不懂的數據通過圖形化的手段進行有效的表達,能準確高效、簡潔全面地傳遞某種信息,幫助人們分析和推理數據,挖掘數據背后的價值,使復雜的數據更容易理解和使用。
2.4.1 熱評詞云圖繪制
詞云是數據可視化的一種形式,是對評論、彈幕中出現頻率較高的關鍵詞予以視覺上的突出,形成關鍵詞云層。通過詞云的方式展現出更多的話題,更直觀的呈現當前時段用戶的關注點。WordCloud是一個詞云生成器,以詞條為基本單位,通過圖形可視化的方式展示。繪制詞云圖的主要步驟如下:
l 繪制矩形詞云圖
wordcloud=WordCloud(font_path="AaLiFangTi.ttf",
background_color="white",width=800,height=600)
l 根據TF-IDF權重生成詞云
wordcloud.generate_from_frequencies(dict(tdidf
.extract_keywords(open(document,'r',encoding='utf-8',
errors='ignore').read(),None)))
l 顯示詞云
plt.imshow(wordcloud,interpolation="bilinear")
本文抓取四月初的數據,繪制視頻熱評詞云圖如圖2所示(B站的評論具有實時性,對不同時間段爬取的數據,結果可能不一樣)。
從圖2看出,一方面,用戶關注的內容多以大學、學院為主,左上角以及在詞云四周分布的各類院校名稱,說明用戶對知名度較高的院校非常關注。數據來源于四月初臨近高考,說明用戶對高考的關注度較高。在詞云圖右上角的師范大學說明師范教育被大家所重視,教師職業被越來越多的人接受。另一方面B站用戶中學生所占比例較大,他們所關注的輿論熱點也是積極的。
2.4.2 評論散點圖繪制
通過空間點的分布不但能展現評論整體的差異分布,還能直觀呈現大眾的語言方式、表達結果是否接近。為解決評論整體相似結果在空間難以表示的問題,本文借鑒散點圖,利用x軸,將聚集數據展開至二維空間,每一個點代表隨機兩條評論的相似度,橫軸x的位置隨機分布解決堆積現象,不影響結果;縱軸y是余弦值,點越靠近1,說明相似度越大。繪制評論散點圖的主要步驟如下。
l 定義評論數據板塊
Ranklist=['全站','動畫','音樂','游戲','娛樂','科技','鬼畜',……]
l 遍歷評論數據板塊生成相似度字典
for i in ranklist:
fn=glob.glob(r'./result/'+i+'/*.csv')
with open(str(fn[0]),"r",encoding="utf-8")as f:
reader=csv.reader(f)
rows=[row[2]for row in reader]
l 繪制評論相似散點圖
for i in rows:
plt.scatter(random.random(),i)
plt.show()
以四月初的數據為例,繪制視頻評論散點圖如圖3所示。
從圖3可知,一方面,絕大多數評論相似度較低,盡管用戶關注的內容類似,年輕人不盲目跟風評論,但并沒有使用相似的語言作為評論,體現了B站用戶語言表達的高度差異化。另一方面,年輕人容易接受新事物,B站是視頻投稿的聚集地,任何人都可以在網上接觸到他人的投稿視頻進行二次加工,并通過語言輸出觀點表達自我,有著很強的個人主義色彩,這就讓社會對他們充滿了期待。
3 結束語
如今,95后、00后等新一代青年群體在互聯網環境中形成自己的文化,呈現出個性化、多元化、反傳統等特征[6]。面對互聯網下青年群體的思想觀念變化,需要全社會的關注,因此,對視頻評論數據的分析具有十分重要的意義。
目前對視頻網站的研究主要集中在如何提高有效播放量、市場滲透率等商業模式上,對視頻評論這種新的文化產品和文化形式呈現的內容分析研究較少。本文充分利用大數據相關技術實現了視頻評論數據的處理,并通過可視化的方式為社會了解年輕人所追求的社會價值觀,做好年輕人的思想教育工作提供了參考。同時,此數據處理方法也為網絡熱搜數據分析、網絡輿控制提供了方法借鑒。
參考文獻(References):
[1] 王涵.嗶哩嗶哩動畫現狀及未來展望[J].產業與科技論壇,2020(24):13-15
[2] 張峰.彈幕視頻網站的青年亞文化分析—以嗶哩嗶哩網為例[J].藝術科技,2017(2):86
[3] 吳永聰.淺談Python爬蟲技術的網頁數據抓取與分析[J].計算機時代,2019(8):94-96
[4] 李彥.基于Python的網絡爬蟲技術的研究[J].電子世界,2021(3):39-40
[5] 馬夢曦.基于彈幕文本挖掘的情感極性分析研究[D].武漢理工大學碩士學位論文,2019
[6] 吳瑩.共青團中央在嗶哩嗶哩網站上的傳播經驗分析[J].傳播力研究,2019(17):259-260