🛠️ Anndata
単一細胞解析で注釈付き行列を扱う際に、.h5adファイルを使用したりscverseエコシステムと連携したりする際に役立つ、データ形式を扱うためのSkill。
📺 まず動画で見る(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本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
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
$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. 下の青いボタンを押して
anndata.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
anndataフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
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
- Official documentation: https://anndata.readthedocs.io/
- Scanpy tutorials: https://scanpy.readthedocs.io/
- Scverse ecosystem: https://scverse.org/
- GitHub repository: https://github.com/scverse/anndata
同梱ファイル
※ ZIPに含まれるファイル一覧。`SKILL.md` 本体に加え、参考資料・サンプル・スクリプトが入っている場合があります。
- 📄 SKILL.md (10,214 bytes)
- 📎 references/best_practices.md (12,106 bytes)
- 📎 references/concatenation.md (10,504 bytes)
- 📎 references/data_structure.md (8,744 bytes)
- 📎 references/io_operations.md (9,456 bytes)
- 📎 references/manipulation.md (11,866 bytes)