#author("2018-10-07T15:45:03+09:00","default:takataka","takataka") #author("2018-10-07T15:47:37+09:00","default:takataka","takataka") *応用プログラミング及び実習 2018年度 第2回 [#ex02] //&color(#ff0000){工事中}; #contents ** 今日の notebook [#c5575be4] は [[AProg/2018]] からたどってください. Notebook の扱いが分からないというひとはこちらへ戻ること [[AProg/2018/ex01/Step1#step1_3]] ''<Notebook の開き方についてひとこと>'' $ jupyter notebook hoge.ipynb として開いたあと,メニューの 「File」 > 「Open」をたどると,hoge.ipynb と同じディレクトリ内のファイルを一覧できます.ここから他の notebook を開くこともできます.また,開きたい notebook のあるディレクトリで $ jupyter notebook とすると,最初からファイル一覧が開きます. **課題A (self) 期限: 授業当日12:00 [#kadaiA] 今日の notebook を開いてそこに記されたことを読んで&実行して学習しなさい. 完了したらチェックを受けなさい(notebookを開いたままにしておくこと). **課題B (self) 期限: 当日の授業終了まで [#kadaiB] [[02exB.ipynb>AProg:02exB.ipynb]] [[02exB.html>AProg:02exB.html]] [[02exB.ipynb>AProg:02exB.ipynb]] ([[02exB.html>AProg:02exB.html]]) 上記リンク先の 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 を実行しなさい.ただし,''次の二通りの実行の仕方を試すこと.'' -- 普通に python コマンドを実行する.上記のままだと何も出力されない. -- IPython 上で実行する.くわしくは右記へ [[AProg/PythonProgramming#ipython]] + ''今後課題のプログラムを作成・チェックを受ける際は,次のようにすること'': -- プログラム作成中デバグ中は ipython / python どちらを使ってもよい(ipythonおすすめ) -- チェックを受ける際は python コマンドで実行して見せる + 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);