Spaces:
Sleeping
Sleeping
perezcatriel
commited on
Commit
•
65082b1
1
Parent(s):
2094908
[FIX] colores y estilos
Browse files- .streamlit/config.toml +1 -1
- app.py +2 -4
- boxplot_clientes.py +34 -24
- top_5_clientes.py +23 -16
- ventas_anuales_clientes.py +11 -4
.streamlit/config.toml
CHANGED
@@ -3,4 +3,4 @@ primaryColor = "#FC5C9C"
|
|
3 |
backgroundColor = "#F5FFFA"
|
4 |
secondaryBackgroundColor = "#C4C754"
|
5 |
textColor = "#556B2F"
|
6 |
-
font = "sans
|
|
|
3 |
backgroundColor = "#F5FFFA"
|
4 |
secondaryBackgroundColor = "#C4C754"
|
5 |
textColor = "#556B2F"
|
6 |
+
font = "sans"
|
app.py
CHANGED
@@ -1,6 +1,4 @@
|
|
1 |
# Importación de las bibliotecas necesarias
|
2 |
-
import subprocess
|
3 |
-
|
4 |
import pandas as pd
|
5 |
import streamlit as st
|
6 |
|
@@ -13,7 +11,8 @@ df = pd.read_csv('data/po_excel_original.csv')
|
|
13 |
|
14 |
# Seleccionar top clientes por ventas
|
15 |
top_clientes = df.groupby("Clientes")["Total"].sum().sort_values(
|
16 |
-
|
|
|
17 |
|
18 |
# Título de la aplicación Streamlit
|
19 |
st.title("Análisis de Clientes y Ventas de Punto Orgánico")
|
@@ -26,6 +25,5 @@ def run():
|
|
26 |
boxplot()
|
27 |
|
28 |
|
29 |
-
|
30 |
if __name__ == "__main__":
|
31 |
run()
|
|
|
1 |
# Importación de las bibliotecas necesarias
|
|
|
|
|
2 |
import pandas as pd
|
3 |
import streamlit as st
|
4 |
|
|
|
11 |
|
12 |
# Seleccionar top clientes por ventas
|
13 |
top_clientes = df.groupby("Clientes")["Total"].sum().sort_values(
|
14 |
+
ascending=False
|
15 |
+
)
|
16 |
|
17 |
# Título de la aplicación Streamlit
|
18 |
st.title("Análisis de Clientes y Ventas de Punto Orgánico")
|
|
|
25 |
boxplot()
|
26 |
|
27 |
|
|
|
28 |
if __name__ == "__main__":
|
29 |
run()
|
boxplot_clientes.py
CHANGED
@@ -1,5 +1,4 @@
|
|
1 |
import pandas as pd
|
2 |
-
import plotly.express as px
|
3 |
import plotly.graph_objects as go
|
4 |
import streamlit as st
|
5 |
|
@@ -9,6 +8,7 @@ df = pd.read_csv('data/po_excel_original.csv')
|
|
9 |
# Ordenar el DataFrame por la columna "Total" en orden descendente
|
10 |
df = df.sort_values(by="Total", ascending=False)
|
11 |
|
|
|
12 |
def boxplot():
|
13 |
# Subtítulo: Boxplot de Clientes
|
14 |
st.subheader("Boxplot de Clientes")
|
@@ -17,35 +17,45 @@ def boxplot():
|
|
17 |
fig = go.Figure()
|
18 |
|
19 |
# Agregar los boxplots
|
20 |
-
fig.add_trace(
|
21 |
-
|
22 |
-
|
|
|
|
|
|
|
|
|
23 |
|
24 |
# Agregar los puntos de los clientes y sus nombres a la leyenda
|
25 |
for i, row in df.iterrows():
|
26 |
-
fig.add_trace(
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
|
34 |
# Configurar el diseño del boxplot y el tamaño de la figura
|
35 |
fig.update_layout(
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
|
50 |
# Mostrar el boxplot con los nombres de los clientes
|
51 |
st.plotly_chart(fig, use_container_width=True)
|
|
|
1 |
import pandas as pd
|
|
|
2 |
import plotly.graph_objects as go
|
3 |
import streamlit as st
|
4 |
|
|
|
8 |
# Ordenar el DataFrame por la columna "Total" en orden descendente
|
9 |
df = df.sort_values(by="Total", ascending=False)
|
10 |
|
11 |
+
|
12 |
def boxplot():
|
13 |
# Subtítulo: Boxplot de Clientes
|
14 |
st.subheader("Boxplot de Clientes")
|
|
|
17 |
fig = go.Figure()
|
18 |
|
19 |
# Agregar los boxplots
|
20 |
+
fig.add_trace(
|
21 |
+
go.Box(
|
22 |
+
y=df["Total"],
|
23 |
+
name="Boxplot",
|
24 |
+
marker_color='green'
|
25 |
+
)
|
26 |
+
) # Color del boxplot
|
27 |
|
28 |
# Agregar los puntos de los clientes y sus nombres a la leyenda
|
29 |
for i, row in df.iterrows():
|
30 |
+
fig.add_trace(
|
31 |
+
go.Scatter(
|
32 |
+
x=[len(df) + 2],
|
33 |
+
y=[row["Total"]],
|
34 |
+
mode='markers',
|
35 |
+
name=row["Clientes"],
|
36 |
+
marker=dict(
|
37 |
+
color='#FC5C9C', size=12,
|
38 |
+
symbol='circle'
|
39 |
+
), # Color de los markers
|
40 |
+
visible='legendonly'
|
41 |
+
)
|
42 |
+
)
|
43 |
|
44 |
# Configurar el diseño del boxplot y el tamaño de la figura
|
45 |
fig.update_layout(
|
46 |
+
yaxis=dict(title="Ventas"),
|
47 |
+
boxmode='group',
|
48 |
+
autosize=True,
|
49 |
+
width=900,
|
50 |
+
height=600,
|
51 |
+
legend=dict(
|
52 |
+
x=1.1,
|
53 |
+
y=0.5,
|
54 |
+
bgcolor='rgba(255, 255, 255, 0.5)',
|
55 |
+
bordercolor='rgba(0, 0, 0, 0.3)',
|
56 |
+
borderwidth=1
|
57 |
+
)
|
58 |
+
)
|
59 |
|
60 |
# Mostrar el boxplot con los nombres de los clientes
|
61 |
st.plotly_chart(fig, use_container_width=True)
|
top_5_clientes.py
CHANGED
@@ -1,10 +1,11 @@
|
|
1 |
import pandas as pd
|
2 |
-
import streamlit as st
|
3 |
import plotly.express as px
|
|
|
4 |
|
5 |
# Carga del archivo CSV
|
6 |
df = pd.read_csv('data/po_excel_original.csv')
|
7 |
|
|
|
8 |
def top_5():
|
9 |
# Ordenar el DataFrame por el total de forma descendente
|
10 |
df_sorted = df.sort_values("Total", ascending=False)
|
@@ -13,15 +14,20 @@ def top_5():
|
|
13 |
st.sidebar.title("Filtros Ventas Anuales TOP clientes")
|
14 |
|
15 |
# Crear los controles interactivos para los filtros en la barra lateral
|
16 |
-
filtro_x = st.sidebar.slider(
|
17 |
-
|
|
|
|
|
|
|
18 |
|
19 |
# Aplicar los filtros al DataFrame
|
20 |
df_filtrado = df_sorted[df_sorted["Total"] >= filtro_x]
|
21 |
|
22 |
# Control para la cantidad de clientes a mostrar
|
23 |
-
filtro_n = st.sidebar.slider(
|
24 |
-
|
|
|
|
|
25 |
|
26 |
# Aplicar el segundo filtro al DataFrame
|
27 |
df_filtrado = df_filtrado.head(filtro_n)
|
@@ -30,23 +36,24 @@ def top_5():
|
|
30 |
st.subheader("Ventas Anuales por TOP de clientes")
|
31 |
|
32 |
# Crear el gráfico interactivo con Plotly
|
33 |
-
fig = px.bar(
|
34 |
-
|
|
|
|
|
35 |
|
36 |
# Personalizar el diseño del gráfico
|
37 |
fig.update_layout(
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
|
43 |
# Configurar el tamaño del gráfico para que se muestren todos los nombres
|
44 |
fig.update_layout(
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
|
50 |
# Mostrar el gráfico en Streamlit
|
51 |
st.plotly_chart(fig)
|
52 |
-
|
|
|
1 |
import pandas as pd
|
|
|
2 |
import plotly.express as px
|
3 |
+
import streamlit as st
|
4 |
|
5 |
# Carga del archivo CSV
|
6 |
df = pd.read_csv('data/po_excel_original.csv')
|
7 |
|
8 |
+
|
9 |
def top_5():
|
10 |
# Ordenar el DataFrame por el total de forma descendente
|
11 |
df_sorted = df.sort_values("Total", ascending=False)
|
|
|
14 |
st.sidebar.title("Filtros Ventas Anuales TOP clientes")
|
15 |
|
16 |
# Crear los controles interactivos para los filtros en la barra lateral
|
17 |
+
filtro_x = st.sidebar.slider(
|
18 |
+
"Monto mínimo de compras", min_value=0,
|
19 |
+
max_value=int(df_sorted["Total"].max()),
|
20 |
+
value=100, step=1
|
21 |
+
)
|
22 |
|
23 |
# Aplicar los filtros al DataFrame
|
24 |
df_filtrado = df_sorted[df_sorted["Total"] >= filtro_x]
|
25 |
|
26 |
# Control para la cantidad de clientes a mostrar
|
27 |
+
filtro_n = st.sidebar.slider(
|
28 |
+
"Cantidad de clientes a mostrar", min_value=1,
|
29 |
+
max_value=len(df_filtrado), value=10
|
30 |
+
)
|
31 |
|
32 |
# Aplicar el segundo filtro al DataFrame
|
33 |
df_filtrado = df_filtrado.head(filtro_n)
|
|
|
36 |
st.subheader("Ventas Anuales por TOP de clientes")
|
37 |
|
38 |
# Crear el gráfico interactivo con Plotly
|
39 |
+
fig = px.bar(
|
40 |
+
df_filtrado, x="Total", y="Clientes", color="Total",
|
41 |
+
log_x=True, color_continuous_scale="greens"
|
42 |
+
) # Modificar la paleta de colores
|
43 |
|
44 |
# Personalizar el diseño del gráfico
|
45 |
fig.update_layout(
|
46 |
+
xaxis=dict(categoryorder="total descending"),
|
47 |
+
yaxis={'categoryorder': 'total ascending'},
|
48 |
+
showlegend=False
|
49 |
+
)
|
50 |
|
51 |
# Configurar el tamaño del gráfico para que se muestren todos los nombres
|
52 |
fig.update_layout(
|
53 |
+
autosize=True,
|
54 |
+
width=800,
|
55 |
+
height=500
|
56 |
+
)
|
57 |
|
58 |
# Mostrar el gráfico en Streamlit
|
59 |
st.plotly_chart(fig)
|
|
ventas_anuales_clientes.py
CHANGED
@@ -1,7 +1,9 @@
|
|
|
|
|
|
1 |
import pandas as pd
|
2 |
import plotly.express as px
|
3 |
import streamlit as st
|
4 |
-
|
5 |
|
6 |
def ventas_anuales():
|
7 |
# Carga del archivo CSV
|
@@ -13,17 +15,22 @@ def ventas_anuales():
|
|
13 |
# Reordena los meses en orden cronológico
|
14 |
meses_ordenados = ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago',
|
15 |
'Sep', 'Oct', 'Nov', 'Dic']
|
16 |
-
df['Mes'] = pd.Categorical(
|
|
|
|
|
17 |
|
18 |
# Ordena el DataFrame por año y mes
|
19 |
df = df.sort_values(['Año', 'Mes'])
|
20 |
|
21 |
# Filtra los datos hasta el último mes mostrado
|
22 |
-
ultimo_mes_mostrado = meses_ordenados[date.today().month-1]
|
23 |
df = df[df['Mes'] <= ultimo_mes_mostrado]
|
24 |
|
25 |
# Crea el gráfico de barras
|
26 |
-
fig = px.bar(
|
|
|
|
|
|
|
27 |
|
28 |
# Cambia el color de las barras a verde
|
29 |
fig.update_traces(marker_color='green')
|
|
|
1 |
+
from datetime import date
|
2 |
+
|
3 |
import pandas as pd
|
4 |
import plotly.express as px
|
5 |
import streamlit as st
|
6 |
+
|
7 |
|
8 |
def ventas_anuales():
|
9 |
# Carga del archivo CSV
|
|
|
15 |
# Reordena los meses en orden cronológico
|
16 |
meses_ordenados = ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago',
|
17 |
'Sep', 'Oct', 'Nov', 'Dic']
|
18 |
+
df['Mes'] = pd.Categorical(
|
19 |
+
df['Mes'], categories=meses_ordenados, ordered=True
|
20 |
+
)
|
21 |
|
22 |
# Ordena el DataFrame por año y mes
|
23 |
df = df.sort_values(['Año', 'Mes'])
|
24 |
|
25 |
# Filtra los datos hasta el último mes mostrado
|
26 |
+
ultimo_mes_mostrado = meses_ordenados[date.today().month - 1]
|
27 |
df = df[df['Mes'] <= ultimo_mes_mostrado]
|
28 |
|
29 |
# Crea el gráfico de barras
|
30 |
+
fig = px.bar(
|
31 |
+
df, x='Mes', y='Ventas', title='Ventas Anuales',
|
32 |
+
labels={'Ventas': 'Ventas ($)', 'Mes': 'Mes', 'Año': 'Año'}
|
33 |
+
)
|
34 |
|
35 |
# Cambia el color de las barras a verde
|
36 |
fig.update_traces(marker_color='green')
|