Yazılım

Python ile Veri Analizi ve Görselleştirme: Pandas ve NumPy Başlangıç Kılavuzu

Talha AslanTalha Aslan 13 dk okuma

Python ile veri analizi nedir ve Pandas ile NumPy bu işte ne yapar?

Python ile veri analizi, ham tabloları Python kodu kullanarak okuma, temizleme, özetleme ve grafiğe dökme işidir. NumPy hızlı sayısal diziler ve vektörel hesap sağlar; Pandas bu dizilerin üstüne etiketli satır ve sütunlar ekleyerek Excel benzeri tabloları kodla yönetmenizi mümkün kılar. Matplotlib ise sonucu grafiğe çevirir.

Python ile veri analizi konusuna ben pazarlama tarafından girdim. 2012'den beri reklam ve SEO raporlarıyla çalışıyorum; bir noktada Excel dosyaları 300 bin satıra ulaşınca kod yazmak zorunda kaldım. Bu kılavuz, o dönemde keşke elimde olsaydı dediğim uygulamalı başlangıç notlarıdır. Her bölümde çalıştırabileceğiniz kısa kod örnekleri var.

Burada kütüphane haritası ya da makine öğrenimi anlatmıyorum; odak yalnızca Pandas, NumPy ve Matplotlib ile ilk gerçek analizinizi bitirmek. Diğer yazılım yazılarına yazılım kategorisinden ulaşabilirsiniz.

Başlamak için bilgisayarınıza neler kurmalısınız?

İlk adım olarak güncel bir Python sürümü kurun. Pandas 3.0 sürüm notlarına göre yeni sürüm en az Python 3.11 ve NumPy 1.26 istiyor; bu yüzden eski bir Python ile başlarsanız kurulum hatası alırsınız. Ardından her proje için ayrı bir sanal ortam açmanızı öneririm.

python3 -m venv .venv
source .venv/bin/activate
pip install pandas numpy matplotlib jupyterlab

Kodları denemek için JupyterLab idealdir, çünkü her hücrenin çıktısını hemen görürsünüz. Öte yandan VS Code içindeki notebook desteği de aynı işi görür. Hangisini seçerseniz seçin, dosyalarınızı proje klasöründe tutun ve veri dosyalarını ayrı bir data klasörüne koyun.

  • Python 3.11 veya üstü: Pandas 3 için alt sınır.
  • Sanal ortam: projeler arasında sürüm çakışmasını önler.
  • JupyterLab ya da VS Code: adım adım deneme için.
  • Bir örnek CSV: kendi reklam veya satış dökümünüz en iyi öğretmendir.

NumPy dizisi neden sıradan Python listesinden hızlıdır?

NumPy dizisi (ndarray) tüm elemanları aynı tipte ve bellekte bitişik tutar. Böylece işlemleri C ile yazılmış döngüler yürütür ve Python'un her eleman için yaptığı tip kontrolünden kurtulursunuz. Buna vektörel hesap diyoruz: döngü yazmadan tüm diziye tek satırda işlem uygularsınız.

import numpy as np

tiklama = np.array([120, 340, 95, 410])
harcama = np.array([300.0, 720.0, 250.0, 900.0])

tbm = harcama / tiklama
print(tbm.round(2))  # tıklama başına maliyet

Yukarıdaki örnekte dört kampanyanın tıklama başına maliyetini tek satırla buldunuz. Aynı işi listeyle yapsaydınız bir for döngüsü ve ara liste yazmanız gerekirdi. Üstelik veri milyonlarca satıra çıktığında fark saniyeler yerine dakikalara dönüşür.

NumPy'da en sık kullanacağınız kavramlar şunlar: shape (boyut), dtype (veri tipi), dilimleme ve yayınlama (broadcasting). Yayınlama, farklı boyuttaki dizileri kurallara göre eşleştirip işlem yapmanızı sağlar; örneğin tüm fiyatları tek bir KDV oranıyla çarpmak gibi.

NumPy ile en sık hangi hesapları yaparsınız?

Günlük analizde NumPy'ı çoğunlukla dolaylı kullanırsınız, çünkü Pandas arka planda onu çağırır. Yine de birkaç fonksiyonu doğrudan bilmek işinizi kolaylaştırır. Örneğin np.where ile koşullu değer atar, np.percentile ile yüzdelik dilimleri bulursunuz.

import numpy as np

siparis = np.array([150, 90, 1200, 340, 75, 610])
print(siparis.mean(), np.median(siparis))
print(np.percentile(siparis, [25, 75]))
etiket = np.where(siparis >= 500, "büyük", "küçük")

Ortalama ile medyan arasındaki farka dikkat edin. Tek bir 1200 liralık sipariş ortalamayı yukarı çeker, medyan ise pek etkilenmez. Bu nedenle sepet tutarı gibi çarpık dağılımlarda raporlara medyanı da eklerim. Ayrıca rastgele örnek veri üretmek için np.random.default_rng() kullanın; eski np.random.seed yaklaşımı yerine NumPy belgeleri bu üreteci öneriyor.

Daha fazla ayrıntı için NumPy'ın yeni başlayanlar kılavuzu kısa ve güvenilir bir kaynaktır.

Pandas DataFrame ve Series tam olarak nedir?

Series, etiketli tek boyutlu bir sütundur; DataFrame ise aynı indeksi paylaşan Series'lerden oluşan iki boyutlu tablodur. Kısacası DataFrame'i kod ile yönettiğiniz bir Excel sayfası gibi düşünebilirsiniz. Farkı şu: yaptığınız her adım kod olarak kalır ve yarın aynı analizi tek tuşla tekrarlarsınız.

import pandas as pd

df = pd.DataFrame({
    "kampanya": ["Marka", "Genel", "Rakip"],
    "harcama": [1200.0, 3400.0, 900.0],
    "donusum": [48, 61, 9],
})
print(df.dtypes)

Pandas 3.0 ile gelen önemli bir değişiklik metin sütunlarıyla ilgili. Sürüm notlarına göre metinler artık varsayılan olarak eski object tipi yerine özel str tipiyle geliyor. Dolayısıyla eski bir öğreticide object gördüğünüzde şaşırmayın; aynı kod yeni sürümde str gösterir.

İndeks de ayrı bir kavramdır. Varsayılan indeks 0'dan başlayan sayılardır, ancak tarih ya da ürün kodu gibi anlamlı bir sütunu indeks yapmak zaman serisi analizlerini ciddi biçimde kolaylaştırır.

Python ile veri analizi için CSV ve Excel dosyalarını nasıl okursunuz?

Gerçek hayatta analiz neredeyse her zaman bir dosyayı okumakla başlar. Pandas bunun için read_csv, read_excel ve read_json gibi fonksiyonlar sunar. Türkiye'de dışa aktarılan dosyalarda ayraç çoğu zaman noktalı virgül, ondalık işareti ise virgüldür; bu yüzden parametreleri baştan belirtin.

df = pd.read_csv(
    "data/reklam.csv",
    sep=";",
    decimal=",",
    encoding="utf-8",
    parse_dates=["tarih"],
)
df.head()

Excel okumak için ek olarak openpyxl paketini kurmanız gerekir. Ayrıca büyük dosyalarda yalnızca ihtiyacınız olan sütunları usecols ile seçmek belleği rahatlatır. Tarih sütunlarını okurken parse_dates kullanırsanız sonradan dönüşümle uğraşmazsınız.

Veri kaynağınız bir reklam paneliyse, kampanya adlarının tutarlı olması sonraki her adımı kolaylaştırır. Bu nedenle bağlantılarınızı UTM oluşturucu ile standart adlandırmayla etiketlemek, analiz aşamasında saatler kazandırır.

Veriye ilk bakışta hangi komutları çalıştırmalısınız?

Dosyayı okuduktan sonra hemen hesaplamaya geçmeyin. Önce verinin neye benzediğini anlayın; ben bu adıma her seferinde beş dakika ayırıyorum ve hataların çoğunu burada yakalıyorum.

  1. df.shape: kaç satır ve sütun olduğunu gösterir.
  2. df.info(): sütun tiplerini ve boş olmayan değer sayısını listeler.
  3. df.describe(): sayısal sütunların özet istatistiklerini verir.
  4. df.head() ve df.sample(5): gerçek satırlara göz atmanızı sağlar.
  5. df["kolon"].value_counts(): kategorilerin dağılımını çıkarır.

Örneğin harcama sütunu object ya da str tipinde görünüyorsa, içinde "1.250,00 TL" gibi metinler var demektir. Yani toplama yapmadan önce temizlemeniz gerekir. Benzer şekilde tarih sütunu tarih tipinde değilse aylık gruplama çalışmaz.

Ayrıca describe() çıktısındaki min ve max değerlerine bakın. Negatif bir harcama ya da 10 milyonluk tek bir sipariş, veri girişinde bir sorun olduğunu gösterir.

Eksik ve hatalı veriyi nasıl temizlersiniz?

Veri temizliği, analizin en uzun ama en değerli kısmıdır. Eksik değerleri bulmak için isna().sum(), tekrarlayan satırlar için duplicated() kullanırsınız. Sonra her durum için bilinçli bir karar verirsiniz: silmek mi, doldurmak mı, yoksa ayrı işaretlemek mi?

print(df.isna().sum())
df = df.drop_duplicates()

df["harcama"] = (
    df["harcama"].astype(str)
      .str.replace("TL", "", regex=False)
      .str.replace(".", "", regex=False)
      .str.replace(",", ".", regex=False)
      .astype(float)
)
df["donusum"] = df["donusum"].fillna(0)

Dönüşüm sütunundaki boş değeri 0 ile doldurmak mantıklıdır, çünkü kayıt yoksa dönüşüm de yoktur. Öte yandan eksik bir fiyatı 0 yaparsanız ortalamayı bozarsınız. Kısacası doldurma kararı sütunun anlamına bağlıdır, tek bir kural yoktur.

Metin sütunlarında boşluk ve büyük küçük harf farklarını da düzeltin. str.strip() ve str.lower() ile "Marka " ve "marka" aynı kampanya olur; aksi halde gruplamada iki ayrı satır görürsünüz.

Satırları nasıl filtreler ve seçersiniz?

Seçim işlemlerinde iki ana aracınız var: etikete göre çalışan loc ve konuma göre çalışan iloc. Koşullu filtre için köşeli parantez içine mantıksal ifade yazarsınız. Birden fazla koşulu & ve | ile bağlar, her koşulu paranteze alırsınız.

pahali = df[(df["harcama"] > 1000) & (df["donusum"] < 10)]

# Değer atamak için daima loc kullanın
df.loc[df["donusum"] == 0, "durum"] = "incele"

Burada Pandas 3.0 ile gelen kritik bir kural var. Sürüm notlarına göre Copy-on-Write artık varsayılan; yani indeksleme sonucu dönen her nesne kullanıcı açısından kopya gibi davranır. Bu nedenle df[kosul]["kolon"] = deger şeklindeki zincirleme atama artık tabloyu hiç değiştirmez. Eski SettingWithCopyWarning uyarısı da kaldırıldı.

Çözüm basit: değer atarken her zaman df.loc[kosul, "kolon"] kalıbını kullanın. Ayrıca metin içeren satırlar için str.contains(), liste eşleşmesi için isin() işinizi görür. Ayrıntılar için Pandas 3.0 sürüm notlarına göz atın.

Yeni sütunları ve oranları nasıl hesaplarsınız?

Analizin asıl değeri türetilmiş metriklerde ortaya çıkar. Pandas'ta sütunlar arasında aritmetik işlem yaptığınızda NumPy'ın vektörel gücü devreye girer, dolayısıyla döngü yazmanız gerekmez. Sıfıra bölme durumunu ise baştan yönetin.

df["tbm"] = df["harcama"] / df["tiklama"]
df["donusum_orani"] = df["donusum"] / df["tiklama"]
df["edinme_maliyeti"] = df["harcama"] / df["donusum"].replace(0, np.nan)

Son satırda sıfırları NaN'a çevirdim. Böylece dönüşümü olmayan kampanyalarda sonsuz değer yerine boş hücre görürsünüz ve ortalamalar bozulmaz. Bu tür metriklerin iş tarafında ne anlama geldiğini dijital pazarlama KPI'ları yazısında ayrıca anlattım.

Kategorik bölme için pd.cut çok kullanışlıdır. Örneğin sepet tutarlarını 0-250, 250-1000 ve 1000 üstü diye üç banda ayırabilir, sonra her bandın payını hesaplarsınız. Yüzde değişimleri elle doğrulamak isterseniz yüzde hesaplama aracı hızlı bir sağlama sunar.

groupby ile verileri nasıl özetlersiniz?

groupby, Pandas'ın en güçlü fonksiyonudur ve "böl, uygula, birleştir" mantığıyla çalışır. Veriyi bir sütuna göre gruplara ayırır, her gruba bir toplama uygular ve sonucu tek tabloda birleştirir. Excel'deki özet tabloların kod karşılığıdır.

ozet = (
    df.groupby("kampanya")
      .agg(harcama=("harcama", "sum"),
           donusum=("donusum", "sum"),
           gun=("tarih", "nunique"))
      .assign(cpa=lambda t: t["harcama"] / t["donusum"])
      .sort_values("cpa")
)

Burada adlandırılmış toplama kullandım; böylece çıktı sütunlarının adı baştan anlamlı olur. Ayrıca oranları grup toplamları üzerinden hesapladım. Satır bazlı oranların ortalamasını almak yaygın bir hatadır, çünkü küçük kampanyalar büyükler kadar ağırlık kazanır.

Zaman bazlı özet için resample kullanın. Tarih sütununu indeks yaptıktan sonra df.resample("W").sum() haftalık, "MS" ise ay başına göre toplam verir.

Tabloları birleştirme ve pivot işlemleri nasıl çalışır?

Gerçek projelerde veri tek dosyadan gelmez. Reklam harcaması bir dosyada, sipariş kayıtları başka bir dosyadadır. İki tabloyu ortak bir anahtarla birleştirmek için merge kullanırsınız; SQL'deki JOIN ile aynı mantıktır.

birlesik = reklam.merge(siparis, on=["tarih", "kampanya"], how="left", validate="one_to_one")

pivot = birlesik.pivot_table(
    index="kampanya", columns="cihaz",
    values="ciro", aggfunc="sum", fill_value=0,
)

validate parametresini özellikle öneririm. Anahtar tekrar ediyorsa Pandas hata verir ve satırların sessizce çoğalmasını engeller. Tecrübeme göre birleştirmeden sonra toplam cironun şişmesi, en sık karşılaştığım analiz hatasıdır.

  • how="left": soldaki tüm satırları korur.
  • how="inner": yalnızca iki tarafta eşleşenleri tutar.
  • how="outer": iki taraftaki her şeyi getirir, eşleşmeyenleri boş bırakır.
  • pd.concat: aynı yapıdaki dosyaları alt alta ekler.

Python ile veri analizi sonuçlarını Matplotlib ile nasıl görselleştirirsiniz?

Rakamları tabloda bırakmak çoğu zaman yetmez; karar veren kişi eğilimi bir bakışta görmek ister. Pandas nesnelerinde .plot() metodu Matplotlib'i doğrudan çağırır, bu yüzden hızlı grafik için ek kod gerekmez. Sunuma girecek grafiklerde ise Matplotlib'in nesne yönelimli arayüzünü kullanın.

import matplotlib.pyplot as plt

haftalik = df.set_index("tarih").resample("W")[["harcama", "ciro"]].sum()

fig, ax = plt.subplots(figsize=(9, 4))
haftalik.plot(ax=ax, marker="o")
ax.set_title("Haftalık harcama ve ciro")
ax.set_ylabel("TL")
fig.tight_layout()
fig.savefig("haftalik.png", dpi=150)

Grafiği dosyaya kaydettiğinizde raporlara ve e-postalara doğrudan ekleyebilirsiniz. Ayrıca başlık ve eksen etiketi olmayan grafik göndermeyin; üç hafta sonra kendiniz bile neyi çizdiğinizi hatırlamazsınız. Matplotlib hızlı başlangıç sayfası iki arayüzün farkını iyi açıklar.

Hangi soruya hangi grafik türü uyar?

Grafik seçimi estetikten önce soruya bağlıdır. Yanlış grafik doğru veriyi bile yanıltıcı gösterir. Aşağıdaki tablo, başlangıç için en sık ihtiyaç duyacağınız eşleşmeleri özetliyor.

SorunuzGrafikPandas kısayolu
Zaman içinde nasıl değişti?Çizgi grafikdf.plot()
Kategoriler nasıl sıralanıyor?Yatay çubukdf.plot.barh()
Değerler nasıl dağılıyor?Histogramdf["x"].plot.hist(bins=30)
İki ölçü birlikte mi hareket ediyor?Serpme grafikdf.plot.scatter(x="a", y="b")
Uç değerler nerede?Kutu grafikdf.plot.box()

Pasta grafiği bilinçli olarak tabloya koymadım. Dilim sayısı üçü geçince göz alanları karşılaştırmakta zorlanır; yatay çubuk aynı bilgiyi daha net verir. Öte yandan iki metriği tek grafikte göstermek istiyorsanız ikinci y eksenine dikkat edin, çünkü ölçekleri farklı eksenler yanlış korelasyon izlenimi yaratır.

Renk seçiminde de sade kalın. Tek bir vurgu rengi ve gri tonlar, çok renkli grafiklerden çok daha hızlı okunur.

Uygulamalı örnek: reklam ve satış verisini baştan sona nasıl analiz edersiniz?

Şimdi parçaları birleştirelim. Bu bölüm bir örnek senaryodur, gerçek bir müşteri verisi değildir: elinizde günlük reklam dökümü ve sipariş listesi olduğunu varsayın. Amaç, hangi kampanyanın harcadığından fazla ciro getirdiğini görmek.

  1. İki dosyayı doğru ayraç ve tarih ayarlarıyla okuyun.
  2. Kampanya adlarını str.strip().str.lower() ile standartlaştırın.
  3. Tarih ve kampanya üzerinden merge ile birleştirin; validate kullanın.
  4. Kampanya bazında harcama ve ciroyu groupby ile toplayın.
  5. ROAS sütununu grup toplamlarından hesaplayın.
  6. Sonucu yatay çubuk grafikle çizin ve CSV olarak kaydedin.
ozet = birlesik.groupby("kampanya")[["harcama", "ciro"]].sum()
ozet["roas"] = ozet["ciro"] / ozet["harcama"]
ozet.sort_values("roas").plot.barh(y="roas", legend=False)
ozet.to_csv("kampanya_ozet.csv", sep=";", decimal=",")

Çıkan ROAS değerlerini tek tek kontrol etmek isterseniz ROAS hesaplayıcı ile birkaç satırı elle sağlamanızı öneririm. Böylece formülde bir hata varsa sunuma girmeden fark edersiniz. Rapor çıktısını yorumlarken de dijital pazarlama raporu nasıl okunur yazısındaki soruları kendinize sorun.

Search Console verisini Pandas ile nasıl incelersiniz?

Bu yöntemi SEO tarafında da her hafta kullanıyorum. Search Console'dan dışa aktardığınız sorgu ve sayfa tabloları, arayüzde göremediğiniz kalıpları Pandas ile ortaya çıkarır. Örneğin gösterimi yüksek ama tıklama oranı düşük sorguları tek filtreyle listeleyebilirsiniz.

gsc = pd.read_csv("data/sorgular.csv")
firsat = gsc[(gsc["Gösterimler"] > 500) & (gsc["TO"] < 0.02)]
firsat.sort_values("Gösterimler", ascending=False).head(20)

Sütun adları dışa aktarma diline göre değişir, bu yüzden önce gsc.columns ile adları kontrol edin. Ayrıca TO sütunu yüzde işaretiyle metin olarak gelebilir; o durumda temizleme bölümündeki yöntemi uygularsınız. Dışa aktarma adımlarını Google Search Console rehberinde anlattım.

Bu tür analizleri düzenli yapacak vaktiniz yoksa, SEO danışmanlığı kapsamında aynı veriyi sizin için yorumlayabilirim.

Yeni başlayanlar en çok hangi hataları yapar?

Öğrenme sürecinde herkes benzer tuzaklara düşer. Ben de düştüm; aşağıdaki liste kendi notlarımdan derlendi. Kodunuz çalışıyor ama sonuç tuhaf görünüyorsa önce bu maddeleri kontrol edin.

  • Zincirleme atama yapmak: Pandas 3 ile bu tamamen etkisiz; loc kullanın.
  • Satır bazlı oranların ortalamasını almak: oranı toplamlardan hesaplayın.
  • Ondalık ayracı yanlış okumak: decimal="," parametresini unutmayın.
  • Birleştirmede tekrar eden anahtarlar: validate ile yakalayın.
  • Satır satır for döngüsü yazmak: vektörel işlem ya da groupby tercih edin.
  • Ham dosyanın üstüne yazmak: temiz veriyi daima yeni bir dosyaya kaydedin.

Özellikle son madde hayat kurtarır. Ham veriyi değiştirmezseniz, hatayı fark ettiğiniz anda analizi baştan çalıştırırsınız. Dolayısıyla notebook'unuzu yukarıdan aşağıya tek seferde çalışacak şekilde düzenleyin.

Tarih sütunlarında da yeni bir ayrıntı var. Pandas 3.0 notlarına göre metinden okunan tarihler artık varsayılan olarak mikro saniye çözünürlüğüyle geliyor; tarihleri tamsayıya çevirip hesap yapıyorsanız sonuçlarınızı yeniden kontrol edin.

Büyük dosyalarda performansı nasıl artırırsınız?

Birkaç yüz bin satıra kadar Pandas dizüstü bilgisayarda rahat çalışır. Dosya büyüdükçe bellek sorun olmaya başlar. İlk yapmanız gereken, gereksiz sütunları okumamak ve veri tiplerini küçültmektir.

  • Tekrarlayan metin sütunlarını category tipine çevirin.
  • Sayısal sütunlarda pd.to_numeric(downcast="integer") kullanın.
  • CSV yerine Parquet biçimini tercih edin; hem daha küçük hem daha hızlıdır.
  • Çok büyük dosyaları chunksize ile parça parça işleyin.
  • apply yerine mümkünse yerleşik vektörel fonksiyonları kullanın.

Bellek kullanımını görmek için df.memory_usage(deep=True).sum() komutunu çalıştırın. Ayrıca PyArrow kuruluysa Pandas 3.0'daki yeni str tipi arka planda onu kullanır; sürüm notlarına göre PyArrow yoksa NumPy object tipine geri döner. Bu nedenle büyük metin sütunlarıyla çalışıyorsanız PyArrow kurmak mantıklıdır.

Veri milyonlarca satırı aştığında Polars ya da DuckDB gibi alternatiflere bakabilirsiniz. Ancak başlangıçta bunlara gerek yok; Pandas temelini sağlam kurarsanız geçiş kolay olur.

Notebook dosyanızı nasıl düzenli tutarsınız?

Analiz büyüdükçe notebook dağınık bir hücre yığınına dönüşür. Bunu önlemek için dosyayı baştan bölümlere ayırın: içe aktarmalar, veri okuma, temizlik, analiz ve grafik. Her bölümün başına kısa bir Markdown başlığı koyun; böylece üç ay sonra açtığınızda neyin nerede olduğunu hemen bulursunuz.

Tekrar eden işleri fonksiyona çevirin. Örneğin para birimi temizleyen kodu üç farklı sütunda kopyalamak yerine tek bir temizle_tutar() fonksiyonu yazın. Ayrıca sabit değerleri, yani dosya yolları ve eşikleri, en üstte tek bir hücrede toplayın. Sonra bir eşiği değiştirmek istediğinizde kodu aramak zorunda kalmazsınız.

Son olarak düzenli aralıklarla Restart and Run All komutunu çalıştırın. Hücreleri karışık sırayla çalıştırdığınızda gizli bağımlılıklar oluşur ve sonuç yalnızca sizin oturumunuzda doğru görünür.

Analiz sonuçlarını ekibinizle nasıl paylaşırsınız?

Kod yazan herkes sonucunu kodu okumayan birine anlatmak zorundadır. Bu yüzden notebook'u doğrudan göndermek yerine özet bir çıktı hazırlayın. Pandas tablolarını to_excel() ile Excel'e, grafikleri savefig() ile PNG'ye aktarabilirsiniz.

Raporun başına tek cümlelik bir sonuç yazın, ardından onu destekleyen tabloyu ve grafiği koyun. Yöneticiler nadiren yöntem sorar; ne olduğunu, neden olduğunu ve ne yapmaları gerektiğini merak ederler. Öte yandan yöntem sorulduğunda notebook'unuz hazırdır ve her rakamın kaynağını gösterebilirsiniz. Bu ikili yaklaşım hem hız hem güven sağlar.

Öğrendiklerinizi pekiştirmek için nasıl bir çalışma planı izlemelisiniz?

Bu konuyu en hızlı öğrenmenin yolu kendi verinizle çalışmaktır. Hazır veri setleri iyi bir başlangıçtır, ancak kendi satış ya da trafik dökümünüzdeki sorulara cevap aramak motivasyonu çok daha yüksek tutar. Aşağıdaki plan saha tecrübeme dayalı bir öneridir, garanti değil.

  1. 1. hafta: NumPy dizileri, dilimleme ve temel istatistikler.
  2. 2. hafta: CSV okuma, ilk bakış komutları ve veri temizliği.
  3. 3. hafta: filtreleme, yeni sütunlar ve groupby.
  4. 4. hafta: merge, pivot_table ve Matplotlib ile ilk rapor.

Her haftanın sonunda tek sayfalık bir mini rapor üretin: bir tablo, bir grafik ve üç cümlelik yorum. Böylece yalnızca kod değil, veriden sonuç çıkarma becerisi de kazanırsınız. E-ticaret verisiyle çalışıyorsanız e-ticaret danışmanlığı süreçlerimde kullandığım soru listesini de bu raporlara uyarlayabilirsiniz.

Python ile veri analizi öğrenmeye değer mi?

Kısa cevabım evet. Excel küçük tablolar için harika bir araç olmaya devam ediyor; ancak tekrar eden raporlar, çoklu dosyalar ve yüz binlerce satır söz konusu olduğunda Python ile veri analizi size zaman ve doğruluk kazandırır. Üstelik yazdığınız kod, analizinizin nasıl yapıldığını belgeleyen bir kayıttır.

Özetle yol şu: NumPy ile vektörel düşünmeyi, Pandas ile tabloyu temizleyip özetlemeyi, Matplotlib ile sonucu anlatmayı öğrenin. Pandas 3.0'ın Copy-on-Write ve str tipi gibi değişikliklerini baştan benimserseniz eski öğreticilerdeki tuzaklara düşmezsiniz. Sonra kendi verinizle küçük bir soru seçin ve ilk raporunuzu bu hafta çıkarın.

Sıkça Sorulan Sorular

Pandas öğrenmek için önce NumPy bilmek şart mı?
Hayır, şart değil. Pandas ile doğrudan başlayabilirsiniz, çünkü günlük işlerin çoğunu Pandas fonksiyonları karşılar. Ancak dizi, dtype ve vektörel işlem kavramlarını NumPy üzerinden anlamak hataları çözmeyi kolaylaştırır. Bu yüzden bir iki günlük NumPy temeli, ilerleyen haftalarda size ciddi zaman kazandırır.
Pandas 3.0 eski kodlarımı bozar mı?
Bazı durumlarda evet. En sık sorun zincirleme atamadır: Copy-on-Write varsayılan olduğu için df[kosul][kolon] = deger kalıbı artık tabloyu değiştirmez. Ayrıca metin sütunları object yerine str tipiyle gelir ve tarih çözünürlüğü değişti. Yükseltmeden önce sürüm notlarını okuyup kodunuzu testle çalıştırmanızı öneririm.
Excel yerine Python kullanmak ne zaman mantıklıdır?
Aynı raporu her hafta tekrar üretiyorsanız, birden fazla dosyayı birleştiriyorsanız ya da satır sayısı Excel'i yavaşlatıyorsa Python mantıklıdır. Tek seferlik küçük bir tablo için Excel hâlâ daha hızlıdır. Kısacası karar, tekrar sıklığına ve veri hacmine göre verilir; ikisini birlikte kullanmak da gayet normaldir.
Grafikler için Matplotlib dışında ne kullanabilirim?
Seaborn, Matplotlib üzerine kurulu ve istatistiksel grafikleri daha az kodla çizen popüler bir seçenektir. Etkileşimli grafik istiyorsanız Plotly iyi bir alternatiftir. Ancak başlangıçta Matplotlib öğrenmenizi öneririm, çünkü diğer kütüphanelerin çoğu aynı temel kavramları kullanır ve ince ayar gerektiğinde yine ona dönersiniz.
Python ile veri analizi öğrenmek ne kadar sürer?
Haftada birkaç saat ayırırsanız temel Pandas, NumPy ve Matplotlib işlemlerini yaklaşık bir ayda rahat kullanmaya başlarsınız. Bu süre saha tecrübeme dayalı bir tahmindir, garanti değil. Asıl ustalık, kendi verinizde tekrar tekrar gerçek sorular çözdükçe gelir; bu yüzden erken aşamada kendi dosyalarınızla pratik yapın.
Veri analizi için hangi dosya biçimini kullanmalıyım?
Paylaşım ve Excel uyumu için CSV pratiktir. Ancak kendi analizlerinizde ara sonuçları Parquet biçiminde saklamanızı öneririm. Parquet sütun tiplerini korur, daha az yer kaplar ve çok daha hızlı okunur. Böylece her açılışta tarih ve sayı dönüşümlerini yeniden yapmak zorunda kalmazsınız.
#python#pandas#numpy#matplotlib#veri analizi#veri görselleştirme#yazılım
Paylaş:
Talha Aslan
Talha Aslan

Google Partner dijital pazarlama uzmanı. 2012’den beri SEO, Google Ads, web tasarım ve e-ticaret projelerinde sahada; bu blogda gördüğünüz her yazı o deneyimden çıkar.

Sıradaki proje

Projenizi konuşalım.

Aracı yok, katman yok: doğrudan işi yapacak uzmanla konuşursunuz. İlk istişare ücretsizdir; hedefinizi dinler, net bir yol haritasıyla dönerim.

WhatsApp Hemen Ara