Skip to content
Guides2 min read

Potato に質的コーディングを:コードブック、メモ、イン・ヴィヴォ・コード

QDA モードを紹介します。Potato 2.6 で登場予定の質的データ分析ワークスペースで、生きたコードブック、イン・ヴィヴォ・コーディング、分析メモ、ケース、そしてコーパス全体に対する全文検索を備えています。

Potato Team

インタビューの書き起こしをコーディングしたことがあれば、そのソフトウェア事情はご存じでしょう。質的データ分析(QDA)向けの本格的なツール、たとえば NVivo、ATLAS.ti、MAXQDA、Dedoose は、高機能ですが高価です。デスクトップに常駐し、プロジェクトを独自形式のファイルに閉じ込め、共同作業をライセンス交渉に変えてしまいます。結局、多くの研究者は表計算ソフトでコーディングし、途中で筋を見失うことになります。表計算ソフトには「コード」とは何かという概念がないからです。

Potato はその反対側、つまり NLP や機械学習データセット向けのテキストアノテーションツールとして出発しました。ここ数回のリリースで、質的ワークフローに必要な部品が育ってきました。パッセージにかけるスパン、共有コードブック、一致度の指標です。近く公開される 2.6 リリースは、それらを束ねて、質的研究者が実際に働くやり方に合わせたモードに仕上げます。

本稿では QDA モードを順に見ていきます。何が有効になるのか、各部品がどう噛み合うのか、そして設定ファイルがどんな見た目になるのかです。リファレンスが必要なら、QDA モードのドキュメントに全オプション一覧があります。

コードブック連携のスパンスキーム、Find 検索パネル、Notes と Codebook のサイドバーを備えた QDA モードの PotatoQDA モードの Potato

ひとつのスイッチ、質的なデフォルト

Potato の仕組みの大部分は、まったく異なるタスク間で共有されています。NER データセットの固有表現にラベルを付けるのと同じスパンスキームが、インタビューのパッセージにもラベルを付けられます。この 2 つの仕事の違いは機能セットではなく、構えにあります。クラウドソーシングの NER プロジェクトは、固定のラベルセットと、一致度を測るためのオーバーラップサンプリングを求めます。一方、20 件のインタビューを一人でコーディングする研究者は、読みながらコードを生み出し、目にしたものについて私的なメモを残したいのです。

QDA モードは、その後者の構えを前提とする単一のスイッチです。

yaml
qda_mode:
  enabled: true            # compose codebook + memos + cases + search

qda_mode.enabled: true を設定すると、Potato の汎用機能が質的なデフォルトへ切り替わります。コードブックはロックされる代わりに、コーディング中に編集できるようになります。メモのサイドバーがオンになります。ケースが自動検出付きでオンになります。コードブック連携と印を付けた任意のスパンスキームで、イン・ヴィヴォ・コーディングが利用できるようになります。

機能標準デフォルトQDA モード下
コードブックモードfixedopen:作業しながらコードの追加・改名・色変更・移動・削除が可能
メモのサイドバーオフオン
ケースオフオン、自動検出付き
アノテーターの検索と取得オフ利用可能(search.annotator_claim: true
イン・ヴィヴォ・コーディングのキーiコードブック連携の任意のスパンスキームで有効

これらは固定されているわけではありません。QDA モードは出発点を変えるだけで、どのデフォルトも上書きできます。唯一の例外はガードレールです。Prolific や Mechanical Turk のようなクラウドソーシングのバックエンドを接続すると、Potato はコードブックを強制的に fixed にロックします。そうすることで、有償のアノテーターが共有スキームをあなたの知らないところで作り変えられないようにしています。

各部品

生きたコードブック

グラウンデッド・セオリー流のコーディングでは、コードブックは前もって書き上げるものではありません。読むにつれて成長していきます。繰り返し現れるアイデアに気づいて名前を付け、一週間後に 2 つのコードが実は同じものだと気づいてマージする、という具合です。

スパンスキームに印を付けると、それはコードブックの一部になります。

yaml
annotation_schemes:
- annotation_type: span    # span + codebook = qualitative coding
  name: codes
  description: Highlight a passage and apply (or mint, via `i`) a code
  codebook: true
  labels: [access barriers, cost concerns, provider trust]

これらの labels は出発点のセットであって、檻ではありません。open コードブックモードでは、作業しながらコードを追加・改名・色変更・移動・削除できます。extensible モードでは、コーダーはコードを追加できますが、共有されたコードは削除できません。fixed は、スキームを固めた段階向けのロックされた定番モードです。

イン・ヴィヴォ・コーディング

イン・ヴィヴォ・コーディングは、参加者自身の言葉をそのままコードにします。誰かが「とにかく折り返しの電話がもらえなかった」と言えば、「折り返しの電話がもらえなかった」がそのままコードになります。

コードブック連携のスパンスキーム上でパッセージを選択し、イン・ヴィヴォ・キー(codebook_invivo_key、デフォルトは i)を押します。Potato はハイライトしたテキストから直接コードを鋳造します。コーパス全体でこれを繰り返すと、断片化が敵になります。「折り返しなし」「折り返しの電話がもらえなかった」「結局かかってこなかった」が、ひとつのアイデアに対する 3 つのコードになってしまうのです。コードコンポーザーはこれに歯止めをかけます。入力中に重複に近いコードを浮かび上がらせ、新たなコードを生む代わりに既存のコードを再利用するよう促します。

メモ

メモなしのコーディングは、コードの背後にある推論を失います。メモは、インスタンスや特定のテキスト選択範囲に紐づく分析メモです。私的に保つことも、チームと共有することもできます。「なぜこう(このように)コーディングしたのか」が宿る場所であり、引用と一緒にエクスポートされるので、監査証跡がプロジェクトの後も残ります。

ケース

ケースは、抜粋を分析単位にまとめます。参加者、ドキュメント、現地訪問などです。抜粋がまとめられると、ケースレベルの属性が引き上げられ、参加者の変数に対してコードを集計できるようになります。各インタビューに condition フィールドが付いていれば、管理画面のクロス集計で、あるコードが条件ごとにどう分布しているかを示せます。

yaml
cases:
  enabled: true
  key: participant_id
  attributes: [condition]

検索

コーパスは、ある語のどの出現箇所にも飛べてこそナビゲートできます。QDA モードには、データセット全体に対する FTS5 全文検索が含まれています。annotator_claim: true にすると、コーダーは任意の検索ヒットを自分のキューへ直接引き込めます。これが、一人の分析者が前から順に読むのではなく、テーマごとにコーパスを進めていくやり方です。

yaml
search:
  enabled: true
  annotator_claim: true

どう噛み合うのか

内部では、コードブック、メモ、ケース、検索はすべて同じプロジェクトデータベースを読み書きします。そのため、ある場所で鋳造されたコードは、ほかのあらゆる場所で即座に検索・エクスポート可能になります。

QDA モードのアーキテクチャ:コードブック、メモ、ケース、検索の下にある共有プロジェクトストアと、イン・ヴィヴォ・コーディングのフローQDA モードが共有ストアの上で各部品をどう組み合わせるか

完全な設定例

小さいながらも完結した研究の例です。casessearch、メモのブロックは省略可能で(QDA モードはケースとメモをすでにオンにしています)、ケースキーのようなデフォルトを調整したいときにだけ書きます。

yaml
annotation_task_name: My Qualitative Study
task_dir: .
output_annotation_dir: annotation_output/
data_files:
- data/interviews.json
item_properties:
  id_key: id
  text_key: text
 
qda_mode:
  enabled: true
 
codebook_invivo_key: i
 
cases:
  enabled: true
  key: participant_id
  attributes: [condition]
 
search:
  enabled: true
  annotator_claim: true
 
annotation_schemes:
- annotation_type: span
  name: codes
  description: Highlight a passage and apply (or mint, via `i`) a code
  codebook: true
  labels: [access barriers, cost concerns, provider trust]

2.6 をインストールしたら、リポジトリのルートから実行します。

bash
python potato/flask_server.py start examples/advanced/qda-mode-example/config.yaml -p 8000

コーディング結果を取り出す

2 つのエクスポーターが、コーディング済みのデータを質的論文に必要な成果物へと変えます。

  • codebook は、各コードについて 1 行を出力し、その階層、説明、色、使用回数を含みます。
  • quotation_report は、コーディングされたスパンごとに 1 行を出力します。引用、その文字オフセット、出典のインスタンス、コーダーです。include_memos=true を追加すると、メモも付け加えられます。
bash
python -m potato.export config.yaml --format quotation_report \
  --option include_memos=true -o quotations.csv

同じ素材を複数の人がコーディングする場合は、信頼性の数値が欲しくなるでしょう。Potato はコードについて Cohen's と Fleiss' kappa を報告します。この機能は、これらのエクスポーターとともに 2.5 リリースで登場しました。

どこに位置づけられるか

QDA モードは、あらゆる軸で NVivo を機能面で上回ろうとはしていません。提供するのは別のトレードオフです。無料、オープンソース、Web ベース、共同作業可能で、機械学習のアノテーションやエージェント評価と同じツールの中に収まっています。すでにラボでラベリングのために Potato を動かしているなら、質的コーディングは、ライセンスされた別個のデスクトップソフトではなく、設定ブロックひとつ分の距離になりました。

QDA モードは Potato 2.6 に搭載されます。完全なドキュメントはすべてのオプションを網羅し、アノテーター間一致度のガイドは信頼性の指標を解説します。