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.

Veri analitiği mülakatları için Matplotlib ve Seaborn ile Python veri görselleştirme

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.

Data Analytics mülakatlarında başarılı olmaya hazır mısın?

İnteraktif simülatörler, flashcards ve teknik testlerle pratik yap.

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

Etiketler

#python
#matplotlib
#seaborn
#data-visualization
#data-analytics
#interview

Paylaş

İlgili makaleler