[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[ノート/ノート]]~
[[ノート/R]]~
訪問者数 &counter(); 最終更新 &lastmod();
**Rを使ってみる (2008-07-07)[#i573517e]
Rに関する覚書きメモ
参考になるサイト~
> [[同志社 金明哲先生のページ;http://www1.doshisha.ac.jp/~mjin/R/]]~
>> 特に[[基本統計量:http://www1.doshisha.ac.jp/~mjin/R/toukeiryou.html]] [[関数:http://www1.doshisha.ac.jp/~mjin/R/04.html]]
[[視覚化1:http://www1.doshisha.ac.jp/~mjin/R/05.html]]
[[視覚化2:http://www1.doshisha.ac.jp/~mjin/R/06.html]]
[[視覚化3:http://www1.doshisha.ac.jp/~mjin/R/07.html]]~
> [[阪大RWikiの貢献パッケージリスト:http://www.okada.jp.org/RWiki/index.php?CRAN%A5%D1%A5%C3%A5%B1%A1%BC%A5%B8%A5%EA%A5%B9%A5%C8]]~
> [[RjpWiki:http://www.okada.jp.org/RWiki/?RjpWiki]]~
> [[船尾さんのR-tips:http://cse.naro.affrc.go.jp/takezawa/r-tips.pdf]]~
> [[統計処理ソフト R 入門 講習会資料:http://androids.happy.nu/ja/r-intro-lecture]]~
***プログラム(スクリプトファイルの実行) [#a5679bcc]
Rはインタラクティブに使えるが、スクリプトファイルを実行する形でも使える。
source("スクリプトのファイル名")
ファイル名の拡張子は .R
ファイルの所在は、Current Directoryの概念があって、「ファイル」⇒「ディレクトリの変更」で設定・選択できる。~
コマンドから設定する方法は?
***入出力 [#x28020d2]
コンマ区切りの表(たとえばExcelのCSVデータなど)は、
x <- read.table("ファイル名", sep=",")
で読める。但しファイルはCurrent Directoryにあること。
CSVだと分かっていれば、x <= read.csv("ファイル名")でOK
書き出しも
write.table(x, file="ファイル名", sep=",")
で出来る。
***list, vector, factor, ... [#w78f8a58]
vector: 順番に並んだ数numberの集まり(a single entity consisting of an ordered collection of numbers)~
作成するにはx <- c(10.4, 5.6, 3.1, 6.4, 21.7)~
~
要素を取り出すにはx[3]~
もし[3,]と書くと、イメージとしては[3,*]、つまり[3,1],[3,2],[3,3]...というvectorが得られる。~
同様に[,3]と書くと、[*,3]、つまり[1,3],[2,3],[3,3]...というvectorになる。
matrix, array: 多次元(2次元以上?)にしたvector。(multi-dimensional generalizations of vectors)
list: vectorの一般形で、要素の型が同一でなくても良い(a general form of vector in which the various elements need not be of the same type)
factors: 分類的(categorical)データを扱うコンパクトな方法。(factors provide compact ways to handle categorical data)。要するにENUM型のvectorらしい。
たとえば、文字型vector ("a","b","c")のfactorは、(a,b,c)らしい。
z<-c("東京","千葉","埼玉","茨城","栃木","群馬","神奈川","東京","千葉","埼玉","茨城","栃木","群馬","神奈川")
z
[1] "東京" "千葉" "埼玉" "茨城" "栃木" "群馬" "神奈川" "東京"
[9] "千葉" "埼玉" "茨城" "栃木" "群馬" "神奈川"
fz <- factor(z)
fz
[1] 東京 千葉 埼玉 茨城 栃木 群馬 神奈川 東京 千葉 埼玉
[11] 茨城 栃木 群馬 神奈川
Levels: 茨城 群馬 埼玉 神奈川 千葉 東京 栃木
これがおもしろいのは、tapplyという仕掛を使うときらしい。~
こんな例が出ている。14人の納税者がいる。それぞれの居住県はzで表される。同様にそれぞれの納税額は14要素のvector y で表される。但しyは
y <- c(2, 7, 5, 6, 3, 9, 1, 6, 2, 4, 3, 7, 8, 3)
この情報にtapplyを使うと、同じ県に属する人を集めて関数meanを適用する処理が出来る。
tapply(y, z, mean)
茨城 群馬 埼玉 神奈川 千葉 東京 栃木
4.5 8.5 4.5 2.0 4.5 4.0 5.0
関数は何でもいいらしく、たとえばsumだのdiffだのでもいいし、もっと面白そうなのは関数cを適用すると、
tapply(y, z, c)
$茨城
[1] 6 3
$群馬
[1] 9 8
$埼玉
[1] 5 4
$神奈川
[1] 1 3
$千葉
[1] 7 2
$東京
[1] 2 6
$栃木
[1] 3 7
が得られる。つまり、zの要素ごとに、それに合っている納税者を選んで、その納税額をリスト(vector)にしてくれる。
これぞ、図書館貸出データでやりたかったことで、zの要素を日付(たとえば月名)とし、それに合っている貸出レコードを選んで、その図書番号をリストにすることができるはずである。
***頻度を測りたい [#m3e5b78e]
***等高線グラフを描く [#i97d4de1]
あらかじめ、
>library("lattice")
としておくこと。~
[[金明哲先生のページ「Rでのデータの視覚化2」:http://www1.doshisha.ac.jp/~mjin/R/06.html]]の7.三次元グラフ~
>data(volcano)
>z <- 5 * volcano # 見やすくするため高さを5倍に誇張
>x <- 10 * (1:nrow(z)) # 南北方向の10メートルの格子の辺
>y <- 10 * (1:ncol(z)) # 東西方向の10 メートルの格子の辺
>par(bg = "skyblue") #背景の色設定
>persp(x, y, z, theta = 115, phi = 20, col = "lightgreen", scale = FALSE,ltheta = -120, shade = 0.75, border = NA, box = FALSE)
>data(volcano)
>levelplot(volcano)
>image(volcano)
>contour(volcano) または filled.contour(volcano)
> x <- matrix(0,5,5)
> x[1,]<-c(1,3,5,3,1)
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 3 1
[2,] 0 0 0 0 0
[3,] 0 0 0 0 0
[4,] 0 0 0 0 0
[5,] 0 0 0 0 0
> x[2,]<-c(1,4,6,4,1)
> x[3,]<-c(3,6,2,6,3)
> x[4,]<-c(2,3,7,3,1)
> x[5,]<-c(1,3,6,3,1)
> image(x)
> levelplot(x)
色を変えるのは結構ややこしいが、次のようにすれば出来るらしい。~
色を指定するベクトルを作る。手で作ってもよいはずだが、関数level.colorsを使えば計算で出来る。
> d[1,]<-c(1,1,2,3,2,1,1)
> d[2,]<-c(1,2,3,4,3,2,1)
> d[3,]<-c(1,3,5,7,5,3,1)
> d[4,]<-c(1,4,7,10,7,4,1)
> d[5,]<-d[3,]
> d[6,]<-d[2,]
> d[7,]<-d[1,]
> levels <- c(1,2,3,4,5,6,7,8,9,10)
> levelplot(d, at = levels, col.regions = heat.colors)
ここでat=levelsはレベルの切れ目で、指定しないとデフォルトは100区分。カラーパレットを変えるには、
> levelplot(d, at = levels, col.regions = topo.colors)
自分用の色を作るには
mycolors <- function(n, alpha = 1)
{
if ((n <- as.integer(n[1])) > 0) {
j <- n%/%4
i <- n - j
c(rainbow(i, start = 0, end = 1/6, alpha = alpha),
if (j > 0) hsv(h = 1/6, s = seq.int(from = 1 - 1/(2 * j),
to = 1/(2 * j), length.out = j), v = 1, alpha = alpha))
}
else character(0)
}
こんなのも作ってみた
mycolors <- function(n, alpha = 1)
{
if ((n <- as.integer(n[1])) > 0) {
j <- n%/%2
c(hsv(h=4/6, s=seq.int(from=0,to=1,length.out=j), v=1,alpha=alpha),
hsv(h=0/6, s=seq.int(from=1/(n-j),to=1,length.out=n-j), v=1,alpha=alpha))
}
else character(0)
}
ちなみにこれだと、
> data(volcano)
> levelplot(volcano, col.regions=mycolors)
とすると、こんな風になる。
#ref(volcano.png);
もっと別の色を考えよう。
mycolors2 <- function(n, alpha = 1)
{
if ((n <- as.integer(n[1])) > 0) {
c(hsv(h=seq.int(from=4/6,to=0/6,length.out=n),
s=seq.int(from=0,to=1,length.out=n),
v=1, alpha=alpha))
}
else character(0)
}
要するに、hsv空間でhueを4/6から0/6に変えながら、同時にstrengthを0から1に変える。
#ref(volcano2.png);
#ref(distribution2.png);
終了行:
[[ノート/ノート]]~
[[ノート/R]]~
訪問者数 &counter(); 最終更新 &lastmod();
**Rを使ってみる (2008-07-07)[#i573517e]
Rに関する覚書きメモ
参考になるサイト~
> [[同志社 金明哲先生のページ;http://www1.doshisha.ac.jp/~mjin/R/]]~
>> 特に[[基本統計量:http://www1.doshisha.ac.jp/~mjin/R/toukeiryou.html]] [[関数:http://www1.doshisha.ac.jp/~mjin/R/04.html]]
[[視覚化1:http://www1.doshisha.ac.jp/~mjin/R/05.html]]
[[視覚化2:http://www1.doshisha.ac.jp/~mjin/R/06.html]]
[[視覚化3:http://www1.doshisha.ac.jp/~mjin/R/07.html]]~
> [[阪大RWikiの貢献パッケージリスト:http://www.okada.jp.org/RWiki/index.php?CRAN%A5%D1%A5%C3%A5%B1%A1%BC%A5%B8%A5%EA%A5%B9%A5%C8]]~
> [[RjpWiki:http://www.okada.jp.org/RWiki/?RjpWiki]]~
> [[船尾さんのR-tips:http://cse.naro.affrc.go.jp/takezawa/r-tips.pdf]]~
> [[統計処理ソフト R 入門 講習会資料:http://androids.happy.nu/ja/r-intro-lecture]]~
***プログラム(スクリプトファイルの実行) [#a5679bcc]
Rはインタラクティブに使えるが、スクリプトファイルを実行する形でも使える。
source("スクリプトのファイル名")
ファイル名の拡張子は .R
ファイルの所在は、Current Directoryの概念があって、「ファイル」⇒「ディレクトリの変更」で設定・選択できる。~
コマンドから設定する方法は?
***入出力 [#x28020d2]
コンマ区切りの表(たとえばExcelのCSVデータなど)は、
x <- read.table("ファイル名", sep=",")
で読める。但しファイルはCurrent Directoryにあること。
CSVだと分かっていれば、x <= read.csv("ファイル名")でOK
書き出しも
write.table(x, file="ファイル名", sep=",")
で出来る。
***list, vector, factor, ... [#w78f8a58]
vector: 順番に並んだ数numberの集まり(a single entity consisting of an ordered collection of numbers)~
作成するにはx <- c(10.4, 5.6, 3.1, 6.4, 21.7)~
~
要素を取り出すにはx[3]~
もし[3,]と書くと、イメージとしては[3,*]、つまり[3,1],[3,2],[3,3]...というvectorが得られる。~
同様に[,3]と書くと、[*,3]、つまり[1,3],[2,3],[3,3]...というvectorになる。
matrix, array: 多次元(2次元以上?)にしたvector。(multi-dimensional generalizations of vectors)
list: vectorの一般形で、要素の型が同一でなくても良い(a general form of vector in which the various elements need not be of the same type)
factors: 分類的(categorical)データを扱うコンパクトな方法。(factors provide compact ways to handle categorical data)。要するにENUM型のvectorらしい。
たとえば、文字型vector ("a","b","c")のfactorは、(a,b,c)らしい。
z<-c("東京","千葉","埼玉","茨城","栃木","群馬","神奈川","東京","千葉","埼玉","茨城","栃木","群馬","神奈川")
z
[1] "東京" "千葉" "埼玉" "茨城" "栃木" "群馬" "神奈川" "東京"
[9] "千葉" "埼玉" "茨城" "栃木" "群馬" "神奈川"
fz <- factor(z)
fz
[1] 東京 千葉 埼玉 茨城 栃木 群馬 神奈川 東京 千葉 埼玉
[11] 茨城 栃木 群馬 神奈川
Levels: 茨城 群馬 埼玉 神奈川 千葉 東京 栃木
これがおもしろいのは、tapplyという仕掛を使うときらしい。~
こんな例が出ている。14人の納税者がいる。それぞれの居住県はzで表される。同様にそれぞれの納税額は14要素のvector y で表される。但しyは
y <- c(2, 7, 5, 6, 3, 9, 1, 6, 2, 4, 3, 7, 8, 3)
この情報にtapplyを使うと、同じ県に属する人を集めて関数meanを適用する処理が出来る。
tapply(y, z, mean)
茨城 群馬 埼玉 神奈川 千葉 東京 栃木
4.5 8.5 4.5 2.0 4.5 4.0 5.0
関数は何でもいいらしく、たとえばsumだのdiffだのでもいいし、もっと面白そうなのは関数cを適用すると、
tapply(y, z, c)
$茨城
[1] 6 3
$群馬
[1] 9 8
$埼玉
[1] 5 4
$神奈川
[1] 1 3
$千葉
[1] 7 2
$東京
[1] 2 6
$栃木
[1] 3 7
が得られる。つまり、zの要素ごとに、それに合っている納税者を選んで、その納税額をリスト(vector)にしてくれる。
これぞ、図書館貸出データでやりたかったことで、zの要素を日付(たとえば月名)とし、それに合っている貸出レコードを選んで、その図書番号をリストにすることができるはずである。
***頻度を測りたい [#m3e5b78e]
***等高線グラフを描く [#i97d4de1]
あらかじめ、
>library("lattice")
としておくこと。~
[[金明哲先生のページ「Rでのデータの視覚化2」:http://www1.doshisha.ac.jp/~mjin/R/06.html]]の7.三次元グラフ~
>data(volcano)
>z <- 5 * volcano # 見やすくするため高さを5倍に誇張
>x <- 10 * (1:nrow(z)) # 南北方向の10メートルの格子の辺
>y <- 10 * (1:ncol(z)) # 東西方向の10 メートルの格子の辺
>par(bg = "skyblue") #背景の色設定
>persp(x, y, z, theta = 115, phi = 20, col = "lightgreen", scale = FALSE,ltheta = -120, shade = 0.75, border = NA, box = FALSE)
>data(volcano)
>levelplot(volcano)
>image(volcano)
>contour(volcano) または filled.contour(volcano)
> x <- matrix(0,5,5)
> x[1,]<-c(1,3,5,3,1)
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 3 1
[2,] 0 0 0 0 0
[3,] 0 0 0 0 0
[4,] 0 0 0 0 0
[5,] 0 0 0 0 0
> x[2,]<-c(1,4,6,4,1)
> x[3,]<-c(3,6,2,6,3)
> x[4,]<-c(2,3,7,3,1)
> x[5,]<-c(1,3,6,3,1)
> image(x)
> levelplot(x)
色を変えるのは結構ややこしいが、次のようにすれば出来るらしい。~
色を指定するベクトルを作る。手で作ってもよいはずだが、関数level.colorsを使えば計算で出来る。
> d[1,]<-c(1,1,2,3,2,1,1)
> d[2,]<-c(1,2,3,4,3,2,1)
> d[3,]<-c(1,3,5,7,5,3,1)
> d[4,]<-c(1,4,7,10,7,4,1)
> d[5,]<-d[3,]
> d[6,]<-d[2,]
> d[7,]<-d[1,]
> levels <- c(1,2,3,4,5,6,7,8,9,10)
> levelplot(d, at = levels, col.regions = heat.colors)
ここでat=levelsはレベルの切れ目で、指定しないとデフォルトは100区分。カラーパレットを変えるには、
> levelplot(d, at = levels, col.regions = topo.colors)
自分用の色を作るには
mycolors <- function(n, alpha = 1)
{
if ((n <- as.integer(n[1])) > 0) {
j <- n%/%4
i <- n - j
c(rainbow(i, start = 0, end = 1/6, alpha = alpha),
if (j > 0) hsv(h = 1/6, s = seq.int(from = 1 - 1/(2 * j),
to = 1/(2 * j), length.out = j), v = 1, alpha = alpha))
}
else character(0)
}
こんなのも作ってみた
mycolors <- function(n, alpha = 1)
{
if ((n <- as.integer(n[1])) > 0) {
j <- n%/%2
c(hsv(h=4/6, s=seq.int(from=0,to=1,length.out=j), v=1,alpha=alpha),
hsv(h=0/6, s=seq.int(from=1/(n-j),to=1,length.out=n-j), v=1,alpha=alpha))
}
else character(0)
}
ちなみにこれだと、
> data(volcano)
> levelplot(volcano, col.regions=mycolors)
とすると、こんな風になる。
#ref(volcano.png);
もっと別の色を考えよう。
mycolors2 <- function(n, alpha = 1)
{
if ((n <- as.integer(n[1])) > 0) {
c(hsv(h=seq.int(from=4/6,to=0/6,length.out=n),
s=seq.int(from=0,to=1,length.out=n),
v=1, alpha=alpha))
}
else character(0)
}
要するに、hsv空間でhueを4/6から0/6に変えながら、同時にstrengthを0から1に変える。
#ref(volcano2.png);
#ref(distribution2.png);
ページ名: