株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを、定期的に開催しています。
2018年4月27日のイベントは「一度は挫折しかけた、そんなあなたに贈るPythonプログラムの超入門」を開催。
今回は「やさしくPythonを知りたい超入門者」「一度は挫折しかけたけど、やっぱりPythonをやってみたい人」「Pythonで人工知能がどんな風に作られているのか興味のある人」に贈る、Pythonプログラムの超入門。書籍『Python 1年生』の著者、森 巧尚さんをお迎えして、講義形式で解説していただきました。
■今回のイベントのポイント
・Pythonってなに?
・Pythonプログラムの基本
・プログラムはどんな感じで作る?
・人工知能ってなに?
Pythonってなに?
まずはPythonについての基礎知識から。Pythonは「YouTube」や「Dropbox」といったインターネットサービスの開発、お馴染みのロボット「Pepper」のアプリケーション開発などで知られているほか、NASAの研究開発や、Pixer社の映画のCG制作などにも使われているそうです。ビッグデータや人工知能分野でよく利用されるプログラミング言語としても知られています。
最近よく耳にするようになったPythonは、新しい技術かと思ったら、誕生は1991年(27年前)。理想的なプログラムを書くことを目指して作られたのですが、理想が高過ぎたために、当時のコンピュータでは処理が重く、一般には普及せず、主にコンピュータリソースの豊富な研究分野で使われてきたそうです。そのため、人工知能や大量のデータ処理が得意。ところが近年、コンピュータの性能が向上したため、一般でも利用できるようになりました。
Pythonは、構文がとてもシンプル。文のひとまとまり(ブロック)は、インデント(字下げ)で表し、他のプログラミング言語に比べて記述に必要な文字数が少ないという特徴があります。
扱えるデータ型にはint(整数)、float(小数)、str(文字列)、bool(ブール)があります。文字列はシングルクオートとダブルクオートのどちらで括ってもOK。他の言語同様、計算は「+-* /」の演算子を使います。
変数の型は、宣言をせずとも、値を代入すると自動判別されます。あらかじめ型を宣言しなければならないJavaに比べると手軽な感じがします。
Pythonプログラムの基本
次にPythonのプログラミングの基本を教えてもらいました。
Pythonのプログラムは上の行から順に処理されます。順に処理するだけでは複雑な処理ができないので、if文により条件に応じて処理を分岐させたり、for文により条件を満たすまで反復させたりすることができます。書式が少し違うだけで、他のプログラミング言語と同じです。
頻繁に使う処理は、何度も書かなくて済むようにdef文で関数としてまとめておき、場合によってはモジュールとして別のファイルに保存しておき、import文で読み込みます。
こうして先人たちが、よく使う処理をまとめてくれた関数の集まりが標準ライブラリです。標準ライブラリが充実しているのもPythonの大きな特長だそうです。
プログラムはどんな感じで作る?
具体的なプログラムの例も、詳しく紹介してくださいました。
最初はウィンドウを作る標準ライブラリtkinterをつかったおみくじプログラム。ウィンドウの上にメッセージとボタンを表示させ、ボタンを押すたびに運勢を表示させるものです。
次は、画像をファイルから読み込んでウィンドウ表示させるプログラムを作成。
Pythonでは、コマンドをドット(.)でつなげられ、たとえば「画像ファイルを開いて」「リサイズをする」という2つのコマンドの間に「画像をモノクロ化する」というコマンドを挟む、といったこともできます。
ここでは読み込んだ画像をモノクロ化して、一度16×16ピクセルの解像度にリサイズし、再度300×300ピクセルに拡大するという処理をします。結果は、画像の情報量が減り、モザイク表示のようになりました。
この時点では、このプログラムにどのような意味があるのかわかりませんでした。しかし、後で、このプログラムが活躍します。
人工知能ってなに?
いよいよPythonの得意分野である人工知能について。
人工知能(機械学習)には「教師あり」「教師なし」「強化学習」という3つの学習方法があります。
教師あり学習は「問題と答えのペア」を大量に見ることで特徴を学習させる方法で、学習すると「これはなにか」を予測できるようになります。身近なところでは手書き文字や音声の認識などに使われています。
教師なし学習は「問題と答えのペア」のないデータを調べます。こちらは答えを見つけるための学習ではなく、似たデータをまとめて特徴を抽出したり、グループ分け(クラスタリング)をしたりするときに使います。
強化学習は「問題と答えのペア」は教えないけれど、よい結果が出たときに強化していく学習方法で、答えのない問題で、よりよい方法を見つけることができるようなります。人間を負かしたことで話題になった、将棋や囲碁のソフトでも利用されています。
Pythonで人工知能を作るには、人工知能ライブラリを利用します。ここで利用するsklearnというライブラリには、学習用にあらかじめ手書き数字のデータも用意されています。これを基に、新たなデータがどの数字を手書きしたものかを予測するプログラムを作成します。
サンプルデータは、容量を減らすため解像度の粗いものが使われています。新たに予測させるデータも同様に解像度を下げますが、このとき先ほど作ったモザイク化の処理が活躍します。
最終的なプログラムは次のようなものになりました。
今までは機械学習といっても雲をつかむような感じでしたが、森さんが丁寧に噛み砕いて解説してくださったので、どのようなことをしているのか、その一端を垣間見ることができました。勉強しようと思いつつ、まだ手を付けられていない方、『Python 1年生』から、はじめてみませんか。