Pythonでデータ分析するのに必要なツールのまとめ

# この記事について
Pythonでデータ分析を行う際に役立つセットアップを紹介します。


データ分析に興味がある方はこちらも合わせてどうぞ
[データサイエンティストに興味があるならまずこの辺りを見ておきな、って文献・動画のまとめ（随時追加） - Qiita](http://qiita.com/hik0107/items/ef5e044d2f47940ba712)

# 実行環境
### Jupyter(旧iPython Notebook)
http://jupyter.org/
インタラクティブ（対話的）なコード実行のための環境
データ分析に非常に適していて、慣れると他のIDEなどでは分析ができなくなる。

任意に分けたコードブロックごとに実行し、結果を都度表示出来るほか、
・グラフのインライン表示
・数式の記述（Latex）
・マークダウン方式の文章記載

などの機能を備えており、模索しながらの分析作業や、結果の共有・保管などに非常に適する。
iPythonで文章と図表を描くことで論文のような形式で書くことも出来るため、科学術業界でも多用されている。

![image](https://qiita-image-store.s3.amazonaws.com/0/68432/17962cb8-e0f3-e498-a362-6f8098ec73fb.png)


複数人で使うためのjupyterhubというプロダクトもある。
https://github.com/jupyter/jupyterhub


### その他の選択肢
Google Cloud Datalab
https://cloud.google.com/datalab/?hl=ja
JupyterをベースにしたGoogle Cloudのデータ探索用フロントエンド
参考 ： [Python使いのためのBigQuery連携 - Qiita](http://qiita.com/hik0107/items/3944ccea04371331c3b4)


beaker notebook
http://beakernotebook.com/

Apache Zeppelin
https://zeppelin.incubator.apache.org/


# ライブラリ
## 数値計算、データ操作
### Numpy
http://www.numpy.org/
Pythonの組み込みのListに比べて、配列同士の演算や多次元配列（行列計算）などの扱いに
長けたオブジェクトを提供するライブラリ
Numpyの配列（Numpy Array）の集合体が次で紹介するPandasのデータフレームオブジェクトになる

NumpyとPandasの使い方についてはこの本に詳しい
>Pythonによるデータ分析入門――NumPy、pandasを使ったデータ処理
http://www.oreilly.co.jp/books/9784873116556/

### Pandas
http://pandas.pydata.org/
PythonでデータをRDBっぽい形（データフレーム）で扱うためのライブラリ
データ分析のスタンダードになっており、ScikilearnやMatplotlibも
Pandasオブジェクトとの連携がスムーズにされている

![image](https://qiita-image-store.s3.amazonaws.com/0/68432/21de8e54-64a4-b936-4a0a-bdde8449810b.png)

解説記事
>Python Pandasでのデータ操作の初歩まとめ
http://qiita.com/hik0107/items/d991cc44c2d1778bb82e


### Scipy
http://docs.scipy.org/doc/scipy/reference/
科学計算・技術計算のためのライブラリ
特殊関数、最適化、統計処理などの各種手法が含まれている（かなり数多い）

関数近似をするためのscipy.optimizeの例(qiita記事)
>Pythonで非線形関数モデリング
http://qiita.com/hik0107/items/9bdc236600635a0e61e8


## データ連携
### csv
http://docs.python.jp/2/library/csv.html#module-csv
csvの読み込みや処理、操作などに便利なライブラリ
csvファイルのリーダーやライターを提供する

### db接続
MySQL, PostgreSQL、BigQuery、SQLiteなどの各種DBとの接続用のライブラリが存在する
※ここで紹介するコネクターは複数存在します。

MySQL : MySQL-Connector-Python
https://pypi.python.org/pypi/mysql-connector-python/

PostgreSQL : Pycopg2
http://initd.org/psycopg/download/

BigQuery : BigQuery-Python
https://github.com/tylertreat/BigQuery-Python

もしくはPandasを使った方法はこちらを参照
http://qiita.com/hik0107/items/3944ccea04371331c3b4

SQLite : SQLite3（組み込みのためインストールは不要）
http://docs.python.jp/2/library/sqlite3.html

## 簡易分析
### pivottablejs
https://pypi.python.org/pypi/pivottablejs
Pandasオブジェクトを受け取って、Excelのピボットテーブルのような操作を可能にするライブラリ
簡単な集計やデータの確認をしたい時に重宝する

![image](https://qiita-image-store.s3.amazonaws.com/0/68432/a1a6c4ff-d007-c69c-21c7-eee2ae7084bd.png)

### collections(組み込み関数)
http://docs.python.jp/2/library/collections.html
Count Distinct的な使い方が出来る"Counter"やデータフレームの簡易版的なオブジェクトが設計可能な"namedtuple"などの関数が入っているモジュール



## モデリング(機械学習)
### scikitlearn
http://scikit-learn.org/
分類や予測のためのモデルが詰まった機械学習用パッケージ
こちらもPythonでのデータ分析ではほぼデファクトと言っても良い地位を得ている

![image](https://qiita-image-store.s3.amazonaws.com/0/68432/b58f893e-a584-4c13-df14-cd18ebcbbba7.png)



## グラフ描画
### matplotlib (+ seaborn)
http://matplotlib.org/
http://stanford.edu/~mwaskom/software/seaborn/
matplotlibは事実上Pythonのデータビジュアライズのデファクトとなっているツールで、
seabornはそのラッパー的な存在で、より簡単にキレイなグラフが描けるようになる

折れ線グラフ、棒グラフ、ヒストグラム、散布図などはもちろん、様々なグラフが存在する

Qiitaの記事
>pythonで美しいグラフ描画 -seabornを使えばデータ分析と可視化が捗る
http://qiita.com/hik0107/items/3dc541158fceb3156ee0

![image](https://qiita-image-store.s3.amazonaws.com/0/68432/3d8d9164-68ea-0f30-646d-e02df6ef037a.png)



### その他の選択肢
いずれも高機能なグラフ化ツール
matplotlibが気に入らない人、満足できない人、元R使いなどの人はこちらもどうぞ

・Bokeh http://bokeh.pydata.org/en/latest/
・ggplot(Rのggplogt2というライブラリのPython版) http://ggplot.yhathq.com/
・plotly https://plot.ly/

## その他
### 計算高速化：Cython
http://cython.org/
一部のPythonコードをCコードにコンパイルして高速実行する
計算量が多くスピードがネックになる時に有用

### 記号計算：sympy
http://www.sympy.org/en/index.html

### 日付の操作と演算：datetime
http://docs.python.jp/2/library/datetime.html


## こちらの記事も

そろそろデータサイエンティストの定義とスキルセットについて本気で考えてみる
http://qiita.com/hik0107/items/f9bf14a7575d5c885a16