1. Introduction
1980年代後期に教育やスクリプトのための言語として考案されたPythonは研究や産業を通じて多くのプログラマ、エンジニア、研究者やデータサイエンスティストのための重要なツールにそれ以来なってきました。天文学者がデータを主とした科学のため自由でオープンなツールを作って促進することに集中するように、非常に天文学的に大きいデータセットから意味を抽出したり、Webからデータソースをスクレイピングやマンジングしたり、日々の研究のタスクを自動化したりといった日々直面する問題のタイプにかなり完璧に適応するのにPythonを見つけてきました。
Pythonの魅力は、その単純さと美しさ、同時に莫大なエコシステムと何よりも作られてきた領域固有のツールの利便性です。例えば科学的プログラミングとデータサイエンスでのPythonのコードは多くの使いやすいパッケージのグループでつくられます。
- Numpyは多次元データ配列のための効果的なストレージと計算を提供します。
- Scipyは数値の積分と補間のような幅広い数値ツールを含みます。
- Pandasは操作、フィルタ、グループ分け、データの変換のためのメソッドのパワフルな集合をもったDataFrameオブジェクトを提供します。
- Matplotlibは論文クオリティのプロットや図の制作のための使いやすいインタフェースを提供します。
- Scikit-Learnはデータに対する一般的な機械学習アルゴリズムを適用するための一様な道具一式を提供します。
- IPython/Jupyterは探索的解析のための使いやすい更新されたターミナルとインタラクティブなnotebook環境を提供します、同時に双方向性のための制作と実行できるドキュメントを提供します。例えば、このレポートの原稿は全体的にJupyter notebookの中で構成されました。
これらに添えられた多くのほかのツールやパッケージも重要です、もしあなたが行いたい科学的またはデータ分析のタスクがあるなら、あなたのためにそれを行うパッケージを誰かが書くというチャンスがあります。
このデータサイエンスエコシステムの力に入り込むのに、最初はPython言語そのものへの親和性が要求されます。私はしばしばゼロからスタートするよりもむしろ知識レベルに敬意を払ったまとめではあるがPython言語の包括的な紹介を探している他の言語(MATLAB, IDL, R, Java, C++、その他)にバッググランドをもつ学生やな仲間に出会ってきました。このレポートはそのすきまをうめることを求めています。
このように、このレポートやプログラミングの包括的な紹介やPythonそのものの完全な紹介を狙ってません。もしそれがあなたの探しているものなら、"Resources for Learning" にリストされているおすすめのリファレンスの一つに注意を払ったほうがいいかもしれません。代わりに、これはいくつかのPythonの重要な文法と意味、組み込みのデータ型や構造、関数定義、制御構造と他の言語的な様相の駆け足の旅を提供するものです。私の狙いは読者が強固な基盤で単にアウトライン化されているデータサイエンスの積み重ねを探索することから歩いていっていけるようにすることです。
コードの例を使うこと
コードの例や練習やその他の補助資料はhttps://github.com/jakevdp/WhirlwindTourOfPython/ でダウンロードされて利用可能です。この本はあなたがあなたの仕事を得ることを支えるためにここにあります。一般的に、もしコードの例はこの本で提供されるならば、あなたはそれをあなたのプログラムやドキュメントで使ってよいです。あなたは、あなたがコードの重要な一部を再生産しあい限りは私たちに許可を必要としません。例えば、この本からのいくつかのコードの固まりを使ったプログラムを書くことは許可がいりません。オライリーの本からCD-ROMの例を売ったり配布したりするのは許可がいります。この本の引用やコード例の引用によって質問に答えることは許可はいりません。この本からのコード例の大部分をあなたのプロダクトのドキュメントに組み込むことは許可がいります。
私たちは、要求しませんが、帰属を感謝します。たいてい帰属は、タイトル、著者、出版社、ISBNを含みます。例えば、
"A Whirlwind Tour of Python by Jake VanderPlas (O’Reilly). Copyright 2016 O’Reilly Media, Inc., 978-1-491-96465-1."
もしあなたがコード例の使用を公正な利用や上記の与えられた許可外としたいと感じるなら、お気軽に permissions@oreilly.com. へ私たちに連絡をとってください。
導入と実施上の配慮
Pythonと科学的計算を可能にするたくさんのライブラリのインストールは、あなたがWnidows, Linux, Mac OS Xの使っているならまっすぐに前方にあります。この節はあなたのコンピュータにセットアップするときのいくつかの配慮を概説します。
Python 2 対 Python 3
このレポートはPython2のシリーズと互換性のない言語的な更新を含むPython3の文法を使います。Python 3.0 は 2008年に最初リリースされましたが、特に科学やウェブの開発コミュニティで比較的適応が遅いです。これは重要なパッケージやツールキットが新しい言語の内部仕様で互換性がつくられるために多くの時間がかかることが主な理由です。しかしながら、2014の早期までで、データサイエンスのエコシステムで最も重要なツールの安定的なリリースがPython2と3で完全な互換のある状態になりました、そしてこの本やより新しいPython3の文法を使うでしょう。仮にそういうケースがあっても、この本のコードスニペットの広く大部分はPython2での修正なしで機能するでしょう。Python2非互換の文法が使われている場合でも、私はそれを明示的にメモするように毎回努力をします。
condaを使ったインストール
Pythonをインストールする様々な方法がありますが、特にもしあなたがやがて上記に記載したデータサイエンスのツールを使うことを望むなら私は一つを提案したい、それはクロスプラットフォームであるAnaconda distribution経由からのインストールです。Anaconda distributionは二つの味付けがあります。
- Miniconda は あなたに Pythonパッケージに合わせて調整されたクロスプラットフォームのパッケージマネージャとして操作を行うcondaと呼ばれるPythonインタプリタ自体を与えます。パッケージマネージャはLinuxユーザが親しみのあるかもしれないaptやyumというツールに似ています。
- Anaconda はPythonとconda両方を含みます、そして加えて他のプリインストールされた科学計算に適応したパッケージ一式を含みます。
Anacondaで含まれたどのパッケージもまたMiniconda上でマニュアルでインストールできます、この理由から私はMinicondaからスタートすることを提案します。
最初に、Python3のバージョンを選ぶことを念頭にして、Minicondaパッケージをダウンロードしてインストールしましょう、そしてそれからIPython notebookパッケージをインストールします。
[~]$ conda install ipython-notebook
condaのさらなる情報のために、conda環境を作って使うことについての情報を含んでいます、上記のページのMiniconda パッケージのドキュメントのリンクを参照してください。
Pythonの禅
Pythonファンはしばしばいかに直感的で美しく楽しいPythonかどうかを指摘することが素早いです。私は同意するつもりですが、私はまた美しさ、直感、楽しさがしばしば親しみと共に伴うものであることを認めています、そんなわけて他の言語でのそのような親しみに対してはそんな派手な感情はちょっとしたひとりよがりのように伝わりえます。にもかかわらず、私は、もしあなたがPythonにチャンスを与えるなら、あなたがそんな印象が生じることを見ることを望みます。そして、もしあなたが本当にPythonの熟練者たちのコードの実践の多くを稼働させるプログラミング哲学の中を掘り下げたいなら、Pythonインタプリタの中にはよい小さなイースターエッグが存在します、単にあなたの目を閉じて、数分中間に位置してみましょう、大切なのはこれです
In [1]:
import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
それでは、Python言語の私たちの旅をはじめましょう。