python数据分析之基情的择天记

人一生都可能无法逆天改命,但你却是要去奋斗一把

本文章主要通过最简单的共线性关系,利用gephi工具绘制择天记的人物关系图。

准备工作

  • 在网上下载《择天记》小说以及创建小说人物的txt。


  • jieba库
  • 需要下载gephi软件
    注意:安装路径不能有中文字;需要安装java环境,不然无法使用gephi。

定义数据结构

import jieba
names = {}
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] += 1

import codecs
with codecs.open('tian_node.txt','w','utf-8') as f:
    f.write("Id Label Weight\r\n")
    for name, times in names.items():
        f.write(name + ' ' + name + ' ' + str(times) + '\r\n')
        
with codecs.open('tian_edge.txt', 'w', "utf-8") as f:
    f.write("Source Target Weight\r\n")
    for name, edges in relationships.items():
        for v, w in edges.items():
            if w > 3:
                f.write(name + ' ' + v + " " + str(w) + "\r\n")

绘制人物关系图

最后利用gephi绘制人物关系图。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Part1安装依赖包 http://blog.csdn.net/cl1143015961/article/deta...
    小豆角lch阅读 5,174评论 2 11
  • 最近在学习自然语言处理,看完了《Python 自然语言处理》这本书,想做一点实践性的练习。之前我在知乎上看见有人用...
    BUAA_Coder阅读 3,617评论 2 5
  • 重新画了个,把前面画完的一起发上来,老师看下对比下线条有没有变化。(紫色是之前画的。)后面画的纸都有点破了。。。。。。
    咔咔君阅读 212评论 0 0
  • 花了五个半小时的花花~
    陛岑阅读 178评论 0 1
  • 拉*洛威尔曾经说过:如果说青春也有缺点,就是它消逝的太快。回想我的青春年代,的确如此,我还不曾抓紧,它就一...
    易生亦爱阅读 556评论 2 4