ChronoSense / run_analysis.py
NextGenC's picture
Upload 27 files
64b5d29 verified
raw
history blame contribute delete
8.31 kB
# run_analysis.py (Ağ Analizi Metrikleri Eklendi)
import time
import pandas as pd
import sys
from pathlib import Path
import networkx as nx
import webbrowser
import logging
# src klasöründeki modüllere erişim için
sys.path.insert(0, str(Path(__file__).parent))
from src.analysis.temporal import calculate_concept_frequencies
from src.analysis.similarity import calculate_concept_embeddings, calculate_similarity_matrix
from src.analysis.network_builder import build_concept_network
# YENİ importlar:
from src.analysis.network_analysis import get_network_analysis_results, save_network_analysis
from src.visualization.plotting import visualize_network
from src.data_management.storage import load_dataframe, save_dataframe, CONCEPT_COLUMNS, FREQUENCY_FILENAME, SIMILARITY_FILENAME, NETWORK_ANALYSIS_FILENAME # YENİ: NETWORK_ANALYSIS_FILENAME
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
pd.set_option('display.max_rows', 100)
pd.set_option('display.max_columns', 10)
pd.set_option('display.width', 1000)
if __name__ == "__main__":
print(">>> Analizler Çalıştırılıyor (Frekans + Benzerlik + Ağ + Metrikler + Görselleştirme) <<<")
overall_start_time = time.time()
concepts_df = None
frequency_results_df = None
similarity_results_df = None
concept_network = None # Grafı saklamak için
network_analysis_df = None # Analiz sonuçlarını saklamak için
# --- 1. Frekans Analizi ---
print("\n--- 1. Frekans Hesaplaması ---"); start_time = time.time()
# ... (önceki kodla aynı, sadece print süresi değişebilir) ...
frequency_df = calculate_concept_frequencies(time_period='YS')
if frequency_df is not None:
concepts_df = load_dataframe('concepts', CONCEPT_COLUMNS)
if not frequency_df.empty:
print(f"Toplam {len(frequency_df)} frekans kaydı hesaplandı.")
if concepts_df is not None and not concepts_df.empty:
frequency_results_df = pd.merge(frequency_df, concepts_df[['concept_id', 'name']], on='concept_id', how='left')
frequency_results_df = frequency_results_df[['concept_id', 'name', 'time_period_start', 'frequency']]
frequency_results_df.sort_values(by=['name', 'time_period_start'], inplace=True)
print("\n--- Konsept Frekansları (Yıllık) ---"); print(frequency_results_df.to_string())
save_dataframe(frequency_results_df, FREQUENCY_FILENAME)
else: print("\nKonsept isimleri yüklenemedi..."); print(frequency_df.to_string())
else: print("Frekans hesaplandı ancak sonuç boş."); save_dataframe(pd.DataFrame(columns=['concept_id', 'name', 'time_period_start', 'frequency']), FREQUENCY_FILENAME)
else: print("Frekans hesaplaması sırasında bir hata oluştu.")
print(f"--- Frekans Hesaplaması Tamamlandı. Süre: {time.time() - start_time:.2f} saniye ---")
# --- 2. Anlamsal Benzerlik Analizi ---
print("\n--- 2. Anlamsal Benzerlik Hesaplaması ---"); start_time = time.time()
# ... (önceki kodla aynı, sadece print süresi değişebilir) ...
try:
concept_embeddings = calculate_concept_embeddings(force_recalculate=False)
if concept_embeddings:
similarity_df = calculate_similarity_matrix(concept_embeddings, force_recalculate=False)
if similarity_df is not None and not similarity_df.empty:
print(f"Toplam {len(similarity_df)} konsept çifti için benzerlik hesaplandı/yüklendi.")
if concepts_df is None or concepts_df.empty: concepts_df = load_dataframe('concepts', CONCEPT_COLUMNS)
if concepts_df is not None and not concepts_df.empty:
sim_results = pd.merge(similarity_df, concepts_df[['concept_id', 'name']], left_on='concept_id_1', right_on='concept_id', how='left').rename(columns={'name': 'name_1'}).drop(columns=['concept_id'])
sim_results = pd.merge(sim_results, concepts_df[['concept_id', 'name']], left_on='concept_id_2', right_on='concept_id', how='left').rename(columns={'name': 'name_2'}).drop(columns=['concept_id'])
sim_results = sim_results[['concept_id_1', 'name_1', 'concept_id_2', 'name_2', 'similarity']]
sim_results.sort_values(by='similarity', ascending=False, inplace=True)
similarity_results_df = sim_results
print("\n--- En Benzer Konsept Çiftleri (Top 20) ---"); print(similarity_results_df.head(20).to_string(index=False))
save_dataframe(similarity_results_df, SIMILARITY_FILENAME)
else: print("\nKonsept isimleri yüklenemedi..."); print(similarity_df.sort_values(by='similarity', ascending=False).head(20).to_string(index=False))
elif similarity_df is not None: print("Benzerlik hesaplandı ancak sonuç boş."); save_dataframe(pd.DataFrame(columns=['concept_id_1', 'name_1', 'concept_id_2', 'name_2', 'similarity']), SIMILARITY_FILENAME)
except Exception as e: logging.exception("Benzerlik hesaplama sırasında beklenmedik hata oluştu.")
print(f"--- Benzerlik Hesaplaması Tamamlandı. Süre: {time.time() - start_time:.2f} saniye ---")
# --- 3. Ağ Oluşturma ---
print("\n--- 3. Konsept Ağı Oluşturma ---"); start_time = time.time()
# GÜNCELLEME: Ağ nesnesini değişkende tut
concept_network = build_concept_network(similarity_threshold=0.60)
if concept_network is not None:
print("\n--- Oluşturulan Ağ Bilgileri ---")
print(f"Düğüm Sayısı (Konseptler): {concept_network.number_of_nodes()}")
print(f"Kenar Sayısı (İlişkiler/Benzerlikler): {concept_network.number_of_edges()}")
print(f"Ağ başarıyla oluşturuldu ve kaydedildi.")
else:
print("Konsept ağı oluşturulamadı.")
print(f"--- Ağ Oluşturma Tamamlandı. Süre: {time.time() - start_time:.2f} saniye ---")
# --- YENİ: 4. Ağ Analizi (Metrik Hesaplama) ---
print("\n--- 4. Ağ Analizi Metrikleri ---"); start_time = time.time()
if concept_network is not None and concept_network.number_of_nodes() > 0:
network_analysis_df = get_network_analysis_results(concept_network)
if network_analysis_df is not None and not network_analysis_df.empty:
# Sonuçları kaydet
save_network_analysis(network_analysis_df)
print("Ağ metrikleri hesaplandı ve kaydedildi.")
# En yüksek derece merkeziyetine sahip ilk 10 konsepti göster
print("\n--- En Merkezi Konseptler (Degree Centrality Top 10) ---")
print(network_analysis_df.sort_values(by='degree_centrality', ascending=False).head(10).to_string(index=False))
else:
print("Ağ metrikleri hesaplanamadı veya sonuç boş.")
else:
print("Ağ analizi yapmak için geçerli bir ağ bulunamadı.")
print(f"--- Ağ Analizi Tamamlandı. Süre: {time.time() - start_time:.2f} saniye ---")
# --- YENİ SIRA: 5. Ağ Görselleştirme ---
print("\n--- 5. Ağ Görselleştirmesi Oluşturma ---"); start_time = time.time()
visualization_path = None
if concept_network is not None:
# GÜNCELLEME: Analiz sonuçlarını da görselleştirmeye gönderebiliriz (ileride plotting.py'ı güncelleyince)
# Şimdilik sadece grafı gönderiyoruz.
visualization_path = visualize_network(graph=concept_network, output_filename="concept_network_visualization.html")
if visualization_path:
print(f"\nBaşarılı! İnteraktif ağ görselleştirmesi oluşturuldu:\n-> {visualization_path}")
print("\nBu HTML dosyasını web tarayıcınızda açarak ağı inceleyebilirsiniz.")
else: print("Ağ görselleştirmesi oluşturulurken bir sorun oluştu.")
else: print("Ağ oluşturulamadığı için görselleştirme yapılamıyor.")
print(f"--- Ağ Görselleştirme Tamamlandı. Süre: {time.time() - start_time:.2f} saniye ---")
overall_end_time = time.time()
print(f"\n<<< Tüm İşlemler Tamamlandı. Toplam Süre: {overall_end_time - overall_start_time:.2f} saniye >>>")