# A veces necesitamos instalar nuevas librerías en nuestros proyectos
!pip install openpyxl==3.0.10
# imports
import numpy as np
import pandas as pd
import sqlite3 as sql3
import matplotlib.pyplot as plt
import seaborn as sns
#import openpyxl # para levantar excel de otros paqueres (no office)
# Levanto los datos en 3 diferentes dataframes
#Articulos
conn = sql3.connect('/work/data/articles.db')
sql_query = pd.read_sql_query('SELECT * FROM articles', conn)
df_articles = pd.DataFrame(sql_query, columns=['article_id', 'article_name', 'unit_price'])
#df_articles
#Vendedores
df_sellers = pd.read_excel('/work/data/sellers.xlsx', index_col=0)
#df_sellers
#Ordenes
df_orders = pd.read_csv('/work/data/orders.csv')
#df_orders
#sql_query
df_articles
# Exploración del df de artículos
print('Muestra de datos')
print(df_articles.head())
print('\nForma del dataframe')
print(df_articles.shape)
print('\nBuscar valores nulos')
print(df_articles.isnull().sum())
print('\nFormato de los datos del dataframe')
print(df_articles.dtypes)
# Exploración del df de vendedores
print('Muestra de datos')
print(df_sellers.head())
print('\nForma del dataframe')
print(df_sellers.shape)
print('\nBuscar valores nulos')
print(df_sellers.isnull().sum())
print('\nFormato de los datos del dataframe')
print(df_sellers.dtypes)
# Exploración del df de órdenes
print('Muestra de datos')
print(df_orders.head())
print('\nForma del dataframe')
print(df_orders.shape)
print('\nBuscar valores nulos')
print(df_orders.isnull().sum())
print('\nFormato de los datos del dataframe')
print(df_orders.dtypes)
# Cambar a float los precios unitarios
df_articles['unit_price'] = df_articles['unit_price'].astype(float)
print(df_articles.dtypes)
#Creo una copia del df_orders
my_df = df_orders.copy()
# Cambio el indice del df_articles
df_articles.set_index('article_id', inplace=True)
# Agrego 3 columnas y pongo el campo que me va a servir de "ancla" para buscar la información real.
my_df = my_df.assign(article_name = my_df['article_id'])
my_df = my_df.assign(total_amount = my_df['article_id'])
my_df = my_df.assign(seller_name = my_df['seller_id'])
print(df_articles)
#Reemplazar los valores reales en el df
for i in range (len(my_df.index)): #len(my_df.index) devuelva la cantidad de filas (registros)
#reemplazo el nombre del articulo usando el id guardado en my_df
article = df_articles.loc[my_df.loc[i]['article_id']]['article_name']
my_df.loc[i, 'article_name'] = article
#reemplazo el nombre del vendedor usando el id guardado en my_df
my_df.loc[i, 'seller_name'] = df_sellers.loc[my_df.loc[i]['seller_id']]['seller_name']
#busco el pecio unitario y lo multiplico por la cantidad de unidades vendidas.
my_df.loc[i, 'total_amount'] = df_articles.loc[my_df.loc[i]['article_id']]['unit_price'] * my_df.loc[i, 'quantity']
#elimino las columnas que no utilizo
my_df.drop(['article_id', 'seller_id', 'order_id'], axis='columns', inplace=True)
print(my_df.head())
# RESOLUCIÓN ANALÍTICA
my_df2 = my_df.groupby('article_name').sum()
por_cantidad = my_df2.sort_values('quantity', ascending=False)
print(por_cantidad['quantity'].head(1))
#RESOLUCION GRAFICA <<<<<Mi propuesta de gráfico>>>>>
#my_df2_sort = my_df2.sort_values('quantity', ascending=False)
#my_df2_sort['quantity'].plot(kind='barh', color= 'green', alpha= 0.8)
plt.figure(figsize=(10,5))
plt.bar(por_cantidad.index, por_cantidad['quantity'],color= 'purple', alpha= 0.6, width=0.9)
plt.ylabel('Cantidad vendida')
plt.xlabel('Producto')
plt.title('Ventas por articulo')
plt.xticks(rotation=90)
plt.show()
# RESOLUCIÓN ANALÍTICA
my_df2 = my_df.groupby('article_name').sum()
mas_ingresos = my_df2.sort_values('total_amount', ascending=False).head()
print(mas_ingresos['total_amount'])
# RESOLUCIÓN GRÁFICA <<<<<Mi propuesta de gráfico2>>>>>
plt.figure(figsize =(10, 7))
x = [1, 2, 3, 4]
colors = plt.get_cmap('Purples')(np.linspace(0.2, 0.7, len(x)))
plt.pie(x=mas_ingresos['total_amount'], labels=mas_ingresos.index, colors = colors )
plt.title('Ingresos por articulo')
plt.show()
#prueba analitica <<<<<Mi propuesta. Pregunta3>>>>>
my_df2 = my_df.groupby('seller_name').sum()
mas_ingresos = my_df2.sort_values('total_amount', ascending=False).head()
print(mas_ingresos[['quantity']+ ['total_amount']].head(1))
# RESOLUCIÓN GRÁFICA <<<<<Mi propuesta de gráfico. Pregunta3>>>>>
plt.figure(figsize=(10,5))
plt.barh(df3.index,df3['total_amount'],color= 'purple', alpha= 0.4)
plt.xlabel('ingresos generados')
plt.ylabel('Vendedor')
plt.title('Principales vendedores')
plt.xticks(rotation=90)
plt.show()
# RESOLUCIÓN ANALÍTICA
df4 = my_df.groupby('week').sum()
print(df4)
# RESOLUCIÓN GRÁFICA <<<<<Mi propuesta de gráfico.Pregunta4>>>>>
plt.figure(figsize =(10, 7))
x = [1, 2, 3, 4]
colors = plt.get_cmap('Purples')(np.linspace(0.2, 0.7, len(x)))
week=['semana1','semana2','semana3', 'semana4']
#df4.index
plt.pie(x=df4['total_amount'], labels=week, colors = colors, autopct='%1.1f%%' )
plt.title('Ventas en el mes. Indicado por semana')
plt.show()
# RESOLUCIÓN Pregunta: Cuál es el país al que más se le vendió en el último mes?
df5 = my_df.groupby('country_name').sum().sort_values('total_amount', ascending = False)
print(df5[['total_amount']].head(5))
plt.bar(df5.index,df5['total_amount'],color= 'purple', alpha= 0.6, width=0.9)
plt.xlabel('Paises clientes')
plt.ylabel('Cantidad vendida')
plt.title('Principales clientes')
plt.xticks(rotation=75)
plt.show()
# RESOLUCIÓN PREGUNTA 6: CUAL ES PRODUCTO MÁS VENDIDO EN ARGENTINA (unidades)?
#primero obtengo todos los registros donde el pais sea Argentina
v10=my_df.loc[my_df['country_name'] =='Argentina']
print(v10)
#segundo: ordeno de manera descendente los registros para obtener el articulo mas vendido
v10 = v10.groupby('article_name').sum()
por_cant = v10.sort_values('quantity', ascending=False)
print(por_cant['quantity'].head(1))
#resolución grafica Pregunta 6
plt.figure(figsize=(10,5))
plt.bar(por_cant.index, por_cant['quantity'],color= 'purple', alpha= 0.6, width=0.9)
plt.ylabel('Cantidad vendida')
plt.xlabel('Producto')
plt.title('Ventas por articulo en Argentina')
plt.xticks(rotation=90)
plt.show()
# RESOLUCIÓN Promedio de los ingresos del producto más vendido en Argentina.
#a partir de la copia creada de my_df quiero el promedio de los productos
v11 = v10.groupby('article_name').mean()
por_cant11 = v11.sort_values('total_amount', ascending=False)
print(por_cant['total_amount'].head(5))
#RESOLUCIÓN GRÁFICA Pregunta 7
plt.figure(figsize=(10,5))
plt.bar(por_cant11.index, por_cant11['total_amount'],color= 'purple', alpha= 0.6, width=0.9)
plt.ylabel('Ingresos generados')
plt.xlabel('Producto')
plt.title('Promedio de ventas por articulo en Argentina')
plt.xticks(rotation=90)
plt.show()
#Al momento de analizar las ventas durante el mes, con la ayuda un grafico de torta (grafico 4)
#nos podemos dar cuenta de que las ventas caen al rededor de un 50% en la última semana
#comparadas con la primer semana del mismo mes, por lo que es el momento oportuno para impulsar
# una campaña de promociones y descuentos con el fin de levantar estas ventas.
#A nivel global podemos observar que el articulo con más demanda en el mercado es el HDD, sin embargo los
# mayores ingresos provienen del producto Full PC. Comparando a nivel local, en Argentina se comercializa
# más el producto CPU, siendo el producto Full PC el que genera más ingresos.
#En ambos casos la mayor rentabilidad proveniene del producto full PC.
#sería interesante analizar, a nivel estrategia comercial, la relación Ventas del producto Full Pc con
#la etapa del mes.