version-dataset について
version-dataset は、分析実行間でデータセットのバージョンを追跡・検証する研究者向けスキルです。データを保存・変更せず、決定論的ハッシュと来歴をマニフェストに記録します。
主な機能
- 01データのハッシュ、シード、来歴を含むマニフェストを作成
- 02ファイル、表構造、列の値を検査
- 03分析実行前に入力を検証
- 04マニフェストを比較して変更を要約
- 05変動する列を除外可能
活用シーン
- 01分析入力を固定して来歴を記録
- 02分析再実行前にデータの差分を確認
- 03データセットのバージョン間の変更を確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ aperivue/ medsci-skills --skill version-datasetインストール後、Claude Code で/version-datasetを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
skill.ymlreferences/manifest_schema.mdscripts/version_dataset.pytests/test_version_dataset.sh詳細
バージョンデータセットスキル
分析は、固定シードを使って、対象としているデータに対して実行する必要があります。このスキルは、実行間の差異を見逃さずに把握できるようにします。決定論的なフィンガープリント(ファイルの SHA-256 と、表形式ファイルの場合はスキーマおよび列ごとの値のハッシュ。明示的に指定しない限りタイムスタンプは含みません)を記録するため、後から入力が変わっていないことを証明できます。データは変更せず、マニフェストにはデータ自体ではなくハッシュを保存します。出所に関するメモは英語で記述します。
決定論的スクリプト
# Build a manifest (record the analysis seed + provenance)
python "${CLAUDE_SKILL_DIR}/scripts/version_dataset.py" manifest data.csv \
--out manifest.json --seed 42 --provenance "KNHANES 2018 extract v1"
# Verify a later copy against it (CI / pre-analysis gate)
python "${CLAUDE_SKILL_DIR}/scripts/version_dataset.py" verify --manifest manifest.json --strict
# Compare two manifests (what changed between versions)
python "${CLAUDE_SKILL_DIR}/scripts/version_dataset.py" diff --old v1.json --new v2.json
ファイルのハッシュ計算には標準ライブラリのみを使用します。表形式ファイルのスキーマと列のハッシュ計算には、利用可能な場合は pandas を使用します。
--ignore-cols は変動する列を除外します。--base はマニフェストのキーを相対パスにします。
ワークフロー
ステップ 1:バージョンを固定する(ゲート)
データセットを分析用に凍結した時点でマニフェストを作成します。ゲート: 固定する前に、シードと出所に関するメモが正しいことをユーザーに確認してください。 マニフェストは、ユーザーが「結果の元となったデータ」として引用する記録です。 出所に関するメモはユーザーの文章です。決して創作してはいけません。
ステップ 2:各実行の前に検証する(ゲート)
分析を再実行する前(または CI で)、verify --strict を実行します。verify を実行せずに、データセットが変更されていないと言ってはいけません。ゲート: 差異が報告された場合(MANIFEST_DRIFT、終了コード 1)、停止し、計算されたとおりの差異レポートをユーザーに提示してください。変更された列のハッシュを決して軽視してはいけません。ユーザーが明示的に了承し、再固定するまでは、変更後のデータで処理を続けないでください。差異があるのに黙って再実行してしまうことを防ぐために、このスキルは存在します。
差異を解釈する前に ${CLAUDE_SKILL_DIR}/references/manifest_schema.md を読んでください。ここでは各差異カテゴリを定義しています。CSV/TSV ファイルは生のバイト列ではなく、論理的な内容(スキーマと列ごとの値のハッシュ)で比較されます。そのため、引用符の付け直し、列の並べ替え、または --ignore-cols で除外した変動列によって誤った差異が生じることはありません。バイナリ形式の表データファイル(Parquet/Stata/SAS/Excel)もバイト単位で検証されます。ラベル、メタデータ、その他のシートは列のハッシュに含まれないためです。ただし、--ignore-cols で指定した列がファイルに存在する場合は、その変更によってバイト列が変わります。
ステップ 3:バージョン間の差分を取る
データセットを意図的に更新した場合は、古いマニフェストと新しいマニフェストの diff を取り、変更内容(追加・削除・変更された列、行数の差)を提示します。これにより、ユーザーは変更点を記録して再固定できます。ゲート: 新しいバージョンに置き換える前に、ユーザーの承認を得てください。
非決定論的な成果物
PPTX/DOCX や図のバイナリファイルを、バイト単位の厳格な検証対象に含めないでください。タイムスタンプやレンダリングメタデータが埋め込まれており、ビルドのたびに変わるためです。決定論的な入力と表形式の出力(データファイル、結果の CSV)のみをマニフェストに含めるか、変動する列には --ignore-cols を使用してください。このポリシーは references/manifest_schema.md に記載されています。バンドルされている各 demo/*/ には manifest.lock.json(入力データと決定論的な結果テーブル)が含まれ、verify --strict によって検証されます。デモのコマンドはリファレンスに記載されています。
対象範囲
- マニフェストを共有する前に
/deidentifyを実行してください。値の例は保存されませんが、出所に関するメモには背景情報が含まれる場合があります。 - データのクリーニング、プロファイリング、または匿名化には →
/clean-data、/generate-codebook、/deidentifyを使用します。/generate-codebookはデータに「何が」含まれているかを記録し、このスキルは「どのバージョン」かを固定します。