İçeriğe geç

Jupyter Notebook ve JupyterLab: Veri Bilimi Dünyasının Tuvalini Tanımak

AI ve veri bilimi öğrenmek istiyorsan Jupyter'i bilmiyor olmak imkansız. Bu ders sıfırdan başlatma, hücre tipleri, magic commands, görselleştirme entegrasyonu, paylaşma yolları (Colab/Kaggle/Binder), git ile sürüm kontrolü problemleri ve production'a Jupyter taşımanın neden kötü fikir olduğunu konuşuyor.

Şükrü Yusuf KAYA
21 dakikalık okuma
Başlangıç
Jupyter Notebook ve JupyterLab: Veri Bilimi Dünyasının Tuvalini Tanımak
📓 Bu ders neden 'olmazsa olmaz'?
Veri bilimi, AI/ML, akademik araştırma, eğitim — hepsi Jupyter Notebook'la döner. Eğer veri yönüne ilerleyeceksen, gün boyu içinde yaşayacağın bir araç. Eğer web/backend yönüne ilerleyeceksen Jupyter'i bilmen gene de değer — debugger, prototype, dokümantasyon için kullanabilirsin.

Hikaye: IPython Notebook'tan Jupyter'a#

2011 yılında IPython geliştiricileri "neden REPL'i web tarayıcısına taşımayalım?" diye düşündü. IPython Notebook doğdu — tarayıcıda hücre-tabanlı bir Python deneyimi.
Hızla popülerleştikçe, Python dışındaki bilim insanları da kıskandı. R kullananlar, Julia kullananlar... 2014'te IPython proje takımı Jupyter ismini ortaya attı:
  • Julia + Python + R → "Jupyter"
Jupyter artık sadece Python için değil; 40+ programlama dili için kernel destekli. Ama Python en yaygın kernel.
Bugün:
  • Jupyter Notebook (klasik): Eski arayüz, tek notebook tab.
  • JupyterLab (modern): IDE benzeri arayüz; multiple notebook + dosya gezgini + terminal aynı pencerede.
  • Jupyter Server: Backend; arayüzlerden bağımsız.
  • JupyterHub: Çoklu-kullanıcı sunucu (kurum/üniversite).
  • JupyterLite: Tarayıcıda Pyodide ile çalışan, sunucusuz Jupyter.
Bu kursta odağımız JupyterLab (modern arayüz) ve klasik Notebook.

Kurulum#

Yöntem 1: pip ile JupyterLab#

# Virtualenv'in içinde pip install jupyterlab # Çalıştır jupyter lab
jupyter lab
komutu local web sunucusu başlatır (default
localhost:8888
); tarayıcı otomatik açılır.

Yöntem 2: pip ile klasik Notebook#

pip install notebook jupyter notebook

Yöntem 3: JupyterLab Desktop App#

GUI uygulaması olarak Jupyter — terminal kullanmadan açıp kapatabilirsin. github.com/jupyterlab/jupyterlab-desktop'dan indir.
Önerim: Pip ile kur, terminal'den
jupyter lab
ile aç. Daha esnek ve kontrol sende.

İlk açılış#

$ jupyter lab [I 14:23:01 LabApp] JupyterLab extension loaded from /opt/python313/lib/python3.13/site-packages/jupyterlab [I 14:23:01 LabApp] JupyterLab application directory is /opt/python313/share/jupyter/lab [I 14:23:01 ServerApp] Jupyter Server 2.X is running at: [I 14:23:01 ServerApp] http://localhost:8888/lab?token=abc123...
Tarayıcı otomatik açılır. Token ile authentication — paylaşılan sunucuda kimsenin senin notebook'larını çalıştıramaması için.
Server'ı kapatmak için terminal'de Ctrl+C iki kez (ilk seferde "really shutdown?" sorar, ikincisinde kapatır).

Notebook anatomi#

Bir Jupyter Notebook (
.ipynb
dosyası) aslında JSON formatında bir doküman. İçinde sırayla:
  • Metadata — kernel info, dil, vs.
  • Cell'ler — sıralı blok yapıları, her biri:
    • Type — code / markdown / raw
    • Source — yazılan içerik (string veya satır array'i)
    • Outputs — code cell'in çalıştırma sonucu (text, image, error)
    • Execution_count — kaçıncı kez çalıştırıldığı (
      In [n]
      )
{ "cells": [ { "cell_type": "markdown", "source": ["# Başlık\n", "Bu bir markdown hücresi."] }, { "cell_type": "code", "execution_count": 1, "source": ["import numpy as np\n", "np.random.rand(3)"], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": ["array([0.42, 0.71, 0.13])"] } } ] } ], "metadata": { "kernelspec": {"name": "python3", "display_name": "Python 3"} } }
Bu JSON formatı önemli — ileride git ile sürüm kontrolünde sorun yaratacak.

3 hücre tipi#

1. Code cell (kod hücresi)#

Python kodu yazarsın, Shift+Enter ile çalıştır. Output hücrenin altında gözükür.
import numpy as np arr = np.array([1, 2, 3, 4, 5]) print(arr.mean()) # Output: 3.0
Klavye kısayolları (cell selected, edit mode dışında):
  • A → above cell ekle
  • B → below cell ekle
  • D D → cell sil
  • M → markdown cell'e dönüştür
  • Y → code cell'e dönüştür
  • Shift+Enter → çalıştır + bir sonraki cell
  • Ctrl/Cmd+Enter → çalıştır + aynı cell'de kal
  • Esc → command mode (cell tipini, position değiştirebilirsin)
  • Enter → edit mode (cell içeriğini düzenle)

2. Markdown cell (markdown hücresi)#

Notebook'un dokümantasyon kısmı. Markdown + HTML + LaTeX matematik destekli.
# Başlık 1 ## Başlık 2 **Kalın**, *italik*, ~~üzeri çizili~~ - Liste 1 - Liste 2 `inline kod` ```python # fenced code block def hello(): return "world"
Link ve görsel:
Alt text
LaTeX matematiği:
İnline: sqrtx2+y2\\sqrt{x^2 + y^2}
Block:
intinftyinftyex2dx=sqrtpi\\int_{-\\infty}^{\\infty} e^{-x^2} dx = \\sqrt{\\pi}
Markdown cell çalıştırıldığında render olur — çift tık ile yeniden edit'e gir. ### 3. Raw cell Markdown veya code olmayan, ham içerik. Nadiren kullanılır (örneğin nbconvert ile LaTeX'e dönüştürürken raw LaTeX bloku için).

Magic commands Jupyter'da#

IPython magic'lerinin hepsi Jupyter'da da çalışıyor (çünkü altta IPython kernel). Ama bazı magic'ler özellikle Jupyter'a özel kıymet kazanıyor:
# %%timeit hücre seviyesinde %%timeit total = 0 for i in range(1000): total += i # %%bash hücreyi shell olarak çalıştır %%bash ls -la echo "Done" # %%writefile dosyaya yaz %%writefile my_helper.py def add(a, b): return a + b # %%capture çıktıyı yakala (hücreyi sessiz çalıştır) %%capture output heavy_computation() # Sonra: print(output.stdout) # %%html, %%javascript, %%latex hücre tipini değiştir (display only) %%html <button onclick="alert('clicked')">Tıkla</button> # %%markdown — ama bunun yerine markdown hücre tipi tercih et
Pratik:
%%bash
ve
%%writefile
veri pipeline'larında çok faydalı — terminal komutlarını/script'leri notebook içinde tutmak.

Görüntü integration — DataFrame, plot, image#

Jupyter'in en sevilen yanı: bir hücrenin son ifadesi otomatik olarak güzel render ediliyor.

Pandas DataFrame#

import pandas as pd df = pd.DataFrame({ "name": ["Ali", "Ayşe", "Mehmet"], "age": [25, 30, 35], "city": ["İstanbul", "Ankara", "İzmir"] }) df # Otomatik HTML tablo olarak render
Çıktı: güzel bordürlü, hover-highlight'lı bir HTML tablo. Plain text
print(df)
yerine bunu tercih edersin.

Matplotlib#

import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 10, 100) y = np.sin(x) plt.figure(figsize=(8, 4)) plt.plot(x, y, label="sin(x)") plt.plot(x, np.cos(x), label="cos(x)") plt.legend() plt.title("Trigonometric functions") plt.grid(True) plt.show()
Hücrenin altında inline plot gözükür.

IPython.display modülü#

from IPython.display import Image, HTML, Markdown, Audio, Video, IFrame Image("photo.jpg", width=400) Markdown("**Bold text** with [link](url)") HTML("<div style='background:red'>Custom HTML</div>") Audio("song.mp3") Video("clip.mp4") IFrame("https://example.com", width=600, height=400)
Notebook'u zengin, multimedia bir doküman gibi kullanabilirsin.

Kernel yönetimi#

Kernel = hücreleri çalıştıran arka plan Python süreci. Kafa karışıklığı genelde kernel'i anlamamaktan çıkar.

Kernel state#

Tüm hücreler aynı Python sürecinde çalışıyor. Yani:
    1. cell'de
      x = 5
      tanımlarsan, 5. cell'de
      x
      hâlâ erişilebilir.
  • Bir cell hata atsa, geri kalan cell'ler hâlâ çalıştırılabilir (ama hata öncesi state'le).
  • Modülleri tekrar import etmen gerekmez.

Kernel komutları (Notebook menüsü)#

  • Kernel → Restart: Süreci yeniden başlat. Tüm değişkenler kaybolur.
  • Kernel → Restart & Run All: Yeniden başlat + tüm hücreleri tekrar çalıştır.
  • Kernel → Interrupt: Çalışan hücreyi durdur (Ctrl+C eşdeğeri).
  • Kernel → Change Kernel: Farklı Python sürümü/farklı dil seç.

Kernel sürüm yönetimi#

# Mevcut kernel'leri listele jupyter kernelspec list # Available kernels: # python3 /usr/local/share/jupyter/kernels/python3 # Bir virtualenv'i yeni kernel olarak ekle python -m ipykernel install --user --name "my-project" --display-name "Python 3.13 (my-project)" # Sonra Jupyter'da Kernel → Change Kernel'dan seçilebiliyor
Bu pratik çok önemli: Her projeye ayrı virtualenv'i kernel olarak ekle, notebook'lar doğru ortamda çalışsın.

Notebook'ları farklı formatlara çevirmek#

Notebook'unu paylaşmanın değişik yolları var:
# .py dosyasına (sadece kod) jupyter nbconvert --to script analysis.ipynb # Output: analysis.py # HTML (cell + output dahil — paylaşmak için) jupyter nbconvert --to html analysis.ipynb # Output: analysis.html # PDF (LaTeX gerekiyor) jupyter nbconvert --to pdf analysis.ipynb # Slide-show (reveal.js) jupyter nbconvert --to slides analysis.ipynb # Markdown jupyter nbconvert --to markdown analysis.ipynb # Output'ları temizle (paylaşmadan önce) jupyter nbconvert --clear-output analysis.ipynb
Pratik tavsiye: Notebook'u GitHub'a yükleyeceksen
--clear-output
ile temizle (output'lar dosyayı şişirir, gereksiz git noise yaratır).
Google Colab — ücretsiz Jupyter sandbox + GPU/TPU. AI çalışacaksan birinci sıra.
Avantajlar:
  • Tamamen ücretsiz (sınırlı GPU/TPU dahil)
  • Kurulum sıfır — tarayıcıda aç, başla
  • Google Drive entegrasyonu
  • pre-installed: numpy, pandas, scikit-learn, tensorflow, pytorch
  • Paylaşma kolay (link)
Dezavantaj:
  • 12 saat session limit (free)
  • Disk geçici (kapanır kapanmaz silinir)
  • Internet gerekiyor
  • Bazı kütüphaneler için
    !pip install
    her oturum baştan
Pratik: AI deneme + öğrenme için ideal. Production iş için değil.
⚠️ Notebook'un en büyük tuzağı: out-of-order execution
Notebook'lar sıralı çalıştırılmaz zorunlu olarak. Kullanıcı 5. cell'i, sonra 3. cell'i, sonra 5. cell'i tekrar çalıştırabilir. Kernel state cell sırasını UNUTUR — sadece o anki state vardır. Sonuç: 'Bu notebook benim makinemde çalışıyordu, şimdi başkasında çalışmıyor' garabeti.
Çözümler: (1) Her zaman 'Restart & Run All' ile test et — sıralı çalışıyor mu? (2) Final notebook'u versiyon kontrolüne almadan önce 'Restart & Run All' ile temizle. (3) Hidden state olabilecek değişkenler için global'lar yerine fonksiyon-bazlı yaz.

Notebook'lar ve Git — bir aşk-nefret hikâyesi#

Notebook'lar JSON formatında. Bu git diff'e iyi gelmiyor:
  • Cell metadata (execution_count, output) sürekli değişiyor.
  • Bir karakter düzeltmesi bile büyük JSON diff'e dönüşüyor.
  • Merge conflict'leri çözmek kabus.
Çözümler:

Çözüm 1: nbstripout#

pip install nbstripout # Bu repo için git filter ekle nbstripout --install # Artık git commit yapınca output otomatik temizlenir

Çözüm 2: nbdime#

pip install nbdime nbdime config-git --enable # git diff foo.ipynb → güzel notebook diff # git mergetool foo.ipynb → görsel merge tool

Çözüm 3: Jupytext#

Notebook'un yanında
.py
dosyası tut, ikisi senkronize:
pip install jupytext # .ipynb dosyasının yanında .py'yi otomatik üret jupytext --set-formats ipynb,py:percent analysis.ipynb
.py
dosyasını commit et,
.ipynb
'yi gitignore'a koy. Diff/merge kolaylaşır.

Çözüm 4: ReviewNB#

reviewnb.com — GitHub'a bağlanıp PR'larda notebook diff'i güzel gösteriyor (paid).
Pratik tavsiye: Açık kaynak proje yapıyorsan, Jupytext + nbstripout kombinasyonu en iyi. Şirket içi projede ReviewNB değer.

"Production'da Jupyter Notebook" — neden kötü fikir#

Bazı şirketlerde "modeli notebook'ta yazdık, doğrudan deploy edelim" deniyor. Yapma.
Notebook'lar:
  • Reproducible değil — out-of-order execution yüzünden.
  • Test yazmak zor — pytest ile entegre etmek karmaşık.
  • Modüler değil — fonksiyonları başka yerden import edemiyorsun (kolayca).
  • Sürüm kontrolü zayıf — yukarıda gördük.
  • Code review zor — JSON diff.
  • Performans az — kernel-server overhead.
Doğru iş akışı:
  1. Keşif/prototype: Jupyter'da yap. Hızlı, görsel, deneme-yanılma için ideal.
  2. Pure logic: Notebook'tan
    .py
    dosyalarına çevir (
    jupyter nbconvert --to script
    ).
  3. Test yaz: pytest ile birim testler.
  4. Production deploy:
    .py
    modülleri olarak. Notebook'lar sadece dokümantasyon/keşif.
Tek istisna: Eğitim materyali, blog yazısı, dokümantasyon — bunlar için notebook formatı doğal. Production servis ≠ eğitim materyali.

Modern alternatifler#

Notebook eleştirilerine cevap olarak yeni araçlar çıktı:

Marimo#

marimo.io — reactive notebook. Cell'leri sıralı bağımlılık grafiği oluşturuyor; bir cell'i değiştirdiğinde bağlı olanlar otomatik yenileniyor. Out-of-order execution problemi yok.
pip install marimo marimo edit

Quarto#

quarto.org — RStudio'nun yapımcısından. Notebook + Python + R + dokümantasyon = bir araç. Bilim makaleleri yazmak için çok iyi.

VS Code Polyglot Notebooks#

VS Code'un kendi notebook formatı (.dib) — multiple language aynı notebook'ta. Niş ama gelişiyor.
GPU'lu cloud notebook'lar — Modal, Replicate, Lightning AI. Pay-per-second.
Pratik tavsiye: Eğitim, deneme, AI/ML için Jupyter standart. Reproducibility kritikse Marimo'yu dene. Dokümantasyon ağırlıklıysa Quarto bak.

Bu derste neler kazandın?#

✓ Jupyter'in doğum hikâyesi ve neden 'Ju+Pyt+R' isminin geldiği.
✓ JupyterLab vs Notebook vs Server vs Hub vs Lite — 5 farklı şapka.
✓ Notebook'un JSON anatomisi — cell, kernel, metadata.
3 hücre tipi + 10 essential klavye kısayolu.
%%bash, %%writefile, %%capture gibi cell magic'ler.
DataFrame, matplotlib, IPython.display ile zengin output.
Kernel yönetimi — restart, change, virtualenv'i kernel olarak ekle.
nbconvert ile script/HTML/PDF dönüştürme.
5 platform: Colab (ücretsiz GPU), Kaggle (yarışma), Binder (GitHub repo), VS Code (IDE), JupyterHub (kurumsal).
Out-of-order execution tuzağı ve "Restart & Run All" disiplini.
Git ile sürüm kontrolü — nbstripout, nbdime, Jupytext stratejileri.
Production'da neden kötü fikir ve doğru iş akışı.
Modern alternatifler: Marimo (reactive), Quarto (academic), VS Code notebooks.
Sıradaki ders: VS Code'a Python ortamı kurma. Eğer notebook iş akışı senin değilse veya hibrit istiyorsan, VS Code modern Python geliştiricisinin standart aracı. Pylance, Debugger, Jupyter extension, settings.json tüning, multi-root workspaces — hepsini gezeceğiz.

Sık Sorulan Sorular

Notebook'unu GitHub'a yükle (.ipynb dosyası). GitHub'ın render'ı static görünüm sağlıyor. İnteraktif paylaşım için: (a) **Binder** ile repo'yu çalıştırılabilir yap (mybinder.org/v2/gh/user/repo/main), (b) **nbviewer** (nbviewer.org) ile static linki güzelce göster, (c) Google Colab'a yükle ve link paylaş — kullanıcı tıklayıp doğrudan çalıştırır.

Yorumlar & Soru-Cevap

(0)
Yorum yazmak için giriş yap.
Yorumlar yükleniyor...

İlgili İçerikler