笔者是《权力的游戏》忠实粉丝,而随着第八季的开播,我相信整部剧也将迎来高潮,人类要跟亡者军团进行交战了,到底是亡者军队击溃人类,还是人类打败亡者军队呢?王座到底会花落谁家? 让我们用R语言来研究一下其中的奥秘。

下载、处理人物关系数据

首先我们需要下载权游中人物的数据,可以到https://github.com/fabrikate/dataGOT和https://en.wikipedia.org/wiki/List_of_Game_of_Thrones_characters去下载,如果链接不能打开,可以使用链接:https://pan.baidu.com/s/1CkEL35dsCRWvXNJ6nXJdhg 提取码:4lxi来获取本文中的相关材料。

如果读者使用的是原始链接,会看到character-predictions.csv、character-deaths.csv、battles.csv三个文件,使用百度网盘下载的读者还会看到nodes.csv和net1.csv两个文件。其中在原始材料中character-predictions.csv是最重要的文件。

这里面有角色的姓名,家庭以及父母、配偶、子女、家族等人物关系。那么我们就要梳理这其中的人物关系。

首先载入数据

#载入数据,注意修改文件路径
battle<-read.csv("battles.csv")
deaths<-read.csv("character-deaths.csv")
pred<-read.csv("character-predictions.csv")

建立人物关系,以亲子关系为例

#以孩子关系为例,找出prediction表中的亲子关系
child_of <- data.frame(name = pred$name[grepl("son of | daughter of", pred$name)],stringsAsFactors = FALSE)child_of$child_of <- ifelse(grepl("daughter", child_of$name), paste(gsub("(.* daughter of )(.*)", "\\2", child_of$name), gsub("(.* )(.*)( daughter of.*)", "\\2", child_of$name)), paste(gsub("(.* son of )(.*)", "\\2", child_of$name), gsub("(.* )(.*)( son of.*)", "\\2", child_of$name)))
child_of[child_of$name == "not clear", "child_of"] <- "notclear"

                                             R语言人物关系图插件简介

最近visNetwork的R语言版本已经发布了,这是一款利用JS框架来渲染的专门用来展示人物关系的工具。他的安装非常简单install.packages('visNetwork')即可完成安装。

它的用法也非常简单,定义nodes和edge就可以完成,其中node就是每个人物的定义,而edge则是表示人物之间关系的。示例如下:

首先先成随机的人物(nodes)   ,其中label标签对应人物名称,group对应人物家族,value对应节点大小,shape对应节点开关,title是代码鼠标经过时显示的tip,color代表颜色,shadow代码是否有阴影。

nodes <- data.frame(id = 1:10, label = paste("Node", 1:10),                                 # add labels on nodesgroup = c("GrA", "GrB"),                                     # add groups on nodes value = 1:10,                                                # size adding valueshape = c("square", "triangle", "box", "circle", "dot", "star","ellipse", "database", "text", "diamond"),                   # control shape of nodestitle = paste0("<p><b>", 1:10,"</b><br>Node !</p>"),         # tooltip (html or character)color = c("darkred", "grey", "orange", "darkblue", "purple"),# colorshadow = c(FALSE, TRUE, FALSE, TRUE, TRUE))                  # shadowhead(nodes)
##   id  label group value    shape                     title    color shadow
## 1  1 Node 1   GrA     1   square <p><b>1</b><br>Node !</p>  darkred  FALSE
## 2  2 Node 2   GrB     2 triangle <p><b>2</b><br>Node !</p>     grey   TRUE
## 3  3 Node 3   GrA     3      box <p><b>3</b><br>Node !</p>   orange  FALSE
## 4  4 Node 4   GrB     4   circle <p><b>4</b><br>Node !</p> darkblue   TRUE
## 5  5 Node 5   GrA     5      dot <p><b>5</b><br>Node !</p>   purple   TRUE
## 6  6 Node 6   GrB     6     star <p><b>6</b><br>Node !</p>  darkred  FALSE

然后生成随着的人物关系(edges),其中from,to代表连线的两个节点,label代码连线的名称,length代码连线的taya,arrow代表简头的方向,title代表鼠标经过时出现的tip

edges <- data.frame(from = sample(1:10, 8), to = sample(1:10, 8),label = paste("Edge", 1:8),                                 # add labels on edgeslength = c(100,500),                                        # lengtharrows = c("to", "from", "middle", "middle;to"),            # arrowsdashes = c(TRUE, FALSE),                                    # dashestitle = paste("Edge", 1:8),                                 # tooltip (html or character)smooth = c(FALSE, TRUE),                                    # smoothshadow = c(FALSE, TRUE, FALSE, TRUE))                       # shadow
head(edges)
##   from to  label length    arrows dashes  title smooth shadow
## 1    9  9 Edge 1    100        to   TRUE Edge 1  FALSE  FALSE
## 2    4  2 Edge 2    500      from  FALSE Edge 2   TRUE   TRUE
## 3    1  3 Edge 3    100    middle   TRUE Edge 3  FALSE  FALSE
## 4    3  7 Edge 4    500 middle;to  FALSE Edge 4   TRUE   TRUE
## 5   10  6 Edge 5    100        to   TRUE Edge 5  FALSE  FALSE
## 6    2  8 Edge 6    500      from  FALSE Edge 6   TRUE   TRUE

最后就可以生成社交网络了

visNetwork(nodes, edges, width = "100%")

                                           绘制R语言人物关系图

  接下来,我们就可以来绘制r语言的人物关系图了,刚刚我们已经介绍了如何使用语言来进行数据处理了,这里我们不加赘述,读者可以直接使用我在百度去的分享,直接读入相关数据即可,当然也可以研究一下如何利用权游的官方数据来生成角色和角色之间的关系信息.

library(visNetwork)
edges =read.csv('f:/net1.csv')
nodes=read.csv('f:/characters1.csv')
View(edges)
View(nodes)

先来讲一下角色中的关系信息character1.csv,其内容如下:其中的各列我刚刚都已经介绍过了,只是id一项呢是节点的唯一标识(key),其余不需要再说明了.

再来看人物关系图net1.csv内容如下,其中from和to代表了characters当中的人物id值,其余刚刚也介绍过了.

最后使用visNetwork(nodes, edges, width = "100%")来大功靠成了,注意生成的是个动态的js网页,你就可以从任意一个人物切换,走入他们的世界了

《权游》第八季震撼开播,10行代码动态展示其中的爱恨情仇相关推荐

  1. 八皇后问题初始思路python_Python 学习笔记(一)10行代码解决八皇后问题

    不引入标准库和第三方库,不用分号将多行代码写在一行,再10行代码之类求出八皇后问题的所有解. ----------------------------------------------------- ...

  2. 对你没有看错!不到 10 行代码完成抖音热门视频的爬取!

    [摘要] 最近研究了一下抖音的爬虫,目前实现了热门话题和热门音乐下面所有相关视频的爬取,并且我已经将该爬虫打包成了一个 Python 库并发布,名称就叫做 douyin,利用该库可以使用不到 10 行 ...

  3. 10 行代码玩转 NumPy!

    作者 | 天元浪子 来源 | Python作业辅导员 NumPy也可以画图吗?当然!NumPy不仅可以画,还可以画得更好.画得更快!比如下面这幅画,只需要10行代码就可以画出来.若能整明白这10行代码 ...

  4. 10行代码实现目标检测,请收下这份教程

     翻译 | 林椿眄 编辑 | 阿司匹林 出品 | AI科技大本营(公众号ID:rgznai100) 作为人工智能的一个重要领域,计算机视觉是一门可以识别并理解图像和场景的计算机及软件系统科学.该领 ...

  5. 什么,PyTorch还能开发新药?哈佛推出这款工具包,10行代码训练“药神”模型...

    萧箫 编辑整理 量子位 报道 | 公众号 QbitAI 最近,来自哈佛大学等机构的研究人员,开发出了一个AI"药神"工具包,为加速新冠疫情下的新药研发助力. 这款名为DeepPur ...

  6. 实战:使用 Python 用不到 10 行代码计算汽车数量

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在这篇文章中,将教你如何使用 Python 用 10 行代码构建自 ...

  7. 10行代码带你搞定目标检测(附代码)

    来源:大数据文摘 本文约2700字,建议阅读5分钟. 本文介绍采用代码搞定目标检测的技术. 计算机视觉是人工智能的一个重要领域,是关于计算机和软件系统的科学,可以对图像和场景进行识别.理解.计算机视觉 ...

  8. 10行代码实现目标检测

    2019独角兽企业重金招聘Python工程师标准>>> 作为人工智能的一个重要领域,计算机视觉是一门可以识别并理解图像和场景的计算机及软件系统科学.该领域主要包括图像识别,目标检测, ...

  9. 10行代码-原生JS双向数据绑定演示

    很简单的10行代码就可以实现输入框与页面实时显示的绑定,也就是百度一下一大堆的所谓的双向数据绑定,完全没有必要搞那么长 function test() {const container = docum ...

最新文章

  1. lucene 索引流程整理笔记
  2. 人工智能技术为大脑制作地图 前沿
  3. nyoj 947 Max Xor(字典树)
  4. 二叉堆的操作总结(insert+deleteMin+increaseKey+decreaseKey+percolateDown+percolateUp)
  5. python综合管理系统_Python-20 (信息系统-框架/循环/增删/综合应用)
  6. 验证控件;正则表达式;
  7. KMP算法的浅显解释
  8. mac 使用 pf 做端口转发
  9. Linux版本CentOS下安装svn客户端及使用
  10. 2023计算机毕业设计SSM最新选题之java企业财务报销审核系统n8191
  11. android dsd 播放器,Android中播放DSD音乐
  12. matlab滤波函数imfilter、生成掩模函数fspecial
  13. Myeclipse2014破解教程
  14. 企业内部短信模板大全分析
  15. 求一个序列所有区间不同数的个数之和
  16. Selenium初级 | 使用navigate系列方法操作网页
  17. 手机邮箱怎么弄_如何在iPhone6手机上设置邮箱?
  18. 客户细分——RFM模型
  19. 工单流转 指派 php,第三节 工单的指派和处理
  20. 中国移动NBIOT卡的几种APN应用场景

热门文章

  1. 鼠标滚动调整图片大小(css3 zoom 放大缩小)
  2. 中信soeasy网络硬盘 瑞星杀毒软件升级包
  3. UIUC罗宇男:AI-assisted Scientific Discovery
  4. 电子书籍下载网站集锦(不断更新中...)
  5. 机器人教育在高科技领域的主观作用
  6. 【人脸识别】Gabor+SVM比较PCA+SVM人脸识别【含GUI Matlab源码 685期】
  7. jQueryDom和源生DOM相互的转换、jQuery选择器语法、JQuery层次选择器语法、jQuery属性选择器语法、jQuery伪类选择器语法、
  8. c语言程序设计杨毅版,标准C++程序设计
  9. Java语言学习之类加载机制与反射
  10. 咔咕软件测试自学,咔咕(kaakoo)