# Exploración del df de artículos
print('Muestra de 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 datos')
print(df_sellers.head())
print('\nFormato del dataframe')
print(df_sellers.shape)
print('\nBúsqueda 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 datos')
print(df_orders.head())
print('\nFormato del dataframe')
print(df_orders.shape)
print('\nBúsqueda de valores nulos')
print(df_orders.isnull().sum())
print('\nFormato de los datos por columna')
print(df_orders.dtypes)
# MODIFICAR EL TIPO DE DATO DE unit_price en df_articles
df_articles['unit_price'] = df_articles['unit_price'].astype(float)
print(df_articles.dtypes)
# Creo una copia de df_orders que va a ser mi base
my_df = df_orders.copy()
print(my_df)
# Cambio el índice del df_articles
df_articles.set_index('article_id', inplace=True)
#print(df_articles)
# Agrego tres columnas y escribo como dato el campo que me va a servir de nexo
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)
print(df_articles.head())
# Reemplazar los valores en las columnas nuevas de my_df
# print(len(my_df.index)) Se obtiene la cantidad de registros
#Origen del dato que se quiere df.loc[fila(i)][columna 'article_name']
for i in range(len(my_df.index)):
article = df_articles.loc[my_df.loc[i]['article_id']]['article_name']
# my_df.loc[i]['article_name']
# Se asigna a la columna correspondiente
my_df.loc[i,'article_name'] = article
# Manejo de la misma forma total amount
my_df.loc[i,'total_amount'] = df_articles.loc[my_df.loc[i]['article_id']]['unit_price'] * my_df.loc[i,'quantity']
pd.options.display.float_format = '$ {:,.2f}'.format
# Manejo para obtener la columna seller_name
my_df.loc[i,'seller_name'] = df_sellers.loc[my_df.loc[i]['seller_name']]['seller_name']
#Metodo que elimina las columnas que no se necesita
my_df.drop(['order_id', 'article_id','seller_id'], axis='columns', inplace=True)
print(my_df)
# 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))
# RESOLUCIÓN GRÁFICA
sns.displot(my_df,y='article_name', color='turquoise')
plt.figsize=(10,6)
plt.title('Artículos más vendidos')
plt.xlabel('Cantidad')
plt.ylabel('Artículos')
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
# Se consideran los primeros cinco(5) artículos que proporcionarón más ingresos
plt.pie(x=df3['total_amount'], labels=df3.index)
plt.title('Artículos que proporcionan más ingresos')
plt.show()
# RESOLUCIÓN ANALÍTICA
df4 = (my_df.groupby('seller_name').sum()).sort_values('total_amount', ascending=False)
print(df4[['quantity'] + ['total_amount']])
# RESOLUCIÓN GRÁFICA
plt.bar(df4.index, df4['total_amount'], color='darkblue')
plt.xticks(rotation=60)
plt.title('Vendedor del mes')
plt.xlabel('Vendedor')
plt.ylabel('Cantidad vendida')
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'], color='turquoise')
plt.title('Variaciones por mes')
plt.xlabel('Semana')
plt.ylabel('Monto total')
plt.show()
# RESOLUCIÓN
df6 = (my_df.groupby('country_name').sum()).sort_values('total_amount', ascending=False).head(5)
print(df6[['quantity'] + ['total_amount']])
# RESOLUCIÓN GRÁFICA
plt.bar(df6.index, df6['total_amount'],width=0.5, color='g')
plt.title('Países con más ingresos de venta total')
plt.xlabel('País')
plt.ylabel('Monto total')
plt.show()
# RESOLUCIÓN
print(my_df.max())
df1 = (my_df.groupby(['country_name','article_name','quantity']).sum()).sort_values('quantity', ascending=False).head(5)
df1.drop(['total_amount'], axis='columns', inplace=True)
print(df1)