LoginSignup
50
57

More than 5 years have passed since last update.

Pythonでのデータ操作 - Pandas_plyrを使ってみる

Last updated at Posted at 2015-09-19

一般的なPandasでのデータ操作方法

以前こんな記事を書きました

◆ Python Pandasでのデータ操作の初歩まとめ メソッド一覧表
http://qiita.com/hik0107/items/d991cc44c2d1778bb82e

Pandasでデータを操作する場合には上記のようなやり方が一般的なのですが、
ややコードが冗長になったり、可読性が低いと感じる時があります。

そんな方のために「pandas_ply」というパッケージを紹介します。
RのDplyrに似た記法でデータを扱えるため、Dplyrを使ったことがある人には特におススメです。
※ まさにPandas版のDplyrという感じです。

使ったことが無い方でも、ネイティブのPandasより使いやすいと思いますので、
是非試してみてください。

Pandas_plyを使いはじめる

◆pandas_plyパッケージ
https://pypi.python.org/pypi/pandas-ply

pandas_plyをインストールします

pip install pandas_ply

パッケージの準備

setup.py
import pandas as pd
from pandas_ply import install_ply, X, sym_call

install_ply(pd)

pandasを呼び出し、そのあとにpandas_plyからinstall_plyをおこなうと、
pandas_plyのメソッドがpandasに付与される仕様になっています

これで準備完了です。

 実際に使ってみる

詳しい使い方はこちら(英語)
http://pythonhosted.org/pandas-ply/

データはこちらを使ってみます。Kaggleで有名なデータですね。
titanic - train.csv
https://www.kaggle.com/c/titanic/data

load.py
csv_path = "/files_dir/train.csv" ##csvファイルの場所を指定
data = pd.read_csv(csv_path, delimiter=",")

##データを簡単に確認 : 新しいデータセットの場合は必須ですね
print data.head(10)
print data.shape
data.describe()
print data.columns

データの選択 ply_select

カラムへのアクセスは "column_name" もしくは X.column_nameで行うことが出来ます。
また、新しいカラムの作成(Dplyrでいうところのmutate的な使い方)

select.py
data.ply_select("Name", "Age",
                gender = X.Sex,  ## カラム名を変更できる
                is_adult = (X.Age >= 20)  ## 新しいカラムを定義することも可能になる
                )

データの選択 ply_where

特定の条件を満たすデータだけをサブセッティングしたい時にはply_whereを使う

where.py
data.ply_where(X.Age>10, 
               X.Sex == "male",
               X.Embarked == "S"
               )  #全ての条件にAndで満たすデータだけが選択される

これと同じことをPandasのネイティブな方法で書く場合には下記のようになります。

where_equivalent.py
data.query(" Age>10 & Sex=='male' & Embarked == 'S' ") 
##文字列が入り乱れてやや紛らわしい

data.ix[(data.Age>10) & (data.Sex =='male') & (data.Embarked=='S')] 
##df名を何度も書く必要がある

個々の好みはあると思いますが、pandas_plyだと割りと可読性高くかけると思います。

フラグの追加 - この場合はapplyを使ったほうがいいかも

上記で新しいカラムの追加(ply_select)の方法を書きましたが、
新しいカラムを複雑な条件で生成したい場合などには、素直にPandasのapplyメソッドを使ったほうが
よいかもしれません。

例えば上記データで年齢と性別を使って新たな属性を "demographic"というカラムに追加したい場合は
下記のようにかけます。
新カラムの生成条件が関数として見やすく残るので安心

apply.py
def add_demographic(data_input):
    if data_input.Age >=20:
        demo = "adut_m" if data_input.Sex == "male" else "adult_f"
    else:
        demo = "boy_and_girl"

    return demo

data.ix[ : , "Demographic"] = data.apply(add_demographic, axis=1)

終わりに

pandas_plyはまだまだ開発途中のパッケージのようですので、ご利用は計画的に。
あまり情報が多くないパッケージですので、詳しい方いたら是非コメント下さい。

50
57
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
50
57