DB基盤のRシャイニーアプリの可視化 - DB活用の理由から実践コードまで

データを分析して可視化する過程で 常に最新のデータを反映することが重要します。しかし、CSVファイルを毎回更新するのは面倒だし、コードを実行するたびにデータを新たにロードするのも非効率的です。 😫。
こんな時、データベースを活用するのが良いのでしょうか? DBベース Rシャイニーアプリの可視化を使うと、データを効率的に保存することができます、 R シャイニー アプリで呼び出して可視化することができます!🎉。
今日は SQLiteを活用して 5年分のデータを生成し、それをShinyアプリで呼び出して視覚化するプロセスを段階的に見ていきましょう。 もちろん! 実際のコードを含めて親切に説明する予定ですので、最後までお付き合いください😉。
DB活用の理由:なぜCSVではなくDBを使うべきか?
CSVとデータベース(DB)を比較すると、違いが明確になります。
| 比較項目 | CSVファイル | データベース(DB) |
|---|---|---|
| データ保存 | ファイルとして保存 | 表形式で保存 |
| データ更新 | 手動でファイルを修正する | SQLクエリで簡単に修正 |
| マルチユーザーアクセス | 難易度 | 可能(Shiny、ウェブアプリ活用) |
| 速度 | 遅い(ファイルの読み込みが必要) | 高速(SQLクエリを活用) |
上の比較からわかるように、 Shinyアプリのような動的なウェブアプリケーションを作成する時、DBを活用すればもっと効率的です。です!
🚀 [実践] R Shinyアプリでデータベースを活用した可視化を実装する
1️️⃣ SQLite DBにデータを保存する
まず、 5年分(2020~2024年)の売上データをランダムに生成してSQLiteに保存というコードを書いてみます。
# パッケージを読み込む
library(DBI)
library(RSQLite)
# SQLite DB接続
conn <- dbConnect(RSQLite::SQLite(), "sales_data.sqlite")
# データ生成
set.seed(123)
years <- rep(2020:2024, each = 12)
months <- rep(1:12, times = 5)
sales <- sample(100:500, 60, replace = TRUE) + (years - 2020) * 20 # 年ごとの増加を反映する
sales_data <- data.frame(year = years, month = months, sales = sales)
# 既存テーブルを削除して保存
dbExecute(conn, "DROP TABLE IF EXISTS sales")
dbWriteTable(conn, "sales", sales_data, overwrite = TRUE, row.names = FALSE)
# DB接続解除
dbDisconnect(conn)
コード解説
- SQLiteデータベース接続:
dbConnect()を使用してDBファイルを生成して連結します。 - ランダムデータ生成:
年,ヶ月,売上高データを作成し、5年分のデータを生成します。 - DBに保存: 既存のテーブルを削除した後
dbWriteTable()にデータを保存します。 - DB接続解除:
dbDisconnect()を呼び出して接続を終了します。
2️⃣ ShinyアプリでDBデータを読み込んで可視化する
さあ ShinyアプリでSQLiteからデータを読み込み、ggplot2で可視化する。の過程を見てみましょう🔥。
library(shiny)
ライブラリ(DBI)
library(RSQLite)
library(ggplot2)
# UI定義
ui <- fluidPage(
titlePanel("📊DBベースのRシャイニーアプリの可視化")、
sidebarLayout(
sidebarPanel(selectInput("year", "年選択:", choices = 2020:2024, selected = 2024))、
mainPanel(plotOutput("salesPlot"))
)
)
# サーバーロジック
tserver <- function(input, output) {
conn <- dbConnect(RSQLite::SQLite(), "sales_data.sqlite")
sales_data_reactive <- reactive({
query <- paste0("SELECT * FROM sales WHERE year = ", input$year)
dbGetQuery(conn, query)
})
output$salesPlot <- renderPlot({
df <- sales_data_reactive()
ggplot(df, aes(x = month, y = sales)) +
geom_line(color = "青") + + geom_line(color = "青")
geom_point(color = "赤") + geom_point(method = "赤") + ggplot(color = "red")
geom_smooth(method = "lm", formula = y ~ poly(x, 2), color = "darkred", linetype = "dashed") + geom_point(color = "赤")
theme_minimal()
})
onStop(function() { dbDisconnect(conn) })
})
shinyApp(ui, server)
コード解説
- ユーザーが年号を選択できるようにUIを設定 (
selectInput()使用) - ShinyサーバーからDB接続後、該当年のデータを読み込む。
- ggplot2を活用した可視化 (
geom_line()+geom_smooth()でトレンドラインを追加)

DB データの追加更新方法
DBに新しい年のデータを追加したい場合は、既存のテーブルを削除せずに データを追加(append)する方法で更新例えば、2025年のデータを追加するコードを書くと次のようになります。
conn <- dbConnect(RSQLite::SQLite(), "sales_data.sqlite")
# 2025年のデータ生成
set.seed(125)
years <- rep(2025, each = 12)
months <- 1:12
sales <- sample(100:500, 12, replace = TRUE) + (2025 - 2020) * 20
new_data <- data.frame(year = years, month = months, sales = sales)
# 既存テーブルに追加
dbWriteTable(conn, "sales", new_data, append = TRUE, row.names = FALSE)
# DB接続解除
dbDisconnect(conn)コード解説
- 新年度のデータ生成:
set.seed(125)を設定し、2025年のデータを生成します。 - データフレーム構成: 既存と同じ構造のデータフレームを生成します。
- DBにデータを追加:
dbWriteTable()をappend = TRUEに設定して、既存のデータに新しいデータを追加します。 - DB接続解除:
dbDisconnect()を呼び出して接続を終了します。
2025年データを追加した後、Shinyアプリで選択できるようにUIの selectInput()に2025年を追加すればOKです。📊 📊 📊 📊
📌最後に...
今、私たちは R ShinyアプリでDBベースのデータ可視化を行う方法を学びました!
- なぜDBを使うのが良いのかを理解する
- SQLiteにデータを保存する方法を学ぶ
- Shinyアプリでデータを呼び出して可視化するプロセス 慣れ親しむ
実際のプロジェクトでSQLiteだけでなく MySQL、PostgreSQLなど様々なDBを活用することもできます。😊(笑)
用語解説
- シャイニー: Rを使ってWebアプリケーションを簡単に作成できるパッケージ。
- SQLite軽量データベースで1つのファイルで管理可能で、簡単なデータ保存用に適しています。
- ggplot2:データ可視化のためのRパッケージで様々なグラフを作成可能。
- reactive(): Shinyでデータが動的に変化できるようにする関数。





