# A veces necesitamos instalar nuevas librerías en nuestros proyectos
!pip install openpyxl==3.0.10
# imports
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
#para la base de datos
import sqlite3 as sql3
# Levanto los datos en 3 diferentes dataframes
# Articulos
con = sql3.connect('/work/data/articles.db')
sql_query = pd.read_sql_query('SELECT * FROM articles', con)
df_articulos = pd.DataFrame(sql_query, columns=['article_id', 'article_name', 'unit_price'])
print(df_articulos)
# Orders
df_ordenes = pd.read_csv('/work/data/orders.csv')
print(df_ordenes)
# Sellers
df_vendedores = pd.read_excel('/work/data/sellers.xlsx', index_col=0)
print(df_vendedores)
# Exploración del df de artículos
print('Muestra de datos:')
print(df_articulos.head())
print('\nFormato del dataframe:')
print(df_articulos.shape)
print('\nDatos nulos:')
print(df_articulos.isnull().sum())
print('\nFormato de los datos:')
print(df_articulos.dtypes)
# Exploración del df de vendedores
print('Muestra de datos:')
print(df_vendedores.head())
print('\nFormato del dataframe:')
print(df_vendedores.shape)
print('\nDatos nulos:')
print(df_vendedores.isnull().sum())
print('\nFormato de los datos:')
print(df_vendedores.dtypes)
# Exploración del df de órdenes
print('Muestra de datos:')
print(df_ordenes.head())
print('\nFormato del dataframe:')
print(df_ordenes.shape)
print('\nDatos nulos:')
print(df_ordenes.isnull().sum())
print('\nFormato de los datos:')
print(df_ordenes.dtypes)
df_articulos['unit_price'] = df_articulos['unit_price'].astype(float)
print(df_articulos.dtypes)
mi_df = df_ordenes.copy()
#Cambio el indice del df articulos
df_articulos.set_index('article_id', inplace=True)
print(df_articulos)
print(mi_df.head())
#Agrego las columnas: article_name, total_amount, seller_name
mi_df = mi_df.assign(article_name = mi_df['article_id'])
mi_df = mi_df.assign(total_amount = mi_df['article_id'])
mi_df = mi_df.assign(seller_name = mi_df['seller_id'])
print(mi_df.head())
# Reemplazar los daos en las nuevas columnas
for i in range(len(mi_df.index)):
'''
COLUMNA ARTICLE_NAME
'''
articleID = mi_df.loc[i]['article_name']
article = df_articulos.loc[articleID]['article_name']
#se lo asigno a la columna y registro que corresponde
mi_df.loc[i, 'article_name'] = article
'''COLUMNA TOTAL_AMOUNT'''
mi_df.loc[i, 'total_amount'] = mi_df.loc[i,'quantity'] * df_articulos.loc[mi_df.loc[i]['total_amount']]['unit_price']
'''COLUMNA SELLER_NAME'''
mi_df.loc[i, 'seller_name'] = df_vendedores.loc[mi_df.loc[i]['seller_name']]['seller_name']
print(mi_df.head())
# Elimino las columnas que no necesito
mi_df.drop(['order_id','article_id','seller_id'], axis='columns', inplace=True)
print(mi_df.head())
# RESOLUCIÓN ANALÍTICA
mi_df2 = mi_df.groupby('article_name').sum()
por_cant = mi_df2.sort_values('quantity', ascending=False)
print(por_cant['quantity'].head(1))
# RESOLUCIÓN GRÁFICA
sns.set(style='darkgrid')
g = sns.displot(mi_df, x='article_name',height=5,color="pink", linewidth=2,aspect=2)
plt.xticks(rotation=90)
g.set(xlabel = "Nombre de Articulo", title="Cantidad de articulos vendidos ", ylabel="Cantidad Vendida")
plt.show()
# RESOLUCIÓN ANALÍTICA
mi_df3 = (mi_df.groupby('article_name').sum()).sort_values('total_amount', ascending=True).head()
print(mi_df3['total_amount'])
# RESOLUCIÓN GRÁFICA
plt.pie(x=mi_df3['total_amount'], labels=mi_df3.index,shadow=True, colors=['turquoise', 'plum','teal','hotpink', 'pink'])
plt.show()
# RESOLUCIÓN ANALÍTICA
mi_df4 = (mi_df.groupby('seller_name').sum()).sort_values('total_amount', ascending=False)
print(mi_df4[['quantity']+['total_amount']])
# RESOLUCIÓN GRÁFICA
plt.bar(mi_df4.index, mi_df4['total_amount'],color=['orchid','lightpink'])
#(xlabel = "Vendedores", title="Total recaudado por vendedor", ylabel="Total de venta")
plt.xlabel('Vendedores')
plt.ylabel('Total de venta')
plt.title('Total recaudado por vendedor')
plt.xticks(rotation=45)
plt.show()
# RESOLUCIÓN ANALÍTICA
mi_df5 = (mi_df.groupby('week').sum()).sort_values('total_amount', ascending=False)
print(mi_df5)
# RESOLUCIÓN GRÁFICA
plt.bar(mi_df5.index, mi_df5['total_amount'],color=['darkgreen','seagreen','mediumseagreen','mediumaquamarine'])
plt.title('Variaciones en ventas del mes')
plt.xlabel('Mes')
plt.ylabel('Ventas')
plt.show()
# RESOLUCIÓN
#mi_df.groupby('article_name').sum()).sort_values('total_amount', ascending=True).head()
pregunta1 = (mi_df.groupby('country_name').sum()).sort_values('quantity', ascending=False).head(5)
pregunta1
plt.bar(pregunta1.index, pregunta1['quantity'], color=['hotpink', 'pink','pink','pink','pink'])
plt.title('Mejores 5 paises en ventas')
plt.xlabel('Paises')
plt.ylabel('Cantidad en ventas')
plt.show()