課題レポート3: 基本的な統計処理を実装してみよう。¶
課題概要¶
自動販売機を実装してみよう。
変数を用いて「ある状態」を保存し、管理できるようになろう。
条件分岐を用いて実行するコードを切り替えられるようになろう。
取り組み方¶
友人らと話し合って取り組んで構わないが、考察は自分自身の言葉で述べること。試して分かったこと、自身で解決できなかった部分等についてどう取り組んだか、といった過程がわかるように示すこと。考えを図表や文章を駆使して表現して報告する練習です。
ある事象について妥当と思われる表現が思い浮かばないのなら、そのことを先輩らに尋ねてみよう。
レベル1「降水量の平均値を求めよ」¶
背景
那覇市の2021年1月における日ごとの気象データが公開されている。このうち「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字)で述べよ。
オプション課題例¶
降雨量データには
--
となっている箇所がある。その意味はサイト上に書いてあるが、今回のデータに限らず様々なデータセットにおいて「数値ではない値」が紛れ込んでいることがある。それらが文字列として紛れ込んでいるものを想定した場合、文字列を除外して平均・分散を求めるにはどうしたら良いだろうか。