0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

irisデータで学ぶRの基本操作と決定木分析

Last updated at Posted at 2025-09-08

概要

普段Pythonでデータ分析をしていると、「Rって何ができるの?」「Pythonとどう違うの?」と疑問に思うことがあるかもしれません。この記事では、そんな疑問に答えるため、Rの基本的な使い方を、具体的なデータ分析の流れに沿ってご紹介します。

今回は、Rに標準で搭載されているiris(アヤメ)データセットを使い、データの読み込みから可視化、簡単な機械学習(決定木分析)までを紹介します。

1. 実行環境の準備

まずは、分析の準備としてRと、Rを快適に使うための統合開発環境(IDE)であるRStudioをインストールします。

インストールが面倒な場合や手軽に試したい場合は、Webブラウザで利用できるPosit Cloud(旧RStudio Cloud)もおすすめです。

RStudioの起動と画面構成

RStudioを起動すると、画面が4つのエリア(ペイン)に分割されています。

スクリーンショット 2025-09-07 18.05.06(2).png

  1. ソース (Source) : Rスクリプト(.Rファイル)を編集するエリア。ここにコードを書いて保存します。
  2. コンソール (Console) : コードを1行ずつ実行し、結果をすぐに見ることができます。
  3. 環境 (Environment) / 履歴 (History) : 作成した変数やデータの中身を確認できます。
  4. ファイル (Files) / プロット (Plots) : 作成したグラフ(プロット)やファイル一覧が表示されます。

今回はコードを後から見返せるように、スクリプトファイルを作成します。メニューから [File] > [New File] > [R Script] を選択してください。ソースエリアに新しいタブが開きます。

2. データ分析の準備

必要なパッケージのインストールと読み込み

Rでは、install.packages()関数で機能を追加(インストール)し、library()関数でその機能を呼び出して(読み込んで)使えるようにします。

今回は、決定木分析とその可視化のために、rpartとpartykitという2つのパッケージを使います。

# パッケージのインストール(初回のみ)
install.packages("rpart")    # 決定木モデルを作成するパッケージ
install.packages("partykit") # 決定木をきれいに可視化するパッケージ

# パッケージの読み込み(Rを起動するたびに必要)
library(rpart)
library(partykit)

irisデータセットについて

Rには、学習用にいくつかのデータセットが標準で組み込まれています。今回はその中から、統計学や機械学習で非常によく使われるiris(アヤメ)データセットを利用します。

このデータセットには、3種類のアヤメ(setosa, versicolor, virginica)について、それぞれ50個体、合計150個体分のデータが収められています。

列名 内容
Sepal.Length がくの長さ
Sepal.Width がくの幅
Petal.Length 花びらの長さ
Petal.Width 花びらの幅
Species アヤメの種類

ダウンロード.png

3. データの観察(探索的データ分析)

まずはデータの中身について、基本的な関数を使って観察してみます。

データ全体を表示

データフレーム名をコンソールで実行すると、中身を確認できます。

iris
##     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
## 1            5.1         3.5          1.4         0.2     setosa
## 2            4.9         3.0          1.4         0.2     setosa
## 3            4.7         3.2          1.3         0.2     setosa
## 4            4.6         3.1          1.5         0.2     setosa
## 5            5.0         3.6          1.4         0.2     setosa
## 6            5.4         3.9          1.7         0.4     setosa
## 7            4.6         3.4          1.4         0.3     setosa
## 8            5.0         3.4          1.5         0.2     setosa
## 9            4.4         2.9          1.4         0.2     setosa
## 10           4.9         3.1          1.5         0.1     setosa

今回は150行なので問題ありませんが、行数が多い巨大なデータの場合は、操作が重くなってしまう可能性があるため、次に紹介するhead()関数を使います。

データの最初の数行を確認

head()関数を使うと、データセットの最初の数行(デフォルトでは6行)を表示できます。データ構造を素早く把握するのに便利です。

head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa

データの要約統計量を確認

summary()関数は、データセットの各列の要約統計量をまとめて表示してくれる便利な関数です。

  • 数値データ: 最小値 (Min.)、第1四分位数 (1st Qu.)、中央値 (Median)、平均値 (Mean)、第3四分位数 (3rd Qu.)、最大値 (Max.)
  • カテゴリデータ: 各カテゴリの度数(データ数)

が表示され、データの全体像を数値で把握できます。

summary(iris)
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
##  Median :5.800   Median :3.000   Median :4.350   Median :1.300  
##  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
##  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
##  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    :50  
##  versicolor:50  
##  virginica :50  
##                 
##                 
## 

データの構造を確認

str()関数(structureの略)は、データセットの構造をコンパクトに表示します。各列のデータ型(numは数値、Factorはカテゴリ変数など)や、最初の数個のデータを確認できます。

str(iris)
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

4. データの可視化

次に、データをグラフにして視覚的に特徴を捉えてみます。

箱ひげ図で分布を比較

boxplot()関数は、データの分布を箱ひげ図で可視化します。各変数のばらつき具合を一度に比較したい場合に便利です。

# par()でグラフの余白を調整し、las=2で軸ラベルを縦書きにしています
par(mar = c(7, 5, 1, 1))
boxplot(iris, las = 2)

Rplot01.png

ヒストグラムで分布を確認

hist()関数は、特定の変数がどのような値に集中しているかをヒストグラムで可視化します。
データフレーム名$列名という形式で、特定の列のデータを指定できます。

# がくの長さ(Sepal.Length)の分布をヒストグラムで表示
hist(iris$Sepal.Length)

a95753b3-6e05-4ade-90f2-c486ef00e65b.png

がく片の長さがどの値の範囲に集中しているかをヒストグラムで可視化できました。

散布図で変数間の関係を探る

plot()関数を使うと、2つの変数がどのような関係にあるかを散布図で視覚的に確認できます。ここでは「がくの長さ」と「花びらの長さ」の関係を見ていきます。
品種ごとに色分けすると、データに隠れた特徴がより明確になります。

# plot()で散布図を描画。col引数で品種ごとに色分け
plot(iris$Sepal.Length, iris$Petal.Length, col = iris$Species)

# legend()で凡例を追加
legend(x = 4.5, y = 7, legend = levels(iris$Species), col = c(1:3), pch = 19)

Rplot02.png

このグラフから、がくの長さが長いほど、花びらの長さも長くなる傾向(正の相関)が見て取れます。

相関係数で関係の強さを数値化

散布図で確認した関係の強さを、cor()関数を使って相関係数で数値化してみます。相関係数は-1から1の値をとり、1に近いほど強い正の相関、-1に近いほど強い負の相関があることを示します。

cor(iris$Sepal.Length,iris$Petal.Length)
## [1] 0.8717538

がく片の長さ(Sepal.Length)と花びらの長さ(Petal.Length)の間の相関係数は0.87となりました。

がく片の長さが長いほど、花びらの長さも長くなる傾向があることを意味します。この関係は、散布図でも確認できます。

5. 決定木による分類モデルの作成

最後に、これらのデータを使って、アヤメの種類を予測する決定木モデルを構築してみます。

rpart()関数(Recursive Partitioning and Regression Treesの略)を使うと、簡単に決定木モデルを作成できます。

# 決定木モデルの作成
dtree <- rpart(Species ~ ., data = iris, method = "class")
  • Species ~ .: モデルの形を指定するモデル式です。
    • Speciesが目的変数(予測したい変数)です。
    • ~ .は、「Species以外のすべての変数を使って予測する」という意味です。
  • data = iris: 使用するデータセットを指定します。
  • method = "class": 今回は品種を予測する分類問題なので"class"を指定します。

作成したモデルをplot()関数で可視化します。rpartオブジェクトをas.party()関数で変換すると、より見やすいグラフを描くことができます。

# partykitパッケージの機能を使って決定木をプロット
plot(as.party(dtree))

plot関数によって構築した決定木モデルを可視化します。

Rplot03.png

この決定木を見ると、「花びらの長さ(Petal.Length)が2.45cm以下か?」という最初の質問だけで、setosa種を完全に見分けられることが分かります。

このように決定木は、人間が理解しやすいシンプルなルールをデータから自動的に見つけ出してくれます。
今回の分析では、「花びらの長さと幅」という2つの特徴量だけで、3種類のアヤメを高い精度で分類できることが示唆されました。

まとめ

この記事では、RとRStudioを使った基本的なデータ分析の流れを解説しました。Pythonに慣れている方でも、Rが持つ統計解析や可視化の機能を体験いただけたかと思います。

次の記事に続きます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?