Now Loading...

Now Loading...

今回は統計やデータ処理で使われるR言語を使ってデータの可視化を行います。R 言語は特定のライブラリをインストールしなくてもデフォルトの機能で様々なグラフを書くことができます。そこで最初に R に最初から備わっている機能を使ってグラフを描画して可視化を行います。これをR言語と区別してR baseと呼ぶことにします。次に R の可視化でよく使われるライブラリである ggplot2 を使って可視化を行います。元々ある R でも多くのグラフを書けますが ggplot2 を使うことでより様々な機能が使えグラフの書き方も変えることができます。

1. R base でグラフの描画

最初に R に元々備わっている機能を使ってグラフの描画を行います。R のデフォルトでかけるグラフはデータを分析する際、に瞬時に可視化をしたいときに使うと良いと思います。この後紹介する ggplot2 よりも早く動くという利点があります。

1.1 ヒストグラム

まずは統計などでよく使われるヒストグラムの描画をしていきます。今回ヒストグラムでの可視化で使うデータはデータ分析でよく使われる iris データを使います。まずデータの中身を確認してみます。

 

ヒストグラムでは setosa の Sepal.Length を使ってグラフを書いてみます。

 

データを入力しただけでこのようにグラフの描画ができます。とても簡単に書けますね。これだけでも自分が理解する分には十分です。ヒストグラムは階級を変えたり度数表現を密度で表すこともできます。デフォルトの設定で階級はスタージェスの公式で設定されています。スタージェスの公式は次のように書かれます。

nはデータの数です。

hist() 関数の中身を見てみるとこのようになっています。

#ヒストグラム
hist(
    x=data,                     #表示するデータ
    breaks=breaks,          #階級 
    freq = TRUE             #TRUEで度数
    probability=FALSE          #TUREで密度
    labels = FALSE,         #度数や密度の表示
    axes = TRUE,                #軸の表示
    density = density
    angle = deg
    main="グラフ名前", 
    xlab="xラベル", 
    ylab="yラベル", 
    col='色',
    border='色', 
   )

階級を増やして度数表現を密度表現にし斜線を引いてみます。

 

最後にグラフに色をつけ、ラベルを入れていきます。

 

このグラフは機能を適当に使っているだけなので見やすいグラフになるように工夫してみるといいです。基本的に他のグラフも同じように書くことができるので他のグラフも書いていきます。

1.2 棒グラフ

棒グラフを書いていきます。まずはただの数値ベクトルをグラフで表します。

 

barplot()の中身で先ほど紹介してないものをまとめてみました。hist()で書いた色などは省いてありますがヒストグラムの時と同様に書くことでできます。

#棒グラフ
barplot(data='行列で指定', 
        space='barの幅(数字指定)', 
        main = "グラフの名前",
        sub = '下にグラフの名前'
        legend='はん例', 
        beside=FALSE      #TRUEで重ねず横並びに表示
       )

次に複数あるデータを描画してみます。データは死亡率のデータを使います。まずデータを見てみましょう。

 

このデータを棒グラフで表します。

 

複数のデータもこのように自動的に色を変えて表示してくれます。デフォルトでは複数のデータを積み重ねて表示することができます。

1.3 折れ線グラフ

折れ線グラフを書いてみます。データは適当に作ったデータを用います。

 

plot() 関数を使うことで描くことができます。デフォルトの状態だと線ではなく点で表されるため散布図になります。type を変えることでグラフを変えることができます。

typeグラフの形
“p”散布図
“l”折れ線図
“b”点と線(繋がっていない)
“c”折れ線図(繋がっていない)
“o”点と線
“h”棒グラフのような線(細い線)
“s”棒グラフのようなステップグラフ

他の引数は hist() や barplot() と同いじようにmain, sub, ylab, xlab などで軸ラベルを設定したりグラフの名前をつけたり色をつけたりすることができます。

1.4 円グラフ

円グラフを書いてみます。データは私が作成した分数の合計が1となるデータを使います。

 

円グラフも非常に簡単に書けます。勝手に色分けや大きい順のラベルを入れてくれます。

色やラベルを変えてグラフに名前をつけます。clockwise をTRUEとすることで元々のデータの順に時計回りで表示します。FALSE で反時計回りに表示します。

 

おまけですが面白い表示を見つけたので紹介します。edges を指定することで多角形表示できます。また radius を変えることで不思議な図も書けます。

 
 

1.5 散布図

最初のヒストグラムでも扱った iris のデータを使って描画してみます。最初に setosa の Sepal.LengthとSepal.Width の関係を散布図で見てみます。

 

これで描画できました。pchは散布図の点の表し方を示していて数を変えることでいろんな表示の仕方があります。丸や三角、四角など変えられます。bg で塗りつぶしができるようになっています。

他の種類の特徴と比べてみたいのでグラフを重ねて表示してみます。この際軸を同じにする必要があるのでそれぞれ合わせています。

 

三つのグラフを重ねて書きました。par(new=T) と書くことで新しいグラフを上に重ねることができます。軸を全ての図で同揃えないとずれた意味のないグラフになってしまうので xlim=c(4.0,8.0), ylim=c(1.5,5.0)として軸を揃えてあります。ann=Fとすることで2枚目以降のグラフの軸を書かない設定にしてあります。凡例やタイトルはグラフの外部からlegend, title で入れることができます。

下のようにfor 文を使ってデータを順番に書く方法もあります。

 

2. R の描画ライブラリ ggplot2 を用いてグラフの描画

R のグラフの可視化としてよく使われる ggplot2 を用いて可視化を行っていきます。R に元々ある関数でのグラフの描画は一回描画するために全ての形を揃えて一度に描画する感覚であったのに対して ggplot2 はグラフの要素を一つずつレイヤーを重ねて描いていく感覚であるととが特徴だと言われます。R の方が少し速く描画できるようですがあまり変わりません。R 言語でグラフを描画する際は ggplot2 が使われることが多いようです。また、R に元々ある関数では特殊な指定が必要になるのに対して ggplot2 が全てのグラフで統一したインターフェースとオプションのセットがあります。 よって一つの知識でいろんなグラフを書くことができます。

2.0 ggplot の 基本的構造と文法

グラフの描画の前に基本的な構造と文法を説明します。下の図のように ggplot2 は層を重ねていくように作ります。

ggplot(data, aes(x="x軸の選択", y="y軸の選択", ......))+
geom_○○○()+

グラフの基本的な準備は ggplot() を用いて行います。データを描画するグラフを用意するイメージです。ggplotの最初の引数はデータでプロットするデータを入れます。軸だけなどの設定の場合はNULLを入れればデータは選択されません。aes()でデータをどのようにグラフで使うかを選択します。軸にどのデータを用いるか、グループ化による色の選択などができます。その後 geom_○○○()のように棒グラフ、散布図などグラフの形を変えて表示します。ちなみに棒グラフは geom_col()、散布図は geom_point() です。基本的にこの二つがあればグラフを書くことができます。層を重ねる場合は “+” で追加していきます。その上の層ではグラフの軸を変えたり、凡例を入れたり、色を変えたりなど見え方を変えたりなど工夫をしていきます。

また途中まで書いたグラフなどを変数に代入することでオブジェクトとして使うことができます。

基本的な ggplot2 でのグラフの描画のイメージはつかめたでしょうか。では以下でさまざまなグラフを描画していきます。

2.1 棒グラフ

ggplot2で棒グラフを描いてみます。アメリカの2000年から2010年までの人口の変動率を表したデータを用いて可視化をおこなってみます。使うデータは人口変動の大きい上位10州のデータを用います。

 

Stateが州の名前、Abbが略名、Regionが州の地域、Changeが人口変動率を表しています。これを用いてグラフを書きます。

 

グラフを書くことができました。

少し要素を加えてみやすくしてみます。

 

地域でグループ化して色をかえました。棒グラフに限らず ggplot2 のグラフ全てで共通しているのが fillが塗りつぶしの指定、colourが縁の色の指定ができます。今回色を書いてませんが勝手に Region でグループ化して色をデフォルトで設定してくれます。

色を変えたり他の要素を加えたい場合などは先ほど説明したように + を使って指定して要素を追加することができます。基本的にコードはグラフによらず全く変わらないので一度覚えてしまうと非常に簡単にグラフを書くことができると思うのでいろんな方法を試すといいかと思います。

 

先ほどのグラフに scaale_fill_manual で色を変更し、さらに geom_text でデータの値を上から書いて表示しました。このように簡単に好きなように色を変更したり要素を追加したりできます。かなり多くの機能があるのでよりみやすく伝わりやすいグラフにすることができます。

2.2 折れ線グラフ

まず適当に作ったデータを描画してみます。

 

geom_line()でグラフ描画します。geom_point()は散布図を描くとに用いりますが、要素として追加すると点をプロットしてくれます。

次に、今回は紀元前からの世界人口の数位のデータを使います。データの確認です。

 

これを描画してみます。今回は線の種類を変えてみます。

 

linetype で種類を変更、size で線の大きさを変更し、colour で線の色を変えてみました。y軸にスケールが違いすぎるので少し変えてみます。

 

scale_y_log10() で y軸のスケールを変えてみました。これで少しみやすくなりました。近代から一気に人口が増加し増加の加速が加速していることがわかります。また、geom_point()でデータの点を示しました。しっかりデータとして取れているのは紀元後だとわかります。

2.3 散布図

ggplot2 で散布図を書いてみます。データはirisデータを使います。

ではグラフを書きます。

 

Speciesでグループ化し色、形を変えて表示しています。scale_shape_manualscale_colour_manualscale_fill_manual で形、色を変えました。形の番号はRで定められている番号と同じで上のR base を使って散文図を書いたときと同じ形にしました。これでR baseで描画した時と同じような図になりました。こちらの方が非常に簡単に書くことができると思います。

 

今回は size を Petal.Length で、fill を Petal.Widthマッピングしグループ化しました。連続的な数値データでマッピングすると自動的に大きさを連続的に変えて表示してくれます。同様に fill を連続データでマッピングをすると色のこさを変えて表示しれくれます。少しみにくいですが全ての特徴のデータをこの数行の code で表現することができました。このグラフからSepal.LengthSepal.Width で setosa が分類でき、Petal.Width で versicolor、virginicaの分類がある程度できると思います。

おまけですが散布図のデータに回帰モデルの直線をフィットすることもできます。

 

2.4 ヒストグラム

ggplot2 でヒストグラムを書いてみます。これまでのグラフはグラフの描画として必要なデータが x軸とy軸で二つありましたが、ヒストグラムでは一つのデータののみなので他のグラフと少し違います。

データは iris のデータを用いて描画してみます。

 

ヒストグラムは geom_hist() で表示することができます。

R base の時は特に指定しなくてもデフォルトのスタージェスの公式での分割により描画できましたが ggplot では デフォルトは30分割されます。今回は iris の Sepal.Length の値から0.5 ずつで表示してみました。またデフォルトの色は黒で表示されます。

おまけですが密度曲線を書いてみたいと思います。

 

ヒストグラムの y軸をaes()の中で “..density..” と指定することで密度で表しています。密度関数の描画は geom_density() で描くことができます。

2.5 ggplot の使い方まとめ

最後に軸の範囲の指定やラベルなどよく使いそうな関数をまとめました。基本的な ggplot() + geom_○○○ の後ろに+で要素を追加してグラフを変えてよりみやすい意味のあるグラフを作るといいでしょう。これは私が使おうと思った一部なので他にもggplot2 には多くの機能があるので調べてみるといいでしょう。

#### グラフの軸やラベルの設定 ####

#軸の範囲
xlim(min, max)
ylim(min, max)
#軸名前の変更
labs(x="name", y="name")
xlab("name")
ylab("name")
#グラフのタイトル
ggtitle("name")

#########################


##### 色や形の指定 #######

#色の設定はベクトルでデータの色分けの要素を指定します(カラー番号でも指定できる)。
scale_shape_manual(values=c("要素"))
scale_colour_manual(values=c("要素"))
scale_fill_manual(values=c("要素"))

#色の指定はggplotで元々決まっているpaletteから選んでも変えられます。
scale_colour_brewer(palette = "パレットの種類の名前")
scale_fill_brewer(palette = "パレットの種類の名前")

#########################


####注釈 #################
annotate("text", x="グラフのx座標", y ="グラフのy座標", label = "入れる文字")
#数式も入れられる
annotate("text", x="グラフのx座標", y ="グラフのy座標", 
         parse=TRUE, label = "frac(1,sqrt(2 * pi)) * e ^ {-x^2 / 2}")

まとめ

R言語でのデータの可視化としてR base 、ggplot2 を用いてさまざまなグラフを書いてみました。個人的には ggplot2 の方が code をかくときに統一された記述方法で指定できるため使いやすくまた、より見やすい綺麗なグラフを作ってくれるため使いやすいと感じました。また、これは今回は簡単なグラフしか描画しませんでしたが他にもグラフや表示方法でもっと見やすいグラフを書くことができるため、プレゼン資料など人に見せるグラフを作る場合に使えると思いました。

データ整理やグラフではPythonのPandasやseaborn、Matplotlib 他にはエクセル、matlab、gnuplot などさまざまな言語やライブラリがありますが R を使う方法もあります。他の言語より比較的簡単だと思うので試しに使ってみるのもいいかもしれません。

\ シェア /

E資格スピードパッケージ

E資格スピードパッケージ2023#2修了者合格率100%達成

zero to one E資格 jdla

zero to oneの「E資格」向け認定プログラム

日本ディープラーニング協会の実施するE資格の受験ならzero to oneの「E資格」向け認定プログラム (税込165,000円) をおすすめします。当講座は、東京大学大学院工学系研究科の松尾豊教授と東北大学大学院情報科学研究科の岡谷貴之教授が監修する実践的なプログラムとなっています。
厚生労働省の教育訓練給付制度対象のE資格認定プログラムの中では最安値※となり、実質負担額49,500円~(支給割合70%の場合)で受講可能です。※2023年弊社調べ zero to one E資格 jdla

人工知能基礎講座を提供中

人工知能の第一人者である東京大学の松尾豊教授が監修した人工知能基礎講座を受講してみませんか? 人工知能の歴史から自然言語処理、機械学習、深層学習といった最先端のトピックやAIに関わる法律問題まで網羅しているので全てのビジネスパーソン・AIの初学者におすすめです。

サンプル動画

人工知能基礎講座はこちら↓ zero to one G検定 人工知能基礎 jdla

AI初学者・ビジネスパーソン向けのG検定対策講座

G検定受験前にトレーニングしたい方向けの問題集「G検定実践トレーニング」も提供中です。 zero to one E資格 jdla