はじめに
先日仕事の用事でRAブートキャンプへ行ってきた。
RAブートキャンプの目的は以下。
社会科学領域の実証研究においてリサーチアシスタント(RA)として携わるための技能を学び、またお互いとの交流を深めることを目的としています。
ここでは経済学をはじめとしたさまざまな分野で実証分析をしている大学学部生・院生が集い、4泊5日でデータの処理や分析方法について学んでいる。
僕自身も2023年度に参加した経験があり、当時は力不足を痛感したものの、そこで得た知識をもとにその後もいろいろ学び、結果としてこのWebサイトを運営するまでに至っている。
ということでもしこれを見ている学生がいたら、是非次年度以降の参加をお勧めしたい。
というのはさておき、ここに参加する方々は皆さん大変豊富な知識を持っているので、今回も学生オーガナイザーの方から有益な情報を得ることができた(僕が時代遅れなだけの可能性大)。
それはPythonのPolarsというライブラリで、これがbase RとTidyverseのように、Pandasの次世代版のようなものらしい。Quartoドキュメントのレンダリングがめっちゃ速いのも特徴とのこと。
新しい物好きのミーハーな僕としては、是非とも触ってみたいと思い、今回勉強を兼ねてここで概要を見てみることにする。
Polarsとは
とりあえずPolarsの公式ページを覗いてみると、
Polarsは、データ操作のためのオープンソースライブラリであり、単一マシン上で最速のデータ処理ソリューションの一つとして知られています。表現力豊かで使いやすい、構造化された型付きAPIを備えています。
とのこと(Google翻訳済)。
ChatGPTにもPolarsについて説明してもらったところ、
Polarsは、Rust製で高速かつメモリ効率の良い列指向エンジンを持ち、遅延評価や宣言的なチェーン式APIにより、大規模データを直感的かつ効率的に処理できる次世代のデータフレームライブラリです。
らしい。
これだけ見ると速さや効率性が売りなようだが、言葉で説明されてもよくわからないので、とりあえず触ってみたい。
使ってみる
とりあえずインストールから始めよう。
そしたら公式のガイドに載っているサンプルコードをちょっといじって試してみる。
import polars as pl
q = (
pl.scan_csv("../../../data/iris.csv")
.filter(pl.col("Sepal.Length") > 5)
.group_by("Species")
.agg(pl.all().sum())
)
df = q.collect()
print(df)
shape: (3, 5)
┌────────────┬──────────────┬─────────────┬──────────────┬─────────────┐
│ Species ┆ Sepal.Length ┆ Sepal.Width ┆ Petal.Length ┆ Petal.Width │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ f64 ┆ f64 ┆ f64 ┆ f64 │
╞════════════╪══════════════╪═════════════╪══════════════╪═════════════╡
│ virginica ┆ 324.5 ┆ 146.2 ┆ 273.1 ┆ 99.6 │
│ setosa ┆ 116.9 ┆ 81.7 ┆ 33.2 ┆ 6.1 │
│ versicolor ┆ 281.9 ┆ 131.8 ┆ 202.9 ┆ 63.3 │
└────────────┴──────────────┴─────────────┴──────────────┴─────────────┘
しっかり出力できている。
ちなみにPandas版だとこんな感じ。
import pandas as pd
df = pd.read_csv("../../../data/iris.csv")
df_filtered = df[df["Sepal.Length"] > 5]
df_grouped = df_filtered.groupby("Species").sum(numeric_only=True).reset_index()
print(df_grouped)
Species Sepal.Length Sepal.Width Petal.Length Petal.Width
0 setosa 116.9 81.7 33.2 6.1
1 versicolor 281.9 131.8 202.9 63.3
2 virginica 324.5 146.2 273.1 99.6
僕はPythonがあまり使えないのでChatGPTにPandas版に変換してもらっただけなのだが、見た感じPolarsの方はRのパイプを使った書き方と似ており、個人的には使いやすそうに感じている。
また、出力結果が見やすくなっているのも特徴だろうか。Rのtibbleのように感じる。
時間もあまりないのでこの程度にしておくが、いろいろと試し甲斐がありそうなので、また時間があるときにでも触ってみたい。
おわりに
今回はそんなものがあるということを綴っただけなので細かい点はまだよくわかっていないが、使えそうな関数も結構あるみたいなので、データハンドリングの際には是非とも使ってみたい。
もう少し知識がたまってきたらtipsの方でも何か書いていこうと思う。