marimo-on-fastapi / nb /prod_data.py
pup-py's picture
pin to pandas<3
966c1fd
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 _():
# internal imports
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", # sort="-period"
)
.scale(domain=(10.5, 0.5), nice=False)
.axis(None),
text="Symbol",
tooltip=["count()"],
)
) # .configure_view(continuousHeight=480)
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()