import gradio as gr import pandas as pd import plotly.express as px def update_columns(csv_file): if csv_file is None: return gr.Dropdown(choices=[]), gr.Dropdown(choices=[]) df = pd.read_csv(csv_file.name) numeric_cols = df.select_dtypes(include=['number']).columns.tolist() return gr.Dropdown(choices=numeric_cols), gr.Dropdown(choices=numeric_cols) def create_scatter_plot(csv_file, x_col, y_col): if csv_file is None or x_col is None or y_col is None: return None, None df = pd.read_csv(csv_file.name) # Gradio ScatterPlot için uygun formatta veri hazırla return ( gr.ScatterPlot( value=df, x=x_col, y=y_col, tooltip=df.columns.tolist(), title="Interactive Scatter Plot", color_legend_title="Values", interactive=True, brush_radius=5 ), df ) def get_selected_points(evt: gr.SelectData, df): if evt is None or df is None: return pd.DataFrame() # Seçilen indeksleri kullanarak verileri filtrele selected_indices = [i["index"] for i in evt.selected] return df.iloc[selected_indices] with gr.Blocks() as app: gr.Markdown("## 🔷 Polygon ile Veri Seçimi") with gr.Row(): csv_upload = gr.UploadButton(label="CSV Yükle", file_types=[".csv"]) x_dropdown = gr.Dropdown(label="X Ekseni") y_dropdown = gr.Dropdown(label="Y Ekseni") with gr.Row(): scatter_plot = gr.ScatterPlot(interactive=True, brush_radius=5) selected_table = gr.DataFrame(label="Seçilen Veriler") df_state = gr.State() csv_upload.upload( fn=update_columns, inputs=csv_upload, outputs=[x_dropdown, y_dropdown] ) x_dropdown.change( fn=create_scatter_plot, inputs=[csv_upload, x_dropdown, y_dropdown], outputs=[scatter_plot, df_state] ) y_dropdown.change( fn=create_scatter_plot, inputs=[csv_upload, x_dropdown, y_dropdown], outputs=[scatter_plot, df_state] ) scatter_plot.select( fn=get_selected_points, inputs=df_state, outputs=selected_table ) if __name__ == "__main__": app.launch()