今から始めるPython その1
最近、Pythonに興味を持っているけどもどう始めていいかよくわからないという人をよく見かけます。ちょっと前にかいた「二年前 Ruby + MATLAB + R + Python 今 95% Pythonな例」にもアクセス数があるので、似たような人が増えているのかなと思います。
ただ、Pythonの場合は必要な情報は主に英語になりますし、周りに使っている人が少ないと、最初の慣れるまでが大変だと思います。
この記事では、その辺りを少しでも解消できるように、最初のステップのチュートリアル、必須なライブラリや便利なサイト・ツールを紹介します。特に研究者向けに書きますが、それ以外の用途でもやっぱり同じことをおすすめすると思うので、幅広い人に参考にしてもらえるのではと思います。
Pythonは豊富なライブラリが魅力
Pythonはオープンソースな汎用のスクリプト言語で、豊富なオープンソースのライブラリがあるので研究にかぎらず組み合わせ次第でなんでもできるのが魅力です。ライブラリの中身は大抵はC言語でできているので、とっても速いです。できるだけ車輪の再発明を避けてライブラリを使うことで速いプログラムがが簡単にかけてしまうのです。
MATLABとPython
MATLABは科学・工学用の数値計算に特化した環境なので用途以外のことはあまり得意ではないかわりに、ハイクオリティな日本語ヘルプと、統合された強力なデバック環境がありますので、プログラミングの習得にはあまり時間がかけられないけれども結果がすぐにほしい場合にはやはり素晴らしいです。研究者なら周りに使っている人が多いのも大きいですし、ボスがMATLABじゃなきゃわからんという場合も多いです。
私自身、MATLABをずっと使っていましたが、Pythonの評判や使用例(NASAとか)をみて、一年併用して、いまは完全に乗り換えました。私がMATLABでしていたこと以上のことをしています。しかもオープンソースなので全部タダです。速度的にも自分の経験では最低でも同じか速くなりました。とくにビデオの画像解析は古いバージョンのMATLAB(2008くらいまで)ではファイルの読み込みや、簡単なフィルター処理でもとても遅かったのが、Pythonに乗り換えてOpenCVを使い出したら恐ろしく速くなりました。
また、作ったツールを他の人に使って貰う場合にMATLABではユーザーも同じバージョン以上のMATLABのライセンスが必要になってきますが、Pythonの場合はpy2exeやPyInstallerなどを使えば簡単に実行ファイルにパッケージ化して配布することが可能で、ユーザーはPythonをインストールしなくとも使えてしまいます。(MATLABも実行ファイルにパッケージ化するためのツールボックスがありますが、高いですし、ソースで配布されるケースが圧倒的に多いでしょう。)
プログラミング初心者でも大丈夫?
Pythonはコンピュータサイエンスを教える大学の入門コースでもっとも人気な言語となっていますし、もともと本職のプログラマーじゃないけども、必要なので最低限のプログラミングの知識が必要という研究者向けに考案された言語なため、言語の設計が親切でよく考えられていいて学習し易く、プログラミング初心者向け言語といえます。
もし、MATLABを知っていたらPythonはとっても簡単です。とくに数値計算に必須なライブラリNumpyやプロット用のmatplotlibなどはMATLABを意識した同じ名前の関数がたくさんあります。
Python3とPython2、32ビット版と64ビット版、どっちを使ったらいいの?
現在、Pythonにはユニコードが強化されたバージョン3系等と2系統がありますが、ぶっちゃけPython2を使いましょう。バージョン3系はあと数年後にはメインで使われている可能性がありますが、まだ未対応のライブラリが多く現時点ではお勧めできません。
追記。2015年になって状況はかなり変わってきました。最近の記事OpenCV3を64bitのPython3.4で使う。やPython3.5とPython2.7をウィンドウズで共存させてみる。に書いた通りバージョン3系等から初めても大丈夫という感じになったと思います。
同じ理由で、Python本体は大昔から32ビット版と64ビット版がありますし、Linuxでは64ビット版が当たり前のようですが、残念ながらウィンドウズではライブラリが32ビット用のみ提供されている場合がまだたまにあるために、下に紹介するPython(x,y)をつかって32ビット版の環境を一気に揃えるのがおすすめです。
64ビット版対応のライブラリも増えてますが、メモリが沢山あるPCが使えてかつ沢山計算しないといけない場合以外はあまりメリットもないと思います。numpy.float64とか32ビットのPCでも使えるのであまり困りません。
ただし、最近調べてみたらウィンドウズでも64ビット環境はかなりまともになってきているようで、そろそろ64ビットで全部いけそうなところまで来ています。私の場合、OpenCVのバージョンが3.0になって64ビットのサポートが始まったらば完全に以降できそうです。
ウィンドウズで64ビット版の普及が遅い理由は、多くのライブラリが依存しているNumpyの開発者の多くがLinuxユーザーで、ウィンドウズでフリーでライセンスがうるさくないツールで64ビット用にCやFORTRANのコードをコンパイルするのがやたら面倒いので、ずっと棚上げされているのが原因です。でも、Christoph Gohlkeさんのようなボランティアでウィンドウズ用の64ビットのライブラリ配っている人もいるので、その気になればウィンドウズでも64ビットで行けます。
ウィンドウズでも64ビット環境の現状に関しては、以下の記事が参考になると思います。
- 64ビット環境のポータブルなPython(WinPython)用にCエクステンションをビルドしてみた。
- WinPython(64ビット版)でwxPython3.0とpy2exeをインストールしてみた。
- Python3.4 64-bitでnumpyなどインストール。
- Python3.4 64-bitでGUIプログラミングしてみる。
まずはPython(x,y)で一気にプログラミング環境を手に入れよう
Pythonはクロスプラットフォームな言語ですが、Mac,Lunixの人はインストールしなくとももうPython入っているので、ウィンドウズのみ解説していきます。Pythonはオープンソースでフリーなので、再配布が可能です。なので、多くの人が必要であろうライブラリをてんこ盛りした状態のPythonを配布しているサービス(ディストリビューション)が幾つかあります。Python(x,y)は学術研究用途に特化したディストリビューションで、Python本体と学術研究用途によく使われている人気ライブラリを一気にインストールしてくれます。
学術研究用途で似たようなものはいろいろあって、EnthoughtからEnthought Python Distribution Free(いまはCanopy Expressと呼ぶらしい)や、Continuum AnalyticsのAnacondaというディストリビューションもあります。EnthoughtのFree版は同梱されるライブラリが少ないのであまりおすすめできませんが、アカデミックライセンス版がありますので、大学などの研究機関に所属していればフリーで上位版の機能が使えます。Anacondaは完全フリーで使えるのでこれも良さそうです。AnacondaはcondaというVirtualenvににた機能があるコマンドがあり、複数のPythonのバージョンを共存させることが容易です。なのでPythonがインストールされている状態でインストールしても干渉なくインストールされるのでメインはPython(x,y)で揃えて、興味があればAnacondaも同時に試すことが可能です。
EPDもAnacondaもちょっと試しましたが、結局のおすすめはPython(x,y)です。Python(x,y)はPythonを本家のhttp://www.python.org/から落としてくると、自分でパスの設定をしないといけないですが、その辺をやってくれるので楽です。また、エクスプローラーの好きなフォルダからConsole2を開くことができる右クリックメニューを追加してくれるのがとっても重宝します。追記)2015あたりからPython(x,y)の方は活動が下火になっているようです。ホームページも移転して、リンク切れが多いですがまだ最新版のダウンロードは生きています。そしてAnacondaの人気がだいぶ上がってきています。ウィンドウズでもLinuxでも色んな所で好評。Python(x,y)の方がシンプルですが、Anacondaの方が高機能で、各ライブラリを最新版に保つのが楽なのでAnacondaを使い始めました。近いうちに記事にします。
Python(x,y)はてんこ盛りなので500MBとインストーラーのファイルサイズがでかいですが、一回きりですし、ライブラリを最新版に保つにはPython(x,y)から個別のプラグインのインストーラーが優秀なので、これを出来るだけ使いましょう(2016年2月現在はプラグインのページがリンク切れのようです。悲しい。)。理由はSite-Packagesのプラグイン用のフォルダにuninstall.exeを置いてくれるので、アンインストールが簡単なことと、pipではインストールが難しいものがあるからです。Python(x,y)はpipもインストールして、パスまで通してくれるのでpipで済むようなピュアPythonなモデュールとかならば、pipでもいいです。pipの使い方はこちら。
OpenCVなどpipではうまくインストール出来ないものがあるので、基本はPython(x,y)のサイトのプラグインのページから個別にインストーラーをダウンロードするか、Christoph Golkeさんのバイナリーを使うといいです。インストールが難しいときがあるOpenCVに関してはGolkeさんのインストーラーが一番簡単でおすすめです。
ライブラリは言語自体よりも大事
どの言語でも結構そうですが、Pythonの言語自体の基本的な文法は他の言語と重複する部分も多いし、それほど覚えることもありません。とくにMATLABをすでに知っている人は楽でしょう。練習が必要なのはリストコンプリヘンションくらいでしょう。ラムダとか別に覚えなくともよいと思うし。
しかし、なにか役立つプログラムを作るには必要なライブラリを探して、ライブラリの使い方を覚える必要があります。ライブラリとはMATLABで言うツールボックスみたいなもので、便利な関連する関数やクラスの集まりで、これを利用することで短期間で高機能なプログラムが書けます。ぶっちゃけ言語よりはライブラリの量と質、チュートリアルなどの方が大事なのです。その点、学術研究ではPythonのライブラリはnumpy、matplotlib、IPython、Scikit-learn、OpenCVなどなどとても充実しています。
定番ライブラリを駆け足で説明
それではPython(x,y)についてくる定番ライブラリを見て行きましょう。Python(x,y)のサイトのStandardPluginsから一覧が見れます。ここにあるプラグインとはライブラリのことです。
科学計算関係
- NumPy
- 多次元データを扱うための配列を提供する必須ライブラリです。ライブラリはほぼC言語でできているのでとっても速いです。これとSciPyとmatplotlibと合わせてMatlabのような環境が手に入ります。
- SciPy
- こちらはNumPyをつかってFFTとか画像解析とか便利な関数が沢山用意されています。MatlabのImage Processing ToolboxやSignal Processing Toolboxに大体相当します。
- Bottleneck
- Numpyの一部機能を拡張して高速化したもの。
- SymPy
- Mathmaticaみたいなもんです。
- scikits-learn
- SciPyを補う感じで、とくに機械学習に関連したライブラリ。
- pandas
- RにあるData Frameの機能をNumPyを使って再現したものです。
プロット関係
- Matplotlib
- グラフをプロットするのに欠かせない。必須ライブラリです。plotやimshow、histなどMATLABでお馴染みのコマンドが使えます。epsで出力してIllustratorで編集したりして論文用にかっこ良くしたりも出来ます。
- Veusz
- ビュースと読むらしい。ライブラリというより単独のツールだが、numpyアレイやcsv、エクセルなどからデータをインポートしてハイクオリティな図を制作するのに便利。Matplotlibは日常のちょっとしたデータ解析の出力に使い、こちらは論文に投稿するような気合の入った図を作るのに便利。Illustratorでする作業を減らせます。
- ReportLab
- 計算結果のグラフやテキスト、イメージを好きに配置して複数ページに渡るレポートを自動出力したりするのに便利。Matplotlibだけでもある程度PDFの出力ができるが、こちらが自由度高い。
画像解析
- Pillow
- Pythonでの画像データの扱いはPython Imaging Library (PIL) というライブラリが定番でしたが、ここ数年開発が停滞してきたのでフォークされたのがPillowです。画像ファイルの読み込み・変換や、NumPyとのやりとりなどに使います。Pillow、PILは中身がPythonで書かれている部分がかなり多いので遅いです。
- OpenCV
- 監視カメラなどのリアルタイムでの動画解析用に作られたライブラリです。中身はC/C++なので速いです。PILでできることは大体こっちでも出来ます。SciPyのndimageとPillow、OpenCVがあれば大体画像・動画についてはなんでも出来ます。
コンソール・開発環境
- Spyder
- MATLABにとても良く似た統合開発環境が手に入る。GUIはQtでできている。エディター、コマンドコンソール、変数ビュアー、ヘルプビュアーなどなどMATLABから来た方はまずこれを試してみるべきでしょう。
- IPython
- こちらは通常のpythonのインタラクティブコンソールを便利にした環境です。Spyderよりシンプルな環境が良い人はこちらをチェック。通常はpylabオプションを付けて起動して、matplotlibがインポートされた環境で使いデータをexploratoryに解析したりするのに使います。しかし、IPythonの拡張機能は沢山あるので、Python初心者がいきなり使うとIPythonの機能、Python標準ライブラリ、サードパーティのライブラリの境目がどこにあるか混乱するかもしれない。少なくとも私は混乱したのでDreampieというマルチラインコンソールを併用しています。
- IPython notebook
- IPythonをウェブブラウザから使うことのできるツールで、コードと計算結果をウェブページとして一緒に記録しておけるし、あとから一部変更して計算しなおしたりもできる。データ解析をどうやってやったのか説明するのに便利。
GUI関係
GUIとはグラフィカルユーザインタフェースのことでようはプログラムのウィンドウとその上のボタンとかイメージとかのこと。PythonのGUIライブラリについてはPython GUIツールキット個人的な比較のまとめを参照。
- PyQt
- クロスプラットフォームなGUIライブラリ。QtにはコミュニティベースなPySideというのもあるが、こちらはRiverbankという会社が作っているPyQt4の方。
- wxPython
- これもクロスプラットフォームなGUIライブラリ。当方はQtじゃなくwxを使っています。Qtは隣の芝生でとても青いでが、ライセンスが自由なwxでハッピーです。
- VTK
- OpenGLを使っているので高速な3Dビジュアリゼーションライブラリ。多少GUIもできる。クロスプラットフォーム。
ツール関係
- Pip
- これはコマンドラインツールでpip install numpyなどのようにして使って必要なライブラリをインストールしたり、アップデートしたりするのに便利だが、Python(x,y)を使っていればあまり活躍の機会がないかもしれない。
- py2exe
- パッケージ化して、EXEファイルを作って配布するときはこちらを使う。これもコマンドラインツール。GUI2Exeというツールを使えば、コマンドを覚えなくとも画面をクリックして使える。
- cx_Freeze
- こちらもパッケージ化して、EXEファイルを作って配布するときに使うツール。GUI2Exeにも対応。py2exeより新しいが、py2exeの方が安定している。
- Pywin32
- MSウィンドウズの機能をPythonから使うときに便利なライブラリ。
次回その2では、Spyderを使いながら何かプロットして、Spyderの基本的な使い方をみてみましょう。
目次
« 佐藤聖子と五島良子(キューンレコード時代)が全く区別付かない事案が発生 | トップページ | Android版のFeedlyでみると時事ドットコムのサムネイルがカオスで楽しい件 »
「学問・資格」カテゴリの記事
- ウイルスを殺すのは簡単。人に無害でやるのが難しいの!! 二酸化塩素「こう?えい!」(2020.03.11)
- 老化はエピジェネティクスな影響が積り、スプライシングに影響を与えるのかも(2017.11.20)
- シネッセンス細胞がアツい。不老不死とハゲの治療が同時に可能か?(2017.11.18)
- 古めの論文でテキスト選択がおかしい時の対処法(2017.09.08)
- Juliaやってみよう。五日目。Pythonと速度比較。(2017.08.01)
「Python」カテゴリの記事
- Noteの記事をPythonでバックアップしといた。(2021.05.05)
- JupyterLabでも好きな外部エディターを使いたい!(2018.05.02)
- ローカルエリア内のJupyterLabサーバーにLAN経由で接続する。(2018.05.02)
- Juliaやってみよう。五日目。Pythonと速度比較。(2017.08.01)
- Juliaやってみよう。四日目。@timeでプロファイリング(2017.07.16)
「今から始めるPython」カテゴリの記事
- 今から始めるPython その6 numpyの基本 スライシングの続き(2014.10.03)
- 今から始めるPython その5 文字列、リスト、numpyスライシング(2014.08.02)
- 今から始めるPython その4 pylabネームスペースの解説(2014.07.26)
- 今から始めるPython その3 Site-Packagesってなに。モデュールのインストール・アンインストール(2014.03.17)
- 今から始めるPython その2 Spyderを使う(2014.03.11)