2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PolarsAdvent Calendar 2024

Day 23

Polarsでよく使われているエクスプレッション

Posted at

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 は最大値を計算するために使用します。
minstdなど統計量を求めるエクスプレッションも meanmaxと同じくらい使う気がします。

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にバイアスがかかっている可能性も考えられます。

最後に

本当は、よく使われているエクスプレッションを抽出して、逆に全く使われていないエクスプレッションを洗い出そうとしたのですが、使われていないエクスプレッションが多すぎて断念しました。機会があればチャレンジします。

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?