CSV dosyalarındaki ham verileri anlamlı özetlere dönüştürmek, iş zekası ve veri analizi süreçlerinin vazgeçilmez bir parçasıdır. Bu makale, yaygın olarak kullanılan CSV formatındaki verilere SQL’deki GROUP BY mantığını nasıl uygulayacağınızı adım adım açıklayacak, böylece veri yığınlarından değerli içgörüler elde etmenize yardımcı olacaktır. Özellikle Python ve Pandas kütüphanesi üzerinden pratik çözümler sunacağız.
Veri analizi dünyasında, ham veriler genellikle CSV (Comma Separated Values) formatında karşımıza çıkar. CSV dosyaları, basit yapısı sayesinde birçok uygulama ve sistem arasında veri alışverişi için popüler bir standart haline gelmiştir. Ancak, bu dosyalar genellikle milyonlarca satır içeren büyük veri kümelerini barındırabilir ve bu ham veriler, doğrudan bakıldığında pek de anlamlı içgörüler sunmaz. İşletmelerin ve analistlerin asıl ihtiyacı, bu veri yığınlarından belirli kriterlere göre özetlenmiş, gruplandırılmış ve anlamlandırılmış bilgilere ulaşmaktır.
İşte tam da bu noktada, ilişkisel veritabanlarından tanıdığımız GROUP BY ifadesi devreye girer. GROUP BY, bir veya daha fazla sütunun değerlerine göre satırları gruplandırarak her grup için özet (agregasyon) hesaplamaları yapmamızı sağlayan güçlü bir SQL komutudur. Örneğin, bir satış tablosunda “Ürün Kategorisi”ne göre toplam satışları veya “Bölge”ye göre ortalama fiyatları bulmak istediğimizde GROUP BY kullanırız. Peki, bir veritabanı ortamı olmayan, düz metin tabanlı CSV dosyalarında bu SQL mantığını nasıl uygulayacağız?
“CsvPath” terimi, aslında somut bir araçtan ziyade, CSV dosyalarına veritabanı benzeri sorgulama yetenekleri kazandırma felsefesini ifade eder. Bu, özellikle Python gibi güçlü programlama dilleri ve veri işleme kütüphaneleri aracılığıyla mümkün hale gelir. Python’ın popüler veri manipülasyon kütüphanesi Pandas, CSV dosyalarını sanki bir veritabanı tablosuymuş gibi okuyup üzerinde SQL benzeri GROUP BY, JOIN, WHERE gibi işlemleri yapmamızı sağlar. Böylece, devasa CSV dosyalarındaki “Kategoriye göre toplam satış”, “Müşteri bazında ortalama harcama” veya “Ürün bazında maksimum stok miktarı” gibi soruların yanıtlarını kolayca bulabiliriz. Bu yaklaşım, hem esneklik sunar hem de hızlı ve etkili veri analizi için kapıları aralar. Veritabanı kurma veya karmaşık SQL sorguları yazma ihtiyacı olmadan, mevcut CSV dosyalarınızdan en yüksek değeri çıkarmanızı sağlar.
Python ve Pandas ile Csv Dosyalarında GROUP BY Uygulaması Nasıl Yapılır?
Python’ın veri bilimi ekosistemi, özellikle Pandas kütüphanesi sayesinde, CSV dosyaları üzerinde SQL benzeri işlemler yapmak için en güçlü ve esnek araçlardan birini sunar. Pandas, büyük veri setlerini kolayca işleyebilen, DataFrame adı verilen tablo benzeri bir veri yapısı sağlar. Bu bölümde, adım adım gerçek bir senaryo üzerinden Pandas kullanarak CSV dosyalarında GROUP BY işleminin nasıl yapılacağını keşfedeceğiz. Öncelikle, örnek bir CSV dosyası oluşturalım ve ardından bu dosya üzerinde çeşitli gruplama ve agregasyon işlemleri gerçekleştirelim.
Adım 1: Örnek Bir CSV Dosyası Oluşturma
Analiz yapabilmek için öncelikle bir veri setine ihtiyacımız var. Aşağıdaki gibi basit bir satış verisi içeren satis_verileri.csv adında bir dosya oluşturalım:
Kategori,Ürün,Şehir,Miktar,Fiyat
Elektronik,Televizyon,Ankara,2,5000
Giyim,T-shirt,İstanbul,5,150
Elektronik,Telefon,İzmir,3,8000
Giyim,Pantolon,Ankara,2,400
Giyim,Şapka,İstanbul,10,50
Elektronik,Tablet,Ankara,1,3000
Ev Aletleri,Buzdolabı,İzmir,1,7000
Ev Aletleri,Fırın,İstanbul,1,3500
Elektronik,Televizyon,İstanbul,1,5200
Giyim,T-shirt,Ankara,3,160
Bu CSV dosyasında "Kategori", "Ürün", "Şehir", "Miktar" ve "Fiyat" sütunları bulunmaktadır. Şimdi bu verileri Pandas ile okuyup gruplama işlemlerine geçebiliriz.
Adım 2: Pandas Kütüphanesini Kullanarak Veriyi Yükleme
İlk adım, Pandas kütüphanesini içe aktarmak ve CSV dosyamızı bir DataFrame'e yüklemektir. Bu, veri analizi için temel bir adımdır.
import pandas as pd
# CSV dosyasını okuyarak bir DataFrame oluşturma
df = pd.read_csv('satis_verileri.csv')
# DataFrame'in ilk 5 satırını görüntüleme
print("Yüklenen Veri Çerçevesi:")
print(df.head())
Yüklenen Veri Çerçevesi:
Kategori Ürün Şehir Miktar Fiyat
0 Elektronik Televizyon Ankara 2 5000
1 Giyim T-shirt İstanbul 5 150
2 Elektronik Telefon İzmir 3 8000
3 Giyim Pantolon Ankara 2 400
4 Giyim Şapka İstanbul 10 50
Gördüğünüz gibi, CSV dosyamız başarıyla yüklendi ve bir DataFrame nesnesine dönüştürüldü. Artık üzerinde SQL benzeri sorgulamalar yapmaya hazırız.
Adım 3: Basit Bir GROUP BY İşlemi – Tek Sütuna Göre Agregasyon
SQL'deki en temel GROUP BY işlemi, tek bir sütunu kullanarak verileri gruplandırmak ve ardından her grup için bir agregasyon (toplama, ortalama alma, sayma vb.) yapmaktır. Örneğin, "Her ürün kategorisi için toplam satış miktarını bulmak" isteyebiliriz.
# Kategori bazında toplam satış miktarını bulma
toplam_miktar_kategoriye_gore = df.groupby('Kategori')['Miktar'].sum()
print("\nKategoriye Göre Toplam Satış Miktarı:")
print(toplam_miktar_kategoriye_gore)
Kategoriye Göre Toplam Satış Miktarı:
Kategori
Elektronik 7
Ev Aletleri 2
Giyim 20
Name: Miktar, dtype: int64
Bu kodda, df.groupby('Kategori') ifadesi, DataFrame'i 'Kategori' sütunundaki benzersiz değerlere göre gruplar. Ardından, ['Miktar'].sum() ifadesi, her bir kategori grubu içindeki 'Miktar' sütununun toplamını hesaplar. Sonuç, her kategori için toplam satış miktarını gösteren yeni bir Pandas Series objesidir.
Adım 4: Birden Fazla Sütun Üzerinden Gruplama
Bazen verileri birden fazla kritere göre gruplamak isteyebiliriz. Örneğin, "Her şehirdeki her ürün kategorisi için ortalama satış fiyatını" bulmak istediğimizde birden fazla sütunu gruplama anahtarı olarak kullanırız.
# Kategori ve Şehir bazında ortalama satış fiyatını bulma
ortalama_fiyat_kategori_sehir_gore = df.groupby(['Kategori', 'Şehir'])['Fiyat'].mean()
print("\nKategori ve Şehire Göre Ortalama Satış Fiyatı:")
print(ortalama_fiyat_kategori_sehir_gore)
Kategori ve Şehire Göre Ortalama Satış Fiyatı:
Kategori Şehir
Elektronik Ankara 4000.0
İstanbul 5200.0
İzmir 8000.0
Ev Aletleri İstanbul 3500.0
İzmir 7000.0
Giyim Ankara 280.0
İstanbul 100.0
Name: Fiyat, dtype: float64
Burada, df.groupby(['Kategori', 'Şehir']) kullanarak verileri hem kategoriye hem de şehire göre gruplandırdık. Bu, her bir kategori-şehir kombinasyonu için ayrı bir grup oluşturur. Daha sonra bu grupların 'Fiyat' sütununun ortalamasını aldık.
Adım 5: Birden Fazla Agregasyon Fonksiyonu Kullanma
Tek bir GROUP BY işlemiyle birden fazla agregasyon fonksiyonunu aynı anda uygulamak da mümkündür. Örneğin, "Her ürün kategorisi için hem toplam satış miktarını hem de ortalama fiyatını" görmek isteyebiliriz.
# Kategori bazında toplam miktar ve ortalama fiyatı aynı anda bulma
coklu_agregasyon_kategoriye_gore = df.groupby('Kategori').agg(
ToplamMiktar=('Miktar', 'sum'),
OrtalamaFiyat=('Fiyat', 'mean')
)
print("\nKategoriye Göre Toplam Miktar ve Ortalama Fiyat:")
print(coklu_agregasyon_kategoriye_gore)
Kategoriye Göre Toplam Miktar ve Ortalama Fiyat:
ToplamMiktar OrtalamaFiyat
Kategori
Elektronik 7 5300.0
Ev Aletleri 2 5250.0
Giyim 20 190.0
.agg() metodu, farklı sütunlara farklı agregasyon fonksiyonları uygulamanıza olanak tanır. Sözlük (dictionary) formatında, yeni sütun isimlerini ve hangi orijinal sütunun hangi fonksiyonla toplanacağını belirtebilirsiniz. Bu, oldukça güçlü ve okunabilir bir yöntemdir ve analitik raporlar oluştururken zaman kazandırır.
Bu adımlar, Python ve Pandas'ın CSV dosyaları üzerinde ne kadar esnek ve güçlü GROUP BY işlemleri sunabileceğini açıkça göstermektedir. Ham verileri anlamlı özetlere dönüştürmek hiç bu kadar kolay olmamıştı.
Gerçek Dünya Senaryosu: E-ticaret Verilerini Analiz Etme
Şimdi bu bilgileri daha karmaşık bir senaryoda uygulayalım: Büyük bir e-ticaret şirketinin satış performansını analiz etmek. Şirketin binlerce sipariş kaydını içeren bir siparisler.csv dosyası olduğunu varsayalım. Bu dosya, temel olarak aşağıdaki sütunları içermektedir:
SiparisID: Siparişin benzersiz kimliğiMüşteriID: Müşterinin kimliğiÜrünKategorisi: Satılan ürünün kategorisi (Elektronik, Giyim, Kitap vb.)Tutar: Siparişin toplam tutarıTarih: Siparişin verildiği tarih (YYYY-MM-DD formatında)
Örnek siparisler.csv içeriği:
SiparisID,MüşteriID,ÜrünKategorisi,Tutar,Tarih
1001,C001,Elektronik,1500.00,2023-01-15
1002,C002,Giyim,250.50,2023-01-18
1003,C001,Kitap,50.00,2023-01-20
1004,C003,Elektronik,2200.00,2023-02-01
1005,C002,Giyim,180.75,2023-02-05
1006,C004,Kitap,75.20,2023-02-10
1007,C001,Elektronik,900.00,2023-03-01
1008,C005,Giyim,320.00,2023-03-03
1009,C003,Kitap,120.00,2023-03-07
1010,C004,Elektronik,1100.00,2023-03-10
1011,C001,Giyim,450.00,2023-03-12
1012,C005,Kitap,80.00,2023-03-15
Amacımız, bu veriler üzerinde aşağıdaki gibi kritik iş sorularına yanıt bulmaktır:
- En çok satan ürün kategorileri nelerdir? (Toplam tutara göre)
- Aylık satış trendleri nasıl? (Her ay için toplam satış tutarı)
- Müşteri başına ortalama harcama nedir?
Uygulama Adımları ve Kod Örnekleri:
Öncelikle, Pandas'ı içe aktaralım ve CSV dosyasını yükleyelim:
import pandas as pd
df_siparis = pd.read_csv('siparisler.csv')
print("E-ticaret Veri Çerçevesinin İlk Beş Satırı:")
print(df_siparis.head())
E-ticaret Veri Çerçevesinin İlk Beş Satırı:
SiparisID MüşteriID ÜrünKategorisi Tutar Tarih
0 1001 C001 Elektronik 1500.0 2023-01-15
1 1002 C002 Giyim 250.5 2023-01-18
2 1003 C001 Kitap 50.0 2023-01-20
3 1004 C003 Elektronik 2200.0 2023-02-01
4 1005 C002 Giyim 180.7 2023-02-05
1. En Çok Satan Ürün Kategorileri:
Ürün kategorisi bazında toplam satış tutarını hesaplayarak hangi kategorilerin daha popüler olduğunu bulabiliriz:
# Ürün Kategorisi bazında toplam tutar
kategori_satislari = df_siparis.groupby('ÜrünKategorisi')['Tutar'].sum().sort_values(ascending=False)
print("\nÜrün Kategorisine Göre Toplam Satış Tutarı:")
print(kategori_satislari)
Ürün Kategorisine Göre Toplam Satış Tutarı:
ÜrünKategorisi
Elektronik 5700.00
Giyim 851.25
Kitap 325.20
Name: Tutar, dtype: float64
Bu çıktıya göre, "Elektronik" kategorisi açık ara en yüksek satış tutarına sahip. Bu bilgi, şirketlerin stok yönetimi, pazarlama stratejileri veya ürün geliştirme kararları almasında yol gösterici olabilir.
2. Aylık Satış Trendleri:
Aylık satış trendlerini analiz etmek için, öncelikle 'Tarih' sütununu Pandas'ın tarih/saat (datetime) formatına dönüştürmemiz ve ardından ay bilgisini çıkarmamız gerekmektedir.
# 'Tarih' sütununu datetime objesine dönüştürme
df_siparis['Tarih'] = pd.to_datetime(df_siparis['Tarih'])
# Ay bilgisini çıkarma
df_siparis['Ay'] = df_siparis['Tarih'].dt.month
# Ay bazında toplam satış tutarını hesaplama
aylik_satislari = df_siparis.groupby('Ay')['Tutar'].sum().sort_index()
print("\nAylık Toplam Satış Tutarları:")
print(aylik_satislari)
Aylık Toplam Satış Tutarları:
Ay
1 1800.50
2 2456.95
3 2970.00
Name: Tutar, dtype: float64
Bu analiz, satışların Ocak'tan Mart'a doğru istikrarlı bir şekilde arttığını gösteriyor. Bu tür bir trend analizi, şirketlerin gelecekteki talep tahminlerini yapmalarına veya belirli aylarda pazarlama kampanyalarını yoğunlaştırmalarına yardımcı olabilir.
3. Müşteri Başına Ortalama Harcama:
Müşteri segmentasyonu ve sadakat programları için müşteri başına ortalama harcamayı bilmek önemlidir.
# MüşteriID bazında ortalama harcamayı hesaplama
musteri_ortalama_harcama = df_siparis.groupby('MüşteriID')['Tutar'].mean().sort_values(ascending=False)
print("\nMüşteri Başına Ortalama Harcama:")
print(musteri_ortalama_harcama)
Müşteri Başına Ortalama Harcama:
MüşteriID
C003 1160.000
C004 587.600
C001 716.666
C005 200.000
C002 215.625
Name: Tutar, dtype: float64
Bu çıktı, hangi müşterilerin daha yüksek ortalama harcamaya sahip olduğunu gösterir. Örneğin, C003 müşterisi en yüksek ortalama harcamaya sahipken, C005 ve C002 nispeten daha düşük harcamaya sahiptir. Bu bilgi, müşteri ilişkileri yönetimi ekiplerine değerli müşterilere yönelik özel teklifler sunma veya düşük harcama yapan müşterileri teşvik etme konusunda yardımcı olabilir.
Bu gerçek dünya senaryosu, Python ve Pandas ile CSV dosyaları üzerinde GROUP BY işleminin ne kadar etkili ve çok yönlü kullanılabileceğini ortaya koymaktadır. Şirketler, bu tür analizlerle iş kararlarını daha bilinçli bir şekilde alabilir, performansı izleyebilir ve stratejilerini optimize edebilirler.
Büyük Csv Dosyalarıyla Çalışırken Performansı Nasıl Artırabilirsiniz?
Küçük veya orta boyutlu CSV dosyalarıyla çalışırken Pandas'ın performansı genellikle yeterli olsa da, milyonlarca veya milyarlarca satır içeren çok büyük CSV dosyalarında performans sorunları ortaya çıkabilir. Bu durum, özellikle bellek tüketimi ve işlem süresi açısından zorlayıcı olabilir. Ancak, birkaç optimizasyon tekniği ve stratejisi ile bu zorlukların üstesinden gelmek mümkündür. Amacımız, hem bellek kullanımını düşürmek hem de gruplama işlemlerini daha hızlı hale getirmektir.
chunksize parametresini kullanarak veriyi parça parça okuyun ve işleyin. Bu, bellek tüketimini önemli ölçüde azaltır ve bilgisayarınızın RAM'inin dolmasını engeller. Her bir parçayı gruplandırıp sonuçları birleştirerek tüm veri setini işlemeden benzer sonuçlar elde edebilirsiniz.
1. Veriyi Parça Parça Okuma (Chunking)
Tüm CSV dosyasını tek seferde belleğe yüklemek yerine, pd.read_csv() fonksiyonunun chunksize parametresini kullanarak veriyi belirli boyutlarda parçalar halinde okuyabiliriz. Her bir parçayı işledikten sonra, sonuçları birleştirerek genel agregasyonu elde ederiz. Bu yaklaşım, özellikle düşük RAM'e sahip sistemlerde kritik öneme sahiptir.
import pandas as pd
chunk_size = 100000 # Her seferinde 100 bin satır oku
toplam_satislar = {} # Kategoriye göre toplam satışları saklayacak sözlük
for chunk in pd.read_csv('cok_buyuk_satis_verileri.csv', chunksize=chunk_size):
# Her chunk için kategori bazında satışları hesapla
chunk_satislari = chunk.groupby('Kategori')['Tutar'].sum()
# Hesaplanan satışları ana toplama ekle
for kategori, tutar in chunk_satislari.items():
toplam_satislar[kategori] = toplam_satislar.get(kategori, 0) + tutar
# Sonuçları DataFrame'e dönüştür
nihai_sonuc = pd.Series(toplam_satislar).sort_values(ascending=False)
print("Büyük CSV için Kategori Bazında Toplam Satışlar (Chunking ile):")
print(nihai_sonuc)
Bu yöntem, belleği verimli kullanırken yine de doğru sonuçlar elde etmenizi sağlar.
2. Veri Tiplerini Optimize Etme (dtype Specification)
Pandas, CSV dosyasını okurken sütunların veri tiplerini otomatik olarak tahmin etmeye çalışır. Ancak, bazen bu tahminler verimli olmayabilir. Örneğin, sadece küçük tam sayılar içeren bir sütunu int64 yerine int8 veya int16 olarak belirlemek, bellek kullanımını önemli ölçüde azaltabilir. Kategorik veriler için category veri tipi de bellek tasarrufu sağlar.
# dtype'ları manuel olarak belirtme
dtypes = {
'SiparisID': 'int32',
'MüşteriID': 'category',
'ÜrünKategorisi': 'category',
'Tutar': 'float32',
'Tarih': 'object' # Tarih işlemleri için daha sonra dönüştüreceğiz
}
df_opt = pd.read_csv('siparisler.csv', dtype=dtypes)
print("\nOptimize Edilmiş Veri Çerçevesi Bellek Kullanımı:")
print(df_opt.info(memory_usage='deep'))
df.info(memory_usage='deep') kullanarak veri çerçevesinin bellek kullanımını inceleyebilirsiniz. Doğru dtype seçimi, özellikle string (object) sütunlar için oldukça büyük farklar yaratabilir.
3. Agregasyon Fonksiyonlarını Verimli Kullanma
Pandas'ın yerleşik agregasyon fonksiyonları (.sum(), .mean(), .count() vb.) genellikle C tabanlı optimize edilmiş algoritmalar kullanır ve çok hızlı çalışır. Mümkün olduğunca bu yerleşik fonksiyonları kullanmaya özen gösterin. Custom (özel) fonksiyonlar veya .apply() metodu genellikle daha yavaştır çünkü Python'da döngü şeklinde çalışırlar.
# Tavsiye edilen: Yerleşik agregasyon fonksiyonları
performansli_agg = df_opt.groupby('ÜrünKategorisi').agg(
ToplamTutar=('Tutar', 'sum'),
OrtalamaTutar=('Tutar', 'mean'),
SiparisSayisi=('SiparisID', 'count')
)
print("\nPerformanslı Agregasyon:")
print(performansli_agg)
Yerleşik fonksiyonlar, özel olarak optimize edildikleri için büyük veri setlerinde bile etkileyici bir performans sergilerler. Bu nedenle, özel bir hesaplama gerektirmedikçe, her zaman standart agregasyon yöntemlerini tercih etmek önemlidir.
4. Paralel İşleme Kütüphaneleri (Dask, Modin)
Eğer veri setiniz Pandas'ın bellek sınırlarını aşıyor veya tek çekirdekte işlenmesi çok uzun sürüyorsa, Dask veya Modin gibi kütüphaneleri düşünebilirsiniz. Bu kütüphaneler, Pandas API'sine benzer bir arayüz sunar ancak veriyi birden çok çekirdekte veya dağıtık sistemlerde paralel olarak işleyebilir.
# Dask ile büyük CSV işleme örneği (Kurulum gerektirir: pip install dask[dataframe])
# import dask.dataframe as dd
# dd_df = dd.read_csv('cok_buyuk_satis_verileri.csv', dtype=dtypes)
# dask_result = dd_df.groupby('Kategori')['Tutar'].sum().compute()
# print("\nDask ile Kategori Bazında Toplam Satışlar:")
# print(dask_result)
Dask ve Modin gibi araçlar, büyük ölçekli veri analizi için Pandas'ın yeteneklerini genişletir, ancak kurulum ve kullanım biraz daha karmaşık olabilir.
Mobil Uyumlu HTML İçin Basit Bir Örnek
Web üzerinde yayınlanan bu tür teknik makalelerin mobil cihazlarda da rahatlıkla okunabilmesi önemlidir. Yukarıdaki genel CSS blokuna eklediğim @media kuralı, özellikle tablolara yönelik basit bir mobil uyumluluk örneğidir. Ekran genişliği 768 pikselin altına düştüğünde, tabloların varsayılan blok düzenine geçmesini ve her bir hücrenin (td) başlık bilgisini (data-label attribute) göstermesini sağlar. Bu, kullanıcıların küçük ekranlarda bile tablo verilerini anlamasını kolaylaştırır.
Kategori Toplam Satış
Elektronik 5700.00
Giyim 851.25
Bu yöntemle, büyük CSV dosyalarını işlerken karşılaşabileceğiniz performans ve bellek sorunlarının üstesinden gelebilir, aynı zamanda içeriğinizin çeşitli cihazlarda sorunsuz görüntülenmesini sağlayabilirsiniz. Verimlilik, büyük veri analizi için temel bir unsurdur.
Karmaşık Gruplamalar ve Koşullu Agregasyonlar Nelerdir?
Pandas'ın groupby yetenekleri, basit toplamlardan çok daha fazlasını sunar. Verilerinizi belirli koşullara göre filtreleyebilir, daha karmaşık gruplama yapıları oluşturabilir veya kendi özel agregasyon fonksiyonlarınızı tanımlayabilirsiniz. Bu bölümde, daha ileri düzey GROUP BY tekniklerini ve bunların pratik uygulamalarını inceleyeceğiz.
1. Filtreleme ile Gruplama
Bazen sadece belirli koşulları sağlayan veriler üzerinde gruplama yapmak isteyebiliriz. Örneğin, "Sadece tamamlanmış siparişlerin kategori bazında toplam tutarını" görmek isteyebiliriz. Bu, groupby işleminden önce DataFrame'i filtreleyerek kolayca yapılabilir.
# Örnek DataFrame'e 'Sipariş Durumu' sütunu ekleyelim
df_siparis['Sipariş Durumu'] = ['Tamamlandı', 'İptal', 'Tamamlandı', 'Tamamlandı', 'İptal',
'Tamamlandı', 'Tamamlandı', 'Tamamlandı', 'Tamamlandı', 'Tamamlandı',
'Tamamlandı', 'İptal']
# Sadece tamamlanmış siparişleri filtrele ve kategoriye göre grupla
tamamlanan_siparis_kategori_satislari = df_siparis[df_siparis['Sipariş Durumu'] == 'Tamamlandı'].groupby('ÜrünKategorisi')['Tutar'].sum()
print("\nTamamlanmış Siparişlerin Kategori Bazında Toplam Tutarı:")
print(tamamlanan_siparis_kategori_satislari)
Tamamlanmış Siparişlerin Kategori Bazında Toplam Tutarı:
ÜrünKategorisi
Elektronik 5700.0
Giyim 450.0
Kitap 195.2
Name: Tutar, dtype: float64
Bu, veri alt kümeleri üzerinde odaklanmanıza ve daha spesifik analizler yapmanıza olanak tanır.
2. Pivot Tablolar (Pivot Tables) ile Gelişmiş Gruplama
Pandas'ın pivot_table fonksiyonu, Excel'deki pivot tablolara benzer şekilde, verileri birden fazla boyutta özetlemek için güçlü bir araçtır. Bu, özellikle çapraz tablolar oluşturmak veya birden fazla gruplama anahtarının etkileşimini görmek istediğinizde kullanışlıdır.
# Kategori ve MüşteriID'ye göre ortalama tutarı gösteren pivot tablo
pivot_table_example = pd.pivot_table(df_siparis,
values='Tutar',
index='ÜrünKategorisi',
columns='MüşteriID',
aggfunc='mean',
fill_value=0) # Eksik değerleri 0 ile doldur
print("\nKategori ve Müşteri Bazında Ortalama Tutar (Pivot Tablo):")
print(pivot_table_example)
Kategori ve Müşteri Bazında Ortalama Tutar (Pivot Tablo):
MüşteriID C001 C002 C003 C004 C005
ÜrünKategorisi
Elektronik 1200.0 0.0 2200.0 1100.00 0.0
Giyim 450.0 180.7 0.0 0.0 320.0
Kitap 50.0 0.0 120.0 75.2 80.0
Pivot tablolar, verilerin farklı perspektiflerden incelenmesini sağlayarak karmaşık ilişkileri ve kalıpları ortaya çıkarmada etkilidir.
3. Özel Agregasyon Fonksiyonları
Pandas'ın yerleşik agregasyon fonksiyonları (sum, mean, count vb.) çoğu zaman yeterli olsa da, bazen kendi özel hesaplamalarınızı yapmak isteyebilirsiniz. .agg() metodu, hem yerleşik fonksiyonları hem de kullanıcı tanımlı (lambda veya normal) fonksiyonları bir arada kullanmanıza olanak tanır.
# Özel bir agregasyon fonksiyonu tanımlama: Range (max - min)
def calculate_range(series):
return series.max() - series.min()
# Kategori bazında toplam tutar ve tutar aralığını hesaplama
custom_agg_example = df_siparis.groupby('ÜrünKategorisi').agg(
ToplamTutar=('Tutar', 'sum'),
TutarAralığı=('Tutar', calculate_range) # Özel fonksiyon kullanımı
)
print("\nKategori Bazında Toplam Tutar ve Tutar Aralığı:")
print(custom_agg_example)
Kategori Bazında Toplam Tutar ve Tutar Aralığı:
ToplamTutar TutarAralığı
ÜrünKategorisi
Elektronik 5700.0 1300.0
Giyim 851.2 279.5
Kitap 325.2 70.0
Bu, veri analizi süreçlerinizde standart olmayan metrikler hesaplamanız gerektiğinde size büyük esneklik sağlar. Karmaşık gruplamalar ve koşullu agregasyonlar, veri setlerinizden daha derinlemesine içgörüler elde etmenizi ve iş kararlarınızı daha sofistike bir şekilde desteklemenizi sağlar. Pandas, bu tür ileri düzey analizler için kapsamlı ve kullanımı kolay bir çerçeve sunar.
Sonuç: Csv Verilerinizden Daha Fazlasını Çıkarın!
CSV dosyaları, veri depolama ve aktarımı için basit ama güçlü bir format olmaya devam ediyor. Ancak ham CSV verileri, tek başına her zaman iş değeri taşıyan içgörüler sunmaz. Bu makale boyunca ele aldığımız gibi, SQL'deki GROUP BY mantığını Python ve Pandas kütüphanesi aracılığıyla CSV dosyalarınıza uygulayarak, veri yığınlarını anlamlı özetlere, trend analizlerine ve kritik iş metriklerine dönüştürebilirsiniz. Başlangıç seviyesindeki basit gruplamalardan, gerçek dünya senaryolarında e-ticaret verilerini analiz etmeye ve büyük veri setleri için performans optimizasyonlarına kadar geniş bir yelpazede çözümler sunduk. Ayrıca, mobil uyumlu HTML tekniklerine değinerek içeriğin farklı cihazlarda erişilebilirliğini artırmayı da ihmal etmedik.
Pandas, bu süreçte adeta bir "CsvPath" motoru görevi görerek, düz metin dosyalarını veritabanı benzeri esneklikte sorgulamanıza olanak tanır. Kategoriye göre satışlar, aylık gelir trendleri veya müşteri başına ortalama harcama gibi temel soruların yanıtlarını bulmak, artık karmaşık veritabanı kurulumlarına veya gelişmiş SQL bilgisine ihtiyaç duymuyor. Unutmayın, verilerinizdeki potansiyeli ortaya çıkarmak, doğru araçları ve yöntemleri kullanmakla başlar. Bu makaledeki teknikleri uygulayarak, CSV verilerinizden çok daha fazlasını elde edebilir ve veri odaklı karar alma süreçlerinizi güçlendirebilirsiniz. Veri analizi yolculuğunuzda başarılar dileriz!
Sıkça Sorulan Sorular
GROUP BY gibi) uygulama felsefesini ve yaklaşımını ifade eder. Pandas gibi kütüphaneler bu felsefenin pratiğe dökülmesini sağlar.csvkit komut satırı araçları, R programlama dili (dplyr paketi ile), veya SQL sorguları ile CSV dosyalarını doğrudan sorgulamanıza olanak tanıyan DuckDB gibi "SQL-on-CSV" motorları kullanılabilir.read_csv fonksiyonundaki chunksize parametresiyle veriyi parça parça okumak ve işlemek en iyi yöntemdir. Ayrıca, veri tiplerini (dtype) optimize etmek ve Dask veya Modin gibi paralel işlem kütüphanelerini kullanmak da performansı ve bellek verimliliğini artırabilir.GROUP BY ve agregasyon işlemlerinde eksik verileri (NaN) genellikle otomatik olarak yok sayar. Ancak, bu davranış kontrol edilebilir. Eksik değerleri doldurmak için .fillna(), tamamen kaldırmak için .dropna() veya belirli bir değerle değiştirmek için özel fonksiyonlar kullanabilirsiniz. Agregasyon öncesinde veya sonrasında eksik veri stratejinizi belirlemeniz önemlidir.