Rの基本的な使い方(可視化、ライブラリの紹介)
とある学生団体内部勉強会の第3回目の内容となります。
1回目はというと自分は2回目からの参加で、
実はやってないので近い内に演習やって載せます。
データ型
Rが保有するデータ型の一例
- numeric : 数値(整数と小数、正数と負数、0を含む)
→現状、ザックリとcharacter・logical以外の"数"って考えると良さそう。
- integer : 整数値
- double : 浮動小数点
- character : 文字列
- logical : 論理値…TRUE, FALSE
データ型を確かめる
今回は以下の関数を使用しました。
- class()
- is.numeric()
- is.integer()
- is.double()
- is.logical()
変数が保持するデータ型を確認する時はclass関数
> x <- 7 > class(x) [1] “numeric”
変数がnumericかどうかをテストするにはis.numeric関数を使う
# numericであるときはTRUE(真)、 # そうでないときはFALSE(偽)と返ってくる > x <- 7 > is.numeric(x) [1] TRUE
変数がintegerかどうかをテストするにはis.integer関数を使う。
同様に、他のデータ型かどうか確認する場合もis.(データ型名)関数
> x <- 5L # 数字の後ろにLをつけると整数に指定できる > is.integer(x) [1] TRUE > is.logical(x) [1] FALSE
手元で検証した内容
# xはintegerの5、yはdoubleの2.0 > x <- 5L > y <- 2.0 > is.double(y) [1] TRUE > is.double(x + y) [1] TRUE
以上より、
2ではなく、2.0だとdouble扱いで代入してくれる
演算integer + double = doubleらしい
ベクトル演算
ベクトルは同じ型の要素を集めたもの
> x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) > x [1] 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 > y <- c(“R”, “Excel”, “Python”, “SAS”) > y [1] “R”, “Excel”, “Python”, “SAS” > is.character(y) [1] TRUE
> x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) > x * 3 # xの要素それぞれに3をかける [1] 3 6 9 12 15 18 21 24 27 30 > x / 4 # xの要素それぞれに4を割る [1] 0.25 0.50 0.75 1.00 1.25 1.50 1.75 2.00 2.25 2.50 > x^2 # xの要素それぞれを二乗する [1] 1 4 9 16 25 36 49 64 81 100 > sqrt(x) # xの平方根 [1] 1.000000 1.414214 1.732051 2.000000 2.236068 2.449490 2.645751 [8] 2.828427 3.000000 3.162278
> x <- 1:10 # 1から10までの数字からなるベクトルを生成 [1] 1 2 3 4 5 6 7 8 9 10 > length(x) # ベクトルxの長さを確認 [1] 10 > x > 4 # ベクトルxの各要素に対して比較演算子を使う [1] FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE > x[1] # ベクトルxの1番目の要素を取り出す [1] 1 > x[3:7] # ベクトルxの3番目から7番目の要素を取り出す [1] 3 4 5 6 7
Rのベクトル演算便利やん。
CSVファイルとExcelファイルを読み込んでみる
RではCSVファイルからデータを読み込む際、read.table関数を使う。
read.table関数はread.table(ファイル, ヘッダー有無, 区切り文字)のように指定してあげるとテーブルとしてデータを成形してくれる。
url <- "https://hoge/fuge.csv" # 変数urlにURLを代入 piyo <- read.table(file = url, header = T, sep =",")
Excelデータ(.xls・.xlsx)をreadxlパッケージを使って読み込む。
# readxlパッケージをインポート&ロード install.packages("readxl") library(readxl)
今回の演習では, 以下のJared P. Lander氏のデータセットを使う。
https://www.jaredlander.com/data/
これを参考にワークスペースの指定(移動)をした。
qiita.com
# ExcelExample.xlsxファイルのシートを確認 # シングルクォーテーション'と # ダブルクォーテーション"を間違わないように > excel_sheets('ExcelExample.xlsx') [1] "Tomato" "Wine" "ACS" # TomatoシートとWineシート、ACSシートがあることがわかる。
ExcelExample.xlsxからトマトのデータを読み込む
> tomatoXL <- read_excel(‘ExcelExample.xlsx’) #どこのシートか指定しない場合は、 # read_excelは1枚目のシートを読み込む。 # 読み込むシートを選択したい場合は、 # シートの位置を数値で指定するか、 > wineXL <- read_excel('ExcelExample.xlsx', sheet = 2) # シート名を文字として指定する > wineXL <- read_excel('ExcelExample.xlsx', sheet = "Wine")
基本グラフィックス
今回の演習では、ダイヤモンドのデータを使用。
図やグラフをプロットするパッケージはggplot2を使用。
diamondsデータはggplot2パッケージに含まれる
ggplot2
ggplot2とは, グラフィックスをより簡単にするために作られたもの
RSstudio公式サイトにチートシートがあった。
現状見ても象形文字の如く、解読できないからからゴリゴリに使い倒せるようになりたい。
https://www.rstudio.com/wp-content/uploads/2016/10/ggplot2-cheatsheet-2.0-ja.pdf
ggplot2を使ったグラフィックでは, グラフを構成する要素をパズルのように組み合わせて, 1枚の絵を描くようにグラフを描く
> g <- ggplot() # 新しいキャンパスを用意 > print(g)
上のコードを実行すると、何も描かれていないキャンパスが表示される
このキャンバスにグラフのレイヤを重ねていく
geomオブジェクト(geometric object)
データを特定のgeomに渡すことで,
データがそれぞれのグラフとして表現される
ヒストグラム
ヒストグラムは1変数データの最も基本的なグラフであり,
ある変数の分布を示す。
diamondsデータのcarat列に対するヒストグラム
> hist(diamonds$carat, main = "Carat Histgram", xlab = "Carat")
散布図
散布図は2つの変数を比べてみる際によく使われる。
描画されている全ての点が2つの変数に関するデータを表す。
x軸がある変数を、y軸がもう一方の変数を表す。
> plot(price~carat, data = diamonds)
箱ひげ図
箱ひげ図はデータのばらつき具合をわかりやすく表現するためのグラフ
演習1
演習用のExcelファイル「0420ex.xlsx」ファイルを読み込み,
1番目のシートにある50人の数学と国語のテストの結果について
それぞれヒストグラムと箱ひげ図を作ってみよう
前回でも申し上げましたが、
「>」は打ち込む必要がなく、「+」も同様です
> hist(score$数学, + main = "The Score of Math Histgram", + xlab = "Score")
> hist(score$国語, + main = "The Score of Histgram", + xlab = "Score")
> boxplot(score$数学)
> boxplot(score$国語)
演習2
ggplotとデータセットmpgを使っていろいろなグラフを描いてみよう
以下のコードを実際に実行してみて, 結果がどのようになるのかを確認する
ggplot2の使用例①(エンジンの大きさのデータ分布)
> ggplot() + geom_histogram(data = mpg, mapping = aes(x = displ))
※このままだとビン幅(棒グラフの幅)を指定した方が良きとエラーの如く言われるので、以下参考に直してみましょう。(筆者は就活が...読者に丸投げ)
ggplot2でビン幅を自動的に決めたヒストグラム - Qiita
> ggplot() + geom_density(data = mpg, mapping = aes(x = displ))
エンジンの大きさのデータ自体は小さいものが多くて、大きいものが少ないことがわかりますね
補足:
geom_histogram()とgeom_density()では, X軸に変数をマッピングすると, 自動的に対応するY軸の値が計算されて描画されるため, Y軸の変数を指定する必要がない
ggplot2の使用例②(エンジンの大きさと燃費の関係)
エンジンの大きさdisplと燃費ctyの関係を散布図で確かめてみよう
> ggplot() + geom_point(data = mpg, mapping = aes(x = displ, y = cty))
この図より、
x軸がエンジンの大きさ、y軸が燃費とされているので、
エンジンが大きくなるに連れて、燃費が低くなる
という相関関係があることがわかりますね。