通过本简短的教程,您将学习如何安装memgraph,连接到
它来自jupyter笔记本,并使用图形算法执行数据分析。你
可以在我们的开源GitHub
repository中找到原始的Jupyter笔记本。
如果在任何时候您会遇到本教程问题或某些内容
您不清楚,在我们的Discord server上伸出手。
本教程的数据集也可以以Playground
sandbox的形式获得
您可以从浏览器中查询。
1.先决条件
对于本教程,您需要安装:
- Jupyter :jupyter是必要的 笔记本可在此处提供。
- Docker :使用Docker是因为 memgraph是一个本机Linux应用程序,不能安装在Windows和 macos。
- GQLAlchemy :python ogm(对象 与Memgraph连接的图形映射器。
- Pandas :一种流行的数据科学 图书馆。
2.使用Docker安装
安装Docker后,您可以通过运行:
来设置MEMGRAPH
docker run -it -p 7687:7687 -p 3000:3000 memgraph/memgraph-platform
此命令将启动下载,完成后,运行MEMGRAPH
容器。
3.与GQLalchemy连接到MEMGRAPH
我们将使用 gqlalchemy 对象图映射器(OGM)连接到
memgraph并执行 cypher 查询很容易。 gqlalchemy也是A
python驱动程序/客户端。您可以使用:
安装它
pip install gqlalchemy
提示:您可能需要在
之前安装CMake 安装gqlalchemy。
也许当我提到Cypher时,您感到困惑。您可以将Cypher视为SQL
对于图形数据库。它包含许多相同的语言构造,例如
CREATE
,UPDATE
,DELETE
...用于查询数据库。
from gqlalchemy import Memgraph
memgraph = Memgraph("127.0.0.1", 7687)
让我们确保备忘录是空的,然后再开始使用其他任何东西。
memgraph.drop_database()
现在让我们看看数据库是否为空:
results = memgraph.execute_and_fetch(
"""
MATCH (n) RETURN count(n) AS number_of_nodes ;
"""
)
print(next(results))
输出:
{'number_of_nodes': 0}
4.定义图模式
我们将创建代表我们的图形模式的Python类。这个
方式,从memgraph返回的所有对象都是正确的类型
如果可以找到类的定义。
from typing import Optional
from gqlalchemy import Field, Node, Relationship
class User(Node):
username: str = Field(index=True, unique=True, db=memgraph)
class Retweeted(Relationship, type="RETWEETED"):
pass
5.创建和返回节点
我们将创建User
节点,将它们保存到数据库中并返回它们
对于我们的计划:
user1 = User(username="ivan_g_despot")
user2 = User(username="supe_katarina")
user1.save(memgraph)
user2.save(memgraph)
print(user1)
print(user2)
输出:
<User id=1874 labels={'User'} properties={'username': 'ivan_g_despot'}>
<User id=1875 labels={'User'} properties={'username': 'supe_katarina'}>
现在,让我们尝试使用Cypher查询语言创建一个节点。我们要去
创建一个具有现有用户名的节点只是为了检查是否存在
属性username
的约束正确设置了。
try:
results = memgraph.execute(
"""
CREATE (:User {username: "supe_katarina"});
"""
)
except Exception:
print("Error: A user with the username supe_katarina is already in the database.")
输出:
Error: A user with the username supe_katarina is already in the database.
6.建立和返回关系
我们将创建一个Retweeted
关系,将其保存到数据库中并
将其返回我们的程序:
retweeted = Retweeted(_start_node_id=user1._id, _end_node_id=user2._id)
retweeted.save(memgraph)
print(retweeted)
输出:
<Retweeted id=1670 start_node_id=1874 end_node_id=1875 nodes=(1874, 1875) type=RETWEETED properties={}>
7.从CSV文件导入数据
您将需要下载包含一个简单数据集的this file
刮去推文。要将其导入Memgraph,我们首先需要将其复制到
MEMGRAPH正在运行的Docker容器。通过运行:
找到CONTAINER_ID
docker ps
用以下命令复制文件(别忘了替换
CONTAINER_ID
):
docker cp scraped_tweets.csv CONTAINER_ID:scraped_tweets.csv
我们将在Pandas的帮助下查看CSV文件的外观
图书馆。要安装它,请运行:
pip install pandas
现在让我们看看CSV文件的外观:
import pandas as pd
data = pd.read_csv("scraped_tweets.csv")
data.head()
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
输出:
source_username | target_username | |
---|---|---|
0 | capecodgiftshop | retroceo |
1 | codeattbot | Leehillerlondon |
2 | Battlegroundhs | getwhalinvest |
3 | botpokemongofr1 | trevorallenpkmn |
4 | Anyasha13331181 | worldmusicaward |
现在,我们可以执行用于加载的Cypher命令LOAD CSV
来自CSV文件的数据:
memgraph.execute(
"""
LOAD CSV FROM "/scraped_tweets.csv" WITH HEADER AS row
MERGE (u1:User {username: row.source_username})
MERGE (u2:User {username: row.target_username})
MERGE (u1)-[:RETWEETED]->(u2);
"""
)
您可以将LOAD CSV
子句视为将遍及
的每一行的循环
CSV文件并执行指定的Cypher命令。
8.查询数据库并检索结果
让我们确保通过检索正确导入数据:
results = memgraph.execute_and_fetch(
"""
MATCH (u:User)
RETURN u
ORDER BY u.username DESC
LIMIT 10;
"""
)
results = list(results)
for result in results:
print(result["u"])
输出:
<User id=3692 labels={'User'} properties={'username': 'zziru67'}>
<User id=3240 labels={'User'} properties={'username': 'zippydjh'}>
<User id=3725 labels={'User'} properties={'username': 'zee_row_ex'}>
<User id=3591 labels={'User'} properties={'username': 'yvonneqqm'}>
<User id=3212 labels={'User'} properties={'username': 'yujulia999'}>
<User id=2378 labels={'User'} properties={'username': 'yudhapati88'}>
<User id=2655 labels={'User'} properties={'username': 'yu100_kun'}>
<User id=2302 labels={'User'} properties={'username': 'youth_tree'}>
<User id=2432 labels={'User'} properties={'username': 'yourkpopsoul'}>
<User id=2132 labels={'User'} properties={'username': 'your_harrogate'}>
我们还可以检查检索记录的类型:
u = results[0]["u"]
print("User: ", u.username)
print("Type: ", type(u))
输出:
User: zziru67
Type: <class '__main__.User'>
让我们尝试使用gqlalchemy查询构建器执行相同的查询:
from gqlalchemy import match
results_from_qb = (
match()
.node(labels="User", variable="u")
.return_()
.order_by("u.username DESC")
.limit(10)
.execute()
)
results_from_qb = list(results_from_qb)
for result in results_from_qb:
print(result["u"])
输出:
<User id=3692 labels={'User'} properties={'username': 'zziru67'}>
<User id=3240 labels={'User'} properties={'username': 'zippydjh'}>
<User id=3725 labels={'User'} properties={'username': 'zee_row_ex'}>
<User id=3591 labels={'User'} properties={'username': 'yvonneqqm'}>
<User id=3212 labels={'User'} properties={'username': 'yujulia999'}>
<User id=2378 labels={'User'} properties={'username': 'yudhapati88'}>
<User id=2655 labels={'User'} properties={'username': 'yu100_kun'}>
<User id=2302 labels={'User'} properties={'username': 'youth_tree'}>
<User id=2432 labels={'User'} properties={'username': 'yourkpopsoul'}>
<User id=2132 labels={'User'} properties={'username': 'your_harrogate'}>
9.计算Pagerank
现在,让我们用图表做一些聪明的事情。例如,计算Pagerank
对于每个节点,然后添加一个存储Pagerank值的rank
属性
每个节点:
results = memgraph.execute_and_fetch(
"""
CALL pagerank.get()
YIELD node, rank
SET node.rank = rank
RETURN node, rank
ORDER BY rank DESC
LIMIT 10;
"""
)
for result in results:
print("The PageRank of node ", result["node"].username, ": ", result["rank"])
输出:
The PageRank of node WORLDMUSICAWARD : 0.13278838151391434
The PageRank of node Kidzcoolit : 0.018924764871246207
The PageRank of node HuobiGlobal : 0.011314994833838172
The PageRank of node ChloeLe39602964 : 0.010011755296388128
The PageRank of node getwhalinvest : 0.007228675936490175
The PageRank of node Cooper_Lechat : 0.005577971882231625
The PageRank of node Phemex_official : 0.005413803151353543
The PageRank of node HamleysOfficial : 0.005325936307836382
The PageRank of node bmstores : 0.00524546649693655
The PageRank of node TheStourbridge : 0.004422198431576731
访问Memgraph MAGE图库(
给我们扔一个明星,看看
的所有图形算法
实施的。您还可以实施并提交自己的算法和实用程序
程序。
10.在Memgraph Lab中可视化图
在地址上的浏览器中打开MEMGRAPH LAB
localhost:3000。执行以下Cypher查询:
MATCH (n)-[r]-(m)
RETURN n, r, m
LIMIT 100;
现在应用以下图样式以使您的图形看起来更具描述性:
@NodeStyle {
size: Sqrt(Mul(Div(Property(node, "rank"), 1), 200000))
border-width: 1
border-color: #000000
shadow-color: #1D9BF0
shadow-size: 10
image-url: "https://i.imgur.com/UV7Nl0i.png"
}
@NodeStyle Greater(Size(Labels(node)), 0) {
label: Format(":{}", Join(Labels(node), " :"))
}
@NodeStyle HasLabel(node, "User") {
color: #1D9BF0
color-hover: Darker(#dd2222)
color-selected: #dd2222
}
@NodeStyle HasProperty(node, "username") {
label: AsText(Property(node, "username"))
}
@EdgeStyle {
width: 1
}
下一步是什么?
现在是时候让您在图形问题上使用memgraph!
您随时可以查看Memgraph Playground
对于一些很酷的用例和示例。如果您有任何疑问,或者想
与社区其他成员分享您的工作,加入我们的 Discord
Server 。