TL;DR
- Marimo oferuje reaktywne środowisko – komórki automatycznie aktualizują się przy zmianie zależności, eliminując problemy z kolejnością wykonywania
- Format pliku Python zamiast JSON – ułatwia pracę z Git, CI/CD i umożliwia uruchamianie notebooków jako zwykłych skryptów
- Interaktywna eksploracja danych – możliwość tworzenia dynamicznych wizualizacji z selektorami i filtrami działającymi w czasie rzeczywistym
- Custom widgets z AnyWidget – tworzenie własnych komponentów JavaScript + Python, z obsługą gamepada i speech-to-text
- Praktyczne zastosowania w adnotacji – wbudowane narzędzia do oznaczania danych zastępują dedykowane aplikacje
- Deployment jako web app – łatwe przejście od notebooka do aplikacji webowej z trybem prezentacji
- Fokus na głęboką analizę – narzędzia zmuszają do „patrzenia” na dane zamiast powierzchownego „gapienia się”
Uwaga: Ten artykuł stanowi zbiór notatek z prezentacji Vincent Warmerdam pt. „Build Your Own Eval Tools With Notebooks” na temat środowiska Marimo. Wszystkie przedstawione przemyślenia, obserwacje i wnioski pochodzą bezpośrednio od prowadzącego prezentację.
Dlaczego tradycyjne notebooki to za mało
Vincent Warmerdam rozpoczyna swoją prezentację od fundamentalnego problemu w data science. Jak zauważa ekspert, ludzie często mówią „spójrz na swoje dane”, jednak w praktyce robią coś zupełnie innego.
Większość analityków „gapi się” na dane zamiast je analizować. Warmerdam ilustruje to przykładem ze znanego zbioru danych o kurczakach z języka R. Dane zawierają wagę, czas i typ diety dla różnych kurczaków. Typowa analiza polega na stworzeniu wykresu punktowego i dodaniu linii trendu dla każdej diety. Szybki rzut oka sugeruje, że dieta numer 3 jest najlepsza.
Jednak według eksperta, tu właśnie popełniamy błąd. Zamiast przyjrzeć się wykresowi przez kilka minut, analitycy od razu wyciągają wnioski.
Interaktywność odkrywa ukryte problemy
Gdy Warmerdam dodaje interaktywność do wykresu za pomocą Altair, sytuacja się zmienia. Możliwość powiększania i przesuwania ujawnia kurczaki, które tracą wagę – co w kontekście tuczu nie powinno się zdarzyć.
Głębsza analiza pokazuje, że pięć kurczaków zmarło przedwcześnie. W rezultacie linia trendu dla diety 3 nie uwzględnia tych przypadków, co czyni ją bezwartościową.
„Jedyny sposób, żeby dojść do tego wniosku, to faktycznie popatrzeć na dane, a nie się na nie gapić” – podkreśla Warmerdam.
Marimo vs Jupyter – rewolucja w reaktywności
Kluczowe różnice według Warmerdam:
- Reaktywność – komórki automatycznie aktualizują się przy zmianie zależności
- Zarządzanie zależnościami – system tworzy DAG przed wykonaniem kodu
- Format pliku – Python zamiast JSON, łatwiejszy Git workflow
- Konsystencja – błędy przy usuwaniu zmiennych wykrywane natychmiast
- Layout – system kolumn dla logicznej organizacji kodu
- UI elements – wbudowana obsługa sliderów i innych kontrolek
Jak działa system zależności
Marimo automatycznie zarządza zależnościami poprzez:
- Analizę kodu przed wykonaniem i tworzenie DAG wszystkich komórek
- Identyfikację zmiennych potrzebnych każdej komórce
- Określenie optymalnej kolejności wykonywania
- Natychmiastowe wykrywanie błędów przy usunięciu zmiennych
To eliminuje klasyczny problem Jupyter, gdy zmienna pozostaje w pamięci mimo usunięcia z komórki.
Performance i kontrola wykonywania
Marimo oferuje elastyczne opcje kontroli:
- Auto run mode – komórki aktualizują się automatycznie przy zmianie zależności
- Lazy mode – dla heavy compute operacji, wymagające manualnego uruchomienia
- Module change detection – automatyczne reload gdy zmieniają się importowane pliki Python
- Colored cell indicators – wizualne oznaczenie komórek czekających na wykonanie
„Nie zawsze chcesz automatyczne uruchamianie – jeśli masz wielki PyTorch loop czy operacje na big data, wolisz mieć manualną kontrolę” – zauważa Warmerdam.
Format pliku Python
Marimo zapisuje notebooki jako zwykłe pliki Python, nie JSON. Każda komórka to funkcja z dekoratorami wskazującymi wejścia i wyjścia.
Korzyści według Warmerdam:
- Lepsza praca z Git – brak problemów z JSON-em
- Obsługa UV/pip dla zarządzania zależnościami
- Możliwość uruchamiania jako zwykły skrypt Python
- Integracja z CI/CD
- Support dla PEP standards (można dodać dependencies na początku pliku)
Automatic snapshots i export
Marimo może automatycznie zapisywać kopie w różnych formatach:
- Automatic snapshots – setting zapisuje notebook jako HTML/IPython w folderze
_marimo
podczas pracy - Export commands –
marimo export
do HTML, IPython, lub WASM - No output storage – główny plik pozostaje czysty, outputy generowane on-demand
- Self-contained packages – dzięki UV można tworzyć standalone notebooki z dependencies
Kolumny i layout
Marimo oferuje system kolumn, który Warmerdam szczególnie ceni w nauczaniu. Jedna kolumna to kod setup, druga – właściwa analiza. To ułatwia logiczne organizowanie treści.
AI i zarządzanie pakietami
Marimo oferuje zaawansowane AI features:
- Chat z dostępem do kontekstu – AI ma dostęp do wszystkich zmiennych i schematów data frame’ów w notebooku
- Custom rules – możliwość dodawania własnych preferencji do promptów (np. „prefer polars over pandas”, „use Altair for charts”)
- Automatyczna instalacja pakietów – dedicated sidebar wykrywa missing imports i oferuje natychmiastową instalację
- Copilot integration – tab completion z AI, choć Warmerdam nie jest pewien czy widzi cały notebook czy tylko aktualną komórkę
„Możesz zapytać: 'hej, jakie są kolumny w moim data frame?’ i AI po prostu to wie” – wyjaśnia Warmerdam.
Interaktywna eksploracja w praktyce
Warmerdam demonstruje zaawansowany przykład z analizą tekstów wsparcia klienta. Wykorzystuje UMAP do redukcji wymiarowości i tworzenia 2D wizualizacji klastrów.
Proces interaktywnej eksploracji danych:
Krok 1: Konwersja tekstów na wektory (embeddings)
Krok 2: Redukcja wymiarowości przez UMAP do reprezentacji 2D
Krok 3: Wizualizacja w Altair z interaktywnymi selektorami
Krok 4: Dynamiczne kolorowanie punktów na podstawie zapytań
System kolorowania i selekcji
Warmerdam może teraz wpisać „club card” i zobaczyć, które klastry dotyczą kart klubowych. Przejście na „delivery” pokazuje znacznie więcej punktów – sugerując, że skargi na dostawy są częstsze.
Kluczowe możliwości:
- Porównanie częstotliwości różnych typów skarg
- Selekcje wizualne z automatycznym filtrowaniem danych
- Łączenie zapytań tekstowych z selekcją geometryczną
- Reaktywne połączenie z innymi komórkami notebooka
„Nie chcę się gapić na dane. Chcę z nimi wchodzić w interakcje” – wyjaśnia Warmerdam.
Custom widgets i AnyWidget
Warmerdam przedstawia AnyWidget jako standard dla tworzenia interaktywnych komponentów. To biblioteka działająca we wszystkich środowiskach notebooków – Jupyter, Colab, Marimo.
Widget składa się z kodu Python z traitlets do komunikacji ze zmiennymi, JavaScript ESM do obsługi interfejsu i funkcji render która łączy oba światy.
Przykład widget’u do rysowania
Warmerdam demonstruje widget DrawData, który pozwala dosłownie narysować zbiór danych. Każdy punkt dodany na wykresie trafia do pandas DataFrame w czasie rzeczywistym – co szczególnie ceni w nauczaniu.
Zaawansowane możliwości widget’ów
Warmerdam pokazuje imponujące funkcje:
- Gamepad API – obsługa kontrolerów do gier w przeglądarce
- Web Speech API – darmowe rozpoznawanie mowy w Chrome
- Paint widgets – rysowanie odręczne z obsługą tabletów graficznych
- Real-time charts – wykresy aktualizujące się podczas treningu modeli
- Integracja z Gemini – przekazywanie rysunków do analizy przez AI
„Nie rozumiem, dlaczego jestem jedynym facetem tworzącym te widget’y” – żartuje Warmerdam, zachęcając do eksperymentowania.
Praktyczne zastosowania – adnotacja danych
Warmerdam prezentuje widget do adnotacji danych jako praktyczne zastosowanie całego systemu. Widget oferuje interfejs „tak/nie/pomiń” z dodatkowymi funkcjami.
Funkcje widget’u adnotacji:
- Konfigurowalny renderer dla różnych typów danych (Fast HTML, Jinja, własny)
- Obsługa klawiatury i gamepada dla szybkiej pracy
- Notatki głosowe przez Web Speech API
- Śledzenie postępu i nawigacja wstecz
- Automatyczne zapisywanie w formacie wybranym przez użytkownika
Warmerdam podkreśla elastyczność systemu. Można deduplikować dane, łączyć z bazami danych i wykonywać inne operacje Python wokół procesu adnotacji.
Integracja z istniejącym workflow
„Nie trzeba uruchamiać nowej aplikacji. Dodajesz widget do notebooka i możesz zacząć adnotować dane” – wyjaśnia Warmerdam.
To znacznie przyspiesza cykl rozwoju – w 10 minut można rozpocząć adnotację, w godzinę mieć 500 przykładów, bez przerywania flow pracy.
Deployment i tryb aplikacji
Marimo oferuje dwa tryby pracy: edycji i aplikacji. W trybie aplikacji można przeciągać outputy komórek na dashboard i tworzyć interaktywne prezentacje.
Opcje deployment i szczegóły techniczne
Warmerdam wymienia różnorodne możliwości:
- WASM/Pyodide – export do statycznych stron (GitHub Pages) dla projektów bez heavy dependencies
- Server deployment – pełny Python backend z GPU support
- FastAPI integration – demo na GitHub z autoryzacją
- Built on Starlette – ułatwia integrację z Starlette-compatible frameworks
- Command line –
marimo edit
dla edycji,marimo run
dla web app
Różnice w user experience
Przejście z Jupyter wymaga przyzwyczajenia się do:
- Nowe keyboard shortcuts – brak klasycznego inside/outside cell mode z Jupyter
- Command palette – dostępny przez shortcut dla nawigacji
- Different navigation – brak tradycyjnych Escape + arrow keys workflow
- Restrictions – nie można robić
a += 1
ani multiple assignments tej samej zmiennej
„Pierwsze pół godziny to głównie: moje palce nie znajdują właściwych skrótów” – przyznaje Warmerdam o początkowej krzywej uczenia.
Przyszłość i filozofia
Warmerdam kończy filozoficzną refleksją. „Nie upgradujemy tutaj notebooka. Próbujemy zupgradować waszą wyobraźnię.”
Jednak jego cel to nie tylko promowanie Marimo, ale zachęcenie do śmielszego myślenia o możliwościach notebooków. Przyszłość może przynieść automatyczne generowanie widget’ów przez LLM-y na podstawie opisu zadania.
Warmerdam nawiązuje do Bret Victor: nie wiemy jeszcze, jak będzie wyglądać przyszłość, więc musimy eksperymentować i być kreatywni.
Custom object display
Marimo oferuje Marimo-specific sposób customizacji wyświetlania obiektów:
_display()
method – alternatywa dla_repr_html_()
działająca cross-platform- Rich HTML output – możliwość tworzenia interaktywnych reprezentacji klas
- Mode detection –
mo.app_meta().mode
pozwala wykryć czy app działa w trybie edycji czy prezentacji - Browser-first approach – „jesteśmy w przeglądarce, róbmy super rzeczy zamiast terminal output”
Model biznesowy i przyszłość
Warmerdam opowiada o strategii Marimo:
- Seed funding – runda led przez big names (Anthony z Kaggle, Wes McKinney)
- MIT license – zobowiązanie że open source nie zniknie
- Focus na open source – obecnie priorytet to budowanie dobrego community
- Enterprise features – w przyszłości prawdopodobnie będzie wersja enterprise
- No rug pull – „nie zrobimy rug pull na czymś co jest teraz open source”
Zespół składa się z małej grupy, ale wypuszcza 3-4 release’y tygodniowo, koncentrując się na szybkim rozwoju i feedback od społeczności.
Podsumowanie
Vincent Warmerdam prezentuje Marimo jako narzędzie zmieniające paradygmat pracy z danymi. Kluczowe elementy to reaktywność, interaktywność i możliwość głębokiej eksploracji zamiast powierzchownej analizy.
Kluczowe korzyści przejścia na Marimo:
Dla indywidualnych analityków:
- Eliminacja problemów z kolejnością komórek
- Lepsze narzędzia do eksploracji i debugowania
- Możliwość tworzenia custom tools dla konkretnych problemów
Dla zespołów:
- Lepszy Git workflow dzięki formatowi Python
- Łatwiejszy deployment od prototypu do produkcji
- Zastąpienie dedykowanych narzędzi do adnotacji
- Szybszy development interaktywnych raportów
System zachęca do budowania własnych narzędzi dostosowanych do konkretnych problemów. W rezultacie połączenie Python + JavaScript przez AnyWidget otwiera nieograniczone możliwości tworzenia specialized widgets, które mogą zastąpić całe zewnętrzne aplikacje.
Kluczowy insight
5-minutowy paradoks analizy
Standardowo myślimy: Jeśli wykres pokazuje jasny trend, mamy odpowiedź i możemy przejść dalej.
W praktyce okazuje się, że: Dopiero po 5 minutach intensywnego eksplorowania z interaktywnością odkrywamy krytyczne błędy które całkowicie zmieniają wnioski.
Dlaczego to jest istotne: Większość „analiz danych” to powierzchowne spojrzenie które mija się z rzeczywistością. Vincent odkrył zmarłe kurczaki tylko dzięki temu, że zmusił się do dokładnego przeszukania wykresu z możliwością zoom i pan.
Test na jutro: Następnym razem gdy stworzysz wykres i wydaje Ci się oczywisty, zamiast od razu wyciągać wnioski, spędź 5 minut na interaktywnym eksplorowaniu każdego zakątka i sprawdź czy nie ukrywają się tam anomalie.
Ten wpis jest częścią mojej kolekcji notatek z ciekawych podcastów, webinarów i innych treści, które uważam za wartościowe i do których sam chcę wracać. Materiał pochodzi z prezentacji „Build Your Own Eval Tools With Notebooks” Vincent Warmerdam.
Dodaj komentarz
Musisz się zalogować, aby móc dodać komentarz.