data-export-excel について
data-export-excel は、生物情報学データや解析結果を openpyxl でローカルに Excel へ出力するスキルです。書式付きの複数シートに対応し、表やレポートを作成する研究者向けです。
主な機能
- 01ローカルでの Excel ファイル作成
- 02pandas DataFrame の出力
- 03複数シートの作成
- 04セル書式の適用
- 05生物情報学の解析表の処理
活用シーン
- 01AnnData の obs または var の出力
- 02差次的発現解析結果の保存
- 03細胞アノテーションと QC 指標の整理
- 04書式付き解析レポートの作成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ omicverse/ omicverse --skill data-export-excelインストール後、Claude Code で/data-export-excelを入力して読み込まれたか確認します。
詳細
Excel データのエクスポート(汎用)
概要
このスキルを使用すると、バイオインフォマティクスのデータ、解析結果、書式設定済みのテーブルを、見やすい Excel スプレッドシートにエクスポートできます。クラウドホスト型のソリューションとは異なり、このスキルでは openpyxl Python ライブラリを使用し、お使いの環境でローカルに実行されるため、GPT、Gemini、Claude、DeepSeek、Qwen を含むすべての LLM プロバイダーに対応しています。
このスキルを使用する場面
- AnnData の観測値(.obs)または変数(.var)を Excel にエクスポートする
- 書式設定を適用して DEG 解析結果を保存する
- 異なるデータ型を含む複数シートのブックを作成する
- セルのスタイルを設定して、書式設定済みの Excel レポートを生成する
- クラスターのアノテーション、細胞型の割り当て、品質管理メトリクスをエクスポートする
使用方法
ステップ 1: 必要なライブラリをインポートする
import openpyxl
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
from openpyxl.utils.dataframe import dataframe_to_rows
import pandas as pd
import numpy as np
ステップ 2: データを準備する
データを pandas の DataFrame 形式に変換します。
# Example: Export AnnData observations
df = adata.obs.copy()
# Example: Export DEG results
deg_df = pd.DataFrame({
'gene': gene_names,
'log2FC': log2_fold_changes,
'pvalue': pvalues,
'qvalue': qvalues
})
# Example: Export cluster statistics
cluster_stats = adata.obs.groupby('clusters').size().reset_index(name='count')
ステップ 3: Excel ブックを作成する
# Create new workbook
wb = Workbook()
ws = wb.active
ws.title = "Sheet Name"
# Write DataFrame to worksheet
for r in dataframe_to_rows(df, index=False, header=True):
ws.append(r)
ステップ 4: 書式を設定する(任意)
# Style header row
header_fill = PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid")
header_font = Font(bold=True, color="FFFFFF")
for cell in ws[1]:
cell.fill = header_fill
cell.font = header_font
cell.alignment = Alignment(horizontal='center')
# Auto-adjust column widths
for column in ws.columns:
max_length = 0
column_letter = column[0].column_letter
for cell in column:
try:
if len(str(cell.value)) > max_length:
max_length = len(str(cell.value))
except:
pass
adjusted_width = min(max_length + 2, 50)
ws.column_dimensions[column_letter].width = adjusted_width
# Add borders
thin_border = Border(
left=Side(style='thin'),
right=Side(style='thin'),
top=Side(style='thin'),
bottom=Side(style='thin')
)
for row in ws.iter_rows(min_row=1, max_row=ws.max_row, min_col=1, max_col=ws.max_column):
for cell in row:
cell.border = thin_border
ステップ 5: ブックを保存する
# Save to file
output_path = "analysis_results.xlsx"
wb.save(output_path)
print(f"✅ Excel file saved to: {output_path}")
複数シートのブック
データ型ごとに複数のシートを含むブックを作成します。
wb = Workbook()
# Sheet 1: Cell metadata
ws1 = wb.active
ws1.title = "Cell Metadata"
for r in dataframe_to_rows(adata.obs, index=True, header=True):
ws1.append(r)
# Sheet 2: Gene metadata
ws2 = wb.create_sheet("Gene Metadata")
for r in dataframe_to_rows(adata.var, index=True, header=True):
ws2.append(r)
# Sheet 3: DEG results
ws3 = wb.create_sheet("DEG Results")
for r in dataframe_to_rows(deg_df, index=False, header=True):
ws3.append(r)
wb.save("multi_sheet_analysis.xlsx")
ベストプラクティス
- 列見出し:必ず最初の行に列見出しを含めます
- データ型:書き込み前に numpy 配列をリストに変換します
- 大規模なデータセット:100K 行を超えるデータセットでは、代わりに CSV へのエクスポートを検討します
- ファイルパス:絶対パスを使用するか、出力ディレクトリが存在することを確認します
- 書式設定:ファイルサイズを抑えるため、書式設定は必要最小限にします
- インデックス:DataFrame のインデックスを含めるかどうかを決めます(
dataframe_to_rowsでindex=True/Falseを設定します)
よくあるユースケース
品質管理メトリクスをエクスポートする
qc_metrics = adata.obs[['n_genes', 'n_counts', 'percent_mito', 'clusters']].copy()
wb = Workbook()
ws = wb.active
ws.title = "QC Metrics"
for r in dataframe_to_rows(qc_metrics, index=False, header=True):
ws.append(r)
# Highlight cells with high mitochondrial content
for row in range(2, ws.max_row + 1):
if ws.cell(row, 3).value > 0.2: # percent_mito > 20%
ws.cell(row, 3).fill = PatternFill(start_color="FFC7CE", end_color="FFC7CE", fill_type="solid")
wb.save("qc_metrics.xlsx")
クラスターごとのマーカー遺伝子をエクスポートする
# Assuming you have marker genes for each cluster
marker_dict = {
'Cluster_0': ['CD3D', 'CD3E', 'CD8A'],
'Cluster_1': ['CD79A', 'MS4A1', 'CD19'],
'Cluster_2': ['LYZ', 'S100A9', 'CD14']
}
wb = Workbook()
for cluster_name, genes in marker_dict.items():
ws = wb.create_sheet(cluster_name)
ws.append(['Marker Gene'])
for gene in genes:
ws.append([gene])
# Remove default sheet
if 'Sheet' in wb.sheetnames:
wb.remove(wb['Sheet'])
wb.save("marker_genes.xlsx")
条件付き書式を設定して DEG 解析をエクスポートする
wb = Workbook()
ws = wb.active
ws.title = "DEG Analysis"
# Write DEG results
for r in dataframe_to_rows(deg_df, index=False, header=True):
ws.append(r)
# Color code by fold change
for row in range(2, ws.max_row + 1):
log2fc = ws.cell(row, 2).value # Assuming log2FC in column 2
if log2fc > 1: # Upregulated
ws.cell(row, 2).fill = PatternFill(start_color="C6EFCE", end_color="C6EFCE", fill_type="solid")
elif log2fc < -1: # Downregulated
ws.cell(row, 2).fill = PatternFill(start_color="FFC7CE", end_color="FFC7CE", fill_type="solid")
wb.save("deg_results_formatted.xlsx")
トラブルシューティング
問題:"openpyxl not found"
解決策:ライブラリをインストールします。
import subprocess
subprocess.check_call(['pip', 'install', 'openpyxl'])
問題:"Invalid data type for cell"
解決策:numpy/pandas の型を Python の標準型に変換します。
# Convert numpy types
df = df.astype(object).where(pd.notnull(df), None)
# Or convert specific columns
df['column_name'] = df['column_name'].astype(str)
問題:"Memory error with large datasets"
解決策:データを分割してエクスポートするか、代わりに CSV 形式を使用します。
# Fallback to CSV for large data
df.to_csv('large_dataset.csv', index=False)
print("Dataset too large for Excel, saved as CSV instead")
技術的な注意事項
- ライブラリ:
openpyxlを使用します(純粋な Python で動作し、外部依存関係はありません) - 実行:エージェントのサンドボックス内でローカルに実行されます
- 互換性:すべての LLM プロバイダー(GPT、Gemini、Claude、DeepSeek、Qwen など)で動作します
- ファイルの制限:Excel の上限は 1,048,576 行です(これを超えるデータセットには CSV を使用してください)
- パフォーマンス:約 10K 行の書き込みには 1~2 秒、100K 行には 10~20 秒かかります
参考資料
- openpyxl のドキュメント:https://openpyxl.readthedocs.io/
- pandas DataFrame のエクスポート:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_excel.html
コメント
Markdown 対応