[連載]フリーソフトによるデータ解析・マイニング 7回

Rでのデータの視覚化(3)


 

 

 


8.               まざまな散布図

8.1 3変数の散布図

 通常の2次元平面上の散布図は2変数を表現しているが、横軸と縦軸を2変数に対応させ、図形の形や大きさなどで1変数を対応させることで、2次元平面上で3変数を表すことができる。

Rでは関数symbolsを用いて3変数の散布図を作成することができる。Rには31本の切り倒された桜の木について3変数で測定したtreesというデータがある。データtreesの3変数はそれぞれ、Girth(木の直径、単位はインチ)、Height(木の高さ、単位はフィート)、Volume(木の体積、単位はフィート)である。

 関数symbols用いたデータtrees Heightを横軸、Volumeを縦軸、Girthを散布図の点の直径とした 3変数の散布図の作成過程と結果を示す。散布図から、木の直径、高さ、立方体の関係が読み取られる。

 

>data(trees)

>attach(trees)

> symbols(Height, Volume, circles=Girth/10, inches=FALSE, bg = c(1:31))

29 3変数の散布図

8.2 条件付散布図

条件付(conditioning)散布図は、ある条件が与えられたもとでの2変数の散布図である。

Rでの条件付散布図を作成する関数はcoplotである。関数coplotの書式を次に示す。

 

coplot(縦軸の変数 ~ 横軸の変数 | 横軸の条件*縦軸の条件, data = データ)

 

例として、Rの中のirisデータの品種を前提条件、花弁の長さ(Petal.Length)を横軸、幅(Petal.Width) を縦軸にした散布図の作成コマンドとその結果を次に示す。

 

>data(iris)

>coplot(Petal.Width ~ Petal.Length | Species, data = iris)

 

30 irisの条件付散布図1

 

30の下段の左辺はsetosa 、下段の右辺はversicolor、上段はvirginicaの散布図である。図からsetosaのほとんどはPetal.Width<0.5, Petal.Length<2で、versicolorのほとんどは1<Petal.Width<2, 3<Petal.Length<5 で、virginicaのほとんどは1.5<Petal.Width<2.5 , 5<Petal.Length<7 であることがわかる。

 次のコマンドのように条件(Species)を次のコマンドのように設定することにより、図31のような条件付散布図を作成することはできる。

 

>coplot(Petal.Width ~ Petal.Length | Species*Species, data = iris)

31 irisの条件付散布図2

 

RPrestigeというデータセットがある。Prestige1971年にアメリカで102業種について6項目分けて行った調査データである。データは1026列のデータフレーム型である。紙面の都合により、次に用いる3つの変数のみ説明する。

 

education:教育を受けた平均の年数

income: 1971年の平均収入、アメリカドル

prestige:職業に対するスコア

 

データPrestigeはパッケージcarの中に含まれている。もし、パッケージcarがインストールされていない場合は、まずインストールを行った上で、次のように読み込む必要がある。

 

>library(car)

>data(Prestige)

 

次のコマンドのように、関数coplotに引数panel = panel.smoothを加えることによりデータの近似曲線を追加することもできる。

 

>coplot(prestige~income|education, panel = panel.smooth, data=Prestige)

32 Prestigeデータの条件付散布図

 

この条件付散布図の条件は「education」である。作成された散布図は教育水準を自動的に6つのカテゴリに分け、それに対応する散布図を6つ返している。教育を受けた年数と散布図との対応関係は、散布図の左辺から右辺に、下段から上段の順に教育を受けた年数のバーの左から右へのカテゴリに対応されている。この条件付き散布図から、教育を受ける年数が長いほど職業のスコアが高く、かつ収入も高いことが読み取られる。

 

9.モザイクグラフ

モザイクグラフは、クロス表のようなセルの度数データを長方形で示す。その長方形の面積で、セルの値を示す。

Rでのモザイクグラフを作成する関数はmosaicplotである。もし、作成されたデータがテーブル型の場合は関数plot でモザイクグラフを作成することができる。

1912410日、2千人以上の乗客を乗せ、イギリスのサウサンプトン港を出港し、アメリカのニューヨークに向かったタイタニック号が悲惨な海難事故を引き起こし、414日沈没したことは世界で知られている。その際の生還者と死亡者を乗員の等級、性別などに分けて整理したデータTitanicRの中にある。

 

> data(Titanic)

> class(Titanic)

[1] "table"

> dim(Titanic)

[1] 4 2 2 2

 

上記のコマンドの実行結果からわかるように、データTitanicはテーブル型で、4層になっている。このテーブルのデータ構造は、配列の構造と同じであると考えても差し支えない。

 

1 各層内の行の番号と内容の対応

1

2

3

4

1等=1

2等=2

3等=3

4等=乗務員

男=1

女=2

子供=1

大人=2

死亡=1

生還=2

 

データTitanicを用いて、モザイクグラフの作成についてに説明を行う。男の大人の死亡・生還データは、次のコマンドで呼び出すことができる。

 

> Titanic[,1,2,]

      Survived

Class   No Yes

  1st  118  57

  2nd  154  14

  3rd  387  75

  Crew 670 192

 

またこのデータのモザイクグラフは次のコマンドで作成することができる。データTitanicはテーブル型であるので、関数plotを用いても同様なモザイクグラフを作成することができる。

 

>mosaicplot(Titanic[,1,2,],col=T)

 

33 大人の男性乗員のモザイクグラフ

 

モザイクグラフは、長方形の面積を用いて各セルの値の大小を示す。例えば、図33では、縦軸の上の部分が生還できなかった割合、下の部分が生還できた割合で、縦の辺の長さを用いて乗客の等級内での生還・死亡の割合を示す。横軸は乗員の等級に関する情報で、長方形の横辺の長さを用いて、乗員の各等級の割合を示す。乗員を等級別に見ると、2等級の生還率が最も低いことがわかる。

タイタニックの全てのデータを用いたモザイクグラフを次に示す。

 

>mosaicplot(Titanic,col=T)

34  Titanicデータのモザイクグラフ

 

 上記のモザイクグラフをざっと見るだけで、女性の生存者の割合が男性より高いことがわかる。

 

10.星図

星図は名前のとおりデータを星の形にしたグラフである。レーダーチャートのようなものである。星図は1つの星(多角形)がデータセットの1(個体)を示し、中心から伸びている線が1つの変数を表す。ただし、Rでは各変数()は、最も大きいのを1になるように変換し、星図を作成する。星図では、作成された星の形から、データの特徴を視覚的に分析する。

ここではlongleyという1947年から1962年までの16年間の7列の経済データを用いる。データの各列は物価調整済みで、1954年を100としている。第1列からGNPGNP、失業者数、軍隊人員数、14歳以上の人口数、年度、雇用数の順である。関数starsを用いた星図の作成とその結果を示す。関数starsに用いた引数key.loc = c(0,6)は凡例の座標の設定である。

 

> data(longley)

> stars(longley,key.loc = c(0, 6))

35 longleyデータを用いた星図の例1

 

関数starsに引数full = FALSEを次のように用いると星を上の半分になるように描く。

 

>stars(longley,key.loc = c(0, 6),full = FALSE)

 

36 longleyデータを用いた星図の例2

 

 星図の関数に引数draw.segments = Tを加えることにより、着色した図30のような図を作成することができる。色は引数col.segmentsに色を指定するベクトルを付値し、好みの色を用いることができる。

 

>stars(longley,key.loc = c(0, 6),draw.segments = T)

 

37 longleyデータを用いた星図の例3

11.チャノフの顔形グラフ

 チャノフの顔形グラフはチャノフ(H.Chernoff)が1973年に発表した多変数データの変数を人間の顔の各部位に対応付けたグラフである。チャノフの顔形グラフの狙いは、顔の表情からデータの特徴を読み取ることである。

 Rの本体には、チャノフの顔形グラフを作成する関数が用意されていない。群馬大学社会情報学部の青木繁伸教授は、チャノフ顔形グラフ作成のプログラムをhttp://aoki2.si.gunma-u.ac.jp/R/face.html公開している。

上記のサイトのプログラムをコピーし、Rのコンソール上に貼り付けるとチャノフの顔形グラフ作成関数face.plotが利用可能になる。関数face.plotに用いるデータは、事前処理が必要である。その処理を行うプログラムface.data は同じのページにリンクが張られている。face.plotの場合と同じくコピーしRのコンソールに貼り付けてください。

関数face.plotでは最大18変数を表示することができる。変数と顔の部位との対応関係を表5に示す。

変数の数が18未満の場合は、ゼロを加え18変数になるようにし、関数face.dataを用いてチャノフの顔形グラフ作成関数face.plot用のデータセットを作成する。

Rに弁護士によるアメリカ合衆国最高裁判官を評価したデータUSJudgeRatingsがある。このデータは43個体()12変数()である。

 

5 変数と顔の部位との対応関係

:上半顔の大きさ

:上半顔と下半顔の接続位置

:顔の長さ

:上半顔の楕円の離心率

:下半顔の楕円の離心率

:鼻の長さ

:口の位置

:口の曲率

:口の幅

:目の位置

:目の中心の離れ度合

:目の傾き

:目の楕円の離心率

:目の幅の半分

:瞳の位置

:目から眉の距離

:眉の傾き

:眉の長さ

 

 

全ての個体のチャノフの顔形グラフを示す紙面がないので、先頭の4つを用いて、顔形グラフを作成する手順を示す。

このデータは12変数であるので、各個体に6つのゼロを追加する。このゼロは、データベクトルのどの部分に入れるかに関しては自由である。説明の便利のため、最後の6つの変数をゼロとする。よって作成された複数の顔形グラフの目の楕円の離心率、目の幅の半分、瞳の位置、目から眉の距離、眉の傾き、眉の長さは同じとなる。

 

>data(USJudgeRatings)

>da1<-USJudgeRatings[1:8,]

>da2<-matrix(0,8,6)

>da3<-cbind(da1,da2)

>da4<-face.data(da3)

>par(mfrow=c(2,4),mai = c(0.05, 0.05, 0.05, 0.05))

>for(i in 1:8)face.plot(da4[i,])

 

31 チャノフの顔形グラフ

 

チャノフの顔形グラフはユニークであるが、変数と顔の部位の対応を換えると顔の形や表情が変わるので、変数と顔部位の対応の調整が大変である。