Analisis de la disminución de ventas de un minorista de productos de escritura de lujo¶
Sección 1 - revisión de ingresos¶
Importamos Pandas y Matplotlib
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="ticks", rc={"axes.spines.right": False, "axes.spines.top": False})
Importamos la base de datos "efecto chivas.xlsx"
boligrafos = pd.read_excel("Data/Registro de ventas.xlsx",index_col="Id_venta")
boligrafos.head()
Costo Produccion | Precio Venta | Ganancias | Ganancias % | Fecha Venta | Tamaño (cm) | Peso (gr) | Oro (gr) | Plata (gr) | Estetica | Tipo | Platino (gr) | Estuche | Repuestos | Duracion (m) | Valoracion Cliente | Color | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Id_venta | |||||||||||||||||
3317 | 6365 | 8274.5 | 1909.5 | 0.3 | 2016-02-22 | 14 | 11 | 2 | 1 | 82 | Boligrafo | 2 | No | 2 | 3200 | Muy Buena | Azul |
7123 | 8160 | 11424.0 | 3264.0 | 0.4 | 2016-02-23 | 14 | 13 | 1 | 4 | 58 | Boligrafo | 0 | Si | 3 | 3200 | Buena | Negro |
6487 | 5050 | 6565.0 | 1515.0 | 0.3 | 2016-02-27 | 7 | 6 | 1 | 0 | 83 | Boligrafo | 0 | Si | 3 | 1600 | Regular | Azul |
4526 | 7750 | 8525.0 | 775.0 | 0.1 | 2016-03-02 | 14 | 13 | 0 | 0 | 84 | Boligrafo | 1 | No | 3 | 2000 | Buena | Azul |
1185 | 3915 | 4698.0 | 783.0 | 0.2 | 2016-03-02 | 18 | 22 | 0 | 1 | 56 | Boligrafo | 1 | No | 1 | 2000 | Buena | Azul |
boligrafos.info()
<class 'pandas.core.frame.DataFrame'> Index: 8000 entries, 3317 to 7844 Data columns (total 17 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Costo Produccion 8000 non-null int64 1 Precio Venta 8000 non-null float64 2 Ganancias 8000 non-null float64 3 Ganancias % 8000 non-null float64 4 Fecha Venta 8000 non-null datetime64[ns] 5 Tamaño (cm) 8000 non-null int64 6 Peso (gr) 8000 non-null int64 7 Oro (gr) 8000 non-null int64 8 Plata (gr) 8000 non-null int64 9 Estetica 8000 non-null int64 10 Tipo 8000 non-null object 11 Platino (gr) 8000 non-null int64 12 Estuche 8000 non-null object 13 Repuestos 8000 non-null int64 14 Duracion (m) 8000 non-null int64 15 Valoracion Cliente 8000 non-null object 16 Color 8000 non-null object dtypes: datetime64[ns](1), float64(3), int64(9), object(4) memory usage: 1.1+ MB
Agregar una columna llamada "Año", que contega el año de cada venta:
boligrafos['Año'] = boligrafos['Fecha Venta'].dt.strftime('%Y')#.astype('datetime64[ns]')
Obtenemos la cantidad de ingresos que han tenido en cada año:
ventas_por_anio = pd.pivot_table(data=boligrafos, index='Año', values='Precio Venta', aggfunc='sum')
ventas_por_anio
Precio Venta | |
---|---|
Año | |
2016 | 8490183.0 |
2017 | 8760126.0 |
2018 | 8759273.5 |
2019 | 6988492.0 |
2020 | 6975988.0 |
2021 | 6830662.0 |
Utilizamos la funcion plot.bar() para visualizar la cantidad de ventas realizadas en cada año y usamos plt.axvline y plt.text para señalar los años en los cuales hubo una caida en los ingresos totales de las ventas
plot = ventas_por_anio.plot(kind='bar', ylim=(6500000, 9000000), ylabel='Ingresos (Millones)', legend=False, title='Ingresos generados desde 2016 al 2021')
plot.bar_label(plot.containers[0], fontsize=11, labels=list(round(ventas_por_anio['Precio Venta'] / 1000000, 2)))
plt.axvline(x=2.5, linestyle='--', color='gray')
plt.text(x=2.75, y=8700000, s='Inicio de la caida de ingresos\n(2019 al 2021)', color='gray')
plt.show()
Conclución: Se observa una caida clara de ingresos entre el 2018 (8.759.273) y el 2019 (6.988.492) lo que se traduce en -20,21% de ingresos, que no se recuperan en los siguientes 2 años
Sección 2 - revisión de ganancias¶
Ahora hacemos el mismo ejercicio con las ganancias
ganancias_por_anio = pd.pivot_table(data=boligrafos, index='Año', values='Ganancias', aggfunc='sum')
ganancias_por_anio
Ganancias | |
---|---|
Año | |
2016 | 1831578.0 |
2017 | 1927126.0 |
2018 | 1886198.5 |
2019 | 1543292.0 |
2020 | 1608348.0 |
2021 | 1559622.0 |
list(round(ganancias_por_anio['Ganancias'] / 1000000, 2))
[1.83, 1.93, 1.89, 1.54, 1.61, 1.56]
plot = ganancias_por_anio.plot(kind='bar', legend=False, ylim=(1500000, 2000000), ylabel='Ganancias (Millones)', title='Ganancias generados desde 2016 al 2021')
plot.bar_label(plot.containers[0], fontsize=11, labels=list(round(ganancias_por_anio['Ganancias'] / 1000000, 2)))
plt.axvline(x=2.5, linestyle='--', color='gray')
plt.text(x=2.7, y=1950000, s='Inicio de la caida de ganancias\n(2019 al 2021)', color='gray')
plt.show()
Conclución: Como en los ingresos las ganacias tambien se ven diminuidas pasando de 1.886.198 en el 2018 a 1.543.292 en 2019 lo que equivale a un -18.17%
Sección 3 - revisión de unidades vendidas¶
Obtenemos la cantidad total de productos vendidos en cada año
productos_por_anio = pd.pivot_table(data=boligrafos, index='Año', values='Tipo', aggfunc='count')
productos_por_anio
Tipo | |
---|---|
Año | |
2016 | 1334 |
2017 | 1352 |
2018 | 1347 |
2019 | 1326 |
2020 | 1323 |
2021 | 1318 |
Utilizamos la funcion .plot(drawstyle="steps") para mostrar la cantidad de productos vendidos en cada año
productos_por_anio.plot(kind='line', drawstyle='steps', marker='o', legend=False, ylabel='# de unidades vendidas', title='Cantidad de productos vendidos desde 2016 al 2021')
plt.show()
Conclución 1: Como era de esperar el numero de unidades vendidas a disminuido pasando de 1347 unidades en el 2018 a 1326 en 2019 lo que equivale a un -1.55% que no es proporcional con la disminución de los ingresos, por lo cual es necesario saber cual es el producto que se esta dejando de vender y ver como afecta el numero de unidades vendidas y el ingreso generado
Obtenemos el numero de productos vendidos en cada año por tipo
pcategorias_por_anio = pd.pivot_table(data=boligrafos, index='Año', columns='Tipo', values='Color', aggfunc='count')
pcategorias_por_anio
Tipo | Boligrafo | Lapicero | Plumafuente |
---|---|---|---|
Año | |||
2016 | 499 | 408 | 427 |
2017 | 548 | 431 | 373 |
2018 | 581 | 370 | 396 |
2019 | 461 | 419 | 446 |
2020 | 351 | 484 | 488 |
2021 | 289 | 514 | 515 |
ppcategorias_por_anio = pd.pivot_table(data=boligrafos, index='Año', columns='Tipo', values='Color', aggfunc='count')
suma_valor_total_fila = ppcategorias_por_anio.sum(axis=1)
ppcategorias_por_anio = round((ppcategorias_por_anio.divide(suma_valor_total_fila, axis=0))*100, 1)
ppcategorias_por_anio
Tipo | Boligrafo | Lapicero | Plumafuente |
---|---|---|---|
Año | |||
2016 | 37.4 | 30.6 | 32.0 |
2017 | 40.5 | 31.9 | 27.6 |
2018 | 43.1 | 27.5 | 29.4 |
2019 | 34.8 | 31.6 | 33.6 |
2020 | 26.5 | 36.6 | 36.9 |
2021 | 21.9 | 39.0 | 39.1 |
Obtenemos los ingresos totales en cada año por tipo
icategorias_por_anio = pd.pivot_table(data=boligrafos, index='Año', columns='Tipo', values='Precio Venta', aggfunc='sum')
icategorias_por_anio
Tipo | Boligrafo | Lapicero | Plumafuente |
---|---|---|---|
Año | |||
2016 | 4020536.0 | 2231536.5 | 2238110.5 |
2017 | 4425590.5 | 2319590.0 | 2014945.5 |
2018 | 4540819.5 | 2061087.5 | 2157366.5 |
2019 | 2360550.0 | 2263950.0 | 2363992.0 |
2020 | 1513329.5 | 2749812.0 | 2712846.5 |
2021 | 1205819.0 | 2890541.0 | 2734302.0 |
pvcategorias_por_anio = pd.pivot_table(data=boligrafos, index='Año', columns='Tipo', values='Precio Venta', aggfunc='sum')
suma_valor_total_fila = pvcategorias_por_anio.sum(axis=1)
pvcategorias_por_anio = round((pvcategorias_por_anio.divide(suma_valor_total_fila, axis=0))*100, 1)
pvcategorias_por_anio
Tipo | Boligrafo | Lapicero | Plumafuente |
---|---|---|---|
Año | |||
2016 | 47.4 | 26.3 | 26.4 |
2017 | 50.5 | 26.5 | 23.0 |
2018 | 51.8 | 23.5 | 24.6 |
2019 | 33.8 | 32.4 | 33.8 |
2020 | 21.7 | 39.4 | 38.9 |
2021 | 17.7 | 42.3 | 40.0 |
Utilizamos la funcion .plot() para graficar la cantidad de productos vendidos en cada año separado por categoria
fig, ax = plt.subplots(nrows=2, ncols=2, figsize=(15,13))
fig.suptitle('Unidades e ingresos y porcentaje de participación por tipo de producto', y=0.95)
pcategorias_por_anio.plot(ax=ax[0,0], kind='line', marker='o', ylabel='# de unidades vendidas', title='Unidades de productos vendidos por tipo desde 2016 al 2021')
plot = ppcategorias_por_anio.plot(ax=ax[0,1], kind='bar', stacked=True, ylabel='% de las unidades', title='% Unidades vendidas por tipo desde 2016 al 2021', rot=0, yticks=range(0, 101, 20), legend=False)
ax[0,1].bar_label(plot.containers[0], fontsize=11, label_type='center', color='white', labels=ppcategorias_por_anio['Boligrafo'])
ax[0,1].bar_label(plot.containers[1], fontsize=11, label_type='center', color='white', labels=ppcategorias_por_anio['Lapicero'])
ax[0,1].bar_label(plot.containers[2], fontsize=11, label_type='center', color='white', labels=ppcategorias_por_anio['Plumafuente'])
icategorias_por_anio.plot(ax=ax[1,0], kind='line', marker='o', ylabel='Ingresos (Millones)', title='Ingresos generados por tipo desde 2016 al 2021')
plot = pvcategorias_por_anio.plot(ax=ax[1,1], kind='bar', stacked=True, ylabel='% de los ingresos', title='% Ingresos generados por tipo desde 2016 al 2021', rot=0, yticks=range(0, 101, 20), legend=False)
ax[1,1].bar_label(plot.containers[0], fontsize=11, label_type='center', color='white', labels=pvcategorias_por_anio['Boligrafo'])
ax[1,1].bar_label(plot.containers[1], fontsize=11, label_type='center', color='white', labels=pvcategorias_por_anio['Lapicero'])
ax[1,1].bar_label(plot.containers[2], fontsize=11, label_type='center', color='white', labels=pvcategorias_por_anio['Plumafuente'])
plt.subplots_adjust(hspace=0.3)
plt.show()
Conclución 2: Los boligrafos son el producto que historicamente a generado mas unidades de ventas y mayores ingresos, por lo cual son la principal causa de la disminución de los ingresos. Ademas de que con estas dos graficas se entiende el porque el porcentaje de disminución general de unidades (-1.55%) e ingresos (-20.21%) no se corresponden, ya que en unidades vendidas el lapicero y la pluma fuente han aumentado desde el 2018, sin embargo ese aumento no a repercutido de la misma forma en los ingresos, por esta razón es que el numero de unidades generales no se ve significativamente afectado por da disminución de ventas de boligrafos.
Sección 4 - Análisis de la percepción de los clientes¶
Obtenemos la cantidad total de veces que los clientes opinaron que nuestros productos son malos, muy malos, regulares, buenos y muy buenos en cada año
opiniones_por_anio = pd.pivot_table(data=boligrafos, index='Valoracion Cliente', values='Tipo', aggfunc='count', sort=False)
opiniones_por_anio
Tipo | |
---|---|
Valoracion Cliente | |
Muy Buena | 1709 |
Buena | 1852 |
Regular | 1651 |
Mala | 1386 |
Muy Mala | 1402 |
Utilizamos la funcion plot.pie para visualizar el porcentaje de clientes que opina que nuestros productos son malos, muy malos, regulares, buenos y muy buenos en cada año
opiniones_por_anio.plot(kind='pie', y='Tipo', legend=False, autopct='%1.1f%%', ylabel='', title='% de calificación del cliente por tipo de valoración')
plt.show()
Conclución 1: Con las valoraciones agregadas se puede ver que el 34.8% de las opiniones son "negativas" y 20.6% son "neutrales" por lo cual vamos a revizar que productos tienen la mayor participación en cada una de estas categorias y si esto se corresponde con la disminución de ingresos de los boligrafos.
calificaciones = pd.pivot_table(data=boligrafos, index=['Año', 'Valoracion Cliente', 'Tipo'], values='Color', aggfunc='count', sort=False).reset_index()
calificaciones
Año | Valoracion Cliente | Tipo | Color | |
---|---|---|---|---|
0 | 2016 | Muy Buena | Boligrafo | 148 |
1 | 2016 | Buena | Boligrafo | 161 |
2 | 2016 | Regular | Boligrafo | 121 |
3 | 2016 | Mala | Boligrafo | 36 |
4 | 2016 | Muy Mala | Boligrafo | 33 |
... | ... | ... | ... | ... |
85 | 2021 | Muy Buena | Plumafuente | 110 |
86 | 2021 | Regular | Plumafuente | 105 |
87 | 2021 | Muy Mala | Plumafuente | 92 |
88 | 2021 | Mala | Plumafuente | 103 |
89 | 2021 | Buena | Plumafuente | 105 |
90 rows × 4 columns
sns.relplot(data=calificaciones, x='Año', y='Color', hue='Tipo', col='Valoracion Cliente', kind='line', col_wrap=3, height=4, markers=True, marker='o')
plt.show()
Conclución 2: El numero de valoraciones que eran muy buenas, buenas y regualres decaen de una forma bastante similar que los ingresos, es tanta la disminución en las ventas de boligrafos que las valoraciones malas y muy malas tambien disminuyeron, por lo cual nos enfocaremos en comprender el porque de la disminución de los boligrafos.
Filtramos los productos vendidos, solo conservamos aquellos en los cuales el tipo fue "Boligrafo" y obtenemos la cantidad total de veces que los clientes opinaron que nuestros boligrafos son malos, muy malos, regulares, buenos y muy buenos en cada año
opiniones_boligrafo_por_anio = pd.pivot_table(data=boligrafos[boligrafos['Tipo'] == 'Boligrafo'], columns='Valoracion Cliente', index='Año', values='Tipo', aggfunc='count', sort=False)
suma_valor_total_fila = opiniones_boligrafo_por_anio.sum(axis=1)
opiniones_boligrafo_por_anio = (opiniones_boligrafo_por_anio.divide(suma_valor_total_fila, axis=0))*100
porc_opiniones_boligrafo_por_anio = opiniones_boligrafo_por_anio.map('{:.1f}%'.format, na_action='ignore')
porc_opiniones_boligrafo_por_anio
Valoracion Cliente | Muy Buena | Buena | Regular | Mala | Muy Mala |
---|---|---|---|---|---|
Año | |||||
2016 | 29.7% | 32.3% | 24.2% | 7.2% | 6.6% |
2017 | 31.2% | 30.1% | 22.4% | 8.6% | 7.7% |
2018 | 27.2% | 32.5% | 22.7% | 7.6% | 10.0% |
2019 | 19.5% | 21.5% | 24.5% | 16.9% | 17.6% |
2020 | 19.4% | 22.2% | 18.2% | 20.2% | 19.9% |
2021 | 14.9% | 22.1% | 23.9% | 21.8% | 17.3% |
Utilizamos la funcion plot para visualizar el porcentaje de clientes que opina que nuestros boligrafos son malos, muy malos, regulares, buenos y muy buenos en cada año
titulos = ['% de valoración del cliente en categorias "positivas"', '% de valoración del cliente en categoria "neutra"', '% de valoración del cliente en categorias "negativas"']
valoraciones = [['Muy Buena', 'Buena'], 'Regular', ['Mala', 'Muy Mala']]
#texto =
fig, ax = plt.subplots(nrows=3, ncols=1, figsize=(6, 12))
fig.suptitle('Evoluación de la valoración del producto boligrafo (2016-2021)', y=0.93)
for x in range(0, 3):
opiniones_boligrafo_por_anio[valoraciones[x]].plot(ax=ax[x], marker='o')
ax[x].set_title(titulos[x])
ax[x].set_ylabel('% del total de valoraciones')
ax[x].set_ylim(0,35)
ax[x].set_yticks(ticks=range(0, 36, 5))
ax[x].set_yticklabels(labels=[str(y)+'%' for y in range(0, 36, 5)])
ax[x].legend(title='')
ax[x].axvline(x=2, linestyle='--', color='gray', alpha=0.3)
ax[x].text(x=2.2, y=2, s='Inicio de la disminución en ventas', color='gray', alpha=0.3)
plt.subplots_adjust(hspace=0.4)
plt.show()
Conclución 3: Observando las proporciones de las valoraciones de los boligrafos Muy Buena (29.7%) y Buena (32.3%) en el 2016 pasaron a disminuir a 14.9% y 22.1% respectivamente en el 2021 mientras que la valoraciones muy malas (6.6%) y malas (7.2%) en el 2016 pasaron a crecer 21.8% y 17.3% en el 2021 respectivamente. Por lo cual indagaremos en la calidad del producto analizando la cantidad de repuestos que se venden por tipo de producto
Sección 5 - Análisis de la calidad del producto¶
Obtenemos la cantidad promedio de repuestos que incluimos en la venta de los boligrafos por año
brepuestos_prom_por_anio = pd.pivot_table(data=boligrafos[boligrafos['Tipo']=='Boligrafo'], index='Año', values='Repuestos', aggfunc='mean')
brepuestos_prom_por_anio
Repuestos | |
---|---|
Año | |
2016 | 1.991984 |
2017 | 2.056569 |
2018 | 2.029260 |
2019 | 2.041215 |
2020 | 2.062678 |
2021 | 2.000000 |
plot = brepuestos_prom_por_anio.plot(kind='bar', ylim=(1.9, 2.1), ylabel='Promedio de repuestos por venta', title='Promedio de repuestos por venta de boligrafos por año', legend=False)
plot.bar_label(plot.containers[0], fontsize=11, fmt='%1.3g')
plt.show()
Utilizamos la funcion .plot.bar para graficar la cantidad media de repuestos de los 3 tipos de productos
Conclución 1: Observando el promedio de repuestos por año de los boligrafos no resulta tener una variación significativa año a año, por lo cual seria necesario comparar las 3 categorias de producto para entender si esta cantidad promedio de repuestos resulta ser superior a los demas y sea esta una causa de la disminución de ventas.
Obtenemos el promedio de repuestos comprados por tipo de producto en cada año
grepuestos_prom_por_anio = pd.pivot_table(data=boligrafos, index='Año', columns='Tipo', values='Repuestos', aggfunc='mean')
grepuestos_prom_por_anio
Tipo | Boligrafo | Lapicero | Plumafuente |
---|---|---|---|
Año | |||
2016 | 1.991984 | 1.941176 | 1.971897 |
2017 | 2.056569 | 2.037123 | 1.941019 |
2018 | 2.029260 | 1.991892 | 1.989899 |
2019 | 2.041215 | 2.035800 | 2.033632 |
2020 | 2.062678 | 2.020661 | 1.987705 |
2021 | 2.000000 | 1.998054 | 1.972816 |
grepuestos_prom_por_anio.plot(kind='line', marker='o', ylabel='Promedio de repuestos', ylim=(1.9, 2.1), title='Promedio de repuestos por venta de tipo de producto por año')
plt.show()
Conclución 2: Si bien los boligrafos tienen el mayor promedio de repuestos por año, la diferencia con las demas categorias no es significativa, por lo cual la calidad no resultaria ser el principal factor aun que si uno a tener en cuenta ya que los lapiceros y las plumas fuente han disminuido el numero de repuestos en los ultimos años manteniendo su numero de ventas por producto. Ahora analizaremos la duración de estos productos para ver si esta variable tiene una mayor peso en la disminución de ventas
Sección 6 - Análisis de la duración del producto¶
Obtenemos el promedio de metros de duración por tipo de producto en cada año
duracion_prom_por_anio = pd.pivot_table(data=boligrafos, index='Año', columns='Tipo', values='Duracion (m)', aggfunc='mean')
duracion_prom_por_anio
Tipo | Boligrafo | Lapicero | Plumafuente |
---|---|---|---|
Año | |||
2016 | 2418.436874 | 2398.039216 | 2390.632319 |
2017 | 2393.430657 | 2323.897912 | 2393.565684 |
2018 | 2402.753873 | 2393.513514 | 2330.303030 |
2019 | 2379.175705 | 2366.587112 | 2381.165919 |
2020 | 2395.441595 | 2419.834711 | 2422.950820 |
2021 | 2442.906574 | 2389.105058 | 2390.679612 |
duracion_prom_por_anio.plot(kind='line', marker='o', ylabel='Duración promedio (metros)', ylim=(2300, 2450), title='Promedio de duración por tipo de producto por año')
plt.show()
Conclución: En un principio la duración de los 3 productos era muy similar, en los 2 años posteriores el lapicero y la plumafuente decalleron en promedio 100 metros con respecto a los boligrafos los cuales se han mantenido y aumentado su duración en el tiempo.Sin embargo puede ser que este reajuste en la duración, sumado a la disminución de la cantidad de repuestos de los lapiceros y plumafuente son las que estan amortiguando y reemplazando las ventas de boligrafos. Ahora revisaremos el valor promedio de venta de cada producto.
Sección 7 - Análisis del precio del producto¶
Obtenemos el precio de venta promedio por tipo de producto en cada año
precio_prom_por_anio = round(pd.pivot_table(data=boligrafos, index='Año', columns='Tipo', values='Precio Venta', aggfunc='mean'), 2)
precio_prom_por_anio
Tipo | Boligrafo | Lapicero | Plumafuente |
---|---|---|---|
Año | |||
2016 | 8057.19 | 5469.45 | 5241.48 |
2017 | 8075.90 | 5381.88 | 5402.00 |
2018 | 7815.52 | 5570.51 | 5447.90 |
2019 | 5120.50 | 5403.22 | 5300.43 |
2020 | 4311.48 | 5681.43 | 5559.11 |
2021 | 4172.38 | 5623.62 | 5309.32 |
precio_prom_por_anio.plot(kind='line', marker='o', ylabel='Precio promedio', title='Precio promedio por tipo de producto por año')
plt.show()
Conclución: El precio promedio de los boligrafos es bastante superior casi duplicando el precio de los lapiceros y las plumas fuentes, por lo cual es necesario verificar si este precio esta justificado en otros aspectos que no sean la calidad o la duración de la tinta ya que como lo hemos evaluado anteriormente estos factores o no varian mucho entre si o despues del 2018 se han igualado con respecto a los boligrafos. Por lo cual esta podria ser la razón inicial en la dismución de ventas de los boligrafos, Ya que a pesar que desde el 2019 disminuyeron sus precios de forma significativa, siguen si cambiar esa tendencia a la baja de la venta de boligrafos.
Sección 8 - Análisis de las demas variables del producto (metales, color de tinta, estuche, estetica)¶
Metales usados en los productos¶
Obtenemos el precio de venta promedio por tipo de producto en cada año
materiales = pd.pivot_table(data=boligrafos, index=['Año', 'Tipo'], values=['Oro (gr)', 'Plata (gr)', 'Platino (gr)'], aggfunc='mean', sort=False).stack(future_stack=True).reset_index()
materiales.columns = ['Año', 'Tipo', 'Material', 'Cantidad']
materiales.head()
Año | Tipo | Material | Cantidad | |
---|---|---|---|---|
0 | 2016 | Boligrafo | Oro (gr) | 0.977956 |
1 | 2016 | Boligrafo | Plata (gr) | 2.559118 |
2 | 2016 | Boligrafo | Platino (gr) | 1.002004 |
3 | 2017 | Boligrafo | Oro (gr) | 0.945255 |
4 | 2017 | Boligrafo | Plata (gr) | 2.611314 |
sns.relplot(data=materiales, x='Año', y='Cantidad', hue='Tipo', col='Material', kind='line', col_wrap=3, height=4, markers=True, marker='o')
plt.show()
Conclución: La cantidad promedio de metales usados en cada producto no ha variado de forma significativa por lo cual no es un factor de peso en la disminución de ingresos.
Color de tinta disponible en los productos¶
Obtenemos el numero de ventas por el color de tinta en cada año
color_por_anio_plot = pd.pivot_table(data=boligrafos, index=['Año','Tipo', 'Color'], values='Valoracion Cliente', aggfunc='count')
color_por_anio = pd.pivot_table(data=boligrafos, index='Año', columns=['Tipo', 'Color'] , values='Valoracion Cliente', aggfunc='count')
color_por_anio
Tipo | Boligrafo | Lapicero | Plumafuente | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Color | Azul | Negro | Rojo | Verde | Azul | Negro | Rojo | Verde | Azul | Negro | Rojo | Verde |
Año | ||||||||||||
2016 | 143 | 201 | 78 | 77 | 114 | 180 | 58 | 56 | 110 | 177 | 65 | 75 |
2017 | 156 | 233 | 81 | 78 | 108 | 192 | 62 | 69 | 123 | 138 | 57 | 55 |
2018 | 159 | 249 | 76 | 97 | 95 | 161 | 50 | 64 | 104 | 173 | 48 | 71 |
2019 | 138 | 200 | 63 | 60 | 108 | 193 | 58 | 60 | 123 | 202 | 60 | 61 |
2020 | 108 | 149 | 54 | 40 | 139 | 216 | 65 | 64 | 132 | 211 | 66 | 79 |
2021 | 78 | 126 | 43 | 42 | 144 | 232 | 63 | 75 | 145 | 215 | 92 | 63 |
sns.relplot(data=color_por_anio_plot, x='Año', y='Valoracion Cliente', hue='Color', col='Tipo', kind='line', col_wrap=3, height=4, markers=True, marker='o', palette=['blue','black','red','green'])
plt.ylabel('numero de boligrafos')
plt.show()
Conclución: La cantidad de disminuye y aumenta cada producto por color mantiene el patron de los ingresos, por lo cual tampoco es un factor relevante.
Se entrega estuche con el producto?¶
Obtenemos el numero de ventas en las que se entrego un estuche en cada año
estuche_por_anio_plot = pd.pivot_table(data=boligrafos, index=['Año', 'Tipo', 'Estuche'], values='Valoracion Cliente', aggfunc='count')
estuche_por_anio = pd.pivot_table(data=boligrafos, index='Año', columns=['Tipo', 'Estuche'], values='Valoracion Cliente', aggfunc='count')
estuche_por_anio
Tipo | Boligrafo | Lapicero | Plumafuente | |||
---|---|---|---|---|---|---|
Estuche | No | Si | No | Si | No | Si |
Año | ||||||
2016 | 266 | 233 | 197 | 211 | 206 | 221 |
2017 | 281 | 267 | 217 | 214 | 189 | 184 |
2018 | 296 | 285 | 190 | 180 | 200 | 196 |
2019 | 229 | 232 | 222 | 197 | 230 | 216 |
2020 | 166 | 185 | 249 | 235 | 231 | 257 |
2021 | 151 | 138 | 257 | 257 | 258 | 257 |
sns.relplot(data=estuche_por_anio_plot, x='Año', y='Valoracion Cliente', hue='Estuche', col='Tipo', kind='line', col_wrap=3, height=4, markers=True, marker='o')
plt.show()
Conclución: Que el producto incluya un estuche no resulta en ser un factor relevante en la venta del producto en si, ya que las ventas de los que si lo incluyen y los que no son bastante similares.
Estetica del producto¶
Obtenemos la valoración estetica promedio por tipo de producto en cada año
estetica_por_anio_plot = pd.pivot_table(data=boligrafos, index=['Año', 'Tipo'], values='Estetica', aggfunc='mean')
estetica_por_anio = pd.pivot_table(data=boligrafos, index='Año', columns='Tipo', values='Estetica', aggfunc='mean')
estetica_por_anio
Tipo | Boligrafo | Lapicero | Plumafuente |
---|---|---|---|
Año | |||
2016 | 74.166333 | 73.644608 | 73.997658 |
2017 | 74.906934 | 76.204176 | 74.474531 |
2018 | 74.685026 | 74.605405 | 74.366162 |
2019 | 74.774403 | 75.863962 | 75.589686 |
2020 | 73.874644 | 74.859504 | 74.899590 |
2021 | 75.339100 | 74.394942 | 75.120388 |
sns.relplot(data=estetica_por_anio_plot, x='Año', y='Estetica', col='Tipo', kind='line', col_wrap=3, height=4, markers=True, marker='o')
plt.show()
Conclución: En el caso de la calificación estetica no se corresponde con el patron de ventas, ademas que resulta bastante erratica la calificación y de forma aparente no resulta ser un factor en la disminución de las ventas.
Sección 9 - Verificación de la correlación entre variables¶
Si bien ya hemos revisado todas las variables y podriamos tener unca conclución del porque de la disminución de ventas, no sobra asegurarnos observando la correlación de las diferentes variables que disponemos en la base de datos por si hubiesemos omitido algo.
h = boligrafos.apply(lambda x: pd.factorize(x)[0]).corr()
plt.figure(figsize = (16,7.7))
sns.heatmap(data = h, annot = True, fmt='.1g')
plt.show()
Conclución: La correlación entre variables es casi inexistente y el precio de venta y las ganancias estan principalmente correlacionadas con el tipo de producto, por lo cual no hemos omitido ningun patron implicito en los datos.
Conclución de cierre¶
El precio promedio de los boligrafos desde el el 2016 era muy superior al de los lapiceros y pluma fuente, esta diferencia de precios no se ve justificada en materiales, ni en duración o en calidad. Por lo cual pordemos comprender que el valor percibido no era intrinseco al producto boligrafo en si, por lo cual lo que se observa que se esta realizando una corrección del mercado donde en este caso los boligrafos tenian un valor superior al real incentivado por una campaña publicitaria o un convenio con alguna marca que le diera ese valor agregado. Debido ha esto podemos deducir que en el 2018 este factor externo desaparecio y los precios volvieron a la normalidad.