|
|
import marimo |
|
|
|
|
|
__generated_with = "0.18.4" |
|
|
app = marimo.App(width="full", app_title="🤩 Data") |
|
|
|
|
|
|
|
|
@app.cell |
|
|
def _(): |
|
|
from pathlib import Path |
|
|
import altair as alt |
|
|
import duckdb |
|
|
import marimo as mo |
|
|
import sys |
|
|
|
|
|
ROOT = Path(__file__).parent.parent |
|
|
sys.path.append(ROOT.as_posix()) |
|
|
return ROOT, alt, duckdb, mo |
|
|
|
|
|
|
|
|
@app.cell |
|
|
def _(): |
|
|
|
|
|
from src.marimo_apps import UI |
|
|
|
|
|
return (UI,) |
|
|
|
|
|
|
|
|
@app.cell |
|
|
def _(ROOT, mo): |
|
|
df = mo.sql( |
|
|
f""" |
|
|
FROM '{ROOT / "data/isotopes.csv"}' |
|
|
""", |
|
|
output=False, |
|
|
) |
|
|
return (df,) |
|
|
|
|
|
|
|
|
@app.cell |
|
|
def _(alt, mo): |
|
|
df2 = mo.sql( |
|
|
""" |
|
|
SELECT *, |
|
|
CASE |
|
|
WHEN Number BETWEEN 58 AND 71 THEN 9 |
|
|
WHEN Number BETWEEN 90 AND 103 THEN 10 |
|
|
WHEN Number <= 2 THEN 1 |
|
|
WHEN Number <= 10 THEN 2 |
|
|
WHEN Number <= 18 THEN 3 |
|
|
WHEN Number <= 36 THEN 4 |
|
|
WHEN Number <= 54 THEN 5 |
|
|
WHEN Number <= 86 THEN 6 |
|
|
ELSE 7 |
|
|
END AS period, |
|
|
CASE |
|
|
WHEN Number BETWEEN 58 AND 71 THEN (Number - 58) % 14 + 3 |
|
|
WHEN Number BETWEEN 90 AND 103 THEN (Number - 90) % 14 + 3 |
|
|
WHEN Number <= 4 THEN 2 - Number % 2 |
|
|
WHEN Number <= 10 THEN Number + 8 |
|
|
WHEN Number <= 12 THEN Number - 10 |
|
|
WHEN Number <= 18 THEN Number |
|
|
WHEN Number <= 20 THEN Number % 2 + 1 |
|
|
WHEN Number <= 57 THEN (Number - 1) % 18 + 1 |
|
|
WHEN Number <= 86 THEN (Number - 33) % 18 + 1 |
|
|
WHEN Number <= 89 THEN Number - 86 |
|
|
ELSE Number - 100 |
|
|
END AS group, |
|
|
FROM df |
|
|
""", |
|
|
output=False, |
|
|
) |
|
|
ptable = ( |
|
|
alt.Chart(df2) |
|
|
.mark_text( |
|
|
align="left", |
|
|
baseline="middle", |
|
|
font="DejaVu", |
|
|
fontSize=13, |
|
|
fontWeight=600, |
|
|
opacity=1, |
|
|
) |
|
|
.encode( |
|
|
x=alt.X("group:N").axis(None), |
|
|
y=alt.Y( |
|
|
"period:Q", |
|
|
) |
|
|
.scale(domain=(10.5, 0.5), nice=False) |
|
|
.axis(None), |
|
|
text="Symbol", |
|
|
tooltip=["count()"], |
|
|
) |
|
|
) |
|
|
return (df2, ptable) |
|
|
|
|
|
|
|
|
@app.cell |
|
|
def _(UI, df2, mo, ptable): |
|
|
md = mo.md(f""" |
|
|
# Yes, Notebooks In Production | PyCon 2026 |
|
|
|
|
|
This app illustrates database queries, various ways to look at tabular data, and interactive Altair plots. |
|
|
|
|
|
## Sample Data: Isotopes of Chemical Elements |
|
|
|
|
|
{mo.ui.table(df2)} |
|
|
""") |
|
|
|
|
|
dashboard = mo.vstack([md, ptable]) |
|
|
|
|
|
mo.hstack([UI.NAV, dashboard], widths=[1, 5]) |
|
|
return |
|
|
|
|
|
|
|
|
@app.cell |
|
|
def _(UI): |
|
|
UI.BUILD_DETAILS |
|
|
return |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
app.run() |
|
|
|