メインコンテンツへスキップ

Case研究解析系

統計解析のPythonコードをClaudeに書かせて、自分のデータで走らせる

pandas/scipy/statsmodelsのコードをClaudeに生成させ、自分の臨床データで実行・検証。コーディングの手間を省きつつ、手法の選択とp値の解釈は自分で判断する使い方。

小児科医 / 卒後10年目 / 中規模総合病院(愛育病院)Claude8 min

効いた点

コード作成にかかる時間が体感で6〜7割減。可視化テンプレを流用できるようになり、論文用Figure作成が楽になった

限界

統計手法の選択(パラメトリック/ノンパラ)はAI推奨を鵜呑みにしない。p値・効果量の解釈は自分で行う。データはローカルで匿名化処理してからコードを書かせる

場面

臨床研究データの統計解析(記述統計・群間比較・ロジスティック回帰)

入力

データの変数一覧・型・解析内容をClaudeに渡し、pandas/scipy/statsmodels準拠のPythonコードを生成させる

状況

臨床研究で統計解析をするとき、自分の時間が一番削られるのはコーディングの部分だった。Rなら多少慣れているが、Pythonのpandas/statsmodelsになると、ライブラリの書き方を毎回調べながら進める羽目になる。

解析の設計はできている。何と何を比較するか、どんなアウトカムを見るか、そこは自分の仕事だ。でも「t検定のコード」「ロジスティック回帰でオッズ比と95%信頼区間を出すコード」「KM曲線のテンプレ」、そのあたりを毎回ゼロから書く意味はない。

このあたりをClaudeに渡すと、かなりの精度で動くコードを返してくる。

やったこと

プロンプトに渡す情報を定型化した。変数の型と解析内容をきちんと記述するのがポイントで、ここを雑にするとコードの変数名がずれたり、連続変数をカテゴリカルとして扱われたりする。

実際に使っているプロンプトのテンプレはこれ。

以下のデータ解析を行いたいので、Pythonコード(pandas, scipy, statsmodelsなどを使用)を作成してください。

# データの説明
- データフレーム名: df
- サンプル数: [n]例
- 変数一覧:
  - [変数名1]: [型(連続変数/カテゴリカル)] - [説明]
  - [変数名2]: [型] - [説明]
  - [変数名3]: [型] - [説明]
  - [アウトカム変数]: [型] - [説明]

# 解析内容
1. 記述統計: [患者背景テーブル(Table 1)の作成 / 基本統計量]
2. 群間比較: [比較する群の変数名] で層別化し、以下を比較
   - 連続変数: [t検定 / Mann-Whitney U検定 / 対応のあるt検定]
   - カテゴリカル変数: [カイ二乗検定 / Fisherの正確検定]
3. 主解析: [ロジスティック回帰 / Cox比例ハザード / 線形回帰 / 生存分析]
   - 目的変数: [変数名]
   - 説明変数: [変数名のリスト]
   - 調整変数: [変数名のリスト]
4. 可視化: [Kaplan-Meier曲線 / Forest plot / ROC曲線 / 散布図]

# 出力要件
- コードにはコメントを日本語で付けてください
- 結果の解釈を各解析の後に記載してください
- p値は小数点以下3桁まで表示
- 95%信頼区間を含めること
- 論文のTable/Figureとして使える形式で出力

変数の型の指定は必ずやる。「age: 連続変数」「sex: カテゴリカル(0=男性, 1=女性)」まで書く。これを省くと、コードの中でdtypeの扱いが曖昧になる。

加えて、df.head(5) の出力を貼り付けると精度が上がる。実際の列名・データ型をClaudeが確認できるので、変数名のtypoや型の誤認識が減る。

生成されたコードはJupyter Notebookで1セクションずつ実行し、出力を確認しながら進める。一度に全部走らせると、エラーが出たときに原因を特定しにくくなる。

効いたところ

  • コード作成の時間が体感で6〜7割減った。特にTable 1(記述統計)のtableoneパッケージを使った出力は、自分でゼロから書くと30分かかっていたものが数分で得られる
  • Forest plotやROC曲線のテンプレが流用できるようになった。論文のFigureとして使える見た目のコードがそのまま出てくる
  • reason列に相当するコメントがコードに埋め込まれるため、数ヶ月後に読み返したときに何をやっているか分かりやすい
  • 欠損値処理のパターン(dropna()か多重代入法か)を事前に指定すれば、その方針で一貫したコードが生成される

限界・気をつけていること

ここがいちばん大事な部分だと思っている。

  • 統計手法の選択はAIに委ねない: 「連続変数の2群比較」と入力するとAIはt検定を返すことが多いが、正規性の検定やサンプルサイズによってはMann-Whitney U検定が適切なこともある。手法の判断は自分でする
  • p値と効果量の解釈は人間の仕事: コードが正しく動いて p<0.05 が出ても、その数字が臨床的に意味があるかどうかは別の問い。「統計的有意」と「臨床的に意味あり」は違う。ここをAIに書かせると危ない
  • データは必ずローカルで匿名化してからコードを書かせる: プロンプトに渡す段階で、患者IDや氏名が含まれていないことを確認する。df.head(5) を貼る場合も同様。コードを書かせる前に匿名化処理を済ませる
  • 多重検定補正を意識的に指示する: 複数の群間比較を一度に依頼すると、補正なしのコードが返ってくることがある。Bonferroni補正やBH法が必要な場面では明示的に指示する
  • 生成コードはそのまま実行しない: 変数名・ファイルパス・型定義を自分のデータに合わせて確認してから走らせる。このステップは省略できない

横展開

同じパターンで、ROC曲線の閾値探索、サブグループ解析のForest plot、感度分析のためのbootstrappingコードなど、「構造が決まっていてコードが面倒な作業」はどれも使える。

論文のリビジョンで「査読者からこの解析を追加してほしいと言われた」という場面でも、短時間でコードを得られるのは助かっている。ただし追加解析の妥当性、その解析をすることが論文の主張に沿っているかどうか、は自分で判断する必要がある。Claudeはコードを書けるが、研究デザインの整合性は見ない。