Genel
Python ile Veri Analizi: Adım Adım Pandas ve Matplotlib Rehberi
Veri analizi artık hemen her sektörde en kritik yetkinliklerden biri. Python ise bu işin açık ara en popüler dili. Bu yazıda sıfırdan değil ama “temel Python biliyorum, veri analizine yeni başlıyorum” seviyesindeki birine hitap eden, pratik odaklı bir rehber hazırladım.
Veri analizi artık hemen her sektörde en kritik yetkinliklerden biri. Python ise bu işin açık ara en popüler dili.
Bu yazıda sıfırdan değil ama “temel Python biliyorum, veri analizine yeni başlıyorum” seviyesindeki birine hitap eden, pratik odaklı bir rehber hazırladım.
Hedef: Bir CSV dosyasını okuyup → temizleyip → anlamlı analizler yapıp → güzel görselleştirmeler hazırlayabilmek
Gereksinimler (2025 itibarıyla güncel)
pip install pandas matplotlib seaborn numpy
# bonus: daha güzel grafikler için
pip install seaborn jupyterlab
Jupyter Notebook veya VS Code + Jupyter eklentisi kullanmanı şiddetle öneririm.
1. Temel Pandas Operasyonları (10 dk’da öğren)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# Görsellik için tema (isteğe bağlı ama çok fark yaratır)
sns.set_theme(style="whitegrid", palette="muted")
%matplotlib inline # Jupyter'da grafik gösterimi için
Örnek veri seti yükleme
# Kendi veri setin yoksa → internetten popüler bir dataset indirelim
url = "https://raw.githubusercontent.com/mwaskom/seaborn-data/master/tips.csv"
df = pd.read_csv(url)
# Alternatif: senin kendi dosyan varsa
# df = pd.read_csv("satislar_2024.csv", encoding="utf-8", sep=";")
Hızlı bakış fonksiyonları (her zaman ilk 4’ü yaz)
df.head(3)
df.tail(2)
df.shape # (satır, sütun)
df.info() # veri tipleri + eksik değer sayısı
df.describe() # sayısal sütunlar için istatistik özet
df.columns
df.dtypes
En çok kullanılan seçim / filtreleme yöntemleri
# Tek sütun
df['total_bill']
# Birden fazla sütun
df[['total_bill', 'tip', 'day']]
# Satır filtreleme (mantıksal koşullar)
df[df['total_bill'] > 40]
df[df['day'].isin(['Sat', 'Sun'])]
df[(df['time'] == 'Dinner') & (df['tip'] >= 5)]
# loc & iloc farkı (çok önemli!)
df.loc[0:5, ['day','tip']] # etiket bazlı
df.iloc[0:5, [1,3,5]] # pozisyon bazlı
2. Veri Temizleme – En Çok Karşılaşılan 7 Problem
# 1. Eksik değerler
df.isnull().sum()
# Hızlı çözümler
df['tip'].fillna(df['tip'].median(), inplace=True) # medyan ile doldur
df.dropna(subset=['smoker'], inplace=True) # satırı sil
df['sex'] = df['sex'].fillna('Unknown')
# 2. Kategorik → sayısal dönüşüm (one-hot encoding)
df = pd.get_dummies(df, columns=['day', 'time'], drop_first=True)
# 3. Sütun ismi düzeltme
df.rename(columns={'total_bill': 'fatura', 'tip': 'bahsis'}, inplace=True)
# 4. String temizleme (örnek)
df['smoker'] = df['smoker'].str.lower().replace({'yes':1, 'no':0})
# 5. Aykırı değer (outlier) yakalama – basit yöntem
Q1 = df['fatura'].quantile(0.25)
Q3 = df['fatura'].quantile(0.75)
IQR = Q3 - Q1
alt = Q1 - 1.5*IQR
ust = Q3 + 1.5*IQR
df_aykiri = df[(df['fatura'] < alt) | (df['fatura'] > ust)]
3. Grup İstatistikleri – groupby & pivot_table
# Gün bazında ortalama bahşiş
df.groupby('day')['bahsis'].mean().round(2)
# Daha detaylı
df.groupby(['day', 'time', 'sex'])[['fatura','bahsis']].agg(['mean','count','max'])
# En çok satan 3 gün
df.groupby('day').size().sort_values(ascending=False).head(3)
# Pivot table (Excel'deki gibi)
pd.pivot_table(df,
values='bahsis',
index='day',
columns='time',
aggfunc=['mean','count'])
4. Görselleştirme – Matplotlib + Seaborn En Pratik Kombinasyonlar
a) Tek değişken – Dağılım
plt.figure(figsize=(10,5))
# Histogram + KDE
sns.histplot(data=df, x='fatura', kde=True, bins=20, color='teal')
plt.title('Fatura Tutarlarının Dağılımı', fontsize=14, pad=10)
plt.xlabel('Fatura ($)')
plt.ylabel('Sıklık')
plt.show()
b) Kategorik – Bar / Countplot
plt.figure(figsize=(8,5))
sns.countplot(data=df, x='day', hue='time', palette='Set2')
plt.title('Gün ve Öğün Bazında Müşteri Sayısı')
plt.show()
c) İlişki – Scatter + Regresyon
plt.figure(figsize=(9,6))
sns.regplot(data=df, x='fatura', y='bahsis',
scatter_kws={'alpha':0.6}, line_kws={'color':'red'})
plt.title('Fatura arttıkça bahşiş nasıl değişiyor?')
plt.show()
d) Korelasyon matrisi (heatmap)
plt.figure(figsize=(7,6))
sns.heatmap(df.corr(numeric_only=True), annot=True, cmap='coolwarm', fmt='.2f')
plt.title('Sayısal Değişkenler Arası Korelasyon')
plt.show()
e) Boxplot – Aykırı değerleri görmenin en iyi yolu
plt.figure(figsize=(10,5))
sns.boxplot(data=df, x='day', y='bahsis', hue='sex', palette='pastel')
plt.title('Günlere Göre Bahşiş Dağılımı ve Cinsiyet')
plt.show()
5. Hepsi Bir Arada – Mini Analiz Projesi (kopyala-yapıştır)
# ────────────────────────────────────────────────
# ÖRNEK ANALİZ AKISI – Tips veri seti
# ────────────────────────────────────────────────
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')
# 1. Veri keşfi
print(df.shape)
print(df.isnull().sum())
print(df.describe(include='all'))
# 2. Yeni özellik ekleme
df['bahsis_orani'] = df['tip'] / df['total_bill'] * 100
# 3. Grup analizleri
print("\nGünlük ortalama bahşiş oranı:")
print(df.groupby('day')['bahsis_orani'].mean().round(2))
# 4. Görselleştirme seti
fig, axes = plt.subplots(2, 2, figsize=(14,10))
sns.histplot(ax=axes[0,0], data=df, x='bahsis_orani', kde=True)
axes[0,0].set_title('Bahşiş Oranı Dağılımı')
sns.boxplot(ax=axes[0,1], data=df, x='time', y='bahsis_orani', hue='sex')
axes[0,1].set_title('Öğün & Cinsiyete Göre Bahşiş Oranı')
sns.scatterplot(ax=axes[1,0], data=df, x='total_bill', y='bahsis_orani', hue='day', size='size')
axes[1,0].set_title('Fatura – Bahşiş Oranı İlişkisi')
sns.heatmap(ax=axes[1,1], data=df.corr(numeric_only=True), annot=True, cmap='RdBu', fmt='.2f')
axes[1,1].set_title('Korelasyon Matrisi')
plt.tight_layout()
plt.show()
Son Söz & İleri Seviye İçin Tavsiyeler
Şu an öğrendiklerinle %80’lik veri analizi işini halledebilirsin.
İleri gitmek istersen sırayla şunlara bak:
- Polars → çok büyük verilerde pandas’tan 5–20× hızlı
- Plotly / Altair → interaktif grafik
- Feature Engineering (dt accessor, pd.cut/qcut, target encoding…)
- Missingno + ydata-profiling → otomatik EDA raporları
- Scikit-learn ile basit modeller (lineer regresyon, karar ağacı…)
Bol pratik yapmayı unutma. En iyi öğrenme yolu: kendi veri setinle uğraşmak.
Herkese keyifli analizler! 🐼📊