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:
- Gizlilik: Hassas verilerle çalışırken API kullanımına dikkat edin
- Maliyet: Büyük DataFrame’ler yüksek token maliyetine neden olabilir
- 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.