提供: 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

関連項目

Cookieは私達のサービスを提供するのに役立ちます。このサービスを使用することにより、お客様はCookieの使用に同意するものとします。