Site Loader

Selamlar herkese, bu yazıda Pandas ile Gruplama ve Aggregate İşlemlerine değineceğim. Eğer hiç Pandas bilginiz yok ise burada ki yazılara bakabilirsiniz. Keyifli okumalar 🙂

Pandas ile Gruplama İşlemleri

Pandas’ta gruplama işlemleri veriyi anlamak ve veriyi analiz etmek için sıkça kullanılan işlemlerdir.

Elimizde şu şekilde bir veri olduğunu düşünelim.

Biz  bu verinin sütunları üzerinde describe() fonksiyonu ile bilgi alıyorduk.

df.describe()

veya sadece bir sütun üzerinde bir işlem yapmak istiyorsak şu şekilde yapıyorduk.

df.price.describe()

count    6.527000e+03
mean     1.746748e+06
std      5.366423e+06
min      1.000000e+00
25%      4.500000e+05
50%      7.500000e+05
75%      1.792500e+06
max      3.750000e+08
Name: price, dtype: float64

Görüldüğü gibi price sütunun bilgilerini aldık. Fakat biz burada farklı bir işlem yapmak istiyorsak örneğin tüm verinin fiyat ortalamasını görmektense her ilçenin ayrı ayrı fiyat ortalamalarını öğrenmek istiyorum.  Bu sayede ben hangi ilçedeki ev fiyatlarının pahalı hangi ilçelerin ucuz olduğunu öğrenmiş olacağım. İşte burada gruplama işlemleri devreye giriyor. Bu işlem için ise groupby() fonksiyonunu kullanmış olacağız.

Hemen kodları yazalım. Hangi sütuna göre gruplama işlemi yapacaksam onu groupby() fonksiyonu içinde belirtiyorum. Daha sonra neye göre gruplama işlemi yapacaksam onu da köşeli parantez içinde belirtiyorum.

df.groupby("district")["price"]

<pandas.core.groupby.generic.SeriesGroupBy object at 0x00000262FA922C10>

Gruplama işlemi yaptık şuan tüm ilçeleri grupladı peki niye bize bir sonuç vermedi? Çünkü biz grupladığımız değerler üzerinde hangi işlemi yapacağımızı belirtmedik.

Pandas Aggregate Fonksiyonları

Bir toplama işlemimi yapacağız, ortalama mı alacağız, veya max, min değerleri mi alacağız? İşte biz bunlara aggregate fonksiyonları diyeceğiz. Bu fonksiyonlar aslında bizim sıkça kullandığımız fonksiyonlardır;

  • count() – Number of non-null observations
  • sum() – Sum of values
  • mean() – Mean of values
  • median() – Arithmetic median of values
  • min() – Minimum
  • max() – Maximum
  • mode() – Mode
  • std() – Standard deviation
  • var() – Variance

Tek Sütun ve Tek Aggregate  Fonksiyonu

O zaman ne yapacağımız belirtiyoruz. Biz bütün ilçeye göre ev fiyatlarını istiyorduk. O zaman yazalım.

df.groupby("district")["price"].mean()


district
Adalar           2.147875e+06
Arnavutköy       4.616667e+05
Ataşehir         8.852750e+05
Avcılar          3.957345e+05
Bahçelievler     8.295803e+05
Bakırköy         4.091747e+06
Bayrampaşa       4.786111e+05
Bağcılar         6.515278e+05
Başakşehir       1.054768e+06
Beykoz           4.135645e+06
Beylikdüzü       6.047617e+05
Beyoğlu          5.935430e+06
Beşiktaş         5.835331e+06
Büyükçekmece     8.202091e+05
Esenler          4.693594e+05
Esenyurt         4.015528e+05
Eyüpsultan       1.403528e+06
Fatih            6.128011e+05
Gaziosmanpaşa    5.169474e+05
Güngören         6.648571e+05
Kadıköy          2.700983e+06
Kartal           6.652286e+05
Kağıthane        5.633030e+05
Küçükçekmece     7.207293e+05
Maltepe          9.248606e+05
Pendik           6.792439e+05
Sancaktepe       5.344428e+05
Sarıyer          4.393490e+06
Silivri          4.400000e+05
Sultanbeyli      4.091667e+05
Sultangazi       4.425455e+05
Tuzla            6.846053e+05
Zeytinburnu      1.217508e+06
Çatalca          3.111250e+05
Çekmeköy         5.748623e+05
Ümraniye         6.969310e+05
Üsküdar          1.163260e+06
Şile             6.900000e+05
Şişli            1.511105e+06
Name: price, dtype: float64

Görüldüğü gibi ilçelere göre fiyat ortalamasını aldık. Aslında bu çıktıyı biraz daha iyileştirebiliriz. Mesela İlçelerin ev fiyat ortalamalarını büyükten küçüğe sıralayabiliriz.  Daha önceki yazılarda ki bilgilerimizle.

df.groupby("district")["price"].mean().sort_values(ascending=False)

district
Beyoğlu          5.935430e+06
Beşiktaş         5.835331e+06
Sarıyer          4.393490e+06
Beykoz           4.135645e+06
Bakırköy         4.091747e+06
Kadıköy          2.700983e+06
Adalar           2.147875e+06
Şişli            1.511105e+06
Eyüpsultan       1.403528e+06
Zeytinburnu      1.217508e+06
Üsküdar          1.163260e+06
Başakşehir       1.054768e+06
Maltepe          9.248606e+05
Ataşehir         8.852750e+05
Bahçelievler     8.295803e+05
Büyükçekmece     8.202091e+05
Küçükçekmece     7.207293e+05
Ümraniye         6.969310e+05
Şile             6.900000e+05
Tuzla            6.846053e+05
Pendik           6.792439e+05
Kartal           6.652286e+05
Güngören         6.648571e+05
Bağcılar         6.515278e+05
Fatih            6.128011e+05
Beylikdüzü       6.047617e+05
Çekmeköy         5.748623e+05
Kağıthane        5.633030e+05
Sancaktepe       5.344428e+05
Gaziosmanpaşa    5.169474e+05
Bayrampaşa       4.786111e+05
Esenler          4.693594e+05
Arnavutköy       4.616667e+05
Sultangazi       4.425455e+05
Silivri          4.400000e+05
Sultanbeyli      4.091667e+05
Esenyurt         4.015528e+05
Avcılar          3.957345e+05
Çatalca          3.111250e+05
Name: price, dtype: float64

Şimdi daha kolay oldu bizim için sonuçları söylemek. Ev fiyatlarının en pahalı olduğu üç ilçe; Beyoğlu, Beşiktaş, Sarıyer ve en ucuz olduğu üç ilçe; Çatalca, Avcılar, Esenyurt ilçeleridir.

Veya ilçelere göre satılık daire sayısını bulalım bunun için yapacağımız tek şey mean() yerine count() fonksiyonu kullanmak.

df.groupby("district")["price"].count().sort_values(ascending=False).reset_index()

Görüldüğü üzere satılık konut sayısı olan ilçeleri büyükten küçüğe doğru sıraladı. Kadıköy ve Maltepe ilçelerinde satılık daire sayısının en fazla olan ilçeler olduğunu görüyoruz.

Tek Sütun ve Çoklu Aggregate  Fonksiyonu

Şimdi siz diyeceksiniz biz bunların hepsini ayrı ayrı almak zorunda mıyız? Tabi ki hayır siz bu işlemleri birlikte de alabilirsiniz.

df.groupby("district")["price"].aggregate(["mean","count","median"]).reset_index()

Çok iyi birden fazla aggregate fonksiyonu kullanabiliyoruz.

Çoklu Sütun ve Çoklu Aggregate  Fonksiyonu

Peki birden fazla sütun üzerinde işlem yapabiliyor muyuz? Elbette yapabiliyoruz hemen ilçelere göre fiyat ve metrekare üzerinde gruplama işlemi yapalım. Bura ilçelere göre en küçük ve en büyük değerleri fiyat ve metrekare sütunları için alalım.

df.groupby("district")["price","area"].aggregate(["min","max"]).reset_index()

Bir yazının daha sonuna geldik. Lütfen eksik veya yanlış bilgi için iletişime geçmekten çekinmeyin. Bir sonraki yazıda görüşmek dileği ile 🙂

Post Author: Cahit ISLEYEN

Data Scientist at @embedica.ai

One Reply to “Pandas ile Gruplama İşlemleri”

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir