File size: 1,911 Bytes
fd0a8c2 |
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 |
import gradio as gr
import pandas as pd
import matplotlib.pyplot as plt
import io
import google.generativeai as genai
# Function to process the file and generate visualizations
def process_file(api_key, file, instructions):
# Set up Gemini API
genai.configure(api_key=api_key)
model = genai.GenerativeModel('gemini-2.5-pro-preview-03-25')
# Read the file
if file.name.endswith('.csv'):
df = pd.read_csv(file.name)
else:
df = pd.read_excel(file.name)
# Analyze data and get visualization suggestions from Gemini
data_description = df.describe().to_string()
prompt = f"Given this data: {data_description}\n"
if instructions:
prompt += f"And these instructions: {instructions}\n"
prompt += "Suggest 3 ways to visualize this data."
response = model.generate_content(prompt)
suggestions = response.text.split('\n')
# Generate visualizations (placeholder - you'll need to implement actual visualization logic)
visualizations = []
for i, suggestion in enumerate(suggestions[:3]):
plt.figure()
plt.title(f"Visualization {i+1}")
plt.text(0.5, 0.5, suggestion, ha='center', va='center')
buf = io.BytesIO()
plt.savefig(buf, format='png')
buf.seek(0)
visualizations.append(buf)
return visualizations
# Gradio interface
with gr.Blocks() as demo:
gr.Markdown("Data Visualization with Gemini")
api_key = gr.Textbox(label="Enter Gemini API Key")
file = gr.File(label="Upload Excel or CSV file")
instructions = gr.Textbox(label="Optional visualization instructions")
submit = gr.Button("Generate Visualizations")
progress = gr.Progress()
outputs = [gr.Image(label=f"Visualization {i+1}") for i in range(3)]
submit.click(
fn=process_file,
inputs=[api_key, file, instructions],
outputs=outputs
)
demo.launch() |