データクリーニングとは、データの誤謬を見つけてそれを修正する作業のことを言います。データクリーニングについては、多くの専門的な議論があります。DCSSは、そんな議論の中で「粘土細工アプローチ(Clay Modeling Approach)」* を具現化するシステムとして開発されました。
専門的な話は省略しますが、粘土細工アプローチは既存のデータクリーニングのアプローチが持つ問題点を改善したもので、JGSS(日本版総合的社会調査)やSSM調査(社会階層と社会移動全国調査)など、日本の代表的な社会調査のデータクリーニングに用いられたアプローチです。DCSSを利用すれば、粘土細工アプローチによるデータクリーニングを簡単に行うことができます。
以下では、DCSSによるデータクリーニングの仕方について説明します。
* 保田時男,2011,「NFRJ-08Panelにおける調査票の設計−研究課題とクリーニングを視野に−」『家族社会学研究』23(1): 89-95.
DCSSを利用すれば、大学学部生でも簡単に粘土細工アプローチによるデータクリーニングができる
粘土細工アプローチの特徴の一つは、「edit段階」と「imputation段階」とを区分する点です。edit段階は異常値を検出する段階で、imputation段階は異常値を修正する段階です。粘土細工アプローチでは、両者を独立的な作業とし、edit段階が完全に終わってからimputation段階に移ります。作業の途中でedit段階とimputation段階を行き来することはありません。
edit段階、つまり異常値を検出する作業は、DCSSの「Rulesタブ」で行います。
Rulesタブの左上には「Variable List」、左下には「Value List」、右上には「Equation List」、右下には「Keypad」があります。
異常値を検出する作業は、Rulesタブで行う
異常値の検出は、変数名と数字と演算記号からなる式を書くことで行います。この式のことを「edit rule」と言います。edit ruleは、Rulesタブの画面右上にある「Equation List」で入力・管理します。
Equation Listの下部に「Equation」と書かれている欄があります。そこにedit ruleを入力します。
Equation Listの「Equation」欄にedit ruleを入力する
それでは、実際にedit ruleを書いてみましょう。使用するDCSSプロジェクトは、「コーディングをする」で作成したDCSS練習用架空プロジェクト(参考資料とSub Table編集済み).xmlです。
先ほど話したように、edit ruleは変数名と数字と演算記号からなる式であり、その目的は異常値を検出することです。なので、式の内容は「どのような値が異常値なのか」を表現するものになります。(「どのような値が正常値なのか」を表現する式にしない理由は、そのような式は、変数の数が増えるにつれて式の数が指数関数的に増えるからです)
「どのような値が異常値なのか」を表現する式を書く
式に使用できる演算記号は、Rulesタブの画面右下にある「Keypad」のボタンに示されています。
演算記号のほとんどは一般的なものと同じですが、少し注意が必要なものもあります。
equal(等号)は、「A == B(AとBは等しい)」
not equal(等号否定)は、「A != B(AとBは等しくない)」
and(論理積)は、「A && B(AとBがともに真の場合に真)」
or(論理和)は、「A || B(AとBのどちらかが真の場合に真)」
と書くので注意が必要です。
* 論理積と論理和を使って式を書くことは少しややこしいかもしれません。書いた式の意味がよく分からない時は論理積と論理和を日本語に置き換えて考えてみてください。例えば、論理積は「そして」や「かつ」に置き換えて、論理和は「または」に置き換えて考えます。
式に使用できる演算記号はKeypadに示されている
<注意>
等号は「==」
等号否定は「!=」
論理積は「&&」
論理和は「||」
調査対象者性別変数(Q01SEIBETSU)を例にしてedit ruleを書いてみましょう。
調査対象者性別変数の取り得る値は「1(男性)」「2(女性)」「99(無回答)」です。考えられる異常値の条件は、次の二つです。
① 値が1より小さい
② 値が2より大きい、そして、値が99ではない
これらを式で表現すると次のようになります。
① Q01SEIBETSU < 1
② Q01SEIBETSU > 2 && Q01SEIBETSU != 99
これらの式をEquation Listに追加します。Equation Listに式を追加するためには、式を入力した後エンターキー(またはKeypadの「Add」ボタン)を押します。式を削除したい場合は、Equation Listで式を選択し、キーボードの「delete」キーを押します。
上記の二つの式は、一つにまとめて書くこともできます。
③ (値が1より小さい)または(値が2より大きい、そして、値が99ではない)
③ Q01SEIBETSU < 1 || ( Q01SEIBETSU > 2 && Q01SEIBETSU != 99 )
式を入力してエンターキー(またはKeypadの「Add」ボタン)を押すと、式がEquation Listに追加される
式を削除したい場合は、式を選択し、deleteキーを押す
Rulesタブの左上に、変数名と変数ラベルなどを表示する「Variable List」があります。Variable Listの検索機能などを利用して、式を書く際に必要な変数の名前を参照することができます。
また、Variable Listにある変数名を「Equation」欄にドラッグ・アンド・ドロップすると、変数名を自動入力することができます。
Variable Listを利用して変数名を参照し、自動入力することができる
異常値の検出結果は、Editタブで確認します。先ほど入力したedit ruleによる異常値の検出結果を確認してみましょう。Editタブに移動して、ケースID「24」を選択します。
調査対象者性別変数(Q01SEIBETSU)は、Address「A3」にレイアウトされています。Address「A3」の「Name」列を見ると、セルが枠線に囲まれて、文字が太字になっていることが分かります。枠線と太字は、異常値が検出されたことを表します。
「Raw」列で生値を確認すると「3」であり、確かに異常値です。
ケースID「24」を選択する
異常値が検出された場合、変数名のセルが枠線と太字で表示される
変数名(Name列のセル)をクリックすると、その変数の関連式が画面下部に表示されます。
異常値を検出した式は、赤い文字で表示されます。
変数名をクリックすると画面下部に関連式が表示される
異常値を検出した式や諸変数の値などを検討して、新しく入力する値が決まったら、それを「Edit」列のセルに入力します。Edit列に入力する新しい値のことを「編集値」と呼ぶことにします。
Edit列のセルをダブルクリック(またはエンターキーを押す)すれば、値が入力可能な状態になります。
編集値を入力した後、エンターキーを押します。エンターキーを押さないと入力した値は保存されないので注意します。
Edit列のセルをダブルクリック、またはエンターキーを押して、編集値を入力する。
値を入力した後は、必ずエンターキーを押す。
以上のようなプロセスによって、粘土細工アプローチによるデータクリーニングを行います。粘土細工アプローチの作業プロセスを整理すると、右にようになります。
社会調査のデータクリーニングを初めて経験する人は、粘土細工アプローチがそれほど特別なものには見えないかもしれません。
しかし、従来のデータクリーニングでは、粘土細工アプローチのように「ケース単位」でデータクリーニングをすることはあまりありませんでした。一般的なやり方は、変数別に異常値を検出して変数別に修正をする「変数中心」のデータクリーニングでした。
変数中心のデータクリーニングでは、狭い範囲(=少ない変数間)では整合性が取れていても、広い範囲(=多くの変数間)では整合性が取れなかったり、ある箇所で施した修正が「連鎖反応」を起こして、膨大な数の修正箇所を生み出したりすることが少なくありませんでした。粘土細工アプローチは、そのような問題点を克服するために提案されたアプローチです。
edit ruleを書く際に、値ラベルを参照することができます。
値ラベルを表示させるためには、まず変数に値ラベルを入力する必要があります。値ラベルの入力と表示は、Value Listで行います。
Value Listに値ラベルを入力する方法は、次の通りです。
Variable Listから、値ラベルを入力したい変数を選択します。Value Listの下部に「Value」欄と「Label」欄があります。Value欄には値を、Label欄にはその値のラベルを入力します。入力が終わったら、Label欄の右側にある「Add」ボタンを押します。Value Listに値と値ラベルが追加されたことを確認します。
値ラベルを表示する方法は、値ラベルを表示したい変数をVariable Listから選択するだけです。Variable Listで選択した変数の値ラベルが、Value Listに表示されます。
Value Listでは、すでに入力された値と値ラベルを削除したり修正したりすることができます。値ラベルを削除したい場合は、削除したい箇所を選択し、deleteキーを押します。値ラベルを修正したい場合は、修正したいラベルをダブルクリック(またはエンターキーを押す)すると、ラベルが編集可能な状態になります。
変数に値ラベルを入力するには、Variable Listから変数を選択し、Value Listに値と値ラベルを入力する
Value Listを利用して変数に値ラベルを入力する方法の他に、プロジェクトを作る際に値ラベルのデータを一緒に読み込んでプロジェクトを作ることができます。
値ラベルのデータは、CSVファイルで作成します。
CSVファイルを作成する際に、先頭列は「変数名」、二番目の列は「値」、三番目の列は「値ラベル」を表すようにします。例えば、次のファイルのように作ります。
ダウンロード:
* DCSSのプロジェクトを作るために生データ(raw data)の行列を作成した際に、行列の先頭列(一番目の列)は「ケースID」の情報を表すようにしました。この生データの行列の先頭列は、DCSSが自動的に「caseID」という変数として処理することになります。そのため、caseID変数には変数ラベルや値ラベルをつけることができません。caseID変数に変数ラベルや値ラベルをつけると、データの書き出しができなくなります。変数ラベルや値ラベルは、生データの行列の二列目の変数からつけるようにしてください。
先頭列は「変数名」、二番目の列は「値」、三番目の列は「値ラベル」を表すようにして CSVファイルを作る。
*「ケースID」変数には値ラベルをつけない。
CSVファイルで作成した値ラベルのデータを、生データと一緒に読み込ませてプロジェクトを作ります。
新しいプロジェクトの作成ウィンドウの「Value Labels」の欄に、値ラベルのデータが保存されているパスを入力します。
作成したCSVファイルのパスを「Value Labels」の欄に入力
プロジェクトを作成し、Variable Listで変数を選択すると、値ラベルがValue Listに表示されることを確認できます。
作成したプロジェクトに値ラベルが読み込まれている
Main TableとSub Tableのレイアウト、日本標準産業分類と日本標準職業分類の参考資料、変数ラベル、値ラベルの情報が読み込まれたプロジェクトファイルをアップロードします。DCSSの練習に使ってください。
レイアウト、参考資料、ラベルの情報が読み込まれたプロジェクト