Otomatik Grafik ve Görselleştirme Üretimi
matplotlib/seaborn grafikleri oluşturma ve base64 görüntü sonuçları döndürme.
Otomatik Grafik ve Görselleştirme Üretimi, CoddyKit'te ücretsiz bir AI Agents dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Agents öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Agents kursu toplamda 4 dersten oluşur.
Ajanlar Neden Grafik Oluşturur
Metin içindeki sayıları anlamak zordur. 12 ay boyunca satış eğilimlerini gösteren bir grafik, bir sayı paragrafının anlatamayacağı şeyi saniyeler içinde aktarır.
Görselleştirme oluşturabilen bir veri analizi ajanı çok daha kullanışlıdır; insan analistin üreteceği çıktının aynısını, yani hem sayıları hem de grafikleri sunar.
Etkileşimsiz Matplotlib Kurulumu
Matplotlib varsayılan olarak bir GUI penceresi açar. Bir ajanda (görüntüleme olmayan bir sunucu tarafı ortamında çalışırken) Agg arka ucuna geçmeniz gerekir; bu arka uç yalnızca dosyaya çıktı verir ve GUI kullanmaz.
Görüntüleme hatalarını önlemek için bunu pyplot'u içe aktarmadan önce ayarlayınız.
import matplotlib
matplotlib.use('Agg') # must be set BEFORE importing pyplot
import matplotlib.pyplot as plt
import os
OUTPUT_DIR = '/tmp/agent_charts'
os.makedirs(OUTPUT_DIR, exist_ok=True)
# Verify no display is needed
print('Backend:', matplotlib.get_backend()) # Should print: AggÇubuk Grafik Oluşturma
Çubuk grafikler kategoriler arasındaki değerleri karşılaştırır. Bunları ilk N sıralamaları, kategori karşılaştırmalarını ve önce/sonra karşılaştırmalarını göstermek için kullanınız.
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import os
OUTPUT_DIR = '/tmp/agent_charts'
os.makedirs(OUTPUT_DIR, exist_ok=True)
def create_bar_chart(labels, values, title, xlabel, ylabel, filename):
fig, ax = plt.subplots(figsize=(10, 6))
bars = ax.bar(labels, values, color='steelblue', edgecolor='white')
# Add value labels on bars
for bar, value in zip(bars, values):
ax.text(
bar.get_x() + bar.get_width() / 2,
bar.get_height() + max(values) * 0.01,
f'{value:,.0f}', ha='center', va='bottom', fontsize=9
)
ax.set_title(title, fontsize=14, pad=15)
ax.set_xlabel(xlabel)
ax.set_ylabel(ylabel)
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
path = os.path.join(OUTPUT_DIR, filename)
plt.savefig(path, dpi=150, bbox_inches='tight')
plt.close()
return pathÇizgi Grafik Oluşturma
Çizgi grafikler zaman içindeki eğilimleri gösterir. Bunları zaman serisi verileri için kullanınız: günlük satışlar, aylar boyunca kullanıcı artışı ve sprintler boyunca performans ölçütleri.
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import os
OUTPUT_DIR = '/tmp/agent_charts'
os.makedirs(OUTPUT_DIR, exist_ok=True)
def create_line_chart(x_values, y_values, title, xlabel, ylabel, filename, label=None):
fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(x_values, y_values, marker='o', linewidth=2, markersize=5,
color='darkorange', label=label or ylabel)
# Highlight min and max points
max_idx = y_values.index(max(y_values))
min_idx = y_values.index(min(y_values))
ax.annotate(f'Max: {max(y_values):,.0f}',
xy=(x_values[max_idx], y_values[max_idx]),
xytext=(5, 10), textcoords='offset points', color='green')
ax.set_title(title, fontsize=14, pad=15)
ax.set_xlabel(xlabel)
ax.set_ylabel(ylabel)
ax.grid(True, alpha=0.3)
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
path = os.path.join(OUTPUT_DIR, filename)
plt.savefig(path, dpi=150, bbox_inches='tight')
plt.close()
return pathDağılım Grafiği Oluşturma
Dağılım grafikleri iki sayısal değişken arasındaki ilişkileri ortaya çıkarır; örneğin reklam harcaması ile gelir arasındaki korelasyon veya sipariş büyüklüğü ile teslimat süresi arasındaki ilişki.
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np
import os
OUTPUT_DIR = '/tmp/agent_charts'
os.makedirs(OUTPUT_DIR, exist_ok=True)
def create_scatter_chart(x_values, y_values, title, xlabel, ylabel, filename, add_trendline=True):
fig, ax = plt.subplots(figsize=(8, 6))
ax.scatter(x_values, y_values, alpha=0.6, color='royalblue', edgecolors='white', s=60)
if add_trendline and len(x_values) > 2:
z = np.polyfit(x_values, y_values, 1)
p = np.poly1d(z)
x_line = sorted(x_values)
ax.plot(x_line, p(x_line), 'r--', alpha=0.7, label='Trend')
ax.legend()
# Compute and show correlation
corr = np.corrcoef(x_values, y_values)[0, 1]
ax.text(0.05, 0.95, f'r = {corr:.2f}', transform=ax.transAxes,
fontsize=10, verticalalignment='top')
ax.set_title(title, fontsize=14, pad=15)
ax.set_xlabel(xlabel)
ax.set_ylabel(ylabel)
plt.tight_layout()
path = os.path.join(OUTPUT_DIR, filename)
plt.savefig(path, dpi=150, bbox_inches='tight')
plt.close()
return pathHistogram Oluşturma
Histogramlar tek bir sayısal değişkenin dağılımını gösterir; örneğin sipariş değerlerinin dağılımı, müşteri yaşlarının dağılımı veya yanıt sürelerinin dağılımı.
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np
import os
OUTPUT_DIR = '/tmp/agent_charts'
os.makedirs(OUTPUT_DIR, exist_ok=True)
def create_histogram(values, title, xlabel, filename, bins=20):
fig, ax = plt.subplots(figsize=(8, 5))
n, bin_edges, patches = ax.hist(values, bins=bins, color='mediumseagreen',
edgecolor='white', alpha=0.8)
# Add mean and median lines
mean_val = np.mean(values)
median_val = np.median(values)
ax.axvline(mean_val, color='red', linestyle='--', label=f'Mean: {mean_val:.1f}')
ax.axvline(median_val, color='blue', linestyle='--', label=f'Median: {median_val:.1f}')
ax.set_title(title, fontsize=14, pad=15)
ax.set_xlabel(xlabel)
ax.set_ylabel('Frequency')
ax.legend()
plt.tight_layout()
path = os.path.join(OUTPUT_DIR, filename)
plt.savefig(path, dpi=150, bbox_inches='tight')
plt.close()
return pathAjan Yanıtı İçin Base64 Kodlaması
Grafiği bir PNG dosyası olarak kaydettikten sonra, araç sonucunda JSON olarak serileştirilebilen bir dize şeklinde döndürülebilmesi için base64 olarak kodlayınız. Çağıran taraf daha sonra grafiği işleyebilir veya görüntüleyebilir.
import base64
def file_to_base64(filepath):
with open(filepath, 'rb') as f:
return base64.b64encode(f.read()).decode('utf-8')
def create_chart_result(chart_path, chart_type, caption):
b64 = file_to_base64(chart_path)
return {
'type': 'image',
'chart_type': chart_type,
'format': 'png',
'base64': b64,
'caption': caption,
'file_path': chart_path
}
# Usage after creating a chart
path = create_bar_chart(['Q1', 'Q2', 'Q3', 'Q4'], [12000, 15000, 18000, 22000],
'Quarterly Revenue', 'Quarter', 'Revenue ($)', 'revenue.png')
result = create_chart_result(path, 'bar', 'Quarterly revenue showing consistent growth')
print(f'Chart encoded: {len(result["base64"])} chars')Açıklama Oluşturma
Açıklaması olmayan bir grafik, izleyiciyi grafiği kendi başına yorumlamaya zorlar. LLM'nin grafikte görülen temel içgörüyü açıklayan tek cümlelik bir açıklama oluşturmasını sağlayınız.
def generate_chart_caption(chart_type, data_summary, question):
prompt = f'''A {chart_type} chart was generated to answer: "{question}"
Data summary:
{data_summary}
Write a single clear sentence describing the most important insight shown in the chart.
Focus on the key finding, not on describing what type of chart it is.
Caption:'''
caption = llm_call(prompt).strip()
# Ensure it ends with a period
if caption and not caption.endswith('.'):
caption += '.'
return caption
# Example
caption = generate_chart_caption(
chart_type='bar',
data_summary='Q1: $12k, Q2: $15k, Q3: $18k, Q4: $22k (83% total growth)',
question='How did quarterly revenue trend this year?'
)
print(caption)
# -> "Revenue grew consistently each quarter, with Q4 nearly doubling Q1 figures."Grafik Türünü Otomatik Seçme
Farklı sorular farklı grafik türleri gerektirir. Hangi grafiğin kullanılacağını sabit kodlamak yerine, LLM'nin veri özelliklerine ve soru türüne göre karar vermesini sağlayınız.
import json
CHART_TYPE_PROMPT = '''Choose the best chart type to answer this question.
Question: {question}
Data has columns: {columns}
Data sample: {sample}
Available chart types:
- bar: comparing values across categories
- line: trends over time
- scatter: relationship between two numeric variables
- histogram: distribution of one numeric variable
- pie: composition/proportions (use sparingly)
Return JSON: {{"chart_type": "bar", "x": "category_column", "y": "value_column",
"title": "Chart title", "xlabel": "X label", "ylabel": "Y label"}}'''
def select_chart_type(question, df):
sample = df.head(3).to_dict(orient='records')
response = llm_call(CHART_TYPE_PROMPT.format(
question=question,
columns=list(df.columns),
sample=json.dumps(sample, default=str)
))
return json.loads(response)Birleşik Grafik Oluşturma Aracı
Tüm grafik türlerini ajanların çağırabileceği tek bir araçta birleştiriniz. Araç, belirtilmemişse grafik türünü otomatik olarak seçer, grafiği oluşturur, kodlar ve bir açıklama üretir.
import pandas as pd
def generate_chart(df_name, question, chart_type=None, filename=None):
df = dataframes.get(df_name)
if df is None:
return {'error': f'{df_name!r} not found'}
# Auto-select chart type if not specified
if not chart_type:
spec = select_chart_type(question, df)
else:
spec = {'chart_type': chart_type}
ct = spec.get('chart_type', 'bar')
x_col = spec.get('x', df.columns[0])
y_col = spec.get('y', df.select_dtypes(include='number').columns[0])
title = spec.get('title', question[:60])
fname = filename or f'chart_{ct}.png'
x_vals = df[x_col].tolist()
y_vals = df[y_col].tolist()
if ct == 'bar':
path = create_bar_chart(x_vals, y_vals, title, x_col, y_col, fname)
elif ct == 'line':
path = create_line_chart(x_vals, y_vals, title, x_col, y_col, fname)
elif ct == 'histogram':
path = create_histogram(y_vals, title, y_col, fname)
else:
path = create_scatter_chart(x_vals, y_vals, title, x_col, y_col, fname)
caption = generate_chart_caption(ct, f'{x_col} vs {y_col}', question)
return create_chart_result(path, ct, caption)Çok Serili ve Gruplandırılmış Grafikler
Birden çok grubu karşılaştırırken (örneğin zaman içinde bölgeye göre gelir), gruplandırılmış veya çok serili grafikler kullanınız. Matplotlib, tek bir grafikte birden çok çizgiyi ve kaydırmalarla gruplandırılmış çubuk grafikleri destekler.
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np
import os
OUTPUT_DIR = '/tmp/agent_charts'
os.makedirs(OUTPUT_DIR, exist_ok=True)
def create_grouped_bar_chart(categories, series_data, title, xlabel, ylabel, filename):
n_groups = len(categories)
n_series = len(series_data)
bar_width = 0.8 / n_series
x = np.arange(n_groups)
fig, ax = plt.subplots(figsize=(12, 6))
colors = ['steelblue', 'darkorange', 'forestgreen', 'crimson']
for i, (label, values) in enumerate(series_data.items()):
offset = (i - (n_series - 1) / 2) * bar_width
ax.bar(x + offset, values, bar_width, label=label,
color=colors[i % len(colors)], alpha=0.85)
ax.set_xticks(x)
ax.set_xticklabels(categories, rotation=30, ha='right')
ax.set_title(title, fontsize=14, pad=15)
ax.set_xlabel(xlabel)
ax.set_ylabel(ylabel)
ax.legend()
plt.tight_layout()
path = os.path.join(OUTPUT_DIR, filename)
plt.savefig(path, dpi=150, bbox_inches='tight')
plt.close()
return pathBilgi Kontrolü
Sunucu tarafında çalışan bir ajanda matplotlib'in Agg arka ucu pyplot içe aktarılmadan önce neden ayarlanmalıdır?
Özet: Otomatik Grafik ve Görselleştirme Oluşturma
Veri ajanları şu şekilde grafik oluşturur: matplotlib Agg arka ucunu ayarlama (GUI yok), plt.savefig() ile grafik oluşturma, JSON aktarımı için base64 kodlaması ve temel içgörüleri vurgulayan LLM tarafından yazılmış açıklamalar oluşturma.
Dört temel grafik türü: bar (kategori karşılaştırmaları), line (zaman serileri), scatter (eğilim çizgisiyle korelasyonlar) ve histogram (dağılımlar). Grafik türünü otomatik seçme, LLM'nin veri özelliklerine ve kullanıcının sorusuna göre en uygun görselleştirmeyi seçmesini sağlar.
Sıkça Sorulan Sorular
“Otomatik Grafik ve Görselleştirme Üretimi” dersi ücretsiz mi?
Evet — “Otomatik Grafik ve Görselleştirme Üretimi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Agents kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Agents kursu toplamda 4 dersten oluşur.
“Otomatik Grafik ve Görselleştirme Üretimi” dersinde ne öğreneceğim?
matplotlib/seaborn grafikleri oluşturma ve base64 görüntü sonuçları döndürme. AI Agents ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
AI Agents öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te AI Agents, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Otomatik Grafik ve Görselleştirme Üretimi” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu AI Agents dersinde kod yazıp çalıştırabilir miyim?
Evet. Her AI Agents dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Veri Analizi İçin Kod Yorumlayıcı Kalıbı
- Pandas Tabanlı Veri Aracıları
- Otomatik Grafik ve Görselleştirme Üretimi
- İstatistiksel Özet Aracıları