# Veri Analitiği için Python: Matplotlib, Seaborn ve Mülakat İçin Görselleştirme > Matplotlib ve Seaborn ile Python veri görselleştirmede uzmanlaşma rehberi. Grafikler, stil düzenleme, alt grafikler ve 2026 veri analitiği mülakatlarında sıkça sorulan sorular. - Published: 2026-04-22 - Updated: 2026-04-22 - Author: SharpSkill - Tags: python, matplotlib, seaborn, data-visualization, data-analytics, interview - Reading time: 9 min --- Python veri görselleştirme, veri analitiği mülakatlarında en sık test edilen beceriler arasında yer almaktadır. İşe alım yöneticileri, adayların ham verilerden temiz ve okunabilir grafikler üretmesini ve tasarım tercihlerini baskı altında açıklayabilmesini beklemektedir. Bu rehber, analist ve veri bilimci pozisyonları için teknik mülakatlarda baskın olan Matplotlib 3.10 ve Seaborn 0.13 kütüphanelerini kapsamaktadır. Tüm kod örnekleri Python 3.12+ ile doğrudan çalışmaktadır. > **Mülakat İpucu** > > Veri analitiği mülakatlarının çoğu, adayın bir veri setinden 15 dakikadan kısa sürede görselleştirme oluşturması gereken canlı kodlama turu içermektedir. Aşağıdaki desenler doğrudan bu alıştırmalara karşılık gelmektedir. ## Python Veri Görselleştirme Ortamının Kurulumu Herhangi bir grafik kodu yazmadan önce ortamın doğru bağımlılıklara sahip olması gerekmektedir. Temiz bir sanal ortam, Matplotlib, Seaborn ve bunların ortak NumPy/Pandas temelleri arasındaki sürüm çakışmalarını önlemektedir. ```bash # setup.sh python -m venv venv source venv/bin/activate pip install matplotlib==3.10.8 seaborn==0.13.2 pandas numpy ``` Hızlı bir doğrulama kontrolü her şeyin çalıştığını onaylamaktadır: ```python # verify_install.py import matplotlib import seaborn as sns import pandas as pd print(f"Matplotlib: {matplotlib.__version__}") print(f"Seaborn: {sns.__version__}") print(f"Pandas: {pd.__version__}") ``` Bağımlılıklar kilitlendikten sonra bir sonraki adım, her Seaborn grafiğinin yapı taşı olan Matplotlib temellerine odaklanmaktadır. ## Matplotlib Temelleri: Figure, Axes ve Nesne Yönelimli API Matplotlib iki API sunmaktadır: pyplot durum makinesi ve nesne yönelimli (OO) arayüz. OO API, her öğe üzerinde açık kontrol sağlamakta ve profesyonel kod tabanlarında ve mülakatlarda beklenen standart olmaktadır. ```python # bar_chart_oo.py import matplotlib.pyplot as plt import numpy as np # Örnek çeyreklik gelir verileri quarters = ["Q1", "Q2", "Q3", "Q4"] revenue = [42_000, 58_000, 51_000, 67_000] # Figure ve axes'i açıkça oluşturma fig, ax = plt.subplots(figsize=(8, 5)) # Belirli bir renkte çubuklar çizme ax.bar(quarters, revenue, color="#2563eb", width=0.5) # Eksenleri net etiketleme — mülakatçılar bunu kontrol eder ax.set_xlabel("Quarter") ax.set_ylabel("Revenue (USD)") ax.set_title("Quarterly Revenue — 2025") # Y eksenini dolar tutarlarıyla biçimlendirme ax.yaxis.set_major_formatter(plt.FuncFormatter(lambda x, _: f"${x:,.0f}")) # Daha temiz bir görünüm için üst ve sağ kenarları kaldırma ax.spines[["top", "right"]].set_visible(False) plt.tight_layout() plt.savefig("quarterly_revenue.png", dpi=150) plt.show() ``` Mülakatçıların dikkat ettiği temel detaylar: `plt.plot()` yerine açık `fig, ax` oluşturma, okunabilir eksen etiketleri, biçimlendirilmiş tick değerleri ve kaldırılmış görsel gürültü (gereksiz kenarlar). Bu küçük tercihler üretim seviyesinde düşünceyi işaret etmektedir. ## Karşılaştırmalı Analiz İçin Alt Grafik Oluşturma Mülakatlar sıklıkla birden fazla metriğin yan yana karşılaştırılmasını gerektirmektedir. `subplots()` fonksiyonu bunu ızgara düzeniyle yönetmektedir. ```python # subplots_comparison.py import matplotlib.pyplot as plt import numpy as np months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"] users = [1200, 1350, 1500, 1420, 1680, 1820] revenue = [24_000, 27_000, 30_000, 28_400, 33_600, 36_400] # X eksenini paylaşan yan yana iki grafik fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5), sharey=False) # Sol panel: çizgi grafik olarak kullanıcı büyümesi ax1.plot(months, users, marker="o", color="#2563eb", linewidth=2) ax1.set_title("Monthly Active Users") ax1.set_ylabel("Users") ax1.spines[["top", "right"]].set_visible(False) # Sağ panel: çubuk grafik olarak gelir ax2.bar(months, revenue, color="#16a34a", width=0.5) ax2.set_title("Monthly Revenue") ax2.set_ylabel("Revenue (USD)") ax2.yaxis.set_major_formatter(plt.FuncFormatter(lambda x, _: f"${x:,.0f}")) ax2.spines[["top", "right"]].set_visible(False) fig.suptitle("Product Metrics — H1 2025", fontsize=14, fontweight="bold") plt.tight_layout() plt.savefig("product_metrics.png", dpi=150) plt.show() ``` `sharey=False` kullanımı her panelin bağımsız olarak ölçeklenmesine izin vermektedir — dolar cinsinden gelir ve sayı olarak kullanıcılar farklı büyüklük derecelerine sahiptir. `suptitle` her iki alt grafiğin üzerinde kapsayıcı bir başlık eklemektedir. > **Yaygın Mülakat Hatası** > > Adaylar genellikle nesne yönelimli API yerine her şey için `plt.plot()` kullanmaktadır. Mülakatçı ikinci bir Y ekseni eklemeyi veya tek bir alt grafiği düzeltmeyi istediğinde, pyplot yaklaşımı yetersiz kalmaktadır. Her zaman `fig, ax = plt.subplots()` varsayılan olarak tercih edilmelidir. ## Seaborn İstatistiksel Grafikleri: Dağılımdan Korelasyona Seaborn, Matplotlib üzerine inşa edilmiştir ve istatistiksel görselleştirmede uzmanlaşmıştır. Matplotlib'in manuel yapılandırma gerektirdiği yerlerde, Seaborn veri yapısından makul varsayılanlar çıkarmaktadır. Dağılım analizi — en yaygın mülakat görevlerinden biri — tek bir fonksiyon çağrısı gerektirmektedir: ```python # distribution_analysis.py import seaborn as sns import matplotlib.pyplot as plt import pandas as pd import numpy as np # İki departman için maaş verisi simülasyonu np.random.seed(42) data = pd.DataFrame({ "salary": np.concatenate([ np.random.normal(75_000, 12_000, 200), # Engineering np.random.normal(65_000, 10_000, 150), # Marketing ]), "department": ["Engineering"] * 200 + ["Marketing"] * 150 }) # Maaş dağılımlarını karşılaştıran KDE grafiği fig, ax = plt.subplots(figsize=(10, 5)) sns.kdeplot( data=data, x="salary", hue="department", # Kategoriye göre otomatik bölme fill=True, # Eğri altında gölgeli alan alpha=0.4, palette=["#2563eb", "#dc2626"], ax=ax # Açık eksenlere bağlama ) ax.set_title("Salary Distribution by Department") ax.set_xlabel("Annual Salary (USD)") ax.xaxis.set_major_formatter(plt.FuncFormatter(lambda x, _: f"${x:,.0f}")) ax.spines[["top", "right"]].set_visible(False) plt.tight_layout() plt.savefig("salary_distribution.png", dpi=150) plt.show() ``` `hue` parametresi veriyi otomatik olarak bölmekte ve `fill=True` örtüşen bölgeleri görünür kılmaktadır. Bu desen — dağılımları kategoriye göre gruplama — neredeyse her analitik mülakat panelinde karşımıza çıkmaktadır. ## Korelasyon Matrisleri İçin Seaborn Isı Haritaları Korelasyon ısı haritaları, sayısal değişkenler arasındaki ilişkileri tek bakışta ortaya koymaktadır. Mülakatçılar bunları adayların çoklu doğrusallığı (multicollinearity) tanımlayıp tanımlayamadığını veya güçlü özellik ilişkilerini fark edip edemediğini test etmek için kullanmaktadır. ```python # correlation_heatmap.py import seaborn as sns import matplotlib.pyplot as plt import pandas as pd import numpy as np # E-ticaret metrikleri simülasyonu np.random.seed(42) n = 500 page_views = np.random.poisson(15, n) time_on_site = page_views * 2.5 + np.random.normal(0, 5, n) cart_adds = np.random.binomial(page_views, 0.3) purchases = np.random.binomial(cart_adds, 0.4) df = pd.DataFrame({ "page_views": page_views, "time_on_site": time_on_site, "cart_adds": cart_adds, "purchases": purchases }) # Pearson korelasyonu hesaplama corr_matrix = df.corr() fig, ax = plt.subplots(figsize=(8, 6)) sns.heatmap( corr_matrix, annot=True, # Hücrelerde korelasyon değerlerini gösterme fmt=".2f", # İki ondalık basamak cmap="RdBu_r", # 0 merkezli ıraksak renk haritası vmin=-1, vmax=1, # Tutarlılık için sabit ölçek square=True, # Kare hücreler linewidths=0.5, ax=ax ) ax.set_title("E-commerce Metrics Correlation") plt.tight_layout() plt.savefig("correlation_heatmap.png", dpi=150) plt.show() ``` Iraksak `RdBu_r` renk haritası pozitif korelasyonları mavi, negatif korelasyonları kırmızı olarak göstermektedir — mülakatçıların beklediği bir konvansiyondur. `vmin=-1` ve `vmax=1` ayarı, gerçek veri aralığından bağımsız olarak renk ölçeğinin yorumlanabilir kalmasını sağlamaktadır. ## Profesyonel Sunumlar İçin Grafik Stillendirme Ham Matplotlib çıktısı eski görünmektedir. Birkaç yapılandırma satırı, grafikleri mülakatlarda detaylara gösterilen özeni kanıtlayan sunum kalitesinde görsellere dönüştürmektedir. ```python # professional_styling.py import matplotlib.pyplot as plt import seaborn as sns # Seaborn'un yerleşik temasını uygulama sns.set_theme( style="whitegrid", # Izgara çizgili temiz arka plan palette="muted", # Profesyonel renk paleti font_scale=1.1 # Biraz daha büyük metin ) # Genel Matplotlib geçersiz kılmaları plt.rcParams.update({ "figure.facecolor": "white", "axes.facecolor": "white", "font.family": "sans-serif", "axes.titlesize": 14, "axes.labelsize": 12, }) ``` Bir betiğin başında `sns.set_theme()` uygulamak, tutarlı stilin sonraki tüm grafiklere yayılmasını sağlamaktadır. Mülakatlar sırasında bu, aksi takdirde grafik başına biçimlendirmeye harcanacak zamanı tasarruf ettirmektedir. > **Sürüm Notu** > > Seaborn 0.13, `set_style()` ve `set_palette()` fonksiyonlarını ayrı çağrılar olarak kullanımdan kaldırmıştır. Birleştirilmiş `set_theme()` fonksiyonu her ikisinin de yerini almaktadır. Stack Overflow'daki eski yanıtlar hâlâ kullanımdan kaldırılmış API'ye atıfta bulunmaktadır — 2026 mülakatlarında bunlardan kaçınılmalıdır. ## Yaygın Veri Görselleştirme Mülakat Soruları Kodlamanın ötesinde, mülakatçılar görselleştirme en iyi uygulamalarının kavramsal anlayışını sorgulamaktadır. Aşağıdaki sorular veri analitiği ve veri bilimi mülakatlarında tutarlı bir şekilde karşımıza çıkmaktadır. **Çubuk grafik ne zaman çizgi grafik yerine kullanılmalıdır?** Çubuk grafikler ayrık kategoriler (departmanlar, ürün türleri, bölgeler) arasındaki karşılaştırmaları göstermektedir. Çizgi grafikler sürekli veya sıralı aralıklardaki (zaman serileri, ardışık ölçümler) eğilimleri göstermektedir. Sıralanmamış kategoriler için çizgi grafik kullanmak, komşu çubuklar arasında sahte bir ilişki ima etmektedir. **Bir grafiği yanıltıcı yapan nedir?** Kesilmiş Y eksenleri, farklı ölçeklere sahip çift Y eksenleri, 2B veriler üzerinde 3B efektler ve seçici olarak belirlenmiş zaman aralıkları — bunların tümü algıyı çarpıtmaktadır. Çözüm: çubuk grafiklerde Y eksenini sıfırdan başlatmak, eksenleri açıkça etiketlemek ve veriyi gizleyen dekoratif unsurlardan kaçınmaktır. **Renk paleti seçimi veri yorumunu nasıl etkiler?** Sıralı paletler (açıktan koyuya) sıcaklık veya gelir gibi sıralı veriler için uygundur. Iraksak paletler (nötr bir merkezde buluşan iki ton) kâr/zarar veya korelasyon katsayıları gibi bir orta noktadan sapmaları vurgulamaktadır. Kategorik paletler ilişkisiz gruplar için farklı tonlar kullanmaktadır. Renk körlüğüne uyumlu paletler (Seaborn'daki `colorblind` veya `muted` gibi) erişilebilirliği sağlamaktadır — kıdemli adayları ayıran bir detaydır. **`plt.show()` ve `plt.savefig()` arasındaki fark nedir?** `plt.show()` figürü etkileşimli bir pencerede render etmekte ve ardından figür durumunu temizlemektedir. `plt.savefig()` figürü temizlemeden bir dosyaya yazmaktadır. `show()` sonrasında `savefig()` çağrısı boş bir dosya üretmektedir — yaygın bir hatadır. Doğru sıralama: önce `savefig()`, sonra `show()`. ## Uçtan Uca Mülakat Alıştırması Tipik bir ev ödevi veya canlı kodlama alıştırması, veri yükleme, temizleme ve birden fazla grafik türünü birleştirmektedir. Aşağıdaki örnek, analitik ekiplerinin gerçek mülakat sorularını yansıtmaktadır. ```python # interview_exercise.py import matplotlib.pyplot as plt import seaborn as sns import pandas as pd import numpy as np sns.set_theme(style="whitegrid", palette="muted", font_scale=1.05) # 12 aylık ürün verisi simülasyonu np.random.seed(42) months = pd.date_range("2025-01", periods=12, freq="MS") df = pd.DataFrame({ "month": months, "revenue": np.cumsum(np.random.normal(5000, 2000, 12)) + 50_000, "customers": np.cumsum(np.random.poisson(50, 12)) + 500, "churn_rate": np.clip(np.random.normal(0.05, 0.015, 12), 0.01, 0.12) }) fig, axes = plt.subplots(1, 3, figsize=(18, 5)) # Panel 1: Gelir trendi axes[0].plot(df["month"], df["revenue"], marker="o", color="#2563eb") axes[0].set_title("Revenue Trend") axes[0].set_ylabel("Revenue (USD)") axes[0].yaxis.set_major_formatter(plt.FuncFormatter(lambda x, _: f"${x:,.0f}")) axes[0].tick_params(axis="x", rotation=45) axes[0].spines[["top", "right"]].set_visible(False) # Panel 2: Müşteri büyümesi axes[1].bar(df["month"], df["customers"], color="#16a34a", width=20) axes[1].set_title("Customer Growth") axes[1].set_ylabel("Total Customers") axes[1].tick_params(axis="x", rotation=45) axes[1].spines[["top", "right"]].set_visible(False) # Panel 3: Eşik çizgili kayıp oranı axes[2].plot(df["month"], df["churn_rate"], marker="s", color="#dc2626") axes[2].axhline(y=0.05, color="gray", linestyle="--", label="Target: 5%") axes[2].set_title("Monthly Churn Rate") axes[2].set_ylabel("Churn Rate") axes[2].yaxis.set_major_formatter(plt.FuncFormatter(lambda x, _: f"{x:.1%}")) axes[2].tick_params(axis="x", rotation=45) axes[2].spines[["top", "right"]].set_visible(False) axes[2].legend() fig.suptitle("Product Dashboard — FY 2025", fontsize=14, fontweight="bold") plt.tight_layout() plt.savefig("interview_dashboard.png", dpi=150) plt.show() ``` Bu alıştırma birleşik bir düzende üç grafik türü, doğru eksen biçimlendirmesi, kayıp hedefleri için bir referans çizgisi ve tutarlı stillendirme göstermektedir. Bunlar mülakatçıların puanladığı unsurların tam karşılığıdır. ## Sonuç - Matplotlib nesne yönelimli API'si (`fig, ax = plt.subplots()`) tam kontrol sağlamakta ve profesyonel ile mülakat ortamlarında beklenen standart olmaktadır - Seaborn'un `hue` parametresi ve yerleşik istatistiksel fonksiyonları (KDE, ısı haritaları) gruplu analizi minimum kodla gerçekleştirmektedir - Iraksak renk haritaları ve sabit ölçekli (`vmin=-1, vmax=1`) korelasyon ısı haritaları, analitik mülakatlarının vazgeçilmez unsurudur - Boş çıktı dosyalarından kaçınmak için her zaman `savefig()` fonksiyonu `show()` fonksiyonundan önce çağrılmalıdır - Temiz stillendirme — kaldırılmış kenarlar, biçimlendirilmiş tick etiketleri, açık başlıklar — mülakatçılara üretim kalitesinde düşünceyi işaret etmektedir - Zaman baskısı altında çok panelli pano oluşturma pratiği yapılmalıdır: çoğu canlı kodlama turu görselleştirme görevi başına 10-15 dakika ayırmaktadır --- Source: SharpSkill (https://sharpskill.dev), tech interview preparation for your real stack. HTML version of this page: https://sharpskill.dev/tr/blog/data-analytics/python-matplotlib-seaborn-data-visualization-interview