PyQオフィシャルブログ

Pythonのオンライン学習プラットフォームPyQのオフィシャルブログです

【その3】Pythonがなぜデータ分野で強いのか?の真実 〜 Pythonエンジニア列伝 Vol.3 石本敦夫氏

f:id:kamekokamekame:20171205180244p:plain

お客様

f:id:kamekokamekame:20171208171227j:plain:w30 : 石本敦夫氏 @atsuoishimoto

聞き手

f:id:kamekokamekame:20171208171433p:plain:w30 : 佐藤治夫 @haru860 f:id:kamekokamekame:20171208171436j:plain:w30 : 清原弘貴 @hirokiky

Pythonがなぜデータ分野で強いのか

石本)かなり前からPythonでは科学技術系、システム管理系のライブラリは多かったですね。NumPy*1は当時からあったし。あとPIL*2も昔からあったから、画像処理も優秀。

f:id:kamekokamekame:20171211122750p:plain:w300

清原)僕は、学生時代に『入門 自然言語処理』 とか、『集合知プログラミング』 とか読んでて、そこでPythonを知ったんですよね。今でいうAI的な分野ですね。

石本)NumPyはかなり古い。当時はNumeric Pythonという名前だったかな。

清原)scikit-learnはあったんですか。

石本)scikit-learnは結構新しい。

佐藤)pandasは?

石本)pandasもかなり最近。Fortranの代わりに使うための行列演算のパッケージというのは昔からあった。歴史的にも、Guido *3がNumPyはひいきにする傾向があって。

清原)アットマーク?

石本)そう、アットマーク。

清原)Pythonにアットマーク演算子というのがあって、これがNumPyのために入ったんです。行列の内積か外積かを計算するのに array @ arrayって書いたら計算できるという演算子ですね。

f:id:kamekokamekame:20171206182638p:plain:w200

石本)あと、昔からあるのが。エリプシスって、 っていうような、ドット3つの書き方。エリプシスというオブジェクトそのものは昔(Python 1系のころ)からあったんですけどね。

佐藤)なぜNumPyを気に入ってるんですかね。

石本)Pythonのユースケースとして。科学技術計算用にPythonを学校などで使ってほしいという狙いですね。

佐藤)それは当たりましたね。なぜPythonは科学技術計算のほうで強いのかという理由はよく知らなかったですね。

清原)実は Guido のおかげ。

佐藤)先見の明ですね。

石本)例えばPythonで a += bっていう、augmented assignment*4っていう形式、あれも昔はPythonには絶対導入されないと言われてたんですよ。

清原)絶対、 a = a + b がいいと。

石本)導入しない理由もFAQなどに書いてあったんですが、augmented assignmentっていう形式をやはりNumPyが要求したんですよ。では必要だねということになって。

f:id:kamekokamekame:20171206180755p:plain:w200

清原)弟 Djangoからしたら「パパ(Guido)、お兄ちゃん(Numpy)」に優しいみたいな。

石本)そうそう。

清原)「お兄ちゃんはアットマーク演算子買ってもらったのに」みたいな。

石本)あとは有名なのは、rich comparison。Pythonが1系、2系のころで演算子の実装がガラっと変わったんですよ。で、今は rich comparisonっていう比較方式。Python 3はrich comparison専用です。Python 1と2はオリジナルの比較とrich comparisonが両方入ってた。

清原)なんなんですか、その rich って。

石本)演算子の話。昔は演算子のオーバーライドするときは cmp っていう特殊メソッドしかなかった。今は gt とか lt とか別々に定義できる。cmp で全部やりなさいという感じだった。

清原)面倒くさいですね。演算子はどこで判断するんですか。

石本)大なりか小なりかっていうのはメソッドは気にしないわけ。比較してどちらが大きいかだけを返す。

清原)1か、-1みたいな。

石本)そうそう。0、-1、1を返すみたいな。

清原)C言語とか昔っぽいですね。1ってどっちが大きいんだっけみたいな。

石本)それもNumPyがこれでは嫌だと。

佐藤)言語の話は面白いですね。「これが理想だ」と言語を作ってる訳ではなくて「このジャンルを強くしていこう」のような経緯があるんですね。

清原)それを言うとWSGI*5も同じですね。Zopeとかフレームワーク単位でサーバーまでを持っていると扱いにくいから、WSGIアプリケーションとWSGIサーバーを分離できるようにしたんですよね。共に生きてるんですよね。素晴らしい。

佐藤)Javaとは少し違うかもしれない。Javaはエンタープライズな文化があって、企業の人たちがみんなで集まって仕様を決める印象です。

石本)Pythonは昔から Guido が、まあいいんじゃねって言ったらもう、それで通るわけだから。それは違いますね。

佐藤)面白いな。「Pythonは科学技術計算が強い!」というけど、なぜそうなったのかっていうのを知ってる人はあまりいないんじゃないですか。

清原)確かに。 Guido のおかげだった。

佐藤)Guido の思惑が成功して今、Pythonがブレークしているという。

f:id:kamekokamekame:20171211123304p:plain:w400

石本)Guido は「Webは失敗した」と言ってましたけどね。Web系の標準ライブラリが今でもそんなに強くないじゃないですか。Webはもう少し早めに手を出すべきだったかなぁという感じのようです。

佐藤)Webで後れを取ったけど、科学技術計算のほうで盛り返した。

→ 次回は、 PEPとPython2、Python3の話 です。

目次

PyQオフィシャルブログでは『Pythonエンジニア列伝』を不定期掲載します。Pythonに関わっているさまざまな人にインタビューし、これからプログラミングを学習する方にエンジニアが普段考えていることや取り組んでいる活動などを紹介していきます。

(まとめ:大村亀子 @okusama27

pyq.jp

*1:NumPy プログラミング言語Pythonにおいて数値計算を効率的に行うための拡張モジュール

*2:Pillow Python製画像処理ライブラリ

*3:グイド・ヴァンロッサム(Guido van Rossum)Pythonの作者 @gvanrossum

*4:累算代入文: 7. 単純文 (simple statement) — Python 3.6.4rc1 ドキュメント

*5:Pythonにおいて、WebサーバとWebアプリケーション(もしくはWebアプリケーションフレームワーク)を接続するための、標準化されたインタフェース定義

Copyright ©2017-2018 BeProud Inc. All rights reserved.