Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -56,6 +56,9 @@ if uploaded_file:
|
|
| 56 |
# Clean whitespace and ensure consistent case in 'Customer Name' and 'Product Name'
|
| 57 |
df['Customer Name'] = df['Customer Name'].str.strip().str.lower()
|
| 58 |
df['Product Name'] = df['Product Name'].str.strip().str.lower()
|
|
|
|
|
|
|
|
|
|
| 59 |
|
| 60 |
# Sidebar Filters
|
| 61 |
st.sidebar.header("Filter Options")
|
|
@@ -63,6 +66,9 @@ if uploaded_file:
|
|
| 63 |
# Text Input for Customer and Product
|
| 64 |
customer_query = st.sidebar.text_input('Enter Customer Name (partial or full):').strip().lower()
|
| 65 |
product_query = st.sidebar.text_input('Enter Product Name (partial or full):').strip().lower()
|
|
|
|
|
|
|
|
|
|
| 66 |
|
| 67 |
# Date Range Selection
|
| 68 |
start_date = st.sidebar.date_input('Start Date:', df['Date'].min())
|
|
@@ -82,19 +88,24 @@ if uploaded_file:
|
|
| 82 |
if product_query:
|
| 83 |
filtered_df = filtered_df[filtered_df['Product Name'].str.contains(product_query, case=False, na=False)]
|
| 84 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 85 |
# Display Filtered Data
|
| 86 |
st.write(f"Filtered Data: {len(filtered_df)} records found.")
|
| 87 |
st.dataframe(filtered_df)
|
| 88 |
|
| 89 |
-
#
|
| 90 |
if not filtered_df.empty:
|
| 91 |
-
st.subheader("Key Metrics")
|
| 92 |
-
high_margin_product = filtered_df.loc[filtered_df['Margin Amount'].idxmax(), 'Product Name']
|
| 93 |
-
highest_sales_month = filtered_df.loc[filtered_df['Net Sales Value'].idxmax(), 'Month']
|
| 94 |
-
st.metric("High Margin Product", high_margin_product)
|
| 95 |
-
st.metric("Highest Sales Month", highest_sales_month)
|
| 96 |
-
|
| 97 |
-
# Visualizations
|
| 98 |
st.subheader("Sales Trend Over Time")
|
| 99 |
trend = filtered_df.groupby('Date')['Net Sales Value'].sum().reset_index()
|
| 100 |
fig_trend = px.line(trend, x='Date', y='Net Sales Value', title='Sales Over Time')
|
|
|
|
| 56 |
# Clean whitespace and ensure consistent case in 'Customer Name' and 'Product Name'
|
| 57 |
df['Customer Name'] = df['Customer Name'].str.strip().str.lower()
|
| 58 |
df['Product Name'] = df['Product Name'].str.strip().str.lower()
|
| 59 |
+
df['City'] = df['City'].str.strip().str.lower()
|
| 60 |
+
df['State'] = df['State'].str.strip().str.lower()
|
| 61 |
+
df['Country'] = df['Country'].str.strip().str.lower()
|
| 62 |
|
| 63 |
# Sidebar Filters
|
| 64 |
st.sidebar.header("Filter Options")
|
|
|
|
| 66 |
# Text Input for Customer and Product
|
| 67 |
customer_query = st.sidebar.text_input('Enter Customer Name (partial or full):').strip().lower()
|
| 68 |
product_query = st.sidebar.text_input('Enter Product Name (partial or full):').strip().lower()
|
| 69 |
+
city_query = st.sidebar.text_input('Enter City (partial or full):').strip().lower()
|
| 70 |
+
state_query = st.sidebar.text_input('Enter State (partial or full):').strip().lower()
|
| 71 |
+
country_query = st.sidebar.text_input('Enter Country (partial or full):').strip().lower()
|
| 72 |
|
| 73 |
# Date Range Selection
|
| 74 |
start_date = st.sidebar.date_input('Start Date:', df['Date'].min())
|
|
|
|
| 88 |
if product_query:
|
| 89 |
filtered_df = filtered_df[filtered_df['Product Name'].str.contains(product_query, case=False, na=False)]
|
| 90 |
|
| 91 |
+
# Filter Data by City
|
| 92 |
+
if city_query:
|
| 93 |
+
filtered_df = filtered_df[filtered_df['City'].str.contains(city_query, case=False, na=False)]
|
| 94 |
+
|
| 95 |
+
# Filter Data by State
|
| 96 |
+
if state_query:
|
| 97 |
+
filtered_df = filtered_df[filtered_df['State'].str.contains(state_query, case=False, na=False)]
|
| 98 |
+
|
| 99 |
+
# Filter Data by Country
|
| 100 |
+
if country_query:
|
| 101 |
+
filtered_df = filtered_df[filtered_df['Country'].str.contains(country_query, case=False, na=False)]
|
| 102 |
+
|
| 103 |
# Display Filtered Data
|
| 104 |
st.write(f"Filtered Data: {len(filtered_df)} records found.")
|
| 105 |
st.dataframe(filtered_df)
|
| 106 |
|
| 107 |
+
# Visualizations
|
| 108 |
if not filtered_df.empty:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 109 |
st.subheader("Sales Trend Over Time")
|
| 110 |
trend = filtered_df.groupby('Date')['Net Sales Value'].sum().reset_index()
|
| 111 |
fig_trend = px.line(trend, x='Date', y='Net Sales Value', title='Sales Over Time')
|