Spaces:
Runtime error
Runtime error
File size: 4,686 Bytes
6afd39f | 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 107 108 109 110 111 112 113 114 115 116 117 | import streamlit as st
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import numpy as np
### CONFIG
st.set_page_config(
page_title="E-commerce",
page_icon="💸",
layout="wide"
)
### TITLE AND TEXT
st.title("Build dashboards with Streamlit 🎨")
st.markdown("""
Welcome to this awesome `streamlit` dashboard. This library is great to build very fast and
intuitive charts and application running on the web. Here is a showcase of what you can do with
it. Our data comes from an e-commerce website that simply displays samples of customer sales. Let's check it out.
Also, if you want to have a real quick overview of what streamlit is all about, feel free to watch the below video 👇
""")
### LOAD AND CACHE DATA
DATA_URL = ('https://full-stack-assets.s3.eu-west-3.amazonaws.com/Deployment/e-commerce_data.csv')
@st.cache_data # this lets the
def load_data(nrows):
data = pd.read_csv(DATA_URL, nrows=nrows)
data["Date"] = data["Date"].apply(lambda x: pd.to_datetime(",".join(x.split(",")[-2:])))
data["currency"] = data["currency"].apply(lambda x: pd.to_numeric(x[1:]))
return data
data_load_state = st.text('Loading data...')
data = load_data(1000)
data_load_state.text("") # change text from "Loading data..." to "" once the the load_data function has run
## Run the below code if the check is checked ✅
if st.checkbox('Show raw data'):
st.subheader('Raw data')
st.write(data)
### SHOW GRAPH STREAMLIT
st.subheader("Simple bar chart built directly with Streamlit")
currency_per_country = data.groupby("country")["currency"].sum() # Fix bar chart issue
st.bar_chart(currency_per_country)
### SHOW GRAPH PLOTLY + STREAMLIT
st.subheader("Simple bar chart built with Plotly")
st.markdown("""
Now, the best thing about `streamlit` is its compatibility with other libraries. For example, you
don't need to actually use built-in charts to create your dashboard, you can use :
* [`plotly`](https://docs.streamlit.io/library/api-reference/charts/st.plotly_chart)
* [`matplotlib`](https://docs.streamlit.io/library/api-reference/charts/st.pyplot)
* [`bokeh`](https://docs.streamlit.io/library/api-reference/charts/st.bokeh_chart)
* ...
This way, you have all the flexibility you need to build awesome dashboards. 🥰
""")
fig = px.histogram(data.sort_values("country"), x="country", y="currency", barmode="group")
st.plotly_chart(fig, use_container_width=True)
### SIDEBAR
st.sidebar.header("Build dashboards with Streamlit")
st.sidebar.markdown("""
* [Load and showcase data](#load-and-showcase-data)
* [Charts directly built with Streamlit](#simple-bar-chart-built-directly-with-streamlit)
* [Charts built with Plotly](#simple-bar-chart-built-with-plotly)
* [Input Data](#input-data)
""")
e = st.sidebar.empty()
e.write("")
st.sidebar.write("Made with 💖 by [Jedha](https://jedha.co)")
### EXPANDER
with st.expander("⏯️ Watch this 15min tutorial"):
st.video("https://youtu.be/B2iAodr0fOo")
st.markdown("---")
#### CREATE TWO COLUMNS
col1, col2 = st.columns(2)
with col1:
st.markdown("**1️⃣ Example of input widget**")
country = st.selectbox("Select a country you want to see all time sales", data["country"].sort_values().unique())
country_sales = data[data["country"]==country]
fig = px.histogram(country_sales, x="Date", y="currency")
fig.update_layout(bargap=0.2)
st.plotly_chart(fig, use_container_width=True)
with col2:
st.markdown("**2️⃣ Example of input form**")
with st.form("average_sales_per_country"):
country = st.selectbox("Select a country you want to see sales", data["country"].sort_values().unique())
start_period = st.date_input("Select a start date you want to see your metric")
end_period = st.date_input("Select an end date you want to see your metric")
submit = st.form_submit_button("submit")
if submit:
avg_period_country_sales = data[data["country"] == country].copy()
start_period, end_period = pd.to_datetime(start_period), pd.to_datetime(end_period)
mask = (avg_period_country_sales["Date"] >= start_period) & (avg_period_country_sales["Date"] <= end_period)
avg_period_country_sales = avg_period_country_sales[mask]["currency"].mean()
if np.isnan(avg_period_country_sales): # Handle NaN case
st.warning("No sales data available for the selected period.")
else:
st.metric("Average sales during selected period (in $)", np.round(avg_period_country_sales, 2)) |