# 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 los 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 por columna:')
print(df_articles.dtypes)
# Exploración del df de vendedores:
print('Muestra de los 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 por columna:')
print(df_sellers.dtypes)
# Exploración del df de órdenes:
print('Muestra de los 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 por columna:')
print(df_orders.dtypes)
# Cambio del tipo de dato de unit_price a flotante:
df_articles['unit_price'] = df_articles['unit_price'].astype(float)
print(df_articles.dtypes)
# Cambio del índice del df_articles por la columna article.id:
df_articles.set_index('article_id',inplace=True)
print(df_articles.head)
# Creación una copia del df_orders (df base):
my_df = df_orders.copy()
# Agregar algunas columnas extras que se necesitan y las llenarlas con los códigos id que las vinculan con los otros dataframes:
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())
# Reemplazo de los valores en las nuevas columnas del df:
my_df.index
for i in range(len(my_df.index)):
article = df_articles.loc[my_df.loc[i]['article_name']]['article_name']
my_df.loc[i,'article_name'] = article
my_df.loc[i,'total_amount'] = my_df.loc[i,'quantity'] * df_articles.loc[my_df.loc[i]['total_amount']]['unit_price'] # Modifico la columna total_amount. La duermo una vez que la ejecuto.
my_df.loc[i,'seller_name'] = df_sellers.loc[my_df.loc[i]['seller_name']]['seller_name']
print(my_df.head())
# Eliminación de las columnas que no se van a utilizar:
my_df.drop(['order_id','article_id','seller_id'], axis='columns', inplace=True)
print(my_df.head())
# Dataframe con el que se va a trabajar:
print(my_df.head())
# Resolución analítica:
df2 = my_df.groupby('article_name').sum()
por_cantidad = df2.sort_values('quantity',ascending=False)
print('Artículo más vendido:')
print(por_cantidad['quantity'].head(1))
# Resolución gráfica:
sns.set(style='whitegrid',font_scale=1.2)
sns.barplot(x=df2.index, y=df2['quantity'], data=df2, order=df2.sort_values('quantity', ascending=False).index,palette='Set2',saturation=0.85)
plt.xticks(rotation=90)
plt.ylim(125,425)
plt.title('UNIDADES VENDIDAS POR ARTÍCULO',fontsize=18,color='gray',fontweight="bold",y=1.05)
plt.xlabel("Artículo", fontsize=15,color='gray')
plt.ylabel("Unidades vendidas",fontsize=15,color='gray')
plt.gcf().set_size_inches(15, 8)
plt.show()
# Resolución analítica:
df3=(my_df.groupby('article_name').sum()).sort_values('total_amount', ascending=False).head(5)
print('Artículos que más ingresos proporcionaron:')
print(df3['total_amount'])
# Resolución gráfica:
e= (0.1,0,0,0,0)
sns.set(font_scale=1.2)
plt.pie(x=df3['total_amount'],labels=df3.index,explode=e, colors=sns.color_palette('Set2',10,.85), textprops = {'fontsize':15})
cc = plt.Circle((0,0),0.5, fc='white')
fig = plt.gcf()
fig.gca().add_artist(cc)
plt.title('ARTÍCULOS QUE MÁS INGRESOS PROPORCIONARON',fontsize=18,color='gray',fontweight="bold",y=1.05)
plt.gcf().set_size_inches(7,5)
plt.show()
# Resolución analítica:
df4 = (my_df.groupby('seller_name').sum()).sort_values('total_amount', ascending=False)
print('Mejor vendedor del mes:')
print(df4.head(1))
print()
print('Ventas de cada vendedor:')
print(df4[['quantity']+['total_amount']])
# Resolución gráfica:
sns.set(style='whitegrid',font_scale=1.2)
palette_set2 = sns.color_palette("Set2",10,.85)
plt.bar(df4.index, df4['total_amount'],width=0.80,color=palette_set2)
plt.xticks(rotation=70,fontsize=12)
plt.yticks(fontsize=12)
plt.ylim(30000,200000)
plt.title('MEJORES VENDEDORES',fontsize=18,color='gray',fontweight="bold",y=1.05)
plt.xlabel("Vendedor", fontsize=15,color='gray')
plt.ylabel("Ventas totales",fontsize=15,color='gray')
plt.gcf().set_size_inches(10, 5)
plt.show()
# Resolución analítica:
df5 = (my_df.groupby('week').sum()).sort_values('total_amount', ascending=False)
print('Variaciones en ventas a lo largo del mes:')
print(df5)
# Resolución gráfica:
sns.set(style='whitegrid',font_scale=1.2)
plt.bar(df5.index, df5['total_amount'],width=0.80,color=palette_set2)
plt.xticks(rotation=0,fontsize=12)
plt.yticks(fontsize=12)
plt.xticks(np.arange(5),(' ','Semana 1','Semana 2','Semana 3','Semana 4'))
plt.ylim(125000,525000)
plt.title('VENTAS EN EL MES',fontsize=18,color='gray',fontweight="bold",y=1.05)
plt.xlabel(" ")
plt.ylabel("Ventas totales",fontsize=15,color='gray')
plt.gcf().set_size_inches(7,4)
plt.show()
# Resolución analítica:
df6 = (my_df.groupby('country_name').sum()).sort_values('total_amount', ascending=False).head()
print('Países que más compraron:')
print(df6[['quantity']+['total_amount']])
# Resolución gráfica:
sns.set(style='whitegrid',font_scale=1.2)
palette_set2 = sns.color_palette("Set2",10,.85)
plt.bar(df6.index, df6['total_amount'],width=0.80,color=palette_set2)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.ylim(75000,475000)
plt.title('PAÍSES QUE MÁS COMPRARON',fontsize=18,color='gray',fontweight="bold",y=1.05)
plt.xlabel("País",fontsize=15,color='gray')
plt.ylabel("Ventas totales",fontsize=15,color='gray')
plt.gcf().set_size_inches(7, 4)
plt.show()
# Resolución analítica:
df7 = my_df[(my_df['country_name']=='Brazil') | (my_df['country_name']=='Argentina')| (my_df['country_name']=='Colombia')| (my_df['country_name']=='Peru')| (my_df['country_name']=='Mexico')]
df8 = df7[(df7['article_name']== 'Notebook') | (df7['article_name']=='CPU')]
df9 = df7[(df7['article_name']== 'Notebook')]
df10 = df7[(df7['article_name']== 'CPU')]
df11 = (df9.groupby('country_name').sum()).sort_values('quantity', ascending=False).head()
print('Notebooks compradas:')
print(df11[['quantity']])
print()
df12 = (df10.groupby('country_name').sum()).sort_values('quantity', ascending=False).head()
print('CPUs compradas:')
print(df12[['quantity']])
sns.set(style='whitegrid',font_scale=1.2)
palette_set2 = sns.color_palette("Set2",10,.85)
color = sns.color_palette([palette_set2[3]])
color2 = sns.color_palette([palette_set2[4]])
plt.bar(df12.index, df12['quantity'], label='CPUs', alpha=0.5,width=0.80,color=color)
plt.bar(df11.index, df11['quantity'], label='Notebooks', alpha=0.5,width=0.80,color=color2)
plt.title('¿NOTEBOOK O CPU? ¿QUÉ PREFIEREN LOS PAÍSES QUE MÁS COMPRARON?',fontsize=18,color='gray',fontweight="bold",y=1.05)
plt.ylabel("Unidades vendidas",fontsize=15,color='gray')
plt.xlabel("País",fontsize=15,color='gray')
plt.legend(title = "Artículo",title_fontsize = 14,fontsize=12)
plt.gcf().set_size_inches(10, 5)
plt.show()
df13 = my_df[(my_df['seller_name']=='Kati Innot')]
df14 = (df13.groupby('country_name').sum()).sort_values('total_amount', ascending=False).head()
print('Países con los que más comerció Kati Innot:')
print(df14[['total_amount']])
# Resolución gráfica:
sns.set(style='whitegrid',font_scale=1.2)
palette_set2 = sns.color_palette("Set2",10,.85)
plt.bar(df14.index, df14['total_amount'],width=0.80,color=palette_set2)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.ylim(1000,35000)
plt.title('PAÍSES CON LOS QUE MÁS COMERCIÓ KATI INNOT',fontsize=18,color='gray',fontweight="bold",y=1.05)
plt.xlabel("País",fontsize=15,color='gray')
plt.ylabel("Ventas totales",fontsize=15,color='gray')
plt.gcf().set_size_inches(10, 5)
plt.show()