4月20日、Posit(旧RStudio)が「ggsql: A grammar of graphics for SQL」と題した記事を公開した。
SQLだけで本格的な統計グラフが描ける時代の到来
VISUALIZE bill_len AS x, bill_dep AS y FROM ggsql:penguins
DRAW point
この2行のSQLコードが、R言語のggplot2と同等の散布図を生成する。ggsqlは、SQLの構文でggplot2のような高度な可視化を実現する革新的なライブラリのアルファ版がリリースされた。
従来、データ可視化といえばR/Pythonが定番だったが、SQLメインで作業するデータアナリストにとって、新しい言語を習得するハードルは高い。ggsqlはこの問題を解決し、SQLユーザーが慣れ親しんだ構文で本格的な統計グラフを作成できる環境を提供する。
Grammar of Graphicsがなぜ今重要なのか
Grammar of Graphicsは、グラフィックスを構造化して記述する理論的フレームワークで、R言語のggplot2パッケージで広く普及した。「データ」「マッピング」「レイヤー」「スケール」といった要素を組み合わせることで、複雑な可視化を論理的に構築できる。
近年、AIやビッグデータ分野でデータ可視化の重要性が増す中、SQLユーザーからも「R/Pythonを学ばずに高度なグラフを作りたい」という声が高まっていた。ggsqlはまさにこのニーズに応える画期的なソリューションである。
SQLとGrammar of Graphicsの完璧な親和性
ggsqlの設計で注目すべきは、SQLとGrammar of Graphicsの哲学的な一致である。どちらも「宣言的で構成可能な操作」という共通の思想を持つ。
ggsqlでは以下の句を組み合わせて可視化を構築する:
- VISUALIZE: データマッピングの定義(ggplot2のaes()に相当)
- DRAW: データからのレイヤー描画(geom_point()等に相当)
- PLACE: アノテーション(注釈)の配置
- SCALE: データ値から視覚的表現への変換制御
- LABEL: タイトルやラベルの設定
複雑な例として、宇宙飛行士データを使った完全なvisualizationクエリも可能だ:
WITH astronauts AS (
SELECT * FROM 'astronauts.parquet'
QUALIFY ROW_NUMBER() OVER (
PARTITION BY name
ORDER BY mission_number DESC
) = 1
)
SELECT
*,
year_of_selection - year_of_birth AS age,
'Age at selection' AS category
FROM astronauts
UNION ALL
SELECT
*,
year_of_selection - year_of_birth AS age,
'Age at mission' AS category
FROM astronauts
VISUALIZE age AS x, category AS fill
DRAW histogram
SETTING binwidth => 1, position => 'identity'
PLACE rule
SETTING x => (34, 44), linetype => 'dotted'
SCALE fill TO accent
LABEL
title => 'How old are astronauts on their most recent mission?'
AIエージェント時代を見据えた設計
ggsqlが注目される理由の一つが、AIとの親和性の高さである。LLM(大規模言語モデル)はSQLに非常に長けており、ChatGPTやClaude等のAIアシスタントがggsqlコードを生成することで、自然言語からの可視化生成が容易になる。
また、小さな実行ファイルとして動作するため、AIエージェントやレポーティングツールへの組み込みも簡単だ。R/Pythonの重い環境を必要とせず、サンドボックス化も容易になる。
18年間のggplot2の知見を継承
ggplot2は2008年にリリースされて以来、18年間R言語エコシステムで支配的な地位を維持してきた。その成功要因である「構造化され、構成可能で、自己記述的」な特性をggsqlは継承している。
現在、ggsqlはQuarto、Jupyter notebooks、Positron、VS Codeなどで利用可能である。SQLユーザーにとって、データ可視化の新たな選択肢として大きな可能性を秘めている。
詳細はggsql: A grammar of graphics for SQLを参照していただきたい。