はじめに:なぜR言語とTidyverseを学んだのか
私は元々、社会保険労務士として人事・労務の実務に従事していました。エクセルでの集計作業やデータ分析が日常業務の大半を占めていましたが、「もっと効率的にデータを扱いたい」「統計的な裏付けをもって提案したい」という思いから、R言語の学習を始めました。
プログラミング未経験の状態からスタートしましたが、わずか3ヶ月で実務レベルのデータ分析ができるようになりました。その鍵となったのが「Tidyverse」というパッケージ群です。
本記事では、私が実際に辿った学習プロセスと、Tidyverseの主要パッケージの使い方を初心者目線で解説します。
🎯 この記事で学べること
- R言語とTidyverseの基本概念
- dplyrを使ったデータ操作(filter, select, mutate, summarize)
- ggplot2による美しいグラフ作成
- tidyrでのデータ整形(pivot_longer, pivot_wider)
- 非エンジニアでも挫折しない学習方法
Tidyverseとは?データ分析を劇的に効率化するパッケージ群
Tidyverseは、R言語でデータ分析を行う際の「標準ツールキット」と呼べる存在です。以下の8つの主要パッケージで構成されています。
- dplyr:データ操作(フィルタリング、集計、結合など)
- ggplot2:データ可視化(グラフ作成)
- tidyr:データ整形(縦持ち・横持ち変換など)
- readr:データ読み込み(CSV、TSVなど)
- purrr:関数型プログラミング
- tibble:モダンなデータフレーム
- stringr:文字列操作
- forcats:カテゴリカルデータ(因子)操作
これらをまとめてインストールできるのがTidyverseの大きな魅力です。
# Tidyverseのインストール(初回のみ)
install.packages("tidyverse")
# ライブラリの読み込み
library(tidyverse)
💡 初心者へのアドバイス: 最初はdplyr、ggplot2、tidyrの3つに集中しましょう。この3つだけで実務の8割はカバーできます。
dplyr:データ操作の5つの基本動詞
dplyrは「データ操作のための文法」を提供してくれます。特に重要な5つの関数(動詞)をマスターすれば、ほとんどのデータ操作が可能になります。
1. filter():行をフィルタリング
特定の条件に合致する行だけを抽出します。例えば、売上データから「2025年1月」のデータだけを抽出したい場合。
# 売上データから2025年1月のデータを抽出
sales_data %>%
filter(year == 2025, month == 1)
# 売上が100万円以上のデータのみ
sales_data %>%
filter(sales >= 1000000)
2. select():列を選択
必要な列だけを選び出します。大量の列があるデータから、分析に必要な列だけを取り出すときに便利です。
# 名前、年齢、売上の3列だけを選択
sales_data %>%
select(name, age, sales)
# 特定の列を除外
sales_data %>%
select(-id, -created_at)
3. mutate():新しい列を作成
既存の列を使って新しい列を作成します。例えば、売上と利益率から「利益額」を計算する場合。
# 売上×利益率で利益額を計算
sales_data %>%
mutate(profit = sales * profit_rate)
# 複数の列を一度に作成
sales_data %>%
mutate(
profit = sales * profit_rate,
tax = profit * 0.3,
net_profit = profit - tax
)
4. summarize():データを集計
データを要約統計量に集約します。平均、合計、最大値などを計算できます。
# 売上の平均と合計を計算
sales_data %>%
summarize(
avg_sales = mean(sales),
total_sales = sum(sales),
max_sales = max(sales)
)
5. group_by():グループごとに処理
データをグループ分けして、グループごとに集計します。これがdplyrの真骨頂です。
# 部署ごとの平均売上を計算
sales_data %>%
group_by(department) %>%
summarize(
avg_sales = mean(sales),
count = n() # 件数をカウント
)
# 複数のグルーピング
sales_data %>%
group_by(year, month, department) %>%
summarize(total_sales = sum(sales))
📌 パイプ演算子(%>%)について: 「データをこの関数に渡す」という意味です。コードが左から右へ読みやすくなります。Ctrl + Shift + M(Windows)でショートカット入力できます。
ggplot2:美しいグラフを簡単に作成
ggplot2は「Grammar of Graphics(グラフィックスの文法)」という考え方に基づいた可視化ライブラリです。複雑なグラフも直感的に作成できます。
基本的な構文
# 基本構文
ggplot(data = データ, aes(x = x軸, y = y軸)) +
geom_○○○() # グラフの種類を指定
# 例:散布図
ggplot(sales_data, aes(x = advertising, y = sales)) +
geom_point()
# 棒グラフ(部署ごとの売上)
sales_data %>%
group_by(department) %>%
summarize(total_sales = sum(sales)) %>%
ggplot(aes(x = department, y = total_sales)) +
geom_col(fill = "steelblue") +
labs(
title = "部署別売上",
x = "部署",
y = "売上(円)"
) +
theme_minimal()
よく使うgeom関数
- geom_point():散布図
- geom_line():折れ線グラフ
- geom_col():棒グラフ
- geom_histogram():ヒストグラム
- geom_boxplot():箱ひげ図
💡 グラフ作成のコツ: まずシンプルなグラフを作り、徐々に色やラベルを追加していくアプローチがおすすめです。最初から完璧を目指すと挫折します。
tidyr:データ整形の2大関数
データ分析では、「データの形」を変える作業が頻繁に発生します。tidyrはその作業を簡単にしてくれます。
pivot_longer():横持ちを縦持ちに
複数の列を1つの列にまとめます。例えば、月ごとに分かれた売上データを1列にまとめる場合。
# 変換前(横持ち)
# name, jan, feb, mar, apr
# 田中, 100, 120, 110, 130
# 佐藤, 90, 95, 100, 105
# 変換後(縦持ち)
data %>%
pivot_longer(
cols = c(jan, feb, mar, apr),
names_to = "month",
values_to = "sales"
)
# 結果
# name, month, sales
# 田中, jan, 100
# 田中, feb, 120
# 田中, mar, 110
# ...
pivot_wider():縦持ちを横持ちに
pivot_longer()の逆操作です。1つの列を複数の列に展開します。
# 縦持ちデータを横持ちに変換
data %>%
pivot_wider(
names_from = month,
values_from = sales
)
📌 いつ使う? ggplot2でグラフを作る際は「縦持ち」が基本。集計表を作る際は「横持ち」が見やすいことが多いです。
実践例:実際の業務データで試してみる
ここまでの知識を使って、実際の業務でよくある「月次売上レポート作成」を自動化してみましょう。
# ライブラリ読み込み
library(tidyverse)
# CSVファイル読み込み
sales_raw <- read_csv("sales_data.csv")
# データクリーニング&集計
monthly_report <- sales_raw %>%
# 2025年のデータのみ抽出
filter(year == 2025) %>%
# 必要な列だけ選択
select(date, department, product, sales, cost) %>%
# 利益列を追加
mutate(profit = sales - cost) %>%
# 月・部署ごとに集計
group_by(month = floor_date(date, "month"), department) %>%
summarize(
total_sales = sum(sales),
total_profit = sum(profit),
profit_rate = total_profit / total_sales * 100,
.groups = "drop"
)
# グラフ作成
monthly_report %>%
ggplot(aes(x = month, y = total_sales, color = department)) +
geom_line(size = 1.2) +
geom_point(size = 3) +
labs(
title = "2025年 月次売上推移",
x = "月",
y = "売上(円)",
color = "部署"
) +
theme_minimal() +
scale_y_continuous(labels = scales::comma)
# レポートをCSV出力
write_csv(monthly_report, "monthly_sales_report_2025.csv")
このコードは、毎月手作業で2〜3時間かかっていた集計作業を、わずか数秒で完了させます。これがR言語とTidyverseの威力です。
非エンジニアが挫折しない学習方法
私自身が非エンジニアからR言語を習得した経験から、以下の学習方法を強くおすすめします。
🎓 3ヶ月でマスターする学習ステップ
- 1ヶ月目:基礎文法とdplyr
- R言語の基本文法(変数、関数、データ型)
- dplyrの5つの動詞を実務データで練習
- パイプ演算子に慣れる
- 2ヶ月目:ggplot2とtidyr
- 基本的なグラフ作成(棒・折れ線・散布図)
- データ整形(pivot系関数)
- 実務で使うレポートを1つ自動化
- 3ヶ月目:応用と自動化
- 複数のデータソースを結合(join系関数)
- R Markdownでレポート自動生成
- 定型業務を完全自動化
おすすめ学習リソース
- 書籍:『RユーザのためのRStudio[実践]入門』(技術評論社)
- 公式サイト:Tidyverse公式ドキュメント(英語だが図が豊富)
- 実践:Kaggleの初心者向けデータセットで練習
- コミュニティ:Tokyo.R(R言語ユーザーグループ)のイベント参加
💡 挫折しないコツ: 「完璧に理解してから次へ」ではなく、「とりあえず動かして、必要になったら調べる」スタイルが効率的です。エラーを恐れず、試行錯誤を楽しみましょう。
まとめ:R言語で広がるキャリアの可能性
R言語とTidyverseを習得したことで、私のキャリアは大きく変わりました。
- データに基づく提案ができるようになり、社内での信頼が向上
- 定型業務の自動化により、月20時間以上の業務時間を削減
- 統計解析のスキルを活かしてコンサルティング案件を受注
- 最終的にエンジニアへのキャリアチェンジを実現
非エンジニアでも、正しい学習方法と実践の場があれば、確実にスキルは身につきます。特にTidyverseは、直感的な文法設計により、初心者でも習得しやすい設計になっています。
「データ分析ができる人材」は、あらゆる業界で求められています。ぜひこの記事を参考に、R言語とTidyverseの世界に飛び込んでみてください。