2 分析環境の構築

2023年度 社会調査法

佐久間 智広

神戸大学大学院経営学研究科

2023/10/09

1 Rについて

R logo

1.1 Rとは

Rは,統計分析に強みを持つコンピュータ言語です(統計ソフトと呼ぶこともあるけど,厳密な違いはよくわかりません)。

1.2 他のソフト・方法との比較

  • 覚えさえすればエクセルよりもはるかに簡単

  • エクセルでできる分析は限られていますが,Rではそれよりもはるかに高度なことができます

  • エクセルはそもそも表計算ソフトです。

    • データが簡単にいじれてしまう(書き換えられてしまう)状態で分析作業をするのは好ましくありません。
  • フリーです。

    • 卒業後も使えます。
  • 機械学習との絡みでPythonが流行ってきています。

    • ただ,統計分析に関してはRに一日の長があるという印象です。

    • コンピュータ言語のとっかかりはRでも,Rを使えるようになったらPythonもそこまで負担なく覚えられるでしょう。

1.3 Rstudio

Posit社の提供する統合開発環境(IDE)。RはそれだけだとWindowsのconsoleとか,Macのterminalみたいな,コマンドだけの画面

これで使えないわけでもなけれど,もっと使いやすい方が良い。Rをもっと使いやすい状態にしてくれるアプリがRstudioです。

  • Rの画面(左下)
  • Rのプログラムを書くスペース(左上)
  • 読み込んだデータや,過去に実行したコマンドが見れるスペース(右上)
  • パッケージやファイル,作った図表などがみれるスペース(右下)1

  • Rstudioを使うと,分析結果レポートを文書やプレゼン用スライドに直接書き出すこともできます。

    • いまこの資料もRstudioで書いています。
  • 文献リストの挿入などの機能も実装できるので,その気になればデータ分析から論文執筆まで全てRstudioでできます。

Google colabなど,他の開発環境もありますが,インストールさえしてしまえば,Rstudioの方が便利だと思います。

2 RとRstudioのインストール

2.1 Rのインストール

  1. R の公式サイトに行くhttps://cloud.r-project.org
  2. 自分のOSに合ったものを選択
    • WindowsならDownload R for Windows
      • Base を選ぶ
    • MacならDownload R for macOS
      • SliconならR-X.X.X-arm64.pkg
      • IntelならR-X.X.X.pkg
  3. ダウンロードしたものを実行してインストール

X.X.X という部分はバージョン番号です。

2.2 Rstudioのインストール

  1. RStudio の公式サイトに行くhttps://posit.co/products/open-source/rstudio/
  2. 無料版(Open Source Edition)を選択
  3. 自分のOSに合ったものを選んでダウンロード
  4. ダウンロードしたものを実行してインストール

2.3 Posit cloudへの登録

  • 多様な機能を利用する場合は,RとRstudioをパソコンにインストールすることをお勧めします。
  • 一方で,個々人のパソコンの環境によってまれにうまくインストールできない場合等があります。
  • そこで,予備としてposit cloudへの登録をお願いします。
  1. リンク(https://posit.co/)からサイトへアクセスし、ProductsタブからPosit Cloudを選択する
  1. その後、進んだ画面で “Get Started” →Free planを選択し “Sign up” を押す
  1. 好きな方法でアカウントを作成する
  2. 登録が完了すると、自身のアカウントのホーム画面へ移動する。新しいR studio セッションを開始するためには、画面右上の New projectボタンを押し、“New Rstudio Project” を選択する。

3 Rの操作

3.1 スクリプトファイル

Rなどの統計ソフトを使う利点の一つは,再現性

  • 例えばエクセルでは,どんな順番にどんな処理をしたのかは記録されません。

  • Rなどのプログラミングソフトを使うと,操作した内容と順番をコードの形で記録しておけます。

  • コードを記録したファイルを「スクリプトファイル」と言います。

スクリプトファイルは,画面左上にある緑の「+」アイコンを押して,「R Script」を選択することで新規作成できます。

スクリプトファイルを作成すると(初期状態では)画面の左上に白紙のファイルが出てきます。ここにコマンドを打ち込んでいきます。

例えば以下のコマンドを打って実行すると,画面の左下にあるRの画面に実行結果が出ます。



1 + 1
[1] 2


実行の仕方は,実行したい行を選択→Ctrl + Enter (Macでは⌘ + Enter)

左下の画面(console)に直接 1+1 と打ち込んでも同じ結果が出ますが,後で記録に残らないので,コードはスクリプト画面に書く,左下は結果の表示だけ,と使い分けた方が良いです。

3.2 課題

Rスクリプトに以下の内容を打ち込んでください。スクリプト右上のRunボタンを押すか,Control + Enter (Macの場合は⌘+Enter)で実行してください。

11+3
22*4
1
足し算
2
掛け算
[1] 4
[1] 8

4 Rプログラミングの基礎

ノート

このパートは森知晴先生(立命館大学総合心理学部)のサイト (卒業論文のためのR入門) 及び今井耕介先生(Harvard University / 東京大学)の著書 (社会科学のためのデータ分析入門)等を参考にしています。

4.1 計算

簡単な計算は,以下の通り

1+1 
[1] 2
2*6 #掛け算は*
[1] 12
2^4 #累乗は^
[1] 16
sqrt(16) #ルートはsqrt()
[1] 4

4.2 オブジェクト

Rでは情報を自分で名前をつけたオブジェクトとして保存できます。Rstudioでは,保存されたオブジェクトは右上のEnvironmentと言うところに表示されます。

x <- 3
y <- 5
z <- x * y

<-」(不等号<とマイナス- )の左はオブジェクト,右はその中身を表します。なので,「xという名前のオブジェクトに3を入れる」という指示をしています。これを実行すると画面右上にxというオブジェクトが表示されるはずです。xの中身を確認するには,そのオブジェクトの名前(今回の場合z)を打つと良いです。

z
[1] 15

文字列でもオブジェクトになります(その場合” “で囲みます)

univ <- "Apple"
univ
[1] "Apple"



複数の数値の並び(ベクトル)をオブジェクトとすることもできます。

vec <- c(1, 2, 3, 4, 5)
vec
[1] 1 2 3 4 5

ベクトルごと足し算とか掛け算とかもできます

1vec+2
2vec*2
1
各数字に2足す
2
各数字に2かける
[1] 3 4 5 6 7
[1]  2  4  6  8 10

縦×横の行列も作れます。matrixという名前です。

1mat <- matrix(c(435,165,265,135), ncol=2, byrow=TRUE)
mat
1
ncol=2は列の数, byrow=TRUEは,横に並べるということ。
     [,1] [,2]
[1,]  435  165
[2,]  265  135

例えばbyrow=FALSE にすると縦に並ぶ

mat2 <- matrix(c(435,165,265,135), ncol=2, byrow=FALSE)
mat2
     [,1] [,2]
[1,]  435  265
[2,]  165  135

縦横の名前をつけると

1rownames(mat) <- c("行1", "行2")
colnames(mat)<- c("列1", "列2")
mat
1
rownamesはrow(行)の名前,colnamesはcolumn(列)の名前
    列1 列2
行1 435 165
行2 265 135

4.3 データフレーム

オブジェクトの中で重要な形式として,データフレームがあります。これは,縦方向に観測値を、横方向に変数を並べたデータを言います。

1age <- c(18, 21, 22, 23, 34)
2gender <- c("female", "male", "male", "female", "female")
3dframe <- data.frame(age, gender)
dframe
1
年齢のベクトル
2
性別のベクトル
3
二つのベクトルをdframeという名前のデータフレームに

エクセル等のデータを読み込んで分析する場合は,このデータフレーム形式です。

データフレームの中の特定の列を指定する場合は,「データフレーム名$列名

dframe$gender
[1] "female" "male"   "male"   "female" "female"

4.4 関数

Rを使う上で最も重要。何がしかの命令をすると,何かの結果が返ってくる。

mean(dframe$age) #平均はmean
[1] 23.6
min(dframe$age) #最小値(最大値)はmin(max)
[1] 18
median(dframe$age) #中央値はmedian
[1] 22


上にあるように,Rのコマンドは基本的には,やること(実行する対象)という構造になっている。

  • mean(dframe$age)は,

    • やることが平均(mean)

    • 対象がデータフレームdframeのなかのageの列 (dframe$age)

4.5 プログラムの改行

Rではかっこ()やコンマ(,)の後など,コードの切れ目で開業しても動作します。特に()何重にもなる場合,改行したほうが見やすいかもしれません。例えば,上でやった行列の作成コマンド

mat <- matrix(c(435,165,265,135), ncol=2, byrow=TRUE)

は,以下のように書いても全く同じように動作します。

mat <- matrix(
  c(435,165,265,135), 
  ncol=2, 
  byrow=TRUE
  )

あまり改行しすぎるのもかえって読みにくいかもしれません。自分が見やすいように程よく改行してください。

mat <- 
  matrix(
  c(
    435,
    165,
    265,
    135
    ), 
  ncol=2, 
  byrow=TRUE)

5 分析のための準備

5.1 パッケージ

  • より高度なことをしたり,同じことをより簡単にしたりするために追加の機能を足すことができます。

    • この追加の機能をパッケージと言います。

ノート

RがスマートフォンのOSのようなもので,パッケージはアプリのようなもの。

Rのプログラムを格段にわかりやすくするパッケージであるtidyverseを使う準備をしてみます。パッケージは,最初に使う時にはインストールする必要があります(これは1回だけ。App Storeでアプリをとるような感じ)。

install.packages(tidyverse)

パッケージを使う時には,分析ファイルを実行する最初の段階で以下のコマンドを使います(スマートフォンにすでに入っているアプリを開くイメージ)。

library(tidyverse)

後で使うので,以下のパッケージも読み込んでおきます(みなさんは先にインストールしてください)。

library(magrittr)
library(googledrive)

5.2 Working Directoryの設定

次に,Rが作業する場所(wd)を設定します。これは次で読み込むデータが保存されていたり,プログラムの中で生成したデータが保存されたりする場所です。

パソコン上の場所をうまく指定できるのであれば,以下のようにコマンドを打てば良いです(下はMacでデスクトップをwdにした例)

setwd("~/Desktop")


場所の指定がうまくできない場合,Rstudio右下の箱の Filesタブから指定したいフォルダを選び,⚙マークから「Set As Working Directory」を選ぶことで,コマンドを実行してくれます (その後実行されたコマンドを自分のプログラムファイルにコピーしておくと次回以降便利)

6 データの読み込み

前回はデータを下記のように手打ちしました。

age <- c(18, 21, 22, 23, 34) #年齢のベクトル
gender <- c("female", "male", "male", "female", "female")#性別のベクトル
dframe <- data.frame(age, gender)

しかし,アンケートデータや,企業の会計データ等をこのように手打ちするのは現実的ではありません。エクセル等で集計されたデータを読み込むのが一般的です。

  • 例えばgoogle formsでアンケートを作成したら,googleスプレットシート(googleのエクセルみたいなもの)に自動的に集計されます。

以下では,エクセルファイルを読み込む方法についてまとめています。

6.1 csvファイルの取り込み

エクセルで列が変数,行が観測となるようにデータを作られていることを想定します。まず,これを表計算ソフト上でcsv形式でwdに保存します1

wdに入れたファイルを読み込むには,csv形式なら,read_csv("ファイル名") もしくはread.csv("ファイル名")を使います1。ここでは,tests.csvと言う名前のデータを,testsと言う名前で読み込んでいます。

tests <- read.csv("data/tests.csv")

読み込んだデータを見てみます。最初のいくつかだけが表示されるhead(データ名)コマンドが便利です。

head(tests)

6.2 (参考)Google Driveに保存されたcsvファイルの読み込み

データをグループで共有するときなどに便利です。

  1. google driveに保存したデータを共有(リンクを知っている人全員)に設定
  2. リンクurl(https://drive.google.com/file/d/*********/view?usp=sharing)の********の部分がidなので,その部分をメモしておく。
  3. 下記の通り,idを定義して,下記の通りのコードを実行すると,目当てのファイルを取り込める。


id = "1x7426qSraIRdcbgW3a0F8vMF181Q_DHF"

z = read_csv(sprintf("https://docs.google.com/uc?id=%s&export=download", id))

6.3 (参考)Dropboxに保存されたcsvファイルの読み込み

google driveと基本的に同じ

  1. Dropbox上のファイルを共有,リンクを取得
  2. リンクの最後 dl=0dl=1に変えて,read_csv (もしくは read.csv)コマンドで読み込めます
z2 <- read_csv("https://www.dropbox.com/s/6x344sfra54mcco/tests.csv?dl=1")

7 データの処理

分析に入る前に必要そうな処理を紹介します。

7.1 新しい変数の作成

現在のデータにはない,4教科の合計点が欲しい。新しい変数はmutate()で作る。ただし,mutateだけだと,変数を作ってどこにも保存してくれないので,保存場所を指定する必要があります。今回は元のデータに付け足す形で作ります。

tests <- tests %>% 
  mutate(all = math + japanese + history + physics)

tests に testsの中のデータを使って作った新しい変数を入れる。

tests

8 参考になるサイト

Rのコマンドやパッケージは無数にあります。いつも使うもの以外は覚えてられません。

でも大丈夫。ネット上にはさまざまなコマンドの紹介やエラーへの対処法が落ちています。

8.1 使い方全般

森知晴先生(立命館大学総合心理学部)のサイト (卒業論文のためのR入門)

  • インストール方法から学部卒論程度の分析までの使い方を詳しく説明してくれています。

  • 困ったらまずここ

私たちのRR for Political Science

  • 宋財泫先生(関西大学)と矢内勇生先生(高知工科大学)のサイト。
  • 森先生のやつより細かかったり詳しかったりする。

ここに載っていない場合は,「やりたいこと + R」でググると手っ取り早い

最近ならChatGPTに聞くっていう手も案外いけるらしい…

8.2 エラーについて

プログラミングをやってて一番むかつき,嫌いになる要因はエラーメッセージ


できることは

  1. エラーメッセージをちゃんと読むこと
  2. エラーメッセージをそのままググること

エラーが出てたら99.99%自分が悪い(パソコンは悪くない)」ということを自覚すること

9 参考:パイプ演算子

tidyversemagrittrパッケージのパイプ演算子を使うことで,同じコマンドをより読みやすくできます。これからは断りなくこれらのパッケージの機能を使います。

9.1 例1

読み込んだデータtestの算数(math)の平均点を求めたい。普通にやると4.4 関数にあるように,データフレーム名$列名で指定するので

mean(tests$math)


パイプ演算子%$%を使うと同じコマンドが以下のようになる

tests %$%
  mean(math)

これだとあまり何がいいのかわかりませんが,複数の変数を指定したいときなど,いちいちデータフレーム名を指定しなくて良いので便利です。

9.2 例2

以下は(1)testデータを使って,(2)数学の点数と他の点数の関係を分析(lm)した上で,(3)その結果を表示する(summary)もの。

summary(lm(math ~ japanese + physics ,data = tests))

日本語の順番と,コマンドの構造が反対 (結果を表示する→分析内容→データ)


全く同じことをパイプ演算子を使うと,(1) testデータで(2)分析をして(3)結果の要約を表示する,という思考の順番で書けます。

tests %$%
  lm(math ~ japanese + physics) %>% 
  summary

命令が複雑になる程効果が実感できます。

ちなみに%$%は,使うデータを指定するのに使う。%>%はコマンドの結果を次のコマンドに渡すのに使う。