Shingoの数学ノート

プログラミングと機械学習のメモ

SASでグラフを描いてみよう(散布図編)

日付:    カテゴリ: SAS


データ分析を行うなら、基本統計量の算出とグラフの出力は必須!ということで、SASで簡単なグラフを描いていこうと思います。今回は散布図を紹介します。


散布図を書くための準備

今回はIrisデータセットを使用します。Irisデータセットの変数説明と中身は以下の通りです。

  • Species : 花の種類
  • SepalLength : がくの長さ
  • SepalWidth : がくの幅
  • PetalLength : 花弁の長さ
  • PetalWidth : 花弁の幅

Irisデータセットの中身(一部抜粋)
iris

Irisデータはsashelpライブラリにあるので、そこからworkライブラリに持ってきます。

また、散布図を書くために、ods graphicsを設定します。


data iris;
  set sashelp.iris;
run;
ods graphics on;
ods graphics /width=16cm height=12cm;

散布図の基本

まずは、最も簡単な散布図を描きましょう。


title "SepalLength-SepalWidthの散布図";
proc sgplot data=iris;
  scatter x=SepalLength y=SepalWidth;
run;

結果
scatter1

sgplotプロシジャを使用すれば簡単にそれなりの散布図を描くことができます。


Jitter Plot

上図を詳しく見ると、実はX座標とY座標が共に同一の点が存在します。しかし、それがどの程度重なっているかを判別するのは難しいです。Jitter Plotを使用すれば、重なっている部分を少しずらして見ることができます。


title "SepalLength-SepalWidthの散布図 (Jitter Plot)";
proc sgplot data=iris;
  scatter x=SepalLength y=SepalWidth/Jitter;
run;

結果
scatter2

重なっている部分がちょっと見やすくなりましたね。


マーカーの種類を変える

マーカーはデフォルトでは青い○ですが、もちろん変更することができます。


title "SepalLength-SepalWidthの散布図 (散布図の点の種類を変える)";
proc sgplot data=iris;
  scatter x=SepalLength y=SepalWidth/
  MARKERATTRS=(color=red symbol=diamond size=8);
run;

結果
scatter3

赤いダイヤモンドで散布図が作成されました。マーカーの種類はここを参考にしてください。


グループごとに散布図の点の色を変える

グループごとに散布図の色を変えたいときもよくありますよね。sgplotでは、「group=」で指定してあげるだけでOKです。


title "SpeciesごとのSepalLength-SepalWidthの散布図";
proc sgplot data=iris;
  scatter x=SepalLength y=SepalWidth/group=Species
  MARKERATTRS=(symbol=CircleFilled size=10);
run;

結果
scatter4

花の種類によって花弁の長さや幅が異なることがわかりますね。


ヒートマップを作成する

連続値の値によって散布図の色分けを行いたいこともよくあります。これをヒートマップと呼んだりします。これも簡単に行うことができます。


title "PetalLengthで色付けしたSepalLength-SepalWidthの散布図";
proc sgplot data=iris;
  scatter x=SepalLength y=SepalWidth/
  COLORMODEL=(blue gray red) COLORRESPONSE=PetalLength
  MARKERATTRS=(symbol=CircleFilled size=10);
run;

結果
scatter5

花弁が短く、幅が広いところではがくの長さが短いことがわかりますね。


散布図行列を作成する

変数が多くなると、いちいち散布図を作成するのは面倒です。そこで、散布図を一気にかける散布図行列を紹介します。


ods graphics/width=19cm height=19cm;
title "散布図行列";
proc sgscatter data=iris;
  matrix _numeric_;
run;

結果
scatter6

散布図行列は変数が多すぎると処理が終わらなかったり、すごく小さくなってしまって見にくくなってしまったりします。変数の数には注意しましょう。


Comment Box is loading comments...