|
import pandas as pd |
|
import openai |
|
import streamlit as st |
|
import matplotlib.pyplot as plt |
|
|
|
|
|
def get_openai_insights(api_key, prompt): |
|
openai.api_key = api_key |
|
response = openai.Completion.create( |
|
engine="text-davinci-003", |
|
prompt=prompt, |
|
max_tokens=500, |
|
temperature=0.5 |
|
) |
|
return response["choices"][0]["text"].strip() |
|
|
|
|
|
def main(): |
|
st.title("Excel Data Visualization with OpenAI Insights") |
|
|
|
|
|
api_key = st.text_input("Enter your OpenAI API Key", type="password") |
|
if not api_key: |
|
st.warning("Please enter your OpenAI API key to proceed.") |
|
return |
|
|
|
|
|
excel_file = st.file_uploader("Upload the Excel File", type=["xls", "xlsx"]) |
|
|
|
if excel_file: |
|
|
|
excel_data = pd.ExcelFile(excel_file) |
|
st.sidebar.header("Select a Sheet to Visualize") |
|
sheet_name = st.sidebar.selectbox("Sheet Name", excel_data.sheet_names) |
|
|
|
if sheet_name: |
|
data = pd.read_excel(excel_data, sheet_name=sheet_name) |
|
st.subheader(f"Data from Sheet: {sheet_name}") |
|
st.dataframe(data) |
|
|
|
|
|
st.header("Generate AI Insights") |
|
if st.button("Get Insights from OpenAI"): |
|
with st.spinner("Generating insights..."): |
|
try: |
|
data_sample = data.head(5).to_csv(index=False) |
|
prompt = f"Analyze the following data and provide key insights:\n\n{data_sample}" |
|
insights = get_openai_insights(api_key, prompt) |
|
st.success("AI Insights Generated!") |
|
st.text_area("AI Insights:", insights, height=200) |
|
except openai.error.OpenAIError as e: |
|
st.error(f"Error with OpenAI API: {e}") |
|
|
|
|
|
st.header("Visualize Data") |
|
numeric_cols = data.select_dtypes(include="number").columns |
|
if numeric_cols.any(): |
|
col_to_plot = st.selectbox("Select a Column to Plot", numeric_cols) |
|
if col_to_plot: |
|
fig, ax = plt.subplots() |
|
data[col_to_plot].plot(kind="bar", ax=ax, title=f"{col_to_plot} Analysis") |
|
st.pyplot(fig) |
|
|
|
if __name__ == "__main__": |
|
main() |
|
|