改訂新版 前処理大全5章 抽出 with r-polars

R
Polars
Author

statditto

Published

June 5, 2024

はじめに

前処理大全5章をRのPolarsを利用して進めていきます。書籍と公式ドキュメントを参照しながら進めていきます。パッケージのインストール周りは前回の記事に記載してあります。

勝手に宣伝してしまいますが、『改訂新版前処理大全』のR言語(Tidyverse)版サンプルコードというRユーザーが欲していたものをボブさんが執筆してくださっています。併せて読むと良さそうです。

library(polars)

抽出

列名指定による列の選択

path <- '../../data/reservation.parquet'

df <- pl$read_parquet(path)
インデックスで選択
df[,c(1, 2, 3, 5, 6)]
不要な列を選択して削除
df$drop("reserved_at","length_of_stay", "people_num", "total_price", "status", "canceled_at")
必要な列を選択
df$select("reservation_id","hotel_id", "customer_id", "checkin_date", "checkout_date")
shape: (2_000_000, 5)
┌────────────────┬──────────┬─────────────┬──────────────────────────┬──────────────────────────┐
│ reservation_id ┆ hotel_id ┆ customer_id ┆ checkin_date             ┆ checkout_date            │
│ ---            ┆ ---      ┆ ---         ┆ ---                      ┆ ---                      │
│ i64            ┆ i64      ┆ i64         ┆ datetime[ns, Asia/Tokyo] ┆ datetime[ns, Asia/Tokyo] │
╞════════════════╪══════════╪═════════════╪══════════════════════════╪══════════════════════════╡
│ 1              ┆ 2460     ┆ 53431       ┆ 2014-12-31 00:00:00 JST  ┆ 2015-01-03 00:00:00 JST  │
│ 2              ┆ 962      ┆ 488390      ┆ 2014-12-31 00:00:00 JST  ┆ 2015-01-02 00:00:00 JST  │
│ 3              ┆ 558      ┆ 341335      ┆ 2014-12-31 00:00:00 JST  ┆ 2015-01-01 00:00:00 JST  │
│ 4              ┆ 3666     ┆ 398981      ┆ 2014-12-31 00:00:00 JST  ┆ 2015-01-01 00:00:00 JST  │
│ 5              ┆ 2180     ┆ 220381      ┆ 2014-12-31 00:00:00 JST  ┆ 2015-01-01 00:00:00 JST  │
│ …              ┆ …        ┆ …           ┆ …                        ┆ …                        │
│ 1999996        ┆ 2357     ┆ 280303      ┆ 2019-12-29 00:00:00 JST  ┆ 2019-12-30 00:00:00 JST  │
│ 1999997        ┆ 319      ┆ 499387      ┆ 2019-12-29 00:00:00 JST  ┆ 2019-12-30 00:00:00 JST  │
│ 1999998        ┆ 2834     ┆ 461799      ┆ 2019-12-30 00:00:00 JST  ┆ 2019-12-31 00:00:00 JST  │
│ 1999999        ┆ 3643     ┆ 163568      ┆ 2019-12-30 00:00:00 JST  ┆ 2019-12-31 00:00:00 JST  │
│ 2000000        ┆ 820      ┆ 449765      ┆ 2019-12-30 00:00:00 JST  ┆ 2019-12-31 00:00:00 JST  │
└────────────────┴──────────┴─────────────┴──────────────────────────┴──────────────────────────┘

蛇足ですが次のコードが想定と異なる挙動だったので驚きました。仕様らしい1です。

df$select(c(1, 2, 3, 5, 6))
shape: (5, 1)
┌─────┐
│     │
│ --- │
│ f64 │
╞═════╡
│ 1.0 │
│ 2.0 │
│ 3.0 │
│ 5.0 │
│ 6.0 │
└─────┘

条件指定による列の抽出

path <- '../../data/hotel.parquet'

df <- pl$read_parquet(path)

tagから始まる列名の列を抽出

列名を列挙して選択
df$select('tag_001', ... ,'tag_030')
正規表現を利用した列の選択
df$select(pl$col('^tag_.*$'))
shape: (5_000, 30)
┌─────────┬─────────┬─────────┬─────────┬───┬─────────┬─────────┬─────────┬─────────┐
│ tag_001 ┆ tag_002 ┆ tag_003 ┆ tag_004 ┆ … ┆ tag_027 ┆ tag_028 ┆ tag_029 ┆ tag_030 │
│ ---     ┆ ---     ┆ ---     ┆ ---     ┆   ┆ ---     ┆ ---     ┆ ---     ┆ ---     │
│ i64     ┆ i64     ┆ i64     ┆ i64     ┆   ┆ i64     ┆ i64     ┆ i64     ┆ i64     │
╞═════════╪═════════╪═════════╪═════════╪═══╪═════════╪═════════╪═════════╪═════════╡
│ 0       ┆ 0       ┆ 0       ┆ 0       ┆ … ┆ 0       ┆ 0       ┆ 0       ┆ 0       │
│ 0       ┆ 0       ┆ 0       ┆ null    ┆ … ┆ 0       ┆ 0       ┆ 0       ┆ 0       │
│ null    ┆ 1       ┆ 0       ┆ 0       ┆ … ┆ 0       ┆ 0       ┆ 0       ┆ 0       │
│ 0       ┆ 0       ┆ 0       ┆ 1       ┆ … ┆ 0       ┆ 0       ┆ 1       ┆ 0       │
│ 0       ┆ 0       ┆ 0       ┆ 1       ┆ … ┆ 1       ┆ 1       ┆ 0       ┆ 0       │
│ …       ┆ …       ┆ …       ┆ …       ┆ … ┆ …       ┆ …       ┆ …       ┆ …       │
│ 0       ┆ null    ┆ 0       ┆ 0       ┆ … ┆ null    ┆ 0       ┆ 1       ┆ 0       │
│ null    ┆ 0       ┆ 0       ┆ 0       ┆ … ┆ 1       ┆ 0       ┆ 0       ┆ 0       │
│ 0       ┆ 0       ┆ 1       ┆ 0       ┆ … ┆ 0       ┆ 0       ┆ null    ┆ 1       │
│ null    ┆ 1       ┆ 0       ┆ 0       ┆ … ┆ 0       ┆ 0       ┆ null    ┆ 0       │
│ 0       ┆ 0       ┆ 0       ┆ 0       ┆ … ┆ 0       ┆ null    ┆ 1       ┆ 0       │
└─────────┴─────────┴─────────┴─────────┴───┴─────────┴─────────┴─────────┴─────────┘

欠損のある列の抽出

path <- '../../data/customer.parquet'

df <- pl$read_parquet(path)
列の情報を確認して選択
df$describe()

Polarsだけで奇麗に書く方法が思いつかなかったため、微妙なコードです。PythonのPolarsには行をSeriesで取得するrow関数があったのですが、現時点でRには実装されていませんでした。いい感じに美しい例が思いついた方はぜひ教えて下さい!

cols <- df$select(pl$all()$is_null()$any())$
  melt(value_name = 'has_null')$
  filter(pl$col('has_null'))$
  get_column('variable') |>
  as.character()

df$select(cols)

数値型の列の抽出

path <- '../../data/reservation.parquet'

df <- pl$read_parquet(path)
列の情報を確認して選択
df$describe()
データ型を利用した列の選択
df$select(pl$col(pl$numeric_dtypes))
shape: (2_000_000, 6)
┌────────────────┬──────────┬─────────────┬────────────────┬────────────┬─────────────┐
│ reservation_id ┆ hotel_id ┆ customer_id ┆ length_of_stay ┆ people_num ┆ total_price │
│ ---            ┆ ---      ┆ ---         ┆ ---            ┆ ---        ┆ ---         │
│ i64            ┆ i64      ┆ i64         ┆ i32            ┆ i32        ┆ i32         │
╞════════════════╪══════════╪═════════════╪════════════════╪════════════╪═════════════╡
│ 1              ┆ 2460     ┆ 53431       ┆ 3              ┆ 2          ┆ 37800       │
│ 2              ┆ 962      ┆ 488390      ┆ 2              ┆ 3          ┆ 42000       │
│ 3              ┆ 558      ┆ 341335      ┆ 1              ┆ 2          ┆ 20400       │
│ 4              ┆ 3666     ┆ 398981      ┆ 1              ┆ 4          ┆ 39600       │
│ 5              ┆ 2180     ┆ 220381      ┆ 1              ┆ 3          ┆ 16500       │
│ …              ┆ …        ┆ …           ┆ …              ┆ …          ┆ …           │
│ 1999996        ┆ 2357     ┆ 280303      ┆ 1              ┆ 4          ┆ 26000       │
│ 1999997        ┆ 319      ┆ 499387      ┆ 1              ┆ 1          ┆ 7100        │
│ 1999998        ┆ 2834     ┆ 461799      ┆ 1              ┆ 5          ┆ 105000      │
│ 1999999        ┆ 3643     ┆ 163568      ┆ 1              ┆ 1          ┆ 17000       │
│ 2000000        ┆ 820      ┆ 449765      ┆ 1              ┆ 1          ┆ 7800        │
└────────────────┴──────────┴─────────────┴────────────────┴────────────┴─────────────┘

条件指定による行の抽出

宿泊人数が2~4人の予約履歴の抽出

path <- '../../data/reservation.parquet'

df <- pl$read_parquet(path)
範囲を指定して行を抽出
df$filter(pl$col('people_num')$is_between(2, 4))
shape: (1_199_977, 11)
┌────────────┬──────────┬───────────┬───────────┬───┬───────────┬───────────┬──────────┬───────────┐
│ reservatio ┆ hotel_id ┆ customer_ ┆ reserved_ ┆ … ┆ people_nu ┆ total_pri ┆ status   ┆ canceled_ │
│ n_id       ┆ ---      ┆ id        ┆ at        ┆   ┆ m         ┆ ce        ┆ ---      ┆ at        │
│ ---        ┆ i64      ┆ ---       ┆ ---       ┆   ┆ ---       ┆ ---       ┆ str      ┆ ---       │
│ i64        ┆          ┆ i64       ┆ datetime[ ┆   ┆ i32       ┆ i32       ┆          ┆ datetime[ │
│            ┆          ┆           ┆ ns, Asia/ ┆   ┆           ┆           ┆          ┆ ns, Asia/ │
│            ┆          ┆           ┆ Tokyo]    ┆   ┆           ┆           ┆          ┆ Tokyo]    │
╞════════════╪══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪══════════╪═══════════╡
│ 1          ┆ 2460     ┆ 53431     ┆ 2013-12-3 ┆ … ┆ 2         ┆ 37800     ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 1         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 07:00:14  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
│ 2          ┆ 962      ┆ 488390    ┆ 2013-12-3 ┆ … ┆ 3         ┆ 42000     ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 1         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 08:23:35  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
│ 3          ┆ 558      ┆ 341335    ┆ 2013-12-3 ┆ … ┆ 2         ┆ 20400     ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 1         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 09:02:05  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
│ 4          ┆ 3666     ┆ 398981    ┆ 2013-12-3 ┆ … ┆ 4         ┆ 39600     ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 1         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 23:44:54  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
│ 5          ┆ 2180     ┆ 220381    ┆ 2014-01-0 ┆ … ┆ 3         ┆ 16500     ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 1         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 02:47:50  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
│ …          ┆ …        ┆ …         ┆ …         ┆ … ┆ …         ┆ …         ┆ …        ┆ …         │
│ 1999990    ┆ 4850     ┆ 4121      ┆ 2019-12-2 ┆ … ┆ 2         ┆ 12200     ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 6         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 19:24:22  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
│ 1999991    ┆ 3655     ┆ 405333    ┆ 2019-12-2 ┆ … ┆ 4         ┆ 165600    ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 6         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 19:38:18  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
│ 1999993    ┆ 2988     ┆ 381053    ┆ 2019-12-2 ┆ … ┆ 4         ┆ 40800     ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 6         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 23:02:15  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
│ 1999995    ┆ 658      ┆ 445219    ┆ 2019-12-2 ┆ … ┆ 3         ┆ 18300     ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 7         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 06:47:33  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
│ 1999996    ┆ 2357     ┆ 280303    ┆ 2019-12-2 ┆ … ┆ 4         ┆ 26000     ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 7         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 12:14:07  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
└────────────┴──────────┴───────────┴───────────┴───┴───────────┴───────────┴──────────┴───────────┘

ランダムサンプリング

予約履歴から1%のデータをランダムサンプリングします。

path <- '../../data/reservation.parquet'

df <- pl$read_parquet(path)
先頭の20000行を抽出
df$head(20000)
ランダムサンプリング
df$sample(20000, seed = 42)
shape: (20_000, 11)
┌────────────┬──────────┬───────────┬───────────┬───┬───────────┬───────────┬──────────┬───────────┐
│ reservatio ┆ hotel_id ┆ customer_ ┆ reserved_ ┆ … ┆ people_nu ┆ total_pri ┆ status   ┆ canceled_ │
│ n_id       ┆ ---      ┆ id        ┆ at        ┆   ┆ m         ┆ ce        ┆ ---      ┆ at        │
│ ---        ┆ i64      ┆ ---       ┆ ---       ┆   ┆ ---       ┆ ---       ┆ str      ┆ ---       │
│ i64        ┆          ┆ i64       ┆ datetime[ ┆   ┆ i32       ┆ i32       ┆          ┆ datetime[ │
│            ┆          ┆           ┆ ns, Asia/ ┆   ┆           ┆           ┆          ┆ ns, Asia/ │
│            ┆          ┆           ┆ Tokyo]    ┆   ┆           ┆           ┆          ┆ Tokyo]    │
╞════════════╪══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪══════════╪═══════════╡
│ 318718     ┆ 2290     ┆ 193245    ┆ 2015-04-2 ┆ … ┆ 6         ┆ 124200    ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 2         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 20:41:32  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
│ 608492     ┆ 1841     ┆ 486974    ┆ 2016-01-1 ┆ … ┆ 6         ┆ 64200     ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 3         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 04:56:52  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
│ 591130     ┆ 3819     ┆ 55933     ┆ 2015-12-2 ┆ … ┆ 5         ┆ 42000     ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 8         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 10:15:43  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
│ 1457116    ┆ 3400     ┆ 76569     ┆ 2018-02-2 ┆ … ┆ 3         ┆ 64800     ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 6         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 03:56:39  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
│ 1078536    ┆ 3754     ┆ 147541    ┆ 2017-03-1 ┆ … ┆ 4         ┆ 18800     ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 7         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 15:41:47  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
│ …          ┆ …        ┆ …         ┆ …         ┆ … ┆ …         ┆ …         ┆ …        ┆ …         │
│ 430538     ┆ 4094     ┆ 7889      ┆ 2015-08-0 ┆ … ┆ 2         ┆ 26400     ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 3         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 09:08:08  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
│ 564215     ┆ 1502     ┆ 481695    ┆ 2015-12-0 ┆ … ┆ 5         ┆ 34000     ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 3         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 18:53:18  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
│ 1894498    ┆ 4609     ┆ 420910    ┆ 2019-04-1 ┆ … ┆ 5         ┆ 66000     ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 0         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 14:40:33  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
│ 149070     ┆ 3950     ┆ 393062    ┆ 2014-11-1 ┆ … ┆ 4         ┆ 48800     ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 7         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 01:23:30  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
│ 196972     ┆ 3580     ┆ 173856    ┆ 2015-01-0 ┆ … ┆ 5         ┆ 115000    ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 2         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 09:28:10  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
└────────────┴──────────┴───────────┴───────────┴───┴───────────┴───────────┴──────────┴───────────┘

不均衡データの調整

path <- '../../data/reservation.parquet'

df <- pl$read_parquet(path)
アンダーサンプリング
majority <- df$filter(pl$col('status') == 'reserved')
minority <- df$filter(pl$col('status') == 'canceled')

pl$concat(minority,
          majority$sample(nrow(minority)))
shape: (400_822, 11)
┌────────────┬──────────┬───────────┬───────────┬───┬───────────┬───────────┬──────────┬───────────┐
│ reservatio ┆ hotel_id ┆ customer_ ┆ reserved_ ┆ … ┆ people_nu ┆ total_pri ┆ status   ┆ canceled_ │
│ n_id       ┆ ---      ┆ id        ┆ at        ┆   ┆ m         ┆ ce        ┆ ---      ┆ at        │
│ ---        ┆ i64      ┆ ---       ┆ ---       ┆   ┆ ---       ┆ ---       ┆ str      ┆ ---       │
│ i64        ┆          ┆ i64       ┆ datetime[ ┆   ┆ i32       ┆ i32       ┆          ┆ datetime[ │
│            ┆          ┆           ┆ ns, Asia/ ┆   ┆           ┆           ┆          ┆ ns, Asia/ │
│            ┆          ┆           ┆ Tokyo]    ┆   ┆           ┆           ┆          ┆ Tokyo]    │
╞════════════╪══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪══════════╪═══════════╡
│ 12         ┆ 1649     ┆ 457529    ┆ 2014-01-0 ┆ … ┆ 4         ┆ 145200    ┆ canceled ┆ 2014-05-1 │
│            ┆          ┆           ┆ 2         ┆   ┆           ┆           ┆          ┆ 2         │
│            ┆          ┆           ┆ 00:57:10  ┆   ┆           ┆           ┆          ┆ 02:45:20  │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆ JST       │
│ 18         ┆ 2681     ┆ 158800    ┆ 2014-01-0 ┆ … ┆ 4         ┆ 50400     ┆ canceled ┆ 2014-10-3 │
│            ┆          ┆           ┆ 3         ┆   ┆           ┆           ┆          ┆ 0         │
│            ┆          ┆           ┆ 07:24:45  ┆   ┆           ┆           ┆          ┆ 13:45:51  │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆ JST       │
│ 28         ┆ 4843     ┆ 130891    ┆ 2014-01-0 ┆ … ┆ 1         ┆ 5300      ┆ canceled ┆ 2014-05-2 │
│            ┆          ┆           ┆ 4         ┆   ┆           ┆           ┆          ┆ 3         │
│            ┆          ┆           ┆ 16:21:42  ┆   ┆           ┆           ┆          ┆ 09:25:18  │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆ JST       │
│ 34         ┆ 301      ┆ 434094    ┆ 2014-01-0 ┆ … ┆ 5         ┆ 70000     ┆ canceled ┆ 2014-07-0 │
│            ┆          ┆           ┆ 5         ┆   ┆           ┆           ┆          ┆ 5         │
│            ┆          ┆           ┆ 12:22:22  ┆   ┆           ┆           ┆          ┆ 14:00:19  │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆ JST       │
│ 37         ┆ 2715     ┆ 307335    ┆ 2014-01-0 ┆ … ┆ 3         ┆ 45600     ┆ canceled ┆ 2014-01-2 │
│            ┆          ┆           ┆ 5         ┆   ┆           ┆           ┆          ┆ 2         │
│            ┆          ┆           ┆ 15:31:53  ┆   ┆           ┆           ┆          ┆ 20:08:21  │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆ JST       │
│ …          ┆ …        ┆ …         ┆ …         ┆ … ┆ …         ┆ …         ┆ …        ┆ …         │
│ 1922932    ┆ 3700     ┆ 284744    ┆ 2019-05-1 ┆ … ┆ 6         ┆ 33000     ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 5         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 14:20:14  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
│ 257522     ┆ 1055     ┆ 92862     ┆ 2015-02-2 ┆ … ┆ 4         ┆ 18800     ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 6         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 05:27:49  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
│ 1122818    ┆ 4898     ┆ 339213    ┆ 2017-04-2 ┆ … ┆ 2         ┆ 19000     ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 7         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 02:32:13  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
│ 696034     ┆ 1988     ┆ 360387    ┆ 2016-04-0 ┆ … ┆ 2         ┆ 9400      ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 2         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 05:56:28  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
│ 62676      ┆ 1130     ┆ 429000    ┆ 2014-08-0 ┆ … ┆ 2         ┆ 19800     ┆ reserved ┆ null      │
│            ┆          ┆           ┆ 8         ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ 02:32:36  ┆   ┆           ┆           ┆          ┆           │
│            ┆          ┆           ┆ JST       ┆   ┆           ┆           ┆          ┆           │
└────────────┴──────────┴───────────┴───────────┴───┴───────────┴───────────┴──────────┴───────────┘

おわりに

列指向のパッケージなのでdplyrと同じノリで書くことが出来てうれしいですね。 Polarsは破壊的変更が頻繁に行われるそうなので、バージョンを明記しておきます。

polars_info()
Polars R package version : 0.16.4
Rust Polars crate version: 0.39.2

Thread pool size: 20 

Features:                               
default                    TRUE
full_features              TRUE
disable_limit_max_threads  TRUE
nightly                    TRUE
sql                        TRUE
rpolars_debug_print       FALSE

Code completion: deactivated