abdfajar707 commited on
Commit
8ec17cc
Β·
verified Β·
1 Parent(s): 69ecbad

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +64 -50
app.py CHANGED
@@ -1,14 +1,17 @@
1
- import os
2
  import streamlit as st
 
 
3
  from pandasai import SmartDataframe
4
- from pandasai.callbacks import BaseCallback
5
  from pandasai.llm import OpenAI
 
6
  from pandasai.responses.response_parser import ResponseParser
7
- from data import load_data
8
 
9
- # Fungsi untuk mendapatkan daftar folder dalam direktori
10
- def list_folders(directory):
11
- return [name for name in os.listdir(directory) if os.path.isdir(os.path.join(directory, name))]
 
 
12
 
13
  class StreamlitCallback(BaseCallback):
14
  def __init__(self, container) -> None:
@@ -34,48 +37,59 @@ class StreamlitResponse(ResponseParser):
34
  st.write(result["value"])
35
  return
36
 
37
- # Tampilkan judul aplikasi
38
- st.write("# Chat with Tabular Dataframe πŸ¦™")
39
-
40
- try:
41
- from typing_extensions import TypedDict # βœ… Correct for Python <3.12
42
- except ImportError:
43
- from typing import TypedDict # βœ… Works for Python 3.12+
44
-
45
-
46
- # Menentukan direktori asal
47
- root_dir = "./data"
48
-
49
- # Mendapatkan daftar folder
50
- folders = list_folders(root_dir)
51
-
52
- # Menampilkan kotak pemilihan folder
53
- selected_folder = st.selectbox("Pilih folder data", folders)
54
-
55
- # Memuat data berdasarkan folder yang dipilih
56
- if selected_folder:
57
- df = load_data(os.path.join(root_dir, selected_folder))
58
-
59
- # Menampilkan preview data
60
- with st.expander("πŸ”Ž Dataframe Preview"):
61
- st.write(df.tail(3))
62
-
63
- # Membuat input untuk query
64
- query = st.text_area("πŸ—£οΈ Chat with Dataframe")
65
- container = st.container()
66
-
67
- # Eksekusi query jika ada input
68
- if query:
69
- llm = OpenAI(api_token=os.environ["BIT_OPENAI_API_KEY"])
70
- query_engine = SmartDataframe(
71
- df,
72
- config={
73
  "llm": llm,
74
- "response_parser": StreamlitResponse,
75
- # "callback": StreamlitCallback(container),
76
- },
77
- )
78
-
79
- answer = query_engine.chat(query)
80
- else:
81
- st.write("Silakan pilih folder untuk memuat data.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import streamlit as st
2
+ import pandas as pd
3
+ import matplotlib.pyplot as plt
4
  from pandasai import SmartDataframe
 
5
  from pandasai.llm import OpenAI
6
+ from pandasai.callbacks import BaseCallback
7
  from pandasai.responses.response_parser import ResponseParser
8
+ import os
9
 
10
+ # Set OpenAI API Token
11
+ OPENAI_API_TOKEN = os.getenv("BIT_OPENAI_API_KEY", "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")
12
+
13
+ # Load OpenAI Mini model
14
+ llm = OpenAI(api_token=OPENAI_API_TOKEN, model_name="gpt-4o-mini")
15
 
16
  class StreamlitCallback(BaseCallback):
17
  def __init__(self, container) -> None:
 
37
  st.write(result["value"])
38
  return
39
 
40
+ def process_file(file):
41
+ file_extension = file.name.split(".")[-1].lower()
42
+ try:
43
+ if file_extension == "csv":
44
+ # Detect if semicolon or comma is used as a separator
45
+ first_line = file.readline().decode("utf-8")
46
+ file.seek(0) # Reset file pointer
47
+ delimiter = ";" if ";" in first_line else ","
48
+ df = pd.read_csv(file, delimiter=delimiter)
49
+ elif file_extension in ["xls", "xlsx"]:
50
+ import openpyxl # Ensures openpyxl is available
51
+ df = pd.read_excel(file, engine="openpyxl")
52
+ else:
53
+ st.error("Unsupported file format. Please upload a CSV or Excel file.")
54
+ return None, None
55
+ except ImportError as e:
56
+ st.error(f"Error: {e}. Please install 'openpyxl' for Excel support.")
57
+ return None, None
58
+
59
+ sdf = SmartDataframe(df, config={
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  "llm": llm,
61
+ "save_logs": True,
62
+ "verbose": False,
63
+ "response_parser": StreamlitResponse
64
+ })
65
+ return df, sdf
66
+
67
+ def main():
68
+ st.title("AI-Powered Dataframe Analysis with OpenAI")
69
+ uploaded_file = st.file_uploader("Upload CSV or Excel File", type=["csv", "xls", "xlsx"])
70
+
71
+ if uploaded_file:
72
+ df, sdf = process_file(uploaded_file)
73
+ if df is not None:
74
+ st.subheader("πŸ”Ž Data Preview")
75
+
76
+ with st.expander("View Data Summary"):
77
+ st.write("### Data Overview")
78
+ st.dataframe(df.describe(include='all'))
79
+
80
+ st.write("### First 10 Rows of Data")
81
+ st.dataframe(df.head(10))
82
+
83
+ st.write("### Column Details")
84
+ for col in df.columns:
85
+ st.write(f"**{col}**")
86
+ st.dataframe(df[[col]].head(10))
87
+
88
+ query = st.text_area("Enter Your Query")
89
+
90
+ if query:
91
+ container = st.container()
92
+ answer = sdf.chat(query)
93
+
94
+ if __name__ == "__main__":
95
+ main()