NEExT: Network Embedding
Experimentation Toolkit

An open-source Python framework for network science and graph machine learning.

NEExT Ready
ImportLibraryExplore Dataset Management
graph_collection → egonets → embedding
network → egonets
embedding space
⌘ Command window

job graph_embeddings · started

computing wasserstein embeddings · 3 communities detected

~/NEExT-WorkbenchProject: Social network studyReady

Built on the scientific Python stack you already trust

  • NetworkX
  • iGraph
  • NumPy
  • pandas
  • scikit-learn
  • XGBoost
Structural node featuresGraph embeddingsFeature importanceEgonet decompositionCustom metricsNetworkX + iGraphLocal WorkbenchReproducible evidence
The library

A Python library with research
infrastructure built around it.

One coherent pipeline from graph data to research evidence. Use it from a script or notebook today; reach for the Workbench when a project needs lineage and structure.

  1. 01

    Load graphs

    Read CSV, DataFrames, URLs, or NetworkX graphs into a unified GraphCollection — NetworkX or iGraph backend.

  2. 02

    Measure structure

    Compute built-in or custom structural node features with k-hop neighborhood aggregation.

  3. 03

    Embed distributions

    Turn node-feature distributions into graph-level vectors with Wasserstein or Sinkhorn embeddings.

  4. 04

    Train & compare

    Fit classifiers or regressors, score variants, and read feature importance for evidence.

Structural node features

Measure what the
network already knows.

Compute graph-theoretic node features across an entire collection in parallel, with neighborhood aggregation that captures structure at multiple k-hop scales.

  • PageRank
  • Degree centrality
  • Closeness
  • Betweenness
  • Eigenvector centrality
  • Clustering coefficient
  • Local efficiency
  • LSME
  • β* community-aware

The β* feature implements the community-aware node metric from arXiv 2311.04730. Register your own metrics with a single Python function.

Graph embeddings

Turn structure into
graph-level vectors.

NEExT lifts node-feature distributions into graph-level embeddings using optimal-transport methods that preserve structural geometry — ready for any downstream model.

  • approx_wasserstein Fast approximate Wasserstein
  • exact_wasserstein Exact optimal-transport distance
  • sinkhorn Entropic Sinkhorn vectorizer
The Workbench

A local cockpit for
your whole experiment.

Prefer a UI? The NEExT Workbench wraps the same library in a desktop-style web app that runs entirely on your machine — no cloud, no upload, no account.

127.0.0.1:8765 · NEExT Workbench make neext-workbench
NEExT Workbench home: projects list with inspector, jobs panel, and command window
  • Spaces & ribbon

    Datasets, Features, Embeddings, and Models — each a Space with its own commands.

  • Artifact lineage

    Projects, datasets, feature sets, embeddings, and models stay connected as a DAG.

  • Jobs & command log

    Every run is a tracked job with readable logs in the command window.

Datasets · Zachary Karate Club · MUTAG
NEExT Workbench datasets view: prepared graph datasets with statuses, inspector and job history
Configured datasets become roots of the compute graph — prepared, versioned, and ready for features.
Custom methods

Bring your own
graph signals.

Register any structural metric as a plain Python function and run it inside the same pipeline as the built-ins — from a script, a module, or a notebook cell. In the Workbench, the same contract powers custom Feature Create.

Return a DataFrame ordered node_id, graph_id, feature_0… — that's the whole contract.

custom_feature.py
 def compute_feature(graph):
    nodes = list(graph.nodes)
    degrees = [graph.G.degree(n) for n in nodes]
return pd.DataFrame({"node_id": nodes,
"graph_id": graph.graph_id,
"degree_sq_0": [d ** 2 for d in degrees],
})[["node_id", "graph_id", "degree_sq_0"]]
Quickstart

From graph data to evidence
in one readable script.

pipeline.py
 from NEExT import NEExT

nxt = NEExT()
# Load graphs into one collection (NetworkX or iGraph)
graphs = nxt.read_from_csv(
    edges_path="edges.csv",
    node_graph_mapping_path="node_graph_mapping.csv",
    graph_label_path="graph_labels.csv",
    graph_type="igraph",
)
# Structural node features, multi-scale
features = nxt.compute_node_features(graphs, feature_list=["all"])
# Graph-level embeddings via optimal transport
embeddings = nxt.compute_graph_embeddings(
    graphs, features, embedding_algorithm="approx_wasserstein",
)
# Train, score, and compare variants
results = nxt.train_ml_model(graphs, embeddings, model_type="classifier")
Built for research

Reproducible by construction.

NEExT is a research instrument first — transparent methods, versioned artifacts, and evidence you can defend, whether you drive it from Python or the Workbench.

Grounded in the literature

Wasserstein and Sinkhorn embeddings build on optimal transport; the β* node metric implements published community-aware structure.

Local-first & private

The Workbench runs on 127.0.0.1 against your own files. No upload, no account, no data leaving your machine.

Open source, MIT

NEExT is permissively licensed and built on NetworkX, iGraph, and the scientific Python stack you already know.

Reference: Network Embedding Exploration Tool (NEExT) · β* community-aware feature: arXiv 2311.04730.

Get started

Install the library.
Launch the Workbench when you need it.

Pure Python, runs anywhere. Python 3.9–3.12. The Workbench is one extra install away.

1 $ pip install NEExT
2 $ pip install "NEExT[workbench]" && neext-workbench