1. Ay 1. Hafta - Pandas ile Veri Manipülasyonu
🎯 Bu Haftanın Hedefleri
- Pandas kütüphanesinin temellerini öğrenmek
- CSV dosyalarını okuma, yazma ve temel işlemler yapabilmek
- Veri temizleme ve filtreleme tekniklerini kavramak
- DataFrame ve Series yapılarını etkili kullanabilmek
📚 Teorik Bilgiler
Pandas Nedir?
Pandas (Python Data Analysis Library), veri analizi ve manipülasyonu için geliştirilmiş güçlü bir Python kütüphanesidir. İki ana veri yapısı sunar:
- Series: Tek boyutlu etiketli veri yapısı (Excel'deki bir sütun gibi)
- DataFrame: İki boyutlu etiketli veri yapısı (Excel tablosu gibi)
Neden Pandas?
- Excel'den çok daha hızlı ve güçlü
- Büyük veri setleriyle çalışabilir (milyonlarca satır)
- Gelişmiş veri temizleme ve dönüştürme araçları
- Diğer Python kütüphaneleri ile mükemmel entegrasyon
🛠️ Kurulum ve Başlangıç
python
# Gerekli kütüphaneleri import etme
import pandas as pd
import numpy as np
# Pandas versiyonunu kontrol etme
print(f"Pandas versiyonu: {pd.__version__}")
# Görüntüleme ayarları (opsiyonel)
pd.set_option('display.max_columns', None) # Tüm sütunları göster
pd.set_option('display.width', None) # Genişlik limiti kaldır
pd.set_option('display.max_colwidth', 50) # Sütun genişliği max 50 karakter📊 1. Gün - Pandas Temelleri ve Veri Yapıları
Series Oluşturma ve Temel İşlemler
python
# Series oluşturma - Liste ile
sehirler = pd.Series(['İstanbul', 'Ankara', 'İzmir', 'Bursa', 'Antalya'])
print("Şehirler Series'i:")
print(sehirler)
print(f"Veri tipi: {type(sehirler)}")
# Series oluşturma - Dictionary ile
nufus = pd.Series({
'İstanbul': 15519267,
'Ankara': 5663322,
'İzmir': 4367251,
'Bursa': 3147818,
'Antalya': 2619832
})
print("\nNüfus Series'i:")
print(nufus)
# Series'ten belirli değerlere erişim
print(f"\nİstanbul nüfusu: {nufus['İstanbul']:,}")
print(f"İlk 3 şehir:\n{nufus.head(3)}")
print(f"Son 2 şehir:\n{nufus.tail(2)}")
# Temel istatistiksel bilgiler
print(f"\nToplam nüfus: {nufus.sum():,}")
print(f"Ortalama nüfus: {nufus.mean():,.0f}")
print(f"En kalabalık şehir: {nufus.max():,}")
print(f"En az nüfuslu şehir: {nufus.min():,}")DataFrame Oluşturma
python
# Dictionary ile DataFrame oluşturma
sehir_bilgileri = {
'Şehir': ['İstanbul', 'Ankara', 'İzmir', 'Bursa', 'Antalya'],
'Nüfus': [15519267, 5663322, 4367251, 3147818, 2619832],
'Bölge': ['Marmara', 'İç Anadolu', 'Ege', 'Marmara', 'Akdeniz'],
'Plaka_Kodu': [34, 6, 35, 16, 7],
'Denize_Kıyısı': [True, False, True, False, True]
}
df = pd.DataFrame(sehir_bilgileri)
print("Şehir Bilgileri DataFrame:")
print(df)
print(f"\nDataFrame şekli: {df.shape}") # (satır, sütun)
print(f"Sütun isimleri: {list(df.columns)}")
print(f"Index: {list(df.index)}")Temel DataFrame Bilgileri
python
# DataFrame hakkında genel bilgi
print("DataFrame Hakkında Genel Bilgi:")
print(df.info())
print("\nTemel İstatistikler:")
print(df.describe())
print("\nVeri Tipleri:")
print(df.dtypes)
print("\nNüfus sütununun benzersiz değer sayısı:")
print(df['Nüfus'].nunique())
print("\nBölgelerin benzersiz değerleri:")
print(df['Bölge'].unique())📊 2. Gün - Veri Okuma ve Yazma İşlemleri
CSV Dosyası Oluşturma ve Okuma
python
# Önce bir CSV dosyası oluşturalım
sample_data = {
'Ad': ['Ahmet', 'Ayşe', 'Mehmet', 'Fatma', 'Ali', 'Zeynep'],
'Yaş': [25, 30, 35, 28, 32, 27],
'Şehir': ['İstanbul', 'Ankara', 'İzmir', 'Bursa', 'Antalya', 'İstanbul'],
'Maaş': [5000, 6500, 7200, 5800, 6200, 5500],
'Departman': ['IT', 'HR', 'IT', 'Muhasebe', 'IT', 'HR']
}
df_sample = pd.DataFrame(sample_data)
# CSV dosyasına kaydetme
df_sample.to_csv('calisanlar.csv', index=False, encoding='utf-8')
print("CSV dosyası oluşturuldu: calisanlar.csv")
# CSV dosyasını okuma
df_read = pd.read_csv('calisanlar.csv', encoding='utf-8')
print("\nCSV dosyasından okunan veri:")
print(df_read)Farklı Okuma Seçenekleri
python
# CSV okuma seçenekleri
# Belirli sütunları okuma
df_selected = pd.read_csv('calisanlar.csv', usecols=['Ad', 'Yaş', 'Maaş'])
print("Seçili sütunlar:")
print(df_selected)
# Belirli satırları okuma (nrows parametresi)
df_limited = pd.read_csv('calisanlar.csv', nrows=3)
print("\nİlk 3 satır:")
print(df_limited)
# Index sütunu belirleme
df_indexed = pd.read_csv('calisanlar.csv', index_col='Ad')
print("\nAd sütunu index olarak:")
print(df_indexed)Excel Dosyası İşlemleri
python
# Excel dosyasına kaydetme
df_sample.to_excel('calisanlar.xlsx', index=False)
print("Excel dosyası oluşturuldu: calisanlar.xlsx")
# Excel dosyasını okuma
try:
df_excel = pd.read_excel('calisanlar.xlsx')
print("\nExcel dosyasından okunan veri:")
print(df_excel.head())
except ImportError:
print("Excel okuma için 'openpyxl' kütüphanesi gerekli: pip install openpyxl")📊 3. Gün - Veri Seçimi ve Filtreleme
Sütun Seçimi
python
# Çalışanlar verisini kullanarak devam edelim
df = pd.read_csv('calisanlar.csv')
# Tek sütun seçimi (Series döner)
yaşlar = df['Yaş']
print("Yaşlar (Series):")
print(yaşlar)
print(f"Tip: {type(yaşlar)}")
# Tek sütun seçimi (DataFrame döner)
yaşlar_df = df[['Yaş']]
print("\nYaşlar (DataFrame):")
print(yaşlar_df)
print(f"Tip: {type(yaşlar_df)}")
# Birden fazla sütun seçimi
kişi_bilgileri = df[['Ad', 'Yaş', 'Şehir']]
print("\nKişi bilgileri:")
print(kişi_bilgileri)Satır Seçimi
python
# Index ile satır seçimi
print("İlk satır (iloc ile):")
print(df.iloc[0]) # Series döner
print("\nİlk satır (DataFrame olarak):")
print(df.iloc[[0]]) # DataFrame döner
# Birden fazla satır seçimi
print("\nİlk 3 satır:")
print(df.iloc[0:3])
# Son satır
print("\nSon satır:")
print(df.iloc[-1])
# Belirli satırlar
print("\n1. ve 3. satırlar:")
print(df.iloc[[0, 2]])Koşullu Filtreleme
python
# Tek koşul ile filtreleme
genç_çalışanlar = df[df['Yaş'] < 30]
print("30 yaşından küçük çalışanlar:")
print(genç_çalışanlar)
# Büyüktür koşulu
yüksek_maaşlı = df[df['Maaş'] > 6000]
print("\n6000'den fazla maaş alanlar:")
print(yüksek_maaşlı)
# String koşulu
istanbul_çalışanları = df[df['Şehir'] == 'İstanbul']
print("\nİstanbul'da çalışanlar:")
print(istanbul_çalışanları)
# İçerme koşulu (isin)
it_hr_çalışanları = df[df['Departman'].isin(['IT', 'HR'])]
print("\nIT ve HR departmanlarında çalışanlar:")
print(it_hr_çalışanları)Birden Fazla Koşul
python
# VE (AND) koşulu
genç_ve_yüksek_maaşlı = df[(df['Yaş'] < 30) & (df['Maaş'] > 5500)]
print("Genç ve yüksek maaşlı çalışanlar:")
print(genç_ve_yüksek_maaşlı)
# VEYA (OR) koşulu
istanbul_veya_ankara = df[(df['Şehir'] == 'İstanbul') | (df['Şehir'] == 'Ankara')]
print("\nİstanbul veya Ankara'da çalışanlar:")
print(istanbul_veya_ankara)
# DEĞİL (NOT) koşulu
it_olmayan = df[~(df['Departman'] == 'IT')]
print("\nIT departmanında olmayan çalışanlar:")
print(it_olmayan)
# Karmaşık koşul
karmaşık_filtre = df[
(df['Yaş'] >= 25) &
(df['Yaş'] <= 32) &
(df['Maaş'] > 5000) &
(df['Departman'].isin(['IT', 'HR']))
]
print("\nKarmaşık filtre sonucu:")
print(karmaşık_filtre)📊 4. Gün - Veri Temizleme ve Eksik Veri İşleme
Eksik Veri Oluşturma ve Tespit Etme
python
# Eksik veriler içeren DataFrame oluşturma
import numpy as np
eksik_veri = {
'Ad': ['Ahmet', 'Ayşe', 'Mehmet', None, 'Ali', 'Zeynep'],
'Yaş': [25, None, 35, 28, 32, 27],
'Şehir': ['İstanbul', 'Ankara', None, 'Bursa', 'Antalya', 'İstanbul'],
'Maaş': [5000, 6500, 7200, None, 6200, 5500],
'Email': ['ahmet@email.com', None, 'mehmet@email.com', 'fatma@email.com', None, 'zeynep@email.com']
}
df_eksik = pd.DataFrame(eksik_veri)
print("Eksik veriler içeren DataFrame:")
print(df_eksik)
# Eksik verileri tespit etme
print("\nEksik veri kontrolü (isnull):")
print(df_eksik.isnull())
print("\nEksik veri sayısı (sütunlara göre):")
print(df_eksik.isnull().sum())
print("\nEksik veri yüzdesi:")
print((df_eksik.isnull().sum() / len(df_eksik)) * 100)
# Eksik veri olan satırları gösterme
print("\nEksik veri içeren satırları:")
eksik_satirlar = df_eksik[df_eksik.isnull().any(axis=1)]
print(eksik_satirlar)Eksik Veri İşleme Yöntemleri
python
# 1. Eksik verileri silme
print("1. Eksik verileri silme:")
# Herhangi bir sütunda eksik veri olan satırları silme
df_temiz1 = df_eksik.dropna()
print(f"Orijinal satır sayısı: {len(df_eksik)}")
print(f"Temizleme sonrası: {len(df_temiz1)}")
print(df_temiz1)
# Belirli sütunlarda eksik veri olan satırları silme
df_temiz2 = df_eksik.dropna(subset=['Ad', 'Yaş'])
print(f"\nAd ve Yaş sütunlarında eksik veri olmayan satırlar: {len(df_temiz2)}")
# 2. Eksik verileri doldurma
print("\n2. Eksik verileri doldurma:")
# Sabit değer ile doldurma
df_doldurulmuş1 = df_eksik.fillna('Bilinmiyor')
print("Sabit değer ile doldurma:")
print(df_doldurulmuş1)
# Sütuna göre farklı değerler ile doldurma
doldurma_değerleri = {
'Ad': 'İsimsiz',
'Yaş': df_eksik['Yaş'].mean(), # Ortalama ile
'Şehir': 'Bilinmiyor',
'Maaş': df_eksik['Maaş'].median(), # Medyan ile
'Email': 'email_yok@domain.com'
}
df_doldurulmuş2 = df_eksik.fillna(doldurma_değerleri)
print("\nSütuna göre farklı değerler ile doldurma:")
print(df_doldurulmuş2)
# İleri/geri doldurma (forward fill / backward fill)
df_ffill = df_eksik.fillna(method='ffill') # Önceki değer ile doldur
print("\nÖnceki değer ile doldurma (forward fill):")
print(df_ffill)Tekrarlanan Verileri İşleme
python
# Tekrarlanan veri oluşturma
tekrar_veri = {
'Ad': ['Ahmet', 'Ayşe', 'Mehmet', 'Ahmet', 'Ali', 'Ayşe'],
'Yaş': [25, 30, 35, 25, 32, 30],
'Şehir': ['İstanbul', 'Ankara', 'İzmir', 'İstanbul', 'Antalya', 'Ankara']
}
df_tekrar = pd.DataFrame(tekrar_veri)
print("Tekrarlanan veriler:")
print(df_tekrar)
# Tekrarlanan satırları tespit etme
print("\nTekrarlanan satırlar:")
print(df_tekrar.duplicated())
print("\nTekrarlanan satırları gösterme:")
print(df_tekrar[df_tekrar.duplicated()])
# Tekrarlanan satırları silme
df_benzersiz = df_tekrar.drop_duplicates()
print(f"\nOrijinal satır sayısı: {len(df_tekrar)}")
print(f"Tekrarlar silinince: {len(df_benzersiz)}")
print(df_benzersiz)
# Belirli sütunlara göre tekrar kontrolü
df_benzersiz_ad = df_tekrar.drop_duplicates(subset=['Ad'])
print("\nSadece 'Ad' sütununa göre benzersiz:")
print(df_benzersiz_ad)📊 5. Gün - Veri Dönüştürme ve Gruplama
Sütun İşlemleri
python
# Orijinal veriyi yeniden yükleyelim
df = pd.read_csv('calisanlar.csv')
# Yeni sütun ekleme
df['Yaş_Grubu'] = df['Yaş'].apply(lambda x: 'Genç' if x < 30 else 'Orta Yaş' if x < 35 else 'Olgun')
print("Yaş grubu eklendi:")
print(df)
# Maaş artışı hesaplama
df['Zam_Sonrası_Maaş'] = df['Maaş'] * 1.15 # %15 zam
print(f"\n%15 zam sonrası maaşlar:")
print(df[['Ad', 'Maaş', 'Zam_Sonrası_Maaş']])
# String işlemleri
df['Email'] = df['Ad'].str.lower() + '@company.com'
print(f"\nEmail adresleri oluşturuldu:")
print(df[['Ad', 'Email']])
# Kategorik sütun oluşturma
df['Maaş_Kategorisi'] = pd.cut(df['Maaş'],
bins=[0, 5500, 6500, float('inf')],
labels=['Düşük', 'Orta', 'Yüksek'])
print(f"\nMaaş kategorileri:")
print(df[['Ad', 'Maaş', 'Maaş_Kategorisi']])Gruplama İşlemleri
python
# Departmana göre gruplama
print("Departmana göre gruplama:")
dept_grupları = df.groupby('Departman')
# Her departmanın ortalama maaşı
print("\nDepartmanların ortalama maaşları:")
print(dept_grupları['Maaş'].mean())
# Her departmanın çalışan sayısı
print("\nDepartmanların çalışan sayıları:")
print(dept_grupları.size())
# Birden fazla istatistik
print("\nDepartmanların detaylı istatistikleri:")
print(dept_grupları['Maaş'].agg(['count', 'mean', 'min', 'max']))
# Şehire göre gruplama
şehir_grupları = df.groupby('Şehir')
print("\nŞehirlere göre ortalama yaş:")
print(şehir_grupları['Yaş'].mean().sort_values(ascending=False))
# Birden fazla sütuna göre gruplama
karmaşık_grup = df.groupby(['Şehir', 'Departman'])
print("\nŞehir ve departmana göre gruplama:")
print(karmaşık_grup['Maaş'].mean())Pivot Table İşlemleri
python
# Pivot table oluşturma
pivot_table = df.pivot_table(
values='Maaş',
index='Şehir',
columns='Departman',
aggfunc='mean',
fill_value=0
)
print("Pivot Table - Şehir ve Departmana göre ortalama maaşlar:")
print(pivot_table)
# Birden fazla değer ile pivot table
pivot_table2 = df.pivot_table(
values=['Maaş', 'Yaş'],
index='Departman',
aggfunc={'Maaş': 'mean', 'Yaş': 'mean'}
)
print("\nDepartmanlara göre ortalama maaş ve yaş:")
print(pivot_table2)📊 6. Gün - Sıralama ve İndeksleme
Sıralama İşlemleri
python
# Yaşa göre sıralama (artan)
yaş_sıralı = df.sort_values('Yaş')
print("Yaşa göre artan sıralama:")
print(yaş_sıralı[['Ad', 'Yaş', 'Maaş']])
# Maaşa göre sıralama (azalan)
maaş_sıralı = df.sort_values('Maaş', ascending=False)
print("\nMaaşa göre azalan sıralama:")
print(maaş_sıralı[['Ad', 'Yaş', 'Maaş']])
# Birden fazla sütuna göre sıralama
çoklu_sıralama = df.sort_values(['Departman', 'Maaş'], ascending=[True, False])
print("\nDepartman (artan) ve Maaş (azalan) sıralaması:")
print(çoklu_sıralama[['Ad', 'Departman', 'Maaş']])
# Index'e göre sıralama
index_sıralı = df.sort_index()
print("\nIndex'e göre sıralama:")
print(index_sıralı.head())İndeksleme İşlemleri
python
# Index'i değiştirme
df_new_index = df.set_index('Ad')
print("Ad sütunu index olarak ayarlandı:")
print(df_new_index.head())
# Index ile erişim
print(f"\nAhmet'in bilgileri:")
print(df_new_index.loc['Ahmet'])
# Çoklu index oluşturma
df_multi_index = df.set_index(['Departman', 'Ad'])
print("\nÇoklu index (Departman, Ad):")
print(df_multi_index)
# Çoklu index ile erişim
print(f"\nIT departmanındaki Ahmet'in bilgileri:")
print(df_multi_index.loc[('IT', 'Ahmet')])
# Index'i sıfırlama
df_reset = df_new_index.reset_index()
print("\nIndex sıfırlandı:")
print(df_reset.head())📊 7. Gün - Pratik Uygulama ve Proje
Kapsamlı Veri Analizi Projesi
python
# Daha büyük bir veri seti oluşturalım
import random
np.random.seed(42) # Tekrarlanabilir sonuçlar için
# 100 çalışan verisi oluşturma
n_çalışan = 100
çalışan_verileri = {
'Çalışan_ID': range(1, n_çalışan + 1),
'Ad': [f'Çalışan_{i}' for i in range(1, n_çalışan + 1)],
'Yaş': np.random.randint(22, 65, n_çalışan),
'Departman': np.random.choice(['IT', 'HR', 'Muhasebe', 'Pazarlama', 'Satış'], n_çalışan),
'Şehir': np.random.choice(['İstanbul', 'Ankara', 'İzmir', 'Bursa', 'Antalya'], n_çalışan),
'Deneyim_Yılı': np.random.randint(0, 20, n_çalışan),
'Maaş': np.random.randint(4000, 12000, n_çalışan),
'Performans_Puanı': np.random.randint(60, 100, n_çalışan)
}
büyük_df = pd.DataFrame(çalışan_verileri)
# Bazı eksik veriler ekleyelim
eksik_indeksler = np.random.choice(büyük_df.index, size=10, replace=False)
büyük_df.loc[eksik_indeksler, 'Performans_Puanı'] = np.nan
print("Büyük veri seti oluşturuldu:")
print(f"Veri seti boyutu: {büyük_df.shape}")
print(büyük_df.head())
# Veriyi CSV'ye kaydetme
büyük_df.to_csv('sirket_verileri.csv', index=False)Veri Analizi Adımları
python
# 1. Veri keşfi
print("=== VERİ KEŞFİ ===")
print(f"Veri seti boyutu: {büyük_df.shape}")
print(f"Sütun isimleri: {list(büyük_df.columns)}")
print(f"Veri tipleri:\n{büyük_df.dtypes}")
print(f"\nEksik veri sayısı:\n{büyük_df.isnull().sum()}")
# 2. Temel istatistikler
print("\n=== TEMEL İSTATİSTİKLER ===")
print(büyük_df.describe())
# 3. Eksik verileri işleme
print("\n=== EKSİK VERİ İŞLEME ===")
büyük_df['Performans_Puanı'].fillna(büyük_df['Performans_Puanı'].mean(), inplace=True)
print(f"Eksik veriler doldurulduktan sonra: {büyük_df.isnull().sum()}")
# 4. Departman analizi
print("\n=== DEPARTMAN ANALİZİ ===")
dept_analiz = büyük_df.groupby('Departman').agg({
'Maaş': ['count', 'mean', 'min', 'max'],
'Yaş': 'mean',
'Deneyim_Yılı': 'mean',
'Performans_Puanı': 'mean'
}).round(2)
print(dept_analiz)
# 5. Şehir analizi
print("\n=== ŞEHİR ANALİZİ ===")
şehir_analiz = büyük_df.groupby('Şehir').agg({
'Maaş': 'mean',
'Çalışan_ID': 'count'
}).rename(columns={'Çalışan_ID': 'Çalışan_Sayısı'}).round(2)
print(şehir_analiz.sort_values('Maaş', ascending=False))
# 6. Korelasyon analizi
print("\n=== KORELASYON ANALİZİ ===")
korelasyon = büyük_df[['Yaş', 'Deneyim_Yılı', 'Maaş', 'Performans_Puanı']].corr()
print(korelasyon.round(3))
# 7. Filtreleme örnekleri
print("\n=== FİLTRELEME ÖRNEKLERİ ===")
# Yüksek performanslı çalışanlar
yüksek_performans = büyük_df[büyük_df['Performans_Puanı'] >= 90]
print(f"Yüksek performanslı çalışan sayısı: {len(yüksek_performans)}")
# IT departmanında yüksek maaşlı çalışanlar
it_yüksek_maaş = büyük_df[
(büyük_df['Departman'] == 'IT') &
(büyük_df['Maaş'] > büyük_df['Maaş'].quantile(0.75))
]
print(f"IT'de yüksek maaşlı çalışan sayısı: {len(it_yüksek_maaş)}")
# 8. Sıralama ve en iyi/kötü çalışanlar
print("\n=== SIRALAMA VE RANKING ===")
# En yüksek maaşlı 5 çalışan
en_yüksek_maaş = büyük_df.nlargest(5, 'Maaş')[['Ad', 'Departman', 'Maaş', 'Performans_Puanı']]
print("En yüksek maaşlı 5 çalışan:")
print(en_yüksek_maaş)
# En yüksek performanslı 5 çalışan
en_yüksek_performans = büyük_df.nlargest(5, 'Performans_Puanı')[['Ad', 'Departman', 'Maaş', 'Performans_Puanı']]
print("\nEn yüksek performanslı 5 çalışan:")
print(en_yüksek_performans)
# 9. Pivot table analizi
print("\n=== PIVOT TABLE ANALİZİ ===")
pivot_analiz = büyük_df.pivot_table(
values=['Maaş', 'Performans_Puanı'],
index='Departman',
columns='Şehir',
aggfunc='mean',
fill_value=0
).round(2)
print("Departman ve Şehire göre ortalama maaş ve performans:")
print(pivot_analiz)Özel Analiz Fonksiyonları
python
# Veri analizi için özel fonksiyonlar oluşturalım
def yaş_grubu_oluştur(yaş):
"""Yaşa göre grup belirleme fonksiyonu"""
if yaş < 25:
return 'Genç'
elif yaş < 35:
return 'Orta Yaş'
elif yaş < 50:
return 'Orta Yaş Üstü'
else:
return 'Olgun'
def maaş_kategorisi_oluştur(maaş):
"""Maaşa göre kategori belirleme fonksiyonu"""
if maaş < 5000:
return 'Düşük'
elif maaş < 7500:
return 'Orta'
elif maaş < 10000:
return 'Yüksek'
else:
return 'Çok Yüksek'
def performans_değerlendirme(puan):
"""Performans puanına göre değerlendirme"""
if puan < 70:
return 'Gelişim Gerekli'
elif puan < 80:
return 'Ortalama'
elif puan < 90:
return 'İyi'
else:
return 'Mükemmel'
# Fonksiyonları uygulama
büyük_df['Yaş_Grubu'] = büyük_df['Yaş'].apply(yaş_grubu_oluştur)
büyük_df['Maaş_Kategorisi'] = büyük_df['Maaş'].apply(maaş_kategorisi_oluştur)
büyük_df['Performans_Değerlendirme'] = büyük_df['Performans_Puanı'].apply(performans_değerlendirme)
print("Yeni kategorik sütunlar eklendi:")
print(büyük_df[['Ad', 'Yaş_Grubu', 'Maaş_Kategorisi', 'Performans_Değerlendirme']].head())
# Kategorik analiz
print("\n=== KATEGORİK ANALİZ ===")
print("Yaş grubu dağılımı:")
print(büyük_df['Yaş_Grubu'].value_counts())
print("\nMaaş kategorisi dağılımı:")
print(büyük_df['Maaş_Kategorisi'].value_counts())
print("\nPerformans değerlendirme dağılımı:")
print(büyük_df['Performans_Değerlendirme'].value_counts())İleri Seviye Veri Manipülasyonu
python
# Çoklu koşullu filtreleme ve seçim
print("\n=== İLERİ SEVİYE FİLTRELEME ===")
# Lambda fonksiyonu ile karmaşık filtreleme
yüksek_potansiyel = büyük_df[
büyük_df.apply(lambda row:
(row['Yaş'] < 35) and
(row['Performans_Puanı'] >= 85) and
(row['Deneyim_Yılı'] >= 3), axis=1)
]
print(f"Yüksek potansiyelli genç çalışan sayısı: {len(yüksek_potansiyel)}")
# Quantile tabanlı analiz
print("\n=== QUANTİLE ANALİZİ ===")
maaş_quantiles = büyük_df['Maaş'].quantile([0.25, 0.5, 0.75, 0.9, 0.95])
print("Maaş dağılımı (percentile):")
for q, değer in maaş_quantiles.items():
print(f"%{int(q*100)}: {değer:,.0f} TL")
# En yüksek %10'luk dilim
top_10_percent = büyük_df[büyük_df['Maaş'] >= büyük_df['Maaş'].quantile(0.9)]
print(f"\nEn yüksek %10'luk dilimde {len(top_10_percent)} çalışan var")
# String işlemleri ve regex
print("\n=== STRING İŞLEMLERİ ===")
# Email adresleri oluşturma
büyük_df['Email'] = (büyük_df['Ad'].str.lower().str.replace('_', '.') +
'@' +
büyük_df['Departman'].str.lower() +
'.company.com')
print("Örnek email adresleri:")
print(büyük_df[['Ad', 'Departman', 'Email']].head())
# Sütun adlarını temizleme
büyük_df.columns = büyük_df.columns.str.lower().str.replace('_', ' ')
print(f"\nTemizlenmiş sütun adları: {list(büyük_df.columns)}")Veri Dışa Aktarma ve Raporlama
python
# Özet rapor oluşturma
print("\n=== ÖZET RAPOR ===")
rapor = {
'Toplam Çalışan': len(büyük_df),
'Ortalama Yaş': büyük_df['yaş'].mean(),
'Ortalama Maaş': büyük_df['maaş'].mean(),
'Ortalama Deneyim': büyük_df['deneyim yılı'].mean(),
'Ortalama Performans': büyük_df['performans puanı'].mean(),
'En Kalabalık Departman': büyük_df['departman'].mode()[0],
'En Kalabalık Şehir': büyük_df['şehir'].mode()[0]
}
print("Şirket Genel Durumu:")
for anahtar, değer in rapor.items():
if isinstance(değer, (int, float)) and not isinstance(değer, bool):
print(f"{anahtar}: {değer:.2f}")
else:
print(f"{anahtar}: {değer}")
# Departman bazlı detaylı rapor
dept_rapor = büyük_df.groupby('departman').agg({
'çalışan id': 'count',
'maaş': ['mean', 'min', 'max'],
'yaş': 'mean',
'performans puanı': 'mean'
}).round(2)
print("\nDepartman Bazlı Rapor:")
print(dept_rapor)
# Veriyi farklı formatlarda kaydetme
büyük_df.to_csv('analiz_sonucu.csv', index=False)
büyük_df.to_excel('analiz_sonucu.xlsx', index=False)
# Sadece özet istatistikleri kaydetme
özet_df = büyük_df.groupby('departman').agg({
'maaş': ['count', 'mean', 'std'],
'performans puanı': 'mean'
}).round(2)
özet_df.to_csv('departman_ozeti.csv')
print("\nDosyalar kaydedildi:")
print("- analiz_sonucu.csv")
print("- analiz_sonucu.xlsx")
print("- departman_ozeti.csv")🎯 Hafta Sonu Değerlendirmesi
Bu Hafta Öğrendikleriniz
Pandas Temelleri
- Series ve DataFrame yapıları
- Veri okuma/yazma işlemleri
- Temel indeksleme ve seçim
Veri Temizleme
- Eksik veri tespiti ve işleme
- Tekrarlanan veri kontrolü
- Veri tiplerini anlama
Veri Manipülasyonu
- Filtreleme ve koşullu seçim
- Gruplama ve agregasyon
- Sıralama ve indeksleme
İleri Seviye İşlemler
- Pivot table oluşturma
- Lambda fonksiyonları
- String işlemleri
Pratik Egzersizleri
python
# EGZERSIZ 1: Kendi veri setinizi oluşturun
# 50 öğrenci bilgisi içeren bir DataFrame oluşturun:
# - Ad, Soyad, Yaş, Bölüm, Not Ortalaması, Şehir
# EGZERSIZ 2: Veri analizi yapın
# - Bölümlere göre ortalama not hesaplayan
# - En başarılı 10 öğrenciyi bulan
# - Şehirlere göre öğrenci dağılımını gösteren kod yazın
# EGZERSIZ 3: Veri temizleme
# Veri setinize bilinçli olarak eksik veriler ekleyin ve bunları farklı yöntemlerle temizleyin
print("=== HAFTA SONU EGZERSİZLERİ ===")
print("Yukarıdaki egzersizleri çözerek bu haftaki öğrendiklerinizi pekiştirin!")Gelecek Hafta Hazırlığı
python
# Gelecek hafta için hazırlık
print("=== GELECEK HAFTA İÇİN HAZIRLIK ===")
print("Şu konuları tekrar edin:")
print("1. DataFrame oluşturma ve temel işlemler")
print("2. Filtreleme ve koşullu seçim")
print("3. Gruplama ve agregasyon")
print("4. Veri temizleme teknikleri")
print("\nGelecek hafta NumPy ile matematiksel işlemler öğreneceğiz!")📚 Ek Ders Materyali
PDF Ders Notları
Bu hafta için detaylı teorik bilgiler ve ek örnekler içeren PDF ders notlarını inceleyebilirsiniz:
- ders.pdf - Pandas ile Veri Manipülasyonu Detaylı Ders Notları
- Teorik açıklamalar ve kavramlar
- İleri seviye örnekler ve uygulamalar
- Pratik alıştırmalar ve çözümler
- Sık sorulan sorular ve cevapları
💡 Öneri: PDF dosyasını indirip çalışma sırasında yanınızda bulundurun. Özellikle karmaşık konuları tekrar etmek için faydalı olacaktır.
📖 Ek Kaynaklar ve Referanslar
Video Eğitim Önerileri
- Corey Schafer - Pandas Tutorials (YouTube)
- Data School - Pandas (YouTube)
- Kaggle Learn - Pandas Course
Dokümantasyon
Pratik İçin Veri Setleri
İpuçları
- Her gün en az 1 saat pratik yapın
- Gerçek veri setleri ile çalışın
- Hata mesajlarını okuyun ve anlamaya çalışın
- Stack Overflow ve GitHub'da örnekleri inceleyin
Başarılar! 🚀