Skip to main content

Network builder for multi-omics matrices.

Project description

netan

PyPI version Python License

netan is a network analysis library for omics data. It builds sample or feature graphs from one or more matrices, tunes graph construction, ranks features against sample labels, and exports publication-ready or Cytoscape-ready outputs.

It works naturally with rodin and Rodin-like objects.

Web app: netan.io

Highlights

  • Build graphs in samples or features mode.
  • Work with single-omics or multilayer multi-omics data.
  • Use spearman, clr, rf, or glasso inference.
  • Tune graph construction with a reusable grid -> scores_grid -> materialize workflow.
  • Rank features with graph-aware label separation statistics.
  • Visualize interactively with Plotly and export edge tables directly.

Installation

pip install netan

Requires Python >=3.10.

Quick start

import rodin
import netan

r1 = rodin.create("metabolomics.csv", "meta.csv")
r2 = rodin.create("transcriptomics.csv", "meta.csv")

r1.transform()
r2.transform()

nt = netan.create([r1, r2])

nt.build(
    method="spearman",
    node_mode="samples",
    layer_mode="multilayer",
    graph="entire",
)

nt.plot(color="Group", title="Sample network")

Core workflow

Build

nt.build(
    method="rf",
    node_mode="samples",
    layer_mode="multilayer",
    graph="entire",
    k="auto",
)

If you do not pass thresholds, netan sparsifies automatically through auto_target.

Inspect

nt.info()
nt.params()
nt.scores()
nt.edges()

Tune

nt.tune(label="Group")
nt.best()

For repeated score iteration on the same candidate space:

nt.grid()

nt.scores_grid(
    label="Group",
    weights={
        "sep": [15, 5, 80],
        "supervised": [60, 15, 15, 10],
    },
)

nt.materialize()

Rank and shortlist

nt.rank("Group")
nt.stability_rank("Group")
nt_small = nt.shortlist(p_adj_max=0.01)

This workflow is available in samples mode and is useful when you want graph-aware feature selection before rebuilding a smaller network.

Concepts

Node mode

  • samples: nodes are samples and edges represent sample similarity
  • features: nodes are features and multilayer builds can include cross-omics feature edges

Layer mode

  • stack: one combined graph
  • multilayer: per-layer graphs plus integrated outputs

Methods

  • spearman: correlation-based
  • clr: mutual-information based
  • rf: ExtraTrees similarity
  • glasso: sparse precision graph

Sparsity controls

  • auto_target: default thresholding control
  • k=None: threshold-only graph
  • k="auto": adaptive kNN pruning
  • mutual=True: stricter kNN graph
  • attach_isolates=True: reconnect isolates after sparsification

Tuning model

tune() separates expensive candidate construction from cheap rescoring:

  • grid(): build all candidate graph states once
  • scores_grid(): score the grid in unsupervised or supervised mode
  • materialize(): restore any leaderboard row as a live Netan object

This makes it practical to iterate on score weights without rerunning inference.

Visualization and export

nt.plot(layout="kamada_kawai", color="Group")
nt.export("edges.csv")

Supported layouts:

  • force-directed
  • spring
  • circular
  • kamada_kawai
  • random

Persistence

path = nt.save("netan.pkl")
nt2 = netan.load(path)

This restores stored graphs, rankings, caches, and tuning grids. The live Plotly figure handle is not serialized.

Input contract

netan expects one object or a list of objects exposing:

  • r.X: pandas.DataFrame with shape features x samples
  • r.samples: pandas.DataFrame whose first column contains sample IDs aligned to r.X.columns
  • r.features: optional feature metadata

Rodin already matches this layout.

Public API

Main entry points:

  • netan.create(...)
  • netan.load(path)
  • Netan.build(...)
  • Netan.adjust(...)
  • Netan.grid(...)
  • Netan.scores_grid(...)
  • Netan.materialize(...)
  • Netan.tune(...)
  • Netan.rank(...)
  • Netan.stability_rank(...)
  • Netan.shortlist(...)
  • Netan.plot(...)
  • Netan.export(...)
  • Netan.save(path)

For exact parameters, use the Python docstrings.

Notes

  • samples mode is where label-aware tuning and rank() make the most sense.
  • features mode is the right choice for variable-level network exploration.
  • For larger graphs, spearman, clr, and rf are usually the practical defaults.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

netan-2.1.1.tar.gz (70.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

netan-2.1.1-py3-none-any.whl (71.6 kB view details)

Uploaded Python 3

File details

Details for the file netan-2.1.1.tar.gz.

File metadata

  • Download URL: netan-2.1.1.tar.gz
  • Upload date:
  • Size: 70.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.6

File hashes

Hashes for netan-2.1.1.tar.gz
Algorithm Hash digest
SHA256 7592635bf817860ad4a42e0a46c04d1e18319772658a668aa13755eb41ff46d5
MD5 51dcaab7a37f3d66003030c4f477743f
BLAKE2b-256 d3edcd00305707b8d8be6e1998a93cf2858ad4f107020b36d64427896370633a

See more details on using hashes here.

File details

Details for the file netan-2.1.1-py3-none-any.whl.

File metadata

  • Download URL: netan-2.1.1-py3-none-any.whl
  • Upload date:
  • Size: 71.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.6

File hashes

Hashes for netan-2.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 06314c70a8d6d6309c9ef8e4819adbd50daf59870c59f35e22a0f3d0c0b4f834
MD5 bbeb75b6e7852b67225c7c26b9125b30
BLAKE2b-256 e0691ea05f0c19af2fd524fff742a9b384a756860118b95bdfd8e9eb9ffaaf3f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page