Python

Python(パイソン)とはどんなプログラミング言語か

業務でPythonを触り始めることになったので、備忘録的な意味も兼ねて、今後はPythonに関するブログをちょこちょこ書いていきたいと思います。

Pythonとは

1991年に登場したプログラミング言語です。
Rubyと同様に人気が出てきていて、機械学習と言えばPython!という感じ。

10年前くらい?にやっていたブラッディ・マンデイというドラマで、三浦春馬演じる高木藤丸(天才ハッカー:ファルコン)がカタカタ黒い画面でハッキングしていた際に使っていたプログラミング言語でもあります。

個人的にすごい好きなドラマでした。漫画も面白いです。

PythonとRubyは2005年くらいから特に人気が出てきていて、プログラム初心者でも割ととっつきやすい部類に入ると思います。

WEBフレームワークも豊富で、代表的なものに

  • Rails…Ruby
  • Django…Python

があります。

データ分析におけるPythonの比較対象

僕が業務で扱うのは機械学習ではなく、データ分析なのですが、データ分析を行う際Pythonと比較されるのが

  • R
  • MATLAB
  • SAS
  • Stata

です。

pandasやscikit-learnのようなライブラリのサポートの改善によって、Pythonはデータ分析における有力な選択肢になったようです。

必須のPythonライブラリ

NumPy(ナンパイ)

最初「なんぴー」と読んでしまいました。

NumPyはNumerical Pythonの略。

数値計算の基盤となっていて、データ構造・アルゴリズムを提供し、Pythonにおける数値データを扱うほとんどのアプリケーションとの連携に必要なグルー(糊(のり))となっているライブラリです。

提供しているものは以下の通り。

  • 高速で効率的な多次元配列オブジェクトndarray
  • 配列間における要素レベルの計算や、配列同士で数学的演算を行う関数
  • 配列ベースのデータセットをディスクに読み書きするツール
  • 線形代数演算、フーリエ変換、乱数の生成
  • Python拡張やネイティブのC、C++コードがNumPyのデータ構造や計算機能にアクセスできるようにするための、安定したC言語のAPI

pandas(パンダズ、パンダス)

高レベルなデータ構造を提供するライブラリ。
構造化されたデータやテーブル形式のデータを、素早く簡単に分かりやすく扱えるように設計された関数も提供。

pandasの由来は、計量経済学での多次元の構造化されたデータセットを示す『panel data』と『Python data analysis』という表現の両方から。

Matplotlib(マットプロットリブ)

グラフなどの2次元形式の可視化に用いる最も一般的なPythonのライブラリ。
現在は大規模な開発者チームによってメンテナンスされていて、出版品質のグラフを作成できるように設計されています。

IPython(アイパイソン)とJupyter(ジュパイター)

IPythonはモダンなPythonのデータ分析環境において最も重要なツールの一つ。
IPython自体は、分析機能や計算機能を提供しているわけではありませんが、対話的な計算においてもソフトウェア開発においても最大限に生産性を上げられるように、徹底的に設計されています。

IPythonはJupyterでPythonを使う為のカーネルとして使われています。

Jupyter Notebookはウェブベースでコードを書くための「ノート」であり、さまざまなプログラミング言語をサポートしています。

SciPy(サイパイ)

SciPyは科学計算の領域における一般的な問題を扱うパッケージを集めたものです。

  • scipy.integrate…数値積分ルーチンや微分方程式ソルバ(solver)
  • scipy.linalg…線形代数ルーチンや、numpy.linalgで提供されている機能を拡張した行列の分解機能
  • scipy.optimize…関数の最適化(最小化)と球根アルゴリズム
  • scipy.signal…信号処理ツール
  • scipy.sparse…疎(スパース)なデータを持つ行列や線形システムのソルバ
  • scipy.special…ガンマ関数のような多数の一般的な数学の関数を実装したFortranのライブラリSPECFUNを使う為のラッパー
  • scipy.stats…標準的な連続分布や離散分布(密度関数、サンプラー、連続分布関数)、さまざまな統計検定、その他の記述統計

python2と3

Python2.xは2020年に致命的なセキュリティパッチも含めて、開発が終了予定となっています。

今業務で使っているのが2系の為、移行しないといけないのですが、割と面倒くさそう…。