Takip et

Jupyter Notebook’ta Pandas Kullanarak Veri Seti Yükleme Rehberi

Veri analizi dünyasına adım atan her profesyonelin ve meraklının karşılaştığı ilk ve en kritik adımlardan biri, ham veriyi çalışma ortamına doğru bir şekilde aktarmaktır.

Jupyter Notebook’ta Pandas Kullanarak Veri Seti Yükleme Rehberi

Veri analizi dünyasına adım atan her profesyonelin ve meraklının karşılaştığı ilk ve en kritik adımlardan biri, ham veriyi çalışma ortamına doğru bir şekilde aktarmaktır. Peki, bu süreci Jupyter Notebook’un interaktif yapısı ve Pandas kütüphanesinin gücüyle nasıl sorunsuz hale getirebilirsiniz? Bu makale, farklı formatlardaki veri setlerini Jupyter Notebook’a yüklemenin inceliklerini adım adım açıklayacak, karşılaşılabilecek zorluklara pratik çözümler sunacak ve veri analizi yolculuğunuzun sağlam bir temele oturmasını sağlayacaktır. Veri bilimi projelerinizde veriyi etkin bir şekilde işlemek için bu temel beceriye hakim olmak, projenizin başarısı için hayati öneme sahiptir.

Veri Analizi Yolculuğunun İlk Adımı: Neden Pandas ve Jupyter Notebook?

Günümüzün veri odaklı dünyasında, ham verilerden anlamlı içgörüler elde etmek, birçok sektörde rekabet avantajı sağlamanın anahtarıdır. Bu yolculuğun başlangıç noktası ise veriyi doğru bir şekilde yüklemek ve analiz için hazır hale getirmektir. İşte bu noktada, Python ekosisteminin iki güçlü aracı olan Pandas kütüphanesi ve Jupyter Notebook ortamı devreye girer. Bu ikili, veri bilimcilerin ve analistlerin veriye erişim, işleme ve keşif süreçlerini son derece verimli ve etkileşimli bir hale getirir.

Pandas, Python programlama dili için geliştirilmiş, yüksek performanslı, kullanımı kolay veri yapıları ve veri analizi araçları sunan açık kaynaklı bir kütüphanedir. Özellikle tablo şeklindeki verilerle (elektronik tablolar, SQL tabloları veya DataFrame (veri çerçevesi) olarak bilinen veri yapıları) çalışmak üzere tasarlanmıştır. Pandas’ın temel veri yapıları olan Series (seri) ve DataFrame, veri manipülasyonu, temizliği ve ön işleme (preprocessing) görevlerini basitleştirir. Örneğin, bir satış raporunu analiz ederken, verileri filtrelemek, sütunları yeniden adlandırmak veya eksik değerleri doldurmak gibi işlemler Pandas ile saniyeler içinde gerçekleştirilebilir. Bu kütüphane, karmaşık veri setlerini anlaşılır ve yönetilebilir formatlara dönüştürme yeteneği sayesinde veri analizi süreçlerinin vazgeçilmez bir parçası haline gelmiştir.

Jupyter Notebook ise, canlı kod, denklem, görselleştirme ve açıklayıcı metinleri tek bir web tabanlı belge içinde birleştirmeye olanak tanıyan etkileşimli bir geliştirme ortamıdır. Veri analizi projelerinde Jupyter Notebook kullanmanın en büyük avantajı, kod bloklarını (code blocks) adım adım çalıştırabilme ve her adımın sonucunu anında görebilme imkanı sunmasıdır. Bu özellik, özellikle veri keşfi (data exploration) ve prototipleme (prototyping) aşamalarında oldukça değerlidir. Bir veri setini yükledikten sonra, ilk birkaç satırını hemen görüntüleyebilir, veri tiplerini kontrol edebilir veya hızlı bir özet istatistik elde edebilirsiniz. Bu etkileşimli yapı, hataları anında tespit etmeye ve çözüm üretmeye yardımcı olurken, aynı zamanda analiz sürecini daha şeffaf ve anlaşılır kılar. Bir veri analistinin, kodunu çalıştırıp çıktısını anında görmesi, deneme-yanılma yoluyla en iyi çözüme ulaşmasını hızlandırır.

Bu iki aracın birleşimi, veri analistlerine ve bilimcilerine, ham veriden nihai sonuca kadar olan tüm süreci tek bir platformda yönetme gücü verir. Örneğin, bir müşteri geri bildirimleri veri setini ele alalım. Bu veriyi Jupyter Notebook’a Pandas ile yükledikten sonra, metin analizi için gerekli ön işlemleri yapabilir, duygusal analiz (sentiment analysis) modelleri oluşturabilir ve sonuçları doğrudan aynı not defteri içinde görselleştirebilirsiniz. Bu entegrasyon, iş akışını (workflow) kolaylaştırır ve projelerin daha hızlı tamamlanmasını sağlar. Ayrıca, Jupyter Notebook’lar, analizlerinizi başkalarıyla paylaşmak için de mükemmel bir format sunar; çünkü kodunuz, çıktınız ve açıklamalarınız tek bir yerde toplanmıştır. Dolayısıyla, veri yükleme sürecini doğru bir şekilde anlamak ve uygulamak, bu güçlü ekosistemden tam anlamıyla faydalanmanın ilk ve en önemli adımıdır.

Jupyter Notebook Ortamında Pandas’ı Kurulum ve Hazırlık Süreci Nasıl İşler?

Veri analizi yolculuğuna başlamadan önce, gerekli araçları doğru bir şekilde kurmak ve çalışma ortamınızı hazırlamak büyük önem taşır. Jupyter Notebook ve Pandas kütüphanesi, Python ekosisteminin bir parçası olduğundan, kurulum süreci genellikle Python dağıtımları üzerinden gerçekleştirilir. Bu bölümde, bu temel araçları nasıl kuracağınızı ve ilk veri yükleme işleminiz için Jupyter Notebook’u nasıl hazırlayacağınızı adım adım inceleyeceğiz.

Python ve veri bilimi kütüphaneleri için en yaygın ve önerilen kurulum yöntemi Anaconda veya Miniconda kullanmaktır. Anaconda, Python ile birlikte yüzlerce popüler veri bilimi kütüphanesini (Pandas, NumPy, Matplotlib, Scikit-learn vb.) ve Jupyter Notebook gibi araçları önceden paketlenmiş olarak sunan kapsamlı bir dağıtımdır. Miniconda ise, daha hafif bir seçenek olup sadece Python’u ve Conda paket yöneticisini içerir; kütüphaneleri ihtiyacınıza göre sonradan kurmanıza olanak tanır. Her iki durumda da, kurulum dosyalarını resmi web sitelerinden indirip işletim sisteminize uygun adımları takip ederek kolayca kurabilirsiniz. Kurulum tamamlandıktan sonra, terminal veya komut istemcisinde conda list komutunu çalıştırarak kurulu paketleri görebilirsiniz. Eğer Pandas kurulu değilse, conda install pandas veya pip install pandas komutunu kullanarak kolayca yükleyebilirsiniz.

Kurulumu takiben, Jupyter Notebook’u başlatmak için terminal veya komut istemcisinde jupyter notebook komutunu çalıştırmanız yeterlidir. Bu komut, varsayılan web tarayıcınızda yerel bir sunucu (localhost) üzerinde Jupyter arayüzünü açacaktır. Burada, mevcut klasörlerinizi görebilir, yeni bir not defteri (notebook) oluşturabilir veya var olanları açabilirsiniz. Yeni bir not defteri oluşturmak için genellikle sağ üst köşedeki “New” (Yeni) düğmesine tıklayıp “Python 3” (veya kullandığınız Python çekirdeği (kernel)) seçeneğini seçmeniz gerekir. Bu işlem, size boş bir not defteri (.ipynb uzantılı bir dosya) açacaktır.

Jupyter Notebook’u açtıktan sonra, ilk yapmanız gereken Pandas kütüphanesini içeri aktarmaktır (import). Bu, not defterinizde Pandas fonksiyonlarını kullanabilmenizi sağlar. Standart uygulama, Pandas’ı pd takma adıyla içeri aktarmaktır; bu, kodu daha kısa ve okunabilir hale getirir. Bir hücreye aşağıdaki kodu yazıp çalıştırarak (Shift + Enter tuş kombinasyonu ile) bu işlemi gerçekleştirebilirsiniz:

import pandas as pd

Bu komut çalıştırıldığında herhangi bir hata mesajı almazsanız, Pandas başarıyla içeri aktarılmış demektir ve artık veri yükleme işlemlerine hazırsınız. Eğer bir hata alırsanız, genellikle Pandas’ın doğru şekilde kurulmadığı veya Python ortamınızda bir sorun olduğu anlamına gelir. Bu durumda, kurulum adımlarını tekrar gözden geçirmeniz veya internet üzerindeki kaynaklardan yardım almanız gerekebilir.

Jupyter Notebook’un etkileşimli yapısı, bu hazırlık sürecini oldukça kolaylaştırır. Her adımı ayrı bir hücrede deneyebilir, çıktısını anında görebilir ve herhangi bir sorunla karşılaştığınızda kolayca geri dönüp düzeltebilirsiniz. Ayrıca, not defterinizde açıklayıcı metinler (Markdown kullanarak) ekleyerek, kodunuzu ve analiz sürecinizi belgeleyebilir, böylece hem kendiniz hem de başkaları için daha anlaşılır hale getirebilirsiniz. Bu hazırlık adımları tamamlandıktan sonra, farklı formatlardaki veri setlerini Jupyter Notebook’unuza yüklemeye ve veri analizi maceraınıza başlamaya hazırsınız demektir.

En Yaygın Veri Formatlarını Pandas ile Jupyter’a Nasıl Yüklersiniz?

Veri analizi projelerinde karşılaşılan veri setleri genellikle farklı formatlarda gelir. Bu bölümde, en yaygın kullanılan veri formatlarından biri olan CSV (Comma Separated Values – Virgülle Ayrılmış Değerler) dosyalarını Pandas’ın read_csv() fonksiyonu ile Jupyter Notebook’a nasıl yükleyeceğinizi detaylı bir şekilde inceleyeceğiz. Bu fonksiyon, veri yükleme işlemlerinin temelini oluşturur ve birçok parametresi sayesinde esnek bir kullanım sunar.

CSV Dosyalarını Yükleme: pd.read_csv() Kullanımı

CSV dosyaları, verilerin virgüllerle ayrıldığı düz metin dosyalarıdır ve basit yapıları nedeniyle veri paylaşımında en popüler formatlardan biridir. Pandas’ın read_csv() fonksiyonu, bu tür dosyaları kolayca bir DataFrame’e dönüştürmek için tasarlanmıştır. Temel kullanımı oldukça basittir:

import pandas as pd

# Örnek bir CSV dosyasını yükleme
df = pd.read_csv('ornek_veri.csv')

# İlk 5 satırı görüntüleme
print(df.head())

Yukarıdaki örnekte, ornek_veri.csv adlı dosya, aynı dizinde (directory) bulunduğu varsayılarak yüklenir. Eğer dosya farklı bir konumdaysa, dosyanın tam yolunu (absolute path) veya göreceli yolunu (relative path) belirtmeniz gerekir. Örneğin, veri_klasoru/musteri_listesi.csv gibi.

read_csv() fonksiyonu, veri yükleme sürecini daha da özelleştirmek için birçok parametreye sahiptir. Bu parametreler, özellikle karmaşık veya standart dışı CSV dosyalarıyla çalışırken hayati öneme sahiptir:

  • sep (separator – ayırıcı): Varsayılan olarak virgül (,) ile ayrılmış dosyaları okur. Ancak bazı dosyalar noktalı virgül (;), sekme (\t) veya başka bir karakterle ayrılmış olabilir. Örneğin, noktalı virgülle ayrılmış bir dosya için: pd.read_csv('veriler.csv', sep=';').
  • header (başlık): Veri setinizin ilk satırının sütun başlıklarını (column headers) içerip içermediğini belirtir. Varsayılan olarak 0 (ilk satır başlık) değerini alır. Eğer dosyanızın başlık satırı yoksa, header=None olarak ayarlayabilirsiniz. Bu durumda Pandas, sütunlara otomatik olarak 0’dan başlayan tam sayı adları (0, 1, 2…) verir. Eğer başlıklar ikinci satırda ise header=1 gibi değerler de verebilirsiniz.
  • index_col (dizin sütunu): Veri setinizdeki hangi sütunun DataFrame’in dizini (index) olarak kullanılacağını belirtir. Örneğin, müşteri ID’lerinin bulunduğu bir sütunu dizin olarak atamak isteyebilirsiniz: pd.read_csv('musteriler.csv', index_col='MusteriID'). Bir sütun numarasını da kullanabilirsiniz (örneğin, index_col=0).
  • names (adlar): Eğer veri setinizin başlık satırı yoksa ve sütunlara özel isimler vermek istiyorsanız, bu parametreye bir liste (list) halinde sütun isimleri geçirebilirsiniz: pd.read_csv('veri.csv', header=None, names=['SutunA', 'SutunB', 'SutunC']).
  • encoding (kodlama): CSV dosyaları farklı karakter kodlamalarıyla kaydedilmiş olabilir (örneğin, ‘UTF-8’, ‘latin-1’, ‘ISO-8859-1’). Yanlış kodlama belirtildiğinde UnicodeDecodeError hatası alabilirsiniz. Bu durumda doğru kodlamayı denemeniz gerekir: pd.read_csv('yorumlar.csv', encoding='latin-1'). Özellikle Türkçe karakter içeren dosyalarda bu parametre kritik olabilir.
  • skiprows (satır atla): Dosyanın başındaki belirli sayıda satırı atlamak istediğinizde kullanılır. Örneğin, ilk 3 satırı atlamak için: pd.read_csv('rapor.csv', skiprows=3).
  • nrows (satır sayısı): Özellikle çok büyük veri setleriyle çalışırken, dosyanın tamamını yüklemek yerine sadece ilk belirli sayıda satırı yüklemek isteyebilirsiniz. Bu, veri setini hızlıca keşfetmek için faydalıdır: pd.read_csv('buyuk_veri.csv', nrows=1000).

Gerçek dünya senaryolarında, bir e-ticaret şirketinin aylık satış raporlarını analiz ettiğinizi düşünelim. Bu raporlar genellikle CSV formatında gelir ve bazen Excel’den dışa aktarıldığında noktalı virgülle ayrılmış olabilirler. Ayrıca, raporun başında açıklayıcı metinler olabilir ve gerçek veri 5. satırdan başlayabilir. Bu durumda, read_csv() fonksiyonunu aşağıdaki gibi kullanmanız gerekebilir:

import pandas as pd

# Aylık satış raporu (noktalı virgülle ayrılmış, ilk 4 satır atlanmış)
satis_df = pd.read_csv('aylik_satislar.csv', sep=';', skiprows=4, encoding='ISO-8859-9')

# Veri çerçevesinin ilk birkaç satırını ve sütun bilgilerini kontrol etme
print(satis_df.head())
print(satis_df.info())

Bu örnek, read_csv()‘nin esnekliğini ve farklı senaryolara nasıl adapte edilebileceğini göstermektedir. Veri yükleme sürecinde bu parametreleri doğru bir şekilde kullanmak, sonraki analiz adımları için sağlam bir temel oluşturmanızı sağlar. Unutmayın, veri yükleme işlemi, veri analizi projenizin ilk ve en kritik adımıdır; bu adımı doğru atmak, tüm projenin başarısını doğrudan etkiler.

Diğer Popüler Veri Kaynaklarından Veri Aktarımı: Excel, JSON ve SQL

CSV dosyaları veri paylaşımında yaygın olsa da, veri analistleri sıklıkla farklı formatlardaki veri kaynaklarıyla da karşılaşırlar. Excel elektronik tabloları, web API’lerinden gelen JSON verileri ve kurumsal veritabanlarındaki SQL verileri, bu popüler formatlardan sadece birkaçıdır. Pandas, bu farklı veri kaynaklarından veri yüklemeyi kolaylaştıran özel fonksiyonlar sunar. Bu bölümde, bu önemli veri kaynaklarından Jupyter Notebook’a nasıl veri aktaracağınızı adım adım inceleyeceğiz.

Excel Dosyalarını Pandas ile Nasıl Okursunuz?

Microsoft Excel, iş dünyasında veri depolama ve raporlama için yaygın olarak kullanılan bir araçtır. Pandas’ın read_excel() fonksiyonu, Excel dosyalarını (.xls ve .xlsx uzantılı) doğrudan bir DataFrame’e yüklemenizi sağlar. Tıpkı read_csv() gibi, bu fonksiyon da birçok parametreye sahiptir.

import pandas as pd

# Örnek bir Excel dosyasını yükleme
# Varsayılan olarak ilk sayfayı okur
df_excel = pd.read_excel('finans_verileri.xlsx')
print(df_excel.head())

Excel dosyaları genellikle birden fazla çalışma sayfası (sheet) içerebilir. sheet_name parametresi ile belirli bir sayfayı seçebilirsiniz. Sayfa adını veya sayfa indeksini (0’dan başlayarak) kullanabilirsiniz:

# Belirli bir sayfayı ada göre yükleme
df_satislar = pd.read_excel('finans_verileri.xlsx', sheet_name='Satis Raporu')
print(df_satislar.head())

# Belirli bir sayfayı indekse göre yükleme (ikinci sayfa)
df_giderler = pd.read_excel('finans_verileri.xlsx', sheet_name=1)
print(df_giderler.head())

Diğer faydalı parametreler şunlardır:

  • header: Başlık satırının indeksini belirtir (varsayılan 0).
  • usecols: Yalnızca belirli sütunları yüklemek istediğinizde kullanılır. Sütun adlarının bir listesini veya sütun indekslerinin bir listesini geçirebilirsiniz: pd.read_excel('veriler.xlsx', usecols=['Ürün Adı', 'Miktar']).
  • skiprows ve nrows: CSV’deki gibi çalışır, belirli satırları atlamanıza veya sadece belirli sayıda satır yüklemenize olanak tanır.

Bir muhasebe departmanının aylık bütçe tablosunu Excel’den çektiğinizi ve sadece gelir ve gider sütunlarıyla ilgilendiğinizi düşünün. Ayrıca, ilk birkaç satırda şirket logosu ve rapor başlığı gibi gereksiz bilgiler olabilir. Bu durumda, read_excel() fonksiyonunu aşağıdaki gibi kullanabilirsiniz:

# Bütçe raporunu yükleme, ilk 3 satırı atla ve sadece 'Gelir' ve 'Gider' sütunlarını al
butce_df = pd.read_excel('aylik_butce.xlsx', sheet_name='Ana Bütçe', skiprows=3, usecols=['Gelir', 'Gider'])
print(butce_df.head())

JSON Verilerini Jupyter Notebook’a Yüklemek Ne Kadar Kolay?

JSON (JavaScript Object Notation), web uygulamaları ve API’ler arasında veri alışverişi için popüler bir formattır. Yapılandırılmış ve hiyerarşik verileri temsil etmek için idealdir. Pandas, read_json() fonksiyonu ile JSON dosyalarını kolayca DataFrame’e dönüştürebilir.

import pandas as pd

# Örnek bir JSON dosyasını yükleme
df_json = pd.read_json('kullanici_verileri.json')
print(df_json.head())

JSON verileri farklı “oryantasyonlarda” (orientations) olabilir; bu, JSON dosyasının DataFrame’e nasıl eşleneceğini belirler. En yaygın oryantasyonlar ‘records’ (kayıtlar, her nesne bir satır), ‘columns’ (sütunlar, her anahtar bir sütun) ve ‘index’ (indeks, anahtarlar indeks olarak) şeklindedir. Varsayılan olarak Pandas, JSON yapısını en uygun şekilde tahmin etmeye çalışır, ancak bazen orient parametresini belirtmek gerekebilir:

# JSON dosyasını 'records' oryantasyonu ile yükleme
df_json_records = pd.read_json('log_kayitlari.json', orient='records')
print(df_json_records.head())

Web servislerinden alınan API yanıtları genellikle JSON formatındadır. Bir sosyal medya analiz projesinde, belirli bir hashtag altındaki gönderilerin JSON formatındaki verilerini çekip analiz etmek isteyebilirsiniz. Bu veriler genellikle her gönderiyi bir kayıt olarak içerir ve read_json() ile kolayca bir DataFrame’e dönüştürülebilir.

SQL Veritabanlarından Doğrudan Veri Çekme Yöntemleri

Kurumsal uygulamaların çoğu verilerini ilişkisel veritabanlarında (örneğin MySQL, PostgreSQL, SQL Server, Oracle) saklar. Pandas, read_sql_query() ve read_sql_table() fonksiyonları aracılığıyla bu veritabanlarından doğrudan veri çekmenizi sağlar. Bu işlem için genellikle SQLAlchemy gibi bir veritabanı soyutlama kütüphanesine ve veritabanı sürücülerine (örneğin psycopg2 PostgreSQL için) ihtiyacınız olacaktır.

import pandas as pd
from sqlalchemy import create_engine

# Veritabanı bağlantı dizesi (örnek: PostgreSQL)
# Gerçek uygulamalarda bu bilgileri doğrudan kodda tutmaktan kaçının!
db_connection_str = 'postgresql://kullanici:sifre@host:port/veritabani_adi'
db_connection = create_engine(db_connection_str)

# Bir SQL sorgusu ile veri çekme
try:
    df_sql_query = pd.read_sql_query("SELECT * FROM musteriler WHERE sehir = 'İstanbul'", db_connection)
    print(df_sql_query.head())
except Exception as e:
    print(f"Veritabanı bağlantısı veya sorgu hatası: {e}")

# Doğrudan bir tablodan veri çekme (tüm tabloyu)
try:
    df_sql_table = pd.read_sql_table('urunler', db_connection)
    print(df_sql_table.head())
except Exception as e:
    print(f"Veritabanı bağlantısı veya tablo okuma hatası: {e}")

# Bağlantıyı kapatmayı unutmayın (gerekiyorsa)
db_connection.dispose()

read_sql_query(), belirli bir SQL sorgusu (query) sonucunu DataFrame’e yüklerken, read_sql_table() tüm bir tabloyu yüklemek için kullanılır. Bu fonksiyonlar, büyük ölçekli veritabanlarından veri çekmek için son derece güçlüdür ve iş zekası (business intelligence) raporlamalarında veya veri ambarlarından (data warehouse) veri alımında sıkça kullanılır. Bir e-ticaret sitesinin anlık stok durumunu veya sipariş geçmişini doğrudan veritabanından çekerek, güncel analizler yapabilirsiniz.

Bu farklı veri yükleme yöntemleri, Pandas’ın veri analizi süreçlerinde ne kadar çok yönlü olduğunu göstermektedir. Hangi formatla karşılaşırsanız karşılaşın, Pandas size veriyi Jupyter Notebook ortamına kolayca aktarmanız için gerekli araçları sunar.

Büyük Veri Setleriyle Çalışırken Performansı Artırma İpuçları Nelerdir?

Veri analizi projelerinde her zaman küçük ve yönetilebilir veri setleriyle karşılaşmayız. Bazen gigabaytlarca, hatta terabaytlarca büyüklükteki veri setleriyle çalışmak zorunda kalırız. Bu tür büyük veri setlerini doğrudan Jupyter Notebook’a yüklemek ve işlemek, bellek (RAM) sorunlarına veya aşırı yavaşlamalara yol açabilir. Neyse ki, Pandas, büyük veri setleriyle daha verimli çalışmak için bazı stratejiler ve parametreler sunar. Bu bölümde, bu ipuçlarını ve püf noktalarını inceleyeceğiz.

1. chunksize Parametresi ile Parça Parça Yükleme

En büyük veri seti sorunlarından biri, dosyanın tamamının belleğe sığmamasıdır. Pandas’ın read_csv() ve read_excel() gibi fonksiyonlarında bulunan chunksize parametresi, dosyayı küçük parçalar halinde yüklemenize olanak tanır. Bu sayede, her seferinde sadece belirli bir miktar veri belleğe alınır, işlenir ve ardından bir sonraki parçaya geçilir. Bu yöntem, özellikle dosya boyutunun sistem belleğinden büyük olduğu durumlarda hayati öneme sahiptir.

import pandas as pd

# Büyük bir CSV dosyasını 100.000 satırlık parçalar halinde yükleme
chunk_iterator = pd.read_csv('cok_buyuk_veri.csv', chunksize=100000)

# Her bir parçayı işleme
total_rows = 0
for chunk in chunk_iterator:
    # Chunk üzerinde analiz veya işleme yapın
    total_rows += len(chunk)
    # Örneğin, her chunk'ın ortalamasını hesaplayıp bir listeye ekleyebilirsiniz
    # print(f"İşlenen chunk boyutu: {len(chunk)} satır")

print(f"Toplam işlenen satır sayısı: {total_rows}")

Bu yaklaşım, tüm veri setini aynı anda belleğe yüklemek yerine, veriyi “stream” (akış) halinde işlememize olanak tanır. Bu sayede, bellek tüketimi kontrol altında tutulur ve daha büyük veri setleri üzerinde bile analizler yapılabilir.

2. dtype Belirterek Bellek Optimizasyonu

Pandas, veri setini yüklerken her sütunun veri tipini (data type) otomatik olarak tahmin etmeye çalışır. Ancak bu tahmin her zaman en verimli olmayabilir. Örneğin, bir sütun sadece 0 ve 1 değerlerini içeriyorsa, Pandas bunu varsayılan olarak bir tam sayı (integer) olarak değil, daha geniş bir int64 olarak atayabilir. Bu da gereksiz bellek tüketimine yol açar. dtype parametresi ile her sütunun veri tipini manuel olarak belirleyerek bellek kullanımını önemli ölçüde optimize edebilirsiniz.

import pandas as pd

# Sütun veri tiplerini önceden belirleme
# 'object' genellikle string'ler için kullanılır, 'category' daha verimlidir
data_types = {
    'id': 'int32',
    'kategori': 'category',
    'fiyat': 'float32',
    'aktif_mi': 'bool'
}

df_optimized = pd.read_csv('urun_listesi.csv', dtype=data_types)
print(df_optimized.info(memory_usage='deep'))

Özellikle kategorik (categorical) veriler için 'category' veri tipini kullanmak, benzersiz değer sayısı az olan sütunlarda bellek kullanımını büyük ölçüde azaltabilir. Ayrıca, gereksiz yere yüksek hassasiyetli sayı tipleri (örneğin float64 yerine float32) kullanmaktan kaçınmak da faydalıdır.

3. Yalnızca İhtiyaç Duyulan Sütunları Yükleme: usecols

Büyük veri setleri genellikle analiz için gerekmeyen birçok sütun içerebilir. usecols parametresi, sadece ilgilendiğiniz sütunları yükleyerek bellek kullanımını ve yükleme süresini azaltmanıza olanak tanır. Bu, özellikle veri setinin geniş olduğu (çok fazla sütun içerdiği) durumlarda çok etkilidir.

import pandas as pd

# Sadece 'Tarih', 'Ürün Adı' ve 'Satış Miktarı' sütunlarını yükleme
df_secili_sutunlar = pd.read_csv('genel_satis_raporu.csv', usecols=['Tarih', 'Ürün Adı', 'Satış Miktarı'])
print(df_secili_sutunlar.head())

Bu yöntem, veri setini küçülterek hem bellekte daha az yer kaplamasını sağlar hem de sonraki işlem adımlarını hızlandırır.

4. Bellek Kullanımını İzleme ve Yönetme

Jupyter Notebook’ta çalışırken, veri çerçevelerinizin ne kadar bellek kullandığını düzenli olarak kontrol etmek önemlidir. df.info(memory_usage='deep') komutu, bir DataFrame’in detaylı bellek kullanımını gösterir. Bu bilgiyi kullanarak, hangi sütunların veya veri tiplerinin en çok bellek tükettiğini belirleyebilir ve optimizasyon stratejileri geliştirebilirsiniz.

import pandas as pd

df = pd.read_csv('veri.csv')
print(df.info(memory_usage='deep'))

Gereksiz değişkenleri ve DataFrame’leri bellekten silmek için del df komutunu kullanabilir ve ardından Python’ın çöp toplama (garbage collection) mekanizmasını tetiklemek için import gc; gc.collect() komutunu çalıştırabilirsiniz. Bu, özellikle bir analiz adımını tamamladıktan ve o DataFrame’e artık ihtiyacınız kalmadığında faydalıdır.

5. Veri Örneklemesi (Sampling)

Çok büyük veri setleriyle çalışırken, bazen tüm veri setini analiz etmek yerine, ondan rastgele bir örnek (sample) almak yeterli olabilir. Bu, özellikle hızlı keşif analizleri (exploratory data analysis – EDA) yaparken veya model prototipleri geliştirirken zaman ve kaynak tasarrufu sağlar. Pandas’ın sample() metodu veya read_csv()‘nin nrows parametresi ile bu işlemi gerçekleştirebilirsiniz.

import pandas as pd

# Sadece ilk 10.000 satırı yükleme
df_sample_nrows = pd.read_csv('buyuk_veri.csv', nrows=10000)
print(df_sample_nrows.shape)

# Tüm veri setinin %1'ini rastgele örnekleme (eğer tamamı belleğe sığıyorsa)
# df_full = pd.read_csv('buyuk_veri.csv')
# df_sample_random = df_full.sample(frac=0.01, random_state=42)
# print(df_sample_random.shape)

Bu stratejiler, büyük veri setleriyle çalışırken karşılaşılan performans ve bellek sorunlarının üstesinden gelmek için kritik öneme sahiptir. Doğru stratejiyi seçmek ve uygulamak, veri analizi projelerinizin verimliliğini ve ölçeklenebilirliğini artıracaktır.

Veri Yükleme Esnasında Karşılaşılabilecek Hatalar ve Çözüm Yolları Nelerdir?

Veri analizi sürecinin ilk adımı olan veri yükleme, genellikle basit görünse de, çeşitli beklenmedik hatalarla karşılaşmak oldukça yaygındır. Dosya yollarından kodlama sorunlarına, bellek sınırlamalarından ayrıştırma (parsing) hatalarına kadar birçok farklı problem ortaya çıkabilir. Bu bölümde, Pandas ile veri yüklerken sıkça karşılaşılan hataları ve bu hataları nasıl teşhis edip çözebileceğinizi detaylı bir şekilde ele alacağız.

1. FileNotFoundError: Dosya Bulunamadı Hatası

Bu, en sık karşılaşılan hatalardan biridir ve genellikle dosya yolunun yanlış belirtilmesi veya dosyanın belirtilen konumda bulunmaması durumunda ortaya çıkar. Jupyter Notebook, genellikle başlatıldığı dizini (directory) çalışma dizini olarak kabul eder. Eğer dosyanız farklı bir yerdeyse, ya dosyanın tam yolunu belirtmeli ya da dosyanın bulunduğu dizine gitmelisiniz.

Örnek Hata Mesajı:

FileNotFoundError: [Errno 2] No such file or directory: 'yanlis_dosya_adi.csv'

Çözüm Yolları:

  • Dosya Yolunu Kontrol Edin: Dosya adını ve uzantısını doğru yazdığınızdan emin olun. Örneğin, veri.csv yerine veri.CSV yazmış olabilirsiniz.
  • Tam Yolu Belirtin: Dosyanın bilgisayarınızdaki tam yolunu (örneğin, Windows’ta C:\Kullanicilar\KullaniciAdi\Belgeler\veri.csv veya Linux/macOS’ta /home/kullanici/belgeler/veri.csv) kullanın.
  • Çalışma Dizinini Kontrol Edin: Jupyter Notebook’ta import os; print(os.getcwd()) komutunu çalıştırarak mevcut çalışma dizininizi görebilirsiniz. Dosyanızı bu dizine taşıyabilir veya os.chdir('yeni_dizin_yolu') ile çalışma dizinini değiştirebilirsiniz.
  • Dosyanın Mevcut Olduğundan Emin Olun: Dosyanın gerçekten o konumda olup olmadığını manuel olarak kontrol edin.

2. UnicodeDecodeError: Kodlama Hatası

Bu hata, dosyanın kaydedildiği karakter kodlaması (encoding) ile Pandas’ın dosyayı okumaya çalıştığı kodlamanın uyuşmaması durumunda meydana gelir. Özellikle Türkçe karakterler veya özel semboller içeren dosyalarda sıkça görülür.

Örnek Hata Mesajı:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfc in position 10: invalid start byte

Çözüm Yolları:

  • encoding Parametresini Kullanın: pd.read_csv() veya pd.read_excel() fonksiyonlarında encoding parametresini kullanarak doğru kodlamayı belirtin. Yaygın kodlamalar arasında 'latin-1', 'ISO-8859-1', 'cp1252' ve Türkçe için 'ISO-8859-9' bulunur. Deneme yanılma yoluyla doğru olanı bulmaya çalışabilirsiniz.
  • Notepad++ veya Diğer Metin Düzenleyicileri ile Kontrol Edin: Dosyayı bir metin düzenleyicide açarak dosyanın hangi kodlamayla kaydedildiğini görebilirsiniz.

3. ParserError veya CParserError: Ayrıştırma Hatası

Bu hatalar, Pandas’ın dosya yapısını doğru bir şekilde anlayamaması durumunda ortaya çıkar. Genellikle yanlış ayırıcı (separator), yanlış başlık satırı veya bozuk veri formatı nedeniyle oluşur.

Örnek Hata Mesajı:

pandas.errors.ParserError: Error tokenizing data. C error: Expected 1 fields in line 3, saw 2

Çözüm Yolları:

  • sep Parametresini Ayarlayın: Dosyanızın virgül yerine noktalı virgül (;), sekme (\t) veya başka bir karakterle ayrılmış olup olmadığını kontrol edin ve sep parametresini buna göre ayarlayın.
  • header Parametresini Kontrol Edin: Eğer dosyanızın başlık satırı yoksa header=None olarak ayarlayın veya başlık satırı farklı bir satırdaysa doğru indeksi belirtin.
  • skiprows Parametresini Kullanın: Dosyanın başında gereksiz metinler veya bozuk satırlar varsa, bu satırları atlamak için skiprows parametresini kullanın.
  • error_bad_lines=False (Eski Sürümlerde): Pandas’ın eski sürümlerinde, bozuk satırları göz ardı etmek için bu parametre kullanılabilirdi. Ancak, bu parametre artık önerilmiyor ve gelecekte kaldırılacak. Bunun yerine, on_bad_lines='skip' veya on_bad_lines='warn' gibi yeni parametreler kullanılabilir.
  • Dosyayı İnceleyin: Hata mesajında belirtilen satır numarasını veya çevresini bir metin düzenleyicide açarak sorunu manuel olarak tespit etmeye çalışın.

4. MemoryError: Bellek Hatası

Özellikle büyük veri setlerini yüklemeye çalışırken, sistem belleğinizin (RAM) yetersiz kalması durumunda bu hatayı alabilirsiniz.

Örnek Hata Mesajı:

MemoryError: Unable to allocate ... bytes for an array with shape (...) and data type ...

Çözüm Yolları:

  • chunksize Kullanın: Veriyi parça parça yükleyerek bellek kullanımını azaltın.
  • usecols ile Sütunları Sınırlayın: Yalnızca ihtiyacınız olan sütunları yükleyin.
  • dtype ile Veri Tiplerini Optimize Edin: Sütunlara daha verimli veri tipleri atayın (örneğin, int64 yerine int32, object yerine category).
  • Daha Fazla Bellek Kullanın: Eğer mümkünse, sisteminize daha fazla RAM eklemeyi düşünün veya daha güçlü bir makinede çalışın.
  • Veri Örneklemesi Yapın: Tüm veri setini yüklemek yerine, küçük bir örnekle çalışın (nrows parametresi).

5. ValueError: Değer Hatası

Bu hata, bir sütundaki verilerin beklenen veri tipiyle uyuşmaması durumunda ortaya çıkabilir. Örneğin, sayısal bir sütunda metin değerlerinin bulunması.

Örnek Hata Mesajı:

ValueError: could not convert string to float: 'N/A'

Çözüm Yolları:

  • na_values Parametresini Kullanın: Eksik değerleri temsil eden metinleri (örneğin, ‘N/A’, ‘NaN’, ‘-‘) belirtmek için na_values parametresini kullanın. Pandas bu değerleri otomatik olarak NaN (Not a Number) olarak yorumlayacaktır: pd.read_csv('veri.csv', na_values=['N/A', 'Yok']).
  • Veri Temizliği (Data Cleaning): Yükledikten sonra ilgili sütunları manuel olarak inceleyin ve hatalı değerleri temizleyin veya dönüştürün.

Bu hataları anlamak ve doğru çözüm yollarını uygulamak, veri yükleme sürecinizi çok daha verimli hale getirecek ve veri analizi projenizin sorunsuz ilerlemesini sağlayacaktır. Hata mesajlarını dikkatlice okumak ve Google’da arama yapmak, çoğu zaman çözüm bulmanın ilk adımıdır.

Sonuç ve Gelecek Adımlar: Veri Yüklemeden Sonraki Süreçler Nelerdir?

Bu makale boyunca, Pandas kütüphanesini ve Jupyter Notebook ortamını kullanarak farklı formatlardaki veri setlerini (CSV, Excel, JSON, SQL) nasıl yükleyeceğinizi, bu süreçte karşılaşabileceğiniz yaygın hataları ve büyük veri setleriyle çalışırken performansı artırma stratejilerini detaylı bir şekilde inceledik. Veri analizi yolculuğunuzun bu ilk ve kritik adımını sağlam bir şekilde atmak, projenizin başarısı için temel bir gerekliliktir. Artık ham veriyi güvenli ve verimli bir şekilde çalışma ortamınıza aktarabiliyorsunuz, peki bundan sonra ne geliyor?

Veri yükleme, veri analizi sürecinin sadece başlangıcıdır. Yüklediğiniz ham veri genellikle doğrudan analiz veya modelleme için uygun değildir. Bu noktadan sonra, bir dizi önemli adım sizi bekler:

  1. Veri Keşfi ve Anlama (Exploratory Data Analysis – EDA): Yüklediğiniz veriyi anlamak için ilk birkaç satırı (df.head()), veri tiplerini (df.info()), istatistiksel özetleri (df.describe()) ve eksik değerleri (df.isnull().sum()) inceleyeceksiniz. Bu adım, verinin yapısını, kalitesini ve potansiyel sorunlarını anlamanıza yardımcı olur. Görselleştirmeler (histogramlar, saçılım grafikleri vb.) bu aşamada çok değerlidir.
  2. Veri Temizliği ve Ön İşleme (Data Cleaning and Preprocessing): Bu aşama, veri setinizi analiz için hazır hale getirmeyi içerir. Eksik değerleri doldurma (df.fillna()) veya silme (df.dropna()), aykırı değerleri (outliers) tespit etme ve işleme, veri tiplerini dönüştürme, yinelenen kayıtları (duplicates) kaldırma (df.drop_duplicates()) ve tutarsızlıkları düzeltme gibi işlemler bu bölümde yer alır. Örneğin, bir sütundaki metin verilerini standart bir formata dönüştürmek veya sayısal değerleri ölçeklendirmek (scaling) gerekebilir.
  3. Veri Manipülasyonu ve Dönüştürme (Data Manipulation and Transformation): Analiz hedeflerinize ulaşmak için mevcut verileri yeni formlara dönüştürmeniz gerekebilir. Bu, yeni sütunlar oluşturma, mevcut sütunları birleştirme, verileri gruplama (df.groupby()), birleştirme (pd.merge()) veya pivot tablolar oluşturma gibi işlemleri içerir. Örneğin, farklı tablolardaki müşteri ve sipariş bilgilerini birleştirmek veya aylık toplam satışları hesaplamak bu aşamada yapılır.
  4. Veri Görselleştirme (Data Visualization): Verilerdeki kalıpları, eğilimleri ve ilişkileri daha iyi anlamak için görselleştirmelerden faydalanmak önemlidir. Matplotlib ve Seaborn gibi kütüphanelerle grafikler, çizelgeler ve interaktif panolar oluşturarak içgörülerinizi daha etkili bir şekilde sunabilirsiniz.
  5. Model Oluşturma ve Analiz (Modeling and Analysis): Temizlenmiş ve hazırlanmış verilerle istatistiksel modeller oluşturabilir, makine öğrenimi algoritmaları uygulayabilir veya hipotez testleri yapabilirsiniz. Bu, tahmine dayalı modeller (predictive models), sınıflandırma (classification), kümeleme (clustering) veya regresyon (regression) analizleri gibi daha ileri düzey konuları kapsar.

Gördüğünüz gibi, veri yükleme sadece bir başlangıç noktasıdır. Ancak bu başlangıcın sağlam olması, tüm sürecin verimliliği ve doğruluğu açısından kritik öneme sahiptir. Pandas ve Jupyter Notebook’un sunduğu esneklik ve güçle, veri analizi yolculuğunuzda karşılaşacağınız her adımı başarıyla tamamlayabilir ve verilerden değerli içgörüler elde edebilirsiniz. Pratik yaparak ve farklı veri setleriyle deneyler yaparak bu becerilerinizi sürekli geliştirmeniz, veri bilimi alanında yetkinliğinizi artırmanın anahtarıdır.

Sıkça Sorulan Sorular (SSS)

1. Jupyter Notebook’ta bir dosyayı yüklerken FileNotFoundError alırsam ne yapmalıyım?
Bu hata genellikle dosyanın yolu veya adı yanlış olduğunda ortaya çıkar. Öncelikle dosya adını ve uzantısını doğru yazdığınızdan emin olun. Ardından, dosyanın Jupyter Notebook’un çalıştığı dizinde olup olmadığını kontrol edin (import os; print(os.getcwd()) komutuyla). Eğer farklı bir dizindeyse, dosyanın tam yolunu belirtmeli veya çalışma dizininizi değiştirmelisiniz.
2. Büyük bir CSV dosyasını belleğe sığdıramıyorum, çözüm nedir?
Bellek hataları (MemoryError) büyük veri setlerinde yaygındır. Çözüm olarak pd.read_csv() fonksiyonunun chunksize parametresini kullanarak dosyayı parça parça yükleyebilir, usecols parametresiyle sadece ihtiyacınız olan sütunları seçebilir veya dtype parametresiyle sütunların veri tiplerini daha verimli hale getirebilirsiniz. Ayrıca, nrows parametresiyle sadece dosyanın ilk birkaç satırını yükleyerek örneklemeyle çalışabilirsiniz.
3. Türkçe karakter içeren bir CSV dosyasını yüklerken neden hata alıyorum?
Bu durum genellikle kodlama (encoding) sorunlarından kaynaklanır. Dosyanızın ‘UTF-8’ dışında bir kodlamayla (örneğin ‘ISO-8859-9’ veya ‘latin-1’) kaydedilmiş olması muhtemeldir. pd.read_csv() fonksiyonunda encoding='ISO-8859-9' veya encoding='latin-1' gibi farklı kodlamaları deneyerek sorunu çözebilirsiniz.
4. Excel dosyasının belirli bir sayfasını veya sadece belirli sütunlarını nasıl yükleyebilirim?
pd.read_excel() fonksiyonunda sheet_name parametresini kullanarak sayfa adını veya sayfa indeksini belirtebilirsiniz (örneğin, sheet_name='Rapor' veya sheet_name=1). Belirli sütunları yüklemek için ise usecols parametresine sütun adlarının bir listesini geçirebilirsiniz (örneğin, usecols=['Ürün', 'Fiyat']).
5. SQL veritabanından veri çekerken nelere dikkat etmeliyim?
SQL veritabanlarından veri çekerken, öncelikle veritabanı bağlantı dizesini (connection string) doğru bir şekilde yapılandırmanız gerekir. Bu dize kullanıcı adı, şifre, host, port ve veritabanı adını içerir. Güvenlik nedeniyle hassas bilgileri (şifreler gibi) doğrudan kod içinde tutmaktan kaçınmalı, bunun yerine ortam değişkenleri (environment variables) kullanmalısınız. Ayrıca, SQLAlchemy gibi bir kütüphane ile veritabanı motorunu oluşturmalı ve pd.read_sql_query() veya pd.read_sql_table() fonksiyonlarını kullanmalısınız. Bağlantı hataları için veritabanı sunucusunun erişilebilirliğini ve kimlik bilgilerinizin doğruluğunu kontrol etmelisiniz.

#VeriAnalizi #Pandas #JupyterNotebook #VeriYükleme #Python #BüyükVeri

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.