#author("2018-09-27T15:54:49+09:00","default:takataka","takataka")
*応用プログラミング及び実習 2018年度 第3回 [#ex03]

&color(#ff0000){工事中};

#contents

** 今日の notebook [#c5575be4]

は [[AProg/2018]] からたどってください.
Notebook の扱いが分からないというひとはこちらへ戻ること [[AProg/2018/ex01/Step1#step1_3]]

**課題A (self) 期限: 授業当日11:45 [#kadaiA]

今日の notebook を開いてそこに記されたことを読んで&実行して学習しなさい.
完了したらチェックを受けなさい(notebookを開いたままにしておくこと).
**課題B (self) 期限: 当日の授業終了まで [#kadaiB]


[[02exB.ipynb>AProg:02exB.ipynb]]

上記リンク先の Jupyter Notebook を開いてその指示にしたがいなさい.
完了したらチェックを受けなさい.
**課題C (TA) 期限: 次回2講時開始直後 [#kadaiC]

次のことをやりなさい.
+ 右のリンク先のファイルを ~/aprog20XY ディレクトリに保存しなさい: [[02score.txt>AProg:02score.txt]]
+ less コマンドでファイルの中身を確認しなさい.終了は 'q' (Q)
-- このファイルの中身は次のようになっている.
#pre{{
ptz541   3.08
add210   3.40
  :
}}
-- これは,あるゲームのユーザごとのスコアを記録したものである.
各行がユーザ一人分の情報で,空白より前が「ユーザID」,後が「スコア」である.
+ 同じディレクトリに以下の内容のファイルを 02exC.py という名前で作りなさい.
#pre{{
##### AProg2018 第2回課題C

### 関数 readScore() の定義
#      関数の話は次回以降の内容なので,この課題ではちゃんとわからなくてもよい
#      中身も知らないこと多数なので,現時点では眺めてふーんって感じでよい
def readScore(fn):

    with open(fn, "r") as f:  # ファイルを読み込みモードで開く
        idL = []     # 空のリストを作る.ID用
        scoreL = []  # 空のリストを作る.スコア用
        for line in f:  # ファイルから1行ずつ読み込んでループ
            line = line.strip()  # line は1行分の文字列.行末の改行文字を除去
            i, s = line.split()  # 空白区切りで分割.1つ目を i に,残り(2つ目)を s に 
            idL.append(i)           # idL の末尾に i を追加
            scoreL.append(float(s)) # scoreL の末尾に float(s) を追加

    return idL, scoreL


# 引数にファイル名を指定して readScore() 関数を呼ぶ
# 戻り値2つを idList, scoreList として受け取る
idList, scoreList = readScore("02score.txt")
}}
+ 02exC.py を実行しなさい.
+ 02exC.py を修正し,以下の実行結果が示すようにスコアの最小最大およびそれぞれに対応するユーザID,スコアの平均値を出力するようにしなさい.
-- 最小・最大を求めるプログラムは自分で書く(組み込み関数 min(), max(), sum() および類似の機能に頼らない)こと.
-- 組み込み関数 len() は使って構わない
#pre{{
<実行結果(実際の正解とは異なる)>  
最小: hog820 1.03
最大: oge095 6.79
平均: 3.8520999999999996
}}


**課題S (omake)  [#kadaiS]

//&color(#ff0000){工事中}; 

NumPy や Matplotlib をちょっと使ってみよう.02exC.py を 02exS.py にコピーして,次のことをやろう.

***ちょこっと NumPy [#uc6f4d3f]

+ プログラムの先頭に,次の行を追加
 import numpy as np   #  NumPy モジュールを np という名前で扱えるようにインポート
+ readScore() 関数を直後に以下を挿入して実行してみる
 score = np.array(scoreList)  # scoreList から NumPy の配列を作る
 print(score)
+ 最小最大平均を求めている部分を,NumPy の関数を呼び出すように書き換える.
どんな関数を使えばよいかは,「numpy ほげ」(ほげに適当なキワード)とか検索すれば分かるだろう.
+ ついでに標準偏差も計算させる
***ちょこっと Matplotlib [#b040aaa4]
+ プログラムの先頭に,次の行を追加
 import matplotlib.pyplot as plt
+ プログラムの末尾に,次の行を追加.ヒストグラムが描かれるはず.ヒストグラムのウィンドウを閉じればプログラムも終了する.
 plt.hist(score)
 plt.show()
+ 上記を修正して,以下のようなヒストグラムが描かれるようにしよう.
-- ヒント: これは,色を変えて,棒の幅を変えて,ヒストグラムのビン(1本の棒に相当する区間)を変えて作っている.

&ref(https://www-tlab.math.ryukoku.ac.jp/~takataka/course/AProg/02exS-hist.png,nolink);

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS