Open In Colab

練習帳#

Python基礎の定着と、質問しやすい記録を残すためのノートです。
この練習帳は自己確認用です。ここでの正誤そのものは評点対象ではありません

うまくいかないコードやエラーも、学習の大事な記録です。失敗を残しながら進めましょう。 質問時は、エラーメッセージ・試したコード・想定した挙動をセットで残すと、解決が速くなります。 慣れてきたら、エラーメッセージをWeb検索したり、よくあるエラー集を参照し、自力で原因特定する練習もしてみましょう。

リアクションシートなどを通じて教員やTA(SA)に質問する際は、

練習帳に詳細な質問とコードを書きました

のように一言添えてください。また、質問の際は共有リンクも忘れずに記載してください。

推奨の進め方#

  1. 問題文を読む

  2. 自分で実装する

  3. 実行結果とエラーをメモする

  4. 振り返り項目を自己チェックする

  5. 必要に応じて、自身で追加のコードを書いてみる

練習帳ノートブックの共有方法#

以下の手順にならってください(1-3は最初の1回のみ)。

  1. ノートブックのコピーを作成し、ファイル名を編集する。 例: 練習帳_氏名_123456X.ipynb

  2. 右上の共有ボタンを押し、「制限付き」を「リンクを知っている全員」に変更する。

  3. 権限を閲覧者から編集者に変更する。

  4. リンクをコピーして保存する。 注意: ブラウザのURL欄ではなく、共有設定の「リンクをコピー」から取得してください。

元の問題文が残っていれば、コードセル・テキストセルともに自由に追加編集して構いません。

実行時チェック

  1. 上から順にセルを実行できているか

  2. 変数名の上書き(例: list, print)をしていないか

  3. エラーが出たら -> メッセージ全文を読む (大体の原因はエラーに書いてある)

  4. 質問時に、該当セルとログを共有できる状態か

Markdown記法は、WikipediaのMarkdownのページなどを適宜参照してください。

Google ColabのAIアシスタント機能について#

Google Colabには、AIアシスタント機能が搭載されています。 ある程度コードが書けるようになってきたら、AIアシスタントはとても優秀な補助ツールになりますが、一方で、初学者にとっては「最初から目的に即したコードが与えられる」ことよりも、「コードを書く過程での試行錯誤を通して、実現したい作業をコードという論理的な表現に落とし込む能力を身につける」ことの方が重要だと筆者は考えています。

そのため、この授業では[ツール]→[設定]→[AIアシスタント]から、「生成 AI 機能を非表示」にしておくことを強く推奨します。

第1章: Pythonの基礎#

目標: 変数・演算・表示の基本を使って、数値計算を文章として出力できるようになる。

練習問題

  1. 身長と体重に相当する変数を定義し、BMI(体重kg ÷ 身長mの二乗)を計算してprint関数で表示せよ。

  2. 計算したBMIを文字列と連結し、”AさんのBMIは22.0です” のように表示せよ。 小数点以下の表示桁を調整したい場合は、下のヒントを参考にしてよい。

# 問題1.&2.に対応するコードを以下に記載してください
# 問題2.に関するフォーマット指定の例 (ややテクニカルなので、理解できなくても問題ありません)
value = 3.141592653589793

# 例1: 小数点以下4桁まで表示し、全体の幅を9にする
print("例1", str("%9.4f" % value)) #

# 例2: 指数表記で表示 (小数点以下2桁まで表示し、全体の幅を7にする)
print("例2", str("%7.2e" % value)) 

# 例3: 小数点以下2桁まで表示
print("例3", f'{value:.2f}')  

# 例4: 小数点以下4桁まで表示し、全体の幅を9にする(1の別の書き方)
print("例4", "{:9.4f}".format(value))  # 小数点以下4桁までfloat型で表示し、全体の幅を9にする

1章の振り返り

これらの点をチェックし、必要ならコードセルを追加して練習しよう:

  • 変数の定義や四則演算の方法が分かる

  • printstrなどの基本的な関数の使い方がわかる

  • プログラムの実行順序と、セルを跨いで実行する際の注意点がわかる

  • 基本的な変数の型とその調べ方が分かる

第2章: Pythonの基礎2#

目標: リスト・ループ・条件分岐を組み合わせて、複数データを一括処理できるようになる。

練習問題

  1. 身長(cm)と体重(kg)の2要素を持つリストを5人分作成し、入れ子リストにせよ。 3人目は必ず [175, 60] とすること。

  2. for文で5人分のデータを順に表示せよ。

  3. 平均身長と平均体重を計算せよ。 5固定ではなく、リスト長に依存して計算できる汎用コードにすること。

  4. 全員のBMIをfor文で計算し、1人ずつ表示せよ(身長の単位に注意)。

  5. for文内でifとbreakを使い、「BMIが20.0以下なら表示後に終了」を実装せよ。

# コードを以下に記載してください

ヒント&助言:

  • listという変数名のリストを作らない!

    listはリストと互換性のあるオブジェクトをリストに変換するための関数です。

      list = [1, 2]
    

    などと一度実行してしまうと、以降でリスト関数が使えなくなります。 予約語やprint,listなどの組み込み関数を変数として上書きしてしまうと、元の機能が使えなくなり、不都合が生じる場合があります。

    print = "Hey!"
    print("Hello")
    

    などとすると、

    'str' object is not callable
    

    既に文字列(str)型になっているprintを関数みたく使う(callする)ことはできないよ!とエラーが発生し、print関数を使えなくなってしまいます。
    そうしたときは、変数名を適切に変更した上で、【ランタイム】→【ランタイムの再起動】を行えば、元の予約語や組み込み関数を問題なく使えるようになります。

  • ブロックに注意!

    インデントによる処理のブロックの指定に注意が必要です。 例えばfor文を条件文(if)に応じてbreakする場合は、for文のブロックの中にif文のブロックを書く必要があります。

2章の振り返り

とくに2章は重要な概念が盛りだくさんなので、必ず練習したり、疑問があれば質問すること!

これらの点をチェックし、必要ならコードセルを追加して練習しよう:

  • リストの定義や要素へのアクセスの方法(インデックスやスライス)が分かる

  • リストに要素を加える方法が分かる

  • if文による条件分岐が分かる

  • forwhileによるループ処理がわかる

第3章: 関数#

目標: 入力と出力を意識した関数を作り、再利用できる処理としてまとめる。

練習問題

  1. 摂氏温度(℃)を受け取り、絶対温度(K)を返す関数を使って、0, 20.55, 42.199度の結果を表示せよ。

  2. 実数値のリストを2つ以上用意し、任意長のリストに対して平均と分散を返す関数を作成せよ。 分散は以下を用いる。

\[ \frac{1}{N}\sum^N_{i=1} (x_i - \bar{x})^2 \]
  1. 2で作った関数の返り値の型をtype関数で表示せよ。

# コードを以下に記載してください
#1. 
def K_from_C(C):
    K = C + 273.15
    return K

3章の振り返り

これらの点をチェックし、必要ならコードセルを追加して練習しよう:

  • 自作関数の定義の仕方・呼び出し方が分かる

  • 引数(インプット)や返り値(アウトプット)の扱い方が分かる

第4章: ライブラリ/パッケージ/モジュールとデータ可視化#

目標: 外部ライブラリを使って、計算と可視化を行えるようになる。

練習問題

  1. mathまたはnumpyを使い、任意の半径rについて円の面積と球の体積を計算する関数を作成せよ。

  2. matplotlibで好きな図を作成して表示せよ。 次のようなオプションも調べて試すこと。

    • 色のカラーコード指定

    • 透過度(alpha)の指定

  3. mathモジュールの公式Documentを参照し、授業未登場の関数を1つ選び、コード例と説明を記載せよ。

# コードを以下に記載してください

4章の振り返り

これらの点をチェックし、必要ならコードセルを追加して練習しよう:

  • ライブラリのインストールやインポートの仕方が分かる

  • matplotlibの簡単な使い方が分かる

  • Webの情報や公式ドキュメントを読んだりして、使い方を調べることができる

第5章: 確率と擬似乱数#

目標: 乱数生成とランダムサンプリングを使って、再現性も意識したコードを書く。

練習問題

  1. 0からn-1までの整数を重複なくランダムにn個選ぶコードを作成せよ。 (0からn-1のランダム並べ替え。numpy.random.choiceが便利)

  2. 1を利用し、名前リストなど任意の文字列リストをランダムに並べ替えて表示せよ。

  3. 乱数のシードを固定して、同じ乱数列が生成されることを確認せよ。
    ※randomモジュールを使って乱数を生成する場合は、random.seed(シード値)で、numpy.randomモジュールを使う場合は、numpy.random.seed(シード値)でシードを固定できます。

# コードを以下に記載してください

# 2.のヒント (AさんからZさんまで作っておきます)
# 解説: Pythonの組み込み関数の`chr`には、Unicodeのコードポイントと呼ばれる整数値から、対応する文字列を返す機能があります。
# 例えばchr(65)は'A'に、chr(66)は'B'に、... chr(90)は'Z'になります。
names = [ str(chr(i)) for i in range(65, 91) ]

5章の振り返り

これらの点をチェックし、必要ならコードセルを追加して練習しよう:

  • randomnumpy.randomモジュールを用いて、簡単な確率的事象を表現する方法がわかる

  • 適当な区間内でランダムな整数を生成することができる

  • 適当な実数の乱数(一様乱数・正規乱数)を生成することができる

おまけ: Unicodeについて

chrの反対に、文字からUnicodeのコードポイントを返す関数ordがある。

print( ord("吉"), ord("田"))

これを活用すると、 下記のように簡単な暗号化・復号化を行うこともできる。※大した暗号になっていないので、実際に使って叱られたりしないように。

code = [ ord("吉"), ord("田"), ord("の"), ord("話"), ord("は"), ord("面"), ord("白"), ord("く"), ord("な"), ord("い")]
print("暗号化=>", code)
print("複号化=>", "".join([ chr(i) for i in code ]))

第6章: 相関・回帰分析#

目標: データの関係性を数値化し、相関の解釈に注意しながら分析できるようになる。

練習問題

  1. データx(宇都宮市の月別平均気温)とy(アイスクリーム・シャーベット消費量)について、8月のデータ(気温または消費量)をランダム値に変更し、相関係数の変化を5通り示せ。 値の変更は、インデックスを直接手入力せず、乱数で選んだ位置に対して行うこと。

  2. 疑似相関を調べ、1例を挙げて説明せよ。

# コードを以下に記載(追記)してください
x= [3.1, 4.3, 6.6, 13.2, 19.1, 20.9, 26.4, 25.1, 21.9, 15.7, 9.6, 3.8]
y= [568, 572, 804, 833, 930, 965, 1213, 1120, 835, 540, 451, 502]

6章の振り返り

これらの点をチェックし、必要ならコードセルを追加して練習しよう:

  • 相関分析の意味を、友人等に説明できる

  • 長さの等しい2つのリストについて、相関係数を計算することができる

  • 簡単な場合について自作関数とライブラリの出力が同じであることを確認することができる

第7章: 最適化問題#

目標: 多項式フィッティングを通して、モデルの次数と当てはまりの関係を理解する。

練習問題

  1. 以下のデータ(x: 年, y: 男子100m走世界記録)について、numpy.polyfitを使って1次〜5次式でフィッティングを行え。

# コードを以下に記載(追記)してください
y = [ 10.06, 10.03,10.02, 9.95,9.93, 9.92,9.9, 9.86,9.85, 9.84, 9.79, 9.78, 9.77, 9.74,9.72,9.69,9.58 ]
x = [1964, 1968,1968,1968,1983,1988,1991,1991,1994,1996,1999,2002,2005,2007,2008,2008,2009 ]

7章の振り返り

これらの点をチェックし、必要ならコードセルを追加して練習しよう:

  • 多項式回帰の意味を、友人等に説明できる

  • ライブラリを用いて多項式回帰(係数の最適化)を行うことができる

  • 係数の最適化の結果から、グラフの描画点を生成し、可視化することができる

第8章: ファイル操作#

目標: 外部データを読み込み、保存し、再利用できる形に整える。

練習問題

  1. コードセルの例を参考に、PandasでWeb上のcsvを読み込め。 例として、栃木県オープンデータの保育所一覧(2021年4月1日現在)を使う。 このcsvはShift-JIS系のため、encoding指定が必要になる点を確認すること。

  2. Google Driveをマウントし、1で読み込んだデータをDriveへ保存せよ。 エラーが出た場合は、ログと試した手順をできるだけ具体的に記録すること。

  3. 余力があれば、地図上への可視化(例: folium, geopandas)を調べる。

# コードを以下に記載(追記)してください
#1. (コードは書いておきましたので、挙動を確認してください)
import pandas as pd
url = "https://data.bodik.jp/dataset/47cb5069-7383-47d3-a7df-b84d59484432/resource/37469f20-ed3c-4f9e-a5c4-fa750fc3c673/download/42064_2021_hoikusyo_02184.csv"
df = pd.read_csv(url, encoding="cp932")
#df = pd.read_csv(url) #上の代わりにこの行のようにencodingの指定をなしにするとエラーになることも確認してみよう
display(df)
#2.
# DataFrameにはcsvに変換して保存するためのto_csvメソッドが用意されているので、それを使うと簡単にcsvを作成できる。
# 以下のコードのパスを書き換えて自身のGoogle Driveに保存してみよう。また、encodingオプションで文字コードのエンコーディングを指定することもできる。
df.to_csv('content/drive/MyDrive/your_file.csv')

8章の振り返り

これらの点をチェックし、必要ならコードセルを追加して練習しよう:

  • Google ColaboratoryでGoogle Driveをマウントすることができる

  • Google Drive上にあるcsvなどのファイルを読み込むことができる

  • 読み込んだファイルの内容から、必要なデータを取り出してprintしたり、配列を作り、それをグラフとして描いたりすることができる