24个版本 (8个重大更改)

新版本 0.11.0 2024年8月23日
0.10.0 2024年7月15日
0.9.3 2024年6月20日
0.7.0 2023年12月21日
0.4.3 2023年7月6日

#118数据库接口

Download history 8/week @ 2024-05-04 13/week @ 2024-05-18 12/week @ 2024-05-25 117/week @ 2024-06-01 177/week @ 2024-06-08 116/week @ 2024-06-15 18/week @ 2024-06-22 181/week @ 2024-07-06 115/week @ 2024-07-13 6/week @ 2024-07-20 86/week @ 2024-08-17

每月86次 下载
用于 4 个库(3个直接使用)

GPL-3.0 许可证

2MB
53K SLoC


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 进行图分析的开放源代码爱好者的行列!

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

  • 加入我们的 Slack 与我们聊天并获取您的问题答案!

贡献者

赏金板

Raphtory 目前提供对新功能或算法的贡献奖励。贡献者将获得周边产品和奖品!

要开始,请查看我们 希望实现的算法 列表,其中包括一些容易实现的低垂果实(🍇)。

基准测试

我们在每次推送到 master 分支时触发并保存两个基准测试的结果。在此 查看。

许可证

Raphtory 根据 GNU 通用公共许可证 v3.0 许可(请参阅我们的 LICENSE 文件)。

依赖项

~13–37MB
~676K SLoC