exploratory-data-analysis について
科学データを扱う人向けの探索的データ分析スキルです。多様な科学ファイルの識別、品質確認、分野別分析、構造化レポートの作成を扱います。
主な機能
- 01科学ファイル形式とカテゴリの識別
- 02完全性・妥当性・一貫性の評価
- 03統計分析と分野別分析
- 04構造化 Markdown レポートの作成
- 05一般的な形式のリファレンス
活用シーン
- 01受領した科学ファイルの確認
- 02大規模データの本格分析前のサンプリング
- 03後続分析に向けた前処理の計画
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jaechang-hits/ sciagent-skills --skill exploratory-data-analysisインストール後、Claude Code で/exploratory-data-analysisを入力して読み込まれたか確認します。
同梱ファイルreferences/file_format_reference.md
詳細
科学データの探索的データ分析
概要
探索的データ分析(EDA)とは、正式な分析を行う前に、科学データファイルの構造、内容、品質、特性を把握するために体系的に調査することです。このノウハウでは、ファイル形式の検出、適切な分析方法の選択、データ品質の評価、主要な科学データ領域全般にわたる包括的なレポートの生成方法を扱います。
主要な概念
科学データの種類
| カテゴリ | 一般的な形式 | 典型的な分析 | 主なライブラリ |
|---|---|---|---|
| 表形式 | CSV, TSV, XLSX, Parquet | 要約統計量、分布、相関、欠損値 | pandas, polars |
| 配列 | FASTA, FASTQ, SAM/BAM | 長さの分布、品質スコア、GC 含量、アラインメント統計 | BioPython, pysam |
| 画像/顕微鏡画像 | TIFF, ND2, CZI, DICOM | 次元(XYZCT)、強度統計、メタデータ、キャリブレーション | tifffile, aicsimageio, nd2reader |
| スペクトル | mzML, SPC, JCAMP, FID | ピーク検出、ベースライン、S/N 比、分解能 | pymzml, nmrglue, pyteomics |
| 構造 | PDB, CIF, MOL, SDF | 原子数、結合の検証、B ファクター、完全性 | BioPython, RDKit, MDAnalysis |
| 配列/テンソル | NPY, HDF5, Zarr, NetCDF | 形状、dtype、値の範囲、NaN/Inf の確認、チャンク構造 | numpy, h5py, zarr, xarray |
| オミクス | H5AD, MTX, VCF, BED | 特徴量/サンプル数、スパース性、アノテーションの完全性 | scanpy, pyranges, cyvcf2 |
形式の検出方法
- 拡張子ベース:ファイル拡張子をカテゴリに対応付けます(主な方法)
- マジックバイト:ファイルヘッダーを確認してバイナリ形式を特定します(HDF5:
\x89HDF、GZIP:\x1f\x8b) - コンテンツの推測:拡張子が曖昧な場合(.txt、.dat、.csv)は、先頭行を調べて区切り文字、ヘッダー、形式を示すマーカーを確認します
- 複合拡張子:
.ome.tiff、.nii.gz、.tar.gzは、右端の拡張子から内側に向かって確認します
データ品質の側面
- 完全性:欠損値、空のフィールド、途中で切れたレコード
- 一貫性:次元の一致、互換性のある dtype、フィールド間の検証
- 妥当性:想定範囲内の値、適切なエンコーディング、形式への準拠
- 来歴:計測機器のメタデータ、ソフトウェアのバージョン、処理履歴
- 一意性:重複レコード、冗長な特徴量
判断フレームワーク
Data file received
├── What is the file type?
│ ├── Known extension → Look up in format reference
│ ├── Unknown extension → Magic bytes / content sniffing
│ └── Directory (e.g., .d, .zarr) → Check internal structure
│
├── What category does it belong to?
│ ├── Tabular → Summary stats, distributions, correlations
│ ├── Sequence → Length/quality distributions, composition
│ ├── Image → Dimensions, channels, intensity, metadata
│ ├── Spectral → Peaks, baseline, resolution, S/N
│ ├── Structural → Atom/bond validation, geometry checks
│ ├── Array → Shape, dtype, value range, sparsity
│ └── Omics → Feature counts, sample QC, annotation check
│
├── How large is the file?
│ ├── Small (<100 MB) → Load fully, comprehensive analysis
│ ├── Medium (100 MB–1 GB) → Sample or lazy evaluation
│ └── Large (>1 GB) → Stream/chunk, representative sampling
│
└── What is the analysis goal?
├── Pre-pipeline QC → Focus on completeness, format compliance
├── Data understanding → Statistics, distributions, patterns
├── Troubleshooting → Compare against expected format/values
└── Documentation → Full report with recommendations
クイックリファレンス:データの種類に応じた分析方法
| データの種類 | 最初に確認する項目 | 中核となる分析 | 可視化 |
|---|---|---|---|
| 表形式 | dtypes、形状、null 値 | describe()、相関、外れ値 | ヒストグラム、散布図、ヒートマップ |
| 配列 | レコード数、形式 | 長さの分布、品質、組成 | 品質プロット、長さのヒストグラム |
| 画像 | 次元、ビット深度 | 強度統計、チャネル情報 | サムネイル、ヒストグラム |
| スペクトル | スキャン数、m/z 範囲 | ピーク検出、TIC、ベースライン | スペクトルプロット、TIC クロマトグラム |
| 構造 | 原子数/残基数 | B ファクター、欠損残基 | ラマチャンドランプロット、コンタクトマップ |
| 配列 | 形状、dtype | 統計、NaN の確認 | スライスの可視化 |
| オミクス | 遺伝子 × 細胞の行列 | スパース性、QC 指標 | バイオリンプロット、PCA |
ベストプラクティス
- まずファイルの整合性を必ず確認します — 詳細な分析を始める前に、ファイルが完全で(途中で切れておらず)、読み取り可能であることを確認します。ファイルサイズが想定どおりか確認してください
- 大きなファイルは全件分析の前にサンプリングします — 数百万件のレコードを含むファイルでは、代表的なサンプル(先頭の N 件、ランダムサンプル、または層化サンプル)を分析し、すばやくフィードバックを得ます
- 利用できる場合は遅延読み込み/ストリーミングリーダーを使用します —
pl.scan_parquet()、h5pyのデータセットスライス、pysamのインデックスアクセスを使うと、メモリ不足を防げます - メタデータとデータを照合します — 記載された次元と実際のデータを相互に確認し、列数がヘッダーと一致することを検証し、タイムスタンプが単調であることを確認します
- データ品質を定量的に報告します — 「列 X の欠損値は 5.2%」は「欠損値がいくつかある」よりも役立ちます。完全性の割合、外れ値の件数、形式への準拠度スコアを記載してください
- データの来歴を考慮します — 機器の種類、ソフトウェアのバージョン、処理手順、すでに適用された前処理を記録します。このコンテキストは、後続の分析方法の選択に影響します
- 実行可能な推奨事項を提示します — データの説明だけでなく、具体的な前処理手順(正規化方法、補完戦略)、適切な分析、注意すべき潜在的な問題を提案します
- 分析の再現性を維持します — EDA を再現できるよう、レポートにライブラリのバージョン、パラメーターの選択、乱数シードを記載します
- バッチ効果を早い段階で確認します — 複数サンプルのデータセットでは、データを統合する前に、バッチ、プレート、または実行ごとの分布を比較します
- ベンダー固有の形式は慎重に扱います — 多くの機器は独自形式(.nd2、.czi、.raw)で出力します。形式のサポート状況は異なるため、使用したリーダーライブラリとそのバージョンを記録してください
よくある落とし穴
-
CSV を整った表形式のデータだと思い込む — CSV ファイルでは、区切り文字が一貫していなかったり、文字コードが混在していたり、改行が埋め込まれていたり、引用符の形式が不正だったりすることがあります。回避方法: 堅牢性を高めるために
pd.read_csv(engine='python')を使用し、chardetで文字コードを確認します。 -
欠損値の表現を無視する — 科学データでは、
NA、NaN、-999、空文字列、#N/A、.など、さまざまな null 表現が使われます。回避方法:na_valuesパラメーターを指定し、数値列にセンチネル値がないか確認します。 -
途中で切り詰められたファイルから結論を導く — 大容量ファイルの転送は、気付かないうちに失敗することがあります。回避方法: ファイルサイズを確認し、レコード数が想定値と一致するか検証して、EOF マーカーを確認します。
-
ファイルに誤ったリーダーを適用する — 拡張子だけでは判断できないものもあります(.raw は Thermo MS、XRD、または画像を表す場合があり、.d は Agilent のディレクトリまたは汎用データを表す場合があります)。回避方法: マジックバイトとコンテキスト(測定元の装置)を使って判別します。
-
大規模なデータセットでメモリーがあふれる — 10 GB の CSV を pandas DataFrame に読み込むと失敗します。回避方法: まずファイルサイズを確認し、100 MB を超えるファイルにはチャンク読み込み、遅延評価、またはサンプリングを使用します。
-
座標系と単位を無視する — 顕微鏡データではピクセルとミクロンが混在することがあり、分光データでは波長、波数、エネルギーが使われることがあります。回避方法: メタデータから単位を抽出して報告し、校正情報を確認します。
-
すべての列を独立したものとして扱う — 科学的な表形式データには、階層構造(条件の中に反復測定がネストされているなど)があることがよくあります。回避方法: 相関を計算する前に、列名とメタデータから実験デザインを特定します。
-
形式固有の品質指標を確認しない — 一般的な統計では、分野固有の問題を見落とします(例:FASTQ の Phred 品質スコア、結晶学の R 因子、MS の質量精度)。回避方法: 形式のリファレンスを確認し、分野固有の QC 指標を調べます。
-
少数のサンプルを過大解釈する — 先頭 1000 行を使った EDA では、データセット全体の分布を代表できない場合があります。回避方法: ファイル内の複数の位置からサンプリングし、サンプルサイズとサンプリング方法を報告します。
-
重複を確認しない — 結合したデータセットやデータベースのエクスポートでは、レコードの重複がよく発生します。回避方法: 早い段階で完全一致と類似した重複を確認し、重複率を報告します。
ワークフロー
ステップ 1:ファイルの識別
- ファイル拡張子を抽出します(
.ome.tiff、.nii.gzなどの複合拡張子も処理します) - リファレンスカタログで形式を調べます
- 不明な場合:マジックバイトを確認し、先頭行を調べ、測定元の装置についてユーザーに尋ねます
- 記録する項目:形式名、カテゴリ、一般的な内容、推奨ライブラリ
ステップ 2:初期評価
- ファイルサイズ、作成日、アクセス権
- バイナリ形式の場合:ファイルの整合性を検証します(ヘッダー/フッターのチェック)
- テキスト形式の場合:文字コード、区切り文字、改行コードを検出します
- ディレクトリの場合:内容を列挙し、想定される構造を確認します
ステップ 3:データの読み込み
- 必要なライブラリがない場合はインストールします(
pip installコマンドを提示します) - 明示的なパラメーター(dtype、文字コード、列)を指定して、適切なリーダーを使用します
- 大容量ファイルの場合:まずメタデータを読み込み、その後サンプルデータを読み込みます
- 記録する項目:次元(行 × 列、または X×Y×Z×C×T)、データ型、メモリー使用量
ステップ 4:品質評価
- 完全性:列/フィールドごとの null 数を数え、途中で切り詰められていないか確認します
- 妥当性:範囲チェック、データ型の検証、形式への準拠
- 一貫性:フィールド間の検証、重複の検出
- 分野固有:Phred スコア(FASTQ)、B 因子(PDB)、質量精度(MS)、強度範囲(顕微鏡)
ステップ 5:統計分析
- 要約統計量(平均、中央値、標準偏差、最小値、最大値、四分位数)
- 分布の特性(歪度、単峰性/多峰性、外れ値)
- 相関構造(多変量データの場合)
- 分野固有の指標(GC 含量、カバレッジ、解像度、S/N 比)
ステップ 6:レポートの生成
以下を含む、構造化された Markdown レポートを生成します。
- ヘッダー:ファイル名、タイムスタンプ、ファイルサイズ
- 形式情報:種類、説明、一般的なユースケース
- データ構造:次元、データ型、メモリ使用量
- 品質評価:完全性スコア、妥当性チェック、見つかった問題
- 統計概要:主要な指標と分布
- 主な調査結果:注目すべきパターン、潜在的な問題、異常
- 推奨事項:前処理の手順、適切な分析、使用するツール
{original_filename}_eda_report.md として保存します。
同梱リソース
references/file_format_reference.md— 6 つのカテゴリ(バイオインフォマティクス、化学、顕微鏡、分光法、プロテオミクス/メタボロミクス、一般)にわたる、最も一般的な科学ファイル形式のクイックリファレンスカタログ。各形式の拡張子、説明、Python ライブラリ、主要な EDA アプローチを記載しています。
元の資料から移行されていない内容:6 つのカテゴリ別形式カタログファイルには、200 を超える形式の詳細な項目が含まれていました(合計 3,616 行)。同梱のリファレンスには、最もよく使われる約 50 の形式を集約しています。まれな形式やベンダー固有の形式については、公式ライブラリのドキュメントを参照してください。
参考資料
- McKinney, W. (2017). Python for Data Analysis(第 2 版)— pandas を用いた EDA の方法論
- VanderPlas, J. (2016). Python Data Science Handbook — matplotlib と scikit-learn による EDA
- Tukey, J. (1977). Exploratory Data Analysis — EDA の基礎となる考え方
- Bio-Formats のドキュメント:https://www.openmicroscopy.org/bio-formats/ — 顕微鏡形式のリファレンス
- PSI 標準形式:https://www.psidev.info/ — プロテオミクス/MS データ標準
関連スキル
- matplotlib-scientific-plotting — EDA レポートの可視化
- polars-dataframes — 効率的な表形式データの読み込みと分析
- scanpy-scrna-seq — 単一細胞オミクスの EDA ワークフロー
- zarr-python — 大規模データセット向けのチャンク化配列データアクセス
- pysam-genomic-files — BAM/CRAM/VCF ファイルへのインデックス付きアクセス