library(polars)
はじめに
前処理大全5章をRのPolarsを利用して進めていきます。書籍と公式ドキュメントを参照しながら進めていきます。パッケージのインストール周りは前回の記事に記載してあります。
勝手に宣伝してしまいますが、『改訂新版前処理大全』のR言語(Tidyverse)版サンプルコードというRユーザーが欲していたものをボブさんが執筆してくださっています。併せて読むと良さそうです。
抽出
列名指定による列の選択
<- '../../data/reservation.parquet'
path
<- 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") df
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です。
$select(c(1, 2, 3, 5, 6)) df
shape: (5, 1)
┌─────┐
│ │
│ --- │
│ f64 │
╞═════╡
│ 1.0 │
│ 2.0 │
│ 3.0 │
│ 5.0 │
│ 6.0 │
└─────┘
条件指定による列の抽出
<- '../../data/hotel.parquet'
path
<- pl$read_parquet(path) df
tag
から始まる列名の列を抽出
列名を列挙して選択
$select('tag_001', ... ,'tag_030') df
正規表現を利用した列の選択
$select(pl$col('^tag_.*$')) df
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 │
└─────────┴─────────┴─────────┴─────────┴───┴─────────┴─────────┴─────────┴─────────┘
欠損のある列の抽出
<- '../../data/customer.parquet'
path
<- pl$read_parquet(path) df
列の情報を確認して選択
$describe() df
Polarsだけで奇麗に書く方法が思いつかなかったため、微妙なコードです。PythonのPolarsには行をSeriesで取得するrow
関数があったのですが、現時点でRには実装されていませんでした。いい感じに美しい例が思いついた方はぜひ教えて下さい!
<- df$select(pl$all()$is_null()$any())$
cols melt(value_name = 'has_null')$
filter(pl$col('has_null'))$
get_column('variable') |>
as.character()
$select(cols) df
数値型の列の抽出
<- '../../data/reservation.parquet'
path
<- pl$read_parquet(path) df
列の情報を確認して選択
$describe() df
データ型を利用した列の選択
$select(pl$col(pl$numeric_dtypes)) df
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人の予約履歴の抽出
<- '../../data/reservation.parquet'
path
<- pl$read_parquet(path) df
範囲を指定して行を抽出
$filter(pl$col('people_num')$is_between(2, 4)) df
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%のデータをランダムサンプリングします。
<- '../../data/reservation.parquet'
path
<- pl$read_parquet(path) df
先頭の20000行を抽出
$head(20000) df
ランダムサンプリング
$sample(20000, seed = 42) df
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 ┆ ┆ ┆ ┆ ┆ │
└────────────┴──────────┴───────────┴───────────┴───┴───────────┴───────────┴──────────┴───────────┘
不均衡データの調整
<- '../../data/reservation.parquet'
path
<- pl$read_parquet(path) df
アンダーサンプリング
<- df$filter(pl$col('status') == 'reserved')
majority <- df$filter(pl$col('status') == 'canceled')
minority
$concat(minority,
pl$sample(nrow(minority))) majority
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