# Artículos:
conn = sql3.connect('/work/data/articles.db')
sql_query = pd.read_sql_query('SELECT * FROM articles', conn)
df_articles = pd.DataFrame(sql_query, columns=['article_id', 'article_name', 'unit_price'])
print(df_articles)
# Vendedores:
df_sellers = pd.read_excel('/work/data/sellers.xlsx', index_col=0)
print(df_sellers)
# Órdenes:
df_orders = pd.read_csv('/work/data/orders.csv')
print(df_orders)
# Exploración del df de artículos:
print('Muestra de los 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 los 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 los 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 los 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 los 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 los 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
# Cambio del tipo de dato de unit_price a flotante:
df_articles['unit_price'] = df_articles['unit_price'].astype(float)
print(df_articles.dtypes)
# Cambio del índice del df_articles por la columna article.id:
df_articles.set_index('article_id',inplace=True)
print(df_articles.head)
# Creación una copia del df_orders (df base):
my_df = df_orders.copy()
# Agregar algunas columnas extras que se necesitan y las llenarlas con los códigos id que las vinculan con los otros dataframes:
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.head())
# Reemplazo de los valores en las nuevas columnas del df:
my_df.index
for i in range(len(my_df.index)):
article = df_articles.loc[my_df.loc[i]['article_name']]['article_name']
my_df.loc[i,'article_name'] = article
my_df.loc[i,'total_amount'] = my_df.loc[i,'quantity'] * df_articles.loc[my_df.loc[i]['total_amount']]['unit_price'] # Modifico la columna total_amount. La duermo una vez que la ejecuto.
my_df.loc[i,'seller_name'] = df_sellers.loc[my_df.loc[i]['seller_name']]['seller_name']
print(my_df.head())
# Eliminación de las columnas que no se van a utilizar:
my_df.drop(['order_id','article_id','seller_id'], axis='columns', inplace=True)
print(my_df.head())
# Dataframe con el que se va a trabajar:
print(my_df.head())
week quantity country_name article_name total_amount seller_name
0 1 10 Peru Water Cooling 675.0 Cirilo Grandham
1 1 15 Peru Mouse 454.5 Ewell Peres
2 1 5 Bolivia Netbook 725.0 Janel O'Curran
3 1 9 Brazil Tablet 1170.0 Janel O'Curran
4 1 6 Mexico Case 227.4 Daisie Slograve
# Resolución analítica:
df2 = my_df.groupby('article_name').sum()
por_cantidad = df2.sort_values('quantity',ascending=False)
print('Artículo más vendido:')
print(por_cantidad['quantity'].head(1))
Artículo más vendido:
article_name
HDD 413
Name: quantity, dtype: int64
# Resolución gráfica:
sns.set(style='whitegrid',font_scale=1.2)
sns.barplot(x=df2.index, y=df2['quantity'], data=df2, order=df2.sort_values('quantity', ascending=False).index,palette='Set2',saturation=0.85)
plt.xticks(rotation=90)
plt.ylim(125,425)
plt.title('UNIDADES VENDIDAS POR ARTÍCULO',fontsize=18,color='gray',fontweight="bold",y=1.05)
plt.xlabel("Artículo", fontsize=15,color='gray')
plt.ylabel("Unidades vendidas",fontsize=15,color='gray')
plt.gcf().set_size_inches(15, 8)
plt.show()
# Resolución analítica:
df3=(my_df.groupby('article_name').sum()).sort_values('total_amount', ascending=False).head(5)
print('Artículos que más ingresos proporcionaron:')
print(df3['total_amount'])
Artículos que más ingresos proporcionaron:
article_name
Full Pc 538335.93
Notebook 251000.00
Smartphone 152250.00
Chair 69477.48
Tablet 48620.00
Name: total_amount, dtype: float64
# Resolución gráfica:
e= (0.1,0,0,0,0)
sns.set(font_scale=1.2)
plt.pie(x=df3['total_amount'],labels=df3.index,explode=e, colors=sns.color_palette('Set2',10,.85), textprops = {'fontsize':15})
cc = plt.Circle((0,0),0.5, fc='white')
fig = plt.gcf()
fig.gca().add_artist(cc)
plt.title('ARTÍCULOS QUE MÁS INGRESOS PROPORCIONARON',fontsize=18,color='gray',fontweight="bold",y=1.05)
plt.gcf().set_size_inches(7,5)
plt.show()
# Resolución analítica:
df4 = (my_df.groupby('seller_name').sum()).sort_values('total_amount', ascending=False)
print('Mejor vendedor del mes:')
print(df4.head(1))
print()
print('Ventas de cada vendedor:')
print(df4[['quantity']+['total_amount']])
Mejor vendedor del mes:
week quantity total_amount
seller_name
Janel O'Curran 174 703 192832.47
Ventas de cada vendedor:
quantity total_amount
seller_name
Janel O'Curran 703 192832.47
Brockie Patience 441 142709.88
Oliviero Charkham 555 141329.76
Vasily Danilyuk 521 129157.55
Daisie Slograve 554 120520.11
Aveline Swanwick 629 118874.33
Arnold Kilkenny 583 94552.04
Kati Innot 512 83704.62
Jase Doy 582 80628.31
Ewell Peres 496 78144.32
Onida Cosely 535 77373.37
Milly Christoffe 442 61733.69
Tobin Roselli 519 56984.42
Cornie Wynrehame 523 52253.57
Cirilo Grandham 470 45009.40
# Resolución gráfica:
sns.set(style='whitegrid',font_scale=1.2)
palette_set2 = sns.color_palette("Set2",10,.85)
plt.bar(df4.index, df4['total_amount'],width=0.80,color=palette_set2)
plt.xticks(rotation=70,fontsize=12)
plt.yticks(fontsize=12)
plt.ylim(30000,200000)
plt.title('MEJORES VENDEDORES',fontsize=18,color='gray',fontweight="bold",y=1.05)
plt.xlabel("Vendedor", fontsize=15,color='gray')
plt.ylabel("Ventas totales",fontsize=15,color='gray')
plt.gcf().set_size_inches(10, 5)
plt.show()
# Resolución analítica:
df5 = (my_df.groupby('week').sum()).sort_values('total_amount', ascending=False)
print('Variaciones en ventas a lo largo del mes:')
print(df5)
Variaciones en ventas a lo largo del mes:
quantity total_amount
week
1 2449 507458.81
2 2444 415364.44
3 2114 329140.03
4 1058 223844.56
# Resolución gráfica:
sns.set(style='whitegrid',font_scale=1.2)
plt.bar(df5.index, df5['total_amount'],width=0.80,color=palette_set2)
plt.xticks(rotation=0,fontsize=12)
plt.yticks(fontsize=12)
plt.xticks(np.arange(5),(' ','Semana 1','Semana 2','Semana 3','Semana 4'))
plt.ylim(125000,525000)
plt.title('VENTAS EN EL MES',fontsize=18,color='gray',fontweight="bold",y=1.05)
plt.xlabel(" ")
plt.ylabel("Ventas totales",fontsize=15,color='gray')
plt.gcf().set_size_inches(7,4)
plt.show()
# Resolución analítica:
df6 = (my_df.groupby('country_name').sum()).sort_values('total_amount', ascending=False).head()
print('Países que más compraron:')
print(df6[['quantity']+['total_amount']])
Países que más compraron:
quantity total_amount
country_name
Brazil 2515 441271.85
Argentina 947 205832.78
Colombia 881 177514.29
Peru 1027 161421.12
Mexico 846 138619.99
# Resolución gráfica:
sns.set(style='whitegrid',font_scale=1.2)
palette_set2 = sns.color_palette("Set2",10,.85)
plt.bar(df6.index, df6['total_amount'],width=0.80,color=palette_set2)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.ylim(75000,475000)
plt.title('PAÍSES QUE MÁS COMPRARON',fontsize=18,color='gray',fontweight="bold",y=1.05)
plt.xlabel("País",fontsize=15,color='gray')
plt.ylabel("Ventas totales",fontsize=15,color='gray')
plt.gcf().set_size_inches(7, 4)
plt.show()
# Resolución analítica:
df7 = my_df[(my_df['country_name']=='Brazil') | (my_df['country_name']=='Argentina')| (my_df['country_name']=='Colombia')| (my_df['country_name']=='Peru')| (my_df['country_name']=='Mexico')]
df8 = df7[(df7['article_name']== 'Notebook') | (df7['article_name']=='CPU')]
df9 = df7[(df7['article_name']== 'Notebook')]
df10 = df7[(df7['article_name']== 'CPU')]
df11 = (df9.groupby('country_name').sum()).sort_values('quantity', ascending=False).head()
print('Notebooks compradas:')
print(df11[['quantity']])
print()
df12 = (df10.groupby('country_name').sum()).sort_values('quantity', ascending=False).head()
print('CPUs compradas:')
print(df12[['quantity']])
Notebooks compradas:
quantity
country_name
Brazil 83
Mexico 44
Argentina 43
Peru 32
Colombia 18
CPUs compradas:
quantity
country_name
Argentina 104
Brazil 82
Mexico 19
Colombia 17
Peru 16
sns.set(style='whitegrid',font_scale=1.2)
palette_set2 = sns.color_palette("Set2",10,.85)
color = sns.color_palette([palette_set2[3]])
color2 = sns.color_palette([palette_set2[4]])
plt.bar(df12.index, df12['quantity'], label='CPUs', alpha=0.5,width=0.80,color=color)
plt.bar(df11.index, df11['quantity'], label='Notebooks', alpha=0.5,width=0.80,color=color2)
plt.title('¿NOTEBOOK O CPU? ¿QUÉ PREFIEREN LOS PAÍSES QUE MÁS COMPRARON?',fontsize=18,color='gray',fontweight="bold",y=1.05)
plt.ylabel("Unidades vendidas",fontsize=15,color='gray')
plt.xlabel("País",fontsize=15,color='gray')
plt.legend(title = "Artículo",title_fontsize = 14,fontsize=12)
plt.gcf().set_size_inches(10, 5)
plt.show()
df13 = my_df[(my_df['seller_name']=='Kati Innot')]
df14 = (df13.groupby('country_name').sum()).sort_values('total_amount', ascending=False).head()
print('Países con los que más comerció Kati Innot:')
print(df14[['total_amount']])
Países con los que más comerció Kati Innot:
total_amount
country_name
Brazil 32087.32
Mexico 12752.13
Bolivia 10750.37
Colombia 10502.57
Argentina 5672.06
# Resolución gráfica:
sns.set(style='whitegrid',font_scale=1.2)
palette_set2 = sns.color_palette("Set2",10,.85)
plt.bar(df14.index, df14['total_amount'],width=0.80,color=palette_set2)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.ylim(1000,35000)
plt.title('PAÍSES CON LOS QUE MÁS COMERCIÓ KATI INNOT',fontsize=18,color='gray',fontweight="bold",y=1.05)
plt.xlabel("País",fontsize=15,color='gray')
plt.ylabel("Ventas totales",fontsize=15,color='gray')
plt.gcf().set_size_inches(10, 5)
plt.show()