技能创建器
skill-creator
创建、改进和评估自定义技能,把专业流程转化为可重复使用的 AI 能力。
cellxgene-census【数据与研究】Programmatically query the CZ CELLxGENE Census (61M+ cells) when you need cross-tissue, disease, or cell-type expression data for population-scale queries and reference atlas comparisons.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
get_anndata().axis_query() and chunked iteration.cellxgene-census (latest)tiledbsoma (latest; required for axis_query() workflows)pyarrow (latest; used for chunked table batches)anndata (latest; for get_anndata() results)scanpy (latest; optional, for downstream analysis)torch (latest; optional, for experimental ML integration)Install:
uv pip install cellxgene-census
Optional (experimental ML helpers):
uv pip install cellxgene-census[experimental]
The following script is a complete, runnable example that:
import numpy as np
import cellxgene_census
import tiledbsoma as soma
def main():
# Pin a version for reproducibility (replace with a valid release if needed)
census_version = "2023-07-25"
with cellxgene_census.open_soma(census_version=census_version) as census:
# 1) Explore summary info
summary = census["census_info"]["summary"].read().concat().to_pandas()
total_cells = int(summary["total_cell_count"].iloc[0])
print(f"Census version: {census_version}")
print(f"Total cells: {total_cells:,}")
# 2) Explore obs metadata (always filter primary data unless you want duplicates)
obs = cellxgene_census.get_obs(
census,
"homo_sapiens",
value_filter="tissue_general == 'brain' and is_primary_data == True",
column_names=["cell_type", "tissue_general", "disease", "donor_id"],
)
print(f"Brain (primary) cells returned (metadata only): {len(obs):,}")
print("Top cell types:")
print(obs["cell_type"].value_counts().head(10))
# 3) Small/medium query -> AnnData in memory
adata = cellxgene_census.get_anndata(
census=census,
organism="Homo sapiens",
obs_value_filter=(
"cell_type == 'T cell' and disease == 'COVID-19' and is_primary_data == True"
),
var_value_filter="feature_name in ['CD4', 'CD8A', 'FOXP3']",
obs_column_names=["cell_type", "tissue_general", "disease", "donor_id", "sex"],
)
print(adata)
print("AnnData X shape:", adata.X.shape)
# 4) Large-scale pattern -> out-of-core iteration with axis_query()
# Example: compute mean of non-zero expression values for a few genes in brain.
query = census["census_data"]["homo_sapiens"].axis_query(
measurement_name="RNA",
obs_query=soma.AxisQuery(
value_filter="tissue_general == 'brain' and is_primary_data == True"
),
var_query=soma.AxisQuery(
value_filter="feature_name in ['FOXP2', 'TBR1', 'SATB2']"
),
)
n = 0
s = 0.0
for batch in query.X("raw").tables():
# batch is a pyarrow.Table with at least: soma_data, soma_dim_0, soma_dim_1
values = batch["soma_data"].to_numpy(zero_copy_only=False)
n += values.size
s += float(values.sum())
mean_expr = s / n if n else np.nan
print(f"Out-of-core mean expression (over returned entries): {mean_expr:.6g}")
if __name__ == "__main__":
main()
Opening the Census
with cellxgene_census.open_soma(...) as census: ...census_version="YYYY-MM-DD"; otherwise the latest stable release is used.Data model (high level)
census["census_info"] provides summary tables (e.g., datasets, counts).census["census_data"][organism] provides the experiment for an organism (e.g., homo_sapiens).Filtering semantics
obs_value_filter filters cells (obs); var_value_filter filters genes (var).and / or; use in [...] for multi-value membership.is_primary_data == True to avoid double-counting cells that appear in multiple source datasets.Choosing an access pattern
get_anndata() when the result is expected to fit in memory (commonly < ~100k cells, depending on gene count and sparsity).axis_query() + query.X("raw").tables() for out-of-core iteration and incremental statistics.Expression layers / matrices
X("raw") to access raw expression.soma_data: expression valuessoma_dim_0: obs (cell) coordinatessoma_dim_1: var (gene) coordinatesOptional ML integration
cellxgene_census.experimental.ml utilities provide PyTorch-friendly datasets/dataloaders for training workflows, typically driven by the same obs/var filtering concepts used elsewhere.