Lecture6: Shiny, Scatter plot (Zipf’s law)

パッケージの読み込み

manipulate package

library(manipulate)

wordcloud package

library(wordcloud)
## Loading required package: RColorBrewer

関数ファイルの読み込み

source("getFreqMtx.R")
freqMtx<-getFreqMtx("Lec04-text.txt")
freqMtx<-freqMtx[order(freqMtx$raw, decreasing = TRUE),]

前回の実習

課題1:

manipulate関数を使用し、(復習)棒グラフに対して、引数lasとcolをインタラクティブに表示させなさい。

  • 作成上の注意
    • 注意: lasに選択できる値は、1,2,3から選ぶ
tmp <- freqMtx[1:20,1]
names(tmp) <-rownames(freqMtx)[1:20]

manipulate(
  barplot(tmp,las=myLas,col=myColors), 
  myLas=picker(1,2,3, initial =3),
  myColors=picker("red", "violet", "pink", "orange", "yellow", "green", "blue", "cyan", initial ="green") 
)

課題3:関数の作成

wordcloudの白黒か色付き(rainbow(10))の選択を引数で指定して、条件分岐文で、白黒/色付き描画を分岐する関数を作成しなさい。

  • 作成上の注意
    • 関数の第1,2引数は、wordcloud関数の第1,2引数と同じにすること
    • 条件分岐のための引数(第3引数)や条件分岐文は自由に決めて構わない
genWC <- function(words, freq, colorFlag=0){
  if(colorFlag==0){
    wordcloud(words,freq)
  }else{
    wordcloud(words,freq,colors=rainbow(10))
  }
}

実行結果例

Top20<- freqMtx[1:20,]
genWC(rownames(Top20),Top20$raw)

genWC(rownames(Top20),Top20$raw, colorFlag=1)

manipulate (インタラクティブなプロット)

棒グラフ

tmp <- freqMtx[1:20,1]
names(tmp) <-rownames(freqMtx)[1:20]
barplot(tmp,las=3)

プロットマーカーの選択

  • picker()関数
manipulate(
  plot(0,0,pch=myMarkers,cex=5,col=myColors), myColors=picker("red", "violet", "pink", "orange", "yellow", "green", "blue", "cyan",initial="violet"),
  myMarkers=picker(1,2,3,4,5,6,7,8,initial="5")
)

プロットサイズの選択

  • slider()関数
manipulate(
  plot(0,0,pch=8,cex=mySize,col="blue"),
  mySize=slider(1,10,initial=5)
)

manipulate関数の書き方(複数行の場合)

manipulate(
  {
  複数行にわたるスクリプト
  },
  picker, sliderの情報(複数の場合はカンマで結合)
)

Zipf’sの法則

\[Frequency=\frac{K}{Rank^A} \] K,A: 定数

K=freqMtx[1,1]
A=0.8

rank <- seq(1:dim(freqMtx)[1])
zipf <- K/rank^A

グラフ図:Zipf’sの理論式

plot(zipf, log="xy", type="l",col="red" ,
xlim=c(1,nrow(freqMtx)),ylim=c(1,50),main="Zipf's Law", xlab="Rank", ylab="Frequency")

頻度散布図&Zipf’sの理論式の重ね書き

par(new=T)
plot(rank,freqMtx[,1], xlim=c(1,nrow(freqMtx)), ylim=c(1,50),log="xy",pch=8, col="darkgreen", main="Zipf's Law", xlab="Rank", ylab="Frequency")

凡例をつける: legend

配置:“bottomright”, “bottom”, “bottomleft”, “left”, “topleft”, “top”, “topright”, “right”, “center”
ラベル
lty: 線の種類
pch: プロットの種類
legend("topright",c("Frequency","Zipf's law"),lty=c(NA,1),pch=c(8,NA),col=c("darkgreen","red"))

(練習) Lec05_appendixファイルで作図

Shiny

Shiny apps Demo

shinyパッケージ

library(shiny)

Shiny app作成手順

  1. Shiny appのフォルダを作成
  2. ui.R, server.R, (global.R)のスクリプトファイルを作成
  3. runApp(フォルダ名)で実行

app_hoge

  • server.R
  • ui.R
runApp("apps/app_hoge")

今日の課題: shiny app

変数freqMtxの粗頻度数とそのZipf’sの理論式の散布図に対して、定数K,Aをインタラクティブに表示するshiny appを作成しなさい。

  • “app_zipfs”フォルダを土台にすること。
  • 作成上の注意: 定数K,Aは以下のように設定すること。
    • 定数K: 範囲50-200, 初期値=変数freqMtxの最大粗頻度数
    • 定数A: 範囲0.5-1.5, 初期値=0.8, step=0.05
  • 作成例