カラーパレット
colomap 使う
- Ubuntu 14.04
ディストリビューション毎に事前にパッケージに必要なライブラリを入れる。
# apt-get install libcurl4-openssl-dev libv8-3.14-dev
# R
# install.packages('colormap')
# library('colormap')
# カラーパレットの表示:colormapコマンド
par(mfrow = c(44,1))
par(mar = rep(0.01, 4))
for(i in seq(colormaps)) {
barplot(rep(1, 72), yaxt = "n", space = c(0, 0), border = NA,
col = colormap(colormap = colormaps[[i]]), main = sprintf("\n%s", names(colormaps[i])))
}
plot(hoge$aaa, col = colormap(colormap = colormaps$blackbody))
参考:https://www.karada-good.net/analyticsr/r-483
レーダチャート(蜘蛛の巣的な)
いくつか方法あるぽいが、plotrixというパッケージを使うと簡単そうだったのでそれを使った。
- 参考 http://qiita.com/epsilonminder/items/732d71262778a368cae0
- help(radial.plot)で慣れてる人ならだいたいは予測つく
install.packages("plotrix")
library(plotrix)
radial.plot(DF,
main = "タイトル",
labels = list, # ラベル名のリスト
line.col="red", # ラインの色
lwd = 2 , # ラインの太さ
rp.type = "p", # グラフタイプ
radial.lim = c(0,4), # 円の外側への距離
start=pi/2, # グラフ描画の開始位置、ラジアンで指定
clockwise = TRUE, # 時計回りにプロット
label.prop = 1.1, # ラベル文字と円との距離
grid.col ="gray", # グリッド色
grid.bg = "transparent", # 背景透明
show.grid.labels=-1, # 値の位置(-1で北方向)
boxed.radial = FALSE) # デフォで数字はボックス白枠の中にある
# 描画時に描画形式とラベルフォントの調整
par(mfrow=c(2,3),cex.axis=0.5)
radial.plot()
pie チャート(さくっと版)
カテゴリ集計を円でサクッと
pie(sort(table(tmp_dep), decreasing = T),
radius=1,
clockwise=T,
border="#ffffff",
main="ここにタイトルをおく",
cex.main=2)
特定の列の特定の文字を含むサブセットDFを抜く
list はベクトル
new_df <- subset(org_df, col1 %in% list)
X軸ラベルのフォントのサイズ
- boxplot : cex.axis
- barplot : cex.names
ある条件下における値変更(ifelse)
DF$Aが"hoge"なら100、そうじゃないならNA
DF$A <- ifelse(DF$A == "hoge",100,NA)
ある列を基準にデータフレームを並べ替える(order)
昇順(order)
DF[order(DF$col1),]
降順(order , decreasing = T)
DF[order(DF$col1 , decreasing = T),]
複数の列を基準とする場合、カンマで並べる
DF[order(DF$col1 , DF$col1 , decreasing = T),]
列に対して、ある条件に合った文字を変更する
# DF$V1で "3" を "あいうえお" に変換する
DF$V1[DF$V1 == 3] <- "あいうえお"
ベクトルを追加する
> a <- sum(product_new$prof) / sum(product_all$prof) * 100
> a
[1] 40.80371
> a <- append(a,sum(product_renewal$prof) / sum(project_all$prof) * 100)
> a
[1] 40.80371 27.84163
文字検索して抜き出す(grepl)
大文字小文字の区別をしない場合は ignore.case = TRUE をつける
# subset にて
subset(DF, grepl("Zabbix",DF$Product,ignore.case = TRUE))
# aggregate にて
aggregate(grepl("HTTPD|Tomcat|JBoss",DF$Product),by=list(DF$month_bring),sum)
不要な因子を消す
subset 等で派生したデータフレームに不要(NAだったり要素が0だったり)な因子が残る件について、factorを使ってそれを消す
DF$col1 <- factor(DF$col1)
table 出力結果(クロス集計結果)をデータフレームにする
DF1new <- as.data.frame.matrix(table(DF1$month,DF1$Product.Category))
DF1new$month <- rownames(DF1new)
rownames(DF1new) <- NULL
文字列の一部を抜き出す
例えば、「2016-01-01」となっている日付列( DF$date
)から月(DF$month
)の行を作る
DF$month<-substr(DF$date,1,7)
1つめから7つ目までを抜いて入れる、つまり「2016-01」まで
文字を挿入する
> ORG
[1] "ABC"
> paste("ABC",ORG,sep=",")
[1] "ABC,123"
> paste(ORG,"EFG",sep=",")
[1] "123,EFG"
マージ(merge)
DF1とDF2を同じ列 month をキーにマージ
- 全部残す=>all=T(無いセルは NA)
- 両方にあるものだけマージして残す=>all=F(デフォルト)
- 右側を残こす=>all.y=T(左のデータフレームでない行は消え、右のデータフレームだけにある行が残り、その値のない列は NA)
- 左側を残こす=>all.y=T(右のデータフレームでない行は消え、左のデータフレームだけにある行が残り、その値のない列は NA)
> DF1
month member age
1 2016-01 jacky 10
2 2016-05 sarah 20
3 2016-03 bob 10
4 2016-02 rucy 50
> DF2
month value category
1 2016-01 5 a
2 2016-05 6 b
3 2016-04 10 c
> merge(DF1,DF2,by.x="month")
month member age value category
1 2016-01 jacky 10 5 a
2 2016-05 sarah 20 6 b
> merge(DF1,DF2,by.x="month",all.x=T)
month member age value category
1 2016-01 jacky 10 5 a
2 2016-02 rucy 50 NA <NA>
3 2016-03 bob 10 NA <NA>
4 2016-05 sarah 20 6 b
> merge(DF1,DF2,by.x="month",all.y=T)
month member age value category
1 2016-01 jacky 10 5 a
2 2016-05 sarah 20 6 b
3 2016-04 <NA> NA 10 c
> merge(DF1,DF2,by.x="month",all=T)
month member age value category
1 2016-01 jacky 10 5 a
2 2016-02 rucy 50 NA <NA>
3 2016-03 bob 10 NA <NA>
4 2016-05 sarah 20 6 b
5 2016-04 <NA> NA 10 c
tapply で二次元
list を使う
tapply(A$value,list(A$col1,A$col2),sum)
#関数
testfunc <- function(x){
# 処理部
out <- tapply(x$col1,x$col2,sum)
# 返す
return(out)
}
# 呼び出し
tmp <- testfunc( x = abc )
#Rのアップデート
install.packages("installr")
library(installr)
updateR()
#Rのプロキシ設定
Sys.setenv(http_proxy="http://<proxy server>:<port>",
http_proxy_usr="<id>:<pass>")
#table からデータフレーム作る
DF <- as.data.frame.matrix(table(DF$month,DF$Product))
#sjisでcsvファイルを読み込みデータフレーム作る
DF <- read.csv("data.csv",header = T , fileEncoding = "sjis")
#日付にする
DF$ログイン日<-strptime(DF$ログイン日,"%Y/%m/%d")
#列を消す
DF <- DF[,setdiff(colnames(DF),c("列1","列2","列3"))]
#オブジェクト全部消す
rm(list=ls(all=TRUE))
#カイ二乗検定
> tapply(DF$ratio,DF$weekday,mean)
Fri Mon Thu Tue Wed
91.025 49.900 81.800 73.850 86.900
> chisq.test(tapply(DF$ratio,DF$weekday,mean))
Chi-squared test for given probabilities
data: tapply(DF$ratio, DF$weekday, mean)
X-squared = 13.842, df = 4, p-value = 0.007817
#データフレムをキャラクタに変換
DF <- as.character.Date(DF)
割合で集計(prop.table)
prop.table(table(DF$parameter))
#値を丸める(round)
> round(prop.table(table(DF$Understand)),digits = 2)
#空のセルをNAにする
df[df==""]<-NA
#NAを0にする(is.na)
DF[is.na(DF)] <- 0
#カレントディレクトリをセットする
setwd("/home/demo/test")
#CSSをセットする
options(rstudio.markdownToHTML =
function(inputFile, outputFile) {
require(markdown)
markdownToHTML(inputFile, outputFile, stylesheet='custom.css')
}
)
#指数表現にするか否かの閾値を設定する(デフォルトは 0)
options(scipen=1)
#特定の列を抜き出してデータフレーム作成
# Type列に"cifs"というのがあるRead列とWrite列を抜き出す
> new_df <- subset(org_df, Type == "cifs", select=c(Read,Write))
# 2015年度の分の売上データを抜き出す DF$date は日付型(POSIXlt)
subset(DF, as.Date(DF$date) > as.Date("2015-03-31") &
as.Date(DF$date) < as.Date("2016-04-01")
)
#出力の横幅調整
> options(width = 100)
#クロス集計(tapply)
> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
## Specie毎のSepal.Lengthの合計
> tapply(iris$Sepal.Length,iris$Species,sum)
setosa versicolor virginica
250.3 296.8 329.4
## Specie毎のSepal.Lengthの平均
> tapply(iris$Sepal.Length,iris$Species,mean)
setosa versicolor virginica
5.006 5.936 6.588
#単回帰分析(lm)
> result<-lm(Sepal.Length~Sepal.Width,iris)
> summary(result)
Call:
lm(formula = Sepal.Length ~ Sepal.Width, data = iris)
Residuals:
Min 1Q Median 3Q Max
-1.5561 -0.6333 -0.1120 0.5579 2.2226
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 6.5262 0.4789 13.63 <2e-16 ***
Sepal.Width -0.2234 0.1551 -1.44 0.152
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.8251 on 148 degrees of freedom
Multiple R-squared: 0.01382, Adjusted R-squared: 0.007159
F-statistic: 2.074 on 1 and 148 DF, p-value: 0.1519