Data Analyst Mülakat Soruları 2026: Kapsamlı SQL, Python ve Analitik Rehberi

SQL pencere fonksiyonları, Python pandas işlemleri, istatistiksel kavramlar ve 2026 yılında şirketlerin sorduğu iş analitiği senaryolarını kapsayan veri analisti mülakat sorularına kapsamlı bir rehber.

Data Analyst Mülakat Soruları 2026

2026 yılında veri analisti mülakat soruları üç temel alanı test eder: SQL yetkinliği, Python veri manipülasyonu ve iş problemi çözme. Google, Meta ve Amazon gibi şirketler teknik mülakatlarını bu beceriler etrafında standartlaştırdı; SQL pencere fonksiyonları ve pandas işlemleri, Glassdoor'un 2026 işe alım trendleri raporuna göre mülakatların %80'inden fazlasında yer alıyor.

Mülakatçılar Nelere Dikkat Ediyor

En güçlü adaylar sadece sözdizimi bilgisini değil, analitik yaklaşımlarını açıklama becerisini de sergiler. Mülakatçılar, bir adayın iş sorusunu teknik bir sorguya dönüştürüp dönüştüremediğini ve bulguları teknik olmayan paydaşlara iletip iletemediğini değerlendirir.

SQL Pencere Fonksiyonları: En Yaygın Mülakat Konusu

Pencere fonksiyonları neredeyse her veri analisti teknik mülakatında yer alır. Satırları birleştiren toplama fonksiyonlarının aksine, pencere fonksiyonları bireysel satır verilerini koruyarak mevcut satırla ilişkili bir satır kümesi üzerinde hesaplamalar yapar.

Soru: Her çalışanın maaşını departmanının toplam maaşının yüzdesi olarak hesaplayın.

sql
-- employee_salary_percentage.sql
SELECT 
    employee_id,
    department,
    salary,
    -- SUM as window function preserves each row
    ROUND(
        salary * 100.0 / SUM(salary) OVER (PARTITION BY department),
        2
    ) AS pct_of_dept_salary
FROM employees
ORDER BY department, pct_of_dept_salary DESC;

PARTITION BY cümlesi her departman için ayrı pencereler oluşturur. Her çalışanın maaşı, şirket toplamı yerine kendi departmanının toplamına bölünür. Bu ayrım, bunun yerine alt sorgu veya birleştirme kullanan birçok adayı yanıltır.

Soru: Tarihe göre satışların çalışan toplamını bulun, her ay sıfırlayarak.

sql
-- monthly_running_total.sql
SELECT
    sale_date,
    amount,
    SUM(amount) OVER (
        PARTITION BY DATE_TRUNC('month', sale_date)
        ORDER BY sale_date
        -- Default frame: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS monthly_running_total
FROM sales
ORDER BY sale_date;

Mülakatçılar, adayların varsayılan pencere çerçevesi davranışını bilmesini bekler. Açık bir ROWS veya RANGE cümlesi olmadan, çerçeve bölüm başlangıcından mevcut satıra kadar uzanır ve bu da çalışan toplam üretir. Bu kalıpları SQL pencere fonksiyonları modülü ile pratik yapın.

CTE ve Alt Sorgular: Karmaşık Sorguları Düzenleme

Ortak Tablo İfadeleri (CTE) sorguları okunabilir ve bakımı kolay hale getirir. Mülakatçılar, adayların monolitik ifadeler yazmak yerine sorguları mantıksal olarak yapılandırıp yapılandıramadığını değerlendirir.

Soru: Ardışık aylarda alışveriş yapan müşterileri bulun.

sql
-- consecutive_month_purchasers.sql
WITH monthly_purchases AS (
    -- Step 1: Get distinct customer-month combinations
    SELECT DISTINCT
        customer_id,
        DATE_TRUNC('month', purchase_date) AS purchase_month
    FROM orders
),
with_prev_month AS (
    -- Step 2: Add previous purchase month for each customer
    SELECT
        customer_id,
        purchase_month,
        LAG(purchase_month) OVER (
            PARTITION BY customer_id 
            ORDER BY purchase_month
        ) AS prev_purchase_month
    FROM monthly_purchases
)
-- Step 3: Filter to consecutive months only
SELECT DISTINCT customer_id
FROM with_prev_month
WHERE purchase_month = prev_purchase_month + INTERVAL '1 month';

Bu kalıp CTE'leri LAG pencere fonksiyonu ile birleştirir. Sorguyu adlandırılmış adımlara bölmek, mülakatçıların doğru cevap kadar değer verdiği düşünce sürecini gösterir.

Python Pandas: Veri Manipülasyonu Temelleri

Pandas soruları veri temizleme, toplama ve dönüştürme becerilerini test eder. Mülakatçılar düzensiz veri setleri sunar ve adaylardan içgörü çıkarmalarını ister.

Soru: Kullanıcı oturumlarının bir DataFrame'i verildiğinde, 10 saniyeden kısa oturumları hariç tutarak kullanıcı segmentine göre ortalama oturum süresini hesaplayın.

python
# session_analysis.py
import pandas as pd

def analyze_sessions(df: pd.DataFrame) -> pd.DataFrame:
    """Calculate average session duration by user segment.
    
    Args:
        df: DataFrame with columns [user_id, segment, session_start, session_end]
    
    Returns:
        DataFrame with average duration per segment
    """
    # Calculate duration in seconds
    df['duration_seconds'] = (
        df['session_end'] - df['session_start']
    ).dt.total_seconds()
    
    # Filter short sessions and aggregate
    return (
        df[df['duration_seconds'] >= 10]
        .groupby('segment')
        .agg(
            avg_duration=('duration_seconds', 'mean'),
            session_count=('user_id', 'count')
        )
        .round(2)
        .reset_index()
    )

Cevap, metod zincirleme, datetime işleme ve adlandırılmış çıktılarla agg fonksiyonunu gösterir. Mülakatçılar, adayların toplamadan önce mi yoksa sonra mı filtrelediğini kontrol eder; sonra filtrelemek ortalamaları çarpıtır.

Soru: İki DataFrame'i birleştirin ve eksik değerleri uygun şekilde işleyin.

python
# merge_and_clean.py
import pandas as pd
import numpy as np

def merge_user_data(
    users: pd.DataFrame,
    transactions: pd.DataFrame
) -> pd.DataFrame:
    """Merge user demographics with transaction history.
    
    Users without transactions get total_spent = 0.
    Transactions without user data are excluded.
    """
    merged = pd.merge(
        users,
        transactions.groupby('user_id')['amount'].sum().reset_index(),
        on='user_id',
        how='left'  # Keep all users, even without transactions
    )
    
    # Fill NaN for users with no transactions
    merged['amount'] = merged['amount'].fillna(0)
    merged.rename(columns={'amount': 'total_spent'}, inplace=True)
    
    return merged

how='left' parametresi ve açık fillna işleme, sınır durumlarına dikkat gösterir. how='inner' kullanan adaylar işlem yapmamış kullanıcıları kaybeder ve bu analiz popülasyonunu değiştirir.

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

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

İstatistiksel Kavramlar: Analistlerin Net Açıklaması Gereken Konular

İstatistik soruları, adayların kavramları gerçek iş problemlerine uygulayıp uygulayamadığını ve bulguları paydaşlara iletip iletemediğini değerlendirir.

Soru: Bir ürün yöneticisi yeni ödeme akışının dönüşümü %5 artırdığını iddia ediyor. Test, varyant başına 10.000 kullanıcıyla bir hafta sürdü. Bu sonuç istatistiksel olarak anlamlı mı?

Tam bir cevap örneklem büyüklüğü, istatistiksel güç ve pratik anlamlılığı ele alır:

  1. Standart hatayı hesaplayın: Dönüşüm oranları için SE = sqrt(p(1-p)/n). %10 temel dönüşüm ve n=10.000 ile SE yaklaşık 0,003'tür.

  2. Z-skorunu hesaplayın: %5 göreli artış, yeni dönüşümün %10,5 olduğu anlamına gelir. 0,5 yüzde puanlık fark, birleştirilmiş SE'ye bölünerek anlamlılık belirlenir.

  3. Pratik anlamlılığı değerlendirin: p < 0,05 olsa bile, 0,5 yüzde puanlık artış yeni akışın mühendislik maliyetini haklı çıkarmayabilir.

  4. Karıştırıcı faktörleri kontrol edin: Bir hafta, hafta sonu ve hafta içi kalıplarını yakalar ancak aylık döngüleri veya mevsimsel etkileri kaçırabilir.

Mülakatçılar, p değerlerini mekanik olarak hesaplamak yerine varsayımları sorgulayan adayları değerli bulur. Veri görselleştirme ilkeleri modülü bu bulguların nasıl sunulacağını kapsar.

Soru: Korelasyon ve nedensellik arasındaki farkı bir iş örneğiyle açıklayın.

Dondurma satışları ve boğulma ölümleri pozitif korelasyon gösterir. Her ikisi de sıcaklık karıştırıcı değişkeni nedeniyle yazın artar. Boğulmaları önlemek için dondurma üretiminin azaltılmasını önermek, korelasyonu nedensellikle karıştırır.

İş analitiğinde: reklam harcaması ve gelir genellikle korelasyon gösterir, ancak ilişki, şirketlerin gelir tahminleri zaten güçlü olduğunda reklam harcamasını artırmasını yansıtıyor olabilir, reklamların gelir yarattığını değil. Nedensellik kurmak, kontrollü deneyler veya fark içinde fark gibi nedensel çıkarım teknikleri gerektirir.

İş Vakası Soruları: Problemleri Sorgulara Dönüştürme

Vaka soruları, belirsiz iş problemlerini somut analitik adımlara ayırma yeteneğini test eder.

Soru: Kullanıcı tutma oranı geçen ay %15 düştü. Bunu nasıl araştırırsınız?

Yapılandırılmış bir yaklaşım:

  1. Metriği doğrulayın: Tutma tanımının geçmiş hesaplamalarla eşleştiğini onaylayın. Veri boru hattı sorunlarını veya izleme değişikliklerini kontrol edin.

  2. Düşüşü segmentlere ayırın: Tutmayı kullanıcı kohortu, edinim kanalı, cihaz türü ve coğrafyaya göre ayırın. %15'lik genel düşüş, başka yerlerdeki istikrarı maskeleyen bir segmentte %50'lik düşüş olabilir.

  3. Zamanlamayı belirleyin: Tutma yavaş yavaş mı yoksa aniden mi düştü? Ani bir düşüş, ürün değişikliği veya hata önerir. Kademeli düşüş, pazar veya rekabet faktörlerine işaret eder.

  4. Olaylarla ilişkilendirin: Zaman çizelgesini ürün sürümleri, pazarlama kampanyaları, rakip lansmanları ve dış olaylarla hizalayın.

  5. Hipotezler oluşturun: Segmentasyon kalıplarına dayanarak test edilebilir açıklamalar ve her birini doğrulamak veya reddetmek için gereken verileri önerin.

sql
-- retention_by_cohort.sql
WITH user_cohorts AS (
    SELECT
        user_id,
        DATE_TRUNC('week', created_at) AS cohort_week
    FROM users
),
weekly_activity AS (
    SELECT
        user_id,
        DATE_TRUNC('week', activity_date) AS activity_week
    FROM user_events
)
SELECT
    c.cohort_week,
    a.activity_week,
    COUNT(DISTINCT a.user_id) AS active_users,
    COUNT(DISTINCT c.user_id) AS cohort_size,
    ROUND(
        COUNT(DISTINCT a.user_id) * 100.0 / COUNT(DISTINCT c.user_id),
        1
    ) AS retention_pct
FROM user_cohorts c
LEFT JOIN weekly_activity a 
    ON c.user_id = a.user_id 
    AND a.activity_week >= c.cohort_week
GROUP BY c.cohort_week, a.activity_week
ORDER BY c.cohort_week, a.activity_week;

Bu kohort analizi sorgusu, 2. adım için gereken verileri üretir. Kohort tutma modülü bu kalıbın varyasyonlarını kapsar.

Ev Ödevleri: Değerlendiriciler Nelere Bakar

Birçok şirket 2 ila 4 saat süren ev ödevleri içerir. Değerlendiriciler, gönderileri kod kalitesi, analitik titizlik ve iletişim açısından puanlar.

Yaygın ödev: Bir e-ticaret işlem veri seti verildiğinde, müşteri kaybını tahmin eden faktörleri belirleyin.

Güçlü gönderimler şu özellikleri paylaşır:

  • Önce keşifsel analiz: Modelleme öncesi özet istatistikler, dağılım grafikleri ve eksik değer değerlendirmesi
  • Özellik mühendisliği: Yenilik, sıklık, parasal değer (RFM) ve trend göstergeleri gibi ilgili özellikler oluşturma
  • Model seçimi gerekçesi: Lojistik regresyon veya rastgele ormanın probleme neden uyduğunu açıklama, sadece varsayılanları çalıştırmak değil
  • Doğrulama yaklaşımı: Veri sızıntısını önlemek için rastgele bölmeler yerine zaman tabanlı bölmeler kullanma
  • Net iletişim: Üstte yönetici özeti, teknik detaylar ekte, sonuçları destekleyen görselleştirmeler
python
# churn_analysis_structure.py
import pandas as pd
from sklearn.model_selection import TimeSeriesSplit
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import precision_recall_curve, auc

def create_rfm_features(df: pd.DataFrame, analysis_date: str) -> pd.DataFrame:
    """Create Recency, Frequency, Monetary features per customer."""
    analysis_dt = pd.to_datetime(analysis_date)
    
    rfm = df.groupby('customer_id').agg(
        recency=('order_date', lambda x: (analysis_dt - x.max()).days),
        frequency=('order_id', 'nunique'),
        monetary=('order_total', 'sum')
    ).reset_index()
    
    return rfm

def evaluate_with_time_split(
    X: pd.DataFrame, 
    y: pd.Series,
    n_splits: int = 5
) -> list:
    """Evaluate model using time-based cross-validation."""
    tscv = TimeSeriesSplit(n_splits=n_splits)
    scores = []
    
    for train_idx, val_idx in tscv.split(X):
        model = RandomForestClassifier(n_estimators=100, random_state=42)
        model.fit(X.iloc[train_idx], y.iloc[train_idx])
        
        y_pred_proba = model.predict_proba(X.iloc[val_idx])[:, 1]
        precision, recall, _ = precision_recall_curve(y.iloc[val_idx], y_pred_proba)
        scores.append(auc(recall, precision))
    
    return scores

Kod, alan ile ilgili özellik mühendisliğini ve zaman serisi verileri için uygun doğrulama metodolojisini gösterir.

2026'da Veri Analisti Mülakatları İçin Temel Çıkarımlar

  • PARTITION BY ve ORDER BY ile SQL pencere fonksiyonları çoğu teknik mülakatta yer alır. Çalışan toplamlar, yüzdeler ve sıralamalar hesaplama pratiği yapın.

  • Python pandas soruları metod zincirleme, groupby toplamaları ve eksik değerlerin uygun işlenmesiyle birleştirme işlemlerini vurgular.

  • İstatistik soruları kavramların iş terimleriyle açıklanmasını gerektirir. Mülakatçılar sadece teknik bilgiyi değil, iletişim yeteneğini değerlendirir.

  • İş vakası soruları yapılandırılmış problem ayrıştırmayı test eder. Metriği doğrulayarak başlayın, ardından sorunu izole etmek için segmentlere ayırın.

  • Ev ödevleri, analitik doğruluk kadar kod kalitesi ve iletişim açısından da puanlanır. Yönetici özeti ekleyin ve seçimlerinizi açıklayın.

  • BigQuery ileri seviye modülü ve Python pandas temelleri modülü mevcut mülakat kalıplarıyla uyumlu ek alıştırma soruları sağlar.

Pratik yapmaya başla!

Mülakat simülatörleri ve teknik testlerle bilgini test et.

Günün meydan okuması

Data Analytics kodundaki hatayı bulabilir misin?

Gerçek bir kod parçası, gizli bir hata, günde bir deneme. Denemek için hesap gerekmez.

Anthony Fillion-Maillet

Yazan:

Anthony Fillion-Maillet

SharpSkill kurucusu

10 yılı aşkın süredir fullstack geliştirici. SharpSkill’i yönetiyor ve burada yayımlanan her şeyden sorumlu.

8 Eylül 2026 tarihinde güncellendi

Etiketler

#data-analytics
#sql
#python
#pandas
#interview

Paylaş

İlgili makaleler