Python İle Pyvis Kütüphanesi Kullanarak İnteraktif Ağ Grafiği Nasıl Yapılır?

Python İle Pyvis Kütüphanesi Kullanarak İnteraktif Ağ Grafiği Nasıl Yapılır?
Python İle Pyvis Kütüphanesi Kullanarak İnteraktif Ağ Grafiği Nasıl Yapılır?

Gereksinimler ve Ortam Kurulumu

Pyvis ile çalışmaya başlamadan önce Python 3.9 veya daha yeni bir sürümün yüklü olduğundan emin olmalısınız. Pyvis, ağ grafiklerini işlemek için NetworkX kütüphanesi ile uyumlu çalışır; bu nedenle her iki kütüphaneyi de ortamınıza kurmanız gerekmektedir.

Terminal veya komut satırı arayüzünüzü açarak aşağıdaki komutu çalıştırın:

pip install pyvis networkx

Bu komut, ağ yapısını tanımlamak için gerekli olan NetworkX ve görselleştirme motoru olan Pyvis'i sisteminize dahil edecektir. Kurulumun başarıyla tamamlandığını doğrulamak için Python konsolunda import pyvis komutunu çalıştırabilirsiniz. Hata almıyorsanız geliştirme ortamınız hazırdır.

Temel Bir Ağ Grafiği Oluşturma

İlk adımda, en basit haliyle düğümleri ve bu düğümleri birbirine bağlayan kenarları tanımlayacağız. Pyvis, Network sınıfı üzerinden tüm görselleştirme ayarlarını yönetir. Aşağıdaki örnekte, üç düğümlü basit bir yapı kuracağız.

from pyvis.network import Network

# Ağ nesnesini oluştur
net = Network(notebook=True)

# Düğümleri ekle
net.add_node(1, label="Merkez")
net.add_node(2, label="Düğüm A")
net.add_node(3, label="Düğüm B")

# Kenarları (bağlantıları) ekle
net.add_edge(1, 2)
net.add_edge(1, 3)

# Grafiği HTML dosyasına kaydet
net.show("basit_ag.html", notebook=False)

Bu kod bloğu, basit_ag.html adında bir dosya oluşturur. Tarayıcınızda bu dosyayı açtığınızda, düğümlerin birbirine bağlı olduğu ve fare ile sürüklenebildiği interaktif bir yapı göreceksiniz. notebook=False parametresi, grafik nesnesini doğrudan bir dosyaya yazdırır.

NetworkX İle Veri Entegrasyonu

Gerçek dünya senaryolarında veriler genellikle CSV veya JSON gibi formatlarda bulunur. NetworkX, bu verileri bir grafik yapısına dönüştürmek için mükemmel bir araçtır. Pyvis, NetworkX nesnelerini doğrudan kabul ederek görselleştirme sürecini hızlandırır.

import networkx as nx
from pyvis.network import Network

# NetworkX ile bir grafik oluştur
nx_graph = nx.cycle_graph(5)

# Pyvis'e aktar
nt = Network(notebook=False)
nt.from_nx(nx_graph)

# Görselleştir
nt.show("nx_ag.html", notebook=False)

Bu yöntem, özellikle büyük veri setleri üzerinde analiz yaparken oldukça kullanışlıdır. nx.cycle_graph(5) fonksiyonu, 5 düğümlü dairesel bir yapı oluşturur. from_nx metodu, mevcut tüm NetworkX özelliklerini ve bağlantılarını Pyvis'in görselleştirme motoruna başarıyla aktarır.

Grafik Özelleştirme: Renkler, Boyutlar ve Etiketler

Grafiğinizi daha anlamlı hale getirmek için düğümlerin boyutlarını, renklerini ve üzerindeki etiketleri özelleştirebilirsiniz. Bu, verilerinizdeki kategorileri görsel olarak ayırmak için kritiktir.

net = Network(height="500px", width="100%", bgcolor="#222222", font_color="white")

# Özellikli düğümler ekle
net.add_node(1, label="Ana Sunucu", color="#ff0000", size=30)
net.add_node(2, label="İstemci 1", color="#00ff00", size=15)
net.add_node(3, label="İstemci 2", color="#00ff00", size=15)

net.add_edge(1, 2)
net.add_edge(1, 3)

net.show("ozel_ag.html", notebook=False)

Burada bgcolor ve font_color parametreleri ile grafiğin genel temasını değiştirdik. Düğüm bazında color ve size parametreleri, verinin hiyerarşisini veya önem derecesini vurgulamanıza yardımcı olur.

İnteraktif Özellikler ve Fizik Motoru

Pyvis, grafiğin hareketli olmasını sağlayan bir fizik motoruna sahiptir. Düğümlerin birbirini itmesi veya çekmesi gibi davranışları barnes_hut algoritması ile yönetebilirsiniz.

net = Network(notebook=False)
net.barnes_hut() # Fizik motorunu aktifleştir

# Daha fazla düğüm ekleyelim
for i in range(10):
    net.add_node(i, label=f"Düğüm {i}")
    if i > 0:
        net.add_edge(i-1, i)

net.show("fizik_ag.html", notebook=False)

barnes_hut() fonksiyonu, düğümlerin birbirine çarpmadan dağılmasını sağlar. Bu özellik, özellikle yüzlerce düğümün olduğu karmaşık ağlarda grafiğin okunabilirliğini artırır.

Karşılaştırmalı Grafik Yöntemleri

Yöntem Avantaj Dezavantaj
Doğrudan Pyvis Hızlı kurulum, basit sözdizimi Karmaşık veri manipülasyonu zor
NetworkX + Pyvis Güçlü veri işleme yeteneği İki kütüphane arası uyum gerek
Matplotlib (Statik) Yüksek baskı kalitesi İnteraktif değil
Kritik Uyarı: Üretim ortamında (production) oluşturduğunuz HTML dosyalarını web sunucunuzda yayınlarken, dosyaların bulunduğu dizin için doğru izinleri yapılandırdığınızdan emin olun. Kullanıcıların ağ grafiği üzerinden hassas verileri görmemesi için veriyi filtreleyerek (anonymization) görselleştirin.

Sıkça Sorulan Sorular

Pyvis grafiğini bir web sitesine nasıl gömerim?

Pyvis tarafından oluşturulan HTML dosyasının içeriğini bir iframe etiketi kullanarak web sitenizin içine kolayca yerleştirebilirsiniz.

Çok büyük veri setlerinde performans sorunu yaşar mıyım?

Evet, 1000'den fazla düğüm içeren ağlarda tarayıcı performansı düşebilir. Bu durumda düğüm sayısını azaltmak veya kümeleme (clustering) yöntemlerini kullanmak önerilir.

Düğümlere tıklandığında bilgi kutucuğu nasıl açılır?

Düğüm eklerken title parametresini kullanabilirsiniz. Örneğin: net.add_node(1, title="Bu bir bilgi kutusudur").

Grafiği PNG veya JPEG olarak kaydedebilir miyim?

Pyvis interaktif bir araçtır. Sabit bir görüntü almak isterseniz, tarayıcı üzerinden ekran görüntüsü alabilir veya NetworkX'in matplotlib entegrasyonunu kullanabilirsiniz.

Fizik motoru grafiği çok fazla hareket ettiriyor, bunu nasıl durdururum?

net.toggle_physics(False) komutu ile grafiğin hareketini tamamen durdurabilir veya net.barnes_hut(spring_length=100) gibi parametrelerle hareketin şiddetini azaltabilirsiniz.

Kod Güvenliği Sorumluluk Reddi: Bu makalede paylaşılan kodlar eğitim amaçlıdır. Kullanıcı girdilerini doğrudan ağ grafiklerine yansıtırken, XSS (Cross-Site Scripting) saldırılarına karşı verileri mutlaka temizleyin ve sanitize edin.

İleri Seviye Veri Görselleştirme: Dinamik Veri Akışı ve Güncelleme

Pyvis, statik ağların ötesinde, gerçek zamanlı veri akışlarını görselleştirmek için de kullanılabilir. Özellikle canlı sistem izleme veya borsa verileri gibi sürekli değişen verilerle çalışırken, grafiği her seferinde yeniden oluşturmak yerine var olan nesneleri güncelleyebilirsiniz. Bu yöntem, kullanıcı deneyimini bozmadan verinin akışını izlemenize olanak tanır.

Dinamik bir yapı kurarken, NetworkX nesnesini bir döngü içerisinde güncelleyip ardından Pyvis grafiğine aktarmak en sağlıklı yöntemdir. Aşağıdaki örnek, belirli bir aralıkla düğüm ekleyen basit bir yapıyı göstermektedir:

import networkx as nx
from pyvis.network import Network
import time

# Başlangıç ağı
net = Network(notebook=True)
G = nx.Graph()

# Dinamik veri güncelleme simülasyonu
for i in range(5):
    G.add_node(i, label=f"Düğüm {i}")
    if i > 0:
        G.add_edge(i-1, i)
    
    net.from_nx(G)
    net.show(f"graph_{i}.html")
    print(f"Grafik {i} oluşturuldu.")
    time.sleep(1)

Pyvis Grafikleri İçin Hata Ayıklama ve Optimizasyon Teknikleri

Karmaşık ağ yapılarında, özellikle düğüm sayısı 500'ü aştığında tarayıcı performansında düşüşler yaşanabilir. Bu tür durumlarda grafiğin neden yavaş çalıştığını anlamak ve optimize etmek için şu stratejileri izlemelisiniz:

  • Düğüm Kümeleme (Clustering): Çok fazla düğümün olduğu alanlarda, benzer düğümleri tek bir "cluster" altında toplayarak görsel karmaşayı azaltın.
  • Fizik Motorunu Devre Dışı Bırakma: Eğer ağ yapınız statikse, net.toggle_physics(False) komutunu kullanarak tarayıcının sürekli hesaplama yapmasını engelleyin.
  • Canvas Boyutlandırma: Grafiği gömdüğünüz HTML konteynerinin genişlik ve yükseklik değerlerini sabit tutarak tarayıcının yeniden hesaplama (reflow) maliyetini düşürün.

Hata Ayıklama İpuçları

Grafiğiniz hiç görünmüyorsa veya boş bir ekranla karşılaşıyorsanız şu adımları kontrol edin:

  1. Dosya Yolları: show() metodunda belirttiğiniz dosya yolunun yazılabilir olduğundan emin olun.
  2. JavaScript Hataları: Tarayıcıda F12 tuşuna basarak "Console" sekmesini kontrol edin. Eğer vis.js kütüphanesi yüklenemiyorsa, internet bağlantınızın olduğundan veya CDN erişiminizin açık olduğundan emin olun.
  3. Veri Tipi Uyumsuzluğu: NetworkX üzerinden veri aktarırken düğüm ID'lerinin benzersiz (unique) ve hash'lenebilir (integer veya string) olduğundan emin olun.
Sorun Olası Neden Çözüm
Grafik çok yavaş Fizik motoru yükü physics=False yapın
Etiketler okunmuyor Düğüm yoğunluğu font boyutunu küçültün
Grafik görünmüyor HTML konteyner hatası Div ID'sini kontrol edin

Sonuç

Python ve Pyvis kütüphanesi, karmaşık veri ilişkilerini görselleştirmek için modern ve güçlü bir çözüm sunar. Bu rehberde, temel düğüm eklemeden fizik motoru ayarlarına kadar interaktif ağ grafikleri oluşturmanın tüm aşamalarını inceledik. Bir sonraki adım olarak, verilerinizi JSON dosyalarından çekerek otomatik bir grafik oluşturucu yazmayı deneyebilir veya düğüm tıklamalarına özel JavaScript olayları (event listeners) ekleyerek grafiğinizi daha da özelleştirebilirsiniz.

Bu yazıya tepkinizi paylaşın:
Selin Korkmaz

Kendin yap (DIY) projeleri ve sürdürülebilir yaşam ipuçları üzerine odaklanıyorum. Okuyucularıma bütçe dostu ve yaratıcı çözüm önerileri sunmaktan keyif alıyorum.

Yorumlar (0)

Yorum Yaz