# A veces necesitamos instalar nuevas librerías en nuestros proyectos
!pip install xlrd
!pip install openpyxl==3.0.10
# imports
import pandas as pd
import numpy as np
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')
query1 = pd.read_sql_query('SELECT * FROM articles',conn)
df_articles=pd.DataFrame(query1,columns=['article_id','article_name','unit_price'])
#VENDEDORES
df_sellers=pd.read_excel('/work/data/sellers.xlsx',index_col=0)
#ORDENES
df_orders=pd.read_csv('/work/data/orders.csv')
print(df_orders)
# 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 por columna')
print(df_articles.isnull().sum())
print('\nFormato de los datos')
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 por columna')
print(df_sellers.isnull().sum())
print('\nFormato de los datos')
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 por columna')
print(df_orders.isnull().sum())
print('\nFormato de los datos')
print(df_orders.dtypes)
df_articles['unit_price']=df_articles['unit_price'].astype(float)
# Creo una copia del df base
my_df = df_orders.copy()
# Cambio el índice del df artículos
df_articles.set_index('article_id', inplace=True)
print(my_df)
#print(df_articles)
# Agrego algunas columnas y pongo el campo que me va a servir de "ancla"
my_df = my_df.assign(article_name = my_df['article_id'])
my_df = my_df.assign(total_amount = my_df['article_id']) # voy a necesitar el unit_price
my_df = my_df.assign(seller_name = my_df['seller_id'])
# reeplazar los valores en el nuevo df
# df_articles[?]['article_name']
for i in range(len(my_df.index)):
# len... devuelve la cantidad de registros
article = df_articles.loc[my_df.loc[i]['article_name']]['article_name']
# reemplazo en la columna 'article_name'
my_df.loc[i,'article_name'] = article
# modificar la columna total_amount
my_df.loc[i,'total_amount'] = my_df.loc[i,'quantity'] * df_articles.loc[my_df.loc[i]['total_amount']]['unit_price']
seller=df_sellers.loc[my_df.loc[i]['seller_name']]['seller_name']
my_df.loc[i,'seller_name']=seller
# elimino las columnas que no necesito
my_df.drop(['order_id','article_id','seller_id'], axis='columns', inplace=True)
print(my_df)
# RESOLUCIÓN ANALÍTICA
my_df2=my_df[['article_name','quantity']]
my_df2=my_df2.groupby('article_name').sum('quantity')
my_df2=my_df2.sort_values('quantity',ascending=False)
print(my_df2.head(1))
# RESOLUCIÓN GRÁFICA
my_df2.plot(kind='bar',title='Unidades por artículo')
# RESOLUCIÓN ANALÍTICA
my_df3=my_df[['article_name','total_amount']]
my_df3=my_df3.groupby('article_name').sum('total_amount')
my_df3=my_df3.sort_values('total_amount',ascending=False)
print(my_df3.head(1))
# RESOLUCIÓN GRÁFICA
plt.bar(my_df3.index,my_df3['total_amount'])
plt.xticks(rotation=90)
plt.title('Monto por artículo')
plt.show()
# RESOLUCIÓN ANALÍTICA
my_df4=my_df[['seller_name','quantity','total_amount']]
my_df4=my_df4.groupby('seller_name').sum().sort_values('quantity',ascending=False)
print(my_df4.head(1))
# RESOLUCIÓN GRÁFICA
plt.bar(my_df4.index,my_df4['quantity'])
plt.xticks(rotation=90)
plt.title('Unidades por vendedor')
plt.show()
# RESOLUCIÓN ANALÍTICA
my_df5=(my_df.groupby('week').sum()).sort_values('total_amount',ascending=False)
print(my_df5)
# RESOLUCIÓN GRÁFICA
plt.scatter(my_df5.index,my_df5['total_amount'])
plt.plot(my_df5.index,my_df5['total_amount'])
plt.title('Monto por semana')
plt.show()
# RESOLUCIÓN
my_df6=my_df[['country_name','quantity','total_amount']]
my_df6=my_df6.groupby('country_name').sum().sort_values('quantity',ascending=False)
print(my_df6.head(1))
# RESOLUCIÓN
countries=my_df6.index.to_list()
countries=countries[:3]
my_df7=my_df[['week','country_name','quantity']]
my_df7=my_df[my_df['country_name'].isin(countries)]
my_df7=my_df7.groupby(['week','country_name']).sum().sort_values('quantity',ascending=False)
my_df7=my_df7.unstack('week')
my_df7=my_df7.stack()
print(my_df7)
sns.relplot(x='week',y='total_amount',col='country_name',data=my_df7)
# RESOLUCIÓN
my_df8=my_df[my_df['week'] == 4]
my_df8=my_df8.groupby('seller_name').sum().sort_values('quantity',ascending=False)
my_df8=my_df8[['quantity','total_amount']]
print(my_df8.head(1))