Ibis

import ibis

import ibis.selectors as s


ibis.options.interactive = True


t = ibis.examples.penguins.fetch()

t.head(3)


(

    t.filter(ibis._["body_mass_g"] != None)

    .group_by(["species", "island"])

    .aggregate(count=ibis._.count())

    .order_by(ibis.desc("count"))

)


import matplotlib.pyplot as plt


chart = grouped.to_pandas().plot.bar(

    x="species",

    y="count",

    figsize=(600 / 100, 400 / 100),

)

plt.show()


import ibis.selectors as s



def transform(t):

    t = t.mutate(

        s.across(s.numeric(), {"zscore": lambda x: (x - x.mean()) / x.std()})

    ).dropna()

    return t



f = transform(t.drop("year"))

f.select("species", "island", s.contains("zscore"))

import ibis

t = ibis.examples.penguins.fetch()

con = ibis.duckdb.connect("penguins.ddb")

con.create_table("penguins", t.to_pyarrow(), overwrite=True)

t = con.table("penguins")

t.head(3)

t.to_parquet("penguins.parquet")

ibis.read_parquet("penguins.parquet").head(3)

df = t.to_pandas()


import polars as pl

df = pl.from_arrow(t.to_pyarrow())

dialect = "snowflake"

sql = ibis.to_sql(

    grouped,

    dialect=dialect,

)

sql