File size: 2,833 Bytes
4fc79a4 ff768e2 4fc79a4 29f87f1 4fc79a4 29f87f1 4fc79a4 29f87f1 4fc79a4 29f87f1 4fc79a4 29f87f1 1e2b302 29f87f1 1e2b302 29f87f1 1e2b302 29f87f1 7d1e58a 29f87f1 4fc79a4 1e2b302 29f87f1 4fc79a4 1e2b302 4fc79a4 e6ca829 29f87f1 ccd7bab e6ca829 29f87f1 e6ca829 29f87f1 e6ca829 29f87f1 e6ca829 29f87f1 1e2b302 e6ca829 29f87f1 4fc79a4 29f87f1 4fc79a4 29f87f1 e6ca829 4fc79a4 29f87f1 4fc79a4 29f87f1 4fc79a4 |
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 |
import gradio as gr
import pandas as pd
import matplotlib.pyplot as plt
import io
import google.generativeai as genai
from PIL import Image
def process_file(api_key, file, instructions):
# Configure Gemini API
genai.configure(api_key=api_key)
model = genai.GenerativeModel('gemini-2.5-pro-preview-03-25')
# Read uploaded file
if file.name.endswith('.csv'):
df = pd.read_csv(file.name)
else:
df = pd.read_excel(file.name)
# Generate analysis prompt
data_description = df.describe().to_string()
columns_info = "\n".join([f"{col}: {df[col].dtype}" for col in df.columns])
prompt = f"""
Given this dataset:
Columns and types:
{columns_info}
Data summary:
{data_description}
User instructions: {instructions if instructions else 'No specific instructions provided.'}
Generate Python code for 3 different matplotlib visualizations. Only provide executable code without explanations.
Format as:
# Visualization 1
[code]
# Visualization 2
[code]
# Visualization 3
[code]
"""
# Get Gemini response
response = model.generate_content(prompt)
code = response.text.strip()
# Process visualizations
visualizations = []
for i, viz_code in enumerate(code.split("# Visualization")[1:4], 1):
plt.figure(figsize=(10, 6))
try:
# Clean and execute generated code
cleaned_code = '\n'.join(line.strip() for line in viz_code.split('\n') if line.strip())
exec(cleaned_code, {'df': df, 'plt': plt})
plt.title(f"Visualization {i}")
# Convert plot to Gradio-compatible format
buf = io.BytesIO()
plt.savefig(buf, format='png', bbox_inches='tight')
plt.close()
buf.seek(0)
visualizations.append(Image.open(buf))
except Exception as e:
print(f"Visualization {i} error: {str(e)}")
visualizations.append(None)
# Ensure 3 outputs for Gradio
return visualizations + [None]*(3-len(visualizations))
# Gradio interface
with gr.Blocks() as demo:
gr.Markdown("""# AI-Powered Data Visualizer
Upload your data file and get automatic visualizations powered by Gemini""")
with gr.Row():
api_key = gr.Textbox(label="Gemini API Key", type="password")
instructions = gr.Textbox(label="Custom Instructions (optional)")
file = gr.File(label="Dataset (CSV/Excel)", file_types=[".csv", ".xlsx"])
submit = gr.Button("Generate Insights", variant="primary")
with gr.Row():
outputs = [gr.Image(label=f"Visualization {i+1}") for i in range(3)]
submit.click(
process_file,
inputs=[api_key, file, instructions],
outputs=outputs
)
demo.launch() |