Análisis de los 25 retailers más grandes de Estados Unidos
# Importar librerías aquí
import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
# Importar datos aquí
df = pd.read_csv('largest_us_retailers.csv')
df.head(10)
print(df.describe())
df.shape
df['Sales'].skew()
I. Preguntas del negocio
f, ax = plt.subplots(figsize=(15,9))
df_sorted = df.sort_values('Sales', ascending=1)
x= df_sorted.Company
y= df_sorted.Sales
sns.barplot(x=x,y=y,data=df)
plt.axhline(y=df.Sales.mean(),ls='--',lw=3,color='r',label='Media considerando a Waltmart')
plt.axhline(y=df.Sales[1:].mean(),ls='--',lw=3,color='blue',label='Media sin considerar a Waltmart')
plt.xticks(rotation='vertical',size=14)
ax.legend(fontsize='xx-large')
plt.ylabel('Ventas en millones $USD',size=19)
plt.xlabel('Compañías',size=19)
plt.title('Media con Walmart graficado', fontsize=24)
# fig.axis(ymin= 10, ymax=50)
df_mean=df.Sales
# Del data frame obtenemos la columna Sales solo aquellos elementos que no sean el máximo:= "La compañia dominante" y obtenemos su promedio con `mean()`
filter = (df.Sales!=df.Sales.max())
print('Promedio de ventas (sin Walmart):',df['Sales'][filter].mean() )
print('Promedio de ventas (con Walmart): ',df['Sales'].mean())
print('La media: ',df['Sales'].median())
print('Coeficiente de asimetría: ',df_mean.skew())
plt.show()
f, ax = plt.subplots(figsize=(15,9))
df_sorted = df[1:].sort_values('Sales', ascending=1)
x= df_sorted.Company
y= df_sorted.Sales
sns.barplot(x=x,y=y,data=df)
plt.axhline(y=df.Sales.mean(),ls='--',lw=3,color='r',label='Media considerando a Waltmart')
plt.axhline(y=df.Sales[1:].mean(),ls='--',lw=3,color='blue',label='Media sin considerar a Waltmart')
plt.xticks(rotation='vertical',size=14)
ax.legend(fontsize='xx-large')
plt.ylabel('Ventas en millones $USD',size=19)
plt.xlabel('Compañías',size=19)
plt.title('Media sin Walmart graficado', fontsize=24)
# fig.axis(ymin= 10, ymax=50)
plt.show()
df_sorted = df.sort_values(ignore_index=True, by='Sales')
df_sorted[:11]
# dinero
# compañía
sns.displot(df[1:], x = 'Sales', hue = 'Company', multiple='stack', binrange=(df.Sales.min(),df.Sales[1:].max()))
sns.rugplot(data=df[1:], x='Sales', height=-0.01, lw=2 , clip_on=False)
plt.gcf().set_size_inches(15, 8)
plt.xlabel('Ventas en millones de $USD',size=19)
plt.ylabel('Frecuencia',size=19)
plt.title('Ventas generadas por compañías', fontsize= 23)
plt.show()
#excluimos las empresas online
df_sorted = df.sort_values(by='Stores', ignore_index= True, ascending=False)[:23]
df_sorted
# Tiendas
# compañía
hue_sort = tuple(df_sorted['Company'].values)
# print(', '.join(hue_sort[10:]))
sns.displot(df, x = 'Stores', hue = 'Company', multiple='stack', hue_order= hue_sort)
sns.rugplot(data=df, x='Stores', height=-0.01, lw=2.5 , clip_on=False)
plt.gcf().set_size_inches(15, 8)
plt.xlabel('Tiendas de cada compañía',size=19)
plt.ylabel('Frecuencia',size=19)
plt.title('Número de tiendas por compañía', fontsize= 23)
plt.show()
# stores
# sales
f =sns.relplot(x='Stores', y='Sales/Avg. Store',hue='Company' ,style='Company', aspect=100, data=df_sorted)
plt.gcf().set_size_inches(14, 8)
plt.xlabel('Tiendas físicas',size=19)
plt.ylabel('Promedio de ventas por tienda en millónes de $USD',size=19)
plt.title('Número de tiendas y promedio de ventas por tienda', fontsize= 23)
plt.show()
sns.set_theme(style="ticks", palette="pastel")
sns.boxplot(data=df, x='Sales')
plt.gcf().set_size_inches(14, 8)
plt.xlabel('Ventas en millones de dólares',size=19)
plt.title('Rango de ventas del conjunto de datos', fontsize= 23)
plt.show()
# Range = valor max - valor min
range = df['Sales'].max() - df['Sales'].min()
print('Range is: ', range)
df_byStores = df.sort_values('Stores', ascending=False)[:5]
df_bySales = df.sort_values('Sales', ascending=False)[:5]
df_bySales
df_byStores
intersection = pd.merge(df_bySales,df_byStores, on='Company', how='inner')
print('Compañías que tienen muchas tiendas y muchas ventas por tienda')
intersection
df_union = pd.merge(df_bySales, df_byStores, how='outer')
f, ax = plt.subplots(figsize=(15,7))
sns.barplot(data=df_union, x = 'Stores', y='Sales', hue='Company')
plt.ylabel('Ventas en millones de dólares',size=19)
plt.xlabel('Número de tiendas',size=19)
plt.title('Tiendas y Ventas', fontsize= 23)
plt.show()
category = []
a = df.Category.values
for i in a:
if i not in category:
category.append(i)
sales_byCategory =[]
for cat in category:
suma = df.loc[(df['Category']==cat),'Sales'].sum()
sales_byCategory.append(suma)
#quitar los nan y 0
category.pop(7)
sales_byCategory.pop(7)
#add apple online row
category.append('Apple Online')
sales_byCategory.append(37664)
lista = list(zip(category,sales_byCategory))
f, ax= plt.subplots(figsize=(10,10))
plt.title('Porcentaje de ventas totales por compañía',fontsize=24)
plt.pie(
sales_byCategory,
labels=category,
autopct='%0.2f%%'
)
plt.show()
df.sort_values('Sales/Avg. Store', ascending=False, ignore_index=True)
f, ax = plt.subplots(figsize=(18,9))
df_sorted = df.sort_values('Sales/Avg. Store', ascending=False)[:-2]
sns.barplot(data=df_sorted, y='Sales/Avg. Store', x='Company')
plt.xticks(rotation=40)
plt.ylabel('Promedio de ventas por tienda',size=19)
plt.xlabel('Compañía',size=19)
plt.title('Relación de número de ventas y tiendas por compañía', fontsize= 23)
plt.show()
fig, ax= plt.subplots(figsize=(18,7))
df_union=df
df_union['Online'] = df['Stores'].isna()
sns.barplot(data = df_union, y='Sales', x='Company', hue='Online')
ax.legend(fontsize='xx-large')
plt.ylabel('Ventas en millones de $USD',size=19)
plt.xlabel('Compañías',size=19)
plt.title('Ventas y compañías online y no online', fontsize=24)
plt.xticks(size=15)
plt.xticks(rotation=90)
plt.show()
fig, (ax,bx)= plt.subplots(1,2, figsize=(14,7))
# dfnw['company type']=['online' if i else 'física' for i in dfnw.Stores.isna()]
df_online = df[df['Stores'].isna() ==True ]
df_NOTonline = df[df['Stores'].isna() ==False ]
sns.barplot(data = df_online, y='Sales', x='Company', ax=ax)
sns.barplot(data=df_NOTonline, y='Sales', x='Company', ax=bx)
ax.set(title='Compañías Online')
bx.set(title='Compañías con tiendas físicas')
plt.xticks(rotation=90)
plt.show()
corrmat = df.corr()
f, ax =plt.subplots(figsize=(18,7))
sns.heatmap(corrmat, vmax=0.88,square=True, annot=True)
plt.show()
df_sorted = df.sort_values('Store Count Growth', ascending=False)[:5]
df_sorted
f, ax= plt.subplots(figsize=(18,7))
sns.barplot(data=df_sorted, x='Company', y='Store Count Growth', hue='Category')
# plt.xticks(rotation=30)
plt.title('Top 5 compañías con mayor tasa de crecimiento', fontsize=20)
plt.ylabel('Tasa de crecimiento de tiendas', size= 16)
plt.xlabel('Compañías', size=15)
plt.show()
df_sorted = df.sort_values('Store Count Growth', ascending=True)[:5]
df_sorted
f, ax= plt.subplots(figsize=(18,7))
sns.barplot(data=df_sorted, x='Company', y='Store Count Growth', hue='Category')
plt.title('Top 5 compañías con mayor tasa de crecimiento', fontsize = 20)
plt.ylabel('Tasa de crecimiento de tiendas', size= 16)
plt.xlabel('Compañías', size=15)
plt.show()
f, ax= plt.subplots(figsize=(18,7))
sns.barplot(data=df.sort_values('Store Count Growth', ascending=False)[:-2], x='Company', y='Store Count Growth', hue='Category')
plt.title('Compañías y su tasa de crecimiento', fontsize = 20)
plt.ylabel('Tasa de crecimiento de tiendas', size= 16)
plt.xlabel('Compañías', size=15)
plt.xticks(rotation=50, size=13)
plt.axhline(y=0,ls='-')
plt.show()
f, ax= plt.subplots(figsize=(18,7))
sns.color_palette('deep',10)
sns.histplot(data=df.sort_values('Store Count Growth', ascending=False)[:-2],
x='Store Count Growth', hue='Category', kde=True,
multiple='stack'
)
plt.title('Compañías y su tasa de crecimiento', fontsize = 20)
plt.ylabel('Tasa de crecimiento de tiendas', size= 16)
plt.xlabel('Compañías', size=15)
plt.xticks(rotation=50, size=13)
plt.axhline(y=0,ls='-')
plt.show()