Skip to content

Property graph benchmark with node and edges generation, multiple output formats, and visualization

License

Notifications You must be signed in to change notification settings

lszeremeta/knows

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

12 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Knows logo

PyPI Docker Image Size (latest by date) DOI

Knows is a user-friendly tool for benchmarking property graphs. These graphs are crucial in many fields. Knows supports multiple output formats and visualization capabilities, making it a go-to tool for educators, researchers, and data enthusiasts.

Key Features πŸš€

  • Customizable Graph Generation: Tailor your graphs by specifying the number of nodes and edges.
  • Diverse Output Formats: Export graphs in formats like GraphML, YARS-PG, GEXF, GML, SVG, JSON, and others.
  • Integrated Graph Visualization: Conveniently visualize your graphs in SVG format.
  • Intuitive Command-Line Interface (CLI): A user-friendly CLI for streamlined graph generation and visualization.
  • Docker Compatibility: Deploy Knows in Docker containers for a consistent and isolated runtime environment.

Graph Structure

  • Generates graphs with specified or random nodes and edges.
  • Creates directed graphs.
  • Nodes are labeled Person with unique IDs (N1, N2, N3, ..., Nn).
  • Nodes feature firstName and lastName properties with randomly assigned names.
  • Edges are labeled knows and include a createDate property with a random date.
  • Edges have random nodes, avoiding cycles.

Installation πŸ› οΈ

You can install knows via PyPI Docker or run it from the source code.

Install via PyPI

  1. Installation:

    pip install knows[draw]

    The draw installs a matplotlib library for graph visualization. You can omit the [draw] if you don't need visualization and svg output generation.

  2. Running Knows:

    knows [nodes] [edges] [options]

Docker Deployment 🐳

From Docker Hub

  1. Pull Image:

    docker pull lszeremeta/knows
  2. Run Container:

    docker run --rm lszeremeta/knows [nodes] [edges] [options]

Building from Source

  1. Build Image:

    docker build -t knows .
  2. Run Container:

    docker run --rm knows [nodes] [edges] [options]

Python from Source

  1. Clone Repository:

    git clone git@github.com:lszeremeta/knows.git
    cd knows
  2. Install Requirements:

    pip install -r requirements.txt
  3. Execute Knows:

    python -m knows [nodes] [edges] [options]

Usage πŸ’‘

Basic Usage

knows [nodes] [edges] [options]

To view all available options, use:

knows -h

Positional Arguments

  1. nodes: Specify the number of nodes in the graph. Selected randomly if not specified.
  2. edges: Specify the number of edges in the graph. Selected randomly if not specified.

Options

  • -h, --help: Display the help message and exit the program.
  • -f {graphml,yarspg,gexf,gml,svg,adjacency_list,multiline_adjacency_list,edge_list,json}, --format {graphml,yarspg,gexf,gml,svg,adjacency_list,multiline_adjacency_list,edge_list,json}: Choose the format to output the graph. Default: graphml.
  • -d, --draw: Generate an image of the graph (default is no image). This option may not work in the Docker.

Practical Examples 🌟

  1. Create a random graph in GraphML format:
    knows
  2. Create a 100-node, 70-edge graph in YARS-PG format:
    knows 100 70 -f yarspg > graph.yarspg
  3. Create a 100-node, 50-edge graph in GraphML format:
     knows 100 50 > graph.graphml
  4. Create, save, and visualize a 100-node, 50-edge graph in SVG:
    knows 100 50 -f svg -d > graph.svg
  5. Create, save a 100-node, 50-edge graph in SVG with a custom filename:
     knows 100 50 -f svg > graph.svg
  6. Create a graph in JSON format:
    knows -f json > graph.json

Contribute to Knows πŸ‘₯

Your ideas and contributions can make Knows even better! If you're new to open source, read How to Contribute to Open Source and CONTRIBUTING.md.

License πŸ“œ

Knows is licensed under the MIT License.