≪散布図の作り方≫

◇この教材は,高校生が表計算ソフトを使って,数学Tの「データ分析」レベルの内容を扱うときの「演習の手引き」として書いたものです.(筆者自身用の備忘録でもある)
◇●1〜●4のソフトについて操作方法を解説していますが,全部読む必要はありません.自分のパソコンで使えるソフトを選んで,読んでください.
【要約】 《筆者の実験結果です.異論はあり得ます》
●1「Microsoft Excel 2021」(インストール型)
●2 無料で使える「Excel for the web」
●3 無料で使える「Google スプレッドシート」
●4 無料でインストールできる統計用ソフト「R」

●1●2●3●4
T 散布図
U ラベル付き散布図
V 複数系列散布図
青文字のクリックで解説の記述にジャンプできる
◎印:できる,〇:概ねできる,▼:薦めない

1. 散布図

-表1-
名前数学英語
清盛6040
頼朝2050
光秀4555
信長6067
秀吉4074

-図1-

 何人かの生徒の「数学の得点」と「英語の得点」を調べたら,表1の結果が得られたとする.(架空データ)
 これら2種類の得点には,どのような関係があるかを調べるには,相関係数,平均,標準偏差のような数値を利用する方法の他に,図1のように2種類のデータをx,y座標とする点で表して,直接目で観察する方法がある.図1は散布図と呼ばれる.
●1 「Microsoft Excel 2021」(インストール型)
◎:できる
(1) 表1のデータがExcel上にあるとして,列タイトル(数学,英語)を含めて,桃色で示した2列のデータ範囲をドラッグして反転表示にする.(この段階では,まだ名前の列を含めない)
(2) 挿入→散布図
ここまでの作業で,図1のようなグラフができる.(グラフのタイトル,縦横軸のラベルは直接書き込める)
●2 無料で使える「Excel for the web」
⇒導入方法は前のページ
◎:できる
 作業手順は,●1とほぼ同じ.
●3 無料で使える「Google スプレッドシート」
⇒導入方法は前のページ
◎:できる
 作業手順は,●1,●2とほぼ同じ
(1) 表1のデータがスプレッドシート上にあるとして,列タイトル(数学,英語)を含めて,桃色で示した2列のデータ範囲をドラッグして反転表示にする.(この段階では,まだ名前の列を含めない)
(2) 挿入→グラフで,一旦,円グラフが表示されるので,グラフの種類を散布図に選び直す.
●4 無料でインストールできる統計用ソフト「R」
⇒導入方法は前のページ
◎:できる
• Rのコマンドプロンプトから,次のように入力する.
• Rでは変数名(ここではベクトル名:数字の束をベクトルという)に日本語漢字も使えるが,日本語漢字の変数を使うと,プロンルトでの画面上の位置が微妙にずれるので,半角英数字の方が使いやすい.代入する記号は,山かっこ(<)とハイフン(−)を組み合わせたもの,cは数字の束(ベクトル)を表すときに使う.
各行末でエンターキーを押す.plot()が散布図を表示する関数.
math1<-c(60,20,45,60,40)
eng1<-c(40,50,55,67,74)
plot(math1,eng1)
により,散布図が表示されるが,x範囲,y範囲に全く無駄がないのでやや窮屈な図になる.x範囲,y範囲を指定するには,次のようにxlim=c(x1,x2)などの形で,(start,end)のベクトルで示す.x1,x2の大小が逆の場合は,横軸が反転表示される.

-図2-

plot(math1,eng1,xlim=c(0,100),ylim=c(0,100))
• 1つの○が1人分のデータで,そのx座標が数学の得点,y座標が英語の得点を表す.
• マーカーは,既定値が○(pch=1)で,pch=番号の形で指定できる.
pch=012345615161721・・・
マーカー×・・・
• マーカーの色(のセット)は,col=c()で指定できる.1つずつの色は'red','blue'のような名前で指定することも,'#990000'のように16進カラーコード'#RRGGBB'で指定することもできる.準備した色の数がマーカーの個数よりも少ないときは,色の前から順に再利用される.次の例では,図3の散布図が得られる.
plot(math1,eng1,xlim=c(0,100),ylim=c(0,100),  pch=15,col=c('red','blue','green','#990000'))

-図3-


U ラベル付き散布図


-図4-
 散布図において,個々のデータは○,▲,■などのマーカーで表されるが,データ数が多くなると,表の中でのx,y座標の数字と散布図の中のマーカーとの照合が骨折れる作業となる.そこで,図4のようにそれぞれのマーカーにラベルを付けて見やすくすることを考える.
●1 「Microsoft Excel 2021」(インストール型)
◎:できる
(1) 表1のデータがExcel上にあるとして,列タイトル(数学,英語)を含めて,桃色で示した2列のデータ範囲をドラッグして反転表示にする.(この段階では,まだ名前の列を含めない)
(2) 挿入→散布図
(3) グラフをポイントして表示される+をクリック,データラベル→その他のオプション
右にあるデータラベルの書式ウィンドウで,「ラベルオプション」をクリック→「セルの値」をクリック.
ここで,データラベル範囲の選択になるので,をクリックして,名前を含まずに清盛〜秀吉までの人名ラベルを選択する.次に,Y値のチェックを外す.ラベルの位置は「右」が使いやすい.
以上の作業で,図4のような人名ラベル付きの散布図ができる.
●2 無料で使える「Excel for the web」
⇒導入方法は前のページ
▼:薦めない
 作業手順は,●1とほぼ同じであるが,(3)の作業において,「ラベルオプション」→「セルの値」という選択肢がないので,x,y座標以外の名前などをラベルに選ぶことができない.
●3 無料で使える「Google スプレッドシート」
⇒導入方法は前のページ
〇:概ねできる・・・できるが,コテコテかも
(1) 表1のデータがスプレッドシート上にあるとして,列タイトル(名前,数学,英語)を含めて,3列のデータ範囲をドラッグして反転表示にする.(名前の列も含める)
(2) 挿入→グラフで,一旦,円グラフが表示されるので,グラフの種類を散布図に選び直す.
以下は,画面右側に表示される「グラフエディタ」での作業になる.
(3) 設定において,x軸が「名前」になっているので,右にある三点リーダをクリックして,「削除」.次に,同じ場所で「x軸に追加」をクリックして「123 数学」を入れる.
(4) 系列の項目に「123 数学」「123 英語」の2つが入っているので「123 数学」を削除.
以上の作業で「数学の得点をx軸のして」「1つだけある系列のy軸を英語の得点とする」散布図ができる.
(5) 系列「123 英語」の右にある三点リーダをクリックして,「ラベルを追加」を選ぶ.
(*) ここまでで,名前がラベルになるが,秀吉の名前がない?←これは,デフォルト(初期設定)でラベルがマーカーの上に表示されているため,グラフの枠外に出ているから.
 そこで,「x軸の表示範囲を0〜100」「y軸の表示範囲を20〜90」「ラベルの位置をマーカーの右とする」には,カスタマイズ 横軸で「最小値0,最大値100」,縦軸で「最小値20,最大値90」,系列→データラベルで「位置」で右を選択する.
 ここまでで,図5のように名前をラベルとする散布図ができる.

-図5-
●4 無料でインストールできる統計用ソフト「R」
⇒導入方法は前のページ
◎:できる
• Rのコマンドプロンプトから,次のように入力する.
math1<-c(60,20,45,60,40)
eng1<-c(40,50,55,67,74)
plot(math1,eng1,xlim=c(0,100),ylim=c(0,100))
ここまでで,次の図4の散布図が描かれる.

-図4(再掲)-
• この上に,text(x, y, ラベル)の形で,ラベルを上書きすることを考える.
• ラベルは次のnamesの形でベクトルを指定する.
• adjはadjustmentで0で左寄せ,0.5で中寄せ,1で右寄せであるが,例えば中寄せをそのまま行えば,ラベルの中央にマーカーが重なるので,見えなくなる.そこで,基本は左寄せ:adj=0 としておき,マーカーとラベルが完全に密着してしまうと暑苦しいので,text()の表示位置を幾分右にシフトさせるのが,次のコマンド
math2<-math1+5
なお,Rの演算ではmath1<-c(60,20,45,60,40)の各成分に5加える演算は,math1+5で書ける.したがって,math2<math1+5により,math2は(65,25,50,65,45)になる.
• cexはcharacter expansionの略で,標準の文字サイズとの比率を指定する.幾つかやってみて,グラフィックとして描かれたマーカーと比べたときのラベルとして読みやすい大きさを加減する.
• 次のコマンドにより,図6の散布図が得られる.
math2<-math1+5
names<-c('清盛','頼朝','光秀','信長','秀吉')
text(math2,eng1,names,adj=0,cex=0.7)

-図6-


V 複数系列散布図

 次の表2のデータがあるとする.(架空データ)
 このデータにおいて,身長のデータは共通の列に書き込まれており,体重のデータは組に応じて異なる列に書き込まれている.
 なお,1組と書いているのは「1組の生徒の体重」,2組と書いているのは「2組の生徒の体重」であるが,このように異なる列に書かれている列見出し(列タイトル)が散布図の凡例に表示されるので,初めから「1組」「2組」と書いた.
 この例では,「1組」が終わってから「2組」のデータが書かれているが,コンピュータ処理上は,順序が入り乱れていても構わない・・・1組の列に(体重の)データが書かれている人は1組とみなされ,2組の列に(体重の)データが書かれている人は2組とみなされる.(話を簡単にするために,体重が「どちらにもない」とか「重複している」ようなデータはないものとする)
-表2-
名前身長1組2組
清盛16050
頼朝15558
光秀14560
信長16065
秀吉15055
信玄16570
謙信16860
政宗17070
家康18063
尊氏17555

-図7-

 このような表2から,図7のような「組別の身長−体重の散布図」を作ることを考える.
 ここでは身近なデータの例として,組別の身長−体重を扱ったが,複数系列散布図を使った組分けは,多くの分野で利用されている.(1) アヤメの花弁の長さと幅のデータから,品種によって分布が異なることから,あるアヤメがどちらの品種に属するかを調べることができる. (2) 源氏物語と宇治十帖の各章ごとに名詞と動詞の出現比率を散布図にすると,作者が違うのではないかという仮説を立てることができる.(3) 銅鏡,銅鐸などの出土品に含まれる金属の比率によって,作られた場所を推定できる.など
 表2のデータからから,図7のような複数系列散布図が作れるかどうか,各々の表計算ソフトで確かめた.
●1 「Microsoft Excel 2021」(インストール型)
◎:できる
(1) 表2のデータがExcel上にあるとして,列タイトル(身長,1組,)を含めて,桃色で示した2列のデータ範囲をドラッグして反転表示にする.(この段階では,まだ名前の列を含めない)
(2) 挿入→散布図
以上の作業で,図7のような複数系列散布図ができる.(マーカーは各組ごとに変えられる)
●2 無料で使える「Excel for the web」
⇒導入方法は前のページ
◎:できる
 作業手順は,●1とほぼ同じである(名前をラベルに選ぶことができないことはUと同様)
●3 無料で使える「Google スプレッドシート」
⇒導入方法は前のページ
◎:できる
(1) 表1のデータがスプレッドシート上にあるとして,列タイトル(身長,1組,2組)を含めて,3列のデータ範囲をドラッグして反転表示にする.
(2) 挿入→グラフで,一旦,縦棒グラフが表示されるので,グラフの種類を散布図に選び直す.
●4 無料でインストールできる統計用ソフト「R」
⇒導入方法は前のページ
◎:できる
• Rのコマンドプロンプトから,次のように入力する.
L1<-c(160,155,145,160,150)
W1<-c(50,58,60,65,55)
plot(L1, W1,pch=16,  col="blue",xlim=c(140,190),ylim=c(40,80))
 ここまでで,1組の生徒の身長−体重の散布図が描かれる.
 次に,2組の生徒の身長−体重の散布図が描けばよいが,Rではグラフィック画面に追加書き込みすると,デフォルトでは,それまでに書かれていたものを一旦消去してから,次の描画に移ることになるので,par(new=TRUE)を間に書き込む.
par(new=TRUE)
L2<-c(165,168,170,180,175)
W2<-c(70,60,70,63,55)
plot(L2, W2,pch=17,  col="red",xlim=c(140,190),ylim=c(40,80))
• par( )は,set graphical parametersの略で,グラフィカル・パラメータの設定を行う.
• new=TRUE または new=T により,グラフィカル画面の描画が「上書き」になる
• 上書きする前に,その都度書く
• これに対して,テキスト画面への書き込みは,デフォルトで上書きになっている
• グラフィック画面に描画するとき,デフォルトではシステムは縦横とも無駄なく詰めて描画するので,2つのグラフィック画像は縮尺がずれたものになる.これを防ぐために,x軸とy軸の下端と上端を2つの描画で共通の区間として指定する.
 xlim=c(140,190),ylim=c(40,80))
 以上の手順を復習すると,次のようになる.
L1<-c(160,155,145,160,150)
W1<-c(50,58,60,65,55)
plot(L1, W1,pch=16,  col="blue",xlim=c(140,190),ylim=c(40,80))
par(new=TRUE)
L2<-c(165,168,170,180,175)
W2<-c(70,60,70,63,55)
plot(L2, W2,pch=17,  col="red",xlim=c(140,190),ylim=c(40,80))
1組身長
1組体重
1組散布図
 の描画
上書きの指定
2組身長
2組体重
2組散布図
 の描画

 また,Uで述べたような氏名をラベルとする散布図にするには,さらに次のコマンドを追加すればよい(テキスト画面は,デフォルトで上書きされるから,par()は不要)
L1+1はベクトL1の各成分に+1する演算(マーカーのx座標+1の右側にラベルを置く)
name1<-c('清盛','頼朝','光秀','信長','秀吉')
name2<-c('信玄','謙信','政宗','家康','尊氏')
text(L1+1,W1,name1,adj=0,cex=0.7)
text(L2+1,W2,name2,adj=0,cex=0.7)
1組氏名
2組氏名
1組ラベル
2組ラベル

備考
L1=(160,155,145,160,150)のとき,L1+1=(161,156,146,161,151)
L2=(165,168,170,180,175)のとき,L2+1=(166,169,171,181,176)
マーカーの右1ドットの場所にラベルを表示するということです
 ※蛇足かもしれないが,疑問を持つ人がいては困るので,補足を一言.●1〜3のときのように,表計算ソフトの上で別の列に書き込まれているという事情は,Rのデータでは必要ない.同じグラフィック画面の上に,1組のデータと2組のデータが,マーカーの形,色などで区別して表示されていれば,それで分かる.
...メニューに戻る