# 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")
query1 = pd.read_sql_query("SELECT * FROM articles", conn)
df_articles = pd.DataFrame(query1, 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 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)
print(df_articles.dtypes)
# 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"]
# modificar 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 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.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="orange")
plt.xticks(rotation=90)
plt.title("ARTÍCULOS MAS VENDIDOS")
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.style.use("seaborn-dark-palette")
plt.pie(x=my_df3["total_amount"], labels=my_df3.index)
plt.title("ARTÍCULOS QUE GENERAN MÁS 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
plt.bar(my_df4.index, my_df4["total_amount"], width=0.5, color=["olivedrab", "darkolivegreen", "greenyellow","palegreen","aqua", "aquamarine","steelblue","slateblue","darkorchid"])
plt.xticks(rotation=50)
plt.title("VENTAS POR VENDEDORES")
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.bar(my_df5.index,my_df5["total_amount"], color="olivedrab")
plt.title("VENTAS POR SEMANA")
plt.show()
# RESOLUCIÓN ANALÍTICA
my_df6 =(my_df.groupby("country_name").sum()).sort_values("total_amount", ascending=False).head(5)
print(my_df6[["quantity"]+["total_amount"]])
# RESOLUCIÓN GRÁFICA
plt.bar(my_df6.index,my_df6["total_amount"], color="cadetblue")
plt.title("VENTAS POR PAÍS")
plt.show()