order_id week article_id quantity seller_id country_name
0 15024 1 20039 10 10 Peru
1 15025 1 20029 15 5 Peru
2 15026 1 20024 5 14 Bolivia
3 15027 1 20018 9 14 Brazil
4 15028 1 20035 6 15 Mexico
.. ... ... ... ... ... ...
995 16019 4 20021 1 7 Brazil
996 16020 4 20040 15 15 Brazil
997 16021 4 20040 2 11 Colombia
998 16022 4 20018 14 11 Brazil
999 16023 4 20026 12 9 Brazil
[1000 rows x 6 columns]
# Exploración del df de artículos
print('Muestra de 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)
Muestra de datos
article_id article_name unit_price
0 20015 Smartphone 525.00
1 20016 Full Pc 2127.81
2 20017 Monitor 230.00
3 20018 Tablet 130.00
4 20019 Desk 130.10
Formato del dataframe
(31, 3)
Búsqueda de valores nulos
article_id 0
article_name 0
unit_price 0
dtype: int64
Formato de los datos por columna
article_id int64
article_name object
unit_price object
dtype: object
# Exploración del df de vendedores
print('Muestra de 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)
Muestra de datos
seller_name
seller_id
1 Aveline Swanwick
2 Jase Doy
3 Oliviero Charkham
4 Cornie Wynrehame
5 Ewell Peres
Formato del dataframe
(15, 1)
Búsqueda de valores nulos
seller_name 0
dtype: int64
Formato de los datos por columna
seller_name object
dtype: object
# Exploración del df de órdenes
print('Muestra de 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)
Muestra de datos
order_id week article_id quantity seller_id country_name
0 15024 1 20039 10 10 Peru
1 15025 1 20029 15 5 Peru
2 15026 1 20024 5 14 Bolivia
3 15027 1 20018 9 14 Brazil
4 15028 1 20035 6 15 Mexico
Formato del dataframe
(1000, 6)
Búsqueda de valores nulos
order_id 0
week 0
article_id 0
quantity 0
seller_id 0
country_name 0
dtype: int64
Formato de los datos por columna
order_id int64
week int64
article_id int64
quantity int64
seller_id int64
country_name object
dtype: object
# MODIFICAR EL TIPO DE DATO DE unit_price en df_articles
df_articles['unit_price'] = df_articles['unit_price'].astype(float)
print(df_articles.dtypes)
article_id int64
article_name object
unit_price float64
dtype: object
# Creo una copia de df_orders que va a ser mi base
my_df = df_orders.copy()
print(my_df)
# Cambio el índice del df_articles
df_articles.set_index('article_id', inplace=True)
#print(df_articles)
order_id week article_id quantity seller_id country_name
0 15024 1 20039 10 10 Peru
1 15025 1 20029 15 5 Peru
2 15026 1 20024 5 14 Bolivia
3 15027 1 20018 9 14 Brazil
4 15028 1 20035 6 15 Mexico
.. ... ... ... ... ... ...
995 16019 4 20021 1 7 Brazil
996 16020 4 20040 15 15 Brazil
997 16021 4 20040 2 11 Colombia
998 16022 4 20018 14 11 Brazil
999 16023 4 20026 12 9 Brazil
[1000 rows x 6 columns]
# Agrego tres columnas y escribo como dato el campo que me va a servir de nexo
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)
order_id week article_id quantity seller_id country_name \
0 15024 1 20039 10 10 Peru
1 15025 1 20029 15 5 Peru
2 15026 1 20024 5 14 Bolivia
3 15027 1 20018 9 14 Brazil
4 15028 1 20035 6 15 Mexico
.. ... ... ... ... ... ...
995 16019 4 20021 1 7 Brazil
996 16020 4 20040 15 15 Brazil
997 16021 4 20040 2 11 Colombia
998 16022 4 20018 14 11 Brazil
999 16023 4 20026 12 9 Brazil
article_name total_amount seller_name
0 20039 20039 10
1 20029 20029 5
2 20024 20024 14
3 20018 20018 14
4 20035 20035 15
.. ... ... ...
995 20021 20021 7
996 20040 20040 15
997 20040 20040 11
998 20018 20018 11
999 20026 20026 9
[1000 rows x 9 columns]
print(df_articles.head())
article_name unit_price
article_id
20015 Smartphone 525.00
20016 Full Pc 2127.81
20017 Monitor 230.00
20018 Tablet 130.00
20019 Desk 130.10
# Reemplazar los valores en las columnas nuevas de my_df
# print(len(my_df.index)) Se obtiene la cantidad de registros
#Origen del dato que se quiere df.loc[fila(i)][columna 'article_name']
for i in range(len(my_df.index)):
article = df_articles.loc[my_df.loc[i]['article_id']]['article_name']
# my_df.loc[i]['article_name']
# Se asigna a la columna correspondiente
my_df.loc[i,'article_name'] = article
# Manejo de la misma forma total amount
my_df.loc[i,'total_amount'] = df_articles.loc[my_df.loc[i]['article_id']]['unit_price'] * my_df.loc[i,'quantity']
pd.options.display.float_format = '$ {:,.2f}'.format
# Manejo para obtener la columna seller_name
my_df.loc[i,'seller_name'] = df_sellers.loc[my_df.loc[i]['seller_name']]['seller_name']
#Metodo que elimina las columnas que no se necesita
my_df.drop(['order_id', 'article_id','seller_id'], axis='columns', inplace=True)
print(my_df)
week quantity country_name article_name total_amount seller_name
0 1 10 Peru Water Cooling $ 675.00 Cirilo Grandham
1 1 15 Peru Mouse $ 454.50 Ewell Peres
2 1 5 Bolivia Netbook $ 725.00 Janel O'Curran
3 1 9 Brazil Tablet $ 1,170.00 Janel O'Curran
4 1 6 Mexico Case $ 227.40 Daisie Slograve
.. ... ... ... ... ... ...
995 4 1 Brazil Modem $ 67.50 Kati Innot
996 4 15 Brazil Heatsink $ 150.00 Daisie Slograve
997 4 2 Colombia Heatsink $ 20.00 Vasily Danilyuk
998 4 14 Brazil Tablet $ 1,820.00 Vasily Danilyuk
999 4 12 Brazil SDD $ 264.00 Onida Cosely
[1000 rows x 6 columns]
# RESOLUCIÓN ANALÍTICA
df2=my_df.groupby('article_name').sum()
por_cant = df2.sort_values('quantity', ascending=False)
print(por_cant['quantity'].head(1))
article_name
HDD 413
Name: quantity, dtype: int64
# RESOLUCIÓN GRÁFICA
sns.displot(my_df,y='article_name', color='turquoise')
plt.figsize=(10,6)
plt.title('Artículos más vendidos')
plt.xlabel('Cantidad')
plt.ylabel('Artículos')
plt.show()
# RESOLUCIÓN ANALÍTICA
df3=(my_df.groupby('article_name').sum()).sort_values('total_amount',ascending=False).head(5)
print(df3['total_amount'])
article_name
Full Pc $ 538,335.93
Notebook $ 251,000.00
Smartphone $ 152,250.00
Chair $ 69,477.48
Tablet $ 48,620.00
Name: total_amount, dtype: float64
# RESOLUCIÓN GRÁFICA
# Se consideran los primeros cinco(5) artículos que proporcionarón más ingresos
plt.pie(x=df3['total_amount'], labels=df3.index)
plt.title('Artículos que proporcionan más ingresos')
plt.show()
# RESOLUCIÓN ANALÍTICA
df4 = (my_df.groupby('seller_name').sum()).sort_values('total_amount', ascending=False)
print(df4[['quantity'] + ['total_amount']])
quantity total_amount
seller_name
Janel O'Curran 703 $ 192,832.47
Brockie Patience 441 $ 142,709.88
Oliviero Charkham 555 $ 141,329.76
Vasily Danilyuk 521 $ 129,157.55
Daisie Slograve 554 $ 120,520.11
Aveline Swanwick 629 $ 118,874.33
Arnold Kilkenny 583 $ 94,552.04
Kati Innot 512 $ 83,704.62
Jase Doy 582 $ 80,628.31
Ewell Peres 496 $ 78,144.32
Onida Cosely 535 $ 77,373.37
Milly Christoffe 442 $ 61,733.69
Tobin Roselli 519 $ 56,984.42
Cornie Wynrehame 523 $ 52,253.57
Cirilo Grandham 470 $ 45,009.40
# RESOLUCIÓN GRÁFICA
plt.bar(df4.index, df4['total_amount'], color='darkblue')
plt.xticks(rotation=60)
plt.title('Vendedor del mes')
plt.xlabel('Vendedor')
plt.ylabel('Cantidad vendida')
plt.show()
# RESOLUCIÓN ANALÍTICA
df5 = (my_df.groupby('week').sum()).sort_values('total_amount',ascending=False)
print(df5)
quantity total_amount
week
1 2449 $ 507,458.81
2 2444 $ 415,364.44
3 2114 $ 329,140.03
4 1058 $ 223,844.56
# RESOLUCIÓN GRÁFICA
plt.bar(df5.index, df5['total_amount'], color='turquoise')
plt.title('Variaciones por mes')
plt.xlabel('Semana')
plt.ylabel('Monto total')
plt.show()
# RESOLUCIÓN
df6 = (my_df.groupby('country_name').sum()).sort_values('total_amount', ascending=False).head(5)
print(df6[['quantity'] + ['total_amount']])
quantity total_amount
country_name
Brazil 2515 $ 441,271.85
Argentina 947 $ 205,832.78
Colombia 881 $ 177,514.29
Peru 1027 $ 161,421.12
Mexico 846 $ 138,619.99
# RESOLUCIÓN GRÁFICA
plt.bar(df6.index, df6['total_amount'],width=0.5, color='g')
plt.title('Países con más ingresos de venta total')
plt.xlabel('País')
plt.ylabel('Monto total')
plt.show()
# RESOLUCIÓN
print(my_df.max())
week 4
quantity 15
country_name Venezuela
article_name Wi-Fi Card
total_amount $ 31,917.15
seller_name Vasily Danilyuk
dtype: object
df1 = (my_df.groupby(['country_name','article_name','quantity']).sum()).sort_values('quantity', ascending=False).head(5)
df1.drop(['total_amount'], axis='columns', inplace=True)
print(df1)
week
country_name article_name quantity
Venezuela Webcam 15 4
Guatemala Notebook 15 1
Bolivia Ram Memory 15 2
Brazil Scanner 15 2
Honduras Mouse 15 2