《人民的名義》相信是大家都不是陌生吧,去年可是火遍大江南北,號稱史上最大尺度反貪反腐神劇,時隔許久還是看到許多關於該劇的文案;恰好最近在學習NLP相關知識,決定對其進行人物關係進行分析。而對人物關係最直觀的表現應該是社交網路圖譜或者關係圖。 接下來,讓我們一起來研究怎樣製作人物關係圖呢?
1.pyecharts 介紹
pyecharts 相關基礎可參考
pyecharts 官方文件可參考 - pyecharts中文文件
2.資料準備
因為我們是希望跟貼近於劇情,所以選取劇本以切合大部分人熟悉的劇情。獲取資料方式主要有網路資料採集、網路API方式獲取、自定義網路爬蟲工具等等,我們可以選擇適合自己的方式來獲取資料,資料檔案和程式碼會在後期更新。
2.1 文字預處理
當我們拿到資料後,首先了解自己的資料包含什麼資訊。由於我們獲取到的資料為文字檔案,首先要對文字進行預處理;主要包括分詞、去掉一些特殊字元和停用詞等。就像我們可能會有外號啊、小名啊等等,所以劇中人物也會有不同名字,所以我們需要進行統一。為保證在分詞時能夠正確切分一些固定名稱,所以需要匯入自定義詞典來幫助我們進行分詞操作。在提取文字特徵時需要去掉一些停用詞,以提高分析的準確度。經過以上處理基本可以得到較為乾淨的文字檔案。接下來可以在此基礎上進行深入分析。
文字預處理可參考
3.人物出現頻次
首先我們可以通過人物在劇中出場次數來初步瞭解主角是誰?根據參演人員列表,統計該演員在劇中出現的次數,通過pyecharts畫出出場次數top10的演員和出場次數,得知侯亮平戲份做多,供480餘次;果然是大Boss。其次是我們的老戲骨和行走的表情包達康書記。廢話不多說,有圖有真相。
from pyecharts import Bar,Line,Overlap
import pandas as pd
df = pd.read_csv("人物出場次數統計.csv")
attr = df.ID[:11]
y_axis = df.Weight[:11]
bar = Bar("人物出場次數")
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.社交網路關係
開始今天的重頭戲哦,首先我們根據參演人員列表生成節點檔案;採用句為單位進行分析,標識人物關係。得到參演人員的社交網路關係,通過求得的共現矩陣,藉助Gephi畫出社交網路關係圖。圖中邊的粗細代表關係的密切程度或在劇中的交集。邊越粗則表示兩人關係越密切。而名字的大小即節點大小表示該參演人員在劇中的社交強弱或存在感。
4.1 pyecharts 實現
from pyecharts import Graph
import pandas as pd
df_node = pd.read_csv("參演人員節點.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("人民的名義關係圖",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工具實現
-
1.在https://gephi.org/ 下載windows版的安裝包進行安裝。開啟後如下圖所示。
-
2.新建工程,匯入資料 選擇資料資料tab,點選輸入數字表格,新增節點和邊的csv資料。
-
3.點選概覽調整相關樣式。可以通過度,權重等資訊修改相關的樣式。
-
4.修改字型,顯示相應的標籤
-
5.選擇一個自動化佈局的方式,預覽,再調整相關引數
4.2.1 效果展示
詳細程式碼和樣例html檔案後期整理及時更新,也可以私信哦