提供: Japanese Scratch-Wiki
(最頻値から転送)
このきじは ひらがなでよめません。ごめんなさい。編集者向け:作成する
このチュートリアルでは、Scratchで数値データの最頻値 を求める方法を説明する。
最頻値 (モード) とは、データ集合のなかで最も頻繁に登場するデータを指す。登場回数が同じデータが複数存在する場合は、それらをすべて最頻値とみなす。ぱっと考える分にはシンプルなルールなのだが、プログラムで求めるときは結構複雑になる。
スクリプト例
ここで紹介するスクリプトでは、新たなデータが登場するたびにデータリストのすべてのデータを調べて、登場回数が最大のものを記録していく。そして、ひととおり処理が終わった後、調べた最頻値を表示する。
- 変数
- 「現時点での最大回数」 — その時点で最も多く登場した値の登場回数を保持する
- 「カウンター」 — 回数を数える
- 「項目」 — 現在カウント中のデータを入れる。最頻値が複数あるときに、1つずつ取り出す
- 「比較用項目」 — データをカウントするときに比較する
- 「最頻値」 — 最頻値が複数存在する場合、この変数に全部くっつけて保持する(スプライトが最頻値を表示するときにこの変数を使う)
- リスト
- 「現時点での最頻値リスト」 — その時点での最頻値
- 「データリスト」 — 調べる対象の数値データ
- 「調べ終わったデータ」 — カウントが終わったデータのリスト(このスクリプトでは、すでに数え終わったデータを記録することで処理の効率を上げている)
[調べ終わったデータ v] のすべてを削除する [現時点での最頻値リスト v] のすべてを削除する [現時点での最大回数 v] を [0] にする [項目 v] を [0] にする ([データリスト v] の長さ::list) 回繰り返す [カウンター v] を [0] にする [比較用項目 v] を [0] にする [項目 v] を (1) ずつ変える もし <<[調べ終わったデータ v] に ([データリスト v] の (項目) 番目) が含まれる> ではない> なら ([データリスト v] の (項目) 番目) を [調べ終わったデータ v] に追加する ([データリスト v] の長さ::list) 回繰り返す [比較用項目 v] を (1) ずつ変える もし <((比較用項目)番目([データリスト v])) = ([データリスト v] の (項目) 番目)> なら [カウンター v] を (1) ずつ変える end end もし <(カウンター) = (現時点での最大回数)> なら ([データリスト v] の (項目) 番目) を [現時点での最頻値リスト v] に追加する end もし <(カウンター) > (現時点での最大回数)> なら [現時点での最大回数 v] を (カウンター) にする [現時点での最頻値リスト v] のすべてを削除する ([データリスト v] の (項目) 番目) を [現時点での最頻値リスト v] に追加する end end end もし <([現時点での最頻値リスト v] の長さ::list) > [1]> なら もし <(([データリスト v]) / (現時点での最大回数)) = ([現時点での最頻値リスト v] の長さ::list)> なら [最頻値が存在しなかった] と言う でなければ [最頻値 v] を [] にする [項目 v] を [0] にする (([現時点での最頻値リスト v] の長さ::list) - (2)) 回繰り返す [項目 v] を (1) ずつ変える [最頻値 v] を ((最頻値) と (([現時点での最頻値リスト v] の (項目) 番目) と [, ])) にする end [項目 v] を (1) ずつ変える [最頻値 v] を ((最頻値) と (([現時点での最頻値リスト v] の (項目) 番目) と ([, ] と (((項目) + (1))番目([現時点での最頻値リスト v]))))) にする ([最頻値は] と (最頻値)) と言う end でなければ ([最頻値は] と (現時点での最頻値リスト)) と言う end