Shinyアプリ作成
実際に、「Tech-Sketch」出張所版ワードクラウドレポートを実装していきます。完全な形のコードはこちらから取得できます。
global.R
global.R
であらかじめ記事の一覧をlist型として読み込ませます。
# 全記事をlistとして保持 articles <<- list("R言語のデータ分析レポートをShinyでインタラクティブにしてみる~「環境構築編」"="8148", "WebRTC(PeerJS)で遠隔作業支援システムを作る(実装編2)"="8018", "WebRTC(PeerJS)で遠隔作業支援システムを作る(実装編1)"="8017", ……(以下略)……
選択した記事の中身の単語をファイルから読み込む関数を定義します。
ファイルはあらかじめカウント済のTSVファイルを用います。区切り文字はタブなので、read.csv()関数のオプションはsep="\t"
としておきます。
# articleディレクトリから該当記事のTSVファイルをdata.frame型で読み込む read.csv(sprintf("./articles/%s.tsv", article), sep="\t", encoding="UTF-8")
ui.R
ui.R
では以下をパラメータとして入力できるように定義します。基本的にSidebar PanelもMain Panelも変数名、ラベル名以外は先ほどのサンプルコードそのままです。
# サイドバー sidebarPanel(width = 5, selectInput("selection", "記事を選んでください", choices = articles), actionButton("update", "更新"), hr(), sliderInput("freq", "出現頻度の下限値:", min=1, max=50, value=5), sliderInput("max", "最大単語数:", min=1, max=300, value=100) ),
# ワードクラウドと記事へのリンクを表示 mainPanel(width=7, plotOutput("plot")
server.R
続いて、server.R
です。
server.R
では、ワードクラウドの入力のデータ型がdata.frame型になりますが、基本的な流れは同じです。
# 画面(ui.R)へ渡すワードクラウドを変数output$plotへ格納する output$plot <- renderPlot({ article.df <- article() # ワードクラウドの作成(min.freqとmax.wordsの値は画面から入力された値を受け取る) wordcloud_rep(article.df$word, article.df$freq, scale=c(4,0.5), min.freq=input$freq, max.words=input$max, colors=brewer.pal(8, "Dark2")) })
以上でアプリは完成です。みなさんのクライアントマシンの環境のRコンソール上で以下のコマンドを実行してみてください。
> install.packages(c('wordcloud', 'memoise')) # パッケージのインストール > runApp() # shinyの起動
以下のようなワードクラウドレポートが表示されたのではないでしょうか。試しに別の記事を選んで「更新」ボタンを押してみてください。選んだ記事のワードクラウドが表示されるでしょう。
もし、日本語が文字化けしている場合は、server.R
で日本語に対応したフォントファミリーの指定が必要です。以下とサンプルコードを参考に指定してみてください。文字化けしていない場合はこちらの対応は不要です。
Macの場合
par(family="Hiragino Mincho Pro W6") # Macの場合
Ubuntuで日本語フォントがインストールされていない場合
$ fc-list : family # インストール済みのフォントファミリーの確認 DejaVu Sans Mono ……(中略)…… $ sudo apt-get install fonts-ipaexfont # IPAフォント
par(family="IPAexMincho") # Ubuntu