Created
November 8, 2024 16:56
-
-
Save aaronblondeau/02f94256aab61f409d1f820cc80ea571 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "id": "5a3a3e8b-b14d-48f7-9dfc-192df5da60f5", | |
| "metadata": {}, | |
| "source": [ | |
| "# Deno 2 + Jupyter Demo" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "c8daaf0b-b428-4f31-8e53-fa6076da3d8c", | |
| "metadata": {}, | |
| "source": [ | |
| "## Create a chart with observable plot\n", | |
| "\n", | |
| "https://observablehq.com/plot/" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "id": "62f2b479-ff39-4123-984f-861ea0119ff6", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import * as Plot from \"npm:@observablehq/plot\"" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "id": "87882fe4-54a2-4b71-9a5b-6036582b79e1", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import * as d3 from \"npm:d3\"" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "id": "7b1633ae-7604-4169-8fdc-9d18eb481949", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "// Borrowed from https://jsr.io/@ry/jupyter-helper/0.2.0/mod.ts#L6\n", | |
| "\n", | |
| "// Another option? https://blog.logrocket.com/deno-jupyter-notebook-data-dashboard/\n", | |
| "\n", | |
| "import { DOMParser } from \"npm:[email protected]\";\n", | |
| "\n", | |
| "const document: any = new DOMParser().parseFromString(\n", | |
| " `<!DOCTYPE html><html lang=\"en\"></html>`,\n", | |
| " \"text/html\",\n", | |
| ");" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "id": "26cf1e00-0ff3-4593-a4dc-1a45ab855f55", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/svg+xml": [ | |
| "<svg viewBox=\"0 0 640 400\" height=\"400\" width=\"640\" text-anchor=\"middle\" font-size=\"10\" font-family=\"system-ui, sans-serif\" fill=\"currentColor\" class=\"plot-d6a7b5\"><style>:where(.plot-d6a7b5) {\n", | |
| " --plot-background: white;\n", | |
| " display: block;\n", | |
| " height: auto;\n", | |
| " height: intrinsic;\n", | |
| " max-width: 100%;\n", | |
| "}\n", | |
| ":where(.plot-d6a7b5 text),\n", | |
| ":where(.plot-d6a7b5 tspan) {\n", | |
| " white-space: pre;\n", | |
| "}</style><g stroke=\"currentColor\" fill=\"none\" aria-hidden=\"true\" aria-label=\"y-axis tick\"><path d=\"M0,0L-6,0\" transform=\"translate(40,370)\" /><path d=\"M0,0L-6,0\" transform=\"translate(40,325.1282051282051)\" /><path d=\"M0,0L-6,0\" transform=\"translate(40,280.2564102564103)\" /><path d=\"M0,0L-6,0\" transform=\"translate(40,235.3846153846154)\" /><path d=\"M0,0L-6,0\" transform=\"translate(40,190.51282051282053)\" /><path d=\"M0,0L-6,0\" transform=\"translate(40,145.6410256410256)\" /><path d=\"M0,0L-6,0\" transform=\"translate(40,100.76923076923076)\" /><path d=\"M0,0L-6,0\" transform=\"translate(40,55.897435897435884)\" /></g><g transform=\"translate(-9,0)\" font-variant=\"tabular-nums\" text-anchor=\"end\" aria-label=\"y-axis tick label\"><text transform=\"translate(40,370)\" y=\"0.32em\">0</text><text transform=\"translate(40,325.1282051282051)\" y=\"0.32em\">100</text><text transform=\"translate(40,280.2564102564103)\" y=\"0.32em\">200</text><text transform=\"translate(40,235.3846153846154)\" y=\"0.32em\">300</text><text transform=\"translate(40,190.51282051282053)\" y=\"0.32em\">400</text><text transform=\"translate(40,145.6410256410256)\" y=\"0.32em\">500</text><text transform=\"translate(40,100.76923076923076)\" y=\"0.32em\">600</text><text transform=\"translate(40,55.897435897435884)\" y=\"0.32em\">700</text></g><g transform=\"translate(-37,-17)\" text-anchor=\"start\" aria-label=\"y-axis label\"><text transform=\"translate(40,20)\" y=\"0.71em\">↑ Frequency</text></g><g stroke=\"currentColor\" fill=\"none\" aria-hidden=\"true\" aria-label=\"x-axis tick\"><path d=\"M0,0L0,6\" transform=\"translate(83.5,370)\" /><path d=\"M0,0L0,6\" transform=\"translate(156,370)\" /><path d=\"M0,0L0,6\" transform=\"translate(228.5,370)\" /><path d=\"M0,0L0,6\" transform=\"translate(301,370)\" /><path d=\"M0,0L0,6\" transform=\"translate(373.5,370)\" /><path d=\"M0,0L0,6\" transform=\"translate(446,370)\" /><path d=\"M0,0L0,6\" transform=\"translate(518.5,370)\" /><path d=\"M0,0L0,6\" transform=\"translate(591,370)\" /></g><g transform=\"translate(0,9)\" font-variant=\"tabular-nums\" aria-label=\"x-axis tick label\"><text transform=\"translate(83.5,370)\" y=\"0.71em\">−3</text><text transform=\"translate(156,370)\" y=\"0.71em\">−2</text><text transform=\"translate(228.5,370)\" y=\"0.71em\">−1</text><text transform=\"translate(301,370)\" y=\"0.71em\">0</text><text transform=\"translate(373.5,370)\" y=\"0.71em\">1</text><text transform=\"translate(446,370)\" y=\"0.71em\">2</text><text transform=\"translate(518.5,370)\" y=\"0.71em\">3</text><text transform=\"translate(591,370)\" y=\"0.71em\">4</text></g><g fill=\"blue\" aria-label=\"rect\"><rect height=\"0.44871794871789916\" width=\"13.500000000000014\" y=\"369.5512820512821\" x=\"40.5\" /><rect height=\"1.794871794871824\" width=\"13.499999999999986\" y=\"368.2051282051282\" x=\"55.000000000000014\" /><rect height=\"3.141025641025635\" width=\"13.5\" y=\"366.85897435897436\" x=\"69.5\" /><rect height=\"3.5897435897435344\" width=\"13.500000000000028\" y=\"366.41025641025647\" x=\"84\" /><rect height=\"8.076923076923094\" width=\"13.499999999999972\" y=\"361.9230769230769\" x=\"98.50000000000003\" /><rect height=\"11.666666666666629\" width=\"13.500000000000014\" y=\"358.33333333333337\" x=\"113\" /><rect height=\"25.576923076923094\" width=\"13.499999999999986\" y=\"344.4230769230769\" x=\"127.50000000000001\" /><rect height=\"39.4871794871795\" width=\"13.5\" y=\"330.5128205128205\" x=\"142\" /><rect height=\"66.41025641025641\" width=\"13.5\" y=\"303.5897435897436\" x=\"156.5\" /><rect height=\"84.35897435897436\" width=\"13.5\" y=\"285.64102564102564\" x=\"171\" /><rect height=\"109.93589743589746\" width=\"13.5\" y=\"260.06410256410254\" x=\"185.5\" /><rect height=\"160.6410256410256\" width=\"13.500000000000028\" y=\"209.3589743589744\" x=\"200\" /><rect height=\"201.9230769230769\" width=\"13.499999999999972\" y=\"168.0769230769231\" x=\"214.50000000000003\" /><rect height=\"246.79487179487182\" width=\"13.5\" y=\"123.20512820512819\" x=\"229\" /><rect height=\"277.7564102564102\" width=\"13.5\" y=\"92.24358974358977\" x=\"243.5\" /><rect height=\"310.5128205128205\" width=\"13.5\" y=\"59.4871794871795\" x=\"258\" /><rect height=\"335.19230769230774\" width=\"13.5\" y=\"34.80769230769229\" x=\"272.5\" /><rect height=\"350\" width=\"13.5\" y=\"20\" x=\"287\" /><rect height=\"346.85897435897436\" width=\"13.5\" y=\"23.141025641025628\" x=\"301.5\" /><rect height=\"335.19230769230774\" width=\"13.5\" y=\"34.80769230769229\" x=\"316\" /><rect height=\"324.87179487179486\" width=\"13.5\" y=\"45.12820512820512\" x=\"330.5\" /><rect height=\"302.8846153846154\" width=\"13.5\" y=\"67.1153846153846\" x=\"345\" /><rect height=\"229.74358974358975\" width=\"13.5\" y=\"140.25641025641025\" x=\"359.5\" /><rect height=\"199.67948717948718\" width=\"13.5\" y=\"170.32051282051282\" x=\"374\" /><rect height=\"147.62820512820517\" width=\"13.5\" y=\"222.37179487179483\" x=\"388.5\" /><rect height=\"113.97435897435895\" width=\"13.5\" y=\"256.02564102564105\" x=\"403\" /><rect height=\"80.32051282051282\" width=\"13.5\" y=\"289.6794871794872\" x=\"417.5\" /><rect height=\"54.74358974358972\" width=\"13.5\" y=\"315.2564102564103\" x=\"432\" /><rect height=\"45.76923076923072\" width=\"13.500000000000057\" y=\"324.2307692307693\" x=\"446.5\" /><rect height=\"26.47435897435895\" width=\"13.499999999999943\" y=\"343.52564102564105\" x=\"461.00000000000006\" /><rect height=\"17.948717948717956\" width=\"13.5\" y=\"352.05128205128204\" x=\"475.5\" /><rect height=\"10.769230769230717\" width=\"13.5\" y=\"359.2307692307693\" x=\"490\" /><rect height=\"6.28205128205127\" width=\"13.5\" y=\"363.71794871794873\" x=\"504.5\" /><rect height=\"4.038461538461547\" width=\"13.5\" y=\"365.96153846153845\" x=\"519\" /><rect height=\"0.897435897435912\" width=\"13.5\" y=\"369.1025641025641\" x=\"533.5\" /><rect height=\"1.3461538461538112\" width=\"13.5\" y=\"368.6538461538462\" x=\"562.5\" /><rect height=\"0.44871794871789916\" width=\"13.5\" y=\"369.5512820512821\" x=\"606\" /></g></svg>" | |
| ] | |
| }, | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "Plot.rectY({length: 10000}, Plot.binX({y: \"count\"}, {x: d3.randomNormal(), fill: \"blue\"})).plot({ document })" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "fd9d0b73-8fff-43c1-bed7-37b669df1f6c", | |
| "metadata": {}, | |
| "source": [ | |
| "## Use a Polars DataFrame" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "id": "7fa4515e-f131-498d-a3ee-908c93892e52", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import pl from \"npm:[email protected]\";" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "id": "3ee7f72e-bd22-40d1-b066-bfb31ec0721a", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "const df = pl.DataFrame(\n", | |
| "{\n", | |
| " A: [1, 2, 3, 4, 5],\n", | |
| " fruits: [\"banana\", \"banana\", \"apple\", \"apple\", \"banana\"],\n", | |
| " B: [5, 4, 3, 2, 1],\n", | |
| " cars: [\"beetle\", \"audi\", \"beetle\", \"beetle\", \"beetle\"],\n", | |
| " }\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "id": "302854c2-6368-4762-9732-ec826f4fffc0", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "application/vnd.dataresource+json": { | |
| "bytes": null, | |
| "data": [ | |
| { | |
| "A": 1, | |
| "B": 5, | |
| "cars": "beetle", | |
| "fruits": "banana" | |
| }, | |
| { | |
| "A": 2, | |
| "B": 4, | |
| "cars": "audi", | |
| "fruits": "banana" | |
| }, | |
| { | |
| "A": 3, | |
| "B": 3, | |
| "cars": "beetle", | |
| "fruits": "apple" | |
| }, | |
| { | |
| "A": 4, | |
| "B": 2, | |
| "cars": "beetle", | |
| "fruits": "apple" | |
| }, | |
| { | |
| "A": 5, | |
| "B": 1, | |
| "cars": "beetle", | |
| "fruits": "banana" | |
| } | |
| ], | |
| "description": null, | |
| "dialect": null, | |
| "encoding": null, | |
| "format": null, | |
| "hash": null, | |
| "homepage": null, | |
| "licenses": null, | |
| "mediatype": null, | |
| "path": null, | |
| "schema": { | |
| "fields": [ | |
| { | |
| "constraints": null, | |
| "description": null, | |
| "example": null, | |
| "format": null, | |
| "name": "A", | |
| "rdfType": null, | |
| "title": null, | |
| "type": "number" | |
| }, | |
| { | |
| "constraints": null, | |
| "description": null, | |
| "example": null, | |
| "format": null, | |
| "name": "fruits", | |
| "rdfType": null, | |
| "title": null, | |
| "type": "string" | |
| }, | |
| { | |
| "constraints": null, | |
| "description": null, | |
| "example": null, | |
| "format": null, | |
| "name": "B", | |
| "rdfType": null, | |
| "title": null, | |
| "type": "number" | |
| }, | |
| { | |
| "constraints": null, | |
| "description": null, | |
| "example": null, | |
| "format": null, | |
| "name": "cars", | |
| "rdfType": null, | |
| "title": null, | |
| "type": "string" | |
| } | |
| ], | |
| "foreignKeys": null, | |
| "missingValues": null, | |
| "primaryKey": null | |
| }, | |
| "sources": null, | |
| "title": null | |
| }, | |
| "text/html": [ | |
| "<table><thead><tr><th>A</th><th>fruits</th><th>B</th><th>cars</th></tr></thead><tbody><tr><td>1</td><td>banana</td><td>5</td><td>beetle</td></tr><tr><td>2</td><td>banana</td><td>4</td><td>audi</td></tr><tr><td>3</td><td>apple</td><td>3</td><td>beetle</td></tr><tr><td>4</td><td>apple</td><td>2</td><td>beetle</td></tr><tr><td>5</td><td>banana</td><td>1</td><td>beetle</td></tr></tbody></table>" | |
| ] | |
| }, | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "id": "a04e4f7b-1487-4d86-9ef8-5a286e71379c", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "\u001b[33m3\u001b[39m" | |
| ] | |
| }, | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df['A'].mean()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "3cbd5e74-f21c-4778-ad9b-b261ea01f175", | |
| "metadata": {}, | |
| "source": [ | |
| "## Render HTML Output" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "id": "2669a807-76b2-47a1-a671-a0f744547130", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<ul><li>One</li><li>Two</li><li>Three</li></ul>" | |
| ] | |
| }, | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "// From : https://docs.deno.com/runtime/reference/cli/jupyter/#examples\n", | |
| "Deno.jupyter.html`<ul><li>One</li><li>Two</li><li>Three</li></ul>`;" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "94278fef-106f-4818-95ca-eb042070227e", | |
| "metadata": {}, | |
| "source": [ | |
| "## Render SVG Output" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "id": "7b164ab8-6cd2-4331-a769-d47d9e73c368", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/svg+xml": [ | |
| "<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"size-6\">\n", | |
| " <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6.633 10.25c.806 0 1.533-.446 2.031-1.08a9.041 9.041 0 0 1 2.861-2.4c.723-.384 1.35-.956 1.653-1.715a4.498 4.498 0 0 0 .322-1.672V2.75a.75.75 0 0 1 .75-.75 2.25 2.25 0 0 1 2.25 2.25c0 1.152-.26 2.243-.723 3.218-.266.558.107 1.282.725 1.282m0 0h3.126c1.026 0 1.945.694 2.054 1.715.045.422.068.85.068 1.285a11.95 11.95 0 0 1-2.649 7.521c-.388.482-.987.729-1.605.729H13.48c-.483 0-.964-.078-1.423-.23l-3.114-1.04a4.501 4.501 0 0 0-1.423-.23H5.904m10.598-9.75H14.25M5.904 18.5c.083.205.173.405.27.602.197.4-.078.898-.523.898h-.908c-.889 0-1.713-.518-1.972-1.368a12 12 0 0 1-.521-3.507c0-1.553.295-3.036.831-4.398C3.387 9.953 4.167 9.5 5 9.5h1.053c.472 0 .745.556.5.96a8.958 8.958 0 0 0-1.302 4.665c0 1.194.232 2.333.654 3.375Z\" />\n", | |
| "</svg>\n" | |
| ] | |
| }, | |
| "execution_count": 10, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "// From HeroIcons : https://heroicons.com/\n", | |
| "Deno.jupyter.svg`<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"size-6\">\n", | |
| " <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6.633 10.25c.806 0 1.533-.446 2.031-1.08a9.041 9.041 0 0 1 2.861-2.4c.723-.384 1.35-.956 1.653-1.715a4.498 4.498 0 0 0 .322-1.672V2.75a.75.75 0 0 1 .75-.75 2.25 2.25 0 0 1 2.25 2.25c0 1.152-.26 2.243-.723 3.218-.266.558.107 1.282.725 1.282m0 0h3.126c1.026 0 1.945.694 2.054 1.715.045.422.068.85.068 1.285a11.95 11.95 0 0 1-2.649 7.521c-.388.482-.987.729-1.605.729H13.48c-.483 0-.964-.078-1.423-.23l-3.114-1.04a4.501 4.501 0 0 0-1.423-.23H5.904m10.598-9.75H14.25M5.904 18.5c.083.205.173.405.27.602.197.4-.078.898-.523.898h-.908c-.889 0-1.713-.518-1.972-1.368a12 12 0 0 1-.521-3.507c0-1.553.295-3.036.831-4.398C3.387 9.953 4.167 9.5 5 9.5h1.053c.472 0 .745.556.5.96a8.958 8.958 0 0 0-1.302 4.665c0 1.194.232 2.333.654 3.375Z\" />\n", | |
| "</svg>\n", | |
| "`;" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "c5edb011-5295-4577-9b88-ba0ce5cd8f3e", | |
| "metadata": {}, | |
| "source": [ | |
| "## Mermaid Chart?" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "id": "6769125f-dc6f-496f-bbd3-35e023eb1058", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "ename": "TypeError", | |
| "evalue": "[ERR_MODULE_NOT_FOUND] Cannot find module 'file:///Users/aaronblondeau/Library/Caches/deno/npm/registry.npmjs.org/khroma/2.1.0/dist/channels/utils/index.js' imported from 'file:///Users/aaronblondeau/Library/Caches/deno/npm/registry.npmjs.org/khroma/2.1.0/dist/channels//index.js'", | |
| "output_type": "error", | |
| "traceback": [ | |
| "Stack trace:", | |
| "TypeError: [ERR_MODULE_NOT_FOUND] Cannot find module 'file:///Users/aaronblondeau/Library/Caches/deno/npm/registry.npmjs.org/khroma/2.1.0/dist/channels/utils/index.js' imported from 'file:///Users/aaronblondeau/Library/Caches/deno/npm/registry.npmjs.org/khroma/2.1.0/dist/channels//index.js'", | |
| " at async <anonymous>:1:53" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "import mermaid from 'npm:mermaid'" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "8b33d244-55bc-4646-9c36-c8f70c3afc9f", | |
| "metadata": {}, | |
| "source": [ | |
| "**:-( Deno strikes again : https://github.com/denoland/deno/issues/9427**" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "id": "269fa154-252e-44a5-83f2-adbbb9ecfd38", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Deno", | |
| "language": "typescript", | |
| "name": "deno" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": "typescript", | |
| "file_extension": ".ts", | |
| "mimetype": "text/x.typescript", | |
| "name": "typescript", | |
| "nbconvert_exporter": "script", | |
| "pygments_lexer": "typescript", | |
| "version": "5.6.2" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 5 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment