# Levanto los datos en 3 diferentes dataframes
#Articulos
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'])
#df_articles
#Vendedores
df_sellers = pd.read_excel('/work/data/sellers.xlsx', index_col=0)
#df_sellers
#Ordenes
df_orders = pd.read_csv('/work/data/orders.csv')
#df_orders
# Exploración del df de artículos
# Exploración del df de artículos
print('Muestra de datos')
print(df_articles.head())
print('\nForma del dataframe')
print(df_articles.shape)
print('\nBuscar valores nulos')
print(df_articles.isnull().sum())
print('\nFormato de los datos del dataframe')
print(df_articles.dtypes)
# Exploración del df de vendedores
# Exploración del df de artículos
print('Muestra de datos')
print(df_sellers.head())
print('\nForma del dataframe')
print(df_sellers.shape)
print('\nBuscar valores nulos')
print(df_sellers.isnull().sum())
print('\nFormato de los datos del dataframe')
print(df_sellers.dtypes)
# Exploración del df de órdenes
print('Muestra de datos')
print(df_orders.head())
print('\nForma del dataframe')
print(df_orders.shape)
print('\nBuscar valores nulos')
print(df_orders.isnull().sum())
print('\nFormato de los datos del dataframe')
print(df_orders.dtypes)
# Cambar a float los precios unitarios
df_articles['unit_price'] = df_articles['unit_price'].astype(float)
print(df_articles.dtypes)
week quantity country_name article_name total_amount seller_name
0 1 10 Peru Water Cooling 675.0 Cirilo Grandham
1 1 15 Peru Mouse 454.5 Ewell Peres
2 1 5 Bolivia Netbook 725.0 Janel O'Curran
3 1 9 Brazil Tablet 1170.0 Janel O'Curran
4 1 6 Mexico Case 227.4 Daisie Slograve
# RESOLUCIÓN ANALÍTICA
my_df2 = my_df.groupby('article_name').sum()
por_cantidad = my_df2.sort_values('quantity', ascending=False)
print(por_cantidad['quantity'].head(1))
article_name
HDD 413
Name: quantity, dtype: int64
# RESOLUCIÓN GRÁFICA
sns.barplot(x=my_df2.index, y=my_df2['quantity'], data=my_df2, order=my_df2.sort_values('quantity',ascending=False).index).set(title='Ventas por articulo')
plt.xlabel('Cantidad vendida')
plt.ylabel('Producto')
plt.xticks(rotation=90)
plt.show()
# RESOLUCIÓN ANALÍTICA
por_total = my_df2.sort_values('total_amount', ascending=False)
print(por_total['total_amount'].head(1))
article_name
Full Pc 538335.93
Name: total_amount, dtype: float64
# RESOLUCIÓN GRÁFICA
# OJO: Solo graficamos los 5 primeros productos, si ponemos el porcentaje de cada uno en el grafico,
# no sería el numero real.
por_total=por_total.head()
plt.pie(x=por_total['total_amount'], labels=por_total.index)
plt.title('5 artículos que más ingresos proporcionaron')
plt.show()
my_df3 = my_df.groupby('seller_name').sum()
por_vendedor = my_df3.sort_values('total_amount', ascending=False).head()
print(por_vendedor['total_amount'].head(1))
#df3 = my_df.groupby('seller_name').sum().sort_values('total_amount', ascending = False)
#print(df3[['quantity']+['total_amount']].head(1))
seller_name
Janel O'Curran 192832.47
Name: total_amount, dtype: float64
# RESOLUCIÓN GRÁFICA
plt.bar(por_vendedor.index,por_vendedor['total_amount'])
plt.xlabel('Vendedor')
plt.ylabel('Total de ventas')
plt.title('Mejores vendedores por mes')
plt.xticks(rotation=75)
plt.show()
# RESOLUCIÓN ANALÍTICA
my_df4 = my_df.groupby('week').sum()
por_semana = my_df4.sort_values('total_amount', ascending=False)
print(por_semana['total_amount'])
week
1 507458.81
2 415364.44
3 329140.03
4 223844.56
Name: total_amount, dtype: float64
# RESOLUCIÓN GRÁFICA
plt.plot(por_semana.index,por_semana['total_amount'],'cadetblue')
plt.xlabel('Semana')
plt.ylabel('Montos de ventas')
plt.title('Ventas por semana')
plt.xticks(range(1, 5, 1))
plt.show()
# RESOLUCIÓN
articulos_semana = my_df4.sort_values('quantity', ascending=False)
print(articulos_semana['quantity'])
plt.bar(por_semana.index,por_semana['quantity'])
plt.xlabel('Semana')
plt.ylabel('Cantidad de productos')
plt.title('Productos vendidos por semana')
plt.xticks(range(1, 5, 1))
plt.show()
week
1 2449
2 2444
3 2114
4 1058
Name: quantity, dtype: int64
En este caso, analizando la cantidad de productos que se vendieron en cada semana, podemos hacer una comparación con la pregunta 4. Si bien en la semana 2 disminuyen los ingresos por venta, se venden la misma cantidad de productos. Por lo tanto, recién en la semana 3 sería eficiente hacer una campaña para mejorar la recaudación
# RESOLUCIÓN
my_df6 = my_df.groupby('country_name').sum()
pais_cantidad= my_df6.sort_values('quantity', ascending=False).head()
print(pais_cantidad)
week quantity total_amount
country_name
Brazil 717 2515 441271.85
Peru 266 1027 161421.12
Argentina 241 947 205832.78
Colombia 230 881 177514.29
Mexico 237 846 138619.99
col = ['peru', 'yellowgreen', 'darkturquoise', 'orchid', 'royalblue']
plt.pie(x=pais_cantidad['total_amount'], explode=(0.05,0.05,0.05,0.05,0.05), labels=pais_cantidad.index, colors=col, autopct=None)
plt.title('Países que más compraron en el mes')
plt.show()
Este resultado sirve para identificar los paises que más compra y poder diagramar estrategias particulares para los mismos
# RESOLUCIÓN
my_df6 = my_df.loc[my_df['article_name'] =='HDD'].groupby('country_name').sum()
hddpais = my_df6.sort_values('quantity', ascending=False)
hddpais.drop(['week','total_amount'],axis='columns', inplace=True)
hddpais = hddpais.head()
c = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue', 'tomato']
plt.pie(x=hddpais['quantity'], explode=(0.1,0,0,0,0), labels=hddpais.index, colors=c, autopct='%1.2f%%')
plt.title('5 países que más compraron el producto más vendido')
plt.show()
De manera similar a la pregunta 6, en esta podemos identificar los países que más compran el producto estrella, el best seller de la compañía, y acomodar el producto, por ejemplo, al idioma de los países.