→ 携帯用は別頁
≪散布図の作り方≫
◇この教材は,高校生が表計算ソフトを使って,数学Tの「データ分析」レベルの内容を扱うときの「演習の手引き」として書いたものです.(筆者自身用の備忘録でもある)
◇●1〜●4のソフトについて操作方法を解説していますが,全部読む必要はありません.自分のパソコンで使えるソフトを選んで,読んでください.
【要約】 《筆者の実験結果です.異論はあり得ます》
●1「Microsoft Excel 2021」(インストール型) ●2 無料で使える「Excel for the web」 ●3 無料で使える「Google スプレッドシート」 ●4 無料でインストールできる統計用ソフト「R」
◎印:できる,〇:概ねできる,▼:薦めない
1. 散布図
-図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)
により,散布図が表示されるが,x範囲,y範囲に全く無駄がないのでやや窮屈な図になる.x範囲,y範囲を指定するには,次のようにxlim=c(x1,x2)などの形で,(start,end)のベクトルで示す.x1,x2の大小が逆の場合は,横軸が反転表示される.
eng1<-c(40,50,55,67,74) plot(math1,eng1) -図2-
plot(math1,eng1,xlim=c(0,100),ylim=c(0,100))
• 1つの○が1人分のデータで,そのx座標が数学の得点,y座標が英語の得点を表す.• マーカーは,既定値が○(pch=1)で,pch=番号の形で指定できる.
plot(math1,eng1,xlim=c(0,100),ylim=c(0,100), pch=15,col=c('red','blue','green','#990000'))
-図3- |
U ラベル付き散布図-図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)
ここまでで,次の図4の散布図が描かれる.eng1<-c(40,50,55,67,74) plot(math1,eng1,xlim=c(0,100),ylim=c(0,100)) -図4(再掲)- • ラベルは次の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 複数系列散布図このデータにおいて,身長のデータは共通の列に書き込まれており,体重のデータは組に応じて異なる列に書き込まれている. なお,1組と書いているのは「1組の生徒の体重」,2組と書いているのは「2組の生徒の体重」であるが,このように異なる列に書かれている列見出し(列タイトル)が散布図の凡例に表示されるので,初めから「1組」「2組」と書いた. この例では,「1組」が終わってから「2組」のデータが書かれているが,コンピュータ処理上は,順序が入り乱れていても構わない・・・1組の列に(体重の)データが書かれている人は1組とみなされ,2組の列に(体重の)データが書かれている人は2組とみなされる.(話を簡単にするために,体重が「どちらにもない」とか「重複している」ようなデータはないものとする)
-図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)
ここまでで,1組の生徒の身長−体重の散布図が描かれる.W1<-c(50,58,60,65,55) plot(L1, W1,pch=16, col="blue",xlim=c(140,190),ylim=c(40,80)) 次に,2組の生徒の身長−体重の散布図が描けばよいが,Rではグラフィック画面に追加書き込みすると,デフォルトでは,それまでに書かれていたものを一旦消去してから,次の描画に移ることになるので,par(new=TRUE)を間に書き込む.
par(new=TRUE)
• par( )は,set graphical parametersの略で,グラフィカル・パラメータの設定を行う.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)) • 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ドットの場所にラベルを表示するということです |