concuss

Combatting Network Complexity Using Structural Sparsity

https://github.com/theoryinpractice/concuss

Science Score: 38.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
  • .zenodo.json file
  • DOI references
  • Academic publication links
    Links to: zenodo.org
  • Committers with academic emails
    5 of 9 committers (55.6%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (11.6%) to scientific vocabulary
Last synced: 10 months ago · JSON representation ·

Repository

Combatting Network Complexity Using Structural Sparsity

Basic Info
  • Host: GitHub
  • Owner: TheoryInPractice
  • License: other
  • Language: Python
  • Default Branch: master
  • Size: 287 KB
Statistics
  • Stars: 9
  • Watchers: 3
  • Forks: 5
  • Open Issues: 5
  • Releases: 0
Created almost 11 years ago · Last pushed over 7 years ago
Metadata Files
Readme License Citation

README.md

CONCUSS: Combatting Network Complexity Using Structural Sparsity

CONCUSS is a software tool for large scale graph analytics. The efficiency and scalability of CONCUSS come from exploiting the underlying structure and sparsity of the data. It allows users to count the number of occurrences of a specific pattern within a graph (i.e. subgraph isomorphism counting). These counts are a building block for more complicated scientific analysis, such as motif counting and graphlet degree signature creation.

Command line usage

./concuss.py [OPTIONS] graph pattern [config]

Count the number of subgraphs of graph which are isomorphic to pattern.

Positional arguments:

  • graph - filename of the host graph
  • pattern - filename, basic pattern or multi. See basic patterns and multiple-patterns sections below.
  • config - filename of the configuration settings (defaults to config/default.cfg)

Optional arguments:

  • -h, --help - show help message and exit
  • -o [OUTPUT], --output [OUTPUT] - filename of the result
  • -v, --verbose - verbose output
  • -p, --profile - profile function calls
  • -c [COLORING], --coloring [COLORING] - filename of existing p-centered coloring. When this option is not selected, CONCUSS will find a coloring itself
  • -C, --coloring-no-verify - same as -c but do not verify correctness of existing coloring
  • -m [MULTI_PAT_FILE], --multi_pat_file [MULTI_PAT_FILE] - file containing multiple pattern descriptions (as file paths and/or basic patterns)
  • -e [EXECUTION_DATA], --execution-data [EXECUTION_DATA] - create ZIP archive EXECUTION_DATA for visualization with BEAVr

Example command:

Using pattern file:

./concuss.py testing/graphs/karate.txt testing/graphs/motifs/K3.txt

Example output:

Number of occurrences of H in G: 270

This means that there are 270 isomorphisms of K3 (a triangle) in the karate network. Since the triangle has 3 automorphisms, the karate network has 90 distinct triangles.

Basic patterns:

CONCUSS can be run by providing a basic pattern instead of a pattern file for the pattern argument in the execution command. All other positional and optional arguments remain unchanged.

Basic patterns provide a faster and simpler way of specifying patterns to search for in the graph.

We provide the following commonly used basic patterns:

1-partite basic patterns:

clique wheel cycle path star

Usage:

.concuss.py {path_to_graph}/graph basicpattern|int

| represents concatenation. The int specifies the number of vertices in pattern.

Example command:

./concuss.py testing/graphs/karate.txt star4

Example output:

Number of occurrences of H in G: 6588

Bi-partite basic patterns:

biclique

Usage:

./concuss.py {path_to_graph}/graph basicpattern|int,int

| represents concatenation. The ints specify the number of vertices in the first and second sets of the bi-partite pattern.

Example command:

./concuss.py testing/graphs/karate.txt biclique2,2

Example output:

Number of occurrences of H in G: 288

Counting multiple patterns in a single CONCUSS run

CONCUSS supports counting multiple patterns in a single pipeline run. In order to use the multiple pattern pipeline, CONCUSS needs to be run using the command line argument -m [FILENAME] where [FILENAME] is a file containing descriptions of patterns either as file paths or basic patterns. For the positional argument pattern, the keyword multi must be used to specify that we are counting multiple patterns.

The format for the multiple pattern file is as follows. Specify each pattern as a basic pattern or a filename on a separate line.

basic_pattern_1
basic_pattern_2
path/to/pattern/file3
...
basic_pattern_n

Example file: multi_size3.txt

star3
path3
testing/graphs/motifs/K3.txt

Example command:

./concuss.py testing/graphs/karate.txt multi -m testing/graphs/motifs/multi_size3.txt

Example output:

Number of occurrences of star3 in G: 786
Number of occurrences of path3 in G: 786
Number of occurrences of testing/graphs/motifs/K3.txt in G: 270

Install and Software Requirements

CONCUSS requires a 64-bit operating system and Python 2.7.x interpreter (e.g. CPython or PyPy). Running the pipeline with PyPy typically decreases runtimes due to native function inlining.

Extra Dependencies

The main computations in CONCUSS do not require any additional libraries.

To import graph data in GraphML or GEXF format, the Beautiful Soup package is required.

pip install beautifulsoup

For developers wishing to contribute to CONCUSS, the testing suite (see below) uses the NetworkX python package to verify the correctness of the counts.

pip install networkx

File Format Compatibilities

Graphs

CONCUSS supports reading data files for the host and pattern graphs in the following formats:

  • Edgelist (.txt)
  • GML (.gml)
  • LEDA (.leda)
  • GraphML (.graphml) (requires Beautiful Soup package)
  • GEXF (.gexf) (requires Beautiful Soup package)

Colorings

p-centered colorings are stored in a file that lists the number of colors used on the first line and each subsequent line is of the form

[VERTEX ID]: [COLOR]

where [VERTEX ID] and [COLOR] are integers ranging from 0 to the number of vertices minus one and the number of colors minus one, respectively.

BEAVr

As of version 2.0, CONCUSS supports visualization with BEAVr. By passing the -e option to CONCUSS, a ZIP archive is created containing:

  • The graph and pattern given to CONCUSS
  • All graph colorings computed by the Color stage of CONCUSS
  • The largest treedepth decomposition found in the Decompose stage of CONCUSS
  • The dynamic programming tables computed for that treedepth decomposition
  • The number of isomorphisms found in each color set

This ZIP archive can be loaded into BEAVr to create an interactive visualization of the execution of CONCUSS. See the BEAVr documentation for more information.

CONCUSS can currently only create visualization output with certain configuration options for the Compute and Combine stages. The Compute stage must use the KPattern class, and must be set to not reuse dynamic programming table entries. The Combine stage must use the InclusionExclusion method of correcting overcounting. For convenience, a configuration file containing the required options is provided as config/beavr.cfg.

Configuration

The algorithmic workflow in this tool is highly modular, which allows users to swap out subroutines throughout the stages of the pipeline. A default configuration file is provided in config/default.cfg; this is recommended as the "best practice" for efficiency. Users who want to experiment with algorithmic variations can find details on how to create custom config files in the documentation.

Contribution and Testing (for Developers)

We welcome contributions to CONCUSS, in the form of Pull Requests, where you "fork" our repository and then request that we "pull" your changes into the main branch. You must have a Github account to make a contribution.

Whenever possible, please follow these guidelines for contributions:

  • Keep each pull request small and focused on a single feature or bug fix.
  • Familiarize yourself with the code base, and follow the formatting principles adhered to in the surrounding code (e.g. we are PEP8 compliant).
  • Wherever possible, provide unit tests for your contributions. In fact, feel free to contribute a better unit testing framework :)

A series of tests are included for developers to ensure their changes do not introduce new bugs. See the testing documentation for additional instructions.

Citation and License

Important: CONCUSS is research software, so you should cite us when you use it in scientific publications! Please see the CITATION file for citation information. DOI

CONCUSS is released under the BSD license; see the LICENSE file. Distribution, modification and redistribution, and incorporation into other software is allowed.

Getting Help, Feature Requests, and Bug Reports

We are using Github Issues for communication related to CONCUSS. Feel free to submit feature requests, ask for help (after reading the documentation), or notify us of a potential bug. "Watch" our repository to keep abreast of progress and new releases.

Acknowledgements

Development of the CONCUSS software package was funded in part by:

Owner

  • Name: Theory In Practice
  • Login: TheoryInPractice
  • Kind: organization
  • Location: University of Utah, Salt Lake City, UT

Citation (CITATION)

*********
Citations
*********

Software Citation
=================

If you use the latest version of the CONCUSS software, you must cite:

M.P. O'Brien, C.G. Hobbs, K. Jasnick, F. Reidl, N.G. Rodrigues, and B.D. Sullivan. (2016). 
CONCUSS: Version 2.0. Zenodo. 10.5281/zenodo.55690 

..code-block::tex

@misc{CONCUSS_v2.0,
  author       = {Michael P. O'Brien and
                  Clayton G. Hobbs and
                  Kevin Jasnick and
                  Felix Reidl and
                  Brandon Mork and
                  Nishant G. Rodrigues and
                  Blair D. Sullivan},
  title        = {CONCUSS: Version 2.0},
  month        = jun,
  year         = 2016,
  doi          = {10.5281/zenodo.55690},
  url          = {http://dx.doi.org/10.5281/zenodo.55690}
}

For previous versions, please use citation information archived on Zenodo:
Version 1.0: https://zenodo.org/record/30281

If you use any of our published algorithms or heuristics you should *also*
cite the relevant paper(s) as directed below.

Pattern Counting (Subgraph Isomorphism) 
===========================================================

The methods in lib:pattern_counting (which are used in the main pipeline :program:`concuss.py`) implements the bounded-treedepth subgraph isomorphism algorithm described in:

   E. Demaine, F. Reidl, P. Rossmanith, F. Sanchez Villaamil, S. Sikdar, and B. D. Sullivan. 
   Structural sparsity of complex networks: random graph models and linear algorithms. 
   ArXiv:1406.2587. 2015.

.. code-block:: tex

  @article{DemaineRRVSS14,
  author    = {Erik D. Demaine and
               Felix Reidl and
               Peter Rossmanith and
               Fernando Sanchez Villaamil and
               Somnath Sikdar and
               Blair D. Sullivan},
  title     = {Structural Sparsity of Complex Networks: Random Graph Models and Linear
               Algorithms},
  journal   = {CoRR},
  volume    = {abs/1406.2587},
  year      = {2014},
  url       = {http://arxiv.org/abs/1406.2587},
}

GitHub Events

Total
Last Year

Committers

Last synced: over 3 years ago

All Time
  • Total Commits: 98
  • Total Committers: 9
  • Avg Commits per committer: 10.889
  • Development Distribution Score (DDS): 0.52
Top Committers
Name Email Commits
Nishant Rodrigues n****g@n****u 47
Clayton G. Hobbs c****s@n****u 18
Blair D. Sullivan b****n@n****u 10
Michael O'Brien m****3@n****u 9
Brandon Mork b****k@n****u 7
Nishant Rodrigues n****z@y****m 3
Nishant Rodrigues n****0@y****m 2
Brandon Mork m****n@g****m 1
Clayton G. Hobbs c****y@l****t 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 11 months ago

All Time
  • Total issues: 5
  • Total pull requests: 15
  • Average time to close issues: 9 months
  • Average time to close pull requests: 26 days
  • Total issue authors: 2
  • Total pull request authors: 4
  • Average comments per issue: 0.4
  • Average comments per pull request: 0.67
  • Merged pull requests: 12
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 0
  • Pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • bdsullivan (3)
  • sgsmob (2)
Pull Request Authors
  • sgsmob (7)
  • brandon-mork (4)
  • nish10z (3)
  • cghobbs-ncsu (1)
Top Labels
Issue Labels
bug (1)
Pull Request Labels

Packages

  • Total packages: 1
  • Total downloads: unknown
  • Total dependent packages: 0
  • Total dependent repositories: 0
  • Total versions: 1
  • Total maintainers: 1
pypi.org: concuss

Combatting Network Complexity Using Structural Sparsity

  • Versions: 1
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent packages count: 10.0%
Forks count: 14.2%
Stargazers count: 19.3%
Average: 27.8%
Dependent repos count: 67.6%
Maintainers (1)
Last synced: 11 months ago