Rシャイニーチュートリアル:あなたが知る必要があるすべて



このRShinyチュートリアルでは、RShinyの詳細で包括的な知識とインタラクティブなWebアプリケーションの作成方法を説明します。

テクノロジーの進化に伴い、リアルタイムの統計、マップ、グラフを表示するWebアプリケーションを構築するための新しいツールとフレームワークが登場しました。これらの機能には高度な処理と同期が必要なため、サーバーのロード時間を短縮するためにプログラミング言語が使用されます。このRShinyチュートリアルでは、動的WebアプリケーションでRを最大限に活用する方法について説明します。

次のトピックを取り上げて理解します。





Rシャイニーとは?

Shinyは、ユーザーがインタラクティブなWebアプリを構築できるようにするRパッケージです。このツールは、ShinyコードからHTMLに相当するWebアプリを作成します。ネイティブHTMLおよびCSSコードをRShiny関数と統合して、アプリケーションを見やすくします。シャイニーは、Rの計算能力と最新のWebの双方向性を兼ね備えています。Shinyは、サーバーまたはRShinyのホスティングサービスを使用してウェブ上にデプロイされるウェブアプリを作成します。

Rシャイニーの特徴:

  • Webツールの基本的な知識または知識がなくても簡単なアプリケーションを作成できます
  • ShinyをネイティブWebツールと統合して、柔軟性と生産性を向上させます
  • 構築済みのI / Oおよびレンダリング関数
  • 複数のリロードなしでアプリケーションコンテンツを簡単にレンダリング
  • Rスクリプトからの計算(または処理)出力を追加する機能
  • ライブレポートと視覚化を追加します。

それは私たちに質問をもたらします:



シャイニーは従来のアプリケーションとどう違うのですか?

天気予報アプリケーションの例を見てみましょう。ユーザーがページを更新/ロードしたり、入力を変更したりするたびに、JSを使用してページ全体またはページの一部を更新する必要があります。これにより、処理のためにサーバー側に負荷がかかります。 Shinyを使用すると、ユーザーはアプリ内の要素を分離またはレンダリング(またはリロード)できるため、サーバーの負荷が軽減されます。従来のWebアプリケーションではページのスクロールは簡単でしたが、Shinyアプリでは困難でした。コードの構造は、コードの理解とデバッグにおいて主要な役割を果たします。この機能は、他のアプリケーションと比較して光沢のあるアプリにとって重要です。

R Shinyチュートリアルの次のトピック、RShinyパッケージのインストールに移りましょう。

Rシャイニーのインストール

Shinyのインストールは、Rに他のパッケージをインストールするのと同じです。 Rコンソール 以下のコマンドを実行して、Shinyパッケージをインストールします。



install.packages( 'shiny')

Rシャイニーをインストール-Rシャイニーチュートリアル-Edureka

インストールしたら、ShinyパッケージをロードしてShinyアプリを作成します。

ライブラリ(光沢)

このRシャイニーチュートリアルに進む前に、シャイニーアプリケーションの構造を見て理解しましょう。

光沢のあるアプリの構造

シャイニーは3つのコンポーネントで構成されています。

  1. ユーザーインターフェース
  2. サーバ
  3. ShinyApp

1。ユーザーインターフェース機能

ユーザーインターフェース (UI)関数は、アプリのレイアウトと外観を定義します。アプリ内にCSSタグとHTMLタグを追加して、アプリを見やすくすることができます。この関数には、アプリに表示されるすべての入力と出力が含まれています。アプリ内の各要素(部門またはタブまたはメニュー)は、関数を使用して定義されます。これらは、HTML要素などの一意のIDを使用してアクセスされます。さまざまなことについてさらに学びましょうアプリで使用される関数。

光沢のあるレイアウト機能

  • headerPanel()アプリに見出しを追加します。 titlePanel() アプリの小見出しを定義します。の理解を深めるには、以下の画像を参照してください headerPanel そして titlePanel
  • SidebarLayout()保持するレイアウトを定義します sidebarPanel そして mainPanel 要素。レイアウトはアプリ画面をサイドバーパネルとメインパネルに分割します。たとえば、次の画像では、赤い長方形は mainPanel エリアと黒い長方形のエリアは垂直方向に sidebarPanel 範囲。

  • wellPanel()同じグリッド内に複数のオブジェクトアプリの入力/出力オブジェクトを保持するコンテナーを定義します。
  • tabsetPanel()タブを保持するためのコンテナを作成します。 tabPanel() タブ要素とコンポーネントを定義することにより、アプリにタブを追加します。下の画像では、黒長方形は tabsetPanel オブジェクトと赤い長方形は tabPanel オブジェクト。
  • navlistPanel()に類似したさまざまなタブパネルへのリンクを含むサイドメニューを提供します tabsetPanel() 画面の左側にある垂直リストのように。下の画像では、黒い長方形は navlistPanel オブジェクトと赤い長方形は tabPanel オブジェクト。

光沢のあるレイアウト機能に加えて、アプリの各入力ウィジェットにインラインCSSを追加することもできます。シャイニーアプリは、アプリを充実させるために、シャイニーRの特徴と機能とともにWebテクノロジーの機能を組み込んでいます。を使用してShinyアプリ内でHTMLタグを使用する タグ$。

レイアウトの準備ができました。ウィジェットをアプリに追加します。 Shinyは、ユーザーとの対話のためにさまざまなユーザー入力および出力要素を提供します。いくつかの入力関数と出力関数について説明します。

光沢のある入力機能

各入力ウィジェットには、ラベル、ID、選択、値、選択済み、最小、最大などの他のパラメーターがあります。

  • selectInput()–ドロップダウンHTML要素を作成します。
selectInput( 'select'、h3( 'Select box')、choices = list( 'Choice 1' = 1、 'Choice 2' = 2、 'Choice 3' = 3)、selected = 1)

  • numericInput()–数値またはテキストを入力するための入力領域。
dateInput( 'num'、 'Date input'、value = '2014-01-01')numericInput( 'num'、 'Numeric input'、value = 1)textInput( 'num'、 'Numeric input'、value = 'テキストを入力してください... ')

  • radioButtons()–ユーザー入力用のラジオボタンを作成します。
radioButtons( 'radio'、h3( 'ラジオボタン')、choices = list( 'Choice 1' = 1、 'Choice 2' = 2、 'Choice 3' = 3)、selected = 1)

光沢のある出力機能

シャイニーは、表示するさまざまな出力機能を提供します R 対応するを表示するプロット、画像、表などの出力 R オブジェクト。

  • plotOutput()–Rプロットオブジェクトを表示します。
plotOutput'top_batsman ')
  • tableOutput()–出力をテーブルとして表示します。
tableOutput'player_table ')

2.サーバー機能

サーバ 関数dShinyアプリのサーバー側ロジックを定義します。これには、入力を使用してさまざまな種類の出力を生成する関数と出力の作成が含まれます。各クライアント(Webブラウザー)は、Shinyアプリを最初にロードするときにサーバー関数を呼び出します。各出力には、レンダー関数からの戻り値が格納されます。

これらの関数はR式をキャプチャし、式の計算と前処理を行います。定義している出力に対応するrender *関数を使用します。入力ウィジェットにアクセスしますを使用して input $ [widget-id] 。これらの入力変数はリアクティブ値です。入力変数を使用して作成された中間変数は、を使用してリアクティブにする必要があります 反応性({}) 。 ()を使用して変数にアクセスします。

レンダリング *関数はサーバー関数内で計算を実行し、出力変数に格納します。出力はで保存する必要があります output $ [出力変数名] 。各 レンダリング *関数は、単一の引数、つまり中括弧{}で囲まれたR式を取ります。

3. ShinyApp Function

shinyApp()機能はの心臓部です呼び出すアプリ 玉ねぎ そして サーバ 光沢のあるアプリを作成する機能。

C ++で名前空間を使用する方法

下の画像は、Shinyアプリの概要を示しています。

R Shinyチュートリアルの次のセグメントに進み、最初のRShinyアプリを作成しましょう。

光沢のあるWebプロジェクトを作成する

に移動 ファイル を作成します 新たなプロジェクト 任意のディレクトリ-> 光沢のあるWebアプリケーション -> [光沢のあるアプリケーションディレクトリの名前]。ディレクトリの名前を入力して、をクリックします OK

すべての新しいShinyアプリプロジェクトには、Shinyアプリの基本を理解するためのヒストグラムの例が含まれます。ヒストグラムアプリには、スライダーと、それに続くスライダーの変更の出力を更新するヒストグラムが含まれています。以下は、ヒストグラムアプリの出力です。

シャイニーアプリを実行するには、をクリックします アプリを実行する ソースペインの右上隅にあるボタン。シャイニーアプリは、入力としてビンの数を受け取り、入力に従ってヒストグラムをレンダリングするスライダーウィジェットを表示します。

これで、Shinyアプリの構造と実行方法を理解できました。次に、最初のシャイニーアプリを作成しましょう。

最初のShinyアプリを作成する

新しいプロジェクトを作成するか、同じ作業ディレクトリで続行することができます。このRShinyチュートリアルでは、IPL統計を表示する簡単なShinyアプリを作成します。アプリで使用するデータセットをダウンロードできます ここに 。データセットは2つのファイルで構成されています。 deliveryies.csv 各ボール(オーバー)のスコア配信が含まれていますバットマン、ボウラー、ランの詳細、 matches.csv ファイルには、試合の場所、トス、会場、ゲームの詳細などの試合の詳細が含まれています。以下のアプリは、の基本的な知識が必要です dplyr そして 以下のチュートリアルを理解する。

以下の手順に従って、最初の光沢のあるアプリを作成します。

ステップ1シャイニーアプリのアウトラインを作成します。

の関数定義を除く既存のコードをクリアします アプリR ファイル。

ステップ2ライブラリとデータをロードします。

このステップでは、必要なパッケージとデータをロードします。次に、抽出したデータをクリーンアップして必要な形式に変換します。前に以下のコードを追加してください 玉ねぎ そして サーバ 関数。

コード:

library(shiny)library(tidyverse)#データセットの読み込み--------------------------------------- ----------------配信= read.csv( 'C:UsersCherukuri_SindhuDownloadsdeliveries.csv'、stringsAsFactors = FALSE)matches = read.csv( 'C:UsersCherukuri_SindhuDownloadsmatches.csv'、stringsAsFactors = FALSE)#データセットのクリーニング--------------------------------------------- --------- names(matches)[1] = 'match_id' IPL = dplyr :: inner_join(matches、deliveries)

説明

最初の2行が読み込まれます tidyverse そして シャイニー パッケージ。次の2行は、データセットの配信と一致をロードし、変数に格納します配達そしてマッチス。最後の2行は、の列名を更新しますマッチスとの内部結合を実行するデータセット配達テーブル。結合結果をに保存しますIPL変数。

ステップ3シャイニーアプリのレイアウトを作成する

前に説明したように、 玉ねぎ 関数は、Shinyアプリでのアプリの外観、ウィジェット、オブジェクトを定義します。同じことを詳しく説明しましょう。

コード

玉ねぎ<- fluidPage( headerPanel('IPL - Indian Premier League'), tabsetPanel( tabPanel(title = 'Season', mainPanel(width = 12,align = 'center', selectInput('season_year','Select Season',choices=unique(sort(matches$season, decreasing=TRUE)), selected = 2019), submitButton('Go'), tags$h3('Players table'), div(style = 'border:1px black solidwidth:50%',tableOutput('player_table')) )), tabPanel( title = 'Team Wins & Points', mainPanel(width = 12,align = 'center', tags$h3('Team Wins & Points'), div(style = 'float:leftwidth:36%',plotOutput('wins_bar_plot')), div(style = 'float:rightwidth:64%',plotOutput('points_bar_plot')) ) )))

ザ・ 玉ねぎ 関数には、 headerPanel() または titlePanel() そして続いて tabsetPanel アプリで複数のタブを定義します。 tabPanel() 各タブのオブジェクトをそれぞれ定義します。各 tabPanel() タイトルと mainPanel()。 mainPanel() 幅12のコンテナ、つまりウィンドウ全体を作成し、入力オブジェクトと出力オブジェクトを中央に配置します。

説明

アプリは2つのタブで構成されています: シーズン そして チームの勝利とポイント。

シーズン タブはで構成されています selectInput (( 、送信ボタンとテーブル。 Season_yearは、lからの入力を読み取るために使用されます値です。 tableOutput() サーバー機能で計算されたテーブル出力を表示します。テーブルplayer_tableは、次のステップで説明するサーバー関数で定義されているボタンの下に表示されます。 チームの勝利とポイント タブには、チームごとの勝利とポイントがそれぞれの棒グラフに表示されます。 plotOutput() レンダリングから返された出力を表示します * 機能。すべての出力、入力関数は、インラインスタイルを追加するためにdivタグで囲まれています。

ui関数に慣れてきたので、RShinyチュートリアルでサーバー関数の理解と使用に進みましょう。

手順4:サーバー関数ステートメントを追加する

ザ・ サーバ 関数には、関数と出力の作成が含まれますユーザー入力を使用してさまざまな種類の出力を生成するuts。ザ・サーバー機能については、以下の手順で説明します。

マッチイヤー=リアクティブ({マッチ%>%フィルター(シーズン==入力$シーズン_イヤー)})プレイオフ=リアクティブ({nth(sort(matches_year()$ match_id、decreasing = TRUE)、4)})matches_played =リアクティブ({matches_year ()%>%filter(match_id%group_by(team1)%>%summarise(count = n())})t2 = react({matches_played()%>%group_by(team2)%>%summarise(count = n( ))})wl = react({matches_played()%>%filter(winner!= '')%>%group_by(winner)%>%summarise(no_of_wins = n())})wl1 = react({matches_played( )%>%group_by(winner)%>%summarise(no_of_wins = n())})tied = react({matches_played()%>%filter(winner == '')%>%select(team1、team2)} )playertable = react({data.frame(Teams = t1()$ team1、Played = t1()$ count + t2()$ count、Wins = wl()$ no_of_wins、Points = wl()$ no_of_wins * 2) })

上記のコードフィルターは、毎年プレーオフの前にプレイされた試合をフィルターし、その結果をmatches_played変数に格納します。player_tableテーブルには、チームごとの試合統計、つまりプレー、勝利、ポイントが含まれています。変数matches_playedplayer_tablet1引き分け、などはすべて中間です 反応値 。上記のコードに示すように、これらの変数には()を使用してアクセスする必要があります。player_tablerenderTable関数を使用して表示されます。次に、playertableを格納するための出力変数を作成します。

output $ player_table = renderTable({playertable()})

次に、棒グラフを作成して、シーズン中に各チームが獲得した勝利とポイントを表示します。以下のコードは、ggplotを使用して棒グラフを表示します。 renderPlot() ggplotオブジェクトをフェッチし、結果を変数に格納しますwins_bar_plot.ggplotコードは自明であり、凡例、ラベル、およびプロットを編集するための基本的なグラフィックスとマッピング機能が含まれています。

output $ wins_bar_plot = renderPlot({ggplot(wl1()[2:9、]、aes(winner、no_of_wins、fill = winner))+ geom_bar(stat = 'identity')+ theme_classic()+ xlab( 'Teams') + ylab( 'Number Of Wins')+ theme(axis.text.x = element_text(color = 'white')、legend.position = 'none'、axis.title = element_text(size = 14)、plot.background = element_rect(colour = 'white'))+ geom_text(aes(x = winner、(no_of_wins + 0.6)、label = no_of_wins、size = 7))})output $ points_bar_plot = renderPlot({ggplot(playertable()、aes( Teams、Points、fill = Teams))+ geom_bar(stat = 'identity'、size = 3)+ theme_classic()+ theme(axis.text.x = element_text(color = 'white')、legend.text = element_text( size = 14)、axis.title = element_text(size = 14))+ geom_text(aes(Teams、(Points + 1)、label = Points、size = 7))})

ステップ5:Shinyアプリを実行します。

[アプリの実行]をクリックします。正常に実行されると、Shinyアプリは次のようになります。エラーまたは警告アプリに関連して、Rコンソールにこれらを表示します。

Tab1 –シーズン

Tab2 –チームの勝利とポイント

方法を見てみましょう設定するShinyapps.ioアカウントを使用して、Shinyアプリをデプロイします。

Shinyapps.ioアカウントを設定する

に移動 Shinyapps.io 自分の情報を使用してサインインし、ページに一意のアカウント名を付けて保存します。保存に成功すると、Rコンソールからアプリをデプロイするための詳細な手順が表示されます。以下の手順に従って、Rstudioでアカウントを構成します。

ステップ1。 rsconnectをインストールします

install.packages( 'rsconnect')

ステップ2。 アカウントを承認する

ザ・ rsconnect パッケージは、トークンとシークレットを使用してアカウントに承認される必要があります。これを行うには、以下のダッシュボードページに示すようにコマンド全体をコピーします。 R コンソール。 Rでコマンドを正常に入力したら、Shinyapps.ioアカウントにアプリケーションをデプロイすることを許可します。

rsconnect :: setAccountInfo(name = 'アカウント名'、token = 'token'、secret = 'secret')

ステップ3。 アプリをデプロイする

以下のコードを使用して、Shinyアプリをデプロイします。

library(rsconnect)rsconnect :: deployApp( 'path / to / your / app')

設定が完了すると、光沢のあるアプリをデプロイする準備が整います。

Shinyアプリを作成して実行する方法を学習したので、上記で説明したように、作成したアプリをShinyapps.ioにデプロイするか、をクリックします。 公開、 これは、Shinyアプリウィンドウの右上隅にあります。

私は願いますこのRShinyチュートリアルは、Shinyアプリを作成して実行する方法を学ぶのに役立ちました。 RShinyを使用してインタラクティブで美しいWebアプリを作成して楽しんでください。

Rプログラミングを学び、データ分析でカラフルなキャリアを築きたい場合は、 インストラクター主導のライブトレーニングと実際のプロジェクト経験が付属しています。このトレーニングは、データ分析を理解し、主題を習得するのに役立ちます。