Python數據分析之基情的擇天記
人一生都可能無法逆天改命,但你卻是要去奮鬥一把
本文章主要通過最簡單的共線性關係,利用gephi工具繪製擇天記的人物關係圖。
準備工作
- 在網上下載《擇天記》小說以及創建小說人物的txt。
- jieba庫
- 需要下載gephi軟體
注意:安裝路徑不能有中文字;需要安裝java環境,不然無法使用gephi。
定義數據結構
import jiebanames = {}relationships = {}linenames = []all_names = []
names用於存入小說人物和出場次數;relationships保存人物關係的有向邊,該字典的鍵為有向邊的起點,值為一個字典edge,edge的鍵是有向邊的終點,值是有向邊的權值,代表兩個人物之間聯繫的緊密程度;linenames存入每行小說出現的人物;all_names是小說所有人物。
添加人名到jieba詞庫中
jieba庫分詞可能並不能把小說的人物都切開,我們需要把這些人名添加到詞庫中,以便成功分詞。
f1 = open(names.txt,encoding=utf-8)for line in f1.readlines(): all_names.append(line.strip().strip(ufeff))for name in all_names: jieba.add_word(name)
統計出場人數
f2 = open(擇天記.txt,encoding=utf-8)for line in f2.readlines(): seg_list = jieba.cut(line) linenames.append([]) for i in seg_list: if i in all_names: linenames[-1].append(i) if names.get(i) is None: names[i] = 0 relationships[i] = {} names[i] +=1
通過圖可以看出,陳長生作為主角,出場最多,而他的好基友是排第二的,而他的女票徐有容卻是排到第五,這與一些玄幻小說不一樣,註定了這是一部基情的小說。
人物關係及寫入文件
for line in linenames: for name1 in line: for name2 in line: if name1 == name2: continue if relationships[name1].get(name2) is None: relationships[name1][name2]=1 else: relationships[name1][name2] += 1import codecswith codecs.open(tian_node.txt,w,utf-8) as f: f.write("Id Label Weight
") for name, times in names.items(): f.write(name + + name + + str(times) +
)with codecs.open(tian_edge.txt, w, "utf-8") as f: f.write("Source Target Weight
") for name, edges in relationships.items(): for v, w in edges.items(): if w > 3: f.write(name + + v + " " + str(w) + "
")
繪製人物關係圖
最後利用gephi繪製人物關係圖。
作者:羅羅攀 Python愛好者社區專欄作者 Python爬蟲愛好者,請勿轉載,謝謝。
博客地址:http://www.jianshu.com/u/9104ebf5e177出處:Python數據分析之基情的擇天記配套視頻教程:Python3爬蟲三大案例實戰分享:貓眼電影、今日頭條街拍美圖、淘寶美食 Python3爬蟲三大案例實戰分享 公眾號:Python愛好者社區(微信ID:python_shequ),關注,查看更多連載內容。加小編個人微信:tsdatajob ,跟作者互動,一起探討。
推薦閱讀:
※數據 | 沒錢沒資源,怎麼做調研(一)
※航班航行距離與延誤時間有什麼關係?
※股票分析與資產組合(python)
※鑽石價格的預測