File size: 4,031 Bytes
b7e93d6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8430d1f
b7e93d6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8430d1f
b7e93d6
 
 
 
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
import streamlit as st
import pandas as pd
import google.generativeai as genai
import os
from dotenv import load_dotenv

load_dotenv() # Load environment variables from .env file if it exists

# Function to get Gemini API key (you can set it in Streamlit secrets or environment variables)
def get_gemini_api_key():
    api_key = os.getenv("GOOGLE_API_KEY")  # Try environment variable first
    if not api_key:
        api_key = st.secrets.get("GOOGLE_API_KEY") # Then try Streamlit secrets
    return api_key

# Function to analyze data with Gemini
def analyze_csv_with_gemini(csv_file, analysis_request):
    """
    Analyzes CSV data using the Gemini Pro model.

    Args:
        csv_file: Uploaded CSV file object.
        analysis_request: User's text request for analysis.

    Returns:
        str: Gemini's analysis response.
    """
    try:
        df = pd.read_csv(csv_file)
        csv_string = df.to_csv(index=False) # Convert DataFrame to string for Gemini prompt

        api_key = get_gemini_api_key()
        if not api_key:
            st.error("Gemini API key not found. Please set it as GOOGLE_API_KEY environment variable or in Streamlit secrets.")
            return None

        genai.configure(api_key=api_key)
        model = genai.GenerativeModel('gemini-2.0-flash-thinking-exp-01-21')

        prompt_content = f"""
        You are a data analysis expert. Analyze the following CSV data and provide insights based on the user's request.

        CSV Data:
        ```csv
        {csv_string}
        ```

        Analysis Request: {analysis_request}

        Please provide your analysis in a clear, concise, and informative way.
        Focus on identifying key trends, patterns, and insights from the data that are relevant to the request.
        If possible, suggest potential next steps or questions for further investigation based on your analysis.
        """

        response = model.generate_content(prompt_content)
        return response.text

    except pd.errors.ParserError:
        return "Error: Could not parse the CSV file. Please ensure it is a valid CSV format."
    except Exception as e:
        return f"An error occurred during analysis: {e}"


# Streamlit App
st.title("CSV Data Analyzer with Gemini")

st.write("Upload your CSV file and enter your analysis request below.")

uploaded_file = st.file_uploader("Upload CSV file", type=["csv"])

analysis_request = st.text_area("Enter your analysis request (e.g., 'Summarize key trends', 'Identify correlations', 'Find outliers', 'Give me top 5 insights'):", height=150)

if st.button("Analyze"):
    if uploaded_file is not None and analysis_request:
        st.info("Analyzing data with Gemini... Please wait.")
        gemini_response = analyze_csv_with_gemini(uploaded_file, analysis_request)

        if gemini_response:
            st.subheader("Gemini Analysis Results:")
            st.markdown(gemini_response)
        else:
            st.error("Failed to get analysis from Gemini. Please check API key and try again.")

    elif uploaded_file is None:
        st.warning("Please upload a CSV file.")
    elif not analysis_request:
        st.warning("Please enter your analysis request.")

# Instructions and API Key Setup
st.sidebar.header("Instructions")
st.sidebar.markdown(
    """
    1. **Upload CSV File:** Use the file uploader to upload your CSV file.
    2. **Enter Analysis Request:**  Type your specific data analysis request in the text area. Be clear about what insights you are looking for.
    3. **Click 'Analyze':** Press the 'Analyze' button to start the analysis using Gemini.
    4. **View Results:** The Gemini analysis will be displayed below.

    **API Key Setup:**

    **Important Notes:**

    * This application uses the gemini-2.0-flash-thinking-exp-01-21 model.
    * The performance depends on the complexity of your data and analysis request.
    * For very large CSV files, consider sampling or preprocessing the data before analysis for faster results on CPU-only machines.
    """
)