Skip to main content

LaminDB: Manage R&D data & analyses.

Project description

Stars codecov pypi Documentation

LaminDB

Open-source data lake & feature store for biology.

Public beta: Currently only recommended for collaborators as we still make breaking changes.

Update 2023-06-14:

- We completed a major migration from SQLAlchemy/SQLModel to Django, available in 0.42.0.
- The last version before the migration is 0.41.2.

Introduction

LaminDB is an open-source Python library to:

  • Manage files & datasets while tracking provenance across pipelines, notebooks & app uploads.
  • Manage biological registries, ontologies, features & schemas.
  • Enhance integrity through built-in data validation and idempotent, ACID operations.
  • Query, search, look up, save, load and stream with one API.
  • Collaborate across a mesh of LaminDB instances.

LaminApp is a data management app built on LaminDB. If LaminDB ~ git, LaminApp ~ GitHub.

LaminApp, support, code templates & auto-dispatched integration tests for a BioTech data & analytics platform are currently only available on an enterprise plan. LaminApp is available for your cloud infrastructure or hosted by us.

Quickstart

Installation and sign-up take no time: Run pip install lamindb and lamin signup <email> on the command line.

Then, init a LaminDB instance with local or cloud default storage like you'd init a git repository:

$ lamin init --storage ./mydata   # or s3://my-bucket, gs://my-bucket

Import lamindb:

import lamindb as ln

Manage data objects

Store a DataFrame object:

df = pd.DataFrame({"feat1": [1, 2], "feat2": [3, 4]})  # AnnData works, too

ln.File(df, description="Data batch 1").save()  # create a File object and save/upload it

If you don't have specific metadata in mind, run a search:

ln.File.search("batch 1")

You have the full power of SQL to query for metadata, but the simplest query for a file is:

file = ln.File.select(description="Data batch 1").one()  # get exactly one result

Once you queried or searched it, load a file back into memory:

df = file.load()

Or get a backed accessor to stream its content from the cloud:

backed = file.backed()  # currently works for AnnData, zarr, HDF5, not yet for DataFrame

Manage files

The same API works for any file:

file = ln.File("s3://my-bucket/images/image001.jpg")  # or a local path
file.save()  # register the file

Query by key (the relative path within your storage):

file.select(key__startswith="images/").df()  # all files in folder "images/" in default storage

Auto-complete categoricals

When you're unsure about spellings, use a lookup object:

users = ln.User.lookup()
ln.File.select(created_by=users.lizlemon)

Track & query data lineage

In addition to basic provenance information (created_by, created_at, created_by), you can track which notebooks & pipelines transformed files.

Notebooks

Track a Jupyter Notebook:

ln.track()  # auto-detect & save notebook metadata
ln.File("my_artifact.parquet").save()  # this file is now aware that it was saved in this notebook

When you query the file, later on, you'll know from which notebook it came:

file = ln.File.select(description="my_artifact.parquet").one()  # query for a file
file.transform  # the notebook with id, title, filename, version, etc.
file.run  # the specific run of the notebook that created the file

Alternatively, you can query for notebooks and find the files written by them:

transforms = ln.Transform.select(type="notebook", created_at__year=2022).search("T cell").all()
ln.File.select(transform__in=transforms).df()  # the files created by these notebooks

Pipelines

This works like for notebooks just that you need to provide pipeline metadata yourself.

To save a pipeline to the Transform registry, call

ln.Transform(name="Awesom-O", version="0.41.2").save()  # save a pipeline, optionally with metadata

Track a pipeline run:

transform = ln.Transform.select(name="Awesom-O", version="0.41.2").one()  # select pipeline from the registry
ln.track(transform)  # create a new global run context
ln.File("s3://my_samples01/my_artifact.fastq.gz").save()  # file gets auto-linked against run & transform

Now, you can query for the latest pipeline runs:

ln.Run.select(transform=transform).order_by("-created_at").df()  # get the latest pipeline runs

Load your instance from anywhere

If provided with access, others can load your instance via:

$ lamin load myaccount/mydata

Manage biological registries

lamin init --storage ./bioartifacts --schema bionty

...

Track biological features

...

Track biological samples

...

Manage custom schemas

  1. Create a GitHub repository with Django ORMs similar to github.com/laminlabs/lnschema-lamin1
  2. Create & deploy migrations via lamin migrate create and lamin migrate deploy

It's fastest if we do this for you based on our templates within an enterprise plan, but you can fully manage the process yourself.

Setup

Installation

pyversions

pip install lamindb  # basic data management

You can configure the installation using extras, e.g.,

pip install 'lamindb[jupyter,bionty,fcs,aws]'

Supported extras are:

jupyter  # Track Jupyter notebooks
bionty   # Manage basic biological entities
fcs      # Manage .fcs files (flow cytometry)
zarr     # Store & stream arrays with zarr
aws      # AWS (s3fs, etc.)
gcp      # Google Cloud (gcfs, etc.)
postgres # Postgres server

Docker

Here is a way of running LaminDB in a docker: github.com/laminlabs/lamindb-docker.

Sign up

Why do I have to sign up?

  • Data lineage requires a user identity (who modified which data when?).
  • Collaboration requires a user identity (who shares this with me?).

Signing up takes 1 min.

We do not store any of your data, but only basic metadata about you (email address, etc.) & your LaminDB instances (S3 bucket names, etc.).

  • Sign up: lamin signup <email>
  • Log in: lamin login <handle>

How does it work?

Dependencies

LaminDB builds semantics of R&D and biology onto well-established tools:

  • SQLite & Postgres for SQL databases using Django ORM (previously: SQLModel)
  • S3, GCP & local storage for object storage using fsspec
  • Configurable storage formats: pyarrow, anndata, zarr, etc.
  • Biological knowledge sources & ontologies: see Bionty

LaminDB is open source.

Architecture

LaminDB consists of the lamindb Python package (repository here) with its components:

  • bionty: Basic biological entities (usable standalone).
  • lamindb-setup: Setup & configure LaminDB, client for Lamin Hub.
  • lnschema-core: Core schema, ORMs to model data objects & data lineage.
  • lnschema-bionty: Bionty schema, ORMs that are coupled to Bionty's entities.
  • lnschema-lamin1: Exemplary configured schema to track samples, treatments, etc.
  • nbproject: Parse metadata from Jupyter notebooks.
  • lamin-utils: Utilities for LaminDB and Bionty.
  • readfcs: FCS file reader.

LaminHub & LaminApp are not open-sourced, and neither are templates that model lab operations.

Notebooks

  • Find all guide notebooks here.
  • You can run these notebooks in hosted versions of JupyterLab, e.g., Saturn Cloud, Google Vertex AI, Google Colab, and others.
  • Jupyter Lab & Notebook offer a fully interactive experience, VS Code & others require using the CLI to track notebooks: lamin track my-notebook.ipynb

Documentation

Read the docs.

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

lamindb-0.48.1.tar.gz (322.5 kB view details)

Uploaded Source

Built Distribution

lamindb-0.48.1-py3-none-any.whl (74.2 kB view details)

Uploaded Python 3

File details

Details for the file lamindb-0.48.1.tar.gz.

File metadata

  • Download URL: lamindb-0.48.1.tar.gz
  • Upload date:
  • Size: 322.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.31.0

File hashes

Hashes for lamindb-0.48.1.tar.gz
Algorithm Hash digest
SHA256 d687ab68e2bd9cc35c398ae2d60460648db85459358deb27e7a970f9b2d87227
MD5 64d1220efc75ce531c14674f27553aa0
BLAKE2b-256 4aa124be29dac9c1f7ba7edb074ebf11b937cc0e2343380d3c2ff4897bf9e964

See more details on using hashes here.

Provenance

File details

Details for the file lamindb-0.48.1-py3-none-any.whl.

File metadata

  • Download URL: lamindb-0.48.1-py3-none-any.whl
  • Upload date:
  • Size: 74.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.31.0

File hashes

Hashes for lamindb-0.48.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e819efd7dd7fcd1409342ca38ed348b67dc6689e495a8b0a27c389a887c9a0c4
MD5 feaceea566a52cc850958313ceca0fb3
BLAKE2b-256 3d288b75a2e8daecd894946ceb2fce5696b26bcc04da351837e84902e18e4b4e

See more details on using hashes here.

Provenance

Supported by

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