python调用gephi_利用Python和Gephi制作人物关系网络图
写在前面:本文是学习实验楼《Python 基于共现提取人物关系》这一课后的总结,博主仅做了一些微小的改动,大家可以点击这里跳转学习。
开门见山,先亮结果。我用这种方法制作了《龙族3·黑月之潮(下)》的人物关系网络图,如下图所示:
这个图是用Gephi生成的,关于Gephi使用的教程有很多,大家去这里学习。
图形可以由软件自动生成,但是数据得需要我们自己准备。要画出这种关系图,我们需要给Gephi输入两种格式的文件,即节点文件和边文件。
节点文件(node.txt),有Id, Label, Weight(节点出现的次数)三个变量,如图所示:
边文件(edge.txt),有Source(起点),Target(终端),Weight(该起点-终点的出现次数)三个变量,如图所示:
因此,实现这个需求需要两步:
第一步:用Python对文本中的关系进行提取,生成这两个格式的文件。
第二步:将这两个文件输入Gephi,生成图片。
下面我们逐步讲讲解。
第一步:Python提取
准备
1、安装jieba库,可以在命令行输入以下命令:1pip install jieba
2、准备待处理的文本,这里以《龙族3·黑月之潮(下)》为例,点击下载。
3、准备姓名字典,可以直接从百度百科上复制粘贴,以下是《龙族》主要角色的姓名字典:
导入相关库1import jieba, codecs
为什么要用codecs打开文件,而不直接用open打开文件,请看这里。
创建字典使用字典类型names保存人物,该字典的键为人物名称,值为该人物在全文中出现的次数;
使用字典类型relationships保存人物关系的有向边,该字典的键为有向边的起点,值为一个字典edge,edge的键是有向边的终点,值是有向边的权值,代表两个人物之间联系的紧密程度。
lineNames是一个缓存变量,保存对每一段分词得到当前段中出现的人物名称,lineName[i]是一个列表,列表中存储第i段中出现过的人物。
1
2
3names = {}
relationships = {} # 关系字典
lineNames = [] # 每段内人物关系
生成节点文件(node.txt)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15jieba.load_userdict("resource\dict.txt") # 加载字典
with open("resource\dict.txt","r",encoding="utf8") as f:
nameList = f.readlines() # 将角色姓名存入列表nameList
with codecs.open("resource\龙族3·黑月之潮·下.txt", "r", "utf8") as f:
for line in f.readlines():
wordList = jieba.lcut(line) # 分词并返回一个列表
lineNames.append([]) # 为新读入的一段添加该段的人物名称列表
for w in wordList: # 遍历列表
if w+"rn" not in nameList:
continue # 当分词不在姓名列表nameList时认为该词不是人名
lineNames[-1].append(w) # 为当前段的环境增加一个人物
if names.get(w) is None: # 如果该人名在姓名字典中对应的权值为空(还没有这个键值对)
names[w] = 0 # 则创建该键值对,参考实例test1.py
relationships[w] = {}
names[w] += 1 # 该人物出现次数加 1
生成边文件(edge.txt)1
2
3
4
5
6
7
8
9for 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: # 两人共同出现次数加 1
relationships[name1][name2] = relationships[name1][name2]+ 1
存储节点文件(node.txt)1
2
3
4with codecs.open("longzu_node.txt", "w", "utf8") as f:
f.write("Id Label Weightrn")
for name, times in names.items():
f.write(name + " " + name + " " + str(times) + "rn")
存储边文件(edge.txt)1
2
3
4
5
6with codecs.open("longzu_edge.txt", "w", "utf8") as f:
f.write("Source Target Weightrn")
for name, edges in relationships.items():
for v, w in edges.items():
if w > 3:
f.write(name + " " + v + " " + str(w) + "rn")
运行代码
最后,运行代码,就可以在工作目录生成节点文件(longzu_node.txt)和边文件(longzu_edge.txt)了,程序运行时间长短跟文本长度相关。
最后,你可以访问我的GitHub直接下载源代码和相关文本。
第二步:Gephi生成
安装软件
安装Gephi,可以点击这里下载Gephi-0.9.1-windows。
导入数据
1、打开软件-新建工程-文件-import spreadsheet
2、上传节点文件(longzu_node.txt)
3、上传边文件(longzu_edge.txt)
导入后 gephi 将显示所有节点。此时节点没有合适的布局,可以在最上方的数据资料选项卡中查看图中所有的边和节点,对于分词不准确导致的噪音,可以手动删除。
设置参数
1、分别点击右侧统计栏中平均度和模块化运行计算。模块化运算时Resolution值填写0.5 。
2、击左上角外观中节点第一个选项卡,选择数值设定,选择Modularity Class。
3、选中第二个选项卡,选择数值设定,选择连入度,最小尺寸填10,最大尺寸填40,点击应用为节点染色、放大。
4、选择左下角布局中的Force Atlas,斥力强度填写20000.0,吸引强度填写1.0。点击运行,稍后点击停止。
5、点击最上方的预览按钮,选中左侧节点标签中显示标签选项,并选择一种字体和字号,这里选择7号楷体,点击刷新即可看到最终的网络图。
导出图片
点击文件-输出,即可输出图片。png格式的图片较小,放大后不清晰,建议存储为PDF格式,再转为图片格式。
最终图片
python调用gephi_利用Python和Gephi制作人物关系网络图相关推荐
- python调用msf_MSF利用python反弹shell-Bypass AV
本文主要介绍两种利用msf生成python版 payload,并利用Py2exe或PyInstaller将python文件转为exe文件,可成功bypass某些AV反弹shell msf-python ...
- 【Python例】利用 python 进行图片文字信息的提取 --- OCR-EasyOCR
[Python例]利用 python 进行图片文字信息的提取 - OCR-EasyOCR 本文主要用于记录,并使用 python 脚本进行图片文字信息的生成. 什么是 OCR? OCR OCR(Opt ...
- 【Python例】利用 python 进行用户画像词云图的生成 --- wordcloud
[Python例]利用 python 进行用户画像词云图的生成 - wordcloud 本文主要用于记录,并使用 python 脚本进行用户画像的词云图的生成. 前言 对于词云图来说,是一个用户画像数 ...
- boxplot用法 python,[Python画图笔记]利用Python画箱型图boxplot
[Python画图笔记]利用Python画箱型图boxplot [Python画图笔记]利用Python画箱型图boxplot 最近在学习使用Python画图,想用subplot画两幅箱型图,分别用来 ...
- 如何利用pyecharts绘制炫酷的关系网络图?
如何利用pyecharts绘制炫酷的关系网络图 这是本学期在大数据哲学与社会科学实验室做的第六次分享了. 第一次分享的是: 如何利用"wordcloud+jieba"制作中文词云? ...
- python拼图_利用python制作拼图小游戏的全过程
开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块 关注公众号:Python学习指南,回复"拼图"即可获取源码 环境搭建 安装P ...
- python英文发音-利用Python制作查单词小程序(二):下载音频并播放单词读音
上篇文章中,我们要使用"execjs"这个模块来执行JS代码,这个模块在Anaconda中没有预先安装好,我们需要单独安装它.那么,我们如何安装新的模块呢? 以Anaconda为例 ...
- 【深度相机D435i】Windows+Ubuntu下调用D435i利用Python读取、保存RGB、Depth图片
目录 前言 一.D435i深度相机介绍 二.Windows下安装D435i 1.安装Intel® RealSense™ SDK 2.0 2.使用Intel® RealSense™ Viewer查看D4 ...
- python调用lib_基于python调用libvirt API
基于python调用libvirt API 1.程序代码 #!/usr/bin/python import libvirt import sys def createConnection(): con ...
- python控制autocad_利用python控制Autocad:pyautocad方式
发现pyautocad模块:可以用python控制autocad的包.今天把文档中的重点内容摘录出来,以后绘图.计算大工程量.或者识别施工图的时候时候也许可以用到. 一.连接cad pyautocad ...
最新文章
- 模板:使用文件作为输入
- 服务管理--systemctl命令
- STM32 备份寄存器操作
- smartgwt_高级SmartGWT教程,第1部分
- 计算机应用基础2010版知识点,2010计算机应用基础选择题(含答案版)重点.doc
- 玩转Nacos参数配置!多图勿点
- HDOJ 1274 展开字符串
- SQOOP——MySQL 和 HDFS 的桥梁
- HDU 5976 2016ICPC大连 F: Detachment(找规律)
- Editor GUI 的 Gamma Correction
- fseek函数、ftell函数、rewind函数详解
- web用css做网页实验报告,Web实验报告网页设计与制作
- 参考文献中英文人名_参考文献英文名字应该怎么写?
- 结对项目--黄金点游戏(邓乐曾亮)
- opencv 入门笔记五 padding(图像加边框)
- sketch制作Android动画,Sketch制作GIF动画——基础篇(改良版)
- 怎样查看服务器操作系统密码,IIS提示:您未被授权查看该页 并弹出输入用户名密码Windows服务器操作系统 -电脑资料...
- 常用前端技术有哪些?
- Java体系知识学习——Java怎么学?
- C#实现ODBC驱动代码连接Sql Server数据库