-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
119 lines (97 loc) · 3.05 KB
/
main.py
File metadata and controls
119 lines (97 loc) · 3.05 KB
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
import pandas as pd
import plotly.express as px
import streamlit as st
st.set_page_config(page_title="Sales Dashboard",
page_icon=":bar_chart:",
layout="wide")
@st.cache
def get_data_from_excel():
df = pd.read_excel(
io="supermarket_sales.xlsx",
engine="openpyxl",
sheet_name="Sales",
skiprows=3,
usecols="B:R",
nrows=1000,
)
df["hour"] = pd.to_datetime(df["Time"], format="%H:%M:%S").dt.hour
return df
df = get_data_from_excel()
# st.dataframe(df)
st.sidebar.header("Please Filter Here:")
city = st.sidebar.multiselect(
"Select the city:",
options=df['City'].unique(),
default=df['City'].unique()
)
customer_type = st.sidebar.multiselect(
"Select the Customer Type:",
options=df['Customer_type'].unique(),
default=df['Customer_type'].unique()
)
gender = st.sidebar.multiselect(
"Select the Gender:",
options=df['Gender'].unique(),
default=df['Gender'].unique()
)
df_selection = df.query(
"City == @city & Customer_type == @customer_type & Gender == @gender"
)
# mainpage
st.title(":bar_chart: Sales Dashboard")
st.markdown("##")
# Top KPIs
total_sales = int(df_selection['Total'].sum())
average_rating = round(df_selection['Rating'].mean(), 1)
star_rating = ":star:" * int(round(average_rating, 0))
average_sale_by_transaction = round(df_selection['Total'].mean(), 2)
left_column, middle_column, right_column = st.columns(3)
with left_column:
st.subheader("Total Sales:")
st.subheader(f"US $ {total_sales:,}")
with middle_column:
st.subheader("Average Rating:")
st.subheader(f"{average_rating} {star_rating} ")
with right_column:
st.subheader("Average Sales per Transaction")
st.subheader(f"US $ {average_sale_by_transaction:,}")
st.markdown("---")
st.dataframe(df_selection)
# sales by product line
sales_by_product_line = (
df_selection.groupby(by=["Product line"]).sum()[["Total"]].sort_values(by="Total")
)
fig_product_sales = px.bar(
sales_by_product_line,
x="Total",
y=sales_by_product_line.index,
orientation="h",
title="<b>Sales by Product Line</b>",
color_discrete_sequence=["#0083B8"] * len(sales_by_product_line),
template="plotly_white",
)
# sales by hour [bar chart]
sales_by_hour = df_selection.groupby(by=["hour"]).sum()["Total"]
fig_hourly_sales = px.bar(
sales_by_hour,
x=sales_by_hour.index,
y="Total",
title="<b>Sales by hour</b>",
color_discrete_sequence=["#0083B8"] * len(sales_by_hour),
template="plotly_white",
)
fig_hourly_sales.update_layout(
xaxis=dict(tickmode="linear"),
yaxis=(dict(showgrid=False)),
)
left_column, right_column = st.columns(2)
left_column.plotly_chart(fig_hourly_sales, use_container_width=True)
right_column.plotly_chart(fig_product_sales, use_container_width=True)
hide_st_style = """
<style>
#MainMenu {visibility: hidden;}
footer {visibility: hidden;}
header {visibility: hidden;}
</style>
"""
st.markdown(hide_st_style, unsafe_allow_html=True)