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ıç📓 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 lablocalhost:8888Yö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 ile aç. Daha esnek ve kontrol sende.
jupyter labİ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 ( dosyası) aslında JSON formatında bir doküman. İçinde sırayla:
.ipynb- 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:

LaTeX matematiği:
İnline:
Block:
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: ve veri pipeline'larında çok faydalı — terminal komutlarını/script'leri notebook içinde tutmak.
%%bash%%writefileGö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 yerine bunu tercih edersin.
print(df)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:
-
- cell'de tanımlarsan, 5. cell'de
x = 5hâlâ erişilebilir.x
- cell'de
- 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 ile temizle (output'lar dosyayı şişirir, gereksiz git noise yaratır).
--clear-outputGoogle 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 her oturum baştan
!pip install
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 dosyası tut, ikisi senkronize:
.pypip install jupytext # .ipynb dosyasının yanında .py'yi otomatik üret jupytext --set-formats ipynb,py:percent analysis.ipynb
.py.ipynbÇö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ışı:
- Keşif/prototype: Jupyter'da yap. Hızlı, görsel, deneme-yanılma için ideal.
- Pure logic: Notebook'tan dosyalarına çevir (
.py).jupyter nbconvert --to script - Test yaz: pytest ile birim testler.
- Production deploy: modülleri olarak. Notebook'lar sadece dokümantasyon/keşif.
.py
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.
Modal Notebooks (cloud)#
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
Modül 1: Giriş ve Kurulum
Python Nedir, Neden Bu Kadar Popüler?
Öğrenmeye BaşlaModül 1: Giriş ve Kurulum
Python Sürümlerinin Tarihi: 2'den 3.14'e, AI Winter'lardan 'No-GIL' Devrimine
Öğrenmeye BaşlaModül 1: Giriş ve Kurulum