大家好,又见面了,我是你们的朋友全栈君。
目录
4.2 加载”relation_message.csv”文件
前言:
最近复联4大火,笔者看到 “法纳斯特” 的博客得到启示,于是想动手做一个可视化分析漫威人物关系的知识图谱,做一枚硬核漫威铁粉。
1 数据爬取
1.1 漫威人物关系图谱网站
1.网址传送门:
注:网站被墙,因此很多朋友反应网站打不开,但是用梯子是可以访问的。另,我会将爬下来的csv文件的 github 地址直接贴在下文中,需要的朋友自取哈。
2.网站介绍:网站是基于 Graph 技术开发的,主要是关于漫威人物、漫威电影的图谱。
3.网站一览
首页:
人物关系:
点击头像,可看到人物的详细信息:(钢铁侠!!
漫威宇宙系列电影:
1.2 爬取人物关系数据
注:浏览器推荐使用Google Chrome。
1.打开F12调试,选择“Network”(注意是在首页):
2.关键词搜索(Ctrl + f),输入“marvel-data.json”:
3.进入“marvel-data.json”,复制json接口的URL:
在这里,我们主要需要爬取的数据是“characters”与“relationship”:
4.python代码
跑代码之前需要先配置 python 环境,在这里笔者使用的 IDE 是 PyCharm,PyCharm 的安装见此处:Win10环境Python+Tensorflow+Jupyter入门安装详解,代码中的 url 即刚才在网站上复制的 json 接口
import json
import requests
headers = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
url = 'https://graphics.straitstimes.com/STI/STIMEDIA/Interactives/2018/04/marvel-cinematic-universe-whos-who-interactive/data/marvel-data.json'
response = requests.get(url=url, headers=headers)
result = json.loads(response.text)
num = 0
names = []
item = {0: 'friend', 1: 'enemy', 2: 'creation', 3: 'family', 4: 'work', 5: 'love'}
for i in result['relationship']:
subject = result['relationship'][i]['id']
object = result['relationship'][i]['target_id']
if subject not in names:
names.append(subject)
if object not in names:
names.append(object)
relation = int(result['relationship'][i]['relationship'])
with open('relation_message.csv', 'a+') as f:
f.write(subject + ',' + object + ',' + item[relation] + '\n')
for j in names:
num += 1
with open('names_message.csv', 'a+') as f:
f.write(j + ',' + str(num) + '\n')
for k in result['characters']:
id = result['characters'][k]['id']
name = result['characters'][k]['name']
status = result['characters'][k]['status']
species = result['characters'][k]['species']
with open('message.csv', 'a+') as f:
f.write(id + ',' + name + ',' + status + ',' + species + '\n')
5.运行完毕后会产生三个csv文件
csv文件 github 地址:https://github.com/leungll/Marvel-File
至此,数据爬取部分已经完成。
2 Neo4j的安装及服务启动
2.1 Neo4j下载安装
1.进入官网下载:https://neo4j.com/download-center/#releases
若点击之后网站没有弹出下载提示,则点击此处下载:
2.解压安装包:
注意:切记安装路径不要含任何中文字符或空格(例如文件名为“Program Files”),否则远程服务器访问本地数据库时会乱码,导致无法读取数据
2.2 开启Neo4j服务
1.管理员身份打开Windows PowerShell:
2.启动:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Import-Module '(neo4j文件目录)\bin\Neo4j-Management.psd1'
Invoke-Neo4j console
3.访问服务器:
localhost:7474
4.输入密码:
初始用户名:neo4j,初始密码:neo4j
5.之后服务器会要求你修改密码:
3 数据准备
生成的三个csv文件中,“names_message.csv”即角色,“relation_message.csv”即人物关系情况。
3.1 加入列名
1.在“names_message.csv”中
2.在“relation_message.csv”中
3.2 放入本地Neo4j的import文件
4 数据可视化
4.1 加载”names_message.csv”文件
LOAD CSV WITH HEADERS FROM 'file:///names_message.csv' AS data CREATE (:people{name:data.name, id:data.id});
182个人物节点已生成。
4.2 加载”relation_message.csv”文件
LOAD CSV WITH HEADERS FROM "file:///relation_message.csv" AS relations
MATCH (entity1:people{name:relations.subject}) , (entity2:people{name:relations.object})
CREATE (entity1)-[:rel{relation: relations.relation}]->(entity2)
1144对人物关系已建立完毕。
4.3 查看人物关系图谱
1.取消限制(去掉”LIMIT 25″):
运行:
2.显示人物及关系
选择全屏:
替换人物名称:
替换人物关系:
4.4 筛选人物关系
1.托尼·斯达克的朋友:
match p=(n:people{name:"tonys"})-[:rel{relation:"friend"}]->() return p;
其中「thor」为「雷神」,「stever」为「美队」,「blackw」为「黑寡妇」,「vision」为「幻视」,「peterp」为「蜘蛛侠」,「bruceb」为「绿巨人」
2.美队的女友:
match p=(n:people{name:"stever"})-[:rel{relation:"love"}]->() return p;
其余的查询类似我们熟知的SQL语句,大家可以多多尝试。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/153310.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...