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

Pandasとは

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

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

過去記事:AIエンジニアが教えるゼロから機械学習の勉強法

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.anaconda.com/distribution/アクセスします。Anaconda のダウンロードページから、Python 3.7 の 32 bit のインストーラをダウンロードします。
(※バージョンは3.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」を押し、インストーラを閉じます。

インストールの確認方法

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

Pandasの基本操作

PandasはSQLと同じような操作がPythonでできます。操作はとても直観的でわかりやすいです。
(本記事のサンプルコードはPython2.7です。Python3系環境の方は動作できません)

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データの読み込みと列の抽出です。後は忘れてしまっても調べればなんとかなります。

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

参考書籍:

【参考】機械学習エンジニアへの転職なら『マイナビIT AGENT』

マイナビ IT AGENT 」は、IT・ウェブ業界に特化した転職エージェントです。

1000名を超える営業体制を構築しており、最大手から優良ベンチャーまで15,000社を超える求人を保有しています。企業の採用責任者から定期的にヒアリングしており、離職率の高い企業や労働時間が長い企業など、職場環境や会社の雰囲気について情報収集している数少ない転職エージェントです。

ただし、関東と関西に案件が偏っているため、地方の方にはオススメできません。

また、職務経歴書や履歴書について丁寧なアドバイスをしてくれます。マイナビは、10年先のキャリアプランを考える方針で運営しており、他社の転職エージェントと比べ、利用者の満足度が極めて高いです。

20~30代のIT業界からAIエンジニアに転職されたい方におすすめです。


転職の体験談:転職エージェントにボコボコにされて未経験からAIエンジニアに転職した話