はじめに
aggregate関数が、脱・初学者のカギを握っているのではないかと思って、とりあえず実装してみた。
やりたいこと
aggregate関数を使いこなして、スマートなコーディングをしたい
基本
aggregate関数とは
複数の処理を一度に処理できる関数
イメージ
あるデータの、
平均も知りたい、
中央値も知りたい、
標準偏差も知りたい、
ってときに、
aggregate関数を使えば、
一気に3つの処理ができる!のではないかと期待。
実装
いざ、実装!
まずは、スモールスタート。
こんな感じのDataframeを用意。
コード
df = pd.DataFrame({'X': [0, 1, 2], 'Y': [3, 4, 5]})
df
次に、各列の合計、平均、最大値、最小値を知りたい。
それぞれ変数を作って計算
# 合計
X_sum = sum(df['X'])
Y_sum = sum(df['Y'])
# 平均
X_mean = sum(df['X']) / len(df['X'])
Y_mean = sum(df['Y']) / len(df['Y'])
# 最大値
X_max = df['X'].max()
Y_max = df['Y'].max()
# 最小値
X_min = df['X'].min()
Y_min = df['Y'].min()
print(X_sum)
print(Y_sum)
print(X_mean)
print(Y_mean)
print(X_max)
print(Y_max)
print(X_min)
print(Y_min)
いやいや、だるすぎでしょ。。。
aggregate関数を使って
print(df.aggregate(['sum', 'mean', 'max', 'min']))
まじ、一瞬!さっき8行もかかっていたのに・・・(print実行除いて)
これは、使える!いや、使いこなしたい!!
応用
ということで、たびたび登場の実現損益履歴を使って、aggregateの応用!
このデータの実現損益列の、合計、平均、最大値、最小値、標準偏差、分散を算出する!
コード
# データの読み込み
df = pd.read_csv('realized_pl.csv', encoding='shift-JIS')
# 目的の列のデータ型を変換
df['実現損益[円]'].astype(str)
df['実現損益[円]'] = df['実現損益[円]'].str.replace('(' , '-').str.replace(')' , '').astype(int)
# 目的の列を変数に代入
pl = df['実現損益[円]']
# Agg関数を使って、処理を行う
agg_pl = pl.agg(['sum', 'mean', 'max', 'min', 'std', 'var'])
# 得られた値をInt型に変換して、Dataframeを作成
int_agg_pl = agg_pl.astype(int)
pd.DataFrame(int_agg_pl)
# Dataframeを表示
print(int_agg_pl)
出力結果
おわりに
応用編では、処理ができるようにデータ型の変換とかをしたせいで、まあまあなコード量になって、あんまりスマートな実装はお見せできなかったが、実際の算術処理はaggregate関数でスマートにできたと思うので、良しとする!
これまで、処理ごとに変数を定義して、いちいち組み込み関数で処理を実行していたが、aggregate関数があれば、一発で完結して、少しだけ脱・初学者した気分!
今後も自信をもって、aggregateを使って美しいコーディングを目指していきたい。