GEM

GEM: A Python package for graph embedding methods - Published in JOSS (2018)

https://github.com/palash1992/gem

Science Score: 95.0%

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

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 5 DOI reference(s) in README and JOSS metadata
  • Academic publication links
    Links to: arxiv.org, sciencedirect.com
  • Committers with academic emails
    2 of 14 committers (14.3%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
    Published in Journal of Open Source Software

Keywords

graph-embedding graph-embeddings link-prediction network-embedding network-visualization

Scientific Fields

Mathematics Computer Science - 37% confidence
Last synced: 4 months ago · JSON representation

Repository

Basic Info
  • Host: GitHub
  • Owner: palash1992
  • License: bsd-3-clause
  • Language: Python
  • Default Branch: master
  • Size: 27.2 MB
Statistics
  • Stars: 1,286
  • Watchers: 42
  • Forks: 362
  • Open Issues: 14
  • Releases: 2
Topics
graph-embedding graph-embeddings link-prediction network-embedding network-visualization
Created over 8 years ago · Last pushed about 2 years ago
Metadata Files
Readme License

README.md

Python application Coverage Status Quality Gate Status

GEM: Graph Embedding Methods

Many physical systems in the world involve interactions between different entities and can be represented as graphs. Understanding the structure and analyzing properties of graphs are hence paramount to developing insights into the physical systems. Graph embedding, which aims to represent a graph in a low dimensional vector space, takes a step in this direction. The embeddings can be used for various tasks on graphs such as visualization, clustering, classification and prediction.

GEM is a Python package which offers a general framework for graph embedding methods. It implements many state-of-the-art embedding techniques including Locally Linear Embedding, Laplacian Eigenmaps, Graph Factorization, Higher-Order Proximity preserved Embedding (HOPE), Structural Deep Network Embedding (SDNE) and node2vec. It is formatted such that new methods can be easily added for comparison. Furthermore, the framework implements several functions to evaluate the quality of obtained embedding including graph reconstruction, link prediction, visualization and node classification. It supports many edge reconstruction metrics including cosine similarity, euclidean distance and decoder based. For node classification, it defaults to one-vs-rest logistic regression classifier and supports other classifiers. For faster execution, C++ backend is integrated using Boost for supported methods. A paper showcasing the results using GEM on various real world datasets can be accessed through Graph Embedding Techniques, Applications, and Performance: A Survey. The library is also published as GEM: A Python package for graph embedding methods.

Please refer https://palash1992.github.io/GEM/ to access the readme as a webpage.

Update: Note that this is a library for static graph embedding methods. For evolving graph embedding methods, please refer DynamicGEM. We also recently released Youtube dynamic graph data set which can be found at YoutubeGraph-Dyn.

The module was developed and is maintained by Palash Goyal.

Implemented Methods

GEM implements the following graph embedding techniques: * Laplacian Eigenmaps * Locally Linear Embedding * Graph Factorization * Higher-Order Proximity preserved Embedding (HOPE) * Structural Deep Network Embedding (SDNE) * node2vec

A survey of these methods can be found in Graph Embedding Techniques, Applications, and Performance: A Survey.

Graph Format

We store all graphs using the DiGraph as directed weighted graph in python package networkx. The weight of an edge is stored as attribute "weight". We save each edge in undirected graph as two directed edges.

The graphs are saved using nx.write_gpickle in the networkx format and can be loaded by using nx.read_gpickle.

Repository Structure

  • gem/embedding: existing approaches for graph embedding, where each method is a separate file
  • gem/evaluation: evaluation tasks for graph embedding, including graph reconstruction, link prediction, node classification and visualization
  • gem/utils: utility functions for graph manipulation, evaluation and etc.
  • gem/data: input test graph (currently has Zachary's Karate graph)
  • gem/c_src: source files for methods implemented in C++
  • gem/c_ext: Python interface for source files in c_src using Boost.Python

Dependencies

nxt_gem is tested to work on Python 3.9

The required dependencies are: Numpy >= 1.12.0, SciPy >= 0.19.0, Networkx >= 2.4, Scikit-learn >= 0.18.1.

To run SDNE, GEM requires Theano >= 0.9.0 and tensorflow.

In case of Python 3, make sure it was compiled with ./configure --enable-shared, and that you have /usr/local/bin/python in your LD_LIBRARY_PATH.

Install

The package uses setuptools, which is a common way of installing python modules. To install in your home directory, use: bash python setup.py install --user

To install for all users on Unix/Linux: bash sudo python setup.py install

Or installing via pipwith git: bash pip install git+https://github.com/jernsting/nxt_gem.git

Usage

See examples.

Cite

@article{goyal2017graph,
    title = "Graph embedding techniques, applications, and performance: A survey",
    journal = "Knowledge-Based Systems",
    year = "2018",
    issn = "0950-7051",
    doi = "https://doi.org/10.1016/j.knosys.2018.03.022",
    url = "http://www.sciencedirect.com/science/article/pii/S0950705118301540",
    author = "Palash Goyal and Emilio Ferrara",
    keywords = "Graph embedding techniques, Graph embedding applications, Python graph embedding methods GEM library"
}
@article{goyal3gem,
  title={GEM: A Python package for graph embedding methods},
  author={Goyal, Palash and Ferrara, Emilio},
  journal={Journal of Open Source Software},
  volume={3},
  number={29},
  pages={876}
}

Owner

  • Name: Palash Goyal
  • Login: palash1992
  • Kind: user
  • Location: Los Angeles

I am a PhD student at University of Southern California advised by Emilio Ferrara. My work focuses on graph embedding, network analysis and machine learning.

JOSS Publication

GEM: A Python package for graph embedding methods
Published
September 01, 2018
Volume 3, Issue 29, Page 876
Authors
Palash Goyal ORCID
USC Information Sciences Institute
Emilio Ferrara ORCID
USC Information Sciences Institute
Editor
Daniel S. Katz ORCID
Tags
networks graphs embedding graph embedding network analysis graph visualization

GitHub Events

Total
  • Watch event: 14
  • Fork event: 6
Last Year
  • Watch event: 14
  • Fork event: 6

Committers

Last synced: 5 months ago

All Time
  • Total Commits: 137
  • Total Committers: 14
  • Avg Commits per committer: 9.786
  • Development Distribution Score (DDS): 0.511
Past Year
  • Commits: 0
  • Committers: 0
  • Avg Commits per committer: 0.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
Palash Goyal p****o@u****u 67
Jan Ernsting j****g@u****e 36
Palash Goyal P****l 9
abaybektursun a****n@g****m 5
Eyal Trabelsi e****i@g****m 4
Palash Goyal p****t@s****m 4
Han Zhang h****5@g****m 2
Giovanni Bonaccorsi g****i@g****m 2
Claudio Daniel Tenório de Barros c****s 2
Borja Molina Coronado b****3@g****m 2
adityat a****n@g****m 1
Riccardo Bucco r****o@g****m 1
Guy Gonen G****h@g****m 1
Evan Radkoff e****f@g****m 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 4 months ago

All Time
  • Total issues: 84
  • Total pull requests: 16
  • Average time to close issues: 30 days
  • Average time to close pull requests: 4 months
  • Total issue authors: 72
  • Total pull request authors: 12
  • Average comments per issue: 2.5
  • Average comments per pull request: 0.19
  • Merged pull requests: 13
  • 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
  • zuozijiZHOULI (4)
  • agoodweathercc (4)
  • jiangxiluning (2)
  • outlace (2)
  • hurun (2)
  • Captain-Coconut (2)
  • Laya1363 (2)
  • rougier (2)
  • caijiangyao1991 (1)
  • eustomaqua (1)
  • adalisan (1)
  • icaro56 (1)
  • cgoliver (1)
  • jeetu-raj (1)
  • HusainZafar (1)
Pull Request Authors
  • claudiodtbarros (2)
  • jernsting (2)
  • iglesiasignacio (2)
  • serralba (2)
  • riccardobucco (1)
  • gibbbone (1)
  • abaybektursun (1)
  • hanzh015 (1)
  • adityat (1)
  • CatcherGG (1)
  • eyaltrabelsi (1)
  • radkoff (1)
Top Labels
Issue Labels
Pull Request Labels

Packages

  • Total packages: 2
  • Total downloads: unknown
  • Total dependent packages: 0
    (may contain duplicates)
  • Total dependent repositories: 0
    (may contain duplicates)
  • Total versions: 4
proxy.golang.org: github.com/palash1992/GEM
  • Versions: 2
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent packages count: 5.4%
Average: 5.6%
Dependent repos count: 5.8%
Last synced: 4 months ago
proxy.golang.org: github.com/palash1992/gem
  • Versions: 2
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent packages count: 5.4%
Average: 5.6%
Dependent repos count: 5.8%
Last synced: 4 months ago

Dependencies

.github/workflows/lint_and_test.yml actions
  • actions/checkout v2 composite
  • actions/setup-python v2 composite
.github/workflows/python-deploy_to_pypi.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v2 composite
  • pypa/gh-action-pypi-publish release/v1 composite
requirements.txt pypi
  • matplotlib >=2.0.0
  • networkx >=2.4
  • numpy >=1.12.0
  • scikit-learn >=0.21.2
  • scipy >=0.19.0
  • tensorflow *
  • theano >=0.9.0
setup.py pypi