課題レポート3: 基本的な統計処理を実装してみよう。

課題概要

  • 自動販売機を実装してみよう。

  • 変数を用いて「ある状態」を保存し、管理できるようになろう。

  • 条件分岐を用いて実行するコードを切り替えられるようになろう。


取り組み方

  • 友人らと話し合って取り組んで構わないが、考察は自分自身の言葉で述べること。試して分かったこと、自身で解決できなかった部分等についてどう取り組んだか、といった過程がわかるように示すこと。考えを図表や文章を駆使して表現して報告する練習です。

    • ある事象について妥当と思われる表現が思い浮かばないのなら、そのことを先輩らに尋ねてみよう。


レベル1「降水量の平均値を求めよ」

  • 背景

  • 課題

    • 1日ごとの降水量をリストとして用意したとする。このリストを与えると平均値を返す関数を実装せよ。関数名を average とする。

  • 補足

    • 2021年1月は1日〜31日まであるため31個の要素を持つリストとして用意できる。ただしデータの中には のように数値ではない要素もある。レベル1の時点では数値データだけを処理したいことと、平均値を求めること自体は他のデータでも同一処理であることから、適当に数個の要素を持つリストを用意して確認するとよいだろう。

    • レポート

      • コードと実行例を記載せよ。

  • 実行例

>>> daily_rains = [2.0, 0.0, 0.5, 3.0, 21.0]
>>> print(average(daily_rains))
5.3

レベル2「降水量の分散を求めよ」

  • 課題

    • 1日ごとの降水量を与えた時に、降水量の分散を求める関数を実装せよ。関数名を variance とする。

  • 補足

    • 1日ごとの降水量を \(x_i\)、1日平均降水量を \(\bar{x}\) とすると分散\(s^2\)(1) により求めることができる。

    (1)\[s^2 = \frac{1}{n}\sum_{i=1}^{n}(x_i-\bar{x})^2\]
    • 平均値を求める関数はレベル1で実装済みである。関数内のコードをコピペするのではなく、関数を利用して良い。

    • レポート

      • コードと実行例を記載せよ。

  • 実行例

>>> daily_rains = [2.0, 0.0, 0.5, 3.0, 21.0]
>>> print(variance(daily_rains))
62.7599999999999

Note

あらゆるプログラムは一度に全てを実装する必要はない。自分なりに分解し、実装して動作確認しやすい小さな部品を考えてみよう。どのような部品が必要かを洗い出し、それをどのように組み合わせるかを考えてみよう。これが整理の本質だ。


レベル3「分散の意味を考察せよ」

  • 背景

    • レベル2で分散を求めることができるようになったが、そもそも分散とはどのような値だろうか。分散の意味を咀嚼するためにいくつか異なるデータを与えて結果を観察することで考えてみよう。

  • 課題

    • 以下のデータに対する平均値・分散をそれぞれ求め、どのように変化するかを観察せよ。これらの結果から分散がどのような意味を持つか考察せよ。

    • ケース1: 雨量データそのもの。

      • daily_rains = [2.0, 0.0, 0.5, 3.0, 21.0]

    • ケース2: ケース1の各要素に5を足したもの。(つまり毎日の降雨量が5mm増えた状況を想定している)

      • daily_rains = [7.0, 5.0, 5.5, 8.0, 26.0]

    • ケース3: ケース1の各要素を10倍にしたもの。(つまり毎日の降雨量が10倍に増えた状況を想定している)

      • daily_rains = [20.0, 0.0, 5.0, 30.0, 210.0]

  • 補足

    • 上記は最低限のケースを用意した。傾向を観察するためにより多くのケースを観察したいのであれば自由にやって構わない。

    • 考察は、分散を求める式から導いても良い。文章だけではなく図表を組み合わせても良い。

    • レポート

      • 3つのケースに対する平均と分散を記載せよ。

      • 結果から分散の意味を50字程度(最大200字)で述べよ。


オプション課題例

  • 降雨量データには -- となっている箇所がある。その意味はサイト上に書いてあるが、今回のデータに限らず様々なデータセットにおいて「数値ではない値」が紛れ込んでいることがある。それらが文字列として紛れ込んでいるものを想定した場合、文字列を除外して平均・分散を求めるにはどうしたら良いだろうか。