Polarsには多くのエクスプレッションが用意されていますが、その数は多く全部を覚えるのは大変ですよね。覚えるのであればよく使われているものから効率的に覚えたいです。
ということで、よく使われているエクスプレッションを調べてみました。
Kaggle notebookで「Polars」で検索して出てくるnotebook上位100件からエクスプレッションを集計しました。
構文解析で集計したかったですが、ちょっと面倒だったのでGPT-4oにnotebookを渡してエクスプレッションを抽出させました。
集計結果
さっそくですが集計結果のよく使われているエクスプレッションTOP5は以下の通りでした。(記事の最後にTOP100まで載せています。)
エクスプレッションを抽出するようにGPT-4oに指示してもwith_columnsなどのエクスプレッション以外も抽出してきていたので、GPT-4oの抽出結果を人力でフィルタしました。
1, col
2, alias
3, cast
4, mean
5, max
もうちょっと意外なエクスプレッションも上位に入ってくるかと思ったのですが、言われたらそりゃこのあたりが上位だよなという結果でした。
利用頻度上位エクスプレッション
ひとつづず使い方を見ていきます。
col
col
は「列を指定する」ためのエクスプレッションですね。
select()
や with_columns()
などの中で、どの列に対してどんな操作をするかを宣言する際によく使います。
df = pl.DataFrame({
"id": [1, 2, 3],
"name": ["Alice", "Bob", "Charlie"],
"age": [25, 30, 28]
})
# name列を選択
name_series = df.select(
pl.col("name")
)
alias
alias
は、エクスプレッションの結果に新しい名前(エイリアス)を付けるために使用するものですね。複雑な処理を行う際に、中間結果に分かりやすい名前を付けることで、コードの可読性を向上させることができます。
df.select(
pl.col("salary") * 1.1).alias("salary_with_bonus")
)
cast
cast は、カラムのデータ型を変換するために使用するものですね。例えば、整数型を浮動小数点数型に変換したりします。
# age を浮動小数点数型に変換
result = df.select(
pl.col("age").cast(pl.Float64)
)
mean, max
mean
は、カラムの平均値、max
は最大値を計算するために使用します。
min
、std
など統計量を求めるエクスプレッションも mean
、max
と同じくらい使う気がします。
result = df.select(
pl.col("age").mean().alias("age_mean"), # age の平均値を算出
pl.col("age").max().alias("age_max"), # age の最大値を算出
)
そのほか使われているもの
よく使われていたものTOP100は次の通りです。(エクスプレッション以外も含まれています。)
'col', 'alias', 'with_columns', 'cast', 'join', 'filter', 'group_by', 'mean', 'drop', 'duration', 'max', 'agg', 'rename', 'select', 'unique', 'map_elements', 'over', 'min', 'sqrt', 'dt', 'sum', 'concat', 'count', 'read_csv', 'last', 'sort', 'str', 'abs', 'apply', 'first', 'rolling_mean', 'sin', 'cos', 'is_not_null', 'explode', 'collect', 'transpose', 'read_parquet', 'to_pandas', 'quantile', 'std', 'from_pandas', 'lit', 'split', 'n_unique', 'pipe', 'fill_null', 'is_in', 'get_column', 'ewm_mean', 'groupby', 'Series', 'drop_nulls', 'rolling_std', 'concat_str', 'to_datetime', 'month', 'scan_parquet', 'to_numpy', 'kurtosis', 'median', 'len', 'replace', 'to_series', 'head', 'diff', 'year', 'lazy', 'hour', 'total_days', 'day', 'when', 'then', 'shift', 'strptime', 'value_counts', 'struct', 'weekday', 'sample', 'Float32', 'null_count', 'is_null', 'to_list', 'rolling_max', 'vstack', 'str.extract', 'suffix', 'describe', 'date', 'exclude', 'fill_nan', 'str.split', 'otherwise', 'on', 'how', 'reverse', 'DataFrame', 'log', 'write_csv', 'display'
さすがに、上位は見たことあるエクスプレッションばかりですが、ewm_mean
など私は使ったことないものもありました。
また、meanとstdは同じくらい使われている気がするのですが、順位に差がありました。
ここはGPT-4oの抽出が失敗していたり、人気のkaggle notebookはよくフォークされていたりするので、集計対象のnotebookにバイアスがかかっている可能性も考えられます。
最後に
本当は、よく使われているエクスプレッションを抽出して、逆に全く使われていないエクスプレッションを洗い出そうとしたのですが、使われていないエクスプレッションが多すぎて断念しました。機会があればチャレンジします。