networkit

NetworKit is a growing open-source toolkit for large-scale network analysis.

https://github.com/networkit/networkit

Science Score: 64.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
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
    Links to: arxiv.org
  • Committers with academic emails
    35 of 108 committers (32.4%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (19.7%) to scientific vocabulary

Keywords

complex-networks cpp dynamic-networks graph-algorithms graph-analysis graph-generation network-analysis parallel-algorithm python
Last synced: 4 months ago · JSON representation ·

Repository

NetworKit is a growing open-source toolkit for large-scale network analysis.

Basic Info
Statistics
  • Stars: 817
  • Watchers: 28
  • Forks: 237
  • Open Issues: 49
  • Releases: 0
Topics
complex-networks cpp dynamic-networks graph-algorithms graph-analysis graph-generation network-analysis parallel-algorithm python
Created almost 9 years ago · Last pushed 4 months ago
Metadata Files
Readme Changelog Contributing License Citation

README.md

NetworKit - Lage-scale Network Analysis

NetworKit is an open-source tool suite for high-performance network analysis. Its aim is to provide tools for the analysis of large networks in the size range from thousands to billions of edges. For this purpose, it implements efficient graph algorithms, many of them parallel to utilize multicore architectures. These are meant to compute standard measures of network analysis. NetworKit is focused on scalability and comprehensiveness. NetworKit is also a testbed for algorithm engineering and contains novel algorithms from recently published research (see list of publications below).

NetworKit is a Python module. High-performance algorithms are written in C++ and exposed to Python via the Cython toolchain. Python in turn gives us the ability to work interactively and a rich environment of tools for data analysis and scientific computing. Furthermore, NetworKit's core can be built and used as a native library if needed.

Requirements

You will need the following software to install NetworKit as a python package:

  • A modern C++ compiler, e.g.: g++, clang++ or MSVC (>= 14.20)
  • OpenMP for parallelism (usually ships with the compiler)
  • Python3 (3.9 or higher is supported)
    • Development libraries for Python3. The package name depends on your distribution. Examples:
    • Debian/Ubuntu: apt-get install python3-dev
    • RHEL/CentOS: dnf install python3-devel
    • Windows: Use the official release installer from www.python.org
  • Pip
  • CMake version 3.6 or higher (Advised to use system packages if available. Alternative: pip3 install cmake)
  • Build system: Make or Ninja
  • Cython version 0.29 or higher (e.g., pip3 install cython)

Install

In order to use NetworKit, you can either install it via package managers or build the Python module from source.

Install via package manager

While the most recent version is in general available for all package managers, the number of older downloadable versions differ.

pip
pip3 install [--user] networkit
conda (channel conda-forge)
conda config --add channels conda-forge
conda install networkit [-c conda-forge]
brew
brew install networkit
spack
spack install py-networkit

More system-specific information on how to install NetworKit on Linux, macOS (both Intel and M1) and Windows-systems can be found here.

Building the Python module from source

git clone https://github.com/networkit/networkit networkit
cd networkit
python3 setup.py build_ext [-jX]
pip3 install -e .

The script will call cmake and ninja (make as fallback) to compile NetworKit as a library, build the extensions and copy it to the top folder. By default, NetworKit will be built with the amount of available cores in optimized mode. It is possible the add the option -jN the number of threads used for compilation.

Usage example

To get an overview and learn about NetworKit's different functions/classes, have a look at our interactive notebooks-section, especially the Networkit UserGuide. Note: To view and edit the computed output from the notebooks, it is recommended to use Jupyter Notebook. This requires the prior installation of NetworKit. You should really check that out before start working on your network analysis.

We also provide a Binder-instance of our notebooks. To access this service, you can either click on the badge at the top or follow this link. Disclaimer: Due to rebuilds of the underlying image, it can takes some time until your Binder instance is ready for usage.

If you only want to see in short how NetworKit is used - the following example provides a climpse at that. Here we generate a random hyperbolic graph with 100k nodes and compute its communities with the PLM method:

>>> import networkit as nk
>>> g = nk.generators.HyperbolicGenerator(1e5).generate()
>>> communities = nk.community.detectCommunities(g, inspect=True)
PLM(balanced,pc,turbo) detected communities in 0.14577102661132812 [s]
solution properties:
-------------------  -----------
# communities        4536
min community size      1
max community size   2790
avg. community size    22.0459
modularity              0.987243
-------------------  -----------

Install the C++ Core only

In case you only want to work with NetworKit's C++ core, you can either install it via package managers or build it from source.

Install C++ core via package manager

conda (channel conda-forge)
conda config --add channels conda-forge
conda install libnetworkit [-c conda-forge]
brew
brew install libnetworkit
spack
spack install libnetworkit

Building the C++ core from source

We recommend CMake and your preferred build system for building the C++ part of NetworKit.

The following description shows how to use CMake in order to build the C++ Core only:

First you have to create and change to a build directory: (in this case named build)

mkdir build
cd build

Then call CMake to generate files for the make build system, specifying the directory of the root CMakeLists.txt file (e.g., ..). After this make is called to start the build process:

cmake ..
make -jX

To speed up the compilation with make a multi-core machine, you can append -jX where X denotes the number of threads to compile with.

Use NetworKit as a library

This paragraph explains how to use the NetworKit core C++ library in case it has been built from source. For how to use it when installed via package managers, best refer to the official documentation (brew, conda, spack).

In order to use the previous compiled networkit library, you need to have it installed, and link it while compiling your project. Use these instructions to compile and install NetworKit in /usr/local:

cmake ..
make -jX install

Once NetworKit has been installed, you can use include directives in your C++-application as follows:

#include <networkit/graph/Graph.hpp>

You can compile your source as follows:

g++ my_file.cpp -lnetworkit

Unit tests

Building and running NetworKit unit tests is not mandatory. However, as a developer you might want to write and run unit tests for your code, or if you experience any issues with NetworKit, you might want to check if NetworKit runs properly. The unit tests can only be run from a clone or copy of the repository and not from a pip installation. In order to run the unit tests, you need to compile them first. This is done by setting the CMake NETWORKI_BUILD_TESTS flag to ON:

cmake -DNETWORKIT_BUILD_TESTS=ON ..

Unit tests are implemented using GTest macros such as TEST_F(CentralityGTest, testBetweennessCentrality). Single tests can be executed with:

./networkit_tests --gtest_filter=CentralityGTest.testBetweennessCentrality

Additionally, one can specify the level of the logs outputs by adding --loglevel <log_level>; supported log levels are: TRACE, DEBUG, INFO, WARN, ERROR, and FATAL.

Compiling with address/leak sanitizers

Sanitizers are great tools to debug your code. NetworKit provides additional Cmake flags to enable address, leak, and undefined behavior sanitizers. To compile your code with sanitizers, set the CMake NETWORKIT_WITH_SANITIZERS to either address or leak:

cmake -DNETWORKIT_WITH_SANITIZERS=leak ..

By setting this flag to address, your code will be compiled with the address and the undefined sanitizers. Setting it to leak also adds the leak sanitizer.

Documentation

The most recent version of the documentation can be found online.

Contact

For questions regarding NetworKit, have a look at our issues-section and see if there is already an open discussion. If not feel free to open a new issue. To stay updated about this project, subscribe to our mailing list.

Contributions

We encourage contributions to the NetworKit source code. See the development guide for instructions. For support please contact the mailing list.

Credits

List of contributors can be found on the NetworKit website credits page.

External Code

The program source includes: - the TLX library - the TTMath bignum library

License

The source code of this program is released under the MIT License. We ask you to cite us if you use this code in your project (c.f. the publications section below and especially the technical report). Feedback is also welcome.

Publications

The NetworKit publications page lists the publications on NetworKit as a toolkit, on algorithms available in NetworKit, and simply using NetworKit. We ask you to cite the appropriate ones if you found NetworKit useful for your own research.

Owner

  • Name: networkit
  • Login: networkit
  • Kind: organization

Citation (CITATION.cff)

cff-version: 1.2.0
message: Please cite this software using the metadata from 'preferred-citation'.
url: "https://networkit.github.io/"
authors:
  - family-names: L. Staudt
    given-names: Christian
  - family-names: Sazonovs
    given-names: Aleksejs
  - family-names: Meyerhenke
    given-names: Henning
title: "NetworKit: A Tool Suite for Large-scale Complex Network Analysis"
preferred-citation:
    type: article
    authors:
      - family-names: L. Staudt
        given-names: Christian
      - family-names: Sazonovs
        given-names: Aleksejs
      - family-names: Meyerhenke
        given-names: Henning
    title: "NetworKit: A Tool Suite for Large-scale Complex Network Analysis"
    year: "2016"
    month: "12"
    volume: 4
    issue: 4
    journal: Network Science
    publisher:
        name: "Cambridge University Press"
    pages: "508-530"
    doi: 10.1017/nws.2016.20
    abstract: "We introduce NetworKit, an open-source software package for analyzing the structure of large complex networks. Appropriate algorithmic solutions are required to handle increasingly common large graph data sets containing up to billions of connections. We describe the methodology applied to develop scalable solutions to network analysis problems, including techniques like parallelization, heuristics for computationally expensive problems, efficient data structures, and modular software architecture. Our goal for the software is to package results of our algorithm engineering efforts and put them into the hands of domain experts. NetworKit is implemented as a hybrid combining the kernels written in C++ with a Python front end, enabling integration into the Python ecosystem of tested tools for data analysis and scientific computing. The package provides a wide range of functionality (including common and novel analytics algorithms and graph generators) and does so via a convenient interface. In an experimental comparison with related software, NetworKit shows the best performance on a range of typical analysis tasks."
repository-code: "https://github.com/networkit/networkit"

GitHub Events

Total
  • Issues event: 45
  • Watch event: 46
  • Issue comment event: 79
  • Push event: 92
  • Pull request review comment event: 184
  • Pull request review event: 147
  • Pull request event: 83
  • Fork event: 10
  • Create event: 10
Last Year
  • Issues event: 45
  • Watch event: 46
  • Issue comment event: 79
  • Push event: 92
  • Pull request review comment event: 184
  • Pull request review event: 147
  • Pull request event: 83
  • Fork event: 10
  • Create event: 10

Committers

Last synced: 9 months ago

All Time
  • Total Commits: 7,758
  • Total Committers: 108
  • Avg Commits per committer: 71.833
  • Development Distribution Score (DDS): 0.85
Past Year
  • Commits: 298
  • Committers: 9
  • Avg Commits per committer: 33.111
  • Development Distribution Score (DDS): 0.681
Top Committers
Name Email Commits
cls c****t@k****u 1,163
Eugenio Angriman e****n@i****e 814
cls c****s@l****t 654
Michael Hamann m****n@k****u 489
Henning Meyerhenke m****e@k****u 468
Moritz von Looz m****m@k****u 436
Charmaine Ndolo C****o@h****e 321
Gerd Lindner g****r@s****u 305
Manuel Penschuck m****l@a****e 289
maxv m****l@s****u 279
Kolja Esders k****s@s****u 235
fabratu f****t@g****m 210
mwegner m****r@l****t 208
Marvin Ritter m****r@g****m 197
maxv u****f@s****u 170
ebergamini e****i@k****u 133
Lukas Berner L****r@h****e 99
Alexander van der Grinten a****n@g****m 97
fabratu b****a@h****e 97
Gerd Lindner l****d@g****m 80
Roman Bange r****e@p****e 72
aristoteles p****0@g****e 69
Yassine Marrakchi u****r@s****u 66
petholza a****z@w****e 65
Andreas Scharf a****f@g****m 61
Florian Weber f****r@s****e 60
peterlqa p****a@h****e 58
Alehins A****s@l****t 55
Charmaine Ndolo n****a@b****e 31
Eugenio Angriman a****n@i****e 31
and 78 more...

Issues and Pull Requests

Last synced: 4 months ago

All Time
  • Total issues: 132
  • Total pull requests: 271
  • Average time to close issues: 12 months
  • Average time to close pull requests: about 1 month
  • Total issue authors: 87
  • Total pull request authors: 31
  • Average comments per issue: 2.27
  • Average comments per pull request: 1.27
  • Merged pull requests: 214
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 20
  • Pull requests: 89
  • Average time to close issues: about 1 month
  • Average time to close pull requests: 17 days
  • Issue authors: 16
  • Pull request authors: 11
  • Average comments per issue: 1.1
  • Average comments per pull request: 0.83
  • Merged pull requests: 66
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • bernlu (13)
  • Thijss (7)
  • fabratu (7)
  • j-adamczyk (6)
  • CharJon (4)
  • adsharma (3)
  • destiny1009 (3)
  • Fabio-Giacomelli (2)
  • angriman (2)
  • rionda (2)
  • Ishitori (2)
  • kisasexypantera94 (2)
  • Xiaohui9607 (2)
  • Schwarf (2)
  • wrosko (2)
Pull Request Authors
  • fabratu (102)
  • PetholzA (94)
  • bernlu (46)
  • angriman (28)
  • Schwarf (22)
  • Relux-the-Relux (8)
  • CharJon (6)
  • HazelCC (4)
  • fidus58 (3)
  • Alexander40a (2)
  • RobinPetit (2)
  • domischweisgut (2)
  • friedagerharz (2)
  • jurepustos (2)
  • CyberSchrotti (2)
Top Labels
Issue Labels
bug (16) code quality (3) doc (2) feature request (2) performance (1) CI (1)
Pull Request Labels
code quality (86) bug (58) new feature (55) CI (43) performance (17) stagnant (14) general (12) doc (10) code-style (6) removal (1)

Packages

  • Total packages: 3
  • Total downloads:
    • pypi 33,044 last-month
  • Total docker downloads: 31,491
  • Total dependent packages: 18
    (may contain duplicates)
  • Total dependent repositories: 32
    (may contain duplicates)
  • Total versions: 56
  • Total maintainers: 4
pypi.org: networkit

NetworKit is a toolbox for high-performance network analysis

  • Homepage: https://networkit.github.io/
  • Documentation: https://networkit.readthedocs.io/
  • License: Copyright (c) 2013-2022 Henning Meyerhenke, NetworKit Contributors Copyright (c) 2013-2017 Karlsruhe Institute of Technology Copyright (c) 2017-2018 University of Cologne Copyright (c) 2018-2022 Humboldt-Universität zu Berlin MIT License (http://opensource.org/licenses/MIT) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  • Latest release: 11.0.1
    published 11 months ago
  • Versions: 35
  • Dependent Packages: 17
  • Dependent Repositories: 30
  • Downloads: 33,044 Last month
  • Docker Downloads: 31,491
Rankings
Dependent packages count: 0.8%
Downloads: 1.1%
Average: 2.3%
Dependent repos count: 2.7%
Docker downloads count: 4.6%
Maintainers (4)
Last synced: 4 months ago
conda-forge.org: libnetworkit

NetworKit is a growing open-source toolkit for large-scale network analysis. Its aim is to provide tools for the analysis of large networks in the size range from thousands to billions of edges. For this purpose, it implements efficient graph algorithms, many of them parallel to utilize multicore architectures. These are meant to compute standard measures of network analysis, such as degree sequences, clustering coefficients, and centrality measures. In this respect, NetworKit is comparable to packages such as NetworkX, albeit with a focus on parallelism and scalability. NetworKit is also a testbed for algorithm engineering and contains novel algorithms from recently published research (see list of Publications).

  • Versions: 9
  • Dependent Packages: 1
  • Dependent Repositories: 0
Rankings
Forks count: 11.7%
Stargazers count: 14.8%
Average: 22.3%
Dependent packages count: 28.8%
Dependent repos count: 34.0%
Last synced: 4 months ago
conda-forge.org: networkit

NetworKit is a growing open-source toolkit for large-scale network analysis. Its aim is to provide tools for the analysis of large networks in the size range from thousands to billions of edges. For this purpose, it implements efficient graph algorithms, many of them parallel to utilize multicore architectures. These are meant to compute standard measures of network analysis, such as degree sequences, clustering coefficients, and centrality measures. In this respect, NetworKit is comparable to packages such as NetworkX, albeit with a focus on parallelism and scalability. NetworKit is also a testbed for algorithm engineering and contains novel algorithms from recently published research (see list of Publications).

  • Versions: 12
  • Dependent Packages: 0
  • Dependent Repositories: 2
Rankings
Forks count: 12.5%
Stargazers count: 15.7%
Dependent repos count: 20.3%
Average: 25.0%
Dependent packages count: 51.6%
Last synced: 4 months ago

Dependencies

.github/workflows/build_wheels.yml actions
  • actions/checkout v2 composite
  • actions/download-artifact v2 composite
  • actions/setup-python v2 composite
  • actions/upload-artifact v2 composite
  • docker/setup-qemu-action v1 composite
  • ilammy/msvc-dev-cmd v1 composite
  • pypa/cibuildwheel v2.1.1 composite
  • pypa/cibuildwheel v2.1.2 composite
.github/workflows/ci.yml actions
  • actions/checkout v2 composite
  • actions/setup-python v3 composite
  • actions/setup-python v2 composite
  • ilammy/msvc-dev-cmd v1 composite
  • peaceiris/actions-gh-pages v3 composite
Dockerfile docker
  • jupyter/base-notebook lab-3.0.11 build
requirements.txt pypi
  • ipython *
  • matplotlib *
  • networkx *
  • pandas *
  • scikit-learn *
  • seaborn *
  • tabulate *