Üretken Yapay Zeka ile DataFrame Özetleri Oluşturma Rehberi
0

Veri bilimciler ve analistler için Pandas DataFrame’lerini analiz etmek günlük işlerin önemli bir parçasıdır. Bu rehberde, üretken yapay zeka (LLM) modellerini kullanarak Pandas DataFrame’leri için otomatik özetler oluşturmayı adım adım anlatacağım.

Giriş: Neden LLM’ler ile DataFrame Özetleme?

Veri analizi sürecinde, büyük DataFrame’leri hızlıca anlamak çok önemlidir. Geleneksel yöntemler (describe()info() gibi) faydalı olsa da, bazen daha anlaşılır ve doğal dilde özetlere ihtiyaç duyarız. İşte tam bu noktada LLM’ler devreye giriyor.

Kurulum ve Gereksinimler

Öncelikle, gerekli kütüphaneleri yükleyelim:

!pip install pandas openai

temel import işlemleri

import pandas as pd
import openai
import os

OpenAI API Ayarları

OpenAI API’sini kullanmak için API anahtarınızı ortam değişkenlerine ekleyin:

openai.api_key = os.getenv('OPENAI_API_KEY')

Eğer API anahtarınız yoksa, OpenAI’nin websitesinden alabilirsiniz.

Örnek DataFrame Oluşturma

Çalışmamız için örnek bir DataFrame oluşturalım:

data = {
    'Ürün': ['Telefon', 'Tablet', 'Laptop', 'Masaüstü', 'Kamera'],
    'Fiyat': [1200, 800, 2500, 1800, 600],
    'Stok': [45, 32, 12, 8, 25],
    'Kategori': ['Elektronik', 'Elektronik', 'Elektronik', 'Elektronik', 'Fotoğraf']
}

df = pd.DataFrame(data)

DataFrame Özeti Oluşturan Fonksiyon

Şimdi asıl işlevimizi oluşturalım:

def dataframe_summarizer(df, model="gpt-3.5-turbo"):
    """
    Pandas DataFrame'inin LLM ile özetlenmesi
    
    Parametreler:
    df (DataFrame): Özetlenecek DataFrame
    model (str): Kullanılacak LLM modeli
    
    Returns:
    str: DataFrame'in doğal dilde özeti
    """
    
    # DataFrame'i string formatına çevirme
    df_str = df.to_string()
    
    prompt = f"""
    Aşağıda bir Pandas DataFrame'i bulunmaktadır. 
    Bu DataFrame'i aşağıdaki açılardan analiz edip özetleyin:
    
    1. DataFrame'in genel yapısı (satır/sütun sayısı)
    2. Her sütunun istatistiksel özeti
    3. Olası aykırı değerler veya dikkat çeken noktalar
    4. Kategorik değişkenler için özel gözlemler
    
    DataFrame:
    {df_str}
    
    Özeti maddeler halinde ve Türkçe olarak verin.
    """
    
    response = openai.ChatCompletion.create(
        model=model,
        messages=[
            {"role": "system", "content": "Sen bir veri analiz uzmanısın."},
            {"role": "user", "content": prompt}
        ],
        temperature=0.7
    )
    
    return response.choices[0].message.content

Fonksiyonu Çalıştırma ve Sonuçları Görme

Şimdi fonksiyonumuzu test edelim:

özet = dataframe_summarizer(df)
print(özet)

Beklenen çıktıya benzer şöyle bir sonuç almalısınız:

1. Genel Yapı:
- DataFrame 5 satır ve 4 sütundan oluşmaktadır.
- Sütunlar: Ürün (kategorik), Fiyat (sayısal), Stok (sayısal), Kategori (kategorik)

2. Sütun Analizleri:
- Fiyat: 1200 ile 2500 TL aralığında değişmekte, ortalama ~1380 TL
- Stok: 8 ile 45 birim arasında, en yüksek telefonlarda (45), en düşük masaüstlerinde (8)

3. Dikkat Çeken Noktalar:
- Laptoplar en pahalı ürün (2500 TL) ancak stokları nispeten düşük (12 birim)
- Masaüstü bilgisayarlar hem fiyat hem stok açısından dikkat çekici (1800 TL, sadece 8 birim)

4. Kategorik Değişkenler:
- Ürünlerin çoğu 'Elektronik' kategorisinde, sadece Kamera 'Fotoğraf' kategorisinde
- Kategorilere göre fiyat dağılımı değişiklik gösteriyor

Gelişmiş Kullanım Senaryoları

Büyük DataFrame ‘ler için Optimizasyon

Büyük DataFrame’lerle çalışırken, LLM’lerin token sınırlamalarına dikkat etmelisiniz. İşte bir çözüm:

def summarize_large_df(df, model="gpt-3.5-turbo", max_tokens=2000):
    # DataFrame'i daha küçük parçalara böl
    description = f"""
    DataFrame Shape: {df.shape}
    Columns: {df.columns.tolist()}
    Sample Data:
    {df.head().to_string()}
    """
    
    # Sayısal sütunlar için istatistikler
    numeric_desc = df.describe().to_string() if not df.select_dtypes(include=['number']).empty else "No numeric columns"
    
    # Kategorik sütunlar için istatistikler
    cat_desc = df.select_dtypes(include=['object']).describe().to_string() if not df.select_dtypes(include=['object']).empty else "No categorical columns"
    
    prompt = f"""
    Aşağıda bir DataFrame'in özet bilgileri verilmiştir:
    
    {description}
    
    Sayısal Sütun İstatistikleri:
    {numeric_desc}
    
    Kategorik Sütun İstatistikleri:
    {cat_desc}
    
    Bu bilgileri kullanarak DataFrame'i detaylıca analiz edin.
    """
    
    # Kalan kodlar aynı...

Özel Analiz İstekleri

Belirli bir açıyı vurgulayan özel promptlar oluşturabilirsiniz:

def analyze_df_column(df, column_name, model="gpt-3.5-turbo"):
    col_data = df[column_name].describe().to_string()
    
    prompt = f"""
    Aşağıdaki DataFrame'de '{column_name}' sütununu analiz edin:
    
    {col_data}
    
    Analiziniz şunları içermeli:
    - Dağılımın genel özellikleri
    - Olası aykırı değerler
    - Veri kalitesi hakkında gözlemler
    - İlgili sütunla ilgili öneriler
    """
    
    # Kalan kodlar aynı...

Sonuç ve Öneriler

LLM’lerle DataFrame özetleme, veri analizi sürecini önemli ölçüde hızlandırabilir. Ancak dikkat edilmesi gereken noktalar:

  1. Gizlilik: Hassas verilerle çalışırken API kullanımına dikkat edin
  2. Maliyet: Büyük DataFrame’ler yüksek token maliyetine neden olabilir
  3. Doğruluk: LLM çıktılarını her zaman kontrol edin

Bu teknik, özellikle:

  • Hızlı veri keşfi yaparken
  • Takım arkadaşlarına veri setini tanıtırken
  • Raporlama süreçlerinde
    çok faydalı olacaktır.

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