こんにちは,shun(@datasciencemore)です!
今回は,メソッドチェーンについてやっていきます.
メソッドチェーンを利用するときれいなコードを書くことができます.
0.メソッドチェーンってなに??

メソッドチェーンとは,メソッドを重ね合わせることでデータフレームを連続して処理することだよ!!
メソッドチェーンを使用することで可読性と保守性が高いきれいなコードを書くことができるんだ!!
以前に学習したようにデータ分析では,頻繁にデータフレームを色々な形に加工していきます.

このような処理をする場合,メソッドチェーンを利用するのが便利です.
メソッドチェーンとは,言葉のとおり,メソッドを鎖のように繋いでいくことでデータフレームを次々と処理していく手法のことです.

このようにデータフレームのあとにカンマを打ってメソッドをつなぎ合わせていきます.
このメソッドはデータフレームに対して実施する何かしらの処理のことだと考えてください.
例えば,あるデータフレームに対して,
①列の更新
②行の抽出
という処理を考えてみましょう.
そのような場合,まずdfに対しカンマを打ち,そのあとに
①列の更新をするメソッドを書き,そのあとにカンマを打ち,そのあとに
②行の抽出をするメソッドを書きます.
このようにデータフレームを連続して変形していく処理をする場合,メソッドチェーンを利用するのが便利です.
メソッドチェーン以外に再帰代入を繰り返すという方法もあるのですが,メソッドチェーンをオススメします.
1.メソッドチェーンと再帰代入
再帰代入というのは,データフレームを何かしらの方法で変形した後,そのデータフレームを既存のデータフレームを格納している変数に代入することを示しています.
なぜ再帰代入ではなくて,メソッドチェーンがオススメなのでしょうか?
両者の違いを比較するため,同じ処理をメソッドチェーンと再帰代入でコーディングしてみることにしましょう.
先程と同様,
①列の更新
②行の抽出
という処理について考えてみましょう.
メソッドチェーンと再帰代入についてコーディングした結果がこちらになります.
1 2 3 4 5 6 7 8 9 10 |
# パッケージ読み込み import numpy as np import polars as pl import seaborn as sns # データフレームの表示行数を指定 pl.Config.set_tbl_rows(5) # データ読み込み df = pl.from_pandas(sns.load_dataset('iris')) |
1 |
df_rev = df.with_columns(sepal_length = (pl.col("sepal_length") + pl.col("sepal_width"))).filter(pl.col("sepal_length") > 8) |
1 2 |
df = df.with_columns(sepal_length = pl.col("sepal_length") + pl.col("sepal_width")) df_rev = df.filter(pl.col("sepal_length") > 8) |
どちらもぱっと見,そんなに違いはなさそうです.
再帰代入の何が良くないでしょうか?
2.再帰代入のデメリット
再帰代入の良くない点は,再帰代入の処理を繰り返し実施すると結果が変わってしまうことがあるという点です.
この例のように同じ処理をしているのに,1回目の処理結果と2回目の処理結果が異なっています.

この原因は,dfが書き変わっていることにあります.
データ分析では,コードを一回書いて終わるということはまずなく,コードを何回も繰り返し見直す必要があります.
その過程でコードを何度も実行したり修正したりするのですが,その時にこの例のように再帰代入でコーディングしていると
同じ処理を繰り返したときに,間違った結果を得てしまう可能性があるのです.
もちろん,絶対に上からコードを実行するなど,工夫すればそのようなミスを防ぐことはできますが,無駄なミスを少なくするという観点で
再帰代入はできるだけしないようにしましょう.
再帰代入のデメリットは他にもありまして,それは
コードが冗長となって可読性が落ちるという点です.
ちなみに再帰代入のメリットもありまして,それは
メモリ効率がいいという点です.
なので再帰代入が必ずしも悪いというわけではないです.
ただ僕がデータ分析のお仕事をやるという職業柄,再帰代入よりもメソッドチェーンをオススメします!!
3.メソッドチェーンの改行
メソッドチェーンをそのまま使用すると処理内容が長くなって,コードが見づらくなる場合があります.
そのような場合は¥(円マーク)もしくは\(バックスラッシュ)で改行することができます.

1 2 3 4 5 6 7 |
# データ読み込み df = pl.from_pandas(sns.load_dataset('iris')) # \をつけると改行できる df\ .with_columns(sepal_length = (pl.col("sepal_length") + pl.col("sepal_width")))\ .filter(pl.col("sepal_length") > 8) |
ちなみにこちらはメソッドチェーンだからというよりもPythonの仕様になります.
こちらについては好みで使い分けていただければと思います.
まとめ
今回はメソッドチェーンについて学習しました.
データフレームを変形していくには,主にメソッドチェーンと再帰代入の2つの方法がありますが,メソッドチェーンのほうがオススメです.
メソッドチェーンを使用すると可読性と保守性の高いコードを作成することが出来るので,できるだけメソッドチェーンを使用するようにしましょう!
それでは,お疲れさまでした!!