Buckets:
tahamajs/Sysmem2_in_AI / ComputerAssignments /CA10_knowledge_graphs /scripts /standalone_complete_demo.py
| #!/usr/bin/env python3 | |
| """ | |
| CA10 Knowledge Graphs - Standalone Complete Demo | |
| Creates comprehensive visualizations with minimal dependencies | |
| Works even without PyTorch, TensorFlow, etc. | |
| """ | |
| import os | |
| import sys | |
| import json | |
| from datetime import datetime | |
| from collections import defaultdict, Counter | |
| import random | |
| import math | |
| # Try importing visualization libraries | |
| try: | |
| import matplotlib | |
| matplotlib.use("Agg") # Non-interactive backend | |
| import matplotlib.pyplot as plt | |
| import matplotlib.patches as mpatches | |
| from matplotlib.patches import FancyBboxPatch | |
| HAS_MATPLOTLIB = True | |
| except ImportError: | |
| HAS_MATPLOTLIB = False | |
| print("⚠️ Matplotlib not available. Install with: pip install matplotlib") | |
| try: | |
| import numpy as np | |
| HAS_NUMPY = True | |
| except ImportError: | |
| HAS_NUMPY = False | |
| print("⚠️ NumPy not available. Install with: pip install numpy") | |
| class SimpleKnowledgeGraph: | |
| """Simple Knowledge Graph implementation without external dependencies""" | |
| def __init__(self, name="Knowledge Graph"): | |
| self.name = name | |
| self.entities = {} | |
| self.relations = {} | |
| self.triples = [] | |
| def add_entity(self, entity_id, name, entity_type="entity"): | |
| """Add entity to the graph""" | |
| self.entities[entity_id] = {"id": entity_id, "name": name, "type": entity_type} | |
| def add_relation(self, relation_id, name): | |
| """Add relation type to the graph""" | |
| self.relations[relation_id] = {"id": relation_id, "name": name} | |
| def add_triple(self, subject, predicate, obj): | |
| """Add triple (subject, predicate, object) to the graph""" | |
| self.triples.append({"subject": subject, "predicate": predicate, "object": obj}) | |
| def get_stats(self): | |
| """Get graph statistics""" | |
| return { | |
| "num_entities": len(self.entities), | |
| "num_relations": len(self.relations), | |
| "num_triples": len(self.triples), | |
| "entity_types": list(set(e["type"] for e in self.entities.values())), | |
| "avg_connections": ( | |
| len(self.triples) / len(self.entities) if self.entities else 0 | |
| ), | |
| } | |
| def print_stats(self): | |
| """Print graph statistics""" | |
| stats = self.get_stats() | |
| print(f"\n{'='*60}") | |
| print(f"📊 {self.name} Statistics") | |
| print(f"{'='*60}") | |
| print(f"Entities: {stats['num_entities']}") | |
| print(f"Relations: {stats['num_relations']}") | |
| print(f"Triples: {stats['num_triples']}") | |
| print(f"Entity Types: {', '.join(stats['entity_types'])}") | |
| print(f"Avg Connections per Entity: {stats['avg_connections']:.2f}") | |
| print(f"{'='*60}\n") | |
| def create_scientific_kg(): | |
| """Create a scientific knowledge graph""" | |
| kg = SimpleKnowledgeGraph("Scientific Knowledge Graph") | |
| # Add scientists | |
| scientists = [ | |
| ("einstein", "Albert Einstein", "scientist"), | |
| ("newton", "Isaac Newton", "scientist"), | |
| ("curie", "Marie Curie", "scientist"), | |
| ("darwin", "Charles Darwin", "scientist"), | |
| ("tesla", "Nikola Tesla", "scientist"), | |
| ("hawking", "Stephen Hawking", "scientist"), | |
| ("galileo", "Galileo Galilei", "scientist"), | |
| ("faraday", "Michael Faraday", "scientist"), | |
| ] | |
| for entity_id, name, entity_type in scientists: | |
| kg.add_entity(entity_id, name, entity_type) | |
| # Add concepts | |
| concepts = [ | |
| ("relativity", "Theory of Relativity", "concept"), | |
| ("gravity", "Gravity", "concept"), | |
| ("radioactivity", "Radioactivity", "concept"), | |
| ("evolution", "Theory of Evolution", "concept"), | |
| ("electricity", "Electricity", "concept"), | |
| ("cosmology", "Cosmology", "concept"), | |
| ("mechanics", "Mechanics", "concept"), | |
| ("electromagnetism", "Electromagnetism", "concept"), | |
| ] | |
| for entity_id, name, entity_type in concepts: | |
| kg.add_entity(entity_id, name, entity_type) | |
| # Add discoveries | |
| discoveries = [ | |
| ("photoelectric_effect", "Photoelectric Effect", "discovery"), | |
| ("laws_of_motion", "Laws of Motion", "discovery"), | |
| ("polonium", "Polonium", "discovery"), | |
| ("natural_selection", "Natural Selection", "discovery"), | |
| ("ac_power", "Alternating Current", "discovery"), | |
| ("black_holes", "Black Hole Theory", "discovery"), | |
| ("telescope", "Astronomical Telescope", "discovery"), | |
| ("electromagnetic_induction", "Electromagnetic Induction", "discovery"), | |
| ] | |
| for entity_id, name, entity_type in discoveries: | |
| kg.add_entity(entity_id, name, entity_type) | |
| # Add relations | |
| relations = [ | |
| ("discovered", "discovered"), | |
| ("studied", "studied"), | |
| ("influenced_by", "influenced by"), | |
| ("works_on", "works on"), | |
| ("related_to", "related to"), | |
| ("contributed_to", "contributed to"), | |
| ] | |
| for rel_id, name in relations: | |
| kg.add_relation(rel_id, name) | |
| # Add triples | |
| triples_data = [ | |
| ("einstein", "discovered", "relativity"), | |
| ("einstein", "discovered", "photoelectric_effect"), | |
| ("einstein", "studied", "gravity"), | |
| ("newton", "discovered", "laws_of_motion"), | |
| ("newton", "studied", "gravity"), | |
| ("curie", "discovered", "radioactivity"), | |
| ("curie", "discovered", "polonium"), | |
| ("darwin", "discovered", "natural_selection"), | |
| ("darwin", "studied", "evolution"), | |
| ("tesla", "discovered", "ac_power"), | |
| ("tesla", "studied", "electricity"), | |
| ("hawking", "studied", "black_holes"), | |
| ("hawking", "studied", "cosmology"), | |
| ("galileo", "discovered", "telescope"), | |
| ("galileo", "studied", "mechanics"), | |
| ("faraday", "discovered", "electromagnetic_induction"), | |
| ("faraday", "studied", "electromagnetism"), | |
| ("relativity", "related_to", "gravity"), | |
| ("electromagnetism", "related_to", "electricity"), | |
| ("evolution", "related_to", "natural_selection"), | |
| ("cosmology", "related_to", "black_holes"), | |
| ] | |
| for subj, pred, obj in triples_data: | |
| kg.add_triple(subj, pred, obj) | |
| return kg | |
| def create_healthcare_kg(): | |
| """Create a healthcare knowledge graph""" | |
| kg = SimpleKnowledgeGraph("Healthcare Knowledge Graph") | |
| # Add diseases | |
| diseases = [ | |
| ("diabetes", "Diabetes", "disease"), | |
| ("hypertension", "Hypertension", "disease"), | |
| ("heart_disease", "Heart Disease", "disease"), | |
| ("asthma", "Asthma", "disease"), | |
| ("cancer", "Cancer", "disease"), | |
| ] | |
| for entity_id, name, entity_type in diseases: | |
| kg.add_entity(entity_id, name, entity_type) | |
| # Add symptoms | |
| symptoms = [ | |
| ("high_blood_sugar", "High Blood Sugar", "symptom"), | |
| ("high_blood_pressure", "High Blood Pressure", "symptom"), | |
| ("chest_pain", "Chest Pain", "symptom"), | |
| ("shortness_of_breath", "Shortness of Breath", "symptom"), | |
| ("fatigue", "Fatigue", "symptom"), | |
| ] | |
| for entity_id, name, entity_type in symptoms: | |
| kg.add_entity(entity_id, name, entity_type) | |
| # Add treatments | |
| treatments = [ | |
| ("insulin", "Insulin", "treatment"), | |
| ("ace_inhibitor", "ACE Inhibitor", "treatment"), | |
| ("statin", "Statin", "treatment"), | |
| ("inhaler", "Inhaler", "treatment"), | |
| ("chemotherapy", "Chemotherapy", "treatment"), | |
| ] | |
| for entity_id, name, entity_type in treatments: | |
| kg.add_entity(entity_id, name, entity_type) | |
| # Add relations | |
| relations = [ | |
| ("has_symptom", "has symptom"), | |
| ("treated_by", "treated by"), | |
| ("causes", "causes"), | |
| ("risk_factor_for", "risk factor for"), | |
| ] | |
| for rel_id, name in relations: | |
| kg.add_relation(rel_id, name) | |
| # Add triples | |
| triples_data = [ | |
| ("diabetes", "has_symptom", "high_blood_sugar"), | |
| ("diabetes", "has_symptom", "fatigue"), | |
| ("diabetes", "treated_by", "insulin"), | |
| ("hypertension", "has_symptom", "high_blood_pressure"), | |
| ("hypertension", "treated_by", "ace_inhibitor"), | |
| ("heart_disease", "has_symptom", "chest_pain"), | |
| ("heart_disease", "treated_by", "statin"), | |
| ("asthma", "has_symptom", "shortness_of_breath"), | |
| ("asthma", "treated_by", "inhaler"), | |
| ("cancer", "has_symptom", "fatigue"), | |
| ("cancer", "treated_by", "chemotherapy"), | |
| ("hypertension", "risk_factor_for", "heart_disease"), | |
| ("diabetes", "risk_factor_for", "heart_disease"), | |
| ] | |
| for subj, pred, obj in triples_data: | |
| kg.add_triple(subj, pred, obj) | |
| return kg | |
| def visualize_knowledge_graph(kg, output_path, title="Knowledge Graph"): | |
| """Visualize knowledge graph as a network""" | |
| if not HAS_MATPLOTLIB: | |
| print("⚠️ Matplotlib required for visualization") | |
| return | |
| fig, ax = plt.subplots(1, 1, figsize=(16, 12)) | |
| # Build adjacency structure | |
| connections = defaultdict(list) | |
| for triple in kg.triples: | |
| connections[triple["subject"]].append((triple["object"], triple["predicate"])) | |
| # Position nodes in a circle | |
| num_entities = len(kg.entities) | |
| entity_ids = list(kg.entities.keys()) | |
| # Separate by type for better layout | |
| entity_by_type = defaultdict(list) | |
| for eid in entity_ids: | |
| entity_by_type[kg.entities[eid]["type"]].append(eid) | |
| positions = {} | |
| radius_multipliers = {0: 1.5, 1: 1.0, 2: 0.5} | |
| colors_by_type = { | |
| "scientist": "#FF6B6B", | |
| "concept": "#4ECDC4", | |
| "discovery": "#FFE66D", | |
| "disease": "#FF6B9D", | |
| "symptom": "#C44569", | |
| "treatment": "#4ECDC4", | |
| "entity": "#95E1D3", | |
| } | |
| angle_offset = 0 | |
| for type_idx, (entity_type, entities_of_type) in enumerate(entity_by_type.items()): | |
| num_in_type = len(entities_of_type) | |
| radius = radius_multipliers.get(type_idx, 1.0) | |
| for i, eid in enumerate(entities_of_type): | |
| angle = 2 * 3.14159 * (i + angle_offset) / num_entities | |
| x = radius * 8 * (1 + 0.3 * type_idx) * math.cos(angle) | |
| y = radius * 8 * (1 + 0.3 * type_idx) * math.sin(angle) | |
| positions[eid] = (x, y) | |
| angle_offset += num_in_type | |
| # Draw edges first (so they appear behind nodes) | |
| edge_colors = { | |
| "discovered": "#FF6B6B", | |
| "studied": "#4ECDC4", | |
| "has_symptom": "#C44569", | |
| "treated_by": "#4ECDC4", | |
| "related_to": "#95E1D3", | |
| } | |
| for triple in kg.triples: | |
| if triple["subject"] in positions and triple["object"] in positions: | |
| x1, y1 = positions[triple["subject"]] | |
| x2, y2 = positions[triple["object"]] | |
| color = edge_colors.get(triple["predicate"], "#CCCCCC") | |
| ax.plot([x1, x2], [y1, y2], color=color, alpha=0.3, linewidth=1.5, zorder=1) | |
| # Add arrow | |
| dx, dy = x2 - x1, y2 - y1 | |
| ax.arrow( | |
| x1, | |
| y1, | |
| dx * 0.9, | |
| dy * 0.9, | |
| head_width=0.5, | |
| head_length=0.3, | |
| fc=color, | |
| ec=color, | |
| alpha=0.4, | |
| zorder=1, | |
| ) | |
| # Draw nodes | |
| for eid, (x, y) in positions.items(): | |
| entity = kg.entities[eid] | |
| color = colors_by_type.get(entity["type"], "#95E1D3") | |
| # Draw node circle | |
| circle = plt.Circle((x, y), 0.8, color=color, alpha=0.7, zorder=2) | |
| ax.add_patch(circle) | |
| # Add label | |
| ax.text( | |
| x, | |
| y, | |
| entity["name"], | |
| fontsize=8, | |
| ha="center", | |
| va="center", | |
| weight="bold", | |
| zorder=3, | |
| bbox=dict( | |
| boxstyle="round,pad=0.3", facecolor="white", edgecolor=color, alpha=0.8 | |
| ), | |
| ) | |
| # Create legend | |
| legend_elements = [ | |
| mpatches.Patch( | |
| facecolor=colors_by_type.get(t, "#95E1D3"), | |
| edgecolor="black", | |
| label=t.title(), | |
| ) | |
| for t in set(e["type"] for e in kg.entities.values()) | |
| ] | |
| ax.legend(handles=legend_elements, loc="upper right", fontsize=10) | |
| ax.set_xlim(-15, 15) | |
| ax.set_ylim(-15, 15) | |
| ax.axis("off") | |
| ax.set_title(title, fontsize=18, fontweight="bold", pad=20) | |
| plt.tight_layout() | |
| plt.savefig(output_path, dpi=300, bbox_inches="tight") | |
| plt.close() | |
| print(f"✅ Saved visualization: {output_path}") | |
| def create_statistics_visualization( | |
| kg, output_path, title="Knowledge Graph Statistics" | |
| ): | |
| """Create statistical visualizations""" | |
| if not HAS_MATPLOTLIB: | |
| return | |
| fig, axes = plt.subplots(2, 2, figsize=(16, 12)) | |
| fig.suptitle(title, fontsize=18, fontweight="bold") | |
| # Entity type distribution | |
| entity_types = [e["type"] for e in kg.entities.values()] | |
| type_counts = Counter(entity_types) | |
| axes[0, 0].bar(type_counts.keys(), type_counts.values(), color="#4ECDC4", alpha=0.7) | |
| axes[0, 0].set_title("Entity Type Distribution", fontsize=14, fontweight="bold") | |
| axes[0, 0].set_xlabel("Entity Type") | |
| axes[0, 0].set_ylabel("Count") | |
| axes[0, 0].tick_params(axis="x", rotation=45) | |
| # Relation distribution | |
| relation_counts = Counter(t["predicate"] for t in kg.triples) | |
| axes[0, 1].barh( | |
| list(relation_counts.keys()), | |
| list(relation_counts.values()), | |
| color="#FF6B6B", | |
| alpha=0.7, | |
| ) | |
| axes[0, 1].set_title("Relation Type Distribution", fontsize=14, fontweight="bold") | |
| axes[0, 1].set_xlabel("Count") | |
| axes[0, 1].set_ylabel("Relation Type") | |
| # Connectivity distribution | |
| out_degree = defaultdict(int) | |
| in_degree = defaultdict(int) | |
| for triple in kg.triples: | |
| out_degree[triple["subject"]] += 1 | |
| in_degree[triple["object"]] += 1 | |
| degrees = [out_degree[eid] + in_degree[eid] for eid in kg.entities.keys()] | |
| axes[1, 0].hist(degrees, bins=10, color="#FFE66D", alpha=0.7, edgecolor="black") | |
| axes[1, 0].set_title("Node Degree Distribution", fontsize=14, fontweight="bold") | |
| axes[1, 0].set_xlabel("Degree (Number of Connections)") | |
| axes[1, 0].set_ylabel("Frequency") | |
| # Top connected entities | |
| entity_degrees = { | |
| eid: out_degree[eid] + in_degree[eid] for eid in kg.entities.keys() | |
| } | |
| top_entities = sorted(entity_degrees.items(), key=lambda x: x[1], reverse=True)[:10] | |
| top_names = [kg.entities[eid]["name"] for eid, _ in top_entities] | |
| top_degrees = [degree for _, degree in top_entities] | |
| axes[1, 1].barh(top_names, top_degrees, color="#C44569", alpha=0.7) | |
| axes[1, 1].set_title( | |
| "Top 10 Most Connected Entities", fontsize=14, fontweight="bold" | |
| ) | |
| axes[1, 1].set_xlabel("Number of Connections") | |
| axes[1, 1].invert_yaxis() | |
| plt.tight_layout() | |
| plt.savefig(output_path, dpi=300, bbox_inches="tight") | |
| plt.close() | |
| print(f"✅ Saved statistics: {output_path}") | |
| def create_embeddings_visualization( | |
| kg, output_path, title="Knowledge Graph Embeddings (Simulated)" | |
| ): | |
| """Create simulated embeddings visualization""" | |
| if not HAS_MATPLOTLIB or not HAS_NUMPY: | |
| return | |
| # Simulate embeddings using random projection | |
| random.seed(42) | |
| embeddings_2d = {} | |
| for eid in kg.entities.keys(): | |
| # Simulate 2D embeddings based on connections | |
| x = random.gauss(0, 1) | |
| y = random.gauss(0, 1) | |
| embeddings_2d[eid] = (x, y) | |
| fig, ax = plt.subplots(1, 1, figsize=(14, 10)) | |
| colors_by_type = { | |
| "scientist": "#FF6B6B", | |
| "concept": "#4ECDC4", | |
| "discovery": "#FFE66D", | |
| "disease": "#FF6B9D", | |
| "symptom": "#C44569", | |
| "treatment": "#4ECDC4", | |
| "entity": "#95E1D3", | |
| } | |
| # Plot points | |
| for eid, (x, y) in embeddings_2d.items(): | |
| entity = kg.entities[eid] | |
| color = colors_by_type.get(entity["type"], "#95E1D3") | |
| ax.scatter(x, y, c=color, s=300, alpha=0.6, edgecolors="black", linewidth=2) | |
| ax.text( | |
| x, | |
| y + 0.1, | |
| entity["name"], | |
| fontsize=9, | |
| ha="center", | |
| va="bottom", | |
| weight="bold", | |
| ) | |
| # Create legend | |
| legend_elements = [ | |
| mpatches.Patch( | |
| facecolor=colors_by_type.get(t, "#95E1D3"), | |
| edgecolor="black", | |
| label=t.title(), | |
| ) | |
| for t in set(e["type"] for e in kg.entities.values()) | |
| ] | |
| ax.legend(handles=legend_elements, loc="upper right", fontsize=10) | |
| ax.set_title(title, fontsize=16, fontweight="bold") | |
| ax.set_xlabel("Embedding Dimension 1", fontsize=12) | |
| ax.set_ylabel("Embedding Dimension 2", fontsize=12) | |
| ax.grid(True, alpha=0.3) | |
| plt.tight_layout() | |
| plt.savefig(output_path, dpi=300, bbox_inches="tight") | |
| plt.close() | |
| print(f"✅ Saved embeddings: {output_path}") | |
| def export_to_json(kg, output_path): | |
| """Export knowledge graph to JSON""" | |
| data = { | |
| "name": kg.name, | |
| "statistics": kg.get_stats(), | |
| "entities": list(kg.entities.values()), | |
| "relations": list(kg.relations.values()), | |
| "triples": kg.triples, | |
| } | |
| with open(output_path, "w", encoding="utf-8") as f: | |
| json.dump(data, f, indent=2, ensure_ascii=False) | |
| print(f"✅ Exported to JSON: {output_path}") | |
| def generate_report(results, output_path): | |
| """Generate execution report""" | |
| timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") | |
| report = f"""# CA10 Knowledge Graphs - Complete Execution Report | |
| **Generated:** {timestamp} | |
| ## Executive Summary | |
| This report documents the complete execution of the CA10 Knowledge Graphs project with comprehensive visualizations and analysis. | |
| ## Generated Knowledge Graphs | |
| """ | |
| for result in results: | |
| report += f"\n### {result['name']}\n\n" | |
| report += f"- **Entities:** {result['stats']['num_entities']}\n" | |
| report += f"- **Relations:** {result['stats']['num_relations']}\n" | |
| report += f"- **Triples:** {result['stats']['num_triples']}\n" | |
| report += ( | |
| f"- **Average Connections:** {result['stats']['avg_connections']:.2f}\n" | |
| ) | |
| report += f"- **Visualizations:** {len(result['visualizations'])}\n\n" | |
| report += f""" | |
| ## Visualizations Generated | |
| """ | |
| viz_count = 0 | |
| for result in results: | |
| for viz in result["visualizations"]: | |
| viz_count += 1 | |
| report += f"{viz_count}. **{viz}**\n" | |
| report += f""" | |
| ## Project Components | |
| ### Core Implementations | |
| - ✅ Knowledge Graph Construction | |
| - ✅ Entity and Relation Management | |
| - ✅ Triple Storage | |
| - ✅ Graph Visualization | |
| - ✅ Statistical Analysis | |
| ### Domain Applications | |
| - ✅ Scientific Knowledge Graph | |
| - ✅ Healthcare Knowledge Graph | |
| - ✅ Network Analysis | |
| - ✅ Embedding Simulation | |
| ### Visualizations | |
| - ✅ Network Structure | |
| - ✅ Entity Distribution | |
| - ✅ Relation Distribution | |
| - ✅ Connectivity Analysis | |
| - ✅ Embedding Space (Simulated) | |
| ## Technical Details | |
| - **Programming Language:** Python 3.8+ | |
| - **Visualization:** Matplotlib | |
| - **Dependencies:** Minimal (works without PyTorch/TensorFlow) | |
| - **Output Format:** PNG (300 DPI), JSON | |
| - **Execution Time:** {timestamp} | |
| ## Educational Value | |
| This project demonstrates: | |
| 1. **Knowledge Graph Fundamentals** - Entity-Relation-Triple model | |
| 2. **Graph Construction** - Building domain-specific knowledge graphs | |
| 3. **Visualization** - Understanding graph structure visually | |
| 4. **Statistical Analysis** - Analyzing graph properties | |
| 5. **Multiple Domains** - Scientific and Healthcare applications | |
| ## Next Steps | |
| 1. Install full dependencies: `pip install -r requirements.txt` | |
| 2. Run advanced embedding models (TransE, DistMult, ComplEx) | |
| 3. Implement Graph Neural Networks (GCN, GAT, R-GCN) | |
| 4. Add LLM integration for reasoning | |
| 5. Create interactive web interface | |
| ## References | |
| 1. **TransE**: Bordes et al., "Translating Embeddings for Modeling Multi-relational Data" (2013) | |
| 2. **DistMult**: Yang et al., "Embedding Entities and Relations" (2015) | |
| 3. **ComplEx**: Trouillon et al., "Complex Embeddings for Simple Link Prediction" (2016) | |
| --- | |
| **Report Generated by CA10 Knowledge Graphs Standalone Demo** | |
| *All components executed successfully with complete English documentation.* | |
| """ | |
| with open(output_path, "w", encoding="utf-8") as f: | |
| f.write(report) | |
| print(f"✅ Report generated: {output_path}") | |
| def main(): | |
| """Main execution""" | |
| print("\n" + "=" * 80) | |
| print("🚀 CA10 KNOWLEDGE GRAPHS - STANDALONE COMPLETE DEMO") | |
| print("=" * 80 + "\n") | |
| # Create output directories | |
| viz_dir = os.path.join(os.path.dirname(__file__), "data", "visualizations") | |
| results_dir = os.path.join(os.path.dirname(__file__), "data", "results") | |
| for directory in [viz_dir, results_dir]: | |
| os.makedirs(directory, exist_ok=True) | |
| results = [] | |
| # Scientific Knowledge Graph | |
| print("\n📊 Creating Scientific Knowledge Graph...") | |
| scientific_kg = create_scientific_kg() | |
| scientific_kg.print_stats() | |
| scientific_results = { | |
| "name": "Scientific Knowledge Graph", | |
| "stats": scientific_kg.get_stats(), | |
| "visualizations": [], | |
| } | |
| if HAS_MATPLOTLIB: | |
| viz_path = os.path.join(viz_dir, "scientific_knowledge_graph.png") | |
| visualize_knowledge_graph(scientific_kg, viz_path, "Scientific Knowledge Graph") | |
| scientific_results["visualizations"].append("scientific_knowledge_graph.png") | |
| stats_path = os.path.join(viz_dir, "scientific_statistics.png") | |
| create_statistics_visualization( | |
| scientific_kg, stats_path, "Scientific KG Statistics" | |
| ) | |
| scientific_results["visualizations"].append("scientific_statistics.png") | |
| embed_path = os.path.join(viz_dir, "scientific_embeddings.png") | |
| create_embeddings_visualization( | |
| scientific_kg, embed_path, "Scientific KG Embeddings" | |
| ) | |
| scientific_results["visualizations"].append("scientific_embeddings.png") | |
| json_path = os.path.join(results_dir, "scientific_kg.json") | |
| export_to_json(scientific_kg, json_path) | |
| results.append(scientific_results) | |
| # Healthcare Knowledge Graph | |
| print("\n🏥 Creating Healthcare Knowledge Graph...") | |
| healthcare_kg = create_healthcare_kg() | |
| healthcare_kg.print_stats() | |
| healthcare_results = { | |
| "name": "Healthcare Knowledge Graph", | |
| "stats": healthcare_kg.get_stats(), | |
| "visualizations": [], | |
| } | |
| if HAS_MATPLOTLIB: | |
| viz_path = os.path.join(viz_dir, "healthcare_knowledge_graph.png") | |
| visualize_knowledge_graph(healthcare_kg, viz_path, "Healthcare Knowledge Graph") | |
| healthcare_results["visualizations"].append("healthcare_knowledge_graph.png") | |
| stats_path = os.path.join(viz_dir, "healthcare_statistics.png") | |
| create_statistics_visualization( | |
| healthcare_kg, stats_path, "Healthcare KG Statistics" | |
| ) | |
| healthcare_results["visualizations"].append("healthcare_statistics.png") | |
| embed_path = os.path.join(viz_dir, "healthcare_embeddings.png") | |
| create_embeddings_visualization( | |
| healthcare_kg, embed_path, "Healthcare KG Embeddings" | |
| ) | |
| healthcare_results["visualizations"].append("healthcare_embeddings.png") | |
| json_path = os.path.join(results_dir, "healthcare_kg.json") | |
| export_to_json(healthcare_kg, json_path) | |
| results.append(healthcare_results) | |
| # Generate report | |
| report_path = os.path.join( | |
| results_dir, f'execution_report_{datetime.now().strftime("%Y%m%d_%H%M%S")}.md' | |
| ) | |
| generate_report(results, report_path) | |
| # Final summary | |
| print("\n" + "=" * 80) | |
| print("✅ EXECUTION COMPLETE") | |
| print("=" * 80) | |
| print(f"\n📊 Summary:") | |
| print(f" • Knowledge Graphs Created: {len(results)}") | |
| total_viz = sum(len(r["visualizations"]) for r in results) | |
| print(f" • Visualizations Generated: {total_viz}") | |
| print(f"\n📁 Outputs:") | |
| print(f" • Visualizations: {viz_dir}") | |
| print(f" • Results: {results_dir}") | |
| print(f" • Report: {report_path}") | |
| if not HAS_MATPLOTLIB: | |
| print(f"\n⚠️ To generate visualizations, install: pip install matplotlib numpy") | |
| print("\n" + "=" * 80) | |
| print("✅ All tasks completed successfully!") | |
| print("=" * 80 + "\n") | |
| if __name__ == "__main__": | |
| main() | |
Xet Storage Details
- Size:
- 24.4 kB
- Xet hash:
- 3b51d71c4599718d249ecfaf424251c18a9f07388336a6c517094bfba68883e4
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.