0 purchases
pyrgg 1.4
PyRGG: Python Random Graph Generator
Table of Contents
Overview
Installation
Usage
Supported Formats
Example of Usage
Similar Works
Issues & Bug Reports
Contribution
References
Citing
Authors
License
Show Your Support
Todo
Changelog
Code of Conduct
Overview
Pyrgg is an easy-to-use synthetic random graph generator written in Python which supports various graph file formats including DIMACS .gr files.
Pyrgg has the ability to generate graphs of different sizes and is designed to provide input files for broad range of graph-based research applications, including but not limited to testing, benchmarking and performance-analysis of graph processing frameworks.
Pyrgg target audiences are computer scientists who study graph algorithms and graph processing frameworks.
Open Hub
PyPI Counter
Github Stars
Branch
master
dev
CI
Code Quality
Installation
PyPI
Check Python Packaging User Guide
pip install pyrgg==1.4 (Need root access)
Source Code
Download Version 1.4 or Latest Source
pip install . (Need root access)
Conda
Check Conda Managing Package
conda install -c sepandhaghighi pyrgg (Need root access)
Exe Version (Only Windows)
Download Exe-Version 1.4
Run PYRGG-1.4.exe
System Requirements
Pyrgg will likely run on a modern dual core PC. Typical configuration is:
Dual Core CPU (2.0 Ghz+)
4GB of RAM
Note that it may run on lower end equipment though good performance is not guaranteed.
Usage
Open CMD (Windows) or Terminal (UNIX)
Run pyrgg or python -m pyrgg (or run PYRGG.exe)
Enter data
Supported Formats
DIMACS(.gr)
p sp <number of vertices> <number of edges>
a <head_1> <tail_1> <weight_1>
.
.
.
a <head_n> <tail_n> <weight_n>
Sample 1 (100 Vertices , 3KB)
Sample 2 (1000 Vertices , 13KB)
Sample 3 (1000000 Vertices , 7MB)
Sample 4 (5000000 Vertices , 37MB)
CSV(.csv)
<head_1>,<tail_1>,<weight_1>
.
.
.
<head_n>,<tail_n>,<weight_n>
Sample 1 (100 Vertices , 3KB)
Sample 2 (1000 Vertices , 51KB)
TSV(.tsv)
<head_1> <tail_1> <weight_1>
.
.
.
<head_n> <tail_n> <weight_n>
Sample 1 (100 Vertices , 29KB)
Sample 2 (1000 Vertices , 420KB)
JSON(.json)
{
"properties": {
"directed": true,
"signed": true,
"multigraph": true,
"weighted": true,
"self_loop": true
},
"graph": {
"nodes":[
{
"id": 1
},
.
.
.
{
"id": n
}
],
"edges":[
{
"source": head_1,
"target": tail_1,
"weight": weight_1
},
.
.
.
{
"source": head_n,
"target": tail_n,
"weight": weight_n
}
]
}
}
Sample 1 (100 Vertices , 26KB)
Sample 2 (1000 Vertices , 494KB)
YAML(.yaml)
graph:
edges:
- source: head_1
target: tail_1
weight: weight_1
.
.
.
- source: head_n
target: tail_n
weight: weight_n
nodes:
- id: 1
.
.
.
- id: n
properties:
directed: true
multigraph: true
self_loop: true
signed: true
weighted: true
Sample 1 (30 Vertices , 6KB)
Sample 2 (100 Vertices , 35KB)
Weighted Edge List(.wel)
<head_1> <tail_1> <weight_1>
.
.
.
<head_n> <tail_n> <weight_n>
Sample 1 (100 Vertices , 5KB)
Sample 2 (1000 Vertices , 192KB)
ASP(.lp)
node(1).
.
.
.
node(n).
edge(head_1,tail_1,weight_1).
.
.
.
edge(head_n,tail_n,weight_n).
Sample 1 (100 Vertices , 7KB)
Sample 2 (1000 Vertices , 76KB)
Trivial Graph Format(.tgf)
1
.
.
.
n
#
1 2 weight_1
.
.
.
n k weight_n
Sample 1 (100 Vertices , 4KB)
Sample 2 (1000 Vertices , 61KB)
UCINET DL Format(.dl)
dl
format=edgelist1
n=<number of vertices>
data:
1 2 weight_1
.
.
.
n k weight_n
Sample 1 (100 Vertices , 8KB)
Sample 2 (1000 Vertices , 729KB)
Matrix Market(.mtx)
%%MatrixMarket matrix coordinate real general
<number of vertices> <number of vertices> <number of edges>
<head_1> <tail_1> <weight_1>
.
.
.
<head_n> <tail_n> <weight_n>
Sample 1 (100 Vertices , 59KB)
Sample 2 (1000 Vertices , 1.8MB)
Graph Line(.gl)
<head_1> <tail_1>:<weight_1> <tail_2>:<weight_2> ... <tail_n>:<weight_n>
<head_2> <tail_1>:<weight_1> <tail_2>:<weight_2> ... <tail_n>:<weight_n>
.
.
.
<head_n> <tail_1>:<weight_1> <tail_2>:<weight_2> ... <tail_n>:<weight_n>
Sample 1 (100 Vertices , 17KB)
Sample 2 (1000 Vertices , 2.4MB)
GDF(.gdf)
nodedef>name VARCHAR,label VARCHAR
node_1,node_1_label
node_2,node_2_label
.
.
.
node_n,node_n_label
edgedef>node1 VARCHAR,node2 VARCHAR, weight DOUBLE
node_1,node_2,weight_1
node_1,node_3,weight_2
.
.
.
node_n,node_2,weight_n
Sample 1 (100 Vertices , 21KB)
Sample 2 (1000 Vertices , 690KB)
GML(.gml)
graph
[
multigraph 0
directed 0
node
[
id 1
label "Node 1"
]
node
[
id 2
label "Node 2"
]
.
.
.
node
[
id n
label "Node n"
]
edge
[
source 1
target 2
value W1
]
edge
[
source 2
target 4
value W2
]
.
.
.
edge
[
source n
target r
value Wn
]
]
Sample 1 (100 Vertices , 120KB)
Sample 2 (1000 Vertices , 2.4MB)
GEXF(.gexf)
<?xml version="1.0" encoding="UTF-8"?>
<gexf xmlns="http://www.gexf.net/1.2draft" version="1.2">
<meta lastmodifieddate="2009-03-20">
<creator>PyRGG</creator>
<description>File Name</description>
</meta>
<graph defaultedgetype="directed">
<nodes>
<node id="1" label="Node 1" />
<node id="2" label="Node 2" />
...
</nodes>
<edges>
<edge id="1" source="1" target="2" weight="400" />
...
</edges>
</graph>
</gexf>
Sample 1 (100 Vertices , 63KB)
Sample 2 (1000 Vertices , 6.4MB)
Graphviz(.gv)
graph example
{
node1 -- node2 [weight=W1];
node3 -- node4 [weight=W2];
node1 -- node3 [weight=W3];
.
.
.
}
Sample 1 (100 Vertices , 11KB)
Sample 2 (1000 Vertices , 106KB)
Online Visualization
Pickle(.p) (Binary Format)
Sample 1 (100 Vertices , 12KB)
Sample 2 (1000 Vertices , 340KB)
Example of Usage
Generate synthetic data for graph processing frameworks (some of them mentioned here) performance-analysis
Medusa
Totem
Frog
CuSha
Generate synthetic data for graph benchmark suite like GAP
Similar Works
Random Modular Network Generator Generates random graphs with tunable strength of community structure
randomGraph very simple random graph generator in MATLAB
Graph1 Random Graph Generator with Max capacity paths (C++)
Issues & Bug Reports
Just fill an issue and describe it. We'll check it ASAP!
or send an email to [email protected].
You can also join our discord server
Citing
If you use pyrgg in your research, please cite the JOSS paper ;-)
@article{Haghighi2017,
doi = {10.21105/joss.00331},
url = {https://doi.org/10.21105/joss.00331},
year = {2017},
month = {sep},
publisher = {The Open Journal},
volume = {2},
number = {17},
author = {Sepand Haghighi},
title = {Pyrgg: Python Random Graph Generator},
journal = {The Journal of Open Source Software}
}
JOSS
Zenodo
References
1- 9th DIMACS Implementation Challenge - Shortest Paths
2- Problem Based Benchmark Suite
3- MaximalClique - ASP Competition 2013
4- Pitas, Ioannis, ed. Graph-based social media analysis. Vol. 39. CRC Press, 2016.
5- Roughan, Matthew, and Jonathan Tuke. "The hitchhikers guide to sharing graph data." 2015 3rd International Conference on Future Internet of Things and Cloud. IEEE, 2015.
6- Borgatti, Stephen P., Martin G. Everett, and Linton C. Freeman. "Ucinet for Windows: Software for social network analysis." Harvard, MA: analytic technologies 6 (2002).
7- Matrix Market: File Formats
8- Social Network Visualizer
9- Adar, Eytan. "GUESS: a language and interface for graph exploration." Proceedings of the SIGCHI conference on Human Factors in computing systems. 2006.
10- Skiena, Steven S. The algorithm design manual. Springer International Publishing, 2020.
11- Chakrabarti, Deepayan, Yiping Zhan, and Christos Faloutsos. "R-MAT: A recursive model for graph mining." Proceedings of the 2004 SIAM International Conference on Data Mining. Society for Industrial and Applied Mathematics, 2004.
12- Zhong, Jianlong, and Bingsheng He. "An overview of medusa: simplified graph processing on gpus." ACM SIGPLAN Notices 47.8 (2012): 283-284.
13- Ellson, John, et al. "Graphviz and dynagraph—static and dynamic graph drawing tools." Graph drawing software. Springer, Berlin, Heidelberg, 2004. 127-148.
Logo designed by Zahra Mobasher
Show Your Support
Star This Repo
Give a ⭐️ if this project helped you!
Donate to Our Project
Bitcoin
1KtNLEEeUbTEK9PdN6Ya3ZAKXaqoKUuxCy
Ethereum
0xcD4Db18B6664A9662123D4307B074aE968535388
Litecoin
Ldnz5gMcEeV8BAdsyf8FstWDC6uyYR6pgZ
Doge
DDUnKpFQbBqLpFVZ9DfuVysBdr249HxVDh
Tron
TCZxzPZLcJHr2qR3uPUB1tXB6L3FDSSAx7
Ripple
rN7ZuRG7HDGHR5nof8nu5LrsbmSB61V1qq
Binance Coin
bnb1zglwcf0ac3d0s2f6ck5kgwvcru4tlctt4p5qef
Tether
0xcD4Db18B6664A9662123D4307B074aE968535388
Dash
Xd3Yn2qZJ7VE8nbKw2fS98aLxR5M6WUU3s
Stellar
GALPOLPISRHIYHLQER2TLJRGUSZH52RYDK6C3HIU4PSMNAV65Q36EGNL
Zilliqa
zil1knmz8zj88cf0exr2ry7nav9elehxfcgqu3c5e5
Coffeete
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog
and this project adheres to Semantic Versioning.
Unreleased
1.4 - 2023-07-06
Added
check_for_config function
load_config function
save_config function
Changed
README.md modified
Logo changed
codecov removed from dev-requirements.txt
Test system modified
Error messages updated
1.3 - 2022-11-30
Added
Graphviz(DOT) format
Changed
asciinema instruction video updated
Test system modified
README.md modified
Python 3.11 added to test.yml
CLI mode updated
dev-requirements.txt updated
To-do list moved to TODO.md
1.2 - 2022-09-07
Added
Anaconda workflow
Discord badge
Changed
Menu optimized
Docstrings modified
branch_gen function modified
edge_gen function modified
precision and min_edge parameters added to branch_gen function
random_edge parameter removed from branch_gen function
Test system modified
AUTHORS.md updated
License updated
README.md modified
Python 3.10 added to test.yml
Removed
sign_gen function
random_edge_limits function
1.1 - 2021-06-09
Added
requirements-splitter.py
is_weighted function
_write_properties_to_json function
PYRGG_TEST_MODE parameter
Changed
Test system modified
JSON, YAML and Pickle formats value changed from string to number
properties section added to JSON, YAML and Pickle formats
_write_to_json function renamed to _write_data_to_json
logger function modified
time_convert function modified
branch_gen function modified
References updated
1.0 - 2021-01-11
Added
Number of files option
Changed
All flags type changed to bool
Menu optimized
The logger function enhanced.
Time format in the logger changed to %Y-%m-%d %H:%M:%S
dl_maker function modified
tgf_maker function modified
gdf_maker function modified
run function modified
0.9 - 2020-10-07
Added
GEXF format
Float weight support
tox.ini
Changed
Menu optimized
pyrgg.py renamed to graph_gen.py
Other functions moved to functions.py
Test system modified
params.py refactored
graph_gen.py refactored
functions.py refactored
weight_str_to_number function renamed to convert_str_to_number
branch_gen function bugs fixed
input_filter function bug fixed
gl_maker function bug fixed
CONTRIBUTING.md updated
AUTHORS.md updated
Removed
print_test function
left_justify function
justify function
zero_insert function
0.8 - 2020-08-19
Added
GDF format
GML format
Changed
CLI snapshots updated
AUTHORS.md updated
0.7 - 2020-08-07
Added
Graph Line format
Changed
Menu optimized
0.6 - 2020-07-24
Added
Matrix Market format
Changed
json_maker function optimized
dl_maker function optimized
tgf_maker function optimized
lp_maker function optimized
0.5 - 2020-07-01
Added
TSV format
Multigraph control
Changed
branch_gen function modified
Website changed to https://www.pyrgg.ir
0.4 - 2020-06-17
Added
Self loop control
Github action
Changed
appveyor.yml updated
0.3 - 2019-11-29
Added
__version__ variable
CHANGELOG.md
dev-requirements.txt
requirements.txt
CODE_OF_CONDUCT.md
ISSUE_TEMPLATE.md
PULL_REQUEST_TEMPLATE.md
CONTRIBUTING.md
version_check.py
pyrgg_profile.py
Unweighted graph
Undirected graph
Exe version
Changed
Test system modified
README.md modified
Docstrings modified
get_input function modified
edge_gen function modified
Parameters moved to params.py
0.2 - 2017-09-20
Added
CSV format
YAML format
Weighted edge list format (WEL)
ASP format
Trivial graph format (TGF)
UCINET DL format
Pickle format
0.1 - 2017-08-19
Added
DIMACS format
JSON format
README
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.