Marimo – reaktywne notebooki, które zmieniają sposób pracy z danymi #EN171

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. 


Opublikowano

,

Komentarze

Dodaj komentarz