応用プログラミング及び実習 2018年度 第3回 [edit]

今日の notebook [edit]

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

<Notebook の開き方についてひとこと>

$ jupyter notebook hoge.ipynb

として開いたあと,メニューの 「File」 > 「Open」をたどると,hoge.ipynb と同じディレクトリ内のファイルを一覧できます.ここから他の notebook を開くこともできます.また,開きたい notebook のあるディレクトリで

$ jupyter notebook

とすると,最初からファイル一覧が開きます.

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

今日の notebook を開いてそこに記されたことを読んで&実行して学習しなさい. 完了したらチェックを受けなさい(notebookを開いたままにしておくこと).

課題B (self) 期限: 当日の授業終了まで [edit]

03exB.ipynb

上記リンク先の Jupyter Notebook を開いてその指示にしたがいなさい. 完了したらチェックを受けなさい.

IPython について [edit]

工事中

課題C (TA) 期限: 次回2講時開始直後 [edit]

次のことを全てやりなさい.

課題C-1 [edit]

  1. 前回課題C のプログラム 02exC.py をコピーして 03exC1.py を作成しなさい.
  2. ex03exC1.py に課題B-1で作った関数 argmin の定義を追加し,この関数を呼び出すように修正しなさい.
  3. 最大値の要素番号を返す関数 argmax の定義を追加し,同様に修正しなさい.
  4. 平均値を求めて返す関数 average の定義を追加し,同様に修正しなさい.

課題C-2 [edit]

  1. 右のリンク先のファイルを ~/aprog20XY に保存しなさい: zipdata
  2. less コマンドで内容を確認しなさい.終了はアルファベットの 'q'
  3. 同じディレクトリに以下の内容のファイルを 03exC2.py という名前で作りなさい.
    #### AProg2018 第3回課題C-2
    
    ### 関数 readZIP() の定義
    #      中身は一部知らないこともあるので,現時点では眺めてふーんって感じでよい
    def readZIP(fn):
    
        dZIP = {}       # 空のディクショナリを作る
        with open(fn, "r") as f:  # ファイル名 fn のファイルを読み込みモードで開く
            for line in f:  # ファイルから1行ずつ読み込んでループ
                x, y = line.split()   # 空白区切りで分割.1つ目を x に,残り(2つ目)を y に
                dZIP[x] = y           # キー x に対する値を y とする.いずれも文字列
    
        return dZIP
    
    
    # 引数にファイル名を指定して readZIP() を呼ぶ
    #    何を引数に指定するかは自分で考えよう.戻り値は郵便番号データのディクショナリ
    zip = readZIP( )
    
    # ディクショナリに対する len() は,キーの数を返す
    print(len(zip), "件の郵便番号データを読み込みました")
    
    # 無限ループ
    while True:
        num = input("郵便番号を入力してください(負の数だったら終了): ")
    
  4. readZIP() を呼び出すところを修正して実行しなさい.無限ループを止めるには CTRL+C.
  5. これを修正して,以下のように郵便番号を検索できるようにしなさい.
       : (途中省略)
    郵便番号を入力してください(負の数だったら終了): 5202123
    5202123 滋賀県大津市瀬田大江町
    郵便番号を入力してください(負の数だったら終了): 0010010
    0010010 北海道札幌市北区北十条西(1〜4丁目)
    郵便番号を入力してください(負の数だったら終了): 9998525
    9998525 山形県飽海郡遊佐町直世
    郵便番号を入力してください(負の数だったら終了): 1057219
    1057219 東京都港区東新橋汐留メディアタワー(19階)
    郵便番号を入力してください(負の数だったら終了): 1057229
    1057229 東京都港区東新橋汐留メディアタワー(29階)
    郵便番号を入力してください(負の数だったら終了): 1234567
    見つかりません
    郵便番号を入力してください(負の数だったら終了): -1
    

課題S (omake) [edit]

工事中 

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

ちょこっと NumPy [edit]

  1. プログラムの先頭に,次の行を追加
    import numpy as np   #  NumPy モジュールを np という名前で扱えるようにインポート
  2. readScore() 関数を直後に以下を挿入して実行してみる
    score = np.array(scoreList)  # scoreList から NumPy の配列を作る
    print(score)
  3. 最小最大平均を求めている部分を,NumPy の関数を呼び出すように書き換える. どんな関数を使えばよいかは,「numpy ほげ」(ほげに適当なキワード)とか検索すれば分かるだろう.
  4. ついでに標準偏差も計算させる

ちょこっと Matplotlib [edit]

  1. プログラムの先頭に,次の行を追加
    import matplotlib.pyplot as plt
  2. プログラムの末尾に,次の行を追加.ヒストグラムが描かれるはず.ヒストグラムのウィンドウを閉じればプログラムも終了する.
    plt.hist(score)
    plt.show()
  3. 上記を修正して,以下のようなヒストグラムが描かれるようにしよう.
    • ヒント: これは,色を変えて,棒の幅を変えて,ヒストグラムのビン(1本の棒に相当する区間)を変えて作っている.

02exS-hist.png


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