##### RxRx: cell imaging [image: .md][image]

rxrx.ai hosts high-throughput cell imaging datasets generated by
Recursion.

High numbers of fluorescent microscopy images characterize cellular
phenotypes in vitro based on morphology and protein expression (5-10
stains) across a range of conditions.

In this guide, you'll see how to query some of these data using
LaminDB. If you'd like to sync data into your own LaminDB instance,
see the transfer guide.

 # !pip install 'lamindb[gcp]' duckdb
 !lamin init --modules bionty,pertdb --storage ./test-rxrx

 import lamindb as ln

Create the central query object for this instance:

 db = ln.DB("laminlabs/lamindata")

#### Search & look up metadata

We'll find all genetic treatments in the "GeneticPerturbation"
registry:

 df = db.pertdb.GeneticPerturbation.to_dataframe()
 df.shape

Let us create a look up object for siRNAs so that we can easily auto-
complete queries involving it:

 sirnas = db.pertdb.GeneticPerturbation.filter(type="siRNA").lookup(return_field="name")

We're also interested in cell lines:

 cell_lines = db.bionty.CellLine.lookup(return_field="abbr")

#### Load the collection

This is RxRx1: 125k images for 1138 siRNA perturbation across 4 cell
lines reading out 5 stains, image dimension is 512x512x6.

Let us get the corresponding object and some information about it:

 collection = db.Collection.get("Br2Z1lVSQBAkkbbt7ILu")
 collection.view_lineage()
 collection.describe()

The dataset consists in a metadata file and a folder path pointing to
the image files:

 collection.meta_artifact.load().head()

#### Query image files

Because we didn't choose to register each image as a record in the
"Artifact" registry, we have to query the images through the metadata
file of the dataset:

 df = collection.meta_artifact.load()

We can query a subset of images using metadata registries & pandas
query syntax:

 query = df[(df.cell_line == cell_lines.hep_g2_cell) & (df.plate == 1) & (df.site == 2)]
 query

To access the individual images based on this query result:

 collection.data_artifact.storage.root

 images = [f"{collection.data_artifact.storage.root}/{key}" for key in query.path]
 images

Download an image to disk:

 from IPython.display import Image

 path = ln.UPath(images[1])
 path.download_to(".")

 Image(f"./{path.name}")

#### Use DuckDB to query metadata

As an alternative to pandas, we could use DuckDB to query image
metadata.

 import duckdb

 features = db.Feature.lookup(return_field="name")

 filter = (
 f"{features.cell_line} == '{cell_lines.hep_g2_cell}' and "
 f"{features.plate} == '1' and {features.site} == '2'"
 )

 parquet_data = duckdb.from_parquet(
 collection.meta_artifact.path.as_posix() + "?s3_region=us-east-1"
 )

 parquet_data.filter(filter)