Análisis de los 25 retailers más grandes de Estados Unidos
# Importar librerías a emplear
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import plotly.express as px
sns.set_theme(context='notebook',palette='magma')
# Cargar archivo como dataframe
retail = pd.read_csv('/work/retail/largest_us_retailers_9b00dc73-a938-46cd-af17-fcb2bd67301f.csv')
retail
retail.dtypes
retail.info()
retail.describe()
I. Preguntas del negocio
sns.histplot(data = retail, x = 'Sales')
# Walmart es el atípico con mayores ingresos por Ventas del dataset con un valor de 658.119 dólares
retail.sort_values(by = ['Sales'], ascending = False)
# Calculo del promedio quitando dato atipico Walmart
print('Promedio de la distribución completa: {:.0f} millones de USD'.format(retail['Sales'].mean()))
print('Promedio quitando Walmart: {:.0f} millones de USD'.format(retail['Sales'].sort_values(ascending = False)[1:25].mean()))
# Otra forma de calcular el promedio usando numpy
np.sort(np.array(retail['Sales']))[0:24].mean()
# Eliminar Walmart, dato atípico en relación entre Tiendas y Ventas
retail_2 = retail.drop(index=0)
fig, ax = plt.subplots(2,1, figsize = (10,10))
sns.histplot(data = retail_2, x = 'Sales', ax=ax[0], kde=True)
sns.boxplot(data = retail_2, x = 'Sales', ax=ax[1], palette='viridis')
ax[0].set_title('Ventas en millones de dólares')
fig.suptitle('Distibución de ventas para los 25 retails más importantes de USA')
print(retail['Sales'].median())
print(retail_2['Sales'].median())
print(np.quantile(retail_2['Sales'],[0.25,0.75]))
fig, ax = plt.subplots(2,1, figsize = (10,10))
sns.histplot(data = retail_2, x = 'Stores', ax=ax[0], kde=True)
sns.boxplot(data = retail_2, x = 'Stores', ax=ax[1], palette='viridis')
fig.suptitle('Distibución de cantidad de tiendas para los 25 retails más importantes de USA')
print(retail['Stores'].median())
print(retail_2['Stores'].median())
print(np.percentile(retail_2.dropna()['Stores'],[25,75]))
fig, ax = plt.subplots(1,2,figsize = (20,6))
sns.regplot(data = retail, x = 'Stores', y = 'Sales', ax = ax[0])
sns.regplot(data = retail_2, x = 'Stores', y = 'Sales',ax = ax[1])
fig.suptitle('Gráfico de dispersión entre la cantidad de tiendas y las Ventas en millones de dólares')
ax[0].set_title('Tendencia con Walmart')
ax[1].set_title('Tendencia sin Walmart')
fig2 = px.scatter(retail, x = 'Stores',y= 'Sales', hover_name='Company', trendline='ols')
fig2.show()
results = px.get_trendline_results(fig2)
print(results)
results.px_fit_results.iloc[0].summary()
print('Coeficiente de correlación de Pearson datos completos: {:.4f}'.format(retail['Sales'].corr(retail['Stores'], method='pearson')))
print('Coeficiente de correlación de Pearson quitando Walmart: {:.4f}'.format(retail_2['Sales'].corr(retail_2['Stores'], method='pearson')))
rango_full = max(retail['Sales'])-min(retail['Sales'])
rango = max(retail_2['Sales'])-min(retail_2['Sales'])
print(rango_full)
print(rango)
# 5 compañias con mayor cantidad de tiendas
mas_tiendas = retail.nlargest(5,'Stores')
mas_tiendas
# Compañías top 5 en cantidad de tiendas que pertenecen al top 5 en ventas
mas_tiendas = retail.nlargest(5,'Stores')
mas_ventas = retail.nlargest(5,'Sales')
interseccion = pd.merge(mas_tiendas, mas_ventas, how='inner', on= 'Company')
interseccion
sns.barplot(data=retail_2, y='Category',x = 'Sales')
sns.boxplot(data = retail_2, x = 'Sales',y='Category')
tiendas_ordenadas = list(retail.set_index('Company').sort_values(by='Sales/Avg. Store', ascending=False).index)
fix, ax = plt.subplots(figsize = (8,6))
sns.barplot(data = retail, x = 'Sales/Avg. Store', y= 'Company', order = tiendas_ordenadas)
# Se aplica un mapeo a ambos dataframes dependiendo si en la columna Stores tienen
retail['Online_sales'] = retail['Stores'].isna().map({False:'No',True: 'Si'})
retail_2['Online_sales'] = retail['Stores'].isna().map({False:'No',True: 'Si'})
retail[retail['Online_sales'] == 'Si' ]
fig, ax = plt.subplots(1,3, figsize = (20,8))
sns.barplot(data = retail_2, x ='Online_sales',y='Sales', ax = ax[0])
sns.boxplot(data = retail_2, x = 'Online_sales', y = 'Sales', palette='viridis', ax= ax[1])
sns.histplot(data = retail_2, x = 'Sales', palette='viridis', ax= ax[2], hue= 'Online_sales',kde=True)