文本分析之制作网络关系图——Python
今天给大家带来我一个脚本,用来分析社会网络关系。
这个图我没有用到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()
双节点,有方向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()
添加更多节点
- 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()
好了,同样的道理,咱们建立角色词典,插入节点列表,然后遍历插入有向边关系,就能做出这图:
《Python基于共现提取《釜山行》人物关系》
这篇文章写的很好(希望不要黑我,我也是觉得真心好)。我基本上借鉴了这篇文章思路写今天这个脚本,实现了自动生成关系网络图。
准备工作
- 一、安装matplotlib、networkx
- 二、解决matplotlib无法写中文问题
- 1、找到pythonX\lib\site-packages\matplotlib\mpl-data\fonts\ttf文件夹
- 2、matplotlib默认调用的为DejaVuSans.ttf字体文件,网上下载个
- 微软雅黑.ttf
- 3、将微软雅黑文件名改为DejaVuSans.ttf粘贴到ttf文件夹下即可。
脚本文件简介
你下载后脚本文件夹名为:人民的名义
其中的relationship.py就是大邓写的库(直接能调用的哦)
实现功能:
1、读入小数数据和角色词典后,对数据分词后生成角色关系数据(有向关系数据)
2、无需gephi绘图即可制作绚丽角色关系网络图。
注意:
1、运行脚本前,文件夹中只保留角色名单.txt 人民的名义.txt 和 relationship.py
2、要想图片好看点,一定要联网啊。里面我写了个爬虫,爬取一个配色网站的配色值。
如果你们想单机也可以画出好看的图,可以修改下代码,将代码爬虫部分改成读取本地颜色数据
使用示例
1、建好小说数据中的角色字典,格式如下
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、运行
文件夹中生成了 人物关系图.png、node_edge.txt和node_freq.txt文件。
node_edge.txt 有向图关系数据,可以后续导入gephi软件自定义制图
node_freq.txt 节点出现频率
注意:每次运行前请把人物关系图.png、node_edge.txt和node_freq.txt文件删除掉,再运行。
相关文章
- 图像处理工具Python扩展库,你了解吗?
- 十个常用的损失函数解释以及Python代码实现
- 30 个数据科学工作中必备的 Python 包
- 如何在 Windows 上安装 Python
- 几行 Python 代码就可以提取数百个时间序列特征
- 使用Python快速搭建接口自动化测试脚本实战总结
- 哪种编程语言最适合开发网页抓取工具?
- 不要在 Python 中使用循环,这些方法其实更棒!
- 震惊!用Python探索《红楼梦》的人物关系!
- 如何最简单、通俗地理解Python模块?
- 酷炫,Python实现交通数据可视化!
- 为什么急于寻找Python的替代者?
- 30 个数据工程必备的Python 包
- 去字节面试被面这题能答上来吗?谈谈你对时间轮的理解?
- 火山引擎在行为分析场景下的 ClickHouse JOIN 优化
- 用Python爬取了某宝1166家月饼数据进行可视化分析,终于找到最好吃的月饼~
- 在 Linux 上试试这个基于 Python 的文件管理器
- Python列表解析式到底该怎么用?
- 如何快速把你的 Python 代码变为 API
- 十个Python初学者常犯的错误