[連載]フリーソフトによるデータ解析・マイニング 第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
RにPrestigeというデータセットがある。Prestigeは1971年にアメリカで102業種について6項目分けて行った調査データである。データは102行6列のデータフレーム型である。紙面の都合により、次に用いる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 でモザイクグラフを作成することができる。
1912年4月10日、2千人以上の乗客を乗せ、イギリスのサウサンプトン港を出港し、アメリカのニューヨークに向かったタイタニック号が悲惨な海難事故を引き起こし、4月14日沈没したことは世界で知られている。その際の生還者と死亡者を乗員の等級、性別などに分けて整理したデータTitanicがRの中にある。
> 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列からGNP、GNP、失業者数、軍隊人員数、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 チャノフの顔形グラフ
チャノフの顔形グラフはユニークであるが、変数と顔の部位の対応を換えると顔の形や表情が変わるので、変数と顔部位の対応の調整が大変である。