File size: 6,400 Bytes
68b5923 |
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 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
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"
)
DATA_URL = ('https://full-stack-assets.s3.eu-west-3.amazonaws.com/Deployment/e-commerce_data.csv')
### App
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.
You can download the whole code here π [Source code](https://github.com/JedhaBootcamp/streamlit-demo-app)
Also, if you want to have a real quick overview of what streamlit is all about, feel free to watch the below video π
""")
with st.expander("β―οΈ Watch this 15min tutorial"):
st.video("https://youtu.be/B2iAodr0fOo")
st.markdown("---")
# Use `st.cache` when loading data is extremly useful
# because it will cache your data so that your app
# won't have to reload it each time you refresh your app
@st.cache
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
st.subheader("Load and showcase data")
st.markdown("""
You can use the usual Data Science libraries like `pandas` or `numpy` to load data.
Then simply use [`st.write()`](https://docs.streamlit.io/library/api-reference/write-magic/st.write) to showcase it on your web app.
""")
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)
## Simple bar chart
st.subheader("Simple bar chart built directly with Streamlit")
st.markdown("""
You can build simple chart directly with streamlit using:
* [`st.bar_chart`](https://docs.streamlit.io/library/api-reference/charts/st.bar_chart)
* [`st.line_chart`](https://docs.streamlit.io/library/api-reference/charts/st.line_chart)
* [`st.area_chart`](https://docs.streamlit.io/library/api-reference/charts/st.area_chart)
Eventhough it doesn't offer great flexibility, it is still a very simple way to create graphs quickly since
streamlit since these methods accepts a pandas DataFrame or Numpy array as input.
""")
currency_per_country = data.set_index("country")["currency"]
st.bar_chart(currency_per_country)
## Bar chart built with plotly
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)
### Input data
st.subheader("Input data")
st.markdown("""
As a final note, you can use data that a user will insert when he/she interacts with your app.
This is called *input data*. To collect these, you can do two things:
* [Use any of the input widget](https://docs.streamlit.io/library/api-reference/widgets)
* [Build a form](https://docs.streamlit.io/library/api-reference/control-flow/st.form)
Depending on what you need to do, you will prefer one or the other. With a `form`, you actually group
input widgets together and send the data right away, which can be useful when you need to filter
by several variables.
""")
#### 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)]
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].mean()
st.metric("Average sales during selected period (in $)", np.round(avg_period_country_sales, 2))
### Side bar
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)")
### Footer
empty_space, footer = st.columns([1, 2])
with empty_space:
st.write("")
with footer:
st.markdown("""
π
If you want to learn more, check out [streamlit's documentation](https://docs.streamlit.io/) π
""") |