渓のライフマネジメント日記

日々の活動と雑感をゆるゆると記録するところです。みんなHAPPYになっちゃえ。

東京大学『pythonプログラミング入門』

東京大学Pythonのプログラミング入門の授業テキストが無償公開されていました。今回はこちらをやってみることにしました。

 

Pythonプログラミング入門 — Pythonプログラミング入門 documentation

 

 

 

初めに

東京大学 数理・情報教育研究センターでは、Pythonの講義テキストを無償公開しています。

このテキストはgoogle colaboratoryというクラウド上でPythonを動作させることができる実行環境を利用しており、リアルタイムでコードの結果が得られ、個人でのプログラミング反復学習を効率よく進めることができるようになっています。

以前から、プログラミング学習は実践ありき、実際に何かを作ってみるのが早いので、google colaboratoryで空の関数定義とデバッグ関数だけ作成してぶん投げというデスマーチ開発スタイルのテキストがあれば効率よく学習できるだろうにとか思ってた輩は多いハズ。でも作るのが面倒で二の足を踏んでいた現状、ついに我らの東京大学がやってくれました。

というわけで実際にやってみたほうが早そうなので、早速挑戦してみましょう。

 

最初にテキストを選びます

選ぶというのは、環境に合わせてHTML版、PDF版、JupyterNoteBook(google Colablatry)版が選べるからですね。以下のリンクにある教材から選びます。ここでJupyterNotebook版を選ばないとあまり他のPython講義サイトと変わりません。あるいは、演習notebookとpdfを併用するスタイルが好ましいと思います。

ということでJupyterNotebook、君に決めた!

sites.google.com

 

上記リンクにはほかにも講義動画 2021S1などがありますが、ECCS認証が必要になっています。ECCS認証というのは平たく言うと東京大学の学籍を持っていないと利用できないよ、ということです。授業動画にも興味はありますが、負荷も大きいですし、動画で学びたいだけならYoutube上にたくさんあります。今回はしょうがないかなというところです。今回の肝要なところは動画を視聴しなくても十分に学べるレベルで教材がしっかりと作られているところです。動画は諦めましょう。

なお、ECCS認証がなくてもガイダンスのスライドは見ることができます。授業計画を見るとNumpy、Pandasの利用までを目標としています。Pythonをどういう位置づけにしているかはっきりと感じ取れますね。最短ルートでデータサイエンティストを育成しようという意図を感じます。

 

Jupyter版のリンクを踏むと、utokyo-ipp.github.ioに飛ばされます。

ここで出に入るzipを解凍すると、学習項目ごとのColabノートブック(Jupyternotebook形式のファイル(拡張子.ipynb))が現れます。

 

Google Colaboratory

ここまで準備ができたら、google colaboratoryを開きましょう。

colab.research.google.com

Colaboratoryの説明通りに進み、google driveに先ほど入手した教材のファイル登録しましょう。なお、講義テキストは東京大学側のGoogleDrive上にもあるため、そちらを自分のドライブにコピーして使用しても大丈夫です。

google driveにコピーすると、google colaboratoryというクラウド上でPythonを動作させることができる実行環境を利用することができます。colaboratoryには、numpyやmatplotlib、Pandasなどデータを扱う上で便利なライブラリが予めインストールされています。クラウド上なので、環境に関係なくデータを操作できるというのはこの環境の強みです。例えば、スマホで移動中にデータを整理したり、Pythonプログラムを組むこともできるというわけですね。

ちなみに自前のPCのPython環境にJupyter labをインストールしても多分大丈夫です。

 

実際に演習してみよう

1-2-colab-student.ipynbをマイドライブにコピーして開いてみましょう。

最初に、本ツールはプログラミング授業における本学学生の学習支援のためにGoogle社と連携して開発を進めているものです。・・・」以下続くなげえ文章があります。要するに本学学生のための文章なので、今回はコードを自動処理させフィードバックを得る必要はないためSubmitという関数が記述されたコードセルは飛ばしましょうということです

 

更に続けて読んでいくと課題が出題されています。

f:id:ca_apple:20210627211017p:plain

JupyterNotebook形式は、コードセル(Pythonコードが書かれた実行可能なセル)とマークダウン(文章による説明が書かれたセル)から成り、コードセルを実行することでリアルタイムにコードの実行結果が得られます。
 
 
どうやら、このコードセル部分を編集して、正しいPythonコードを組んで実行しろということのようです。
今回の課題は `f` フィート `i` インチをセンチメートルに変換する関数を作れということのようです。関数名はfeet_to_cmという指定があるようなので、それに従って関数の中身を作りましょう。
 
def feet_to_cm(f,i):と書かれたコードセルを編集し、関数を作成します。
def feet_to_cm(f,i):
   return 30.48*(f+i/12)

 こんな感じでいいでしょうか。一度実行してみましょう。(実行しなければ後のコードセルで関数として機能しません)

問題がなければコードセル左側の数字カウントが加算されます。これはコードの実行準を意味しています。また、エラーがあるとセルの下にエラー内容を示す記述が出現します。

 
 次に、
# Run this cell to check your solution.
Submit(feet_to_cm)
のコードセルはECCS認証を必要とするため完全に無視します。
ちなみにこのセルを実行すると、Submitというコードが定義されてないよという内容のエラーが返ってきます。一度エラーの内容を見てみるのも良いと思います。
 
 
次のセルには、作った関数が正常に動作するかチェックしてくれる関数が記述されています。def check_similar(x,y):で定義された関数により、先ほど作成したプログラムの成否を判定してくれるのです。
 それが、
def check_similar(x,y):
    print(abs(x-y)<0.000001)
check_similar(feet_to_cm(5,2),157.48)
check_similar(feet_to_cm(6,5),195.58)

  というわけです。

このコードセルを実行すると、先ほど作成したfeet_to_cmが実行され、値比較を行ってくれます。試しに実行してみると正しい結果が得られ、True、Trueという実行結果が得られます。

ここで試しにdef feet_to_cmの内容を少し変えてみましょう。

def feet_to_cm(f,i):
   return 30*(f+i/12)

 False、Falseと表示されますね。

これはプログラムに何らかのバグがあるということを意味しています。今回の場合、正しくセンチメートルに変換できていないということですね。このように、このテキストはバグチェックを何度も繰り返しながら自学自習できる作りになっています。

実行環境とデバッグ環境が同居しているため、非常に設計しやすいですね。大学では課題提出もこのノート上のスクリプトで完結しているようで、一連の授業をこのファイルだけでこなそうという試みのようです。

 

Python利用を考慮した課題設計

このテキストの優れているところは、練習問題が実際にPythonを使用する状況を想定した問題が用意されている点です。

例えば課題2-1では「ATGCの4種類の文字から成る文字列 str_atgc が引数として与えられたとき、文字列 str_pair を返す関数 atgc_bppair を作成してください。」とあります。これは、DNAの塩基対を返す基本的な関数の作成です。

また、その後にはATGCの4種類の文字から成る文字列 str_atgc と塩基名(ATGC のいずれか)を指定する文字列 str_bpname が引数として与えられたとき、str_atgc 中に含まれる塩基 str_bpname の数を返す関数 atgc_count を作成してください。という出題もあり、塩基の数をカウントさせる実用的な状況を想定した作りになっています。

 

プログラミングの世界では、難しい処理だからといって必ずしも難しいコードを必要とするわけではありません。むしろ、一個のプログラムの中でも使われるコードは限られており、使用頻度も大きく偏っていることのほうが多いのです。

そのため、今回の入門編で出てきた命令だけでも、十分実用的なコードを書くことができるのです。

このColabノートブックは現在は6-3まで公開されており、 基本的な命令を一通り身に着けることができます。

 

まとめ

シンプルながらもわかりやすいテキストと、Google Colaboratryを利用した練習課題が連携しており、講義動画よりも自学自習に向いていると感じました。東大生ともなれば自学自習を進めていける環境を用意するほうが効率が良いというのは言うまでもないのでしょう。

各命令の意味だけではなく、デバッグコードを最初に作成する、簡易でも関数を一つずつ定義していく、といったプロジェクトの基礎も身に付く構成のテキストとなっており、プログラミング学習環境の整備という点に着目した素晴らしい取り組みだと思います。今後もこう言った取り組みが増えていけば、プログラミング学習の発展に寄与するのではないかと思います。

僕は5時間程度で全演習を終えることができました。頑張ればもう少し早く攻略できそうですが、今回の試みに感心し、何度もテキストや過去のファイルや記述を往復することになった結果大きく時間をとってしまいました。(あと無駄に最適化したり内包表記に拘ったりと要らない作業も結構多く発生しました。)

初学者であっても、10時間~30時間程度でマスターできるのではないかと思います。

というわけで、これからPythonを学習してみたいと思ったアナタにオススメです。ここからプログラミングの世界に入門してみるのも悪くないだろうと思います。

 

クソみたいな人生を変えられるのは自分しかいねぇ!人生を切り開け!

 

 twitter.com