My app is an app that generates a report based on some inoput
To upload files, please first save the app
import streamlit as st
import pandas as pd
import numpy as np
st.title("Report Generator")
# Sidebar inputs
st.sidebar.header("Report Parameters")
report_type = st.sidebar.selectbox(
"Report Type",
["Sales Analysis", "Customer Demographics", "Product Performance"]
)
date_range = st.sidebar.date_input(
"Date Range",
value=(pd.Timestamp("2023-01-01"), pd.Timestamp("2023-12-31"))
)
# Generate sample data based on inputs
def generate_sample_data(report_type, start_date, end_date):
date_range = pd.date_range(start_date, end_date, freq='D')
n_samples = len(date_range)
if report_type == "Sales Analysis":
data = {
'Date': date_range,
'Revenue': np.random.uniform(1000, 5000, n_samples),
'Units_Sold': np.random.randint(50, 200, n_samples),
'Profit_Margin': np.random.uniform(0.15, 0.35, n_samples)
}
elif report_type == "Customer Demographics":
data = {
'Date': date_range,
'New_Customers': np.random.randint(10, 50, n_samples),
'Customer_Age': np.random.uniform(25, 45, n_samples),
'Customer_Satisfaction': np.random.uniform(3.5, 4.8, n_samples)
}
else: # Product Performance
data = {
'Date': date_range,
'Product_Views': np.random.randint(500, 2000, n_samples),
'Conversion_Rate': np.random.uniform(0.02, 0.08, n_samples),
'Returns': np.random.randint(1, 10, n_samples)
}
return pd.DataFrame(data)
# Generate report when user clicks button
if st.sidebar.button("Generate Report"):
df = generate_sample_data(report_type, date_range[0], date_range[1])
st.header(f"{report_type} Report")
st.subheader(f"Period: {date_range[0]} to {date_range[1]}")
# Display summary statistics
st.subheader("Summary Statistics")
st.table(df.describe().round(2))
# Display time series chart
st.subheader("Time Series Analysis")
numeric_cols = df.select_dtypes(include=[np.number]).columns
chart_col = st.selectbox("Select metric to visualize", numeric_cols)
st.line_chart(df.set_index('Date')[chart_col])
# Display raw data
st.subheader("Raw Data")
st.dataframe(df)
# Download button
csv = df.to_csv(index=False)
st.download_button(
label="Download Report as CSV",
data=csv,
file_name=f"{report_type.lower().replace(' ', '_')}_report.csv",
mime='text/csv',
)
else:
st.info("Please set the parameters and click 'Generate Report' to create a report.")
Hi! I can help you with any questions about Streamlit and Python. What would you like to know?