Jupyter Notebook'a Modern ve Reaktif Alternatif: Marimo ile Python'da Kod Akışı Yönetimi
Jupyter Notebook'a Modern ve Reaktif Alternatif: Marimo ile Python'da Kod Akışı Yönetimi
Veri bilimi, makine öğrenimi ve hızlı prototipleme dünyasında Jupyter Notebook, yıllardır tahtını kimseye kaptırmayan bir dev. Ancak Jupyter kullanan herkesin en az bir kez yaşadığı o meşhur kabusu biliyorsunuz: Hücrelerin çalışma sırasının bozulması, gizli durumlar (hidden state) ve geçersiz hale gelen değişkenler.
Bir hücreyi yukarıda çalıştırıp aşağıda değiştirmek, ardından en baştaki hücreyi unutup koda devam etmek... Sonuç? Kernel'i yeniden başlat (Restart Kernel) ve her şeye sıfırdan başla!
İşte tam bu noktada, Python ekosisteminde ezberleri bozacak modern bir alternatif sahneye çıkıyor: Marimo.
Bu yazıda, hücreler arasındaki bağımlılıkları otomatik takip eden, reaktif (reactive) bir çalışma mantığı sunan ve en önemlisi saf Python (.py) dosyaları üreten Marimo’yu tüm detaylarıyla inceliyoruz.
Marimo Nedir?
Marimo, Python için geliştirilmiş reaktif ve yinelenebilir (reproducible) yeni nesil bir notebook ortamıdır. Klasik notebook'ların aksine Marimo, tıpkı bir e-tablo (Excel) gibi çalışır: Bir hücredeki veriyi veya kodu değiştirdiğinizde, o hücreye bağımlı olan tüm diğer hücreler otomatik olarak güncellenir.
Marimo'nun temel felsefesi, kodun okunabilirliğini, sürdürülebilirliğini ve hata payını sıfıra indirmeyi hedefleyen modern yazılım mühendisliği prensiplerine dayanır.
Marimo'yu Jupyter'dan Ayıran Temel Özellikler
1. Tamamen Reaktif Kod Akışı (Reactive Execution)
Jupyter'da hücreler imperatif (emirsel) çalışır; yani siz bir hücreye tıklayıp Shift + Enter yapmadığınız sürece kod çalışmaz.
Marimo ise bir Yönlendirilmiş Devirsel Olmayan Grafik (DAG - Directed Acyclic Graph) yapısı kullanır. Hücreler arasındaki değişken bağımlılıklarını otomatik olarak haritalandırır.
- Örnek: Eğer A hücremizde
x = 10tanımlıysa ve B hücremizdey = x + 5yazıyorsa; A hücresindekixdeğerini20yaptığınız an B hücresi otomatik olarak yeniden tetiklenir veydeğeri25olur. Manuel çalıştırma stresi ortadan kalkar!
2. Gizli Durum (Hidden State) Problemine Son
Jupyter'da bir değişkeni silip hücreyi kaldırsanız bile o değişken hafızada (memory) kalmaya devam eder. Bu durum, başkasının (hatta sizin) kodunuzu tekrar çalıştırdığında hata almasına yol açar.
Marimo'da gizli durum yoktur. Bir değişken silindiğinde veya değiştirildiğinde, o değişkene bağlı tüm alt bileşenler anında güncellenir veya temizlenir. Kodunuz her zaman yinelenebilirdir.
3. Kaynak Dosyaları Saf Python (.py) Formatındadır
Jupyter Notebook'lar arka planda karmaşık ve okunması zor JSON formatlı .ipynb dosyaları oluşturur. Bu durum Git versiyon kontrol sistemlerinde (Merge Conflict kabusları!) büyük sorun yaratır.
Marimo notebook'ları ise saf Python (.py) dosyalarıdır!
* Kodlarınızı standart bir IDE'de (VS Code, PyCharm vb.) açabilirsiniz.
* Git commitlemeleri son derece temizdir.
* Yazdığınız notebook'u sıradan bir Python betiği gibi python notebook.py komutuyla terminalden çalıştırabilirsiniz.
# Marimo tarafından üretilen örnek bir saf Python dosyası yapısı
import marimo
__generated_with = "0.1.0"
app = marimo.App()
@app.cell
def __():
import marimo as mo
return mo,
@app.cell
def __(mo):
slider = mo.ui.slider(1, 100, value=50)
slider
return slider,
if __name__ == "__main__":
app.run()
4. Yerleşik (Built-in) Etkileşimli UI Bileşenleri
Jupyter'da arayüz elemanları (slider, dropdown, butonlar) eklemek için ipywidgets gibi ek kütüphanelerle uğraşmak gerekir. Marimo ise bu araçları kendi bünyesinde varsayılan olarak sunar.
Üstelik bu UI elemanları reaktif akışa tam entegredir. Bir slider'ı kaydırdığınız an, o slider'ın değerini kullanan tüm grafikler veya hesaplamalar anında ekranda güncellenir.
Marimo vs. Jupyter Notebook: Karşılaştırma Tablosu
| Özellik | Jupyter Notebook | Marimo |
|---|---|---|
| Çalışma Mantığı | Sıralı / Manuel | Reaktif / Otomatik (DAG) |
| Dosya Formatı | .ipynb (JSON) |
.py (Saf Python) |
| Git Uyumluluğu | Zor, karmaşık diff'ler | Çok Kolay, standart kod diff'i |
| Gizli Durum (State) | Var (Hata yapmaya elverişli) | Yok (Tutarlı ve Güvenilir) |
| UI Bileşenleri | Harici Kütüphane Gerektirir | Yerleşik ve Reaktif |
| Modül Olarak İçe Aktarma | Zor | Kolay (import notebook) |
Hızlı Başlangıç: Marimo Nasıl Kullanılır?
Marimo'yu kurmak ve ilk reaktif notebook'unuzu oluşturmak oldukça basittir.
1. Kurulum
Terminalinizden pip ile hızlıca kurabilirsiniz:
pip install marimo
2. Yeni Bir Notebook Başlatma
Arayüzü başlatmak için şu komutu çalıştırmanız yeterlidir:
marimo edit
Bu komut, tarayıcınızda modern ve şık bir editör açacaktır. Var olan bir Python dosyasını düzenlemek veya yeni bir dosya oluşturmak için dosya adı belirtebilirsiniz:
marimo edit analiz.py
3. Bir Uygulamayı Çalıştırma (Read-Only / Dashboard Modu)
Marimo ile hazırladığınız analizleri veya panelleri bir web uygulaması gibi yayınlamak isterseniz:
marimo run analiz.py
Bu komut kodu gizler ve sadece çıktıları/grafikleri etkileşimli bir dashboard olarak sunar.
Kimler İçin Uygun?
- Veri Bilimcileri ve Analistler: Kod bağımlılıklarını unutup sadece analize ve verinin kendisine odaklanmak isteyenler için.
- Makine Öğrenimi Mühendisleri: Hiperparametre optimizasyonu yaparken dinamik grafiklerin ve değişkenlerin anında güncellenmesini isteyenler için.
- Eğitmenler ve Öğrenciler: Kodun çalışma sırasından kaynaklanan kafa karışıklıklarını önlemek ve interaktif ders içerikleri hazırlamak için.
- Yazılım Geliştiricileri: Notebook kodlarını doğrudan prodüksiyon koduna dönüştürmek ve Git ile sorunsuz çalışmak isteyenler için.
Sonuç
Jupyter Notebook şüphesiz veri dünyasının öncülerindendi. Ancak modern yazılım ihtiyaçları, daha güvenilir, sürdürülebilir ve etkileşimli araçları zorunlu kılıyor.
Marimo, reaktif yapısı, .py tabanlı dosya formatı ve gizli durumları ortadan kaldıran yaklaşımıyla Python notebook dünyasında yeni bir standart belirlemeye aday. Kod akışınızı daha güvenli ve eğlenceli hale getirmek istiyorsanız, bir sonraki projenizde Marimo'ya kesinlikle bir şans vermelisiniz.
Siz Marimo ve reaktif notebook yaklaşımı hakkında ne düşünüyorsunuz? Deneyimlerinizi ve yorumlarınızı aşağıda paylaşmayı unutmayın!