wey-gu / jupyter_nebulagraph

NebulaGraph Queries and visualization in Jupyter notebook.(previously known as ipython-ngql)
https://jupyter-nebulagraph.readthedocs.io/en/stable/
Other
28 stars 3 forks source link
graph-database hacktoberfest ipython jupyter nebula-graph nebulagraph python

for NebulaGraph Jupyter Docker Image Docker Extension GitHub release (latest by date) pypi-version Open In Colab Documentation

https://github.com/wey-gu/jupyter_nebulagraph/assets/1651790/10135264-77b5-4d3c-b68f-c5810257feeb

jupyter_nebulagraph, formerly ipython-ngql, is a Python package that simplifies the process of connecting to NebulaGraph from Jupyter Notebooks or iPython environments. It enhances the user experience by streamlining the creation, debugging, and sharing of Jupyter Notebooks. With jupyter_nebulagraph, users can effortlessly connect to NebulaGraph, load data, execute queries, visualize results, and fine-tune query outputs, thereby boosting collaborative efforts and productivity.

Getting Started

pip install jupyter_nebulagraph

Load the extension in Jupyter Notebook or iPython:

%load_ext ngql
%ngql --address 127.0.0.1 --port 9669 --user root --password nebula

Make queries:

%ngql USE basketballplayer;
%ngql MATCH p=(v:player)-->(v2:player) WHERE id(v) == "player100" RETURN p;

Draw the graph:

%ng_draw

Discover the features of jupyter_nebulagraph by experimenting with it on Google Colab. You can also access a similar Jupyter Notebook in the documentation here.

For a detailed guide, refer to the official documentation.

Feature Cheat Sheet Example Command Documentation
Connect %ngql --address 127.0.0.1 --port 9669 --user user --password password Connect %ngql
Load Data from CSV %ng_load --source actor.csv --tag player --vid 0 --props 1:name,2:age --space basketballplayer Load Data %ng_load
Query Execution %ngql MATCH p=(v:player{name:"Tim Duncan"})-->(v2:player) RETURN p; Query Execution %ngql or %%ngql(multi-line)
Result Visualization %ng_draw Draw Graph %ng_draw
Draw Schema %ng_draw_schema Draw Schema %ng_draw_schema
Tweak Query Result df = _ to get last query result as pd.dataframe or ResultSet Tweak Result Configure ngql_result_style
Click to see more! ### Installation `jupyter_nebulagraph` could be installed either via pip or from this git repo itself. > Install via pip ```bash pip install jupyter_nebulagraph ``` > Install inside the repo ```bash git clone git@github.com:wey-gu/jupyter_nebulagraph.git cd jupyter_nebulagraph python setup.py install ``` ### Load it in Jupyter Notebook or iPython ```python %load_ext ngql ``` ### Connect to NebulaGraph Arguments as below are needed to connect a NebulaGraph DB instance: | Argument | Description | | ---------------------- | ---------------------------------------- | | `--address` or `-addr` | IP address of the NebulaGraph Instance | | `--port` or `-P` | Port number of the NebulaGraph Instance | | `--user` or `-u` | User name | | `--password` or `-p` | Password | Below is an exmple on connecting to `127.0.0.1:9669` with username: "user" and password: "password". ```python %ngql --address 127.0.0.1 --port 9669 --user user --password password ``` ### Make Queries Now two kind of iPtython Magics are supported: Option 1: The one line stype with `%ngql`: ```python %ngql USE basketballplayer; %ngql MATCH (v:player{name:"Tim Duncan"})-->(v2:player) RETURN v2.player.name AS Name; ``` Option 2: The multiple lines stype with `%%ngql ` ```python %%ngql SHOW TAGS; SHOW HOSTS; ``` ### Query String with Variables `jupyter_nebulagraph` supports taking variables from the local namespace, with the help of [Jinja2](https://jinja.palletsprojects.com/) template framework, it's supported to have queries like the below example. The actual query string should be `GO FROM "Sue" OVER owns_pokemon ...`, and `"{{ trainer }}"` was renderred as `"Sue"` by consuming the local variable `trainer`: ```python In [8]: vid = "player100" In [9]: %%ngql ...: MATCH (v)<-[e:follow]- (v2)-[e2:serve]->(v3) ...: WHERE id(v) == "{{ vid }}" ...: RETURN v2.player.name AS FriendOf, v3.team.name AS Team LIMIT 3; Out[9]: RETURN v2.player.name AS FriendOf, v3.team.name AS Team LIMIT 3; FriendOf Team 0 LaMarcus Aldridge Trail Blazers 1 LaMarcus Aldridge Spurs 2 Marco Belinelli Warriors ``` ### Draw query results **Draw Last Query** Just call `%ng_draw` after queries with graph data. ```python # one query %ngql GET SUBGRAPH 2 STEPS FROM "player101" YIELD VERTICES AS nodes, EDGES AS relationships; %ng_draw # another query %ngql match p=(:player)-[]->() return p LIMIT 5 %ng_draw ``` ![](https://github.com/wey-gu/jupyter_nebulagraph/assets/1651790/b3d9ca07-2eb1-45ae-949b-543f58a57760) **Draw a Query** Or `%ng_draw `, `%%ng_draw ` instead of drawing the result of the last query. ng_draw_demo_1 One line query: ```python %ng_draw GET SUBGRAPH 2 STEPS FROM "player101" YIELD VERTICES AS nodes, EDGES AS relationships; ``` Multiple lines query: ```python %%ng_draw MATCH path_0=(n)--() WHERE id(n) == "p_0" OPTIONAL MATCH path_1=(n)--()--() RETURN path_0, path_1 ``` ### Draw Graph Schema ```python %ng_draw_schema ``` ![](https://github.com/wey-gu/jupyter_nebulagraph/assets/1651790/81fd71b5-61e7-4c65-93be-c2f4e507611b) ### Load Data from CSV It's supported to load data from a CSV file into NebulaGraph with the help of `ng_load_csv` magic. For example, to load data from a CSV file `actor.csv` into a space `basketballplayer` with tag `player` and vid in column `0`, and props in column `1` and `2`: ```csv "player999","Tom Hanks",30 "player1000","Tom Cruise",40 "player1001","Jimmy X",33 ``` Just run the below line: ```python %ng_load --source actor.csv --tag player --vid 0 --props 1:name,2:age --space basketballplayer ``` Some other examples: ```python # load CSV from a URL %ng_load --source https://github.com/wey-gu/jupyter_nebulagraph/raw/main/examples/actor.csv --tag player --vid 0 --props 1:name,2:age --space demo_basketballplayer # with rank column %ng_load --source follow_with_rank.csv --edge follow --src 0 --dst 1 --props 2:degree --rank 3 --space basketballplayer # without rank column %ng_load --source follow.csv --edge follow --src 0 --dst 1 --props 2:degree --space basketballplayer ``` ### Tweak Query Result By default, the query result is a Pandas Dataframe, and we could access that by read from variable `_`. ```python In [1]: %ngql MATCH (v:player{name:"Tim Duncan"})-->(v2:player) RETURN v2.player.name AS Name; In [2]: df = _ ``` It's also configurable to have the result in raw ResultSet, to enable handy NebulaGraph Python App Development. See more via [Docs: Result Handling](https://jupyter-nebulagraph.readthedocs.io/en/stable/get_started_docs/#result-handling) ### CheatSheet If you find yourself forgetting commands or not wanting to rely solely on the cheat sheet, remember this one thing: seek help through the help command! ```python %ngql help ```

Acknowledgments ♥️