グループ化/集約 Polars

グループ化/集約

Polarsの一つの強みは、大規模データセットを高速に処理する能力です。

その最適化された処理エンジンのおかげで、大量のデータを即座に変換整理したり、集計することが容易となり、パフォーマンスを大いに向上させます。

また、シンプルで明確なAPIPolarsの大きな魅力の一つです。

これにより、ユーザーはpandasのような一般的なデータ分析ライブラリと同様のユーザビリティを享受しながら、より大きなデータ量を扱うことができます。

以下に、Polarsを使ったデータのグループ化集約のサンプルコードを示します。

1
2
3
4
5
6
7
8
9
10
11
12
13
import polars as pl

# データフレームの作成
df = pl.DataFrame({
"fruits": ["apple", "banana", "banana", "apple", "apple", "banana", "banana", "apple"],
"sales": [5, 6, 8, 9, 5, 6, 7, 9],
"city": ["Tokyo", "Tokyo", "Tokyo", "London", "London", "London", "New York", "New York"]
})

# 都市ごと、果物ごとの総売上を計算
df_grouped = df.groupby(["city", "fruits"]).agg([pl.col("sales").sum().alias("total_sales")])

print(df_grouped)

上記のコードは、都市ごとに果物の売上合計を計算するシンプルな例です。

都市と果物ごとにグループ化し、各グループの“sales”列の合計を計算します。

[実行結果]

shape: (6, 3)
┌──────────┬────────┬─────────────┐
│ city     ┆ fruits ┆ total_sales │
│ ---      ┆ ---    ┆ ---         │
│ str      ┆ str    ┆ i64         │
╞══════════╪════════╪═════════════╡
│ Tokyo    ┆ apple  ┆ 5           │
│ Tokyo    ┆ banana ┆ 14          │
│ New York ┆ banana ┆ 7           │
│ London   ┆ apple  ┆ 14          │
│ London   ┆ banana ┆ 6           │
│ New York ┆ apple  ┆ 9           │
└──────────┴────────┴─────────────┘

shape: (6, 3) はこのデータフレームが6行3列であることを示しています。
列は city、fruits、そして total_sales となります。

それぞれの行を見てみましょう:

  • 1行目:
    東京でのリンゴの総売上は5と計算されています。
  • 2行目:
    東京でのバナナの総売上は14と計算されています。
  • 3行目:
    ニューヨークでのバナナの総売上は7と計算されています。
  • 4行目:
    ロンドンでのリンゴの総売上は14と計算されています。
  • 5行目:
    ロンドンでのバナナの総売上は6と計算されています。
  • 6行目:
    ニューヨークでのリンゴの総売上は9と計算されています。

これにより、各都市で各フルーツの総販売量を直観的に理解することができます。

このようなデータの表示は、日々の販売活動の理解や、将来的な販売戦略の策定に非常に有用です。

フルーツの種類と都市に基づいてデータを分析することで、どの商品がどの市場でよく売れているのか洞察を得ることが可能です。