【Python_pandas vs R_dplyr vs Julia_DataFramesMeta】3つの言語でのパイプ演算子を使ったデータ処理における対応表

Julia
LINEで送る
Pocket

はじめに

こんにちは。
最近はデータサイエンス100本ノックに少しずつ取り組んでいます。このデータサイエンス100本ノックは、なんとなく名前から推測できるかもしれませんが、データサイエンスにおけるデータの加工についての演習問題が100問出されます。これを解いていくことで、データサイエンスにおけるデータの加工により慣れていくというわけです。ちなみに演習で回答がある言語はPythonとR、SQLとなっています。親切にもJuliaで解いてくださっている方もおり、解答例を公開してくださっています。

さて、その中で僕はPythonとRとJuliaを使って少しずつ進めているのですが、なんとなくそれぞれの言語の癖みたいなのがあって、言語によって行いやすい処理などがあります。特にこの100本ノックにおけるデータ加工においては、Rのdplyrで行うのが行いやすいなーというのが著者の所感です。というのも、パイプ演算子(%>%)を使って書くとスマートで見やすく、自分の中でも何を書いているのか迷わないというのが理由です。

そこで今回は、このRのdplyrにおけるパイプ演算子の様に各言語でも
処理できないかと色々調べたところ、Pythonではpandasにおいて擬似的にパイプ演算子を実現できたり、JuliaではDataFramesMeta.jlを使うことで、同じ様に表現できることがわかったので、これらを対応表にまとめたいと思います。

対応表

以下にPython_pandasとR_dplyrとJulia_DataFramesMetaの対応表をまとめます。それぞれの項目において他にも方法がある場合もありますが、とりあえず代表的なものを一つ挙げています。

Python pandasR dplyrJulia DataFramesMeta
パイプ.\(擬似的)%>%|>
列選択filterselectselect
行選択queryfilterwhere
並び替えsort_valuesarrangeorderby
集計aggsummarisecombine
グループ化groupbygroup_bygroupby
列追加evalmutatetransform
列名変更renamerenamerename

pandasにおけるパイプに関しては、.\(擬似的)としています。これは処理をつなぐ.と改行である\を使うことで、擬似的にパイプのように見せることが可能です。この方法以外にも、dfplyを使ったりといった方法もあるようです。

コード例

以下にこれらを使った操作の例を記載していきます。

データセット

Python pandas

import pandas as pd
df = pd.DataFrame({'x':[1, 1, 2, 2], 'y':[5, 6, 7, 8]})

R dplyr

library(tidyverse)
df <- tibble(a=c(1, 1, 2, 2), b=c(5, 6, 7, 8))

Julia DataFramesMeta

using DataFrames
df = DataFrame(x = [1, 1, 2, 2], y = [5, 6, 7, 8])

それぞれ以下のようなデータフレームを取得できます。

ab
15
16
27
28

これを使用します。

コード例

Python pandas

df2 = df.\
    eval("c = a * b").\ #列追加
    eval("d = a + b").\ #列追加
    filter(items = ["a", "c", "d"]).\ #列選択
    query("c > 10").\ #行選択
    sort_values("d", ascending = False) #並び替え(降順)

R dplyr

df2 <- df %>%
    mutate(c = a * b, d = a + b) %>% #列追加
    select(a, c, d) %>% #列選択
    filter(c > 10) %>% #行選択
    arrange(desc(d)) #並び替え(降順)

Julia DataFramesMeta

df2 = @linq df |> #@linqをつけることで続けて処理可能に
    transform(c = :a .* :b, d = :a + :b) |> #列追加
    select(:a, :c, :d) |> #列選択
    where(:c .> 10)|> #行選択
    orderby(-:d) #並び替え(降順)

実行すると、それぞれ以下のようにデータフレームが取得できます。

acd
21610
2149

pythonの特徴としては、引数を""(ダブルクォーテーションもしくはクォーテーション)で囲みます。

Rは全体的にスッキリした書き方ができる印象です。

juliaは一番初めに@linqをつけて始めます。

まとめ

今回は、Pythonのpandas と Rのdplyr と JuliaのDataFramesMetaそれぞれのデータ処理においてパイプ演算子を使う方法とその対応表を簡単にまとめました。

それぞれ同じように記述ができるので、それぞれの言語を行き来する時のために覚えておくと便利だなと感じました。
今回はここまでです。

参考サイト

python pandas と R tidyverseの比較
dplyr使いのためのpandas 基本編
dplyr のアレを Pandas でやる
DataFramesMeta.jl
R & Python Rosetta Stone: EDA with dplyr vs pandas
dplyr使いのためのpandas dfplyすごい編
DataFramesMeta.jl

LINEで送る
Pocket

コメント

タイトルとURLをコピーしました