Viz 3D-2D Zaman Serisi Analiz Aracı

Özet

Zaman serisi verilerini analiz etmek için 2D ve 3D grafikler üreten bir masaüstü uygulaması geliştirdim. Uygulama Python, PyQt6 ve Plotly ile yazıldı; TXT dosyalarıyla çalışır, 2D (Line, Scatter, Area, Bar, Histogram, Box) ve 3D animasyonlu görselleştirmeleri destekler.

📌 Projenin Amacı

– Deneysel ölçüm verilerini hızlıca görselleştirmek
– 2D/3D grafiklerle farklı analiz imkanları sunmak
– Kullanıcı dostu bir arayüz sağlamak

🔧 Teknik Katkılarım

– PyQt6 ile GUI • Plotly ile 2D/3D grafik ve animasyon
– TXT dosyalarından veri okuma ve ön işleme
– WebGL hızlandırma, PNG/HTML dışa aktarma
– Worker thread ve önbellekleme

🖥️ Ara yüz / Ekranlar

3D Zaman Serisi Görselleştirme:


2D Çizgi Grafiği:

2D Histogram Görselleştirme:

📁 Örnek Veri (pilvoltajdeğerleri.txt)
DATE TIME V1 V2 V3 V4
2025/09/10 08:02:58 0.000 2.706 2.683 0.000
2025/09/10 08:03:25 0.000 2.706 2.683 0.000
2025/09/10 08:03:56 0.000 2.706 2.688 0.000
2025/09/10 08:04:26 0.000 2.711 2.688 0.000
2025/09/10 08:04:56 0.000 2.706 2.688 0.000
2025/09/10 08:05:26 0.000 2.706 2.688 0.000
2025/09/10 08:05:57 0.000 2.711 2.692 0.000
2025/09/10 08:06:27 0.000 2.711 2.678 0.000
2025/09/10 08:06:57 0.000 2.711 2.692 0.000

Ek: Kod Parçaları


1) Zaman Türetme
def ensure_time_columns(df):
if ‘DATE’ in df.columns and ‘TIME’ in df.columns:
df[‘datetime’] = pd.to_datetime(df[‘DATE’] + ‘ ‘ + df[‘TIME’])
start = df[‘datetime’].min()
df[‘time_seconds’] = (df[‘datetime’] – start).dt.total_seconds()
df[‘time_label’] = df[‘datetime’].dt.strftime(‘%H:%M:%S’)
else:
# Sayısal veya hh:mm:ss zaman desteği

return df


2) 2D Grafik
def build_2d_chart(df, selected_channels, chart_kind=”Line”):
df = ensure_time_columns(df.copy())
fig = go.Figure()
for ch in selected_channels:
if ch not in df.columns: continue
fig.add_trace(go.Scatter(x=df[‘time_seconds’], y=df[ch], mode=’lines’, name=ch))
return fig


3) 3D Animasyon
def build_3d_time_series_animation(df, voltage_col, current_col):
df = ensure_time_columns(df.copy())
fig = go.Figure()
for t in df[‘time_seconds’].unique():
frame_df = df[df[‘time_seconds’] <= t]
fig.add_frame(go.Frame(data=[go.Scatter3d(x=frame_df[‘time_seconds’],
y=frame_df[voltage_col],
z=frame_df[current_col])]))
return fig


4) Worker & WebEngine
class PlotWorker(QThread):
finished_json = pyqtSignal(str)
def __init__(self, builder, *args):
super().__init__(); self.builder=builder; self.args=args
def run(self):
fig = self.builder(*self.args)
self.finished_json.emit(fig.to_json())


5) MainWindow
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle(“Viz3D”)
self.df=None; self.current_json=None
self._init_ui()

def on_time_series(self):
fig = build_2d_chart(self.df, [“V1″,”V2″], chart_kind=”Line”)
self.current_json = fig.to_json()
self.web.render_json(self.current_json)


🚀 Sonuç
Bu proje ile deney verileri 2D/3D grafiklerle analiz edilebiliyor. PyQt6 + Plotly kombinasyonu sayesinde hem masaüstü hem de web tabanlı görselleştirme yapılabiliyor.


Kısa Bio
Merhaba, ben Ömercan. Bilgisayar Mühendisiyim. Bu projede Python, PyQt6 ve Plotly ile 2D/3D analiz aracı geliştirdim.