jpskill.com
🛠️ 開発・MCP コミュニティ 🔴 エンジニア向け 👤 エンジニア・AI開発者

🛠️ Anndata

anndata

単一細胞解析で注釈付き行列を扱う際に、.h5adファイルを使用したりscverseエコシステムと連携したりする際に役立つ、データ形式を扱うためのSkill。

⏱ MCPサーバー実装 1日 → 2時間

📺 まず動画で見る(YouTube)

▶ 【衝撃】最強のAIエージェント「Claude Code」の最新機能・使い方・プログラミングをAIで効率化する超実践術を解説! ↗

※ jpskill.com 編集部が参考用に選んだ動画です。動画の内容と Skill の挙動は厳密には一致しないことがあります。

📜 元の英語説明(参考)

Data structure for annotated matrices in single-cell analysis. Use when working with .h5ad files or integrating with the scverse ecosystem. This is the data format skill—for analysis workflows use scanpy; for probabilistic models use scvi-tools; for population-scale queries use cellxgene-census.

🇯🇵 日本人クリエイター向け解説

一言でいうと

単一細胞解析で注釈付き行列を扱う際に、.h5adファイルを使用したりscverseエコシステムと連携したりする際に役立つ、データ形式を扱うためのSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o anndata.zip https://jpskill.com/download/4128.zip && unzip -o anndata.zip && rm anndata.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/4128.zip -OutFile "$d\anndata.zip"; Expand-Archive "$d\anndata.zip" -DestinationPath $d -Force; ri "$d\anndata.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して anndata.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → anndata フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-17
取得日時
2026-05-18
同梱ファイル
6

💬 こう話しかけるだけ — サンプルプロンプト

  • Anndata を使って、最小構成のサンプルコードを示して
  • Anndata の主な使い方と注意点を教えて
  • Anndata を既存プロジェクトに組み込む方法を教えて

これをClaude Code に貼るだけで、このSkillが自動発動します。

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

[スキル名] anndata

AnnData

概要

AnnData は、アノテーション付きデータ行列を扱うための Python パッケージです。実験測定値 (X) を、観測メタデータ (obs)、変数メタデータ (var)、および多次元アノテーション (obsm, varm, obsp, varp, uns) とともに保存します。元々は Scanpy を通じたシングルセルゲノミクス向けに設計されましたが、現在では効率的な保存、操作、分析を必要とするあらゆるアノテーション付きデータの汎用フレームワークとして機能しています。

このスキルを使用する場面

このスキルは、以下の状況で使用してください。

  • AnnData オブジェクトの作成、読み込み、書き込みを行う場合
  • h5ad、zarr、またはその他のゲノミクスデータ形式を扱う場合
  • シングルセル RNA-seq 解析を実行する場合
  • スパース行列またはバックアップモードで大規模なデータセットを管理する場合
  • 複数のデータセットまたは実験バッチを連結する場合
  • アノテーション付きデータをサブセット化、フィルタリング、または変換する場合
  • scanpy、scvi-tools、またはその他の scverse エコシステムツールと統合する場合

インストール

uv pip install anndata

# オプションの依存関係とともにインストールする場合
uv pip install anndata[dev,test,doc]

クイックスタート

AnnData オブジェクトの作成

import anndata as ad
import numpy as np
import pandas as pd

# 最小限の作成
X = np.random.rand(100, 2000)  # 100 細胞 × 2000 遺伝子
adata = ad.AnnData(X)

# メタデータとともに作成
obs = pd.DataFrame({
    'cell_type': ['T cell', 'B cell'] * 50,
    'sample': ['A', 'B'] * 50
}, index=[f'cell_{i}' for i in range(100)])

var = pd.DataFrame({
    'gene_name': [f'Gene_{i}' for i in range(2000)]
}, index=[f'ENSG{i:05d}' for i in range(2000)])

adata = ad.AnnData(X=X, obs=obs, var=var)

データの読み込み

# h5ad ファイルの読み込み
adata = ad.read_h5ad('data.h5ad')

# バックアップモードでの読み込み (大規模ファイル向け)
adata = ad.read_h5ad('large_data.h5ad', backed='r')

# その他の形式の読み込み
adata = ad.read_csv('data.csv')
adata = ad.read_loom('data.loom')
adata = ad.read_10x_h5('filtered_feature_bc_matrix.h5')

データの書き込み

# h5ad ファイルの書き込み
adata.write_h5ad('output.h5ad')

# 圧縮して書き込み
adata.write_h5ad('output.h5ad', compression='gzip')

# その他の形式の書き込み
adata.write_zarr('output.zarr')
adata.write_csvs('output_dir/')

基本的な操作

# 条件によるサブセット化
t_cells = adata[adata.obs['cell_type'] == 'T cell']

# インデックスによるサブセット化
subset = adata[0:50, 0:100]

# メタデータの追加
adata.obs['quality_score'] = np.random.rand(adata.n_obs)
adata.var['highly_variable'] = np.random.rand(adata.n_vars) > 0.8

# ディメンションへのアクセス
print(f"{adata.n_obs} observations × {adata.n_vars} variables")

コア機能

1. データ構造

X、obs、var、layers、obsm、varm、obsp、varp、uns、および raw コンポーネントを含む AnnData オブジェクトの構造を理解します。

参照: references/data_structure.md で以下の包括的な情報を確認してください。

  • コアコンポーネント (X, obs, var, layers, obsm, varm, obsp, varp, uns, raw)
  • さまざまなソースからの AnnData オブジェクトの作成
  • データコンポーネントへのアクセスと操作
  • メモリ効率の良い実践方法

2. 入出力操作

圧縮、バックアップモード、クラウドストレージをサポートし、さまざまな形式でデータを読み書きします。

参照: references/io_operations.md で以下の詳細を確認してください。

  • ネイティブ形式 (h5ad, zarr)
  • 代替形式 (CSV, MTX, Loom, 10X, Excel)
  • 大規模データセット向けのバックアップモード
  • リモートデータアクセス
  • 形式変換
  • パフォーマンス最適化

一般的なコマンド:

# h5ad の読み書き
adata = ad.read_h5ad('data.h5ad', backed='r')
adata.write_h5ad('output.h5ad', compression='gzip')

# 10X データの読み込み
adata = ad.read_10x_h5('filtered_feature_bc_matrix.h5')

# MTX 形式の読み込み
adata = ad.read_mtx('matrix.mtx').T

3. 連結

柔軟な結合戦略を使用して、複数の AnnData オブジェクトを観測または変数に沿って結合します。

参照: references/concatenation.md で以下の包括的な情報を確認してください。

  • 基本的な連結 (観測には axis=0、変数には axis=1)
  • 結合タイプ (inner, outer)
  • マージ戦略 (same, unique, first, only)
  • ラベルによるデータソースの追跡
  • 遅延連結 (AnnCollection)
  • 大規模データセット向けのオンディスク連結

一般的なコマンド:

# 観測の連結 (サンプルを結合)
adata = ad.concat(
    [adata1, adata2, adata3],
    axis=0,
    join='inner',
    label='batch',
    keys=['batch1', 'batch2', 'batch3']
)

# 変数の連結 (モダリティを結合)
adata = ad.concat([adata_rna, adata_protein], axis=1)

# 遅延連結
from anndata.experimental import AnnCollection
collection = AnnCollection(
    ['data1.h5ad', 'data2.h5ad'],
    join_obs='outer',
    label='dataset'
)

4. データ操作

データを効率的に変換、サブセット化、フィルタリング、再編成します。

参照: references/manipulation.md で以下の詳細なガイダンスを確認してください。

  • サブセット化 (インデックス、名前、ブールマスク、メタデータ条件による)
  • 転置
  • コピー (完全なコピー vs ビュー)
  • 名前変更 (観測、変数、カテゴリ)
  • 型変換 (文字列からカテゴリカルへ、スパース/密)
  • データコンポーネントの追加/削除
  • 並べ替え
  • 品質管理フィルタリング

一般的なコマンド:

# メタデータによるサブセット化
filtered = adata[adata.obs['quality_score'] > 0.8]
hv_genes = adata[:, adata.var['highly_variable']]

# 転置
adata_T = adata.T

# コピー vs ビュー
view = adata[0:100, :]  # ビュー (軽量な参照)
copy = adata[0:100, :].copy()  # 独立したコピー

# 文字列をカテゴリカルに変換
adata.strings_to_categoricals()

5. ベストプラクティス

メモリ効率、パフォーマンス、再現性のための推奨パターンに従います。

参照: references/best_practices.md で以下のガイドラインを確認してください。

  • メモリ管理 (スパース行列、カテゴリカル、バックアップモード)
  • ビュー vs コピー
  • データストレージの最適化
  • パフォーマンス最適化
  • 生データとの連携
  • メタデータ管理
  • 再現性
  • エラー処理
  • 他のツールとの統合
  • よくある落とし穴と解決策

主な推奨事項:

# スパースデータにはスパース行列を使用
from scipy.sparse import csr_matrix
adata.X = csr_matrix(adata.X)

# 文字列をカテゴリカルに変換
adata.strings_to_catego
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

AnnData

Overview

AnnData is a Python package for handling annotated data matrices, storing experimental measurements (X) alongside observation metadata (obs), variable metadata (var), and multi-dimensional annotations (obsm, varm, obsp, varp, uns). Originally designed for single-cell genomics through Scanpy, it now serves as a general-purpose framework for any annotated data requiring efficient storage, manipulation, and analysis.

When to Use This Skill

Use this skill when:

  • Creating, reading, or writing AnnData objects
  • Working with h5ad, zarr, or other genomics data formats
  • Performing single-cell RNA-seq analysis
  • Managing large datasets with sparse matrices or backed mode
  • Concatenating multiple datasets or experimental batches
  • Subsetting, filtering, or transforming annotated data
  • Integrating with scanpy, scvi-tools, or other scverse ecosystem tools

Installation

uv pip install anndata

# With optional dependencies
uv pip install anndata[dev,test,doc]

Quick Start

Creating an AnnData object

import anndata as ad
import numpy as np
import pandas as pd

# Minimal creation
X = np.random.rand(100, 2000)  # 100 cells × 2000 genes
adata = ad.AnnData(X)

# With metadata
obs = pd.DataFrame({
    'cell_type': ['T cell', 'B cell'] * 50,
    'sample': ['A', 'B'] * 50
}, index=[f'cell_{i}' for i in range(100)])

var = pd.DataFrame({
    'gene_name': [f'Gene_{i}' for i in range(2000)]
}, index=[f'ENSG{i:05d}' for i in range(2000)])

adata = ad.AnnData(X=X, obs=obs, var=var)

Reading data

# Read h5ad file
adata = ad.read_h5ad('data.h5ad')

# Read with backed mode (for large files)
adata = ad.read_h5ad('large_data.h5ad', backed='r')

# Read other formats
adata = ad.read_csv('data.csv')
adata = ad.read_loom('data.loom')
adata = ad.read_10x_h5('filtered_feature_bc_matrix.h5')

Writing data

# Write h5ad file
adata.write_h5ad('output.h5ad')

# Write with compression
adata.write_h5ad('output.h5ad', compression='gzip')

# Write other formats
adata.write_zarr('output.zarr')
adata.write_csvs('output_dir/')

Basic operations

# Subset by conditions
t_cells = adata[adata.obs['cell_type'] == 'T cell']

# Subset by indices
subset = adata[0:50, 0:100]

# Add metadata
adata.obs['quality_score'] = np.random.rand(adata.n_obs)
adata.var['highly_variable'] = np.random.rand(adata.n_vars) > 0.8

# Access dimensions
print(f"{adata.n_obs} observations × {adata.n_vars} variables")

Core Capabilities

1. Data Structure

Understand the AnnData object structure including X, obs, var, layers, obsm, varm, obsp, varp, uns, and raw components.

See: references/data_structure.md for comprehensive information on:

  • Core components (X, obs, var, layers, obsm, varm, obsp, varp, uns, raw)
  • Creating AnnData objects from various sources
  • Accessing and manipulating data components
  • Memory-efficient practices

2. Input/Output Operations

Read and write data in various formats with support for compression, backed mode, and cloud storage.

See: references/io_operations.md for details on:

  • Native formats (h5ad, zarr)
  • Alternative formats (CSV, MTX, Loom, 10X, Excel)
  • Backed mode for large datasets
  • Remote data access
  • Format conversion
  • Performance optimization

Common commands:

# Read/write h5ad
adata = ad.read_h5ad('data.h5ad', backed='r')
adata.write_h5ad('output.h5ad', compression='gzip')

# Read 10X data
adata = ad.read_10x_h5('filtered_feature_bc_matrix.h5')

# Read MTX format
adata = ad.read_mtx('matrix.mtx').T

3. Concatenation

Combine multiple AnnData objects along observations or variables with flexible join strategies.

See: references/concatenation.md for comprehensive coverage of:

  • Basic concatenation (axis=0 for observations, axis=1 for variables)
  • Join types (inner, outer)
  • Merge strategies (same, unique, first, only)
  • Tracking data sources with labels
  • Lazy concatenation (AnnCollection)
  • On-disk concatenation for large datasets

Common commands:

# Concatenate observations (combine samples)
adata = ad.concat(
    [adata1, adata2, adata3],
    axis=0,
    join='inner',
    label='batch',
    keys=['batch1', 'batch2', 'batch3']
)

# Concatenate variables (combine modalities)
adata = ad.concat([adata_rna, adata_protein], axis=1)

# Lazy concatenation
from anndata.experimental import AnnCollection
collection = AnnCollection(
    ['data1.h5ad', 'data2.h5ad'],
    join_obs='outer',
    label='dataset'
)

4. Data Manipulation

Transform, subset, filter, and reorganize data efficiently.

See: references/manipulation.md for detailed guidance on:

  • Subsetting (by indices, names, boolean masks, metadata conditions)
  • Transposition
  • Copying (full copies vs views)
  • Renaming (observations, variables, categories)
  • Type conversions (strings to categoricals, sparse/dense)
  • Adding/removing data components
  • Reordering
  • Quality control filtering

Common commands:

# Subset by metadata
filtered = adata[adata.obs['quality_score'] > 0.8]
hv_genes = adata[:, adata.var['highly_variable']]

# Transpose
adata_T = adata.T

# Copy vs view
view = adata[0:100, :]  # View (lightweight reference)
copy = adata[0:100, :].copy()  # Independent copy

# Convert strings to categoricals
adata.strings_to_categoricals()

5. Best Practices

Follow recommended patterns for memory efficiency, performance, and reproducibility.

See: references/best_practices.md for guidelines on:

  • Memory management (sparse matrices, categoricals, backed mode)
  • Views vs copies
  • Data storage optimization
  • Performance optimization
  • Working with raw data
  • Metadata management
  • Reproducibility
  • Error handling
  • Integration with other tools
  • Common pitfalls and solutions

Key recommendations:

# Use sparse matrices for sparse data
from scipy.sparse import csr_matrix
adata.X = csr_matrix(adata.X)

# Convert strings to categoricals
adata.strings_to_categoricals()

# Use backed mode for large files
adata = ad.read_h5ad('large.h5ad', backed='r')

# Store raw before filtering
adata.raw = adata.copy()
adata = adata[:, adata.var['highly_variable']]

Integration with Scverse Ecosystem

AnnData serves as the foundational data structure for the scverse ecosystem:

Scanpy (Single-cell analysis)

import scanpy as sc

# Preprocessing
sc.pp.filter_cells(adata, min_genes=200)
sc.pp.normalize_total(adata, target_sum=1e4)
sc.pp.log1p(adata)
sc.pp.highly_variable_genes(adata, n_top_genes=2000)

# Dimensionality reduction
sc.pp.pca(adata, n_comps=50)
sc.pp.neighbors(adata, n_neighbors=15)
sc.tl.umap(adata)
sc.tl.leiden(adata)

# Visualization
sc.pl.umap(adata, color=['cell_type', 'leiden'])

Muon (Multimodal data)

import muon as mu

# Combine RNA and protein data
mdata = mu.MuData({'rna': adata_rna, 'protein': adata_protein})

PyTorch integration

from anndata.experimental import AnnLoader

# Create DataLoader for deep learning
dataloader = AnnLoader(adata, batch_size=128, shuffle=True)

for batch in dataloader:
    X = batch.X
    # Train model

Common Workflows

Single-cell RNA-seq analysis

import anndata as ad
import scanpy as sc

# 1. Load data
adata = ad.read_10x_h5('filtered_feature_bc_matrix.h5')

# 2. Quality control
adata.obs['n_genes'] = (adata.X > 0).sum(axis=1)
adata.obs['n_counts'] = adata.X.sum(axis=1)
adata = adata[adata.obs['n_genes'] > 200]
adata = adata[adata.obs['n_counts'] < 50000]

# 3. Store raw
adata.raw = adata.copy()

# 4. Normalize and filter
sc.pp.normalize_total(adata, target_sum=1e4)
sc.pp.log1p(adata)
sc.pp.highly_variable_genes(adata, n_top_genes=2000)
adata = adata[:, adata.var['highly_variable']]

# 5. Save processed data
adata.write_h5ad('processed.h5ad')

Batch integration

# Load multiple batches
adata1 = ad.read_h5ad('batch1.h5ad')
adata2 = ad.read_h5ad('batch2.h5ad')
adata3 = ad.read_h5ad('batch3.h5ad')

# Concatenate with batch labels
adata = ad.concat(
    [adata1, adata2, adata3],
    label='batch',
    keys=['batch1', 'batch2', 'batch3'],
    join='inner'
)

# Apply batch correction
import scanpy as sc
sc.pp.combat(adata, key='batch')

# Continue analysis
sc.pp.pca(adata)
sc.pp.neighbors(adata)
sc.tl.umap(adata)

Working with large datasets

# Open in backed mode
adata = ad.read_h5ad('100GB_dataset.h5ad', backed='r')

# Filter based on metadata (no data loading)
high_quality = adata[adata.obs['quality_score'] > 0.8]

# Load filtered subset
adata_subset = high_quality.to_memory()

# Process subset
process(adata_subset)

# Or process in chunks
chunk_size = 1000
for i in range(0, adata.n_obs, chunk_size):
    chunk = adata[i:i+chunk_size, :].to_memory()
    process(chunk)

Troubleshooting

Out of memory errors

Use backed mode or convert to sparse matrices:

# Backed mode
adata = ad.read_h5ad('file.h5ad', backed='r')

# Sparse matrices
from scipy.sparse import csr_matrix
adata.X = csr_matrix(adata.X)

Slow file reading

Use compression and appropriate formats:

# Optimize for storage
adata.strings_to_categoricals()
adata.write_h5ad('file.h5ad', compression='gzip')

# Use Zarr for cloud storage
adata.write_zarr('file.zarr', chunks=(1000, 1000))

Index alignment issues

Always align external data on index:

# Wrong
adata.obs['new_col'] = external_data['values']

# Correct
adata.obs['new_col'] = external_data.set_index('cell_id').loc[adata.obs_names, 'values']

Additional Resources

同梱ファイル

※ ZIPに含まれるファイル一覧。`SKILL.md` 本体に加え、参考資料・サンプル・スクリプトが入っている場合があります。