Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/multivacplatform/louvain
Louvain community detection
https://github.com/multivacplatform/louvain
algorithm community-detection graph louvain louvain-community-detection
Last synced: 2 days ago
JSON representation
Louvain community detection
- Host: GitHub
- URL: https://github.com/multivacplatform/louvain
- Owner: multivacplatform
- License: mit
- Created: 2017-11-27T22:16:49.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2018-11-25T20:55:35.000Z (almost 6 years ago)
- Last Synced: 2024-04-23T15:40:54.013Z (7 months ago)
- Topics: algorithm, community-detection, graph, louvain, louvain-community-detection
- Language: JavaScript
- Homepage: https://multivac.iscpif.fr
- Size: 73.2 KB
- Stars: 7
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Louvain [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/multivacplatform/louvain/blob/master/LICENSE)
---
## DescriptionFormally, a community detection aims to partition a graph’s vertices in subsets, such that there are many edges connecting between vertices of the same sub-set compared to vertices of different sub-sets; in essence, a community has many more ties between each constituent part than with outsiders. There are numerous algorithms present in the literature for solving this problem, a complete survey can be found in [1].
One of the popular community detection algorithms is presented in [2]. This algorithm separates the network in communities by optimizing greedily a modularity score after trying various grouping operations on the network. By using this simple greedy approach the algorithm is computationally very efficient.
[1] Fortunato, Santo. "Community detection in graphs." Physics Reports 486, no. 3-5 (2010).
[2] V.D. Blondel, J.-L. Guillaume, R. Lambiotte, E. Lefebvre. "Fast unfolding of communities in large networks." J. Stat. Mech., 2008: 1008.
(http://arxiv.org/abs/0803.0476) (http://en.wikipedia.org/wiki/Community_structure#The_Louvain_method).
## Usage
0. Install the package from NPM
```shell
npm i --save louvain
```
1. Import the package.
```javascript
let louvain = require('louvain');
```
2. Sample Data Format
#### Node Data
```javascript
let node_data = ['id1', 'id2', 'id3']; // any type of string can be used as id
```
#### Edge Data
```javascript
let edge_data = [
{source: 'id1', target:'id2', weight: 10.0},
{source: 'id2', target:'id3', weight: 20.0},
{source: 'id3', target:'id1', weight: 30.0}
];
```
#### (Optional) Partition Data
```javascript
let init_part = {'id1':0, 'id2':0, 'id3': 1};
// Object with ids of nodes as properties and community number assigned as value.
```
3. Run the Algorithm on your node and edge set by chaining the **nodes** and **edges** methods, optionally you can provide an intermediary community partition assignement with the **partition_init** method. [ **Order of chaining is important** ]
```javascript
let community = louvain().nodes(node_data).edges(edge_data).partition_init(init_part);
let result = community();```
![](example/default.png)#### After Community Detection
We can see the partitioned graph vertices with the help of color coding.
![](example/communities.png)
## Test
This has been tested with Node.js v6.11.5 / npm 5.5.1 - written in ES6## Code of Conduct
This, and all github.com/multivacplatform projects, are under the [Multivac Platform Open Source Code of Conduct](https://github.com/multivacplatform/code-of-conduct/blob/master/code-of-conduct.md). Additionally, see the [Typelevel Code of Conduct](http://typelevel.org/conduct) for specific examples of harassing behavior that are not tolerated.
## Credit
Corneliu S. (jLouvain) [https://github.com/upphiminn/jLouvain]## License
The MIT License (MIT)