なぜPythonが流行っているのか - 数分で分かった気になるPython

ここ数年、エンジニアの間で、もっとも話題に上ったプログラミング言語は何でしょうか?それは、間違いなくPythonです。先日発表された、PCIのランキングでも、JavaやC/C++に次いで堂々の4位を獲得しています。私事で恐縮ですが筆者も、ここ数年Pythonに関する書籍を何冊も執筆しました。先日も上梓させてもらったばかりです(ゼロからやさしくはじめるPython入門/マイナビ出版)し、Pythonでデータを取得し機械学習を行うスクレイピングに関する「Pythonによるスクレイピング&機械学習 開発テクニック」(ソシム)なども書かせてもらいました。なぜ、Pythonが流行っているのか、また、Pythonのプログラムは、どんな雰囲気なのか、簡単に紹介してみます。

Pythonは今年で27歳 - 遅すぎるブレイク?!

そもそも、Python自体は1991年に公開されていますので、本稿執筆時(2018年)には、27歳になります。なぜ、誕生から27年も経った今頃、ブームになっているのでしょうか。そもそものきっかけは、いわゆる第三次AI(人工知能)ブームです。

『ディープラーニング(深層学習)』の研究が進み、画像認識や音声認識、翻訳など、幅広い分野での実用化に成功したため、ここ数年「AI」が注目を集めています。そして、そのディープラーニングを実践するのに使う代表的なフレームワークのひとつ『TensorFlow』『Chainer』などがありますが、これらは、全て、Pythonを使うことを前提に開発されています。つまり、「流行のディープラーニングをやってみよう」と思ったら、Pythonを使うのが当然という流れができたのです。

  • ディープラーニングが実践できるフレームワーク『TensorFlow』のWebサイト|

    ディープラーニングが実践できるフレームワーク『TensorFlow』のWebサイト

日本が世界に誇るプログラミング言語である、Rubyがヒットするのに、WebフレームワークのRuby on Railsが大きな役割を演じましたが、TensorFlow/Chainerの存在がPythonの価値をグッと上げているのは間違いありません。

しかし、ここがポイントなのですが、ディープラーニングの開発者がたまたまPythonを選んだわけではありません。Pythonには、もともと、ディープラーニングのフレームワークを構築するのに便利な科学計算などのライブラリや仕組みが備わっており、自然な流れとしてPythonで機械学習やディープラーニングのためのライブラリが作られました。

しかも、日本でこそ、それほど使われていなかったPythonですが、海外では以前からGoogleなどの大企業が積極的に採用していました。ですから、AIブームで大きくユーザーを増やしたのは確かですが、遅すぎるブレイクというわけではなく、以前から十分使われていたというのが正確な表現でしょう。

Pythonをインストールしよう

それでは、早速、Pythonをインストールしてみよう。とは言え、筆者は、このマイナビニュースで『ゼロからはじめるPython』という連載を書いており、14回目で、Pythonの開発環境Anacondaの構築方法を紹介しています。詳しくは、そちらを参考にしてください。

  • AnacondaのWebサイト

    AnacondaのWebサイト

ここでは、Anacondaをインストールしたとして、そこに同梱されている開発ツール『Jupyter Notebook』を使って、簡単なプログラムを実行してみましょう。Windows10なら、スタートメニューから「Anaconda3 > Anaconda Prompt」で"Jupyter Notebook"と入力、macOSなら、Finderから「アプリケーション > Anaconda-Navigator.app」を開いて、Jupyter Notebookを起動します(参照:ゼロからはじめるPython 第2回 Jupyterノートブックで気軽にPythonをこね回そう)。

PythonでHello, World!しよう

Jupyter Notebookは、Python自身で開発されているWebアプリケーションです。Webブラウザ上でPythonをインタラクティブに実行できるので、非常に便利です。Jupyter Notebookを開いたら、画面右上にある[New]をクリックし、[Python3]を選びましょう。すると、新規ノートブックが作成されます。

そして、In: [ ] と書かれたテキストボックスに、以下のようなプログラムを記述して、画面上部の実行ボタンをクリックしてみましょう。

 print("Hello, World!")

プログラムを実行すると、以下のように表示されます。一行書くだけです。CやJava言語と違って、main()関数を定義する必要はなく、基本的に上から下へとプログラムが実行されます。

  • Jupyter Notebook上でPythonのHello, World!を実行したところ

    Jupyter Notebook上でPythonのHello, World!を実行したところ

制御構文の記述がシンプル

次に、Pythonで、FizzBuzzを書いてみましょう。FizzBuzzとは、1から100までの数字を出力するのですが、3の倍数の時「Fizz」、5の倍数の時「Buzz」、3と5の倍数の時「FizzBuzz」と表示するものです。

以下が、FizzBuzzのプログラムです。このプログラムには、Pythonの特徴がよく表れています。

 for i in range(1, 101):
     if i % 15 == 0:
         print("FizzBuzz")
     elif i % 3 == 0:
         print("Fizz")
     elif i % 5 == 0:
         print("Buzz")
     else:
         print(i)
  • FizzBuzzのプログラムを実行したところ

    FizzBuzzのプログラムを実行したところ

Pythonでは、インデント(字下げ)による構文のブロック表現を採用しており、インデントに意味があります。そのため、インデントを崩すと、プログラムがうまく実行されません。しかし、プログラムを書くときには、ブロック部分をインデントするのが一般的なので、この仕様は合理的なものです。そして、誰が書いてもプログラムがシンプルで美しく保たれるというメリットがあります。

科学計算が得意

そして、先ほどPythonは科学計算が得意である点に言及しましたので、数値計算ライブラリのNumPyの使い勝手の良さも紹介しましょう。

以下のプログラムは、NumPyで多次元配列を二倍にする例です。

 # NumPyを使うことを宣言
 import numpy as np

 # NumPyで多次元配列を定義
 a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

 # 全てを二倍して表示
 print(a * 2)

プログラムを実行すると、多次元配列の全要素が二倍になっているのを確認できます。NumPyの多次元配列に対して「* 2」と書いただけで、すべての要素を二倍にすることができます。

  • NumPyで多次元配列を二倍にして表示する例|

    NumPyで多次元配列を二倍にして表示する例

そして、NumPyに用意されている様々な関数を利用することもできます。以下のプログラムは、valuesに入っている各値を合計し、それぞれの値が全体の何パーセントに当たるのかを表示するプログラムです。

 import numpy as np
 values = np.array([[10, 32, 25, 15, 29, 52]])
 per = np.round(values / np.sum(values) * 100)
 print(per)

プログラムを実行すると、以下のように表示されます。

  • 配列valuesの各要素が全体の何パーセントに当たるのかを調べるプログラム

    配列valuesの各要素が全体の何パーセントに当たるのかを調べるプログラム

他のプログラミング言語であれば、for構文などを使って、逐次処理しないといけないような計算ですが、NumPyでは、配列要素全体に特定の値を掛けたり割ったり、また関数を適用したりということが簡単にできるのが良い点です。他にも、特定の値を取り出したり、配列の次元数を変換したりと、便利な機能がたくさん備わっています。

まとめ

以上、今回は、改めて、Pythonというプログラミング言語を概観してみました。Pythonを使えば、すっきり美しくプログラムが記述できます。そして、科学計算ライブラリが充実していて、ディープラーニングなど最新技術に触れることができます。また、実用的なさまざまなライブラリが整っているので、AI分野だけでなく、Webアプリケーションの開発や、手軽にバッチ処理を記述できる点も見逃せません。ですから、今後も、Pythonから目が離せません。

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2005年IPAスーパークリエイター認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。