美文网首页IT程序员大数据 爬虫Python AI Sql
python数据分析之基情的择天记

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

作者: 罗罗攀 | 来源:发表于2017-07-22 15:36 被阅读818次

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

本文章主要通过最简单的共线性关系,利用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绘制人物关系图。


相关文章

网友评论

  • 北冥神君:陈长生 唐三十六 1013
    陈长生 王之策 117
    陈长生 徐有容 1052
    陈长生 黑袍 85
    陈长生 落落 579
    陈长生 庄换羽 134
    陈长生 天海牙儿 31
    陈长生 茅秋雨 82
    陈长生 轩辕破 275
    陈长生 秋山君 179
    陈长生 苟寒食 566
    罗罗攀:@北冥神君可能是使用的小说版本不一样
  • 北冥神君:楼主啊,为何我分析出来的并不是搞基的。只能说接近搞基。
  • 北冥神君:这也能分析。佩服佩服,
    罗罗攀:@北冥神君 :heart_eyes::smile:
  • 冬笋土豆西红柿:罗罗攀加油啊八月不断更
    罗罗攀:@冬笋土豆西红柿 好咯
  • 奥特虾:给跪了
    罗罗攀:@奥特虾 哈哈

本文标题:python数据分析之基情的择天记

本文链接:https://www.haomeiwen.com/subject/smjukxtx.html