文本分析之制作网络关系图

浏览: 2524

改了好久,不知道怎么回事,这篇文章始终排版有问题。

大家对人物网络分析感兴趣的,可移步到知乎上看我的文章

https://zhuanlan.zhihu.com/p/26531225

人物关系图2.png

这个图我没有用到gephi或者其他的工具,是我用python纯脚本运行出来的。简单的实现了封装,大家有兴趣可以下载下脚本,运行下。

原理知识

我就简单说下原理吧,先刻画一个简单的图A

import networkx as nx
import matplotlib.pyplot as plt
#有向图
DG = nx.DiGraph()
#添加一个节点
DG.add_node('A')
#作图,设置节点名显示,节点大小,节点颜色
nx.draw(DG,with_labels=True,node_size=900,node_color = 'green')
plt.show()

单个节点.png

双节点,有方向A-->B

#有向图
DG = nx.DiGraph()
#添加一个节点
DG.add_node('A')
DG.add_node('B')
#添加边,有方向,A-->B
DG.add_edge('A','B')
#作图,设置节点名显示,节点大小,节点颜色
nx.draw(DG,with_labels=True,node_size=900,node_color = 'green')
plt.show()

2节点ab.png

添加更多节点

import networkx as nx
import matplotlib.pyplot as plt

colors = ['red', 'green', 'blue', 'yellow']
#有向图
DG = nx.DiGraph()
#一次性添加多节点,输入的格式为列表
DG.add_nodes_from(['A', 'B', 'C', 'D'])
#添加边,数据格式为列表
DG.add_edges_from([('A', 'B'), ('A', 'C'), ('A', 'D'), ('D','A')])
#作图,设置节点名显示,节点大小,节点颜色
nx.draw(DG,with_labels=True, node_size=900, node_color = colors)
plt.show()

多节点.png

好了,同样的道理,咱们建立角色词典,插入节点列表,然后遍历插入有向边关系,就能做出这图

人物关系图2.png

详情大家可以去看看实验楼网

《Python基于共现提取《釜山行》人物关系》

这篇文章写的很好(希望不要黑我,我也是觉得真心好)。我基本上借鉴了这篇文章思路写今天这个脚本,实现了自动生成关系网络图。

准备工作

一、安装matplotlib、networkx

二、解决matplotlib无法写中文问题

1、找到pythonX\lib\site-packages\matplotlib\mpl-data\fonts\ttf文件夹

2、matplotlib默认调用的为DejaVuSans.ttf字体文件,网上下载个

微软雅黑.ttf

3、将微软雅黑文件名改为DejaVuSans.ttf粘贴到ttf文件夹下即可。

脚本文件简介

屏幕快照 2017-04-23 下午11.04.21.png

你下载后脚本文件夹名为:人民的名义

其中的relationship.py就是大邓写的库(直接能调用的哦)

实现功能:

1、读入小数数据和角色词典后,对数据分词后生成角色关系数据(有向关系数据)

2、无需gephi绘图即可制作绚丽角色关系网络图。

注意:

1、运行脚本前,文件夹中只保留角色名单.txt 人民的名义.txt 和 relationship.py

2、要想图片好看点,一定要联网啊。里面我写了个爬虫,爬取一个配色网站的配色值。

如果你们想单机也可以画出好看的图,可以修改下代码,将代码爬虫部分改成读取本地颜色数据

使用示例

1、建好小说数据中的角色字典,格式如下

屏幕快照 2017-04-23 下午11.21.23.png

2、在文件夹中放入小说txt文件(人民的名义.txt)

3、在脚本文件夹中新建一个test.py文件

#导入relationship库中的Relationship类
from relationship import Relationship

#自定义节点词典(小说中人物角色)
dictpath = r'/Users/suosuo/Desktop/人民的名义/角色名单.txt'
#小说路径,只能是编码方式为utf-8的txt文件
datapath = r'/Users/suosuo/Desktop/人民的名义/人民的名义.txt'
#程序运行生成的角色关系图保存地址
pic = r'/Users/suosuo/Desktop/人民的名义/人物关系图.png'
Re = Relationship(dictpath, datapath)
relation = Re.relationship()
graph = Re.network_digraph(relation, pic)

4、运行

运行效果图1.png

文件夹中生成了 人物关系图.png、node_edge.txt和node_freq.txt文件。

运行效果图2.png

node_edge.txt 有向图关系数据,可以后续导入gephi软件自定义制图

node_freq.txt 节点出现频率

注意:每次运行前请把人物关系图.png、node_edge.txt和node_freq.txt文件删除掉,再运行

关注公众号:大邓带你玩python

文中末尾附有脚本文件下载地址

更多内容

文本分析

python居然有情感??真的吗??

自然语言处理库之snowNLP

数说中南大学研究生感情状况及择偶观

用gensim库做文本相似性分析

基于共现发现人物关系的python实现

用python计算两文档相似度

爬虫

初识Python的GUI编程

爬虫实战视频专辑

【视频】手把手教你抓美女~

当爬虫遭遇验证码,怎么办

知易行难

用词云图解读“于欢案”

【视频】于欢案之网民的意见(1)?

【视频】有了selenium,小白也可以自豪的说:“去TMD的抓包、cookie”

【视频】快来get新技能--抓包+cookie,爬微博不再是梦

【视频教程】用python批量抓取简书用户信息

爬豆瓣电影名的小案例(附视频操作)

爬豆瓣电影名的小案例2(附视频操作)

用Python抓取百度地图里的店名,地址和联系方式

神奇的python

怜香惜玉,我用python帮助办公室文秘

逆天的量化交易分析库-tushare

酷炫的matplotlib

开扒皮自己微信的秘密

8行代码实现微信聊天机器人

使用Python登录QQ邮箱发送QQ邮件

推荐 4
本文由 邓旭东HIT 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

1 个评论

这个好玩啊

要回复文章请先登录注册