4 个版本 (2 个破坏性更新)

0.11.0 2024 年 8 月 23 日
0.10.0 2024 年 7 月 15 日
0.9.3 2024 年 6 月 20 日

#776数据库接口

Download history 219/week @ 2024-06-01 187/week @ 2024-06-08 119/week @ 2024-06-15 17/week @ 2024-06-22 1/week @ 2024-07-06 108/week @ 2024-07-13 8/week @ 2024-07-20 1/week @ 2024-07-27 88/week @ 2024-08-17

每月 90 次下载
用于 2 crates

GPL-3.0 许可证

41KB
944


Raphtory

Test and Build Latest Release Issues Crates.io PyPI PyPI Downloads Launch Notebook

🌍 网站   📒 文档   Pometry   🧙教程   🐛 报告错误   加入 Slack


Raphtory 是一个用 Rust 编写的内存向量图数据库,具有友好的 Python API。它速度极快,可在您的笔记本电脑上扩展到数亿条边,并且可以通过简单的 pip install raphtory 添加到现有管道中。

它支持时间旅行、全文搜索、多层建模以及超越简单查询的高级分析,如自动风险检测、动态评分和时间模式。

如果您想贡献,请查看开放的 问题列表赏金板 或直接在 slack 上联系我们。成功的贡献将获得摇摆的周边产品奖励!

安装 Raphtory

Raphtory 支持 Python 和 Rust。

对于 Python,您必须使用 3.8 或更高版本,并且可以通过 pip 安装

pip install raphtory

对于Rust,Raphtory托管在crates上,适用于Rust版本1.77或更高版本,可以通过以下命令将其包含到您的项目中:cargo add

cargo add raphtory

运行基本示例

以下是一个使用Python API的Raphtory示例,展示了它的外观和感觉。如果您喜欢所看到的内容,可以在这里查看完整的教程

from raphtory import Graph
from raphtory import algorithms as algo
import pandas as pd

# Create a new graph
graph = Graph()

# Add some data to your graph
graph.add_node(timestamp=1, id="Alice")
graph.add_node(timestamp=1, id="Bob")
graph.add_node(timestamp=1, id="Charlie")
graph.add_edge(timestamp=2, src="Bob", dst="Charlie", properties={"weight": 5.0})
graph.add_edge(timestamp=3, src="Alice", dst="Bob", properties={"weight": 10.0})
graph.add_edge(timestamp=3, src="Bob", dst="Charlie", properties={"weight": -15.0})

# Check the number of unique nodes/edges in the graph and earliest/latest time seen.
print(graph)

results = [["earliest_time", "name", "out_degree", "in_degree"]]

# Collect some simple node metrics Ran across the history of your graph with a rolling window
for graph_view in graph.rolling(window=1):
    for v in graph_view.nodes:
        results.append(
            [graph_view.earliest_time, v.name, v.out_degree(), v.in_degree()]
        )

# Print the results
print(pd.DataFrame(results[1:], columns=results[0]))

# Grab an edge, explore the history of its 'weight'
cb_edge = graph.edge("Bob", "Charlie")
weight_history = cb_edge.properties.temporal.get("weight").items()
print(
    "The edge between Bob and Charlie has the following weight history:", weight_history
)

# Compare this weight between time 2 and time 3
weight_change = cb_edge.at(2)["weight"] - cb_edge.at(3)["weight"]
print(
    "The weight of the edge between Bob and Charlie has changed by",
    weight_change,
    "pts",
)

# Run pagerank and ask for the top ranked node
top_node = algo.pagerank(graph).top_k(1)
print(
    "The most important node in the graph is",
    top_node[0][0],
    "with a score of",
    top_node[0][1],
)

输出

Graph(number_of_edges=2, number_of_nodes=3, earliest_time=1, latest_time=3)

|   | earliest_time | name    | out_degree | in_degree |
|---|---------------|---------|------------|-----------|
| 0 | 1             | Alice   | 0          | 0         |
| 1 | 1             | Bob     | 0          | 0         |
| 2 | 1             | Charlie | 0          | 0         |
| 3 | 2             | Bob     | 1          | 0         |
| 4 | 2             | Charlie | 0          | 1         |
| 5 | 3             | Alice   | 1          | 0         |
| 6 | 3             | Bob     | 1          | 1         |
| 7 | 3             | Charlie | 0          | 1         |

The edge between Bob and Charlie has the following weight history: [(2, 5.0), (3, -15.0)]

The weight of the edge between Bob and Charlie has changed by 20.0 pts

The top node in the graph is Charlie with a score of 0.4744116163405977

GraphQL

作为Python API的一部分,您可以在Raphtory的GraphQL服务器中托管您的数据。这使得将您的图分析集成到Web应用程序中变得非常简单。

以下是一个创建图、运行托管此数据的服务器,并直接使用我们的GraphQL客户端查询它的简单示例。

from raphtory import Graph
from raphtory.graphql import GraphServer
import pandas as pd
import os

# URL for lord of the rings data from our main tutorial
url = "https://raw.githubusercontent.com/Raphtory/Data/main/lotr-with-header.csv"
df = pd.read_csv(url)

# Load the lord of the rings graph from the dataframe
graph = Graph()
graph.load_edges_from_pandas(df,"time","src_id","dst_id")

#Create a working_dir for your server and save your graph into it 
#You can save any number of graphs here or create them via the server ones its running
os.makedirs("graphs/", exist_ok=True)
graph.save_to_file("graphs/lotr_graph")

# Launch the server and get a client to it.
server = GraphServer(work_dir="graphs/").start()
client = server.get_client()

#Run a basic query to get the names of the characters + their degree
results = client.query("""{
             graph(path: "lotr_graph") {
                 nodes {
                    list{
                        name
                        degree
                       }   
                    }
                 }
             }""")

print(results)

输出

Loading edges: 100%|██████████████| 2.65K/2.65K [00:00<00:00, 984Kit/s]
Playground: https://127.0.0.1:1736
{'graph': 
    {'nodes': 
        [{'name': 'Gandalf', 'degree': 49}, 
         {'name': 'Elrond', 'degree': 32}, 
         {'name': 'Frodo', 'degree': 51}, 
         {'name': 'Bilbo', 'degree': 21}, 
         ...
        ]
    }
}

GraphQL playground

当您托管Raphtory GraphQL服务器时,您会获得一个捆绑的Web playground,可以在浏览器中的同一端口访问(默认为1736)。在这里,您可以实验性地查询您的图并探索模式。以下是一个playground的示例,运行与上述Python示例相同的查询。

GraphQL Playground

入门指南

为了帮助您开始使用Raphtory,我们在Raphtory网站上提供了一套完整的教程。

如果API文档更符合您的需求,您可以在这里直接查看

在线笔记本沙盒

想要尝试,但又不想安装?查看我们交互式的Jupyter Notebooks来了解Raphtory的实际应用!只需点击下面的徽章即可启动在线的Raphtory沙盒,无需安装。

Binder

社区

加入不断壮大的Raphtory开源爱好者社区,他们正在使用Raphtory来推动他们的图分析!

  • 关注Twitter以获取最新的Raphtory新闻和开发动态

  • 加入我们的Slack与我们聊天并获得对您问题的解答!

贡献者

赏金板

Raphtory目前提供赏金,以奖励贡献,如新功能或算法。贡献者将获得周边产品和奖品!

要开始,请查看我们的所需算法列表,其中包含一些易于实现的简单任务(🍇)。

基准测试

我们有一个页面,每当向master分支推送时,都会触发并保存两个基准测试的结果。在这里查看这里

许可证

Raphtory在GNU通用公共许可证v3.0的条款下发布(查看我们的LICENSE文件)。

依赖关系

~4–11MB
~112K SLoC