File size: 2,897 Bytes
36724cf 880ab76 60150c3 ba7260d 36724cf 880ab76 60150c3 880ab76 36724cf ba7260d 880ab76 36724cf 880ab76 966c1fd 880ab76 ba7260d 880ab76 36724cf ba7260d 966c1fd ba7260d 60150c3 ba7260d 60150c3 ba7260d 36724cf 60150c3 880ab76 36724cf 880ab76 60150c3 36724cf 60150c3 880ab76 945e7e9 36724cf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
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()
|