Sql & Veritabanı İle Uygulamalar İçin Veri İstatistiksel Analizi Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Bu eğitimde yer alan örnekleri uygulayabilmek için modern bir ilişkisel veritabanı yönetim sistemine (RDBMS) ihtiyacınız vardır. PostgreSQL 16+ veya MySQL 8.0+ sürümleri, gelişmiş istatistiksel fonksiyonları desteklediği için önerilir. Ayrıca, veritabanı ile etkileşim kurmak için DBeaver veya pgAdmin gibi bir veritabanı yönetim aracı kullanmanız süreci kolaylaştıracaktır.

  • Veritabanı: PostgreSQL 16 veya MySQL 8.0 ve üzeri.
  • Veri Seti: Analiz için en az 10.000 satırlık, sayısal değerler içeren bir tablo (örneğin: satislar tablosu).
  • Araçlar: SQL sorgularını çalıştırabileceğiniz bir arayüz (IDE).

Temel İstatistiksel Özet: Merkezi Eğilim Ölçüleri

Veri analizinin ilk adımı, verinin genel karakterini anlamaktır. Merkezi eğilim ölçüleri olan ortalama (mean), medyan (median) ve mod, verinin "merkezini" anlamanızı sağlar. SQL'de AVG() fonksiyonu ile ortalamayı kolayca hesaplayabilirsiniz.

-- Satış tutarlarının ortalamasını hesaplama
SELECT 
    AVG(tutar) AS ortalama_satis,
    MIN(tutar) AS en_dusuk_satis,
    MAX(tutar) AS en_yuksek_satis
FROM satislar;

Yukarıdaki sorgu, veri setinizin sınırlarını ve genel ağırlık merkezini görmenizi sağlar. Ancak, ortalama tek başına yanıltıcı olabilir; bu yüzden medyan değerini de kontrol etmek önemlidir.

Veri Dağılımını Anlamak: Standart Sapma ve Varyans

Verinin ortalamadan ne kadar uzaklaştığını anlamak, sisteminizdeki dengesizlikleri tespit etmek için kritiktir. Standart sapma, verinin ne kadar "yaygın" olduğunu gösterir. Düşük standart sapma, verilerin ortalamaya yakın olduğunu; yüksek standart sapma ise büyük farklılıklar olduğunu ifade eder.

-- Satış tutarlarının standart sapma ve varyans hesabı
SELECT 
    STDDEV(tutar) AS standart_sapma,
    VARIANCE(tutar) AS varyans
FROM satislar;

Bu değerler, özellikle kullanıcı harcama alışkanlıklarını analiz ederken, "normal" bir kullanıcının ne kadar harcama yaptığını belirlemek için kullanılır. Eğer standart sapma çok yüksekse, veride aykırı değerler (outliers) olabilir.

Gruplandırılmış Analiz: Kategorik İstatistikler

Uygulamalarınızda veriyi kategorilere göre (örneğin; ürün kategorisi, bölge veya kullanıcı tipi) analiz etmek, daha derin içgörüler sağlar. GROUP BY ifadesi ile bu işlemi gerçekleştirebilirsiniz.

-- Kategori bazlı ortalama satış ve adet analizi
SELECT 
    kategori_adi,
    COUNT(*) AS islem_sayisi,
    AVG(tutar) AS ortalama_satis,
    SUM(tutar) AS toplam_ciro
FROM satislar
GROUP BY kategori_adi
ORDER BY toplam_ciro DESC;

Bu sorgu, hangi kategorinin en çok ciro getirdiğini ve işlem başına ortalama değerin ne olduğunu görmenizi sağlar. İşletme kararlarında en çok kullanılan yöntemlerden biridir.

Veri Analizi Yöntemleri Karşılaştırma Tablosu

Yöntem Kullanım Amacı Avantajı Dezavantajı
AVG() Merkezi Eğilim Hızlı ve basit Aykırı değerlerden etkilenir
STDDEV() Dağılım Analizi Veri tutarlılığını ölçer Yorumlaması uzmanlık gerektirir
GROUP BY Segmentasyon Detaylı içgörü sağlar Büyük veride performans düşebilir

Aykırı Değerleri (Outliers) Tespit Etme

İstatistiksel analizde en büyük tehlike, veriyi bozan aykırı değerlerdir. Örneğin, bir kullanıcının yanlışlıkla çok yüksek bir işlem yapması ortalamayı yukarı çeker. Aykırı değerleri tespit etmek için "Z-Skoru" mantığını kullanabilirsiniz.

-- Ortalamadan 3 standart sapma uzaklıktaki verileri bulma
WITH istatistikler AS (
    SELECT AVG(tutar) AS ort, STDDEV(tutar) AS sd FROM satislar
)
SELECT s.*
FROM satislar s, istatistikler i
WHERE ABS(s.tutar - i.ort) > (3 * i.sd);

Bu sorgu, istatistiksel olarak "normal" kabul edilmeyen, aşırı sapma gösteren kayıtları listeler. Bu kayıtları temizlemek veya incelemek, analizinizin doğruluğunu artırır.

Kritik Güvenlik Uyarısı: Veritabanı üzerinde analiz yaparken her zaman SELECT sorguları kullanın. Analiz süreçlerinde asla DELETE veya UPDATE işlemlerini doğrudan bir analiz sorgusuna bağlamayın. SQL Injection riskine karşı, kullanıcıdan gelen parametreleri (örneğin tarih aralıkları) mutlaka prepared statements kullanarak sorguya dahil edin.

Zaman Serisi Analizi: Trendleri Belirleme

Zaman içerisindeki değişimi izlemek, uygulamaların büyüme hızını analiz etmek için vazgeçilmezdir. SQL'de DATE_TRUNC veya EXTRACT fonksiyonları ile veriyi aylık veya haftalık periyotlara bölebilirsiniz.

-- Aylık bazda satış trendi analizi
SELECT 
    DATE_TRUNC('month', islem_tarihi) AS ay,
    SUM(tutar) AS aylik_toplam
FROM satislar
GROUP BY 1
ORDER BY 1;

Bu sorgu, uygulamanızın hangi aylarda pik yaptığını ve hangi dönemlerde düşüş yaşadığını görselleştirmenize olanak tanır.

Sıkça Sorulan Sorular

SQL'de medyan (median) nasıl hesaplanır?

SQL standartlarında doğrudan bir MEDIAN() fonksiyonu her veritabanında bulunmaz. PostgreSQL'de PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY tutar) sözdizimini kullanarak medyan değerine kolayca ulaşabilirsiniz.

Çok büyük veritabanlarında analiz sorguları yavaş çalışıyor, ne yapmalıyım?

Analiz edilen sütunlara mutlaka INDEX eklemelisiniz. Ayrıca, çok büyük tablolar için tüm veriyi sorgulamak yerine, belirli bir tarih aralığına göre filtreleme yapın veya "Materialized View" (materyalleştirilmiş görünüm) kullanarak veriyi önceden hesaplanmış tablolar halinde tutun.

Aykırı değerleri (outliers) silmeli miyim?

Aykırı değerleri silmek her zaman doğru değildir. Eğer bu değerler bir sistem hatasından (örneğin yazılım hatası) kaynaklanıyorsa silinmelidir; ancak gerçek kullanıcı davranışlarını yansıtıyorsa (örneğin "balina" kullanıcılar), bu verileri ayrı bir segment olarak analiz etmek daha değerlidir.

SQL ile tahminleme (prediction) yapılabilir mi?

Temel regresyon analizlerini SQL içerisinde REGR_SLOPE ve REGR_INTERCEPT fonksiyonları ile yapabilirsiniz. Ancak gelişmiş makine öğrenmesi modelleri için veriyi SQL ile hazırlayıp dış bir kütüphaneye aktarmak daha profesyonel bir yaklaşımdır.

Veri gizliliği için istatistiksel analizde nelere dikkat etmeliyim?

Kullanıcı bazlı verileri analiz ederken, kişisel verileri (KVKK kapsamında) maskelemeli veya anonimleştirmelisiniz. İstatistiksel analizlerde bireysel kayıtlar yerine toplu (aggregate) verilerle çalışmak, veri gizliliğini korumanın en güvenli yoludur.

SQL İstatistiksel Analizlerinde Performans Optimizasyonu ve İndeksleme Stratejileri

Veri analizi sorguları, özellikle milyonlarca satırlık tablolarda çalıştırıldığında veritabanı kaynaklarını yoğun bir şekilde tüketir. İstatistiksel fonksiyonlar (AVG, STDDEV, PERCENTILE_CONT) tam tablo taraması (full table scan) yapma eğilimindedir. Performansı artırmak için aşağıdaki stratejileri uygulayabilirsiniz:

İstatistiksel Sorgular İçin Kapsayıcı İndeksler (Covering Indexes)

Sorgularınızda sıkça kullandığınız sütunlar için indeks oluşturmak, veritabanının tabloya gitmeden sadece indeks üzerinden sonuç döndürmesini sağlar. Örneğin, satış verileri üzerinde aylık ortalama hesaplıyorsanız, tarih ve tutar sütunlarını içeren bir bileşik indeks (composite index) oluşturun.

-- Performans odaklı bileşik indeks oluşturma
CREATE INDEX idx_sales_date_amount ON sales (sale_date, amount);

-- İndeks kullanımı ile optimize edilmiş sorgu
SELECT 
    DATE_TRUNC('month', sale_date) AS sale_month,
    AVG(amount) OVER(PARTITION BY DATE_TRUNC('month', sale_date)) as avg_amount
FROM sales
WHERE sale_date >= '2023-01-01';

Analitik Sorgularda Materialized View Kullanımı

İstatistiksel verileriniz anlık olarak değişmiyorsa (örneğin günlük raporlar), her sorguda yeniden hesaplama yapmak yerine Materialized View kullanarak veriyi önceden hesaplanmış bir tabloda tutabilirsiniz. Bu, karmaşık istatistiksel sorguların yanıt süresini milisaniyelere indirir.

-- Özet veriler için materialized view oluşturma
CREATE MATERIALIZED VIEW mv_monthly_stats AS
SELECT 
    DATE_TRUNC('month', sale_date) as month,
    COUNT(*) as total_orders,
    SUM(amount) as total_revenue
FROM sales
GROUP BY 1;

-- İhtiyaç duyulduğunda veriyi güncelleme
REFRESH MATERIALIZED VIEW mv_monthly_stats;

İleri Seviye Veri Analizi: SQL İle Korelasyon Analizi

İstatistiksel analizde sadece tekil değişkenlerin dağılımı değil, iki değişken arasındaki ilişki de kritiktir. SQL kullanarak iki sayısal sütun arasındaki Pearson korelasyon katsayısını hesaplayarak, değişkenlerin birbirini nasıl etkilediğini görebilirsiniz.

Korelasyon Katsayısı Hesaplama

Korelasyon katsayısı -1 ile +1 arasında bir değer alır. +1 güçlü pozitif ilişkiyi, -1 güçlü negatif ilişkiyi, 0 ise ilişki olmadığını gösterir. PostgreSQL gibi gelişmiş SQL motorlarında yerleşik CORR() fonksiyonu ile bu işlem oldukça basittir.

-- Reklam harcaması ile satış miktarı arasındaki korelasyon
SELECT 
    CORR(ad_spend, sales_amount) AS correlation_coefficient
FROM marketing_data;

Eğer kullandığınız SQL motoru CORR() fonksiyonunu desteklemiyorsa, matematiksel formülü (kovaryansın standart sapmaların çarpımına oranı) kullanarak manuel olarak hesaplayabilirsiniz:

-- Manuel korelasyon hesaplama (Pearson)
SELECT 
    (AVG(x * y) - AVG(x) * AVG(y)) / (STDDEV(x) * STDDEV(y)) AS pearson_corr
FROM (
    SELECT ad_spend AS x, sales_amount AS y 
    FROM marketing_data
) AS data;

İpucu: Korelasyon analizi yaparken, verilerinizdeki NULL değerlerin sonucu bozabileceğini unutmayın. Analiz öncesi WHERE sütun IS NOT NULL filtresini kullanarak veriyi temizlediğinizden emin olun.

Sonuç

SQL & Veritabanı ile veri istatistiksel analizi yapmak, sadece teknik bir beceri değil, aynı zamanda iş süreçlerini iyileştiren bir vizyondur. Bu rehberde öğrendiğiniz ortalama, standart sapma, gruplandırma ve aykırı değer tespiti yöntemleri, veritabanınızdaki ham veriyi stratejik bir bilgiye dönüştürmenizi sağlayacaktır. Bir sonraki adım olarak, bu SQL sorgularını bir görselleştirme aracı (Grafana, PowerBI veya Tableau) ile bağlayarak canlı dashboardlar oluşturmayı deneyebilirsiniz. Unutmayın; veriyi anlamak, onu yönetmenin ilk ve en önemli adımıdır.

Sorumluluk Reddi: Bu makalede paylaşılan SQL kodları ve analiz yöntemleri genel eğitim amaçlıdır. Üretim (production) ortamlarında çalıştırmadan önce mutlaka bir test ortamında doğrulama yapmalı ve veritabanı performansını gözlemlemelisiniz.

Bu yazıya tepkinizi paylaşın:
Kerem Demir

Mutfak pratikleri ve ev ekonomisi konularında uzmanlaşmış bir editörüm. Okuyucularıma bütçe dostu ve uygulanabilir yaşam tavsiyeleri sunuyorum.

Yorumlar (0)

Yorum Yaz