経営システム分野 3年後期 (7712)
データサイエンス(前半)、担当:
林
木曜日 3-4限(10:30-12:00)@21号館 2139講義室
① データサイエンス(Data Science, DS)とは?
②
RやRStudioの有用性、インストール
③ 簡単な統計、データの読み込み
④ 集計、頻度、ヒストグラム、散布図、散布図行列
⑤ 重回帰分析
⑥
主成分分析、因子分析
⑦ レポート課題作成・提出
我々は何故データを集めるのでしょうか?
2020年(R2)秋に実施された「国勢調査」は何のため? 何で必要? 回答義務があることをご存知でしたか? 次回(2025年(R7)、5年毎)も是非提出してくださいね。 . .
統計手法の修得: 基礎統計量、多変量解析、実験計画法等、…
(Rに限らないが)コンピュータで取扱う文書ファイルやデータファイル、 プログラムファイル等を大量に保存する際に、 利用目的ごとにディレクトリ(フォルダと呼ぶと理解できるのかも)を作成して、 それぞれに分類すべく、階層的な構造で保存しておくことで 素早く目的のファイルを見つける・アクセスすることができる。 想像だが、皆さんもMS WordファイルやPDFファイル等を講義ごとや イベントごとのディレクトリに分類して利活用しているのではないか?
Rでのファイルの利用も同様であり、利用目的(中日ドラゴンズデータとか学生データとか)に 合わせてディレクトリを作成し、それぞれに関連したRプログラムやデータを それぞれに保存しておくと素早く探し出すことができる。 また、Rプログラム内からデータファイルを参照する際にも ディレクトリ名を含んだ長ったらしいファイル名を指定することも回避できる。
そこで、Rの利用に際して、利用のベース(基本場所)となるディレクトリを予め決めておき、 そこからの相対的位置でファイルを指定することで、参照方法が簡便になる。 このベースとなるディレクトリのことをRでは「Default working directory」 と呼んでおり、 RStudioの設定で指定しておくと起動時にそこに位置付けて利用できる。
参考までに、私の場合は、Dドライブにあるディレクトリ「home_sub3」 の下に、「R_Dir」というディレクトリを作成して、 ここをベース(基本場所)に利用しているが、 Dドライブである必要はなく、ディレクトリ名も自由に指定してもらって構わない。 ただし、トラブルを避けるために、ディレクトリ名やファイル名には漢字を用いず、半角英数字だけで指定するようにしてもらいたい。
つまり、インストールする前にという作業が必要になる。
以下のWebに作業手順が丁寧に説明されているので、これを利用させてもらうことにする。
RはRStudio内から操作されるので陽に意識する必要はない
3+5 # 加算
## [1] 8
5^3 # べき乗
## [1] 125
sqrt(5) # 平方根
## [1] 2.236068
【補足】以後、資料中の、灰色の囲みエリアは、Sourceペインでの利用者の入力画面を示し、白い囲みエリアはConsoleペインのシステムからの計算結果画面を示す。 また「#」(半角)マークより右側は利用者への説明のためのコメントであり、計算には影響しない。
任意の「式を入力」後、「Ctrl+Enter」で実行する。
現時点の「Default working directory」がどこに位置付けられているかも 確認しておこう。 RStudioを起動直後のSource ペインで「getwd()」を 実行したら、どのように表示されるであろうか? RStudioは前回の利用終了時点の環境を保存してくれるので、 もし前回のRのコマンドが表示されているSourceペインが表示されている場合は、 [File]-[New File]-[R Script]として新しいSourceペインを開いてから試してみよ。
getwd() # 現在のディレクトリを表示(Get Working Directory)
## [1] "D:/home_sub3/R_Dir"
ご自身の意図・指定したディレクトリが表示されているであろうか。 また、指定したディレクトリは作成されているであろうか。 作成されていないのであれば、4.1節の説明を参考に今回作成しよう。
今回は、RStudioを通してRを使ってみた。 現時点ではまだ自分でプログラムが組めるようになるとは思えないかもしれないが、順に習得していってくれればと思う。 また、プログラムを組むことも大事だが、 得られた数値(統計量)をどのように解釈するかにも注意を払えるようになってほしいと思っている。
【前半レポートの案】「ご自身が興味を持ったデータ」を分析して報告してもらう。以下で収集するデータの利用目的について説明するので、それにご理解いただけた方は、納得できる範囲で以下項目について「10月08日(火)昼まで」に Moodleのフォームから回答下さい。本日(第1回)の出欠調査を兼ねますので、 最低でも項目a~cは入力できるであろう。なお、期限を過ぎると回答できなくなります。
データを格納するために、変数やベクトル、行列の取り扱いを理解しよう。
値を保持させるものとして、英数字で変数を定義できる。 左矢印(に見えるかな?)で値を代入している(定義している)ことを示している。 その際、英字の大文字と小文字は別のものとして取り扱われることに注意せよ。
[操作] Sourceペイン(左上)に1行入力するごとに、「Ctrl+Enter」で実行する。 計算結果はConsoleペイン(左下)に表示される。以下では、薄い灰色部分が Sourceペインの入力を示している。このテキストからコピーペーストすれば手入力の手間を省くことができる。また、複数行を選択(ハイライト)後、 「Ctrl+Enter」をすると、複数行を一気に実行することができる。
なお、新たに定義された変数は、Environmentペイン(右上)に表示される。 また、シャープ記号(#)の後ろは「コメント」であり、Rの実行には無関係である。読者への説明用に記入してある。
a<-10 # 変数aに10を代入
b<-22 # 変数bに22を代入
A<-35 # 変数Aに35を代入
B<-48 # 変数Bに84を代入
a+b # 変数aと変数bを足して
## [1] 32
A*b # 変数Aと変数bをかけて
## [1] 770
A/B # 変数Aを変数Bで割って
## [1] 0.7291667
sqrt(A) # 変数Aの平方根は
## [1] 5.91608
皆さんのアンケートの中から、任意の5人を抽出して、 この5人のデータに対する処理方法を紹介する。
X1<-179 # 方法1
X2<-175
X3<-163
X4<-165
X5<-181
Xgoukei<-X1+X2+X3+X4+X5
Xheikin<-Xgoukei/5 # 単純計算で求める
Xheikin
## [1] 172.6
Xvec<-c(179,175,163,165,181) # 要素数5のベクトルの定義(方法2)
Xvec # 定義したベクトルを表示させてみる
## [1] 179 175 163 165 181
mean(Xvec) # ベクトルの要素の平均値を求める
## [1] 172.6
Y1<-87 # 方法1
Y2<-58
Y3<-65
Y4<-61
Y5<-67
Ygoukei<-Y1+Y2+Y3+Y4+Y5
Yheikin<-Ygoukei/5
Yheikin
## [1] 67.6
Yvec<-c(87,58,65,61,67) # 方法2
Yvec
## [1] 87 58 65 61 67
mean(Yvec)
## [1] 67.6
Xvec[1] # 1番目の要素の値は 179 =1人目の身長
## [1] 179
Yvec[4] # 4番目の要素の値は 61 =4人目の体重
## [1] 61
統計では、縦方向にサンプル(1人目、2人目、…)を、 横方向に変量(身長、体重等)を2次元的に配置して分析に供することが一般的である。
ベクトルを横方向に連結して行列を作る。ここでは取り上げないが、 新たなサンプルが採取できたような場合(サンプルの追加)は、縦方向に連結することになる。
XYmatrix<-cbind(Xvec,Yvec)
XYmatrix
## Xvec Yvec
## [1,] 179 87
## [2,] 175 58
## [3,] 163 65
## [4,] 165 61
## [5,] 181 67
特定の要素の値を参照するには角括弧で要素番号を指定する。
XYmatrix[1,1] # (1,1)の要素の値は179 =1人目の身長
## Xvec
## 179
XYmatrix[4,2] # (4,2)の要素の値は61 =4人目の体重
## Yvec
## 61
XYmatrix[,1] # 2次元目が1の要素を順に表示(=身長を全部表示)
## [1] 179 175 163 165 181
XYmatrix[3,] # 1次元目が3の要素を順に表示(3人目の要素を全部(身長と体重)表示)
## Xvec Yvec
## 163 65
mean(XYmatrix)
## [1] 120.1
mean(XYmatrix[,1]) # 身長の平均値を求める
## [1] 172.6
mean(XYmatrix[,2]) # 体重の平均値を求める
## [1] 67.6
# 方法1
sum((XYmatrix[,1]-mean(XYmatrix[,1]))^2)/(length(XYmatrix[,1])-1) # 一発で書くと
# 方法2: 方法1の各項を変数に代入して逐次的に値を確認してみる
XHensa<-XYmatrix[,1]-mean(XYmatrix[,1]) # 平均との偏差
XHensaSq<-XHensa^2 # 偏差の2乗
XHensaSqSum<-sum(XHensaSq) # 偏差の2乗和
Xlen<-length(XYmatrix[,1]) # データの個数
XVar<-XHensaSqSum/(Xlen-1) # 分散
XHensa # 平均との偏差
XHensaSq # 偏差の2乗
XHensaSqSum # 偏差の2乗和
Xlen # データの個数
XVar # 分散
# 方法3
var(XYmatrix[,1]) # 身長の分散を求める
# 方法1
## [1] 66.8
# 方法2
## [1] 6.4 2.4 -9.6 -7.6 8.4
## [1] 40.96 5.76 92.16 57.76 70.56
## [1] 267.2
## [1] 5
## [1] 66.8
# 方法3
## [1] 66.8
今後(次回でも)利用する関数を紹介しておく。 単体では「ありがたみ」が判らないかもしれないが。
seq(1:10) # 1から10まで10個の要素のベクトルを生成(1つずつ順に))
## [1] 1 2 3 4 5 6 7 8 9 10
seq(10,100,10) # 10から100まで10飛ばしで10個の要素のベクトルを生成
## [1] 10 20 30 40 50 60 70 80 90 100
rep(3,8) # 3を8回繰り返す
## [1] 3 3 3 3 3 3 3 3
3:7 # 3から7までを順に表示
## [1] 3 4 5 6 7
rep(3:7,3) # {3,4,5,6,7}のベクトルを3回繰り返す
## [1] 3 4 5 6 7 3 4 5 6 7 3 4 5 6 7
このページで取り扱ったプログラムだけを抜き出して以下に列挙しておく。
## 5. インストールできたかの確認
3+5 # 加算
5^3 # べき乗
sqrt(5) # 平方根
## 6. Default working directoryの確認
getwd() # 現在のディレクトリを表示(Get Working Directory)
## 9.1. 変数とベクトルを理解する
a<-10 # 変数aに10を代入
b<-22 # 変数bに22を代入
A<-35 # 変数Aに35を代入
B<-48 # 変数Bに84を代入
a+b # 変数aと変数bを足して
A*b # 変数Aと変数bをかけて
A/B # 変数Aを変数Bで割って
sqrt(A) # 変数Aの平方根は
X1<-179 # 方法1
X2<-175
X3<-163
X4<-165
X5<-181
Xgoukei<-X1+X2+X3+X4+X5
Xheikin<-Xgoukei/5 # 単純計算で求める
Xheikin
Xvec<-c(179,175,163,165,181) # 要素数5のベクトルの定義(方法2)
Xvec # 定義したベクトルを表示させてみる
mean(Xvec) # ベクトルの要素の平均値を求める
# [演習2]
Y1<-87 # 方法1
Y2<-58
Y3<-65
Y4<-61
Y5<-67
Ygoukei<-Y1+Y2+Y3+Y4+Y5
Yheikin<-Ygoukei/5
Yheikin
Yvec<-c(87,58,65,61,67) # 方法2
Yvec
mean(Yvec)
Xvec[1] # 1番目の要素の値は 179 =1人目の身長
Yvec[4] # 4番目の要素の値は 61 =4人目の体重
## 9.2. 行列への拡張
XYmatrix<-cbind(Xvec,Yvec)
XYmatrix
XYmatrix[1,1] # (1,1)の要素の値は179 =1人目の身長
XYmatrix[4,2] # (4,2)の要素の値は61 =4人目の体重
XYmatrix[,1] # 2次元目が1の要素を順に表示(=身長を全部表示)
XYmatrix[3,] # 1次元目が3の要素を順に表示(3人目の要素を全部(身長と体重)表示)
# [演習3]
mean(XYmatrix)
# [演習4]
mean(XYmatrix[,1]) # 身長の平均値を求める
mean(XYmatrix[,2]) # 体重の平均値を求める
# [演習5]
# 方法1
sum((XYmatrix[,1]-mean(XYmatrix[,1]))^2)/(length(XYmatrix[,1])-1) # 一発で書くと
# 方法2: 方法1の各項を変数に代入して逐次的に値を確認してみる
XHensa<-XYmatrix[,1]-mean(XYmatrix[,1]) # 平均との偏差
XHensaSq<-XHensa^2 # 偏差の2乗
XHensaSqSum<-sum(XHensaSq) # 偏差の2乗和
Xlen<-length(XYmatrix[,1]) # データの個数
XVar<-XHensaSqSum/(Xlen-1) # 分散
XHensa # 平均との偏差
XHensaSq # 偏差の2乗
XHensaSqSum # 偏差の2乗和
Xlen # データの個数
XVar # 分散
# 方法3
var(XYmatrix[,1]) # 身長の分散を求める
## 9.3. 便利な関数: seq(), rep()
seq(1:10) # 1から10まで10個の要素のベクトルを生成(1つずつ順に))
seq(10,100,10) # 10から100まで10飛ばしで10個の要素のベクトルを生成
rep(3,8) # 3を8回繰り返す
3:7 # 3から7までを順に表示
rep(3:7,3) # {3,4,5,6,7}のベクトルを3回繰り返す