- <目次>
- Iris Data Setで提供されているデータファイルを読み込み、種別ごとに、4変数(sepal length, sepal width, petal length, petal width)の平均値を求めよ。
- データファイルは以下のようにしてダウンロードすること。
- データファイルの読み方
- 1行に1サンプル分のデータが並んでいる。
- 各サンプルは「sepal length, sepal width, petal length, petal width, name」の5項目のデータで構成される。
- 例えば、1サンプル目は「speal length=5.1, sepal width=3.5, petal length=1.4, petal width=0.2, name=Iris-setosa」である。
- IrisにはIris-setosa、Iris-versicolor、Iris-virginicaの3種類があり、それぞれ50サンプルずつ、合計150サンプル分のデータが並んでいる。
curl -O https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data
- 達成目標
- ファイル処理(読み込み)に慣れよう。
- リスト操作・数値演算に慣れよう。
- 変数名、関数名、コメントの大切さに気付こう。
- ドキュメントを書いてみよう。
- ペアや友人らと話し合って取り組んで構わないが、自分自身の言葉で述べること。試して分かったこと、自身で解決できなかった部分等についてどう取り組んだか、といった過程がわかるように示すこと。(考えを図表や文章を駆使して表現して報告する練習です)
- レポート作成は当面「googleドキュメント」を使うこと。
- レポートには下記を含めること。
- タイトル
- 今回は【プログラミング1、レポート課題6: 「平均値・標準偏差値の算出」】。
- 提出日: yyyy-mm-dd
- 報告者: 学籍番号、氏名
- 複数人で相談しながらやった場合、相談者らを「協力者: 学籍番号、氏名」として示そう。
- 課題説明
- 1,2行程度で課題の内容を説明しよう。
- 書いたコード
- レポート中には関数定義のみの転記で構わない。
- 実行結果
- 考察
- 課題への取り組みを通し、課題の意義、課題から分かったこと、今後の展望などを述べる。失敗やつまづきがあれば、それらについての失敗分析を含めること。
- 参考リンク: 実験レポートの書き方
- その他
- 通常は感想等をレポートには含めませんが、練習なので課題に取り組みながら何か感じたこと、悩んでいること等、書きたいことがあれば自由に書いてください。(なければ省略OK)
- タイトル
- 以下に示す条件を満足しつつ、「実行イメージ」のように結果を出力するプログラムを書け。
- 実行イメージ
oct:tnal% python report4.py
Iris plant: sep len, sep wid, pet len, pet wid
Iris-setosa, 50 samples: 5.01, 3.42, 1.46, 0.24
Iris-versicolor, 50 samples: 5.94, 2.77, 4.26, 1.33
Iris-virginica, 50 samples: 6.59, 2.97, 5.55, 2.03
- ヒント
- データファイルの最後には「何もない空の行」が挿入されている点に注意すること。(デバッグすると分かりやすい)
- CSVファイルの読み込みには、(1)csvモジュールを使うか、もしくは、(2)通常のファイル読み込み後にstr.splitで分割しよう。
- 平均値を下二桁で出力(or算出)する際には、numpy.aroundを利用しよう。
- numpyモジュールを使うためには、一度インストールする必要がある。VS Codeのターミナル上から
conda install numpy
と実行しよう。- プログラムとして利用するには、
import numpy as np
としてモジュールを読み込もう。その後、data = np.around(3.14159, 3)
のように第1引数に対象となる数値、第2引数に丸めた後の桁数を指定すると、丸めた値を得ることができる。
- プログラムとして利用するには、
- 小数点を指定する理由について。
- 平均値や標準偏差を求める際に、単にfloatのまま処理すると膨大な桁数が発生してしまう。それに対して、今回扱うデータは小数点第1位までしかない。丸め誤差もあるため、小数点第3位で近似し、小数点第2位までで保存&出力するようにしよう。
- なお、言語によって実装が異なるが、PythonやNumpyのround関数は、厳密には四捨五入とは異なる。このことは上記ドキュメントにも「Evenly round to the given number of decimals.」と書いてある通りである。何故このような仕様になっているのかは、例えばJIS, ISO 式四捨五入を参照すると理解しやすいかも。
- 四捨五入をどのタイミングで使うかにより、多少結果が異なる。このため、厳密に上記と同じ結果でなくても構わない。具体的には、小数点第二位の値が1異なる程度なら許容範囲とする。
- numpyモジュールを使うためには、一度インストールする必要がある。VS Codeのターミナル上から
- ファイル読み込み後の数値の扱いについて。
- open()にしろcsvモジュールにしろ、ファイルから読み込んだデータ型はstr型のままである。これはそのままでは数値として扱うことができないため、キャストする必要がある。
- 例えば、1行目は
"5.1,3.5,1.4,0.2,Iris-setosa"
となっている。これをカンマ区切りでstr.splitすると、['5.1', '3.5', '1.4', '0.2', 'Iris-setosa']
というリストが得られる。このリストの0番目の要素はこのままだと'5.1'
というstr型だが、これをfloat('5.1')
とすると、float型にキャスト(変換)することができる。str型からint,floatへのキャスト、逆方向へのキャストは同様の考え方で実現できる。
- 例えば、1行目は
- open()にしろcsvモジュールにしろ、ファイルから読み込んだデータ型はstr型のままである。これはそのままでは数値として扱うことができないため、キャストする必要がある。
- 条件
- 使用して良い外部モジュールは、上記で示したもののみとする。(csv, np.around以外の外部モジュールや関数を使うのは駄目)
- 実装について。
- スクリプトファイル名は「report4.py」とすること。
- 最低1つは関数定義して利用すること。
- どの処理を関数として定義するかは自由。
- 引数・戻り値の設定に注意。例えば、引数として渡していないにも関わらず、関数内から外部の変数へアクセスするような書き方は減点対象。
- 実装した関数について、レポート内に転記し、解説すること。
- docstring形式でドキュメントを書くこと。(参考: tic_tac_toe.py)
- 提出物は「レポート」、「作成したスクリプトファイル」の2点である。
- もしそれ以外に作成したものがあるなら、それも提出しよう。
- レポートは電子ファイルで提出するものとする。
- 提出先&〆切: 授業ページを参照。