Pandas & NumPy Academy · Ders

Pandas ve SQL: Doğru Aracı Seçme

Pandas'taki groupby/merge işlemlerini SQL'deki GROUP BY/JOIN ile karşılaştırın ve her dönüşümü hangi katmanın yapması gerektiğine karar verin.

4. ders / 413 adım

Pandas ve SQL: Doğru Aracı Seçme, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Pandas & NumPy Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.

İki Araç, Birbirini Tamamlayan Güçlü Yönler

Hem Pandas hem de SQL veri işleme araçlarıdır ve her ikisi de profesyonel veri analistleri tarafından kullanılır. Temel nokta, bunların rakip değil, birbirini tamamlayan araçlar olmasıdır: SQL, ilişkisel veritabanlarında saklanan büyük tablolar üzerinde bildirimsel küme tabanlı işlemlerde başarılıyken Pandas, belleğe yüklenmiş veriler üzerinde zorunlu, satır satır ve karmaşık algoritmik dönüşümlerde başarılıdır. En iyi pipeline'lar her aracı en iyi yaptığı iş için kullanır.

SQL'in Güçlü Yönleri: SQL'in Daha İyi Yaptığı İşler

SQL genellikle şu durumlarda daha üstündür: veri büyükse (gigabaytlar ile terabaytlar arasında) ve yüklenmeden önce filtrelenmesi gerekiyorsa; JOIN işlemleri birden çok büyük tabloyu kapsıyorsa ve veritabanı dizinleri hızda büyük artış sağlıyorsa; toplulaştırmalar basitse (SUM, COUNT, GROUP BY); sonuç kümeleri girdiye göre küçükse veya eşzamanlı okuma/yazma gerekiyorsa (veritabanı işlemleri ve kilitlemeyi yönetir). SQL'in bildirimsel söz dizimi, sorgu iyileştiricilerin en iyi fiziksel planı otomatik olarak seçmesine de olanak tanır.

-- SQL excels at:
-- 1. Filtering billions of rows using an index
SELECT * FROM orders WHERE customer_id = 12345;

-- 2. Joining large tables efficiently
SELECT o.order_id, c.name, SUM(o.amount)
FROM orders o
JOIN customers c ON o.customer_id = c.id
GROUP BY o.order_id, c.name;

-- 3. Window functions on ordered data
SELECT order_id, amount,
       SUM(amount) OVER (PARTITION BY customer_id ORDER BY order_date)
FROM orders;

Pandas'ın Güçlü Yönleri: Pandas'ın Daha İyi Yaptığı İşler

Pandas genellikle şu durumlarda daha üstündür: SQL'in ifade edemediği özel Python mantığına ihtiyacınız varsa (makine öğrenmesi için ön işleme, özel dize ayrıştırma, karmaşık algoritmalar); veri dönüşümü zincirleri çok sayıda adımdan oluşuyorsa; analizden hemen sonra görselleştirme yapmanız gerekiyorsa; veri zaten bellekteyse ve ek SQL gidiş-dönüşleri gecikme oluşturacaksa veya etkileşimli yineleme yapmak istediğiniz keşifsel analiz yürütüyorsanız. Pandas ayrıca matris hesaplama ve zaman serisi yumuşatma gibi tablo biçiminde olmayan işlemleri de destekler.

import pandas as pd

# Pandas excels at:
# 1. Custom Python logic that SQL cannot express
df['clean_name'] = df['name'].str.strip().str.title().str.replace(r'[^a-zA-Z ]', '', regex=True)

# 2. Vectorised string parsing
df[['first', 'last']] = df['full_name'].str.split(' ', n=1, expand=True)

# 3. Rolling statistics and time series
df['7day_avg'] = df['daily_sales'].rolling(7).mean()

# 4. Direct visualisation
# df.groupby('category')['sales'].sum().plot(kind='bar')

SQL İşlemlerini Pandas'a Eşleme

Çoğu SQL işleminin Pandas'ta doğrudan bir karşılığı vardır. Her iki söz dizimini bilmek sizi daha yetkin kılar ve araçlar arasında geçiş yaparken bunları birbirine çevirmenize yardımcı olur. WHERE, boole dizinlemeye veya .query()'ye; GROUP BY + SUM, .groupby().sum()'a; JOIN, pd.merge()'e; ORDER BY, .sort_values()'a ve DISTINCT, .drop_duplicates()'a dönüşür. Anlamsal anlam aynıdır; yalnızca söz dizimi farklıdır.

import pandas as pd

df = pd.DataFrame({'region': ['N','S','N','E'], 'amount': [100,200,150,300]})

# SQL: SELECT region, SUM(amount) FROM df WHERE amount>100 GROUP BY region ORDER BY region
# Pandas:
result = (
    df[df['amount'] > 100]
    .groupby('region')['amount']
    .sum()
    .reset_index()
    .sort_values('region')
)
print(result)

Veri Boyutunun Seçimi Belirlediği Durumlar

Veri boyutuna dayalı pratik bir karar çerçevesi: 100 MB'ın altında — tamamen Pandas kullanın; SQL ek yüküne değmez; 100 MB – 10 GB — SQL'de filtreleyip toplulaştırın, özet bir DataFrame'i Pandas'a yükleyin; 10 GB – 1 TB — işleme için SQL veya Dask kullanın, Pandas'ı yalnızca son özet için kullanın; 1 TB'ın üzerinde — dağıtık SQL kullanın (BigQuery, Spark SQL, Redshift). 100 GB'lık bir tabloyu 16 GB RAM'li bir dizüstü bilgisayarda Pandas'a yüklemeye asla çalışmayın; program çöker veya disk aşırı çalışır.

import pandas as pd
import sqlalchemy as sa

engine = sa.create_engine('sqlite:///large.db')

# Right approach: SQL handles the heavy lifting
summary_df = pd.read_sql_query(
    '''
    SELECT region, product_category,
           SUM(revenue) AS total_revenue,
           COUNT(DISTINCT customer_id) AS unique_customers
    FROM orders
    WHERE order_date >= '2024-01-01'
    GROUP BY region, product_category
    ''',
    con=engine
)
# summary_df is small — now do Pandas things on it
print(summary_df.sort_values('total_revenue', ascending=False))

SQL Pencere İşlevleri ve Pandas Rolling

SQL'in pencere işlevleri (OVER (PARTITION BY ... ORDER BY ...)) güçlüdür ancak sınırlamaları vardır: hareketli sıralamaları, gecikme/ilerleme değerlerini ve basit hareketli toplulaştırmaları iyi hesaplar; ancak karmaşık hareketli istatistikler (örneğin hareketli Pearson korelasyonu) SQL'de ifade edilemez. Pandas'ın rolling() ve expanding() işlevleri, .apply() aracılığıyla özel işlevler de dahil olmak üzere çok daha geniş bir pencere hesaplama yelpazesini kapsar. Büyük verilerde standart pencere işlevleri için SQL'i, karmaşık pencere mantığı için Pandas'ı tercih edin.

import pandas as pd

df = pd.DataFrame({
    'date': pd.date_range('2024-01-01', periods=30),
    'sales': [100 + i*10 + (i%7)*20 for i in range(30)]
})

# Pandas rolling — easy with arbitrary window functions
df['7d_mean'] = df['sales'].rolling(7).mean()
df['7d_std']  = df['sales'].rolling(7).std()
df['7d_corr'] = df['sales'].rolling(7).corr(df['sales'].shift(1))
print(df.tail())

Karmaşık Birleştirmeler: Pandas'ın Esnekliği

SQL birleştirmeleri (bazı istisnalar dışında) anahtar eşitliğine dayanır. Pandas'ın pd.merge_asof() işlevi esnek zaman tabanlı birleştirmeleri destekler; tam eşleşme yerine en yakın anahtarı eşleştirir. Bu özellik, zaman serilerini hizalamak için çok değerlidir (örneğin hisse senedi fiyatlarını, kendisinden önceki en yakın fiyattaki işlem olaylarıyla birleştirmek). Pandas ayrıca merge işleminin ardından filtreleme kullanarak koşullu birleştirmeleri de destekler; SQL'de bunu ifade etmek için alt sorgu veya LATERAL birleştirmesi gerekir. Bu gelişmiş birleştirme kalıpları, Pandas'ın açıkça öne çıktığı alanlardan biridir.

import pandas as pd

trades = pd.DataFrame({
    'time': pd.to_datetime(['2024-01-01 10:00', '2024-01-01 10:05', '2024-01-01 10:12']),
    'symbol': ['AAPL', 'AAPL', 'AAPL'],
    'shares': [100, 200, 50]
})
prices = pd.DataFrame({
    'time': pd.to_datetime(['2024-01-01 10:00', '2024-01-01 10:10']),
    'price': [185.0, 186.5]
})

# Fuzzy join: match each trade to the nearest preceding price
result = pd.merge_asof(trades.sort_values('time'),
                       prices.sort_values('time'),
                       on='time', direction='backward')
print(result)

Veri Profilleme için Pandas, Üretim için SQL

Yaygın bir iş akışı kalıbı şöyledir: temsili bir örnek üzerinde (örneğin ilk milyon satır) EDA ve veri profilleme için Pandas kullanın, dönüşüm mantığınızı yinelemeli olarak geliştirin, ardından temel adımları üretim ölçeği için SQL'e çevirin. Pandas, anında görsel geri bildirimle hızlı yinelemeye olanak tanır; SQL ise asgari altyapıyla büyük ölçekte güvenilir biçimde çalışır. İkisini eş zamanlı tutun: Pandas'a yeni bir özellik eklediğinizde üretim için eşdeğer SQL saklı yordamını veya görünümünü yazın.

import pandas as pd
import sqlalchemy as sa

engine = sa.create_engine('sqlite:///data.db')

# Development: sample in Pandas for fast iteration
df_sample = pd.read_sql_query(
    'SELECT * FROM orders ORDER BY RANDOM() LIMIT 10000',
    con=engine
)
# Explore and prototype:
df_sample['revenue_tier'] = pd.cut(
    df_sample['amount'],
    bins=[0, 100, 500, float('inf')],
    labels=['low', 'mid', 'high']
)
print(df_sample['revenue_tier'].value_counts())
# Production: translate cut logic to SQL CASE WHEN

pandasql: DataFrame'ler Üzerinde SQL Yazma

pandasql kütüphanesi, arka planda SQLite kullanarak doğrudan Pandas DataFrame'leri üzerinde SQL sorguları yazmanızı sağlar. sqldf('SELECT * FROM df WHERE amount > 100', locals()), sorguyu df DataFrame'i üzerinde çalıştırır. Bu, SQL ile düşünüyorsanız ancak verileriniz zaten Pandas'taysa veya bellek içi verilerle SQL kavramlarını öğretmek için kullanışlıdır. Bununla birlikte çoğu işlemde yerel Pandas'tan daha yavaştır; performans için değil, aşinalık kazanmak için kullanın.

# pip install pandasql
import pandas as pd
# from pandasql import sqldf

df = pd.DataFrame({
    'product': ['A', 'B', 'A', 'C', 'B'],
    'sales': [100, 200, 150, 80, 220]
})

# With pandasql (commented out as it requires install):
# result = sqldf('SELECT product, SUM(sales) AS total FROM df GROUP BY product', locals())

# Equivalent native Pandas:
result = df.groupby('product')['sales'].sum().reset_index()
print(result)

Karar Çerçevesi: Hızlı Başvuru

SQL ile Pandas arasında seçim yaparken bu karar kılavuzunu kullanın:

  • Veri bir veritabanında VE büyük mü? Önce SQL'de filtreleyip toplulaştırın.
  • Özel Python mantığına mı ihtiyacınız var? SQL ön filtresinden sonra Pandas kullanın.
  • Bir örnek üzerinde keşifsel analiz mi yapıyorsunuz? Pandas daha hızlı yineleme sağlar.
  • Karmaşık hareketli istatistikler içeren zaman serileri mi var? Pandas rolling/ewm kullanın.
  • Milyonlarca satır üzerinde basit bir GROUP BY mı gerekiyor? Dizinlerle birlikte SQL kullanın.
  • Birden çok küçük DataFrame zaten bellekte mi? pd.merge() uygundur.
  • ACID işlemlerine mi ihtiyacınız var? Pandas yerine SQL veritabanı kullanın.

İkisini Birleştirme: Hibrit Pipeline

En pratik yaklaşım, her aracın güçlü yönlerinden yararlanan melez bir işlem hattıdır. SQL; büyük ham tablolar üzerinde veri almayı, kaba filtrelemeyi ve standart toplulaştırmaları gerçekleştirir. Çıktı — yönetilebilir bir DataFrame — özellik mühendisliği, özel ölçümler, hareketli istatistikler ve görselleştirme için Pandas'a aktarılır. Sonuçlar, sunulmak üzere isteğe bağlı olarak veritabanına geri yazılır. Bu işlem hattı, hem SQL hem de Python bilen her analistin okuyabileceği, ölçeklenebilir ve sürdürülebilir bir yapıdadır.

import pandas as pd
import sqlalchemy as sa

engine = sa.create_engine('sqlite:///pipeline.db')

# Step 1: SQL coarse aggregation
df = pd.read_sql_query('''
    SELECT DATE(order_date) AS date, region, SUM(amount) AS daily_revenue
    FROM orders WHERE status = 'completed'
    GROUP BY DATE(order_date), region
    ORDER BY date
''', con=engine, parse_dates=['date'])

# Step 2: Pandas rolling and pivoting (hard in SQL)
df['7d_avg'] = df.groupby('region')['daily_revenue'].transform(
    lambda x: x.rolling(7, min_periods=1).mean()
)
pivot = df.pivot(index='date', columns='region', values='7d_avg')
print(pivot.tail())

Kısa Kontrol

Bu dersteki Veri Analizi kavramlarını anlayıp anlamadığınızı test edin.

Ders Özeti

Bu derste şunları öğrendiniz: SQL, dizinlenmiş veriler üzerinde büyük ölçekli filtreleme, birleştirme ve basit toplulaştırmalarda başarılıdır; Pandas, özel Python mantığı, karmaşık hareketli istatistikler ve keşifsel analizlerde başarılıdır. En iyi strateji, kaba veri azaltma için SQL'i, yönetilebilir sonuç üzerinde karmaşık dönüşümler için Pandas'ı kullanan bir melez işlem hattıdır. Sırada SciPy ile çıkarımsal istatistikler var: normallik testi ve betimsel istatistikler.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Python öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
30
Dersler
120

Sıkça Sorulan Sorular

“Pandas ve SQL: Doğru Aracı Seçme” dersi ücretsiz mi?

Evet — “Pandas ve SQL: Doğru Aracı Seçme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Pandas & NumPy Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.

“Pandas ve SQL: Doğru Aracı Seçme” dersinde ne öğreneceğim?

Pandas'taki groupby/merge işlemlerini SQL'deki GROUP BY/JOIN ile karşılaştırın ve her dönüşümü hangi katmanın yapması gerektiğine karar verin. Pandas & NumPy Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Pandas & NumPy Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Pandas & NumPy Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Pandas ve SQL: Doğru Aracı Seçme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Pandas & NumPy Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Pandas & NumPy Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. SQLAlchemy ile Veritabanına Bağlanma
  2. Pandas'tan SQL Sorguları Çalıştırma
  3. DataFrame'leri Veritabanı Tablolarına Yazma
  4. Pandas ve SQL: Doğru Aracı Seçme
← Pandas & NumPy Academy Sayfasına Dön