2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

"colab.fan/r"というURLに、R言語ランタイムが設定済みのGoogle Colaboratoryがある(GPU環境):Rを定義したipynbファイルのアップロード不要

Last updated at Posted at 2020-12-31

####次のURLにアクセスすると、R言語のランタイムが設定されているColaboratoryが開きます。

###https://colab.fan/r

  • 「編集」 -> 「ノートブックの設定」を開くと、「ランタイムのタイプ」欄が「R」になっています。
  • また、「ハードウェア アクセラレータ」欄で「GPU」を選択することができます。

スクリーンショット 2020-12-31 20.49.55.png

###( 参考にしたwebページ )

たびたび、Google ColaboratoryでのPythonの使用法を紹介してきましたが、Rも使えるようになったようです。

通常のGoogle ColaboratoryからはRを使えません、、、たぶん。

正式な対応かどうか不明ですが、次のリンクを開くとRを実行できます。

https://colab.fan/r

#使ってみた。

qiitaにcopy&pasteするにあたり、以下の手順を踏みました。

1. ColaboratoryからGUI操作で、「ファイル」 -> 「.ipynbをダウンロード」を実行
2. ローカルPCのTerminalで、% jupyter notebookを実行して、Jupyter Notebookをブラウザで起動
3. ローカルのブラウザで開かれたJupyter Notebookで、「1」でダウンロードしたipynbファイルを選択して、開く
4. Jupyter Notebookで、「ファイル」 -> 「名前を付けてダウンロード」 -> 「Markdown(.md)」を選択して実行
5. ローカルPCに、zipファイルができる。(画像ファイルと、markdown書式のテキストファイルが格納されている)
6. Qiitaに、markdowsをcopy&pasteし、画像ファイルをアップロードする。

この記事で動かしたRのコードを、上記のGoogle Colaboratory上で実行してみました。

安井 翔太(著)『効果検証入門』(技術評論社)を読んでいて、Rのパイプ関数(%>%)が使い勝手が良さそうだったので、写経して使ってみた。

実行したコードは、安井 翔太(著)『効果検証入門』(技術評論社)に掲載されているものです。

Colaboratory(R)
library(tidyverse)
── [1mAttaching packages[22m ─────────────────────────────────────── tidyverse 1.3.0 ──

[32m✔[39m [34mggplot2[39m 3.3.2     [32m✔[39m [34mpurrr  [39m 0.3.4
[32m✔[39m [34mtibble [39m 3.0.4     [32m✔[39m [34mdplyr  [39m 1.0.2
[32m✔[39m [34mtidyr  [39m 1.1.2     [32m✔[39m [34mstringr[39m 1.4.0
[32m✔[39m [34mreadr  [39m 1.4.0     [32m✔[39m [34mforcats[39m 0.5.0

── [1mConflicts[22m ────────────────────────────────────────── tidyverse_conflicts() ──
[31m✖[39m [34mdplyr[39m::[32mfilter()[39m masks [34mstats[39m::filter()
[31m✖[39m [34mdplyr[39m::[32mlag()[39m    masks [34mstats[39m::lag()
Colaboratory(R)
iris$Sepal.Length
<style>
.list-inline {list-style: none; margin:0; padding: 0}
.list-inline>li {display: inline-block}
.list-inline>li:not(:last-child)::after {content: "\00b7"; padding: 0 .5ex}
</style>
<ol class=list-inline><li>5.1</li><li>4.9</li><li>4.7</li><li>4.6</li><li>5</li><li>5.4</li><li>4.6</li><li>5</li><li>4.4</li><li>4.9</li><li>5.4</li><li>4.8</li><li>4.8</li><li>4.3</li><li>5.8</li><li>5.7</li><li>5.4</li><li>5.1</li><li>5.7</li><li>5.1</li><li>5.4</li><li>5.1</li><li>4.6</li><li>5.1</li><li>4.8</li><li>5</li><li>5</li><li>5.2</li><li>5.2</li><li>4.7</li><li>4.8</li><li>5.4</li><li>5.2</li><li>5.5</li><li>4.9</li><li>5</li><li>5.5</li><li>4.9</li><li>4.4</li><li>5.1</li><li>5</li><li>4.5</li><li>4.4</li><li>5</li><li>5.1</li><li>4.8</li><li>5.1</li><li>4.6</li><li>5.3</li><li>5</li><li>7</li><li>6.4</li><li>6.9</li><li>5.5</li><li>6.5</li><li>5.7</li><li>6.3</li><li>4.9</li><li>6.6</li><li>5.2</li><li>5</li><li>5.9</li><li>6</li><li>6.1</li><li>5.6</li><li>6.7</li><li>5.6</li><li>5.8</li><li>6.2</li><li>5.6</li><li>5.9</li><li>6.1</li><li>6.3</li><li>6.1</li><li>6.4</li><li>6.6</li><li>6.8</li><li>6.7</li><li>6</li><li>5.7</li><li>5.5</li><li>5.5</li><li>5.8</li><li>6</li><li>5.4</li><li>6</li><li>6.7</li><li>6.3</li><li>5.6</li><li>5.5</li><li>5.5</li><li>6.1</li><li>5.8</li><li>5</li><li>5.6</li><li>5.7</li><li>5.7</li><li>6.2</li><li>5.1</li><li>5.7</li><li>6.3</li><li>5.8</li><li>7.1</li><li>6.3</li><li>6.5</li><li>7.6</li><li>4.9</li><li>7.3</li><li>6.7</li><li>7.2</li><li>6.5</li><li>6.4</li><li>6.8</li><li>5.7</li><li>5.8</li><li>6.4</li><li>6.5</li><li>7.7</li><li>7.7</li><li>6</li><li>6.9</li><li>5.6</li><li>7.7</li><li>6.3</li><li>6.7</li><li>7.2</li><li>6.2</li><li>6.1</li><li>6.4</li><li>7.2</li><li>7.4</li><li>7.9</li><li>6.4</li><li>6.3</li><li>6.1</li><li>7.7</li><li>6.3</li><li>6.4</li><li>6</li><li>6.9</li><li>6.7</li><li>6.9</li><li>5.8</li><li>6.8</li><li>6.7</li><li>6.7</li><li>6.3</li><li>6.5</li><li>6.2</li><li>5.9</li></ol>
Colaboratory(R)
head(diamonds)
A tibble: 6 × 10
carat cut color clarity depth table price x y z
<dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
0.29 Premium I VS2 62.4 58 334 4.20 4.23 2.63
0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48
Colaboratory(R)
qplot(carat, price, data = diamonds, colour = clarity)

out4_0.png

Colaboratory(R)
qplot(carat, data = diamonds, geom = "density", colour = cut)

out5_0.png

Colaboratory(R)
csv_url = "http://www.minethatdata.com/Kevin_Hillstrom_MineThatData_E-MailAnalytics_DataMiningChallenge_2008.03.20.csv"
Colaboratory(R)
library("tidyverse")
── [1mAttaching packages[22m ─────────────────────────────────────── tidyverse 1.3.0 ──

[32m✔[39m [34mggplot2[39m 3.3.2     [32m✔[39m [34mpurrr  [39m 0.3.4
[32m✔[39m [34mtibble [39m 3.0.4     [32m✔[39m [34mdplyr  [39m 1.0.2
[32m✔[39m [34mtidyr  [39m 1.1.2     [32m✔[39m [34mstringr[39m 1.4.0
[32m✔[39m [34mreadr  [39m 1.4.0     [32m✔[39m [34mforcats[39m 0.5.0

── [1mConflicts[22m ────────────────────────────────────────── tidyverse_conflicts() ──
[31m✖[39m [34mdplyr[39m::[32mfilter()[39m masks [34mstats[39m::filter()
[31m✖[39m [34mdplyr[39m::[32mlag()[39m    masks [34mstats[39m::lag()
Colaboratory(R)
email_data <- read_csv(csv_url)
[36m──[39m [1m[1mColumn specification[1m[22m [36m────────────────────────────────────────────────────────[39m
cols(
  recency = [32mcol_double()[39m,
  history_segment = [31mcol_character()[39m,
  history = [32mcol_double()[39m,
  mens = [32mcol_double()[39m,
  womens = [32mcol_double()[39m,
  zip_code = [31mcol_character()[39m,
  newbie = [32mcol_double()[39m,
  channel = [31mcol_character()[39m,
  segment = [31mcol_character()[39m,
  visit = [32mcol_double()[39m,
  conversion = [32mcol_double()[39m,
  spend = [32mcol_double()[39m
)
Colaboratory(R)
summary(email_data)
    recency       history_segment       history             mens      
 Min.   : 1.000   Length:64000       Min.   :  29.99   Min.   :0.000  
 1st Qu.: 2.000   Class :character   1st Qu.:  64.66   1st Qu.:0.000  
 Median : 6.000   Mode  :character   Median : 158.11   Median :1.000  
 Mean   : 5.764                      Mean   : 242.09   Mean   :0.551  
 3rd Qu.: 9.000                      3rd Qu.: 325.66   3rd Qu.:1.000  
 Max.   :12.000                      Max.   :3345.93   Max.   :1.000  
     womens         zip_code             newbie         channel         
 Min.   :0.0000   Length:64000       Min.   :0.0000   Length:64000      
 1st Qu.:0.0000   Class :character   1st Qu.:0.0000   Class :character  
 Median :1.0000   Mode  :character   Median :1.0000   Mode  :character  
 Mean   :0.5497                      Mean   :0.5022                     
 3rd Qu.:1.0000                      3rd Qu.:1.0000                     
 Max.   :1.0000                      Max.   :1.0000                     
   segment              visit          conversion           spend        
 Length:64000       Min.   :0.0000   Min.   :0.000000   Min.   :  0.000  
 Class :character   1st Qu.:0.0000   1st Qu.:0.000000   1st Qu.:  0.000  
 Mode  :character   Median :0.0000   Median :0.000000   Median :  0.000  
                    Mean   :0.1468   Mean   :0.009031   Mean   :  1.051  
                    3rd Qu.:0.0000   3rd Qu.:0.000000   3rd Qu.:  0.000  
                    Max.   :1.0000   Max.   :1.000000   Max.   :499.000  
Colaboratory(R)
male_df <- email_data %>% filter(segment != "Womens E-Mail")
Colaboratory(R)
male_df <- email_data %>% filter(segment != "Womens E-Mail") %>% mutate(treatment = if_else(segment == "Mens E-Mail", 1, 0))
Colaboratory(R)
head(male_df)
A tibble: 6 × 13
recency history_segment history mens womens zip_code newbie channel segment visit conversion spend treatment
<dbl> <chr> <dbl> <dbl> <dbl> <chr> <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
6 3) $200 - $350 329.08 1 1 Rural 1 Web No E-Mail 0 0 0 0
9 5) $500 - $750 675.83 1 0 Rural 1 Web Mens E-Mail 0 0 0 1
9 5) $500 - $750 675.07 1 1 Rural 1 Phone Mens E-Mail 0 0 0 1
2 2) $100 - $200 101.64 0 1 Urban 0 Web Mens E-Mail 1 0 0 1
4 3) $200 - $350 241.42 0 1 Rural 1 Multichannel No E-Mail 0 0 0 0
3 1) $0 - $100 58.13 1 0 Urban 1 Web No E-Mail 1 0 0 0
Colaboratory(R)
summary_by_segment <- male_df %>% group_by(treatment) %>% summarise(conversion_rate = mean(conversion), spend_mean = mean(spend), count = n())
`summarise()` ungrouping output (override with `.groups` argument)
Colaboratory(R)
summary_by_segment
A tibble: 2 × 4
treatment conversion_rate spend_mean count
<dbl> <dbl> <dbl> <int>
0 0.005726087 0.6527894 21306
1 0.012531093 1.4226165 21307
Colaboratory(R)
library(broom)
Colaboratory(R)
formulae_vec <- c(spend ~ treatment + recency + channel,
                   spend ~ treatment + recency + channel + history,
                   history ~ treatment + recency + channel)
Colaboratory(R)
print(formulae_vec)
[[1]]
spend ~ treatment + recency + channel

[[2]]
spend ~ treatment + recency + channel + history

[[3]]
history ~ treatment + recency + channel
Colaboratory(R)
names(formulae_vec) <- paste("reg", LETTERS[1:3], sep="_")
Colaboratory(R)
print(formulae_vec)
$reg_A
spend ~ treatment + recency + channel

$reg_B
spend ~ treatment + recency + channel + history

$reg_C
history ~ treatment + recency + channel
Colaboratory(R)
formulae_vec
$reg_A
spend ~ treatment + recency + channel

$reg_B
spend ~ treatment + recency + channel + history

$reg_C
history ~ treatment + recency + channel
Colaboratory(R)
models <- formulae_vec %>% enframe(name = "model_index", value="formula")
Colaboratory(R)
models
A tibble: 3 × 2
model_index formula
<chr> <list>
reg_A spend ~ treatment + recency + channel
reg_B spend ~ treatment + recency + channel + history
reg_C history ~ treatment + recency + channel
Colaboratory(R)
models$formula
[[1]]
spend ~ treatment + recency + channel

[[2]]
spend ~ treatment + recency + channel + history

[[3]]
history ~ treatment + recency + channel
Colaboratory(R)
df_models <- models %>%
                          mutate(model = map(.x = formula, .f = lm, data = male_df)) %>%
                          mutate(lm_result = map(.x = model, .f = tidy))
Colaboratory(R)
print(df_models)
[90m# A tibble: 3 x 4[39m
  model_index formula   model  lm_result       
  [3m[90m<chr>[39m[23m       [3m[90m<list>[39m[23m    [3m[90m<list>[39m[23m [3m[90m<list>[39m[23m          
[90m1[39m reg_A       [90m<formula>[39m [90m<lm>[39m   [90m<tibble [5 × 5]>[39m
[90m2[39m reg_B       [90m<formula>[39m [90m<lm>[39m   [90m<tibble [6 × 5]>[39m
[90m3[39m reg_C       [90m<formula>[39m [90m<lm>[39m   [90m<tibble [5 × 5]>[39m
Colaboratory(R)
print(df_models$model)
[[1]]

Call:
.f(formula = .x[[i]], data = ..1)

Coefficients:
 (Intercept)     treatment       recency  channelPhone    channelWeb  
     1.16712       0.77085      -0.06975      -0.21560      -0.04294  


[[2]]

Call:
.f(formula = .x[[i]], data = ..1)

Coefficients:
 (Intercept)     treatment       recency  channelPhone    channelWeb  
    0.481547      0.767705     -0.052525      0.136065      0.306813  
     history  
    0.001157  


[[3]]

Call:
.f(formula = .x[[i]], data = ..1)

Coefficients:
 (Intercept)     treatment       recency  channelPhone    channelWeb  
     592.524         2.716       -14.889      -303.935      -302.285  
Colaboratory(R)
print(df_models$lm_result)
[[1]]
[90m# A tibble: 5 x 5[39m
  term         estimate std.error statistic     p.value
  [3m[90m<chr>[39m[23m           [3m[90m<dbl>[39m[23m     [3m[90m<dbl>[39m[23m     [3m[90m<dbl>[39m[23m       [3m[90m<dbl>[39m[23m
[90m1[39m (Intercept)    1.17      0.242      4.83  0.000[4m0[24m[4m0[24m[4m1[24m38 
[90m2[39m treatment      0.771     0.145      5.31  0.000[4m0[24m[4m0[24m[4m0[24m112
[90m3[39m recency       -[31m0[39m[31m.[39m[31m0[39m[31m69[4m8[24m[39m    0.020[4m8[24m    -[31m3[39m[31m.[39m[31m35[39m  0.000[4m8[24m[4m1[24m[4m2[24m   
[90m4[39m channelPhone  -[31m0[39m[31m.[39m[31m216[39m     0.237     -[31m0[39m[31m.[39m[31m911[39m 0.362      
[90m5[39m channelWeb    -[31m0[39m[31m.[39m[31m0[39m[31m42[4m9[24m[39m    0.236     -[31m0[39m[31m.[39m[31m182[39m 0.856      

[[2]]
[90m# A tibble: 6 x 5[39m
  term         estimate std.error statistic     p.value
  [3m[90m<chr>[39m[23m           [3m[90m<dbl>[39m[23m     [3m[90m<dbl>[39m[23m     [3m[90m<dbl>[39m[23m       [3m[90m<dbl>[39m[23m
[90m1[39m (Intercept)   0.482    0.306        1.57  0.116      
[90m2[39m treatment     0.768    0.145        5.29  0.000[4m0[24m[4m0[24m[4m0[24m125
[90m3[39m recency      -[31m0[39m[31m.[39m[31m0[39m[31m52[4m5[24m[39m   0.021[4m4[24m      -[31m2[39m[31m.[39m[31m46[39m  0.013[4m9[24m     
[90m4[39m channelPhone  0.136    0.256        0.533 0.594      
[90m5[39m channelWeb    0.307    0.255        1.20  0.229      
[90m6[39m history       0.001[4m1[24m[4m6[24m  0.000[4m3[24m[4m1[24m[4m8[24m     3.64  0.000[4m2[24m[4m7[24m[4m2[24m   

[[3]]
[90m# A tibble: 5 x 5[39m
  term         estimate std.error statistic p.value
  [3m[90m<chr>[39m[23m           [3m[90m<dbl>[39m[23m     [3m[90m<dbl>[39m[23m     [3m[90m<dbl>[39m[23m   [3m[90m<dbl>[39m[23m
[90m1[39m (Intercept)    593.       3.69     161.     0    
[90m2[39m treatment        2.72     2.21       1.23   0.220
[90m3[39m recency        -[31m14[39m[31m.[39m[31m9[39m      0.318    -[31m46[39m[31m.[39m[31m9[39m    0    
[90m4[39m channelPhone  -[31m304[39m[31m.[39m       3.61     -[31m84[39m[31m.[39m[31m3[39m    0    
[90m5[39m channelWeb    -[31m302[39m[31m.[39m       3.60     -[31m83[39m[31m.[39m[31m9[39m    0    
Colaboratory(R)
df_results <- df_models %>%
                              mutate(formula = as.character(formula)) %>%
                              select(formula, model_index, lm_result) %>%
                              unnest(cols = c(lm_result))
Colaboratory(R)
df_results
A tibble: 16 × 7
formula model_index term estimate std.error statistic p.value
<chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
spend ~ treatment + recency + channel reg_A (Intercept) 1.167116e+00 0.2417364677 4.8280525 1.383521e-06
spend ~ treatment + recency + channel reg_A treatment 7.708477e-01 0.1452333602 5.3076491 1.116026e-07
spend ~ treatment + recency + channel reg_A recency -6.975255e-02 0.0208290189 -3.3488159 8.122801e-04
spend ~ treatment + recency + channel reg_A channelPhone -2.155973e-01 0.2365937168 -0.9112556 3.621659e-01
spend ~ treatment + recency + channel reg_A channelWeb -4.294017e-02 0.2362749089 -0.1817382 8.557891e-01
spend ~ treatment + recency + channel + history reg_B (Intercept) 4.815474e-01 0.3063759245 1.5717535 1.160152e-01
spend ~ treatment + recency + channel + history reg_B treatment 7.677050e-01 0.1452150356 5.2866768 1.251709e-07
spend ~ treatment + recency + channel + history reg_B recency -5.252544e-02 0.0213566166 -2.4594459 1.391911e-02
spend ~ treatment + recency + channel + history reg_B channelPhone 1.360652e-01 0.2555133772 0.5325171 5.943707e-01
spend ~ treatment + recency + channel + history reg_B channelWeb 3.068129e-01 0.2550203247 1.2030921 2.289474e-01
spend ~ treatment + recency + channel + history reg_B history 1.157031e-03 0.0003177463 3.6413672 2.715151e-04
history ~ treatment + recency + channel reg_C (Intercept) 5.925244e+02 3.6851373464 160.7875918 0.000000e+00
history ~ treatment + recency + channel reg_C treatment 2.716224e+00 2.2140014062 1.2268392 2.198898e-01
history ~ treatment + recency + channel reg_C recency -1.488907e+01 0.3175267515 -46.8907458 0.000000e+00
history ~ treatment + recency + channel reg_C channelPhone -3.039354e+02 3.6067389830 -84.2687451 0.000000e+00
history ~ treatment + recency + channel reg_C channelWeb -3.022850e+02 3.6018789341 -83.9242660 0.000000e+00
Colaboratory(R)
df_results %>% filter(model_index == "reg_A")
A tibble: 5 × 7
formula model_index term estimate std.error statistic p.value
<chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
spend ~ treatment + recency + channel reg_A (Intercept) 1.16711637 0.24173647 4.8280525 1.383521e-06
spend ~ treatment + recency + channel reg_A treatment 0.77084771 0.14523336 5.3076491 1.116026e-07
spend ~ treatment + recency + channel reg_A recency -0.06975255 0.02082902 -3.3488159 8.122801e-04
spend ~ treatment + recency + channel reg_A channelPhone -0.21559735 0.23659372 -0.9112556 3.621659e-01
spend ~ treatment + recency + channel reg_A channelWeb -0.04294017 0.23627491 -0.1817382 8.557891e-01
Colaboratory(R)
df_results %>% filter(model_index == "reg_B")
A tibble: 6 × 7
formula model_index term estimate std.error statistic p.value
<chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
spend ~ treatment + recency + channel + history reg_B (Intercept) 0.481547430 0.3063759245 1.5717535 1.160152e-01
spend ~ treatment + recency + channel + history reg_B treatment 0.767704959 0.1452150356 5.2866768 1.251709e-07
spend ~ treatment + recency + channel + history reg_B recency -0.052525442 0.0213566166 -2.4594459 1.391911e-02
spend ~ treatment + recency + channel + history reg_B channelPhone 0.136065239 0.2555133772 0.5325171 5.943707e-01
spend ~ treatment + recency + channel + history reg_B channelWeb 0.306812940 0.2550203247 1.2030921 2.289474e-01
spend ~ treatment + recency + channel + history reg_B history 0.001157031 0.0003177463 3.6413672 2.715151e-04

#その他の方法

多少面倒ですが、以下の方法もあるようです。

Python を使う場合はこのまますぐにプログラムを書き始めることができるのですが、R を使うようにするにはちょっとした作業(ノートブックの書き換え)がまず必要です。

画面左上のメニューの中から「ファイル」を選び、「.ipynbをダウンロード」を選びます。
(現在画面に表示中のノートブックのファイルが保存されます)

ノートブックのファイルが保存されるので、これをメモ帳などのテキストエディタで開きます。

そして、“kernelspec” にある name と display_name を以下のように書き換えます。

"kernelspec": {
 "name": "ir",
 "display_name": "R"
}

書き換えができたら、このファイルをアップロードします。
画面左上のメニューの中から「ファイル」を選び、「ノートブックをアップロード」を選びます。
そして、書き換えを行ったノートブックファイルを選んでアップロードします。

アップロードをすると、画面が更新されて、再び最初のノートブックの画面が表示されます。

画面左上のメニューの中から「ランタイム」を選び、「ランタイムのタイプを変更」を選びます。
これで R を使う準備ができました。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?