只需 20 行代码,就能读懂复仇者联盟的人物关系!| 技术头条
作者 | beyondma,CSDN 博客专家
笔者虽不算是漫威迷,不过刚刚在看完了复仇者联盟4以后还是感觉非常非常震撼的,具体情节就不剧透了,可以负责的给出五星推荐指数。现在就让我怀着激动的心情,用R语言写观后感吧。
复联4中人物的基本关系
那么首先我们还是先来分析漫威宇宙中的人物关系,维基百科去下载相关人物关系,也可以用我直接整理好的文件:
地址:https://pan.baidu.com/s/1uEbGDKNxgLTdvQVVktEiFw
提取码:rqb3
将其中的net.1.csv和characters1.csv')读出来,就可以用visNetwork去建立人物关系图了,代码如下:
edges =read.csv('f:/avengers/net1.csv')
nodes=read.csv('f:/avengers/characters1.csv')
visNetwork(nodes, edges, width = "100%")
visNetwork是一款非常优秀的关系图渲染插件,在之前的博客中已经有所介绍了,详见https://blog.csdn.net/BEYONDMA/article/details/89431724,这里不加赘述了。我们可以看到,灭霸、钢铁侠、雷神均是各自阵营的核心节点,具体效果如下:读者大可以按照上面的代码自己试一下。
复联4中人物的深入分析
想要深入分析人物的性格与关系,还是需要有大量的影评及语料数据做为基础的,这里我们还是选取豆瓣上的影评数据,由于很多评论都涉及相关剧情了,为避免剧透,具体的爬虫过程就省略了,抓取到影评的文本数据后,我先做了个词云。具体过程详见博客文章:https://blog.csdn.net/BEYONDMA/article/details/85400923,可以看到“最后、最终、最好”成为了关键词,从这个角度也可以看出,这次的复联4的确是漫威的巅峰之作。
想了解一个人物,看他和身边的朋友就能了解个大概,而文本分析中的wordtovector就是这样一种算法,用一个长度固定window来用观察一个词经常和哪些其它词同时出现,来将词转为向量,详见博客文章https://blog.csdn.net/BEYONDMA/article/details/88074516的第四部分。那么这时候我们就可以将刚刚抓取到的影评文本,训练为词向量模型。
> model<-word2vec(layer1_size=200,train_file='f:/avengers/豆瓣1.txt',save_vocab_file='f:/avengers/beyondma.txt',binary=1,cbow=0,alpha=0,output_file='f:/avengers/beyondma.bin',window=5,sample=0.0001,min_count=6,num_threads=2)
Starting training using file f:/avengers/豆瓣1.txt
Vocab size: 512
Words in train file: 8417
当然读者也可以用我之前分享的beyondma.bin文件,就可以直接使用distance函数,那么就可以知道,比如“蜘蛛侠”这个词和哪些词的距离最近。其结果如下。
> dist<-distance(file_name='f:/avengers/beyondma.bin',search_word='蜘蛛侠',num=10)
Entered word or sentence: 蜘蛛侠
Word: 蜘蛛侠 Position in vocabulary: 45
> dist
word dist
1 奥创 0.194927796721458
2 霍华德 0.188055962324142
3 钢铁侠 0.169346332550049
4 英雄 0.160935759544373
5 他们 0.156465873122215
为避免剧透,本文其实删除了很多关键的数据展示,不过如果读者还没看过复联4,那么在观影前看看本文,就算补习一下相关背景吧。
本文已获CSDN 博客专家 beyondma 授权,如需转载,请联系作者。
原文:https://blog.csdn.net/BEYONDMA/article/details/89553279
【End】
作为码一代,想教码二代却无从下手:
听说少儿编程很火,可它有哪些好处呢?
孩子多大开始学习比较好呢?又该如何学习呢?
最新的编程教育政策又有哪些呢?
下面给大家介绍CSDN新成员:极客宝宝(ID:geek_baby)
戳他了解更多↓↓↓
热 文 推 荐
☞ 19 岁当老板,20 岁 ICO 失败,编程少年的创业辛酸史
☞ 打开阿兹海默之门:华裔张复伦利用RNN成功解码脑电波,合成语音 | Nature
☞ 澳洲生活7年, 前阿里程序员谈我们的区块链差距究竟在哪?
System.out.println("点个在看吧!");
console.log("点个在看吧!");
print("点个在看吧!");
printf("点个在看吧!\n");
cout << "点个在看吧!" << endl;
Console.WriteLine("点个在看吧!");
Response.Write("点个在看吧!");
alert("点个在看吧!")
echo "点个在看吧!