Created
January 23, 2025 19:01
-
-
Save mickaelandrieu/e8c6b028ebe97ddc3be50e46f00ad613 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import streamlit as st | |
import pandas as pd | |
sales = pd.read_csv('superstore.csv', parse_dates=['Ship Date', 'Order Date']) | |
st.markdown('# Suivi des ventes') | |
orders = sales['Order ID'].nunique() | |
customers = sales['Customer Name'].nunique() | |
total_sales = sales['Sales'].sum() | |
benefits = sales['Profit'].sum() | |
st.markdown('### KPIs principaux 📈') | |
col1, col2, col3, col4 = st.columns(4) | |
col1.metric("Nombre de commandes", orders) | |
col2.metric("Nombre de clients", customers) | |
col3.metric("Chiffre d'affaires", str(round(total_sales))+ "$") | |
col4.metric("Bénéfices", str(round(benefits))+ "$") | |
with st.expander("### Formulaire de recherche 🔎"): | |
categories = list(sales['Category'].unique()) | |
category_selector = st.multiselect( | |
"Choisis ta catégorie de Produit", | |
categories, | |
["Furniture"], | |
) | |
segments = list(sales['Segment'].unique()) | |
segment_selector = st.multiselect( | |
"Choisis ton segment de clientèle", | |
segments, | |
["Consumer"], | |
) | |
def query_builder(filters): | |
query = '' | |
i = 0 | |
for filter in filters: | |
i = i + 1 | |
if(i == 1): | |
query = query + f"""{filter['column']} in {filter['value']}""" | |
else: | |
query = query + " " + f"""or {filter['column']} in {filter['value']}""" | |
print(query) | |
return query | |
filters = [ | |
{"column": "Category", "value": category_selector}, | |
{"column": "Segment", "value": segment_selector} | |
] | |
daily_sales = sales[['Sales', 'Order Date', 'Category', 'Segment']].query(query_builder(filters)).groupby(by = ['Order Date']).sum().sort_values(by='Order Date').reset_index() | |
daily_profit = sales[['Profit', 'Order Date', 'Category', 'Segment']].query(query_builder(filters)).groupby(by = ['Order Date']).sum().sort_values(by='Order Date').reset_index() | |
st.markdown('### Suivi quotidien 📅') | |
st.markdown('#### Ventes 🛒') | |
st.line_chart(daily_sales, x = 'Order Date', y = 'Sales', color = "#e248db", x_label= 'Date', y_label= 'Ventes ($)') | |
st.markdown('#### Profit 💰') | |
st.line_chart(daily_profit, x = 'Order Date', y = 'Profit', color = "#39b2ca", x_label= 'Date', y_label= 'Profits ($)') | |
# utilisation de Plotly pour faire un camembert | |
import plotly.express as px | |
st.markdown('#### Nombre de ventes par categorie 📚') | |
fig = px.pie(sales[['Sales', 'Order Date', 'Category', 'Segment']].query(query_builder(filters)), values='Sales', names='Category') | |
st.plotly_chart(fig, use_container_width=True) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment