機械学習ではpandasが非常に利用されています。なぜpandasを使うのか、その理由とpandasの基礎的なデータ処理をまとめました。

Pandasとは

pandasは、エクセルのようにデータを加工したり解析できるpython向けライブラリです。pythonのスクリプトコードの先頭行でインポートすると、pandasを利用することが出来ます。

pandas の基本的なデータ構造はDataFrame(データフレーム)です。DataFrameとは、Excelと同じデータ構造で、二次元のテーブルのことです。つまり行と列をもった配列データです。DataFrameの列データに付与するラベルをカラム(columns)と呼びます。

pandasを利用するメリット

pythonの機械学習でpandasを利用するメリットは、2つあります。

①異なる型の列データを1つのデータフレームに格納できる

NumPyの配列は、すべての要素が同じ型でないといけませんが、pandasは列ごとに異なる型でも大丈夫です。そのため、整数でも少数でも文字列でも日付でもすべて1つのデータフレームとして格納できます。

データフレームに異なる型を格納できることで、最も恩恵がある関数は、csvファイルの読み込みです。この関数だけでも、pandasを使う価値は十分あります。
numpyでのcsvファイル読み込みは、データの配列を気にする必要があるのでとても大変です。たくさんエラーが出てうんざりします。pandasでのcsv読み込みでは、ほとんどエラーが起こらないので快適にプログラミングできます。

②データ加工や解析の関数が豊富

こちらの記事を読んでもらえばわかるのですが、pandasはデータを加工する関数が非常に豊富です。欠損値の保管や削除、文字列の数値変換、指定した列の抽出などのデータ加工から、平均値、標準偏差などの基本統計量の算出など、データ解析の機能が豊富です。

つまり、pandasでcsvファイルを読み込んで、pandasでデータを格納することで、データの前処理がとても簡単にできるのです。

PandasとNumPyの違い

pandasがあればNumPyはいらないかというとそうでもなく、NumPyは多次元配列の計算ができます。いわゆる線形代数です。機械学習ライブラリのscikit-learnでは、NumPy配列として計算されます。よってscikit-learnで機械学習をやりたい場合、以下の流れになります。

1.pandasでcsvファイルを読み込む
2.pandasでcsvファイルのデータを加工する(文字列の数値変換、欠損値の補完等)
3.pandasのデータフレームからNumpy配列に変換する(pandasの列指定して読み込めば勝手にNumPyの配列になります)
4.指定したデータをscikit-learnで機械学習処理する
5.scikit-learnでできたモデルを評価する

pandasのインストール

方法は2つあります。

①pipでのインストール

コマンドラインで、以下を叩く
pip install pandas

※pipがすでに入っている場合のみ実行できます

②Anaconda でのインストール

1.https://www.continuum.io/downloadsにアクセスします。Anaconda のダウンロードページから、Python 2.7 の 32 bit のインストーラをダウンロードします。
(※バージョンは2.7推奨です。bitはOSの環境に合わせてください)

2.ダウンロードしたファイルを開き、インストーラを起動します。
3.「Next」を押して次に進みます。
4.ライセンスを確認し、「I Agree」を押して次に進みます。
5.「Just Me」を選択されていることを確認し、「Next」を押して次に進みます。
6.インストール先を尋ねられるので、「Next」を押して次に進みます。
7.2 つのチェックボックス (環境変数 PATH への設定、Python 2.7 をデフォルトの Python として登録) にチェックが入っていることを確認し、「Next」を押して次に進みます。
8.インストールが始まります。
9.「Finish」を押し、インストーラを閉じます。

インストールの確認方法

コマンドラインで、conda list と打ち込んでみて、pandasのライブラリが入っていればインストール完了です。pipでインストールした方は、 pip list で同様の確認ができます。

pandasの基本操作

pandasはSQLと同じような操作がpythonでできます。操作はとても直観的でわかりやすいです。

DataFrameの作成

pd.DataFrame関数で 、新しいDataFrameを作成できます。

#pandasをインポート
import pandas as pd

df = pd.DataFrame({
        'A_column' : [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10],
        'B_column' : [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8]
    })

csvファイルの読み込み

pd.read_csv関数で、csvデータを読み込むことが出来ます。pandasで最も便利な関数です。
pandasのことが嫌いでも、read_csv関数は嫌いにならないでください。

#csv読み込み
csvdata = pd.read_csv('inputdata.csv')

列(column)抽出

データフレームから指定の列を選択するメソッドは、ixとilocの2つあります。ixは列名(カラム名)での指定が可能で、ilocは名前指定ができず列番号のみです。そのためixだけ覚えておけば大丈夫です。

# ilocを使った列選択(特徴量と教師ラベルを分割して格納)
train_data = df.iloc[:, 0:-1].values
label_data = df.iloc[:, -1].values
※csvの右端の列に教師ラベルがあるケースを想定

# ixを使った列選択(列名指定)
df.ix[:,"A_column"] 
df.ix[:,["A_column","B_column"]] 
df.ix[:,0:-1] 

データフレームに列を追加する

DataFrameに新しい列を追加することもできます。

# 列の追加
df['C_column'] = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, 7, 0, 0, 0, 0, 0, 0]

データのソート

sort_values関数で列をソート(並び替え)できます。昇順はascendingをTrue指定、降順はFalseを指定します。

#カラムAの昇順でソート
df.sort_values(by=['A_column'], ascending=True)

#カラムBの降順でソート
df.sort_values(by=['B_column'], ascending=False)

大量データでpandasを扱う時の注意

pandasで読み込んだデータは、すべてメモリ上で計算されます。そのため、大量のデータを読み込もうとすると、メモリエラーになります。以前メモリ2GBのパソコンで、10万件のcsvファイルをインポートしようとしたところ、メモリエラーになりました。

おわりに

実務で一番使うpandasの関数は、csvデータの読み込みと列の抽出です。後は、忘れてしまってもなんとかなります。

機械学習についてより詳しく知りたい方は、以下の記事と書籍を参考にして貰えると嬉しいです。

参考記事:これだけは知っておけ!PythonでAI開発の基礎まとめ
参考図書:


上記の「Pythonではじめる機械学習」は、なかなか良かったです。scikit-learnでのディープラーニングを解説している本は、私が知る限り同書だけです。