Pandas & NumPy Academy · Ders

Değerleri Sıralama

Sütun değerlerine rank() ile sıra numaraları atayın, eşit değerleri ayırma yöntemlerini seçin ve pd.cut() ile yüzdelik dilim kutuları oluşturun.

3. ders / 413 adım

Değerleri Sıralama, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 3. 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.

Sıralama Nedir?

Sıralama, bir Series içindeki her değere göreli büyüklüğüne dayalı bir konum verir: en küçük değer için 1. sıra, en büyük değer için n. sıra (veya bunun tersi). Satırların sırasını değiştiren sıralama işleminden farklı olarak rank(), özgün verilerin yanına sıra konumlarını içeren yeni bir sütun ekler. Sıralamalar liderlik tablolarında, yüzdelik hesaplamalarında ve mutlak değerler yerine sıra konumu gerektiren bazı istatistiksel testlerde kullanılır.

import pandas as pd

df = pd.DataFrame({
    'player': ['Alice', 'Bob', 'Carol', 'Dave', 'Eve'],
    'score': [88, 72, 95, 72, 85]
})

df['rank'] = df['score'].rank()
print(df)
#    player  score  rank
# 0   Alice     88   4.0
# 1     Bob     72   1.5   <- tied with Dave
# 2   Carol     95   5.0
# 3    Dave     72   1.5   <- tied with Bob
# 4     Eve     85   3.0

Artan ve Azalan Sıralama

Varsayılan olarak rank(), en küçük değere 1. sıra verir (artan sıralama). En büyük değere 1. sırayı vermek için (örneğin bir yarışmada birincilik) ascending=False parametresini geçirin. Bu, sporda, sıralama tablolarında ve satış sıralamalarında kullanılan “birincilik = en yüksek puan” kuralıyla uyumludur.

import pandas as pd

df = pd.DataFrame({'score': [70, 95, 85, 60, 90]})

# Rank 1 = highest score
df['competition_rank'] = df['score'].rank(ascending=False)
print(df)
#    score  competition_rank
# 0     70               4.0
# 1     95               1.0
# 2     85               3.0
# 3     60               5.0
# 4     90               2.0

Eşitlikleri Ayırma Yöntemleri

Birden fazla satır aynı değere sahip olduğunda (eşitlik), sıralamaların nasıl atanacağını method parametresi belirler. Seçenekler şunlardır: 'average' (varsayılan — eşit satırlar ortalama sırayı paylaşır), 'min' (tüm eşit satırlar en düşük sırayı alır), 'max' (tümü en yüksek sırayı alır), 'first' (ilk görünen satır daha düşük sırayı alır) ve 'dense' (eşitlikten sonra sıra numaralarında boşluk bırakılmaz).

import pandas as pd

s = pd.Series([10, 20, 20, 30])

print('average:', s.rank(method='average').tolist())  # [1.0, 2.5, 2.5, 4.0]
print('min:    ', s.rank(method='min').tolist())      # [1.0, 2.0, 2.0, 4.0]
print('max:    ', s.rank(method='max').tolist())      # [1.0, 3.0, 3.0, 4.0]
print('first:  ', s.rank(method='first').tolist())    # [1.0, 2.0, 3.0, 4.0]
print('dense:  ', s.rank(method='dense').tolist())    # [1.0, 2.0, 2.0, 3.0]

Yoğun Sıralama: Eşitliklerden Sonra Boşluk Yok

'dense' yöntemi, boşluksuz bir sıralama istediğinizde özellikle kullanışlıdır. 'min' ile ikinci sırayı paylaşan iki giriş, sonraki sırayı 4 yapar (3 atlanır). 'dense' ile sonraki sıra her zaman 3 olur ve kesintisiz bir dizi korunur. Yoğun sıralama, SQL'deki DENSE_RANK() pencere işlevinde kullanılan standart yöntemdir ve sıralama tablolarında yaygın olarak kullanılır.

import pandas as pd

df = pd.DataFrame({
    'name': ['A', 'B', 'C', 'D', 'E'],
    'score': [100, 80, 80, 60, 60]
})

df['dense_rank'] = df['score'].rank(method='dense', ascending=False).astype(int)
print(df)
#   name  score  dense_rank
# 0    A    100           1
# 1    B     80           2
# 2    C     80           2  <- same score, same rank
# 3    D     60           3  <- next rank is 3, not 4
# 4    E     60           3

pct=True ile Yüzdelik Sıralama

rank() içinde pct=True ayarlandığında sıralamalar [0, 1] aralığına normalleştirilir ve bir yüzdelik sıralama elde edilir. Yüzdelik sıralaması 0.8 olan bir değer, sütundaki değerlerin %80'inden daha yüksektir. Bu yöntem finansta (yüzdelik performans), notlandırmada (puan yüzdelikleri) ve aykırı değer tespitinde kullanılır.

import pandas as pd

df = pd.DataFrame({'score': [50, 70, 80, 90, 100]})

df['percentile'] = df['score'].rank(pct=True)
print(df)
#    score  percentile
# 0     50         0.2
# 1     70         0.4
# 2     80         0.6
# 3     90         0.8
# 4    100         1.0

Gruplar İçinde Sıralama

Sıralamaları her grup içinde bağımsız olarak (örneğin her departmandaki maaş sıralamasını) hesaplamak için groupby() ile rank() işlevlerini birleştirin. Sıralama işlevini grup grup uygulayan ve özgün DataFrame diziniyle hizalanmış bir Series döndüren groupby().rank() ifadesini kullanın. Bu, gruba göre sıralama sütunu eklemek için idealdir.

import pandas as pd

df = pd.DataFrame({
    'dept': ['Eng', 'Eng', 'HR', 'HR', 'Eng'],
    'name': ['Alice', 'Bob', 'Carol', 'Dave', 'Eve'],
    'salary': [90000, 70000, 55000, 65000, 80000]
})

df['dept_rank'] = df.groupby('dept')['salary'].rank(
    method='dense', ascending=False
).astype(int)
print(df.sort_values(['dept', 'dept_rank']))
#    dept   name  salary  dept_rank
# 0   Eng  Alice   90000          1
# 4   Eng    Eve   80000          2
# 1   Eng    Bob   70000          3
# 3    HR   Dave   65000          1
# 2    HR  Carol   55000          2

Eşit Genişlikte Bölmeler için pd.cut()

pd.cut(series, bins), sürekli bir sayısal sütunu eşit genişlikte aralıklara (bölmelere) ayırır ve her değeri kendi bölmesine atar. Bu işlem, sürekli bir değişkeni kategorik bir değişkene dönüştürür; histogramlar, yaş grupları, gelir aralıkları veya herhangi bir ayrıklaştırma görevi için kullanışlıdır. Sonuç, aralık etiketlerine sahip bir Categorical Series olur.

import pandas as pd

df = pd.DataFrame({'age': [5, 15, 25, 35, 45, 55, 65, 75]})

df['age_group'] = pd.cut(df['age'], bins=[0, 18, 35, 60, 100],
                          labels=['Child', 'Young Adult', 'Middle Age', 'Senior'])
print(df)
#    age    age_group
# 0    5        Child
# 1   15        Child
# 2   25  Young Adult
# 3   35  Young Adult
# 4   45   Middle Age
# 5   55   Middle Age
# 6   65       Senior
# 7   75       Senior

Eşit Frekanslı Bölmeler için pd.qcut()

pd.qcut(series, q), değerleri kantillere dayalı bölmelere ayırır; her bölme yaklaşık olarak aynı sayıda gözlem içerir. pd.cut() işlevinden (eşit genişlik) farklı olarak pd.qcut() eşit büyüklükte gruplar oluşturur. Bu özellik, desil puanları, beşlik dilimlere ayırma veya çeyreklik grupları gibi yüzdelik tabanlı segmentasyonlar için kullanışlıdır.

import pandas as pd
import numpy as np

np.random.seed(0)
df = pd.DataFrame({'score': np.random.randint(40, 100, 20)})

# Split into 4 equal-frequency quartiles
df['quartile'] = pd.qcut(df['score'], q=4, labels=['Q1', 'Q2', 'Q3', 'Q4'])
print(df['quartile'].value_counts().sort_index())
# Q1    5
# Q2    5
# Q3    5
# Q4    5

cut() ve qcut() — Temel Farklar

Bölmelerinizin alan içinde doğal bir anlamı olduğunda (örneğin 0-18, 18-35, 35-60 yaş aralıkları) pd.cut() kullanın; bu durumda bölme genişlikleri anlamsal açıdan önemlidir. Sınırların nerede olduğundan bağımsız olarak eşit grup büyüklükleri istediğinizde pd.qcut() kullanın; örneğin müşterileri üst ve alt çeyrekliklere ayırmak için. Çarpık bir dağılım, cut() ile çok farklı büyüklükte gruplar, qcut() ile ise eşit gruplar oluşturur.

import pandas as pd
import numpy as np

np.random.seed(0)
# Skewed distribution: most values near 0
skewed = pd.Series(np.random.exponential(scale=5, size=100).round())

# cut with equal width: many empty or tiny upper bins
cut_counts = pd.cut(skewed, bins=4).value_counts().sort_index()
print('cut():', cut_counts.values)

# qcut with equal frequency: always 25 per group
qcut_counts = pd.qcut(skewed, q=4).value_counts().sort_index()
print('qcut():', qcut_counts.values)

Sıra Numarasını Sütun Olarak Ekleme

Sıralanmış bir çıktı tablosu oluşturmak için temiz bir yaklaşım şudur: azalan biçimde sıralayın, dizini 0'dan başlayacak şekilde sıfırlayın, insan tarafından okunabilir 1 tabanlı sıralama için 1 ekleyin ve bunu özgün verilerin yanında gösterin. Böylece boşluk içermeyen, düzenli sıra numaralarına sahip ve sunuma hazır bir sıralama tablosu elde edilir.

import pandas as pd

df = pd.DataFrame({
    'team': ['Falcons', 'Eagles', 'Hawks', 'Owls'],
    'wins': [12, 9, 12, 7]
})

leaderboard = (
    df
    .sort_values('wins', ascending=False)
    .reset_index(drop=True)
)
leaderboard.index = leaderboard.index + 1
leaderboard.index.name = 'place'
print(leaderboard)

Makine Öğrenmesi için Özellik Olarak Sıralama

Sıralamaya dönüştürülmüş özellikler, aykırı değerlere dayanıklı oldukları için makine öğrenmesinde kullanışlıdır. Çok büyük veya çok küçük bir değer, özellik dağılımını çarpıtmak yerine uçlara yakın bir sıra alır. Sıralama dönüşümü bazen ağaç tabanlı modellerden önce bir ön işleme adımı olarak veya sayısal ölçeğin anlamlı olmadığı, ancak göreli sıralamanın önemli olduğu durumlarda kullanılır.

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'income': [30000, 50000, 70000, 1_000_000]  # outlier at 1M
})

# Add rank as a feature
df['income_rank'] = df['income'].rank(pct=True)
print(df)
#      income  income_rank
# 0    30000         0.25
# 1    50000         0.50
# 2    70000         0.75
# 3  1000000         1.00
# The outlier has rank 1.0 — extreme but not disproportionate

Kısa Kontrol

Pandas'te değerleri sıralama konusundaki anlayışınızı sınayın.

Ders Özeti

Bu derste şunları öğrendiniz: rank() değerlere sıra konumları atar, method='dense' eşitliklerden sonra boşlukları önler, pct=True [0,1] aralığında yüzdelik sıralamalar verir ve groupby().rank() grup içi sıralamaları hesaplar. Sürekli değişkenleri ayrıklaştırırken eşit genişlikte bölmeler için pd.cut(), eşit frekanslı bölmeler için pd.qcut() kullanın. Sırada DataFrame dizinini ayarlama ve sıfırlama var.

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

“Değerleri Sıralama” dersi ücretsiz mi?

Evet — “Değerleri Sıralama” 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.

“Değerleri Sıralama” dersinde ne öğreneceğim?

Sütun değerlerine rank() ile sıra numaraları atayın, eşit değerleri ayırma yöntemlerini seçin ve pd.cut() ile yüzdelik dilim kutuları oluşturun. 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 3. dersidir.

“Değerleri Sıralama” 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. Sütun Değerlerine Göre Sıralama
  2. İndekse Göre Sıralama
  3. Değerleri Sıralama
  4. İndeksi Ayarlama ve Sıfırlama
← Pandas & NumPy Academy Sayfasına Dön