Skip to content

Latest commit

 

History

History
100 lines (85 loc) · 7.82 KB

report4_csv_individual_average.md

File metadata and controls

100 lines (85 loc) · 7.82 KB

課題レポート4: 平均値の算出


  • 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異なる程度なら許容範囲とする。
    • ファイル読み込み後の数値の扱いについて。
      • 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へのキャスト、逆方向へのキャストは同様の考え方で実現できる。
  • 条件
    • 使用して良い外部モジュールは、上記で示したもののみとする。(csv, np.around以外の外部モジュールや関数を使うのは駄目)
    • 実装について。
      • スクリプトファイル名は「report4.py」とすること。
      • 最低1つは関数定義して利用すること。
        • どの処理を関数として定義するかは自由。
        • 引数・戻り値の設定に注意。例えば、引数として渡していないにも関わらず、関数内から外部の変数へアクセスするような書き方は減点対象。
        • 実装した関数について、レポート内に転記し、解説すること。
      • docstring形式でドキュメントを書くこと。(参考: tic_tac_toe.py

  • 提出物は「レポート」、「作成したスクリプトファイル」の2点である。
    • もしそれ以外に作成したものがあるなら、それも提出しよう。
  • レポートは電子ファイルで提出するものとする。
  • 提出先&〆切: 授業ページを参照。