Análisis de los 25 retailers más grandes de Estados Unidos
Proyecto de Yezid Garcia Medina
# Importar librerías aquí
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# Importar datos aquí
df = pd.read_csv('/work/largest_us_retailers.csv')
df.head()
This chart is empty
Chart was probably not set up properly in the notebook
df.columns
df_sorted = df.sort_values('Sales', ascending=0)
df_sorted
x = df_sorted['Company'][0:5] #Aplicamos slicing como en una lista de Python.
y = df_sorted['Sales'][0:5]
plt.bar(x, y)
plt.title('Top 5 retailers')
plt.xlabel('Company')
plt.ylabel('Sales')
plt.xticks(rotation='vertical') #Método que se usa para rotar el texto de los puntos en X para que no se amontonen.
plt.show()
I. Preguntas del negocio
df_dominante = df_sorted[df_sorted['Company'] == 'Walmart US']
df_dominante.head()
df_no_dominante = df_sorted[df_sorted['Company'] != 'Walmart US']
df_no_dominante.head()
promedio_todo = df_sorted['Sales'].mean()
mediana_todo = df_sorted['Sales'].median()
promedio_dominante = df_dominante['Sales'].mean()
mediana_dominante = df_dominante['Sales'].median()
promedio_no_dominante = df_no_dominante['Sales'].mean()
mediana_no_dominante = df_no_dominante['Sales'].median()
print('VENTAS en $USD de todas las compañias --> promedio = %3.3f, mediana = %d' % (promedio_todo, mediana_todo))
boxplot_todo = sns.boxplot(x='Sales',hue= 'Company',data=df_sorted)
boxplot_todo.set_title('BoxPlot de Ventas $USD - Todas las empresas')
boxplot_todo
print('VENTAS en $USD de la compañia dominante --> promedio = %3.3f, mediana = %d' % (promedio_dominante, mediana_dominante))
boxplot_dominante = sns.boxplot(x='Sales',hue= 'Company',data=df_dominante)
boxplot_dominante.set_title('BoxPlot de Ventas $USD - Empresas Dominante: WallMart US')
boxplot_dominante
print('VENTAS en $USD de las compañias No dominantes: promedio = %3.3f, mediana = %d' % (promedio_no_dominante, mediana_no_dominante))
boxplot_no_dominante = sns.boxplot(x='Sales',hue= 'Company',data=df_no_dominante)
boxplot_no_dominante.set_title('BoxPlot de Ventas $USD - Empresas No Dominantes')
boxplot_no_dominante
histo_sales_todo = df_sorted['Sales'].hist(bins=20)
histo_sales_todo.set_title('Histograma Ventas $USD - todas las empresas')
histo_sales_todo.set_xlabel('Ventas $USD')
histo_sales_todo.set_ylabel('# Empresas')
suma_sales_todo = df_sorted['Sales'].sum()
print('Suma Ventas en $USD de todas las empresas = %d '% suma_sales_todo)
df_sales_mayoria_empresas = df_sorted[ df_sorted['Sales'] < 100000 ]
numero_mayoria_empresas = df_sorted[ df_sorted['Sales'] < 100000 ].count()
print('# de Empresas (Mayoria de empresas que tuvieron ventas en $USD menores a 100000 ) = ' + str(numero_mayoria_empresas['Company']))
suma_subgrupo_sales_mayoria = df_sales_mayoria_empresas['Sales'].sum()
print('Suma Ventas en $USD (menor o igual a 100000) de sub-grupo mayoria de empresas = %d '% suma_subgrupo_sales_mayoria)
histo_sales_mayoria_empresas = df_sales_mayoria_empresas['Sales'].hist(bins=10)
histo_sales_mayoria_empresas.set_title('Histograma Ventas $USD - mayoria de empresas')
histo_sales_mayoria_empresas.set_xlabel('Ventas $USD')
histo_sales_mayoria_empresas.set_ylabel('# Empresas')
suma_sales_mayoria = df_sales_mayoria_empresas['Sales'].sum()
print('Suma Ventas en $USD (menor o igual a 100000) de sub-grupo mayoria de empresas = %d '% suma_sales_mayoria)
numero_subgrupo_mayoria_empresas = df_sales_mayoria_empresas[ df_sales_mayoria_empresas['Sales'] <= 30000 ].count()
df_subgrupo_mayoria_empresas = df_sales_mayoria_empresas[ df_sales_mayoria_empresas['Sales'] <= 30000 ]
print('# de Empresas (Sub grupo - Mayoria de empresas, ventas en $USD menores e iguales a 30000 ) = ' + str(numero_subgrupo_mayoria_empresas['Company']))
suma_subgrupo_sales_mayoria = df_subgrupo_mayoria_empresas['Sales'].sum()
print('Suma Ventas en $USD (menor o igual a 30000) de sub-grupo mayoria de empresas = %d '% suma_subgrupo_sales_mayoria)
df_stores_sorted = df.sort_values('Stores', ascending=0)
sns.displot(df_stores_sorted, x = 'Stores', hue = 'Company', multiple='stack')
no_stores = df_stores_sorted[ (df_stores_sorted['Stores'] > 0) == False]
print( 'Compañias con 0 tiendas fisicas o ninguna : Amazon y Apple Incl. Online' )
no_stores.head()
df_stores_mayoria = df_stores_sorted[df_stores_sorted['Stores'] <= 3000]
displot_stores_mayoria = sns.displot(df_stores_mayoria, x = 'Stores', hue = 'Company', multiple='stack')
df_stores_mayoria.head()
boxplot_stores_mayoria = sns.boxplot(x='Stores',hue= 'Company',data=df_stores_mayoria)
boxplot_stores_mayoria.set_title('BoxPlot de Numero Tiendas - Mayoria Empresas')
boxplot_stores_mayoria
promedio_stores_mayoria = df_stores_mayoria['Stores'].mean()
mediana_stores_mayoria = df_stores_mayoria['Stores'].median()
print('STORES de la mayoria de las compañias --> promedio = %3.3f, mediana = %d' % (promedio_stores_mayoria, mediana_stores_mayoria))
# scatterplot - Ventas
scatter_sales = sns.scatterplot(data=df_sorted, x = 'Sales', y = 'Stores', hue = 'Company')
scatter_sales.set_title('ScatterPlot Ventas ------------------------------------------------')
# Tabla - Ventas Ordenada
df_sorted.head(5)
# scatterplot
scatter_stores = sns.scatterplot(data=df_stores_sorted, x = 'Stores', y = 'Sales', hue = 'Company')
scatter_stores.set_title('ScatterPlot Tiendas ------------------------------------------------')
# tabla - Tiendas ordenadas
df_stores_sorted.head(5)
df_sorted.head(24)
maximo_ventas = df_sorted['Sales'].max()
maximo_compañia = df_sorted['Company'][0]
minimo_ventas = df_sorted['Sales'].min()
minimo_compañia = df_sorted['Company'][23]
rango_ventas = maximo_ventas - minimo_ventas
print('Máximo en Ventas ($USD) = {0} , de la compañia: {1}'.format(maximo_ventas, maximo_compañia))
print('Mínimo en ventas ($USD) = {0} , de la compañia: {1}'.format(minimo_ventas, minimo_compañia))
print('Rango de ventas ($USD) = {0}'.format(rango_ventas))
# df_sorted : listado ordenado de ventas
df_top5_ventas = df_sorted['Company'][0:5]
df_top5_ventas.head()
# df_sorted : listado ordenado de tiendas
df_top5_tiendas = df_stores_sorted['Company'][0:5]
df_top5_tiendas.head()
print("Las siguientes son las empresas que cumplen top 5 en mayor ventas y top 5 en mayor numero de tiendas:")
for key1 in df_top5_tiendas.keys():
for key2 in df_top5_ventas.keys():
if key1 == key2:
empresa_igual = df_top5_ventas[key1]
print(empresa_igual)
df_categorias_sorted = df.sort_values('Category', ascending=1)
df_categorias_sorted.head()
barplot_category = sns.barplot(data=df_categorias_sorted, x = 'Category', y = 'Sales')
barplot_category.set_xticklabels(barplot_category.get_xticklabels(),rotation = 90, size = 10)
barplot_category.set_title('Ventas por Categoria')
compañia_categoria = df_categorias_sorted[(df_categorias_sorted['Category']=='Supercenters') == True]
compañia_categoria.head()
compañias_top5 = df_stores_sorted[3:5]
compañias_top5.head()
scatterplot_top5 = sns.scatterplot(data=compañias_top5, x = 'Sales', y = 'Stores', hue = 'Company')
scatterplot_top5.set_title('Scatter Plot, empresas con mayor número ventas y número tiendas')
print("Tiendas que solo operan online, que no tienen tiendas fisicas")
no_stores.head()
x1 = no_stores['Company'] #Aplicamos slicing como en una lista de Python.
y1 = no_stores['Sales']
plt.bar(x1, y1)
plt.title('Ventas Empresas que No tienen Tiendas Fisicas')
plt.xlabel('Company')
plt.ylabel('Sales')
plt.show()
promedio_ventas = df_sorted['Sales'].mean()
mediana_ventas = df_sorted['Sales'].median()
print('promedio ventas: %3.3f , mediana ventas: %3.3f ' % (promedio_ventas ,mediana_ventas ) )
ventas_amazon = no_stores[no_stores['Company'] == 'Amazon']
ventas_apple_online = no_stores [no_stores['Company'] == 'Apple incl. Online']
print('ventas Amazon: %3.3f , ventas Apple incl. Online: %3.3f ' % (ventas_amazon['Sales'] ,ventas_apple_online['Sales'] ) )
if promedio_ventas <= float(ventas_amazon['Sales']) :
print('Amazon tuvo ventas mayores o iguales al promedio en ventas')
else:
print('Amazon tuvo ventas menores al promedio de ventas')
if promedio_ventas <= float(ventas_apple_online['Sales']):
print('Apple incl. Online tuvo ventas mayores o iguales al promedio en ventas')
else:
print('Apple incl. Online tuvo ventas menores al promedio en ventas')
if mediana_ventas <= float(ventas_amazon['Sales']):
print('Amazon tuvo ventas mayores o iguales a la mediana en ventas')
else:
print('Amazon tuvo ventas menores a la mediana en ventas')
if mediana_ventas <= float(ventas_apple_online['Sales']):
print('Apple incl. Online tuvo ventas mayores o iguales a la mediana en ventas')
else:
print('Apple incl. Online tuvo ventas menores a la mediana en ventas')
stores_fisicas = df_stores_sorted[ (df_stores_sorted['Stores'] > 0) == True]
stores_fisicas.head(30)
df_growth_sorted = stores_fisicas.sort_values('Store Count Growth', ascending=1)
df_growth_sorted.head()
barplot_growth = sns.barplot(data=df_growth_sorted, x='Company', y = 'Store Count Growth')
barplot_growth.set_xticklabels(barplot_growth.get_xticklabels(),rotation = 90, size = 10)
barplot_growth.set_title('Empresas por crecimiento en tiendas')
menor_crecimiento = df_growth_sorted['Store Count Growth'].min()
mayor_crecimiento = df_growth_sorted['Store Count Growth'].max()
empresa_menor = df_growth_sorted[(df_growth_sorted['Store Count Growth'] == menor_crecimiento ) == True]
empresa_mayor = df_growth_sorted[(df_growth_sorted['Store Count Growth'] == mayor_crecimiento ) == True]
def valordato (dato):
for key1 in dato.keys():
valor1 = dato[key1]
return valor1
print('Empresa con menor crecimiento en tiendas = {0} , con valor de = {1}'.format( valordato(empresa_menor['Company']) ,menor_crecimiento) )
print('Empresa con mayor crecimiento en tiendas = {0} , con valor de = {1}'.format( valordato(empresa_mayor['Company']) ,mayor_crecimiento) )
df_sales_store_avg = df.sort_values('Sales/Avg. Store', ascending=1)
df_sales_store_avg.head(25)
histograma_sales_store_avg = df_sales_store_avg['Sales/Avg. Store'].hist(bins=20)
boxplot_sales_store_avg = sns.boxplot(x='Sales/Avg. Store',hue= 'Company',data=df_sales_store_avg)
df_categorias_sorted.head()
categoria_moda = valordato(df_categorias_sorted['Category'].mode())
print('La categoría que más se repite o la moda, es: ' + categoria_moda)
df_compañia_categoria_moda = df_categorias_sorted[(df_categorias_sorted['Category']==categoria_moda ) == True]
df_compañia_categoria_moda.head(10)
barplot_moda = sns.barplot(data=df_compañia_categoria_moda.sort_values('Sales', ascending=1), x = 'Company', y = 'Sales')
barplot_moda.set_xticklabels(barplot_moda.get_xticklabels(),rotation = 90, size = 10)
barplot_moda.set_title('Ventas por Categoria Moda "' + categoria_moda + '"')
boxplot_moda = sns.boxplot(x='Sales',hue= 'Company',data=df_compañia_categoria_moda)
boxplot_moda.set_title ('Boxplot de Ventas por Empresas de Categoria "' + categoria_moda +'"')
ventas_promedio_moda = df_compañia_categoria_moda['Sales'].mean()
print('ventas promedio de la categoria "'+ categoria_moda+ '" = ' + str(ventas_promedio_moda) + " $USD")