データ分析やデータ加工、機械学習などを行うのに便利な Python ライブラリを紹介する。
なぜ Python なのか
統計や機械学習をするなら、 R という選択肢もある。 R のデータの加工や集計、統計処理に優れた言語であり、言語標準の機能だけでかなりのことができる。機械学習のライブラリも充実しており、有力な選択肢であることは間違いない。 R と比較して Python が優れている点は、周辺エコシステムの充実にある。 Python エコシステムはデータサイエンスの分野に留まらない。 NumPy や Pands で加工したデータを Django を使った本格的な Web アプリケーションで利用することも可能だ。
ライブラリ群のインストール
ここで挙げているライブラリのほとんどは Anaconda で一括でインストールできる。
データ加工
NumPy
NumPy は数値計算を効率的に行うためのライブラリ。ここでは1次元配列を例にしているが、多次元配列にも対応可能だ。ベクトルや行列計算を高速に行うことができる。
In [1]: import numpy as np # NumPy のインポート
In [2]: arr = np.asarray([n for n in range(10)]) # ベクトルの作成
In [3]: arr # 出力
Out[3]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [4]: arr * 10 # データの加工
Out[4]: array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
Pandas
Pandas は NumPy を拡張したライブラリで、データの読み込みや欠損値処理など、機械学習の前処理には欠かせない機能を持っている。 DataFrame
というオブジェクトをがあり、データの加工やマージを簡単に行うことができる。 R の data.frame
に近い。
In [1]: import pandas as pd # Pandas のインポート
In [2]: df = pd.DataFrame({ # データフレームの作成
...: 'A': [n for n in range(5)],
...: 'B': ['male', 'male', 'female', 'female', 'male'],
...: 'C': [0.3, 0.4, 1.2, 100.5, -20.0]
...: })
In [3]: df
Out[3]:
A B C
0 0 male 0.3
1 1 male 0.4
2 2 female 1.2
3 3 female 100.5
4 4 male -20.0
In [4]: df.describe() # 基本統計量の出力
Out[4]:
A C
count 5.000000 5.000000
mean 2.000000 16.480000
std 1.581139 47.812101
min 0.000000 -20.000000
25% 1.000000 0.300000
50% 2.000000 0.400000
75% 3.000000 1.200000
max 4.000000 100.500000
In [5]: df[df['B'] == 'female'] # サブセットの呼び出し
Out[5]:
A B C
2 2 female 1.2
3 3 female 100.5
Python Data Analysis Library — pandas: Python Data Analysis Library
レポート、可視化
jupyter
Jupyter Notebook は Python の実行環境で、コードの内容と出力結果が記録されるため、探索的にデータの加工や統計処理を行うコーディング環境として利用できる。また、レポートの作成やスライドとしても出力可能。
matplotlib
matplotlib はグラフ描画ライブラリ。棒グラフ、散布図、ヒストグラムなど、様々なグラフに対応している。
Matplotlib: Python plotting — Matplotlib 2.0.2 documentation
plotly
plotly は matplotlib よりもリッチでインタラクティブなグラフを描画することができる。作成したグラフは plot.ly で共有することも可能。
Python Graphing Library, Plotly
メッセージング、ストリーム処理
Kafka-Python
Kafka-Python は名前の通り、 Apache Kafka の Python クライアント。
from kafka import KafkaConsumer
import json
consumer = KafkaConsumer('topic', bootstrap_servers='localhost:9092')
for msg in consumer:
data = json.loads(msg.value.decode())
print(data)
PySpark
Spark や Kafka はビッグデータには欠かせない存在となった。 MLlib という機械学習ライブラリが存在する。
Python Programming Guide - Spark 0.9.0 Documentation
機械学習
scikit-learn
scikit-learn は機械学習ライブラリ。流行りのニューラルネットワークだけでなく、他のアルゴリズムも利用できる。また、機械学習を行う上で必要になってくる訓練データと検証データへの分割や交差検証、グリッドサーチなどの機能も有し、かゆいところに手が届くライブラリになっている。機械学習ライブラリを触るなら、まずはこれから。
scikit-learn: machine learning in Python — scikit-learn 0.18.2 documentation
TensorFlow
ご存知ディープラーニングライブラリ。
Keras
Keras は TensorFlow や CNTK 、 Theano などに対応したラッパー。
おすすめ書籍
O'Reilly Japan - Pythonによるデータ分析入門
Pandas の作者による著書。 Pandas の使い方とデータ分析手法を学ぶことができる。 NumPy や matplotlib などの周辺ライブラリもカバーしている。
O'Reilly Japan - Pythonではじめる機械学習
scikit-learn の作者による著書。 scikit-learn の使い方と機械学習に必要なエンジニアリングを学ぶことができる。
Python を飛び出す
もしあなたが Pandas でデータをこねくり回したり機械学習ライブラリのチューニングだけに満足しないのであれば、 Python のエコシステムを飛び出す必要があるだろう。データの世界は深淵にして広大であり、エンジニアがデータサイエンティストをフォローするにはより広い範囲をカバーしておく必要がある。具体的には Hadoop, Spark, Apex などの分散処理基盤や、 BigQuery や TreasureData などのフルマネージドな DWH についても抑えておくと、活躍の場は広がるだろう。