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爬蟲愛好者,請勿轉載,謝謝。

博客地址:jianshu.com/u/9104ebf5e

出處:Python數據分析之基情的擇天記

配套視頻教程:Python3爬蟲三大案例實戰分享:貓眼電影、今日頭條街拍美圖、淘寶美食 Python3爬蟲三大案例實戰分享

公眾號:Python愛好者社區(微信ID:python_shequ),關注,查看更多連載內容。

加小編個人微信:tsdatajob ,跟作者互動,一起探討。

推薦閱讀:

數據 | 沒錢沒資源,怎麼做調研(一)
航班航行距離與延誤時間有什麼關係?
股票分析與資產組合(python)
鑽石價格的預測

TAG:Python | 择天记 | 数据分析 |