昨年こんな記事を書きましたが、もっといいやり方があったのでupdateします。
0. 使うもの
JupySQLとDuckDBを使う。
JupySQLは以前紹介したipython-sqlと似たようなライブラリだが、現在あまり更新されていないipython-sqlに対して、(i) バグを修正し、(ii) 機能を追加しているものである。基本的な使い方はipython-sqlと変わらない。
DuckDBはSQLiteのOLAP版という立ち位置らしい。お手軽に使え、分析用途に強いDBだと理解している1。
ということで、実際に簡単に使う方法を見ていく。
1. 諸々準備
!pip install jupysql duckdb-engine
# データ(csvファイル)のダウンロード
!wget https://raw.githubusercontent.com/mwaskom/seaborn-data/master/penguins.csv
使用するライブラリをインストールし、データをダウンロードする。今回はpalmerpenguinsのデータを使う2。
# エクステンションを読み込む
%load_ext sql
# DuckDBのインメモリのDBに接続する
%sql duckdb://
エクステンションを読み込むと、%sql
を付けた行でSQLを実行できるようになる。まずDuckDBのインメモリのDBに接続する。
2. クエリの実行
%%sql
SELECT
*
FROM
penguins.csv
LIMIT 3;
%%sql
コマンドを頭に付けたセルではSQLを実行できる。なお、DuckDBは直接csvに対してクエリを実行できる。
また、クエリの結果は _
に格納されており、 print(_)
で下のような整形された表が出力される。
3. pandasへの変換
%%sql result <<
SELECT
*
FROM
penguins.csv
LIMIT 4;
%%sql variable_name <<
から始めると、結果を変数に格納できる。 それをpandas.DataFrameに変換するには、 .DataFrame()
とするだけ。
result.DataFrame()
4. csvからテーブルを作成
%%sql
CREATE OR REPLACE TABLE penguins AS
SELECT *
FROM 'penguins.csv';
ここのDuckDBだと簡単。
インメモリでなくファイルに残したいのであれば、以下を先に実行しておく(example.dbがファイル名)。
%sql duckdb:///example.db
最後に
コードはコチラに置いてるので、そのままcolab立ち上げて触ってみたい方はぜひどうぞ!
2023年はPolarsとDuckDBとPRQLが流行ると思ってます3。使い倒していきたいものです。DuckDB最高!
-
正直あまりDuckDBについてはちゃんと理解できてないのだが、日本語でも沢山の記事があるのでそれらを見て頂きたい。たとえばこちらなど → https://zenn.dev/notrogue/articles/1193d0ab8d8eda ↩
-
既に流行ってるという説もあります。 ↩