Spaces:
Sleeping
Sleeping
File size: 5,393 Bytes
0a8cbc3 d9ea3f9 60da408 c9ba3ae 91f1cc5 c9ba3ae 91f1cc5 0a8cbc3 91f1cc5 60da408 0a8cbc3 51dfd28 0a8cbc3 51dfd28 0d6622c 0a8cbc3 60da408 0a8cbc3 f311ea6 0a8cbc3 16f99f2 f311ea6 16f99f2 f311ea6 91f1cc5 16f99f2 f311ea6 16f99f2 91f1cc5 16f99f2 f311ea6 91f1cc5 16f99f2 91f1cc5 16f99f2 0a8cbc3 16f99f2 0a8cbc3 16f99f2 91f1cc5 0a8cbc3 0d6622c 16f99f2 91f1cc5 0a8cbc3 c9ba3ae 0a8cbc3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# app.py
# -*- coding: utf-8 -*-
#
# PROJECT: CognitiveEDA v5.7 - The QuantumLeap Intelligence Platform
#
# DESCRIPTION: Main application entry point. This version adds UI components
# for cluster profiling to the Clustering tab.
#
# SETUP: $ pip install -r requirements.txt
#
# AUTHOR: An MCP & PhD Expert in Data & AI Solutions
# VERSION: 5.7 (Cluster Profiling Edition)
# LAST-UPDATE: 2023-10-31 (Integrated cluster persona analysis)
import warnings
import logging
import gradio as gr
from ui import callbacks
from core.config import settings
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - [%(levelname)s] - (%(filename)s:%(lineno)d) - %(message)s'
)
warnings.filterwarnings('ignore', category=FutureWarning)
def main():
logging.info(f"Starting {settings.APP_TITLE}")
with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue", secondary_hue="indigo"), title=settings.APP_TITLE) as demo:
# 1. DEFINE THE UI LAYOUT
state_analyzer = gr.State()
gr.Markdown(f"<h1>{settings.APP_TITLE}</h1>")
with gr.Row():
upload_button = gr.File(label="1. Upload Data File", file_types=[".csv", ".xlsx"], scale=3)
analyze_button = gr.Button("β¨ Generate Intelligence Report", variant="primary", scale=1)
with gr.Tabs():
# ... (Other tabs remain the same)
with gr.Tab("π€ AI-Powered Strategy Report"):
ai_report_output = gr.Markdown("### Your AI-generated report will appear here...")
with gr.Tab("π Data Profile"):
profile_missing_df, profile_numeric_df, profile_categorical_df = gr.DataFrame(), gr.DataFrame(), gr.DataFrame()
with gr.Tab("π Overview Visuals"):
with gr.Row(): plot_types, plot_missing = gr.Plot(), gr.Plot()
plot_correlation = gr.Plot()
with gr.Tab("π¨ Interactive Explorer"):
with gr.Row():
dd_hist_col = gr.Dropdown(label="Select Column for Histogram", interactive=True)
plot_histogram = gr.Plot()
with gr.Row():
with gr.Column(scale=1):
dd_scatter_x, dd_scatter_y, dd_scatter_color = gr.Dropdown(label="X-Axis", interactive=True), gr.Dropdown(label="Y-Axis", interactive=True), gr.Dropdown(label="Color By", interactive=True)
with gr.Column(scale=2): plot_scatter = gr.Plot()
# --- MODIFIED CLUSTERING TAB ---
with gr.Tab("π§© Clustering (K-Means)", visible=False) as tab_cluster:
with gr.Row():
with gr.Column(scale=1):
num_clusters = gr.Slider(minimum=2, maximum=10, value=5, step=1, label="Number of Clusters (K)", interactive=True)
md_cluster_summary = gr.Markdown("Methodology summary will appear here.")
with gr.Column(scale=2):
plot_cluster = gr.Plot(label="PCA Visualization")
gr.Markdown("---")
gr.Markdown("## Cluster Profile Analysis")
with gr.Row():
with gr.Column(scale=1):
md_cluster_personas = gr.Markdown("Detailed cluster personas will appear here...")
with gr.Column(scale=2):
plot_cluster_profile = gr.Plot(label="Cluster Profile Visualization")
gr.Markdown("---")
gr.Markdown("## Optimal K Analysis")
plot_elbow = gr.Plot(label="The Elbow Method")
tab_timeseries, tab_text = gr.Tab("β Time-Series", visible=False), gr.Tab("π Text", visible=False)
main_outputs = [
ai_report_output, profile_missing_df, profile_numeric_df, profile_categorical_df,
plot_types, plot_missing, plot_correlation,
dd_hist_col, dd_scatter_x, dd_scatter_y, dd_scatter_color,
tab_timeseries, tab_text, tab_cluster
]
# 2. REGISTER EVENT HANDLERS
analysis_complete_event = analyze_button.click(
fn=callbacks.run_initial_analysis,
inputs=[upload_button],
outputs=[state_analyzer]
)
analysis_complete_event.then(
fn=callbacks.generate_reports_and_visuals,
inputs=[state_analyzer],
outputs=main_outputs
)
dd_hist_col.change(fn=callbacks.create_histogram, inputs=[state_analyzer, dd_hist_col], outputs=[plot_histogram])
scatter_inputs = [state_analyzer, dd_scatter_x, dd_scatter_y, dd_scatter_color]
for dropdown in [dd_scatter_x, dd_scatter_y, dd_scatter_color]:
dropdown.change(fn=callbacks.create_scatterplot, inputs=scatter_inputs, outputs=[plot_scatter])
# --- MODIFIED CLUSTERING CALLBACK WIRING ---
num_clusters.change(
fn=callbacks.update_clustering,
inputs=[state_analyzer, num_clusters],
outputs=[
plot_cluster,
plot_elbow,
md_cluster_summary,
md_cluster_personas,
plot_cluster_profile
]
)
demo.launch(debug=False, server_name="0.0.0.0")
if __name__ == "__main__":
main() |