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()