Excel dosyalarınız için otomatik olarak veri sözlükleri oluşturmayı öğrenin
Bir Excel dosyasıyla ilk kez çalışmaya başladığınızda, içeriğindeki verilerin neler olduğunu anlamak zaman alıcı olabilir. Bu veri dosyalarının kapsamlı bir dökümantasyonu mevcut değilse, her sütunun ne anlama geldiğini çözmeye çalışmak zorlaşır. Bu sorunu çözmek için, Excel dosyalarını otomatik olarak inceleyip, içerdikleri sütunların ayrıntılı açıklamalarını içeren bir veri sözlüğü oluşturmak için Python’daki OpenPyXL kütüphanesini ve AI ajanlarını nasıl kullanabileceğimizi göstereceğim.
Veri Sözlükleri Nedir ve Neden Önemlidir?
Veri sözlüğü, bir veri kümesindeki her alanın anlamını ve özelliklerini açıklayan bir dokümantasyondur. Genellikle şunları içerir:
- Sütun adları/alan adları
- Veri tipleri
- Değer aralıkları veya sınırlamaları
- Her sütunun amacı ve anlamı hakkında açıklamalar
- Veri kaynaklarına veya ilgili alanlara referanslar
Excel Veri sözlükleri şu açılardan önemlidir:
- Veri Anlama: Kullanıcıların veri kümesini daha hızlı kavramasına yardımcı olur
- Veri Kalitesi: Veri alanlarının amacını, biçimini ve kısıtlamalarını netleştirerek veri kalitesini artırır
- İşbirliği: Ekipler arasında veri hakkında ortak bir anlayış sağlar
- Veri Yönetişimi: Kuruluş genelinde veri standartlarını ve prensiplerini uygulamayı kolaylaştırır
Excel için OpenPyXL Kütüphanesi
Excel dosyalarını programatik olarak işlemek için Python’da birkaç seçenek bulunmaktadır, ancak OpenPyXL, Excel 2010 XLSX/XLSM/XLTX/XLTM dosyalarını okumak ve yazmak için özellikle etkili bir kütüphanedir.
Kurulumu basittir:
pip install openpyxl
OpenPyXL’in temel avantajları:
- Excel dosyalarını okuma, yazma ve değiştirme yeteneği
- Grafikler, formüller ve koşullu biçimlendirme desteği
- Bellek verimli büyük dosya işleme
- Aktif geliştirme ve iyi dokümantasyon
Excel ‘de Veri Sözlüğü Oluşturma
Veri sözlüğü oluşturma sürecini şu adımlara ayıralım:
- Excel dosyasını okuma
- Çalışma sayfalarını ve sütunları analiz etme
- Veri tiplerini ve değer örneklerini çıkarma
- Yapay zeka kullanarak sütun tanımlarını oluşturma
- Sonuçları bir veri sözlüğü olarak biçimlendirme
İlk olarak, bir Excel dosyasını yükleyelim ve sütun bilgilerini çıkaralım:
import openpyxl
from collections import defaultdict
import pandas as pd
def extract_column_info(excel_file_path):
"""Excel dosyasından tüm çalışma sayfaları ve sütunlar hakkında bilgi çıkarır."""
workbook = openpyxl.load_workbook(excel_file_path, data_only=True)
data_dict = {}
for sheet_name in workbook.sheetnames:
sheet = workbook[sheet_name]
if sheet.max_row <= 1: # Boş sayfaları atla
continue
# İlk satırı başlık olarak kullan
headers = [cell.value for cell in sheet[1]]
# Sütun bilgilerini topla
sheet_data = defaultdict(lambda: {"data_type": set(), "sample_values": []})
# Sütunları döngüye al (en fazla 100 satır veya mevcut satır sayısı)
max_sample_rows = min(sheet.max_row, 101)
for row_idx in range(2, max_sample_rows):
for col_idx, header in enumerate(headers, 1):
if header is None:
continue
cell_value = sheet.cell(row=row_idx, column=col_idx).value
if cell_value is not None:
data_type = type(cell_value).__name__
sheet_data[header]["data_type"].add(data_type)
# En fazla 5 örnek değer sakla
if len(sheet_data[header]["sample_values"]) < 5:
sheet_data[header]["sample_values"].append(str(cell_value))
# Veri tiplerini uygun şekilde biçimlendir
for header, info in sheet_data.items():
info["data_type"] = ", ".join(info["data_type"])
data_dict[sheet_name] = dict(sheet_data)
return data_dict
Bu fonksiyon:
- Excel dosyasını OpenPyXL ile yükler
- Her çalışma sayfasını döngüye alır
- Başlıkları ilk satırdan çıkarır
- Her sütunun veri tiplerini ve örnek değerlerini toplar
- Veri sözlüğünü çalışma sayfası adına göre düzenler
AI ile Excel Sütun Tanımlarını Zenginleştirme
Şimdi, yapay zeka kullanarak sütun adlarına ve örnek değerlere dayalı tanımlar oluşturacağız. Bu iş için bir AI API’si (örneğin OpenAI veya Claude) kullanacağız:
import anthropic
import time
from tenacity import retry, stop_after_attempt, wait_exponential
client = anthropic.Anthropic(api_key="YOUR_API_KEY")
@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=10))
def generate_column_description(column_name, data_type, sample_values):
"""AI kullanarak sütun adı ve örnek değerlere dayalı bir açıklama oluşturur."""
try:
prompt = f"""
Bir veri sözlüğü için aşağıdaki sütun hakkında kısa bir tanım yazın:
Sütun Adı: {column_name}
Veri Tipi: {data_type}
Örnek Değerler: {', '.join(sample_values) if sample_values else 'Örnek yok'}
Lütfen bu sütunun neyi temsil ettiğini ve neden önemli olabileceğini açıklayan kısa (bir veya iki cümlelik) bir tanım yazın.
"""
response = client.messages.create(
model="claude-3-sonnet-20240229",
max_tokens=150,
messages=[
{"role": "user", "content": prompt}
]
)
# Yanıttaki yeni satırları ve fazla boşlukları temizle
description = response.content[0].text.strip()
return description
except Exception as e:
print(f"Error generating description for column {column_name}: {e}")
return "Tanım oluşturulamadı."
Bu fonksiyon:
- Sütun adı, veri tipi ve örnek değerleri içeren bir prompt oluşturur
- AI API’sine bir istek gönderir
- Yanıtı işler ve temiz bir açıklama döndürür
- Hata durumunda yeniden deneme mantığı içerir
Çözümün Uygulanması
Artık temel bileşenlere sahip olduğumuza göre, tam çözümü birleştirelim:
import openpyxl
from collections import defaultdict
import anthropic
import time
import pandas as pd
from tenacity import retry, stop_after_attempt, wait_exponential
def create_data_dictionary(excel_file_path, output_path=None):
"""
Excel dosyasından bir veri sözlüğü oluşturur ve sonuçları bir Excel dosyasına kaydeder.
"""
# Sütun bilgilerini çıkar
data_dict = extract_column_info(excel_file_path)
# Her sütun için açıklamalar oluştur
for sheet_name, columns in data_dict.items():
print(f"Processing sheet: {sheet_name}")
for column_name, info in columns.items():
print(f" Generating description for column: {column_name}")
description = generate_column_description(
column_name,
info["data_type"],
info["sample_values"]
)
info["description"] = description
# API hız sınırlamalarını aşmamak için kısa bir bekleme
time.sleep(0.5)
# Sonuçları bir DataFrame'e dönüştür ve Excel olarak kaydet
if output_path is None:
output_path = f"{excel_file_path.rsplit('.', 1)[0]}_data_dictionary.xlsx"
with pd.ExcelWriter(output_path) as writer:
for sheet_name, columns in data_dict.items():
# Her sütun için bilgileri bir listeye ekle
rows = []
for column_name, info in columns.items():
rows.append({
"Sütun Adı": column_name,
"Veri Tipi": info["data_type"],
"Örnek Değerler": ", ".join(info["sample_values"]),
"Açıklama": info["description"]
})
# DataFrame oluştur ve Excel'e yaz
if rows:
df = pd.DataFrame(rows)
df.to_excel(writer, sheet_name=sheet_name, index=False)
print(f"Data dictionary created and saved to {output_path}")
return data_dict
Kullanım Örneği
Bu kodu kullanmak için sadece Excel dosyanızın yolunu belirtin:
# Veri sözlüğü oluştur
data_dict = create_data_dictionary("örnek_veri.xlsx")
Çıktı dosyası şunları içerecektir:
- Her çalışma sayfası için ayrı bir sekme
- Her sütun için aşağıdaki bilgileri içeren bir tablo:
- Sütun adı
- Veri tipi
- Örnek değerler
- AI tarafından oluşturulan açıklama
Sonuç
Bu yaklaşımı kullanarak, herhangi bir Excel dosyası için kapsamlı bir veri sözlüğü otomatik olarak oluşturulabilir. Bu, özellikle aşağıdaki durumlarda faydalıdır:
- İlk kez karşılaştığınız veri setleriyle çalışırken
- Ekip üyeleri için veri dokümantasyonu oluştururken
- Veri kalitesi ve yönetişimi süreçlerini geliştirirken
Bu çözüm, manuel dokümantasyon yükünü önemli ölçüde azaltır ve veri analizi süreçlerinizde daha fazla şeffaflık ve verimlilik sağlar.
Önerilen iyileştirmeler:
- Daha ayrıntılı veri profili oluşturma (boş değerler, benzersiz değerler)
- Grafik ve pivot tablolar gibi diğer Excel öğelerini belgeleme
- Daha gelişmiş veri tipi tespiti (örneğin tarih formatlarını tanıma)
- Özel bir web arayüzü ile etkileşimli veri sözlükleri oluşturma
Bu tekniği kullanarak, veri anlama sürecinizi hızlandırabilir ve veri kümelerinizin daha iyi dokümante edilmesini sağlayabilirsiniz.