# 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
# Levanto los datos en 3 diferentes dataframes
#ARTÍCULOS
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'])
print(df_articles)
# VENDEDORES
# df_sellers = pd.read_excel('/work/data/sellers.xlsx', index_col=0)
print(df_sellers)
# ÓRDENES
df_orders=pd.read_csv('/work/data/orders.csv')
print(df_orders)
# Exploración del df de artículos
print('Muestra de los datos')
print(df_articles.head())
print('\nFormato del dataframe')
print(df_articles.shape)
print('\nBúsqueda de valores nulos')
print(df_articles.isnull().sum())
print('\nFormato de los datos por columna')
print(df_articles.dtypes)
# Exploración del df de vendedores
print('Muestra de los datos')
print(df_sellers.head())
print('\nFormato del dataframe')
print(df_sellers.shape)
print('\nBusqueda de valores nulos')
print(df_sellers.isnull().sum())
print('\nFormato de los datos por columna')
print(df_sellers.dtypes)
# Exploración del df de órdenes
print('Muestra de los datos')
print(df_orders.head())
print('\nFormato del dataframe')
print(df_orders.shape)
print('\nBusqueda de valores nulos')
print(df_orders.isnull().sum())
print('\nFormato de los datos por columna')
print(df_orders.dtypes)
# cambio el tipo de dato de 'unit.price' a float
df_articles['unit_price'] = df_articles['unit_price'].astype(float)
print(df_articles.dtypes)
# cambio el índice del df_articles por la columna article_id
# df_articles.set_index('article_id', inplace=True)
print(df_articles.head())
# creo una copia del df_orders
my_df = df_orders.copy()
#agrego algunas columnas extra que necesito y las lleno con los códigos id que las vinculan con los otros df
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(my_df.head())
# Reemplazo los valores en las nuevas columnas del df
for i in range(len(my_df.index)):
#article = df_articles.loc[my_df.loc[i]['article_name']]['article_name']
#my_df.loc[i, 'article_name'] = article
#my_df.loc[i,'total_amount'] = my_df.loc[i,'quantity'] * df_articles.loc[my_df.loc[i]['total_amount']]['unit_price']
#my_df.loc[i,'seller_name'] = df_sellers.loc[my_df.loc[i]['seller_name']]['seller_name']
print(my_df.head())
# Borrar las columnas que no voy a utilizar
my_df.drop(['order_id','article_id','seller_id'], axis='columns', inplace=True)
print(my_df.head())
# RESOLUCIÓN ANALÍTICA
df2 = my_df.groupby('article_name').sum()
por_cant = df2.sort_values('quantity', ascending=False)
print(por_cant['quantity'].head(1))
print(df2.head())
# RESOLUCIÓN GRÁFICA
sns.barplot(x=df2.index,y=df2['quantity'],data=df2,order=df2.sort_values('quantity', ascending=False).index)
plt.title('Artículos más vendidos')
plt.xticks(rotation=90)
plt.show()
# RESOLUCIÓN ANALÍTICA
df3=(my_df.groupby('article_name').sum()).sort_values('total_amount', ascending=False).head(5)
print(df3['total_amount'])
# RESOLUCIÓN GRÁFICA
plt.pie(x=df3['total_amount'],labels=df3.index)
plt.title('ARTÍCULO QUE MÁS INGRESOS PROPORCIONÓ')
plt.show()
# RESOLUCIÓN ANALÍTICA
df4 =(my_df.groupby('seller_name').sum()).sort_values('total_amount',ascending=False)
print('Respuesta:',df4.head(1))
print()
print(df4[['quantity']+['total_amount']])
# RESOLUCIÓN GRÁFICA
plt.bar(df4.index, df4['total_amount'])
plt.title('MEJOR VENDEDOR DEL MES')
plt.xticks(rotation=60)
plt.show()
# RESOLUCIÓN ANALÍTICA
df5 = (my_df.groupby('week').sum()).sort_values('total_amount',ascending=False)
print(df5)
# RESOLUCIÓN GRÁFICA
plt.bar(df5.index,df5['total_amount'])
plt.title('VARIACIONES EN EL MES')
plt.show()
# RESOLUCIÓN
df6=(my_df.groupby('country_name').sum()).sort_values('total_amount', ascending=False)
print('Respuesta:',df6.head(1))
print()
# RESOLUCIÓN GRÁFICA
df7=df6[:5]
plt.bar(df7.index,df7['total_amount'])
plt.title('PAIS QUE MAS COMPRÓ')
plt.show()
El artículo más vendido fue el HDD con 413 unidades y el que más ingresos generó fue la FULL PC con un importe de $538335.93.
El mejor vendedor del mes, siendo a quien se le debe otorgar el bono fue "Janel O'Curran" con un monto total de venta de $ 192832.47.
Se dan grandes variaciones en ventas durante el mes disminuyendo en la cuarta semana. Se sugiere lanzar una campaña de promociones en la tercer semana para mejorar la cuarta dependiendo de la estrategia de venta.
El país que más compró fue "Brazil" con un importe total de $441271.85.