QualtricsのデータをRで分析するならsavファイルをダウンロードすべし
オンラインアンケートツールのQualtricsで収集したデータを、統計ソフトRで読み込もうと苦戦したときのメモ
前提
目標:
データファイルはExcelやtextエディターなどで開いて編集したりせずに、ダウンロードしたそのままで読み込みたい
実行環境:
OSはWindowsであり、RはR Studioで実行している
SPSSのソフトは入っていない
Qualtricsからダウンロードした.csv や .tsv をRで読み込むときに生じた問題
Rユーザーならば、.csv や .tsv 形式でファイルをダウンロードすることが多いだろう
しかし、Qualtricsからダウンロードしたファイルは、
- 2,3行目にいらない情報が入っている
read.csv() で skip = 3 としたり、あとで削除するつもりで読み込んでも、
...: invalid multibyte string at ''..."
とか*1
invalid input found on input connection 'file.csv'
とか*2
incomplete final line found by readTableHeader on 'file.tsv'
とか*3
エラーメッセージと関係なく、あるはずの列が全て読み込まれない
などの様々なエラーが出る
検索してみても、それなりに苦労している人がいるようだ(たとえば r - Qualtricsデータ(csv形式)をRにインポートする方法 - ITツールウェブ)
.sav ファイルを使うと……
ところで、Qualtricsの「データテーブルをダウンロード」には、SPSSというタブがある
このタブからファイルをダウンロードすると、sav形式のファイルが得られる。
そして、savファイルは、普通SPSSやSAS、Stataなどでしか使用しないので今までは完全に無視していたのだが……
改めて調べてみると、ありがたいことにRでも読み込むことができるパッケージ、"heavn"があった
SPSS、SAS、StataのデータをRでインポート、エクスポートをする - 井出草平の研究ノート
さっそく、sav.ファイルでダウンロードし、実行してみた
(方法の詳細については、上で引用したブログ記事などをを参照されたし)
< 実行コード>
library(heavn)
dat<-read_sav("file.sav")
head(dat)
今回、Qualtricsからダウンロードしたままのsavファイルを、特にread_sav()にてオプションを変更することなく、
- エラーなく読み込むことができ、
- ヘッダーはQualtricsで設定した変数名になり、
- csvやtsvにあった無駄な情報もなく、
- 全ての列が読み込まれた!
※heavnはtidyverse流のパッケージなので厳密にはデータ構造はdata.frameではなくtibbleで読み込まれていることに留意。基本的にはdata.frameと同じように扱えるが、filter関数などtidyverseパッケージを読み込んでおかないと上手く動かないものもある。tibbleはdata.frameの上位互換なので良さを生かせるといいかも。
※また、各行のデータ型情報に変なもの(上の図のStartDaysの下<S3:POSIXct>など、行によっては質問文が格納されている)が入っているので、これは操作によってはas.numeric()などで変換する必要があることに注意したい
(あるいは、読み込む際にread_csv() のようにcol_type = で指定できるかも?read_sav()のヘルプページには記述が見当たらないし、試してないですが readr: 高速で柔軟なテーブル読み込み - Heavy Watal)
結論
というわけで、SPSSやSASを使わないRユーザーも、Qualtricsからのデータダウンロードはsav.ファイルで指定し、read_sav()にて読み込むと良いでしょう!*4
*1:これはエンコーディングを指定すると直る (第23章 Rのエンコーディング問題 | Rで計量政治学入門)
*2:おそらく、自由記述の回答文章中に区切り文字のカンマがあっておかしくなっている
*3:これは、ファイルをテキストエディターなどで開いて末尾にEnter を足せば直ることもある ([R]警告メッセージ「incomplete final line found by readTableHeader on '○○'」: Golden State)が、ダウンロードしたファイルを書き換えているという点で目標「そのまま読み込む」を達成できない。
*4:R Studioを使っていれば、データビュー view() でsavファイルの中身を表示することができる。R Studioを使わない派がデータ全体を表として閲覧したい場合や、データ共有の観点から、csvファイルも欲しいことがあるだろう。そのときは、Rでsavファイルを読み込んでから、write.csv()またはdplyrパッケージに合わせてwrite_csv()などでcsvとして出力できる(Rを使って,SPSSデータをcsvファイルに変換する方法 | Sunny side up!)。