# 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 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')
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')
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')
print(df_orders.dtypes)
df_articles['unit_price'] = df_articles['unit_price'].astype(float)
print(df_articles.dtypes)
# Creo una copia del df_orders
my_df = df_orders.copy()
# Cambio el índice del df_articles
df_articles.set_index('article_id', inplace=True)
print(df_articles.head())
print(my_df.head())
# agrego las columnas que me faltan
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())
# reemplazar los datos ne las nuevas columnas
for i in range(len(my_df.index)):
# columna article_name
# cargo el nombre del artículo en una variable
article = df_articles.loc[my_df.loc[i]['article_name']]['article_name']
# se lo asigno a la columna y registro que corresponde
my_df.loc[i,'article_name']= article
# columna total_amount
my_df.loc[i,'total_amount'] = my_df.loc[i,'quantity'] * df_articles.loc[my_df.loc[i]['article_id']]['unit_price']
# columna de seller_name
my_df.loc[i,'seller_name'] = df_sellers.loc[my_df.loc[i]['seller_name']]['seller_name']
print(my_df.head())
# elimino las columnas que no necesito
my_df.drop(['order_id', 'article_id','seller_id'], axis='columns', inplace=True)
print(my_df.head())
d1=pd.DataFrame({'mes': ['ene','feb','mar','abr'], 'ventas':[10,20,30,15]})
d2=pd.DataFrame({'mes': ['ene','feb','mar','abr'], 'costos':[7,16,25,12]})
print(pd.merge(d1,d2))
# RESOLUCIÓN ANALÍTICA
# Hago una grafica para verlo mejor pero el dato es unico
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 (xticks son los nombres - poner nombre mas bonito )
#grafica de distribucion
sns.displot(my_df, x = 'article_name')
plt.xticks(rotation = 90 )
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
plt.pie(x=my_df3['total_amount'], labels=my_df3.index)
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'],width=0.5)
plt.xticks(rotation=90)
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'], width= 0.6, color = ['salmon','teal','gold', 'lime'])
plt.xticks(np.arange(5))
plt.title('Distribucion de venta en el mes')
plt.xlabel ('Semana')
plt.ylabel ('Total Vendido')
plt.show()
# RESOLUCIÓN
my_df6 = (my_df.groupby('country_name').sum()).sort_values('total_amount', ascending=False).head(1)
print(my_df6['total_amount'].head(1))
my_df7 = (my_df.groupby('country_name').sum()).sort_values('total_amount', ascending=True).head(1)
print(my_df7['total_amount'].head(1))
# RESOLUCIÓN
my_df8 = (my_df.groupby('country_name').mean()).sort_values('total_amount')
print(my_df8['total_amount'])
# RESOLUCIÓN
sns.stripplot(data= my_df , x = 'country_name', y = 'total_amount', hue ='week' )
plt.xticks(rotation=90)
plt.show()
1. ¿Cuál es el artículo más vendido? (en unidades)
El articulo mas vendido es HDD 413
2. ¿Qué artículo es el que más ingresos nos proporcionó?
El articulo de mas ingresos es Full Pc los ingresos son $ 538335.93
3. A qué vendedor debe otorgarse el bono por "Mejor vendedor del mes"?
El mejor vendedor del mes es Janel O'Curran quien vendio 703 unidades con un total de $ 192832.47
4. ¿Hay grandes variaciones en ventas a lo largo del mes?
Si . las 2 primeras semanas concentran la mayor parte (+60% ) de la venta total del mes.
5. Que pais es el que mas vende ? y el que menos vende ?
El pais que mas vende es Brasil y el que menos vende es Puerto Rico
6. Cual es el promedio de Ingresos por pais
Paraguay 482.065882
Puerto Rico 632.715000
Chile 880.749286
Honduras 967.462105
Ecuador 970.850000
Bolivia 1193.831579
Peru 1291.368960
Mexico 1372.475149
Brazil 1400.863016
Uruguay 1486.924167
Colombia 1599.227838
Guatemala 1813.077586
Costa Rica 1821.394737
Argentina 1821.529027
Venezuela 2099.581622
El Salvador 3586.953750
7. En que semana se tienen los mayores ingresos por pais ?
En la semana 1 y 2 de cada pais , excepto en El salvador que es la semana 3 y Colombia semana 4