Análisis de los 25 retailers más grandes de Estados Unidos
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_csv('largest_us_retailers.csv')
df.head()
df_sorted_by_sales = df.sort_values('Sales',ascending=0)
df_sorted_by_sales
I. Preguntas del negocio
df_no_dominant_company = df_sorted_by_sales[(df_sorted_by_sales['Company'] != 'Walmart US')]
df_no_dominant_company
mean_sale = df_no_dominant_company['Sales'].mean()
mean_sale
higher_mean_sales = df_no_dominant_company[(df_no_dominant_company['Sales'] > mean_sale)]['Company'].count()
lower_mean_sales = df_no_dominant_company[(df_no_dominant_company['Sales'] <= mean_sale)]['Company'].count()
total = df_no_dominant_company['Company'].count()
print(f'Compañias por encima del promedio: {(higher_mean_sales / total) * 100} %')
print(f'Compañias por debajo del promedio: {(lower_mean_sales / total) * 100} %')
barplot_mean = sns.barplot(data=df_no_dominant_company, x='Sales', y='Company')
barplot_mean.axvline(mean_sale, color='#212121')
barplot_mean.set_xlabel('Ventas')
barplot_mean.set_ylabel('Compañía')
barplot_mean.set_title('Ventas por compañía')
all_sales = sns.histplot(data=df, x='Sales')
all_sales.set_xlabel('Ventas')
all_sales.set_ylabel('Cantidad')
all_sales.set_title('Ventas por compañías')
sales_without_dominante = sns.histplot(data=df_no_dominant_company, x='Sales')
sales_without_dominante.set_xlabel('Ventas')
sales_without_dominante.set_ylabel('Cantidad')
sales_without_dominante.set_title('Ventas por compañías')
all_stores = sns.histplot(data=df, x='Stores')
all_stores.set_xlabel('Tiendas')
all_stores.set_ylabel('Cantidad')
all_stores.set_title('Tiendas por compañía')
stores_without_dominante = sns.histplot(data=df_no_dominant_company, x='Stores')
stores_without_dominante.set_xlabel('Tiendas')
stores_without_dominante.set_ylabel('Cantidad')
stores_without_dominante.set_title('Tiendas por compañía')
all_sales_stores = sns.scatterplot(data=df, y='Sales', x='Stores')
all_sales_stores.set_xlabel('Tiendas')
all_sales_stores.set_ylabel('Ventas')
all_sales_stores.set_title('Relación de tiendas vs ventas')
all_sales_stores_without_dominante = sns.scatterplot(data=df_no_dominant_company, y='Sales', x='Stores')
all_sales_stores_without_dominante.set_xlabel('Tiendas')
all_sales_stores_without_dominante.set_ylabel('Ventas')
all_sales_stores_without_dominante.set_title('Relación de tiendas vs ventas')
sale_range = df['Sales'].max() - df['Sales'].min()
sales_range_without_dominant = df_no_dominant_company['Sales'].max() - df_no_dominant_company['Sales'].min()
print(f'Sales range: {sale_range}\nSales range without dominant: {sales_range_without_dominant}')
df_sorted_by_stores = df.sort_values('Stores', ascending=False)[:5]
df_sorted_by_sales_2 = df.sort_values('Sales', ascending=False)[:5]
# Crear gráficas
fig , ax = plt.subplots(1, 2, figsize=(20, 5))
sns.barplot(data=df_sorted_by_stores, x='Stores', y='Company', ax=ax[0])
ax[0].set_xlabel('Tiendas')
ax[0].set_ylabel('Compañía')
ax[0].set_title('Compañías con más tiendas físicas')
sns.barplot(data=df_sorted_by_sales_2, y='Sales', x='Company', ax=ax[1])
ax[1].set_xlabel('Compañías')
ax[1].set_ylabel('Ventas')
ax[1].set_title('Compañías con más Ventas')
plt.show()
df_sorted_by_stores_without_dominante = df_no_dominant_company.sort_values('Stores', ascending=False)[:5]
df_sorted_by_sales_without_dominante = df_no_dominant_company.sort_values('Sales', ascending=False)[:5]
# Crear gráficas
fig , ax = plt.subplots(1, 2, figsize=(20, 5))
sns.barplot(data=df_sorted_by_stores_without_dominante, x='Stores', y='Company', ax=ax[0])
ax[0].set_xlabel('Tiendas')
ax[0].set_ylabel('Compañía')
ax[0].set_title('Compañías con más tiendas físicas')
sns.barplot(data=df_sorted_by_sales_without_dominante, y='Sales', x='Company', ax=ax[1])
ax[1].set_xlabel('Compañías')
ax[1].set_ylabel('Ventas')
ax[1].set_title('Compañías con más Ventas')
plt.show()
df_group_by_category = df.groupby(by='Category').agg({'Sales': 'sum'}).reset_index().sort_values('Sales', ascending=False)
df_group_by_category_without_dominant = df_no_dominant_company.groupby(by='Category').agg({'Sales': 'sum'}).reset_index().sort_values('Sales', ascending=False)
# Crear gráficas
fig , ax = plt.subplots(1, 2, figsize=(20, 5))
sns.barplot(data=df_group_by_category, y='Category', x='Sales', ax=ax[0])
ax[0].set_xlabel('Ventas')
ax[0].set_ylabel('Categorías')
ax[0].set_title('Ventas por categoría')
sns.barplot(data=df_group_by_category_without_dominant, y='Category', x='Sales', ax=ax[1])
ax[1].set_xlabel('Ventas')
ax[1].set_ylabel('Categorías')
ax[1].set_title('Ventas por categoría')
plt.show()
print(f'Venta máxima de la categoría con compañía dominante: {df_group_by_category["Sales"].max()}')
print(f'Venta máxima de la categoría sin la compañía dominante: {df_group_by_category_without_dominant["Sales"].max()}')
df_store_mean = df.sort_values('Sales/Avg. Store', ascending=False)
bar_store_mean = sns.barplot(data=df_store_mean, y="Company", x='Sales/Avg. Store')
bar_store_mean.set_title('Promedio de ventas por tiendas f ísicas')
bar_store_mean.set_xlabel('Promedio de ventas por tiendas')
bar_store_mean.set_ylabel('Compañía')
plt.show()
df_store_mean['Sales/Avg. Store'].max()
# Se asume que las tiendas que no tienen física es porque sus ventas es Online
df['Online'] = ['Yes' if i else 'No' for i in df['Stores'].isna()]
df_group_by_online = df.groupby(by='Online').agg({'Sales': 'sum'}).reset_index().sort_values('Sales', ascending=False)
df_group_by_online
# Filtrar por tiendas Online
df[(df['Online'] == 'Yes')]
fig , ax = plt.subplots()
plt.pie(df_group_by_online['Sales'], labels=df_group_by_online['Online'])
ax.set_title('Ventas Online')
ax.legend()
plt.show()
# Se asume que las tiendas que no tienen física es porque sus ventas es Online
df_no_dominant_company['Online'] = ['Yes' if i else 'No' for i in df_no_dominant_company['Stores'].isna()]
df_group_by_online_without_dominant = df_no_dominant_company.groupby(by='Online').agg({'Sales': 'sum'}).reset_index().sort_values('Sales', ascending=False)
df_group_by_online_without_dominant
fig , ax = plt.subplots()
plt.pie(df_group_by_online_without_dominant['Sales'], labels=df_group_by_online_without_dominant['Online'])
ax.set_title('Ventas Online')
ax.legend()
plt.show()