送书 | 用 Neo4j 理一理王者荣耀英雄之间千丝万缕的关系,挺好玩!

news/2024/11/23 3:32:26/

本次送书之前先给大家介绍我的好友周萝卜,他是一个非常有趣的人,经常使用python做一些骚操作!今天这篇文章就是他给大家带来的分享。下面是他的公众号,大家感兴趣的可以关注一下他哦!

正文开启

当我们进入王者荣耀游戏客户端,是可以在英雄关系页面看到不同英雄之间的关联信息的,比如花木兰和兰陵王之间的宿命,安其拉和亚瑟的单恋以及露娜与铠那命运弄人的兄妹之情等等

要厘清这些英雄之间的关系,还是比较困难的,尤其是还有很多中心英雄,与其有关系的英雄多大数十个。今天我们就通过 neo4j 数据库来处理这些错综复杂的关系,看看一直伴随我们每个王者峡谷的英雄都有着怎样的“朋友圈”呢

数据获取

找了很久,还是在网上找到了一个比较全面的英雄关系数据

https://www.haosix.com/gonglue/411

2ffd979b81e21011cdc066e3cc184f15.png

网页很简单,直接上 requests 爬取即可

import requests
from bs4 import BeautifulSoup
import pandas as pd
import os
import csvres = requests.get("https://www.haosix.com/gonglue/411")

然后我们通过 beautifulsoup 来解析网页

soup = BeautifulSoup(res.text)
div = soup.find('div', class_="bbcode-body bbcode-body-v2 markdown-body")
p_list = div.find_all("p")[2:-1]

现在列表 p_list 当中就是我们需要的数据了

接下来我们编写一个处理数据的函数,把网页上的数据转换成我们需要的形式

def deal_str(data):rel_dict = {}name = data.split(":")name1 = name[0]name_rel = name[1].split("、")if r"(" in name_rel[0]:for i in name_rel:tmp = i.split("(")rel_dict[tmp[0]] = tmp[1].split(")")[0]return [name1, rel_dict]return [name1, "无"]

我们来看下函数效果

deal_str('裴擒虎:杨玉环(女神与同伴)、公孙离(收留之人与同伴)、弈星(互补的同伴)、明世隐(下属与首领)、苏烈(下属与曾经上司)')

9be87fa33a53d9b33d35338823650e18.png

得到了英雄名称以及和他有关系的英雄关系信息

再下来就是保存到 csv 文件

def save_data_name(data_name, list_info):if not os.path.exists(data_name + r'.csv'):# 表头name = ["name","id"]# 建立DataFrame对象file_test = pd.DataFrame(columns=name, data=list_info)# 数据写入file_test.to_csv(data_name + r'.csv', encoding='utf-8', index=False)else:with open(data_name + r'.csv', 'a+', newline='', encoding='utf-8') as file_test:# 追加到文件后面writer = csv.writer(file_test)# 写入文件writer.writerows(list_info)

一切准备工作完毕之后,就可以整合代码了

content = {}
index = 0
for p in p_list:content = deal_str(p.text)save_data_name("name", [[content[0], index]])if type(content[1]) == dict:for k,v in content[1].items():print([content[0], k, v])save_data_relation("relation", [[content[0], k, v]])index += 1

处理过程如下

48989277f8fbfed26dd36b7e4b1297b4.png

这要我们就得到了两个 csv 文件,一个保存了英雄名称,另一个保存了英雄关系信息

940a504e9e89fe4aad2bf74c04996330.gif

6851c587d2639f12fe021e9ed6e38822.gif

Neo4j 使用简介

Neo4j 是目前最为流行的图数据库,用于存储丰富的关系数据。图是由顶点(Vertex),边(Edge)和属性(Property)组成的,顶点和边都可以设置属性,顶点也称作节点,边也称作关系,每个节点和关系都可以由一个或多个属性

对于 Neo4j 的安装就不再赘述了,想我这里就是在自己本地的 Windows 上安装了一个,还是比较简单的

安装完成之后,我们一般可以在本地开发 Neo4j 控制浏览器

http://localhost:7474/browser/

f2da375279363c93c188fbf3a14bb730.png

然后我们把前面生成的两个文件放到 Neo4j 安装目录的 import 文件夹下(安全考虑,Neo4j 默认只能从该目录下导入文件)

bce089f04ec627d6408c4e81e144f0f3.png

接下来我们在 Neo4j 命令行中编写 Cypher 命令,先导入 csv 文件
英雄名称文件:

LOAD CSV WITH HEADERS FROM "file:///name.csv" AS line MERGE (p:person{name:line.name,id:line.id})

86e49138fd199abb9a271e9d49326565.png

英雄关系文件:

LOAD CSV WITH HEADERS FROM "file:///relation.csv" AS relations MATCH (entity1:person{name:relations.name1}), (entity2: person{name:relations.name2}) CREATE (entity1)-[:rel{relation:relations.relation}]->(entity2)

06d0e7af40c72e445a2017dad5e41e99.png

如果一切不出意外,我们就已经完成了数据导入,下面就可以查看关系了

MATCH p=()-->() return p;

225b4273cb91189e0fabbff3faa60a71.png

我们先来看一张整体图

fc2dbb03690012c97ce8cf5fab1c60bd.png

不是特别清晰,我们来看看局部

7260161b41ebd88cea7438733660ef27.png

f63f4c4e9e82ec8f0b50f9a2c24bf7a1.png

485cfe3f8bc23fc327f73b261b8d54e2.png

好了,今天的分享就到这里,我们下次见,不要忘记一键三连哦!

送书时间

本次送书是《对比Excel,轻松学习Python报表自动化》,这本书的主题就是数据分析师角度的报表自动化。

全书主要分为 个部分:

  • 第 1 部分介绍 Python 基础知识,让读者对 Python 中常用的操作和概念有所了解;

  • 第 2 部分介绍格式相关的设置方法,包括字体设置、条件格式设置等内容;

  • 第 3 部分介绍各种类型的函数;

  • 第 4 部分介绍自动化相关的其他技能,比如自动发送邮件、自动打包等操作。

真正做过数据分析师的人应该知道,一份报表大体其实就部分:数据处理+格式设置。

数据处理就是对数据进行缺失值、重复值、异常值、还有加减乘除等处理。

格式设置主要就是字体设置、单元格设置、条件格式这些。

关于数据处理,第一本书《对比Excel,轻松学习Python数据分析》讲得差不多了,《对比Excel,轻松学习Python报表自动化》一书更多讲述格式设置和函数运算等内容。

94f85d8bc6eca9530cce4667c8b44278.png

公众号回复:送书 ,参与抽奖(共3本)

点击下方回复:送书  即可!

大家如果有什么建议,欢迎扫一扫二维码私聊小编~

回复:加群 可加入Python技术交流群

05a7a43205d7ac6b54f50ae4a5466f53.png


http://www.ppmy.cn/news/305952.html

相关文章

前途命运

梦想在哪里? 前途在何方?

邂逅“命运之师”人生巨变

为了度过美好的人生努力磨炼和提高心性这种“自助”努力当然是必要的。但另一方面与明师相遇也不可或缺这样的人能引导我们的人生走向更好的方向。所谓人生也可以说是相遇的积聚。好的相遇能帮助我们磨炼和提高心性。那么要遇到这种可以被称为“命运之师”的人该怎么做才好呢这…

宿命论毫无意义

宿命论对于我们来说毫无意义!劝各位同学们不要受它的荼毒。 宿命论告诉我们一切皆有天定,我们所做的一切都是按照既定的道路前进的。你和谁结婚,生几个孩子,乃至你孩子叫什么名字都是既定的,就如同你扔出去一个皮球&a…

宿命

谁是谁的宿命,谁是谁的永远。 午夜时分,那一段记忆,忽然不经意被勾起一些琐碎的片段,一次又一次地触动我内心自以为保护得很好的脆弱的弦。曾经的爱情深刻得铭心刻骨,一个熟悉的语气或背影都会让我挥之不去的想你&…

王者荣耀觉悟系列(简介)

标题由觉悟引领的学习 最近在看王者荣耀觉悟相关的资料,觉悟并没有开源,不过网上有个平民版的’觉悟’。我把这个平民版做了重构了,不过目前模型表现效果并不好,打算做好了再共享出来。 通过近期的阅读,发现游戏AI主…

内心英雄

少林师父对一个习武已有四年的徒弟说:「你的功夫已经学得差不多,可以出师下山。」但是徒弟担心自己的功夫还没学好,不敢下山,央求师父再让他在寺里多习武两年。 隔天徒弟发现,寺内已空无一人,也不见师父人…

人类打怪升级的宿命

也许从宇宙的诞生起,人类的命运就注定了,也许从人类的诞生起,人类的打怪升级就注定了。从目前对自然和宇宙的认知,起码太阳系,地球是会灭的,人类生存的环境将会不断恶化,而从目前的认知来说&…

被命运之神眷顾的法拉第

闪电的驯服者:电学的历史Michael Faraday Biography: How Faraday Escaped Poverty with a Lot of Luck 01 法拉第 一、前言 对于一个成功的科学家,比如麦克法拉第,什么样的运气使其获得成功的呢? 细数起来确实很多。他的幸运一生…