続
     はじめての
TOKYO.R #21
簑田   高志

              <#>
目次

1. 自己紹介
2. 前回までのあらすじ
3. 続・はじめてのR
4. まとめ




               ※ スクリーンショットや機能等はMac版となります。
自己紹介



•   名前        :簑田 高志
•   Twitter   :aad34210
•   ブログ       :http://pracmper.blogspot.com/
•   出身地       :熊本県
•   出身学部      :法学部
•   仕事        :インターネット広告のアナリスト
前回までのあらすじ
• はじめてRをさわる方、Rを触り初めて数カ月の方に向
  けて、Rの基礎的な部分をお話ししました。

• どんな内容だったかというと…
   1. インストール
   2. 起動と終了
   3. demo()の利用
   4. データへのアクセス方法
   5. データ集計方法
   6. 関数
   7. 自作関数(Function)
   8. パッケージ

• 前回の資料はSlideshareに公開しています。
    http://www.slideshare.net/aad34210/tokyo-r18
今回の話
 • 今回の話は前回の続き。
 • Rの基礎編です。

  i. 条件分岐
  ii. ループ
  iii.グラフ作成
  iv.統計解析

 • 資料中は、コードと例文を以下のようにハイライト
   しています。
    • 基本コード:Sample
    • 例文: Sample
そんな話を知ってるよ!という方は…
• 私は初心者ではないので、そんな話
  は聞かなくても大丈夫!という方。
• そういう方は…




 この本をAmazonで注文し   今日のTokyoRに参加している人が!
 ておいてください。        持ってくるとサインもらえるかも?!
条件分岐


       <#>
条件分岐
• ある条件で場合分けをしたい場合に利用する。



              値:A



                 条件


              A >= 0 → K
              A< 0 → Z

      値:Z                  値:K
条件分岐
• 条件分岐とは?
   • ある条件で場合分けをしたい場合はIf文、Else文を使う。
      • if (条件文){処理内容}

• 例えば…
   • 売上金額が10万以上であれば、A-Class、それ以外はOther。
   x <- 100000
   if (x >= 100000)
         {print ("A-Class")} else {print("Other")}
条件分岐
• IFELSE文
    • IFELSE文で一つのコードでIF文ができる。
        • ifelse(条件,データが真の場合,偽の場合)

• 例えば…
   • 売上金額が10万以上であれば、Aクラス、それ以外はOther。
   x <- 100000
   ifelse(x >= 100000 , "A-Class" , "B-Class")
条件分岐
• SWITCH文
   • 複数の条件で分岐させたい場合
      • switch(データ,ケース1 , ケース2 , 一致する場合がないケース)

• 例えば…
   • Tokyoから売上が上がっている場合は、Japanを。それ以外はOther
  city <- "Tokyo”
  switch(city ,"Tokyo" = print("Japan") , print("Other"))
ループ


      <#>
ループ
• For文は他のプログラミング言語と同じように、「繰り返し」処理ができ
  る。
• 幾つもの同じような処理をコピペして処理をさせなくても、ループ処理
  を利用することにより、大幅に作業時間を減らすことができる。

             処理A   処理A
                         4回同じ処理を繰り返す

             処理A   処理A




                             繰り返し文を利用
               処理A           して処理を4回行
                             う。
FOR文
• For文
   • ある処理を繰り返し行いたい場合に利用する。
       • for (ループ変数 in リスト) {処理}

• 例えば…
   • 1〜5までを合計する。
    x <- 0
    for (i in 1:5) {x <- x +1}
    x

    • ベクトルを表示させる。
    x <- c(10000 , 20000 , 30000)
    for (i in 1:length(x)){print(x[i])}
WHILE文
• While文
   • ある条件が成り立っている場合にずっとループ処理をし続ける。
   • 注意:ずっと条件が成り立っている場合は、無限ループしてしまう
      ので、気をつけること。
       • while (条件式) {処理}

• 例えば…
   • 5以下を足し続ける。
  x <- 0
  while (x <= 4) {x <- x +1}
  x
例題(1)
• IF文(条件分岐)、For文(繰り返し)、Function(自作関数(前回説
  明))を組み合わせると、処理がまとまり、関数化することができる。
    • → 処理の自動化が可能。

• 問題
   • 1〜100までの数字の中で、2の倍数であれば、“Fiz”、それ以外は数を
     表示するプログラムを作成しなさい。
• 回答
  •    For文で1:100までをベクトル生成
  •    2の倍数:“%%”で余りを計算
  •    2の倍数の余りをIFELSE文で判定。
  •    Print文で表示
  for (i in 1:100) {print(ifelse( i%%2 == 0 , "Fizz" , i ))}
例題(2)
• 前のページの問題は意外とすぐにとける


• では、   世界のナベアツでやってみよう。
• 問題
   • 1〜100までの数字の中で、
   • 3の倍数         :“Aho” と表示
   • 5 の倍数        :“アホ” と表示

• 回答
   • For文で1:100までをベクトル生成
   • 3の倍数:“%%”で余りを計算し割り切れる数を判定
   • 5の倍数:“%%”で余りを計算し割り切れる数を判定
   • それぞれIF文で“Aho”か“アホ”か判定
   • Print文で表示
例題(3)
  for( i in 1:100) {
  if (i%%3 == 0 ) {print("Aho")}
        else if (i%%5 == 0) {print("アホ")}
             else {print(i)}
  }


                関数化(Function)にしてみよう。
                利用する変数
                  ・ベクトル数          :n
                  ・Ahoと表示する倍数 :baisuu1
                  ・アホと表示する倍数      :baisuu2

 nabeatsu <- function(n , baisuu1 , baisuu2) {
     for( i in 1:n) {
     if (i%%baisuu1 == 0 ) {print("Aho")}
           else if (i%%baisuu2 == 0) {print("アホ")}
                else {print(i)}
     }
 }
例題(3)本当の世界のナベアツを実装してみた

• 問題で使ったナベアツ問題
   • 1〜100までの数字の中で、
   • 3の倍数         :“Aho” と表示
   • 5 の倍数        :“アホ” と表示



• 本当のナベアツは…
   • 1〜100までの数字の中で、
   • 3の倍数         :“Aho” と表示   3のつく倍数をアホに
   • 3のつく倍数       :“アホ” と表示    しなきゃいけない


• 数字のベクトルであれば「%%」を利用することで、判定が可能。
• でも「3がつく数」ってどう判定するのか?
   • → grepを利用して判定すれば良いかも。
例題(3)本当の世界のナベアツを実装してみた
• 問題
   • 1〜100までの数字の中で、
   • 3の倍数         :“Aho” と表示
   • 3がつく数        :“アホ” と表示

# 3の倍数はアホ、3の着く数字はAho
true_nabeatsu <- function(n , baisuu1 , baisuu2) {
     for( i in 1:n) {
     if (i%%baisuu1 == 0 ) {print("Aho")}
            else if (!i%%baisuu2|grepl(baisuu2,i) == TRUE) {print("アホ")}
                  else {print(i)}
     }
}
true_nabeatsu(100 , 5 , 3)
グラフ作成


        <#>
グラフ作成
• データを解析する前に、変数がどのような分布になっているかをビジュ
  アルで確認して、データの分布等を確かめる。
• 結果をレポートとしてまとめ、レビュアー(報告者)への理解を深める
  ためにグラフを作成する。
• グラフ作成は「奥が深い」ため、今回は代表的なグラフのみ紹介して、
  残りのパッケージ等はAppendixとして紹介します。
                                                           Edgar Anderson's Iris Data
                                                         2.0 2.5   3.0   3.5   4.0                                    0.5   1.0   1.5 2.0   2.5




                                                                                                                                                  7.5
                                                                                                                                                  6.5
                                 Sepal.Length




                                                                                                                                                  5.5
                                                                                                                                                  4.5
                                                                                                                                                                Given : depth
                                                                                                                        100                 200               300           400               500           600
           2.0 2.5 3.0 3.5 4.0




                                                           Sepal.Width

データ




                                                                                                                                                  7
                                                                                                                                                  6
1,2,3,


                                                                                                                                                  5
                                                                                         Petal.Length 165             170     175     180     185                                       165     170   175   180       185




                                                                                                                                                  4
                                                                                                                                                                                                                                      Notched Boxplots




                                                                                                                                                                                                                                -10
                                                                                                                                                  3
                                                                                                                                                  2




                                                                                                                                                                                                                                -15
4,5,6,

                                                                                                                                                  1




                                                                                                                                                                                                                                -20
           0.5 1.0 1.5 2.0 2.5




                                                                                                                                                                                                                                -25
                                                                                                                                                                                         6
7,8,9




                                                                                                                                                                                                                                -30
                                                                                                                      Petal.Width




                                                                                                                                                                                                                                -35
                                                                                                      lat




…
                                                                                                            -10




                                 4.5   5.5   6.5   7.5                               1    2   3   4     5   6     7




                                                                                                                                                                                         4
                                                                                                            -15
                                                                                                            -20
                                                                                                            -25
                                                                                                            -30




                                                                                                                                                                                         2
                                                                                                            -35




                                                                                                                                                        165   170   175   180     185


                                                                                                                                                                     long
                                                                                                                                                                                         0




                                                                                                                                                                                                       1          2         3         4    5    6    7   8   9   10

                                                                                                                                                                                                                                           Group
散布図
• データがどのような散らばり具合をしているのかを調査したい場合、散
  布図を描きます。
   • plot(x , y)
 #ベクトルの表示
 data <- c(1:100)
 plot(data)
 #irisのSepal.lengthとSepal.Widthの散布図
 plot(iris[,1] , iris[,2])
                   #ベクトルの表示                                                  #irisのSepal.lengthと
                                                                             Sepal.Widthの散布図
        100




                                                                4.0
        80




                                                                3.5
        60
 data




                                                    iris[, 2]

                                                                3.0
        40




                                                                2.5
        20




                                                                2.0
        0




              0   20   40           60   80   100
                                                                      4.5   5.0   5.5   6.0         6.5   7.0   7.5   8.0
                            Index
                                                                                        iris[, 1]
散布図
• 変数が多くある場合、変数の1つずつの組み合わせだと手間がかかるの
  で、一気に組み合わせてみてみたい場合。
   • plot(dataframe)
   • pars(dataframe)

 #複数変数の散布図組合せ(対散布図)
 plot(iris[-5])
 #複数変数の対散布図(種類による色分け)
 pairs(iris[1:4], pch = 21,bg = c("red" , "green3" ,
 "blue")[unclass(iris$Species)])
散布図

                            #複数変数の散布図組合せ(対散布図)                                                                                                                 #複数変数の対散布図(種類による色分け)
                                              2.0 2.5   3.0   3.5   4.0                                0.5   1.0   1.5 2.0   2.5                                                       2.0    2.5   3.0   3.5   4.0                                0.5   1.0   1.5   2.0   2.5




                                                                                                                                                                                                                                                                                 7.5
                                                                                                                                   7.5




                                                                                                                                                                                                                                                                                 6.5
                                                                                                                                   6.5
                      Sepal.Length                                                                                                                             Sepal.Length




                                                                                                                                                                                                                                                                                 5.5
                                                                                                                                   5.5




                                                                                                                                                                                                                                                                                 4.5
                                                                                                                                   4.5




                                                                                                                                         2.0 2.5 3.0 3.5 4.0
2.0 2.5 3.0 3.5 4.0




                                                Sepal.Width                                                                                                                                  Sepal.Width




                                                                                                                                                                                                                                                                                 7
                                                                                                                                   7




                                                                                                                                                                                                                                                                                 6
                                                                                                                                   6




                                                                                                                                                                                                                                                                                 5
                                                                                                                                   5
                                                                                                                                                                                                                          Petal.Length




                                                                                                                                                                                                                                                                                 4
                                                                              Petal.Length
                                                                                                                                   4




                                                                                                                                                                                                                                                                                 3
                                                                                                                                   3




                                                                                                                                                                                                                                                                                 2
                                                                                                                                   2




                                                                                                                                                                                                                                                                                 1
                                                                                                                                   1




                                                                                                                                         0.5 1.0 1.5 2.0 2.5
0.5 1.0 1.5 2.0 2.5




                                                                                                                                                                                                                                                   Petal.Width
                                                                                                       Petal.Width


                                                                                                                                                               4.5   5.5   6.5   7.5                                  1    2   3   4   5   6   7
                      4.5   5.5   6.5   7.5                               1    2   3   4   5   6   7
線グラフ(折れ線グラフ)
• データがどのように変化しているのかを分かるようにする。
• 実は折れ線グラフは散布図にラインを引いただけなので比較的簡単に作
  成できます。(type = “l”を指定)
   • plot(データ , type = “l”)
#aho_dataを使って折れ線グラフ
plot(aho_data[,1] , type = "l”) 100
                                80
                                60
                aho_data[, 1]

                                40
                                20
                                0




                                      0   20   40           60   80   100

                                                    Index
棒グラフ(1)
• データがどの因子でどのぐらいボリュームになっているかを一目で分か
  る。
   • barplot(データ)
  #単純な棒グラフ
  barplot(1:10)
  #色つき棒グラフ
  barplot(matrix(1:20, 5), col=rainbow(5))


        #単純な棒グラフ          #色つき棒グラフ
   10




                    80
   8




                    60
   6




                    40
   4




                    20
   2




                    0
   0
棒グラフ(2)
• データがどの因子でどのぐらいボリュームになっているかを一目で分か
  る。
   • barplot(データ)
  #種類ごとでの棒グラフ
  barplot(table(iris[,5]))
  #色を付けたい場合
  barplot(table(iris[,5]),col = c("red" , "green" ,"yellow"))


             #単純な棒グラフ                                        #色つき棒グラフ
        50




                                               50
        40




                                               40
        30




                                               30
        20




                                               20
        10




                                               10
        0




                                               0




             setosa   versicolor   virginica        setosa     versicolor   virginica
棒グラフ(3)
• 先ほどの“Aho”、“アホ”をそれぞれカウントして棒グラフを作ってみま
  しょう。
  #データフレームの作成
 aho_data <- data.frame(1:100)
 #グラフ用データの作成
 aho_data$hantei <- ifelse(aho_data[,1]%%3 == 0,"aho",ifelse(aho_data[,1]%%5 == 0 ,"アホ","天才
 "))
 #Barplotの作成
 barplot(table(aho_data[,2]) , col = c("green" , "blue" , "red"))
                         50
                         40
                         30
                         20
                         10
                         0




                                 aho
参考(1):ggplot2
• これまで紹介したのはRのデフォルトで利用できるパッケージ。
• 自分で色々と細かく設定できるのがメリットですが、簡単に綺麗なグラ
  フを書きたい場合は、ggplot2というパッケージがおすすめ。




• 過去に発表しています。
   • http://www.slideshare.net/aad34210/ggplot2-110129-6739813
参考(2):demo()
• demo()という関数を利用することで、パッケージの参照デモをみること
  ができます。
                                  #demo()のgraphicsを見てみる
                                  demo(graphics)




                                                                                                                                                                                               Given : depth
                                                Edgar Anderson's Iris Data                                                                                   100               200           300           400               500           600
                                                                                                                                                                                                                                                                             Notched Boxplots
                                              2.0 2.5   3.0   3.5   4.0                                0.5   1.0   1.5 2.0   2.5
                                                                                                                                   7.5




                                                                                                                                                                                                                                                             6
                                                                                                                                   6.5




                      Sepal.Length
                                                                                                                                   5.5
                                                                                                                                   4.5




                                                                                                                                                     165   170     175   180     185                                   165     170   175   180   185




                                                                                                                                                                                                                                                             4
                                                                                                                                                                                                                                                       -10
2.0 2.5 3.0 3.5 4.0




                                                                                                                                                                                                                                                       -15
                                                Sepal.Width




                                                                                                                                                                                                                                                       -20
                                                                                                                                                                                                                                                       -25




                                                                                                                                                                                                                                                             2
                                                                                                                                                                                                                                                       -30
                                                                                                                                   7
                                                                                                                                   6




                                                                                                                                                                                                                                                       -35
                                                                                                                                   5




                                                                                                                                         lat




                                                                              Petal.Length
                                                                                                                                   4




                                                                                                                                               -10
                                                                                                                                   3




                                                                                                                                               -15
                                                                                                                                   2




                                                                                                                                                                                                                                                             0
                                                                                                                                   1




                                                                                                                                               -20
0.5 1.0 1.5 2.0 2.5




                                                                                                                                               -25
                                                                                                                                               -30




                                                                                                       Petal.Width
                                                                                                                                               -35




                                                                                                                                                                                                                                                                 1   2   3   4    5    6    7   8   9   10
                                                                                                                                                                                       165   170   175   180     185

                      4.5   5.5   6.5   7.5                               1    2   3   4   5   6   7                                                                                                                                                                              Group
                                                                                                                                                                                                    long
参考(3):グラフサンプル集
• ネット上では有益なサンプル集がありますので、それを利用しない手は
  ありません。
  ■R Graphical Manual
  http://rgm2.lab.nig.ac.jp/RGM2/images.php?show=all&pageID=1958




• 過去に発表しています。
   • http://www.slideshare.net/aad34210/tokyo-r-no8
統計解析


       <#>
統計解析
• グラフ作成と同様に奥のふかーい分野。
• 今回はデータ全体がどのような分布になっているかを簡単に調査するための関数を紹

  #最大値
  max(aho_data[,1])
  #最小値
  min(aho_data[,1])
  #レンジ(最大値、最小値)
  range(aho_data[,1])
  #平均
  mean(aho_data[,1])
  #中央値
  median(aho_data[,1])
  #四分位点
  quantile(aho_data[,1] )
  #サマリ(平均値、中央値、四分位点)
  summary(aho_data[,1])


 各種統計パッケージの話は、過去や今後のTokyoRで見てみてください!
まとめ


      <#>
まとめ
  • IF文
      • 条件分岐をさせたい時に利用する。ifelse も使えるよ
  • For文
      • 繰り返し処理を行いたい場合に利用する。
      • 条件が正の場合に繰り返し処理をするWhileもある。
  • FizzBuzz
      • IF文とFor文を使って、FizzBuzz問題を解く。
      • 世界のナベアツもできるよ!
  • グラフ作成
      • 奥の深い世界…
      • demo(graphics)で試してみよう。
      • plot,barplot
      • ggplot2など様々なパッケージがある。
  • 統計解析
      • 簡単な関数で、統計量を計算することができる。
      • max,min,range,quantile,summary
参考文献・資料
  R-Tipe       :http://cse.naro.affrc.go.jp/takezawa/r-tips/r.html
  The R tips   :http://ow.ly/9yFPs
  ggplot2      :http://had.co.nz/ggplot/
ご清聴ありがとうございました
     m(___)m

Tokyo r21 修正版