データの扱い(1)

Rでは、一般にデータを読み込んで、統計解析を行うことになります。このページでは、主にデータの読み込み方についてまとめていきます。また、以降の説明では、RStudioでプロジェクトを作成していることを前提に話を進めます。プロジェクトが何かわからない場合は、 プロジェクトの作成・利用を一度確認してからご覧ください。

データの保存

データの保存場所、保存形式についてまとめておきます。

データの保存場所

データの読み込むとき、データの保存場所が決まっているとすっきりしますし、余計なトラブルが減ります。おすすめは、プロジェクト内にdataという名前のフォルダを作成(*)し、データを保存しておくことです。

もちろん、名前は何でもいいのですが、わかりやすい名前にしておいた方が後々の管理が楽になります。

データの保存形式

保存するデータは、CSVファイルとし、元データだけを保存することをおすすめします。解析が進むと、データのサブセットをそれぞれファイルに保存したくなることも多いですが、どのようにサブセットを作ったかは、Rのコードに記述しておいた方が、Reproducibilityが高くなり、後々の見直しに役立ちます。

Excel形式のデータを扱うことは可能ですし、一昔前に比べると、ずいぶんと容易になってきました。しかしながら、CSV形式のようにテキスト形式にしておくと、データ自体もgitを用いた管理が可能になってきますので、ぜひCSV形式で保存することをおすすめします。

CSV形式のファイル

データの入力までの間、Excel形式で保存しておくことはかまいませんし、(入力可能な値の範囲の指定など)Excelの機能を使うことで、入力ミスが減るようなことも多いです。最後の保存のところで、CSVファイルに変更すれば十分だと思います。

  1. ファイル→名前をつけて保存
  2. Excel ブック(*.xlsx)となっているところをプルダウン→CSV(コンマ区切り)(*.csv)を選択
注意点
ファイル名、変数名、値は半角英数が望ましい。
(特に全角)スペースは使わないことが望ましい。
保存フォルダのパスも注意した方がよい。(プロジェクトを作成しているフォルダのパスを注意していれば問題ない。)
欠損値の入力は統一した形式で行う。(空白にするのか「.」を入れるのかなど)

データの読み込み方

データの読み込みはread.csv()関数を使います。下記のコード例は、欠損値を空白で統一したファイルをプロジェクトフォルダ内のdataフォルダにファイル名.csvとして保存した場合の例になります。

dat <- read.csv("data/ファイル名.csv", na.strings="")

dat
ここではデータをデータフレームとして読み込み、保存しておくオブジェクト
read.csv()関数
CSVファイルを、「1行目は変数名」「小数点は"."」「区切り記号は","」と指定して読み込む関数
詳しく知りたければ、read.table()関数を調べるとよい。
"data/ファイル名.csv"
ファイル名はプロジェクトフォルダからの相対パスで記述(*)
na.strings=""
欠損値の値を指定するオプション
今回は欠損値に空白を入力している例なので、「"」と「"」の間に何も記述しない。

*:ファイル名は拡張子まで表示するようにしておけば、間違えなくなってくる。

マークダウンファイルに書いてみる

自分でデータファイルを用意してください。以下は、「survey.csv」というファイルを例にとって説明していきます。

1. プロジェクトの準備

  1. プロジェクトの作成・利用を参考にプロジェクトを作成
  2. プロジェクトフォルダ内にdataという名前のフォルダを作成
  3. dataフォルダに使いたいデータ(survey.csvなど)を保存
  4. Sourceペインの表示を参考にRマークダウンファイルを作成
  5. ファイルのタイトルなどYAMLヘッダの情報を調整

2. Chunkの挿入・コマンドの記述・実行

  1. Sourceペイン右上のInsertからRを選択するか、「Ctrl+Alt+I」とするか、「```{r}」と「```」を入力するかしてChunkを作成
  2. 下図のようにコマンドを記述
  3. コマンド行にカーソルを合わせて、「Ctrl+Enter」とするか、Chunkの右端にある右向きの三角(Run Current Chunk)をクリック
  4. Consoleペインにコマンドが入力され、コマンドの次の行に「>」が表示されれば実行終了

3. エラーが出たら

エラーメッセージをよく確認しましょう。最初によくやるミスを少し記述しておきます。

ファイルが正しい位置に保存できていない。
ファイルをコマンドが参照する場所に保存しましょう。ダウンロードしただけで、場所を変更していないことはよくあります。また、ファイル名に合わせたコマンドになっていない場合も多いです。
コマンドのミス
この場合、次の行が「>」ではなく「+」になっていることが多いです。そのときは、慌てずにキーボード左上の「ESC」を押して、コマンドの間違いを調べましょう。大文字・小文字、スペース・全角スペースなど、細かくチェックしてみましょう。特に「"」が全角になっていることはよくあります。

4. 読み込みの確認

読み込みに成功したかどうかの確認を簡単にする方法は、Environmentペインにdatというオブジェクトが表示されているかどうかでわかります。survey.csvを読み込んだ場合、「100 obs. of 10 variables」とあるはずですが、これは、10の変数に100の観測値が入っているという意味です。

読み込み内容の確認

内容の確認には、いくつかの関数が利用できます。必要に応じて使い分けると便利です。

head()関数tail()関数
読み込んだファイルの上から(下から)6行を表示する関数
names()関数
変数名を表示する関数
summary()関数
各変数の要約統計量を算出する関数
カテゴリカル変数ではカウント結果、連続変数では最小値、最大値、四分位点、平均を返します。

```{r check}

# head(オブジェクト名)

head(dat)

# tail(オブジェクト名)

tail(dat)

# names(オブジェクト名)

names(dat)

# summary(オブジェクト名)

summary(dat)

```

新しいChunkの中に上記コマンドを記述して、下図のようになったら、一度Knitボタンを押してみてください。うまくいけば指定のレポート形式(図の場合はWord)で結果が出力されます。

出力されたWordファイルのスクリーンショットです。

うまくいった例だけを表示しておりますが、データによってはいろいろと不都合が出てくることがあります。上記、関数群を使えば、データに含まれる問題をかなりたくさん潰すことができます。ここでデータをきれいにしておかないと、どんなに解析を頑張ってもうまくいかなくなりますので、しっかりと確認するようにしておいてください。下記にいくつかの代表的なものを列挙しておきます。

  • 半角英数が入るはずの観測値に全角文字が含まれている。
  • 何も入らないはずの観測値(欠損値)に全角スペースが入っている。
  • 変数名に使えない文字を使っていたので、Rが勝手に変更している。

データの取り出し方

読み込みがうまくいったら、今度はきちんとデータを扱えるようになる必要があります。ここでは一番初歩的な二つの方法について説明しておきます。

列名を使った取り出し方

列名を利用する場合は、下記のコード例のようにしてデータを扱います。

データフレーム名$変数名[行番号]

下記コードを新規Chunkに記述し、実行してみましょう。

```{r dat0}

# 例:sexの一番最初の値を見る。

dat$sex[1]

# 例:weightのすべての値を見る。

dat$weight

# 例:heightの要約統計量を見る。

summary(dat$height)

```

行、列の番号を使った取り出し方

プログラミングして繰り返しデータにアクセスするような時に有効な方法です。

データフレーム[行番号, 列番号]

下記コードを新規Chunkに記述し、実行してみましょう。

```{r dat1}

# 例:sexの一番最初の値を見る。

dat[1, 5] # sexは5列目

# 例:weightのすべての値を見る。

dat[, 4] # weightは4列目

# 例:heightの要約統計量を見る。

summary(dat[, 3]) # heightは3列目

```

Rmdスクリプトのまとめ

ここで使ったコードをRmdスクリプトにまとめると下記の通りになります。

---

title: "Reading a csv file"

author: "Shouhei Takeuchi"

date: "2017年5月19日"

output: word_document

---

# Rの練習

練習用のファイルなのでいろいろなものを試していく。

## データの読み込み

read.csv()関数を使うらしい。

```{r read}

dat <- read.csv( "data/survey.csv", na.strings="" )

```

## データの確認

データがしっかり読み込めたかチェックする。

```{r check}

# head(オブジェクト名)

head(dat)

# tail(オブジェクト名)

tail(dat)

# names(オブジェクト名)

names(dat)

# summary(オブジェクト名)

summary(dat)

```

## データの取り出し方

読み込んだデータにアクセスする方法について

### 列名を使った取り出し方

列名を使ってデータを取り出す方法

```{r dat0}

# 例:sexの一番最初の値を見る。

dat$sex[1]

# 例:weightのすべての値を見る。

dat$weight

# 例:heightの要約統計量を見る。

summary(dat$height)

```

### 行、列の番号を使った取り出し方

行、列の番号を使って取り出す方法

```{r dat1}

# 例:sexの一番最初の値を見る。

dat[1, 5] # sexは5列目

# 例:weightのすべての値を見る。

dat[, 4] # weightは4列目

# 例:heightの要約統計量を見る。

summary(dat[, 3]) # heightは3列目

```