# A veces necesitamos instalar nuevas librerías en nuestros proyectos
#el pip install lo hago dentro de la consola del sistema op no la de python
#pongo el signo para que me saque de la consola de python
!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
#ARTULOS
conn = sql3.connect('/work/data/articles.db') #me conecto a la base de datos
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)#la columna 0 va a ser mi indice
#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('\n Formato del df')
print(df_articles.shape)
print('\n Busqueda de valores nulos por columna')
print(df_articles.isnull().sum())
print(df_articles.dtypes)
# Exploración df_sellers
print('Muestra de datos')
print(df_sellers.head())
print('\n Formato del df')
print(df_sellers.shape)
print('\n Busqueda de valores nulos por columna')
print(df_sellers.isnull().sum())
print(df_sellers.dtypes)
# Exploración del df_orders
print('Muestra de datos')
print(df_orders.head())
print('\n Formato del df')
print(df_orders.shape)
print('\n Busqueda de valores nulos por columna')
print(df_orders.isnull().sum())
print(df_orders.dtypes)
#arreglar df los tipo de datos los precios
df_articles['unit_price']=df_articles['unit_price'].astype(float)
print(df_articles.dtypes)
#formato $
pd.options.display.float_format='$ {:,.2f}'.format
df_articles['unit_price']
#creo copia del df base
my_df=df_orders.copy()
#convierto el indice del df articulos
df_articles.set_index('article_id',inplace=True) #solo se ejecuta una vez
#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']) #crea una columna llamada article_name c
my_df=my_df.assign(total_amount=my_df['article_id']) #voy a necesitar al precio unitario
my_df=my_df.assign(seller_name=my_df['seller_id']) #nombre del vendedor
#reemplazar los valores en el nuevo df
#rescatar dato del df de articulo df_article(xq ahora estan solo los id[?] este va ir mutando ['article_name']
#lo hago para cada fila
for i in range(len(my_df.index)): #la longitud de cualquiera de las columnas del df, index mira cuantos indices hay q son la cantidad de filas q tengo (es una lista)
# 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']
# modifical la columna 'seller_name'
my_df.loc[i,'seller_name'] = df_sellers.loc[my_df.loc[i]['seller_name']]['seller_name']
print(my_df)
#elimino columnas id que no sirven para el analis
my_df=my_df.drop(['order_id','article_id','seller_id'],axis=1)
# RESOLUCIÓN ANALÍTICA
my_df2=my_df.groupby('article_name').sum()
por_cant=my_df2.sort_values('quantity',ascending=False)
print(por_cant['quantity'].head(1))
# RESOLUCIÓN GRÁFICA
sns.displot(my_df, x='article_name', color='pink')
plt.xticks(rotation=90)
plt.title('Artículos mas vendidos')
plt.xlabel("")
plt.ylabel("")
plt.show()
# RESOLUCIÓN ANALÍTICA
my_df3 =(my_df.groupby('article_name').sum()).sort_values('total_amount', ascending=False).head(5)
print(my_df3['total_amount'])
# RESOLUCIÓN GRÁFICA
colores=['#ffb3e6', '#c2c2f0','#66b3ff', '#99ff99','#ffcc99']
plt.pie(x=my_df3['total_amount'],labels=my_df3.index, colors=colores)
plt.title('Artículos que generan mas ingresos($)')
plt.show()
# RESOLUCIÓN ANALÍTICA
my_df4 = (my_df.groupby('seller_name').sum()).sort_values('total_amount', ascending=False)
print(my_df4[['quantity']+['total_amount']])
# RESOLUCIÓN GRÁFICA
sns.barplot(my_df4.index, my_df4['total_amount'],color='pink')
plt.xticks(rotation=60)
plt.title('Mejor vendedor')
plt.xlabel("")
plt.ylabel("$")
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
sns.barplot(my_df5.index,my_df5['total_amount'],palette='pastel')
plt.title('Ventas por semana ($)')
plt.xlabel("semana")
plt.ylabel("$")
# RESOLUCIÓN
df_1 = (my_df.groupby('country_name').sum()).sort_values('total_amount', ascending=False).head(3)
#df_1=df_1.head(2)
print(df_1['total_amount'])
import seaborn as snNew
import matplotlib.pyplot as pltNew
snNew.barplot(y=df_1.index,x=df_1['total_amount'],palette='pastel')
plt.title('Ventas por país')
plt.xlabel("$")
plt.ylabel("")
pltNew.show()
#me quedo solo con los datos correspondienres a brasil y argentina
df_ab=my_df.loc[(my_df['country_name']=='Brazil')|(my_df['country_name']=='Argentina')]
sns.catplot( x='week',y='total_amount', hue='country_name', kind='swarm',data=df_ab,palette = 'Set2')
plt.title('Ventas ($) Argentina/Brazil por semana')
En las primeras 3 semanas existen mas movimientos de ventas que en la ultima por la concentración de puntos, algo que es en general con todos los países, las misma en su mayoría no superan el importe de $5.000, salvo algún que otro caso los días lunes y martes. La mayor cantidad de transacciones es de Brasil.
cant_sem=(df_ab.groupby(['country_name','week']).sum()).sort_values('quantity',ascending=False)
print(cant_sem['quantity'])
El volumen de ventas en Brasil en cuanto a cantidad de productos se dan en las primeras 3 semanas, y en Argentina se da la segunda semana del mes.
br=my_df.loc[(my_df['country_name']=='Brazil')]
grupo_br =(br.groupby('article_name').sum()).sort_values('quantity', ascending=False).head(5)
print(grupo_br['quantity'])
snNew.barplot(y=grupo_br.index,x=grupo_br['quantity'],palette='pastel')
plt.title('Productos mas demandados en Brazil')
plt.xlabel("")
plt.ylabel("")
pltNew.show()
# RESOLUCIÓN
ar=my_df.loc[(my_df['country_name']=='Argentina')]
grupo_ar =(ar.groupby('article_name').sum()).sort_values('quantity', ascending=False).head(5)
print(grupo_ar['quantity'])
snNew.barplot(y=grupo_ar.index,x=grupo_ar['quantity'],palette='pastel')
plt.title('Productos mas demandados en Argentina')
plt.xlabel("")
plt.ylabel("")
pltNew.show()