《人民的名義》相信是大家都不是陌生吧,去年可是火遍大江南北,號稱史上最大尺度反貪反腐神劇,時隔許久還是看到許多關(guān)于該劇的文案;恰好最近在學習NLP相關(guān)知識,決定對其進行人物關(guān)系進行分析。而對人物關(guān)系最直觀的表現(xiàn)應該是社交網(wǎng)絡圖譜或者關(guān)系圖。
接下來,讓我們一起來研究怎樣制作人物關(guān)系圖呢?
1.pyecharts 介紹
pyecharts 相關(guān)基礎(chǔ)可參考
pyecharts 官方文檔可參考
2.數(shù)據(jù)準備
因為我們是希望跟貼近于劇情,所以選取劇本以切合大部分人熟悉的劇情。獲取數(shù)據(jù)方式主要有網(wǎng)絡數(shù)據(jù)采集、網(wǎng)絡API方式獲取、自定義網(wǎng)絡爬蟲工具等等,我們可以選擇適合自己的方式來獲取數(shù)據(jù),數(shù)據(jù)文件和代碼會在后期更新。
2.1 文本預處理
當我們拿到數(shù)據(jù)后,首先了解自己的數(shù)據(jù)包含什么信息。由于我們獲取到的數(shù)據(jù)為文本文件,首先要對文本進行預處理;主要包括分詞、去掉一些特殊字符和停用詞等。就像我們可能會有外號啊、小名啊等等,所以劇中人物也會有不同名字,所以我們需要進行統(tǒng)一。為保證在分詞時能夠正確切分一些固定名稱,所以需要導入自定義詞典來幫助我們進行分詞操作。在提取文本特征時需要去掉一些停用詞,以提高分析的準確度。經(jīng)過以上處理基本可以得到較為干凈的文本文件。接下來可以在此基礎(chǔ)上進行深入分析。
文本預處理可參考
3.人物出現(xiàn)頻次
首先我們可以通過人物在劇中出場次數(shù)來初步了解主角是誰?根據(jù)參演人員列表,統(tǒng)計該演員在劇中出現(xiàn)的次數(shù),通過pyecharts畫出出場次數(shù)top10的演員和出場次數(shù),得知侯亮平戲份做多,供480余次;果然是大Boss。其次是我們的老戲骨和行走的表情包達康書記。廢話不多說,有圖有真相。
from pyecharts import Bar,Line,Overlap
import pandas as pd
df = pd.read_csv("人物出場次數(shù)統(tǒng)計.csv")
attr = df.ID[:11]
y_axis = df.Weight[:11]
bar = Bar("人物出場次數(shù)")
bar.add("", attr, y_axis,
is_stack=False,
bar_category_gap='20%')
line = Line()
line.add("",attr,y_axis)
overlap = Overlap()
overlap.add(bar)
overlap.add(line)
overlap.render("line_bar.html")

4.社交網(wǎng)絡關(guān)系
開始今天的重頭戲哦,首先我們根據(jù)參演人員列表生成節(jié)點文件;采用句為單位進行分析,標識人物關(guān)系。得到參演人員的社交網(wǎng)絡關(guān)系,通過求得的共現(xiàn)矩陣,借助Gephi畫出社交網(wǎng)絡關(guān)系圖。圖中邊的粗細代表關(guān)系的密切程度或在劇中的交集。邊越粗則表示兩人關(guān)系越密切。而名字的大小即節(jié)點大小表示該參演人員在劇中的社交強弱或存在感。
4.1 pyecharts 實現(xiàn)
from pyecharts import Graph
import pandas as pd
df_node = pd.read_csv("參演人員節(jié)點.csv")
df_links = pd.read_excel('參演人員邊大小.csv')
nodes = [{"name":name1.strip(),"symbolSize":size/10} for name1,size in zip(df_node.ID,df_node.Weight) if size>1 ]
# nodes = []
links = [{"source":name2.strip(),"target":name1.strip(),"value":weight}
for name1,name2,weight in zip(df_links.name1,df_links.name2,df_links.frequency)]
graph = Graph("人民的名義關(guān)系圖",width=1200,height=1000)
graph.add("", nodes, links,graph_layout="circular", repulsion=800, label_pos = "right",
graph_repulsion = 50, is_legend_show = False,
line_curve = 0.2, label_text_color = None)
graph.render()

4.2 Gephi工具實現(xiàn)
-
1.在https://gephi.org/ 下載windows版的安裝包進行安裝。打開后如下圖所示。
-
2.新建工程,導入數(shù)據(jù)
選擇數(shù)據(jù)資料tab,點擊輸入數(shù)字表格,添加節(jié)點和邊的csv數(shù)據(jù)。
-
3.點擊概覽調(diào)整相關(guān)樣式??梢酝ㄟ^度,權(quán)重等信息修改相關(guān)的樣式。
-
4.修改字體,顯示相應的標簽
-
5.選擇一個自動化布局的方式,預覽,再調(diào)整相關(guān)參數(shù)
4.2.1 效果展示


詳細代碼和樣例html文件后期整理及時更新,也可以私信哦




