《三國演義》人物數據分析

題目源自編程教室的「每週一坑」欄目: 【每週一坑】三國演義中誰的存在感最強
本文是一位同窗(王文亞)提交的解答,由於作得挺好,特轉載至專欄,供各位參考。
更多練習題能夠在公衆號(Crossin的編程教室)裏回覆關鍵字 習題

主要任務

  1. 找出《三國演義》中名字出現最多的10人;
  2. 分析主要幾我的物120回中,每回出現的次數,結合具體內容,看發生了什麼;
  3. 分析人物之間的關係,利用Gephi簡單繪圖;
  4. 繪製「逐」字詞雲。

準備工做

1.因爲要分析120回中主要人物的出場次數,爬取《三國演義》120回,每回放在一個段落裏;len(f.readlines()) = 120.
2.安裝主要的python庫,如jieba,wordcloud,pandas,codecs,matplotlib,pyecharts, bs4等,還有Gephi;python

開始工做

1.首先是獲取分紅120回每回一行的文件;
url=http://www.purepen.com/sgyy/根據規律爬出120回;git

2.找到次數最多的nr(人名)詞語;
函數findMostWords, 逐詞查看,長度小於2的自動過濾,按照出現次數排序,寫入到文件中,大約是長這個樣子的...github

3.根據找到的詞語排序,大約有7238個詞彙,而後手動選取超過出現20次以上的詞語,大約200條,剔除一些非人名,如「曹兵」等,最終獲得52個詞;
['曹操', '玄德', '孔明', '關公', '丞相', '孔明曰', '玄德曰', '雲長', '張飛', '主公','呂布', '劉備', '孫權', '趙雲', '司馬懿', '周瑜', '魏延', '袁紹', '馬超', '姜維', '黃忠', '諸葛亮', '龐德', '張遼', '劉表', '董卓', '孫策', '魯肅', '鄧艾', '大將軍', '張苞', '袁術', '劉玄德', '玄德大', '子龍', '司馬', '孔明笑', '公瑾', '操大喜', '翼德', '劉皇叔', '趙子龍', '郭嘉', '仲達', '關雲長','操大怒', '玄德問', '阿斗', '劉豫州', '玄德聞', '玄德乃', '曹丞相']編程

4.逐詞匹配上述的52個詞,獲得52個詞分別出現的次數;echarts

5.整理上述52個詞彙,將玄德曰,玄德怒,玄德乃,劉皇叔等詞彙合併,繪製Top10;dom

6.根據上述52個詞彙,分別分析每一回,利用pandas.DataFrame很方便獲得每回52我的分別出現的次數;函數

表格中有大量的空白,後續使用,須要將空白填充0, DataFrame.fillna(0, inplace=True)人工智能

7.繪製一些簡單的圖;
蜀國主要人物全書分佈狀況,三位結拜兄弟貫穿前80回左右,等他們退出歷史舞臺,諸葛亮繼續輔佐,支撐着蜀國大業。url

諸葛亮在35-40, 80-100回出現了較屢次數,天然是 「三顧茅廬」、「火燒七百里聯營」、「巧布八陣圖」、「七擒孟獲」 等較爲熟知的歷史故事; 同時,80回後諸葛亮出現次數佔據了全書中較大範圍,也是 「先帝託孤」後「鞠躬盡瘁」 的具體表現。spa

四位當權者曹操、劉備、孫權、司馬懿活動活度,前80回,曹劉孫較爲活躍,體現出了三國紛爭的局面,讀這一部分,廝殺場面也是至關精彩; 待三位同時代的人物退出歷史舞臺後,逐漸司馬懿開始活躍,「一統秦兩漢,三分魏蜀吳,兩晉先後延」,歷史朝代更替,滾滾向前。

分析數據的能力還優待提升,想不出較好的分析的內容,還需多寫、多與人溝通交流,提高對數據的認識。
8.分析人物之間的關係。根據全文2700多個天然段,若是一個天然段內同時出現了A和B,將A和B之間的關係+1;
獲得Node和Edge兩份csv文件,輸入到Gephi,獲得如下關係圖,故事仍是圍繞這曹劉的紛爭開展,諸葛亮的經緯之才也體現的淋漓盡致。

9.詞雲製做;
PS作了一張圖,製做詞雲。根據各類曰可知書中的對話部分佔據了很大一部分章節,讀者讀起來也更有代入感,身臨其境。

真正本身去作的時候,才能一次次填補本身的坑。哈哈哈,加油!

    • *

做者:王文亞

項目地址:

https://github.com/Damon0626/Crossin-Programming-Room/tree/master/09-Analysis%20The%20Three%20Kingdoms

════

其餘文章及回答:

如何自學Python | 新手引導 | 精選Python問答 | Python單詞表 | 人工智能 | 爬蟲 | 我用Python | requests | 計算機視覺

歡迎搜索及關注公衆號: Crossin的編程教室

相關文章
相關標籤/搜索