空飛ぶチンアナゴの統計解析日記

統計解析を嗜むチンアナゴのメモ帳です

データをもらったら最初にすること

データをもらったら最初にすることは、仕様書の作成です。
仕様書の確認ではなく、仕様書の作成です。

まさかと思われる方も多いのですが、データの仕様書がないなんてことは割とよくあることです。
そんな馬鹿なと思われるかもしれませんが、実際にちゃんとした仕様書はJMDCみたいな商用のちゃんとしたデータでもない限りないと思ったほうがいいです。

ということで実際にデータを開けて仕様書を作っていくところが最初の一歩です。

必要なもの

  1. 元データのcsvファイルやexcelファイルなど
  2. (健診ベースの調査であれば)健診項目一覧
  3. 実際に問診に使った問診票やアンケート
  4. Excel的な表計算ソフト
  5. 折れない心

とりあえず受け取ったファイルを開けてみよう

まず、ファイルを開けましょう。
Excelでも統計ソフトでも構いませんが、容量がでかいとExcelで開けないので統計ソフトで開きましょう。
csvファイルでデータを受け取った場合、エンコードが不明な場合があります。間違ったエンコードで開くと当然文字化けします。とりあえず日本のデータであればSHIFT_JIS(cp932)かUTF-8だと思うのでそのあたりをこねくり回して文字化けがないか確認しましょう。だいたい、この二つをやれば正確に開けると思いますが開けない場合は担当者に連絡をしましょう。
Excelcsvファイルを開けるときはインポートから開けることをオススメします*1
開く時のコツは特段指定がない場合はすべてのデータ形式は「文字形式」で開くことです。この理由はデータセットの各変数の中身を確認する際に説明します。

変数名の確認

無事にデータを開くことができました。
一般的にデータは行に個人別のデータ、列に各項目のデータが入っています。列のことを変数と言ったりします。

f:id:flying-spotted-garden-eel:20210308234912j:plain
図1 疫学研究のデータセットのイメージ図(あくまでも架空のデータです)
各変数の内訳は
id:各参加者のid、gender:性別、age:(健診年度での)年齢、bmiBMI、sbp:収縮期血圧
となっている。

まずはどんな変数がそのデータセットに含まれているか確認をします。そして、それぞれの変数名がどの項目を指しているのかを推測します。
変数名から項目名が予想できる場合が大半ですが、分からないときはさっさとデータの作成者に確認をとりましょう。自分で考えても仕方ないですし、仕様書を作って渡さないデータ作成者が悪いのですから、とっとと聞いた方が早いです。
変数名が一通りわかったら、変数の中身の確認に移ります。

本当の地獄はこれからだ

変数の中身の確認

さて、データセットに入っている変数を把握したところで各変数の中身を確認していきます。
STATAの場合、すべての変数を文字形式で読み込むと「strなんとか(なんとかは半角数字)」という形式で読み込まれます。この「strなんとか」の「なんとか」は最大の文字数を指します。
例えば先の表のBMIの場合、自分で計算したり、データセット上で計算した値が直接入っていない限りは小数点1桁までということが多いでしょうから、str4*2以外でなければ何かがおかしいと考えていいと思います。他にも年齢が4桁(1000歳? エルフかな? 年齢で小数点はほとんどないぞ)だったりすると明らかに怪しいと考えていいでしょう。
怪しいと思った項目は最後に全部まとめてデータ作成者に問い合わせましょう。自分が作成したデータでない限りは考えるのは時間の無駄です*3
次に各変数の中身を見ていきます。STATAの場合、ID以外のカテゴリー変数はとりあえずtabを使って開きます。
このデータセットでは性別のみがカテゴリー変数なので

  • tab gender, mis

とコンソールに入力しましょう。
male 何人、何%、 female 何人、何%という感じで表が出ると思います(結果は省略)。
もしここで「空欄」 何人、何%と出た場合は

  • tab id if gender==""

と入力して性別が欠損値になっているidを確認してメモをとりましょう。空欄が単なる入力忘れなのか、それとも別の要因があって空欄にしているのか確認することが大事です。
連続変量やidについてはtabを使って内容を確認することは困難な場合が多いのです。今回の事例であれば、age、bmi、sbpが連続変量の変数なので、destringして最大値、最小値、平均値ぐらいをまずは見ておけばいいでしょう。常識的に考えておかしいと考えられる外れ値がない限りは仕様書を作る上では問題ありません。値が常識的に考えて明らかにおかしい場合は対応している項目が間違っているか、入力が間違っているかのどちらかなので、こちらも作成者に確認をとりましょう。

最終的な完成目標

f:id:flying-spotted-garden-eel:20210308235033j:plain
最低限、項目名とそれに対応する変数とその中身の表があればとりあえずOKかなぁと思います。変数の型もわかるとあとあとSQLのサーバーに読み込ませる時とかに便利なのですが、今はまだなくてもいいと思います。
データセットからリバースエンジニアリングして仕様書を作るのはなかなか骨の折れる作業なので、最初から用意してくれないかなぁといつも切に思うのである。