Análise Exploratória de Dados em Linguagem Python Para a Área de Varejo¶

In [ ]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import datetime as dt

Carregando os Dados¶

In [ ]:
url = 'https://raw.githubusercontent.com/jeferson-paz/Curso-de-Python-DSA/main/Cap13/dados/dataset.csv'
In [ ]:
df = pd.read_csv(url)
In [ ]:
print(df.head())
        ID_Pedido Data_Pedido ID_Cliente   Segmento           Pais  \
0  CA-2017-152156  08/11/2017   CG-12520   Consumer  United States   
1  CA-2017-152156  08/11/2017   CG-12520   Consumer  United States   
2  CA-2017-138688  12/06/2017   DV-13045  Corporate  United States   
3  US-2016-108966  11/10/2016   SO-20335   Consumer  United States   
4  US-2016-108966  11/10/2016   SO-20335   Consumer  United States   

            Cidade      Estado       ID_Produto        Categoria SubCategoria  \
0        Henderson    Kentucky  FUR-BO-10001798        Furniture    Bookcases   
1        Henderson    Kentucky  FUR-CH-10000454        Furniture       Chairs   
2      Los Angeles  California  OFF-LA-10000240  Office Supplies       Labels   
3  Fort Lauderdale     Florida  FUR-TA-10000577        Furniture       Tables   
4  Fort Lauderdale     Florida  OFF-ST-10000760  Office Supplies      Storage   

   Valor_Venda  
0     261.9600  
1     731.9400  
2      14.6200  
3     957.5775  
4      22.3680  
In [ ]:
df.shape
Out[ ]:
(9700, 11)
In [ ]:
df.head()
Out[ ]:
ID_Pedido Data_Pedido ID_Cliente Segmento Pais Cidade Estado ID_Produto Categoria SubCategoria Valor_Venda
0 CA-2017-152156 08/11/2017 CG-12520 Consumer United States Henderson Kentucky FUR-BO-10001798 Furniture Bookcases 261.9600
1 CA-2017-152156 08/11/2017 CG-12520 Consumer United States Henderson Kentucky FUR-CH-10000454 Furniture Chairs 731.9400
2 CA-2017-138688 12/06/2017 DV-13045 Corporate United States Los Angeles California OFF-LA-10000240 Office Supplies Labels 14.6200
3 US-2016-108966 11/10/2016 SO-20335 Consumer United States Fort Lauderdale Florida FUR-TA-10000577 Furniture Tables 957.5775
4 US-2016-108966 11/10/2016 SO-20335 Consumer United States Fort Lauderdale Florida OFF-ST-10000760 Office Supplies Storage 22.3680
In [ ]:
df.tail()
Out[ ]:
ID_Pedido Data_Pedido ID_Cliente Segmento Pais Cidade Estado ID_Produto Categoria SubCategoria Valor_Venda
9695 CA-2018-154116 15/12/2018 KM-16660 Consumer United States Inglewood California OFF-PA-10004569 Office Supplies Paper 22.830
9696 CA-2018-154116 15/12/2018 KM-16660 Consumer United States Inglewood California OFF-AP-10000027 Office Supplies Appliances 54.320
9697 CA-2018-154116 15/12/2018 KM-16660 Consumer United States Inglewood California TEC-PH-10000675 Technology Phones 196.776
9698 CA-2017-105291 30/10/2017 SP-20920 Consumer United States San Luis Obispo California OFF-FA-10003059 Office Supplies Fasteners 3.620
9699 CA-2018-147032 31/07/2018 LB-16795 Home Office United States Wilmington Delaware OFF-PA-10003256 Office Supplies Paper 11.540

Análise Exploratória¶

In [ ]:
df.columns
Out[ ]:
Index(['ID_Pedido', 'Data_Pedido', 'ID_Cliente', 'Segmento', 'Pais', 'Cidade',
       'Estado', 'ID_Produto', 'Categoria', 'SubCategoria', 'Valor_Venda'],
      dtype='object')
In [ ]:
df.dtypes
Out[ ]:
ID_Pedido        object
Data_Pedido      object
ID_Cliente       object
Segmento         object
Pais             object
Cidade           object
Estado           object
ID_Produto       object
Categoria        object
SubCategoria     object
Valor_Venda     float64
dtype: object
In [ ]:
df['Valor_Venda'].describe()
Out[ ]:
count     9700.000000
mean       230.469892
std        627.504252
min          0.444000
25%         17.248000
50%         54.272000
75%        209.932500
max      22638.480000
Name: Valor_Venda, dtype: float64
In [ ]:
df[df.duplicated()]
Out[ ]:
ID_Pedido Data_Pedido ID_Cliente Segmento Pais Cidade Estado ID_Produto Categoria SubCategoria Valor_Venda
In [ ]:
df.isnull().sum()
Out[ ]:
ID_Pedido       0
Data_Pedido     0
ID_Cliente      0
Segmento        0
Pais            0
Cidade          0
Estado          0
ID_Produto      0
Categoria       0
SubCategoria    0
Valor_Venda     0
dtype: int64
In [ ]:
df.head()
Out[ ]:
ID_Pedido Data_Pedido ID_Cliente Segmento Pais Cidade Estado ID_Produto Categoria SubCategoria Valor_Venda
0 CA-2017-152156 08/11/2017 CG-12520 Consumer United States Henderson Kentucky FUR-BO-10001798 Furniture Bookcases 261.9600
1 CA-2017-152156 08/11/2017 CG-12520 Consumer United States Henderson Kentucky FUR-CH-10000454 Furniture Chairs 731.9400
2 CA-2017-138688 12/06/2017 DV-13045 Corporate United States Los Angeles California OFF-LA-10000240 Office Supplies Labels 14.6200
3 US-2016-108966 11/10/2016 SO-20335 Consumer United States Fort Lauderdale Florida FUR-TA-10000577 Furniture Tables 957.5775
4 US-2016-108966 11/10/2016 SO-20335 Consumer United States Fort Lauderdale Florida OFF-ST-10000760 Office Supplies Storage 22.3680

Pergunta de Negócio 1:¶

Qual Cidade com Maior Valor de Venda de Produtos da Categoria 'Office Supplies'?¶

In [ ]:
df_dsa_p1 = df[df['Categoria'] == 'Office Supplies']
In [ ]:
df_dsa_p1_total = df_dsa_p1.groupby('Cidade')['Valor_Venda'].sum()
In [ ]:
cidade_maior_venda = df_dsa_p1_total.idxmax()
print("Cidade com maior valor de venda para 'Office Supplies':", cidade_maior_venda)
Cidade com maior valor de venda para 'Office Supplies': New York City
In [ ]:
df_dsa_p1_total.sort_values(ascending = False)
Out[ ]:
Cidade
New York City    68362.814
Los Angeles      47098.100
San Francisco    41771.198
Seattle          34856.878
Philadelphia     29313.687
                   ...    
Ormond Beach         2.808
Pensacola            2.214
Jupiter              2.064
Elyria               1.824
Abilene              1.392
Name: Valor_Venda, Length: 480, dtype: float64

Pergunta de Negócio 2:¶

Qual o Total de Vendas Por Data do Pedido?¶

Demonstre o resultado através de um gráfico de barras.

In [ ]:
df = df.groupby('Data_Pedido')['Valor_Venda'].sum()
In [ ]:
df.head()
Out[ ]:
Data_Pedido
01/01/2018    1481.8280
01/02/2015     468.9000
01/02/2017     161.9700
01/03/2015    2203.1510
01/03/2016    1642.1744
Name: Valor_Venda, dtype: float64
In [ ]:
plt.figure(figsize = (20, 6))
df.plot(x = 'Data_Pedido', y = 'Valor_Venda', color = 'skyblue')
plt.title('Total de Vendas Por Data do Pedido')
plt.show()
No description has been provided for this image

Pergunta de Negócio 3:¶

Qual o Total de Vendas por Estado?¶

Demonstre o resultado através de um gráfico de barras.

In [ ]:
url = 'https://raw.githubusercontent.com/jeferson-paz/Curso-de-Python-DSA/main/Cap13/dados/dataset.csv'
In [ ]:
df = pd.read_csv(url)
In [ ]:
print(df.head())
        ID_Pedido Data_Pedido ID_Cliente   Segmento           Pais  \
0  CA-2017-152156  08/11/2017   CG-12520   Consumer  United States   
1  CA-2017-152156  08/11/2017   CG-12520   Consumer  United States   
2  CA-2017-138688  12/06/2017   DV-13045  Corporate  United States   
3  US-2016-108966  11/10/2016   SO-20335   Consumer  United States   
4  US-2016-108966  11/10/2016   SO-20335   Consumer  United States   

            Cidade      Estado       ID_Produto        Categoria SubCategoria  \
0        Henderson    Kentucky  FUR-BO-10001798        Furniture    Bookcases   
1        Henderson    Kentucky  FUR-CH-10000454        Furniture       Chairs   
2      Los Angeles  California  OFF-LA-10000240  Office Supplies       Labels   
3  Fort Lauderdale     Florida  FUR-TA-10000577        Furniture       Tables   
4  Fort Lauderdale     Florida  OFF-ST-10000760  Office Supplies      Storage   

   Valor_Venda  
0     261.9600  
1     731.9400  
2      14.6200  
3     957.5775  
4      22.3680  
In [ ]:
df = df.groupby('Estado')['Valor_Venda'].sum().reset_index()
In [ ]:
plt.figure(figsize = (16, 6))

# Defina uma paleta personalizada
custom_palette = sns.color_palette(["#1f77b4", "#3178c6", "#5aa3e2", "#8ab7e0", "#c6d9f0"])

sns.barplot(data = df, 
            y = 'Valor_Venda', 
            x = 'Estado', 
            palette=custom_palette).set(title = 'Vendas Por Estado')

plt.xticks(rotation = 80)
plt.show()
No description has been provided for this image
In [ ]:
df_dsa_p3 = df.groupby('Estado')['Valor_Venda'].sum().reset_index()

df_dsa_p3 = df_dsa_p3.sort_values(by='Valor_Venda', ascending=False)

sns.set_theme(style="whitegrid")
plt.figure(figsize=(16, 6))

ax = sns.barplot(x='Estado', y='Valor_Venda', data=df_dsa_p3, palette='Blues_d')

plt.xlabel('Estado', fontsize=12)
plt.ylabel('Total de Vendas', fontsize=12)
plt.title('Total de Vendas Por Estado', fontsize=16)
plt.xticks(rotation=45)

plt.tight_layout()

plt.show()
No description has been provided for this image

Pergunta de Negócio 4:¶

Quais São as 10 Cidades com Maior Total de Vendas?¶

Demonstre o resultado através de um gráfico de barras.

In [ ]:
url = 'https://raw.githubusercontent.com/jeferson-paz/Curso-de-Python-DSA/main/Cap13/dados/dataset.csv'
In [ ]:
df = pd.read_csv(url)
In [ ]:
vendas_por_cidade = df.groupby('Cidade')['Valor_Venda'].sum().reset_index()
top_10_cidades = vendas_por_cidade.sort_values(by='Valor_Venda', ascending=False).head(10)
In [ ]:
top_10_cidades.head(10)
Out[ ]:
Cidade Valor_Venda
327 New York City 251749.2190
265 Los Angeles 171654.6330
450 Seattle 114725.4780
436 San Francisco 107489.9520
372 Philadelphia 107197.8030
207 Houston 61590.1868
435 San Diego 47458.3790
80 Chicago 46974.3430
216 Jacksonville 44713.1830
123 Detroit 42446.9440
In [ ]:
sns.set(style="whitegrid")
plt.figure(figsize=(12, 6))
sns.barplot(x='Cidade', y='Valor_Venda', data=top_10_cidades, palette='Blues_d')
plt.xlabel('Cidade')
plt.ylabel('Total de Vendas')
plt.title('Top 10 Cidades com Maior Total de Vendas')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
No description has been provided for this image

Pergunta de Negócio 5:¶

Qual Segmento Teve o Maior Total de Vendas?¶

Demonstre o resultado através de um gráfico de pizza.

In [ ]:
vendas_por_segmento = df.groupby('Segmento')['Valor_Venda'].sum().reset_index()


def formato_pie(valores, labels):
    return [f'{label}: R${valor:,.2f}' for valor, label in zip(valores, labels)]

cores = sns.color_palette("Blues", len(vendas_por_segmento))

plt.figure(figsize=(8, 8))
plt.pie(vendas_por_segmento['Valor_Venda'], 
        labels=vendas_por_segmento['Segmento'], 
        colors=cores,
        autopct=lambda pct: formato_pie([pct * sum(vendas_por_segmento['Valor_Venda']) / 100], [''])[0],
        startangle=140)
plt.title('Total de Vendas por Segmento')
plt.axis('equal')
plt.show()
No description has been provided for this image

Pergunta de Negócio 6:¶

Qual o Total de Vendas Por Segmento e Por Ano?¶

In [ ]:
df.head()
Out[ ]:
ID_Pedido Data_Pedido ID_Cliente Segmento Pais Cidade Estado ID_Produto Categoria SubCategoria Valor_Venda
0 CA-2017-152156 08/11/2017 CG-12520 Consumer United States Henderson Kentucky FUR-BO-10001798 Furniture Bookcases 261.9600
1 CA-2017-152156 08/11/2017 CG-12520 Consumer United States Henderson Kentucky FUR-CH-10000454 Furniture Chairs 731.9400
2 CA-2017-138688 12/06/2017 DV-13045 Corporate United States Los Angeles California OFF-LA-10000240 Office Supplies Labels 14.6200
3 US-2016-108966 11/10/2016 SO-20335 Consumer United States Fort Lauderdale Florida FUR-TA-10000577 Furniture Tables 957.5775
4 US-2016-108966 11/10/2016 SO-20335 Consumer United States Fort Lauderdale Florida OFF-ST-10000760 Office Supplies Storage 22.3680
In [ ]:
df['Data_Pedido'] = pd.to_datetime(df['Data_Pedido'], dayfirst = True)
In [ ]:
df.dtypes
Out[ ]:
ID_Pedido               object
Data_Pedido     datetime64[ns]
ID_Cliente              object
Segmento                object
Pais                    object
Cidade                  object
Estado                  object
ID_Produto              object
Categoria               object
SubCategoria            object
Valor_Venda            float64
dtype: object
In [ ]:
df['Ano'] = df['Data_Pedido'].dt.year
In [ ]:
df.head()
Out[ ]:
ID_Pedido Data_Pedido ID_Cliente Segmento Pais Cidade Estado ID_Produto Categoria SubCategoria Valor_Venda Ano
0 CA-2017-152156 2017-11-08 CG-12520 Consumer United States Henderson Kentucky FUR-BO-10001798 Furniture Bookcases 261.9600 2017
1 CA-2017-152156 2017-11-08 CG-12520 Consumer United States Henderson Kentucky FUR-CH-10000454 Furniture Chairs 731.9400 2017
2 CA-2017-138688 2017-06-12 DV-13045 Corporate United States Los Angeles California OFF-LA-10000240 Office Supplies Labels 14.6200 2017
3 US-2016-108966 2016-10-11 SO-20335 Consumer United States Fort Lauderdale Florida FUR-TA-10000577 Furniture Tables 957.5775 2016
4 US-2016-108966 2016-10-11 SO-20335 Consumer United States Fort Lauderdale Florida OFF-ST-10000760 Office Supplies Storage 22.3680 2016
In [ ]:
df_dsa_p6 = df.groupby(['Ano', 'Segmento'])['Valor_Venda'].sum()
In [ ]:
df_dsa_p6
Out[ ]:
Ano   Segmento   
2015  Consumer       256719.9166
      Corporate      125819.5957
      Home Office     88229.0878
2016  Consumer       265295.2593
      Corporate      114643.1229
      Home Office     74134.1332
2017  Consumer       288459.5572
      Corporate      203266.7398
      Home Office    103639.6270
2018  Consumer       323359.6019
      Corporate      235502.7284
      Home Office    156488.5849
Name: Valor_Venda, dtype: float64

Pergunta de Negócio 7:¶

Os gestores da empresa estão considerando conceder diferentes faixas de descontos e gostariam de fazer uma simulação com base na regra abaixo:

  • Se o Valor_Venda for maior que 1000 recebe 15% de desconto.
  • Se o Valor_Venda for menor que 1000 recebe 10% de desconto.

Quantas Vendas Receberiam 15% de Desconto?¶

In [ ]:
df['Desconto'] = np.where(df['Valor_Venda'] > 1000, 0.15, 0.10)
In [ ]:
df.head()
Out[ ]:
ID_Pedido Data_Pedido ID_Cliente Segmento Pais Cidade Estado ID_Produto Categoria SubCategoria Valor_Venda Ano Desconto
0 CA-2017-152156 2017-11-08 CG-12520 Consumer United States Henderson Kentucky FUR-BO-10001798 Furniture Bookcases 261.9600 2017 0.1
1 CA-2017-152156 2017-11-08 CG-12520 Consumer United States Henderson Kentucky FUR-CH-10000454 Furniture Chairs 731.9400 2017 0.1
2 CA-2017-138688 2017-06-12 DV-13045 Corporate United States Los Angeles California OFF-LA-10000240 Office Supplies Labels 14.6200 2017 0.1
3 US-2016-108966 2016-10-11 SO-20335 Consumer United States Fort Lauderdale Florida FUR-TA-10000577 Furniture Tables 957.5775 2016 0.1
4 US-2016-108966 2016-10-11 SO-20335 Consumer United States Fort Lauderdale Florida OFF-ST-10000760 Office Supplies Storage 22.3680 2016 0.1
In [ ]:
df['Desconto'].value_counts()
Out[ ]:
Desconto
0.10    9243
0.15     457
Name: count, dtype: int64
In [ ]:
print('No Total 457 Vendas Receberiam Desconto de 15%.')
No Total 457 Vendas Receberiam Desconto de 15%.

Pergunta de Negócio 8:¶

Considere Que a Empresa Decida Conceder o Desconto de 15% do Item Anterior. Qual Seria a Média do Valor de Venda Antes e Depois do Desconto?¶

In [ ]:
df['Valor_Venda_Desconto'] = df['Valor_Venda'] - (df['Valor_Venda'] * df['Desconto'])
In [ ]:
df.head()
Out[ ]:
ID_Pedido Data_Pedido ID_Cliente Segmento Pais Cidade Estado ID_Produto Categoria SubCategoria Valor_Venda Ano Desconto Valor_Venda_Desconto
0 CA-2017-152156 2017-11-08 CG-12520 Consumer United States Henderson Kentucky FUR-BO-10001798 Furniture Bookcases 261.9600 2017 0.1 235.76400
1 CA-2017-152156 2017-11-08 CG-12520 Consumer United States Henderson Kentucky FUR-CH-10000454 Furniture Chairs 731.9400 2017 0.1 658.74600
2 CA-2017-138688 2017-06-12 DV-13045 Corporate United States Los Angeles California OFF-LA-10000240 Office Supplies Labels 14.6200 2017 0.1 13.15800
3 US-2016-108966 2016-10-11 SO-20335 Consumer United States Fort Lauderdale Florida FUR-TA-10000577 Furniture Tables 957.5775 2016 0.1 861.81975
4 US-2016-108966 2016-10-11 SO-20335 Consumer United States Fort Lauderdale Florida OFF-ST-10000760 Office Supplies Storage 22.3680 2016 0.1 20.13120
In [ ]:
df_dsa_p8_vendas_antes_desconto = df.loc[df['Desconto'] == 0.15, 'Valor_Venda']
In [ ]:
df_dsa_p8_vendas_depois_desconto = df.loc[df['Desconto'] == 0.15, 'Valor_Venda_Desconto']
In [ ]:
media_vendas_antes_desconto = df_dsa_p8_vendas_antes_desconto.mean()
In [ ]:
media_vendas_depois_desconto = df_dsa_p8_vendas_depois_desconto.mean()
In [ ]:
print("Média das vendas antes do desconto de 15%:", round(media_vendas_antes_desconto, 2))
Média das vendas antes do desconto de 15%: 2116.81
In [ ]:
print("Média das vendas depois do desconto de 15%:", round(media_vendas_depois_desconto, 2))
Média das vendas depois do desconto de 15%: 1799.29

Pergunta de Negócio 9:¶

Qual o Média de Vendas Por Segmento, Por Ano e Por Mês?¶

Demonstre o resultado através de gráfico de linha.

In [ ]:
df['Mes'] = df['Data_Pedido'].dt.month
In [ ]:
df.head()
Out[ ]:
ID_Pedido Data_Pedido ID_Cliente Segmento Pais Cidade Estado ID_Produto Categoria SubCategoria Valor_Venda Ano Desconto Valor_Venda_Desconto Mes
0 CA-2017-152156 2017-11-08 CG-12520 Consumer United States Henderson Kentucky FUR-BO-10001798 Furniture Bookcases 261.9600 2017 0.1 235.76400 11
1 CA-2017-152156 2017-11-08 CG-12520 Consumer United States Henderson Kentucky FUR-CH-10000454 Furniture Chairs 731.9400 2017 0.1 658.74600 11
2 CA-2017-138688 2017-06-12 DV-13045 Corporate United States Los Angeles California OFF-LA-10000240 Office Supplies Labels 14.6200 2017 0.1 13.15800 6
3 US-2016-108966 2016-10-11 SO-20335 Consumer United States Fort Lauderdale Florida FUR-TA-10000577 Furniture Tables 957.5775 2016 0.1 861.81975 10
4 US-2016-108966 2016-10-11 SO-20335 Consumer United States Fort Lauderdale Florida OFF-ST-10000760 Office Supplies Storage 22.3680 2016 0.1 20.13120 10
In [ ]:
df_dsa_p9 = df.groupby(['Ano', 'Mes', 'Segmento'])['Valor_Venda'].agg([np.sum, np.mean, np.median])
C:\Users\pazj8\AppData\Local\Temp\ipykernel_22560\1933429250.py:1: FutureWarning: The provided callable <function sum at 0x000001FDC7C41080> is currently using SeriesGroupBy.sum. In a future version of pandas, the provided callable will be used directly. To keep current behavior pass the string "sum" instead.
  df_dsa_p9 = df.groupby(['Ano', 'Mes', 'Segmento'])['Valor_Venda'].agg([np.sum, np.mean, np.median])
C:\Users\pazj8\AppData\Local\Temp\ipykernel_22560\1933429250.py:1: FutureWarning: The provided callable <function mean at 0x000001FDC7C42160> is currently using SeriesGroupBy.mean. In a future version of pandas, the provided callable will be used directly. To keep current behavior pass the string "mean" instead.
  df_dsa_p9 = df.groupby(['Ano', 'Mes', 'Segmento'])['Valor_Venda'].agg([np.sum, np.mean, np.median])
C:\Users\pazj8\AppData\Local\Temp\ipykernel_22560\1933429250.py:1: FutureWarning: The provided callable <function median at 0x000001FDC7D97920> is currently using SeriesGroupBy.median. In a future version of pandas, the provided callable will be used directly. To keep current behavior pass the string "median" instead.
  df_dsa_p9 = df.groupby(['Ano', 'Mes', 'Segmento'])['Valor_Venda'].agg([np.sum, np.mean, np.median])
In [ ]:
df_dsa_p9
Out[ ]:
sum mean median
Ano Mes Segmento
2015 1 Consumer 6896.6290 146.736787 36.440
Corporate 1701.5280 130.886769 51.940
Home Office 5607.5500 329.855882 62.820
2 Consumer 3167.8540 117.327926 22.776
Corporate 623.1180 69.235333 62.310
... ... ... ... ... ...
2018 11 Corporate 44357.9862 341.215278 79.530
Home Office 24009.3840 247.519423 56.560
12 Consumer 48107.4558 183.616244 52.533
Corporate 20524.4320 153.167403 46.460
Home Office 13022.3910 224.523983 49.260

144 rows × 3 columns

In [ ]:
anos = df_dsa_p9.index.get_level_values(0)
meses = df_dsa_p9.index.get_level_values(1)
segmentos = df_dsa_p9.index.get_level_values(2)
In [ ]:
plt.figure(figsize = (12, 6))
sns.set()
fig1 = sns.relplot(kind = 'line',
                data = df_dsa_p9, 
                y = 'mean', 
                x = meses,
                hue = segmentos, 
                col = anos,
                col_wrap = 4)
plt.show()
c:\Users\pazj8\AppData\Local\anaconda3\Lib\site-packages\seaborn\_oldcore.py:1119: FutureWarning: use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.
  with pd.option_context('mode.use_inf_as_na', True):
c:\Users\pazj8\AppData\Local\anaconda3\Lib\site-packages\seaborn\_oldcore.py:1119: FutureWarning: use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.
  with pd.option_context('mode.use_inf_as_na', True):
c:\Users\pazj8\AppData\Local\anaconda3\Lib\site-packages\seaborn\_oldcore.py:1119: FutureWarning: use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.
  with pd.option_context('mode.use_inf_as_na', True):
c:\Users\pazj8\AppData\Local\anaconda3\Lib\site-packages\seaborn\_oldcore.py:1119: FutureWarning: use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.
  with pd.option_context('mode.use_inf_as_na', True):
c:\Users\pazj8\AppData\Local\anaconda3\Lib\site-packages\seaborn\_oldcore.py:1119: FutureWarning: use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.
  with pd.option_context('mode.use_inf_as_na', True):
c:\Users\pazj8\AppData\Local\anaconda3\Lib\site-packages\seaborn\_oldcore.py:1119: FutureWarning: use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.
  with pd.option_context('mode.use_inf_as_na', True):
c:\Users\pazj8\AppData\Local\anaconda3\Lib\site-packages\seaborn\_oldcore.py:1119: FutureWarning: use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.
  with pd.option_context('mode.use_inf_as_na', True):
c:\Users\pazj8\AppData\Local\anaconda3\Lib\site-packages\seaborn\_oldcore.py:1119: FutureWarning: use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.
  with pd.option_context('mode.use_inf_as_na', True):
<Figure size 1200x600 with 0 Axes>
No description has been provided for this image

Pergunta de Negócio 10:¶

Qual o Total de Vendas Por Categoria e SubCategoria, Considerando Somente as Top 12 SubCategorias?¶

Demonstre tudo através de um único gráfico.

In [ ]:
df.head()
Out[ ]:
ID_Pedido Data_Pedido ID_Cliente Segmento Pais Cidade Estado ID_Produto Categoria SubCategoria Valor_Venda Ano Desconto Valor_Venda_Desconto Mes
0 CA-2017-152156 2017-11-08 CG-12520 Consumer United States Henderson Kentucky FUR-BO-10001798 Furniture Bookcases 261.9600 2017 0.1 235.76400 11
1 CA-2017-152156 2017-11-08 CG-12520 Consumer United States Henderson Kentucky FUR-CH-10000454 Furniture Chairs 731.9400 2017 0.1 658.74600 11
2 CA-2017-138688 2017-06-12 DV-13045 Corporate United States Los Angeles California OFF-LA-10000240 Office Supplies Labels 14.6200 2017 0.1 13.15800 6
3 US-2016-108966 2016-10-11 SO-20335 Consumer United States Fort Lauderdale Florida FUR-TA-10000577 Furniture Tables 957.5775 2016 0.1 861.81975 10
4 US-2016-108966 2016-10-11 SO-20335 Consumer United States Fort Lauderdale Florida OFF-ST-10000760 Office Supplies Storage 22.3680 2016 0.1 20.13120 10
In [ ]:
df_dsa_p10 = df.groupby(['Categoria',
                            'SubCategoria']).sum(numeric_only = True).sort_values('Valor_Venda',
                                                                                ascending = False).head(12)
In [ ]:
df_dsa_p10 = df_dsa_p10[['Valor_Venda']].astype(int).sort_values(by = 'Categoria').reset_index()
In [ ]:
df_dsa_p10
Out[ ]:
Categoria SubCategoria Valor_Venda
0 Furniture Chairs 317919
1 Furniture Tables 202083
2 Furniture Bookcases 108045
3 Furniture Furnishings 88862
4 Office Supplies Storage 216188
5 Office Supplies Binders 194723
6 Office Supplies Appliances 104061
7 Office Supplies Paper 76312
8 Technology Phones 325271
9 Technology Machines 189238
10 Technology Accessories 162791
11 Technology Copiers 146248
In [ ]:
df_dsa_p10_cat = df_dsa_p10.groupby('Categoria').sum(numeric_only = True).reset_index()
In [ ]:
df_dsa_p10_cat
Out[ ]:
Categoria Valor_Venda
0 Furniture 716909
1 Office Supplies 591284
2 Technology 823548
In [ ]:
cores_categorias = ['#0031d8',
                    '#0091d8',
                    '#00d1d8']
In [ ]:
cores_subcategorias = ['#a0b4d8',
                       '#9fb1d8',
                       '#8ea1d8',
                       '#7d8fd8',
                       '#6a8dd8',
                       '#5681d8',
                       '#4284d8',
                       '#2b6fd8',
                       '#1e6bd8',
                       '#185cd8',
                       '#0f4bd8',
                       '#003ad8']
In [ ]:
fig, ax = plt.subplots(figsize=(20, 18))


p1 = ax.pie(df_dsa_p10_cat['Valor_Venda'], 
            radius=1,
            labels=df_dsa_p10_cat['Categoria'],
            wedgeprops=dict(edgecolor='white'),
            colors=cores_categorias)

p2 = ax.pie(df_dsa_p10['Valor_Venda'],
            radius=0.9,
            labels=df_dsa_p10['SubCategoria'],
            autopct='%1.1f%%',
            colors=cores_subcategorias, 
            labeldistance=0.7,
            wedgeprops=dict(edgecolor='white'), 
            pctdistance=0.53,
            rotatelabels=True)

centre_circle = plt.Circle((0, 0), 0.6, fc='white')
fig.gca().add_artist(centre_circle)

plt.annotate(text='Total de Vendas: $ ' + str(int(sum(df_dsa_p10['Valor_Venda']))), xy=(-0.1, 0))

plt.title('Total de Vendas Por Categoria e Top 12 SubCategorias')

plt.show()
No description has been provided for this image

Resumo da Análise¶

Nesta análise exploratória de dados, focamos em diversas perguntas de negócio cruciais para a área de varejo, utilizando ferramentas avançadas de visualização em Python. A seguir, apresentamos uma visão geral dos principais resultados e insights obtidos:

Total de Vendas Por Categoria e Subcategoria (Top 12 Subcategorias)¶

A análise revelou o total de vendas agrupado por categoria e subcategoria, considerando as 12 principais subcategorias. O gráfico gerado ilustra claramente as diferenças de desempenho entre as subcategorias e categorias, permitindo identificar quais subcategorias são mais relevantes em termos de vendas.

Média de Vendas Por Segmento, Ano e Mês¶

Utilizando gráficos de linha, examinamos a média de vendas por segmento ao longo dos anos e meses. Esta visualização fornece uma compreensão detalhada das variações sazonais e tendências de vendas ao longo do tempo, ajudando na tomada de decisões estratégicas.

Simulação de Descontos¶

Com base nas regras de desconto definidas (15% para vendas acima de 1000 e 10% para vendas abaixo de 1000), foi realizada uma simulação para identificar o número de vendas que receberiam 15% de desconto. Este insight é valioso para a formulação de estratégias promocionais e políticas de descontos.

Segmento com Maior Total de Vendas¶

Um gráfico de pizza foi criado para destacar o segmento com o maior total de vendas. Esta visualização permite identificar qual segmento é o mais lucrativo e estratégico para a empresa.

Top 10 Cidades com Maior Total de Vendas¶

Através de um gráfico de barras, foram destacadas as 10 cidades com o maior total de vendas. Este gráfico fornece informações importantes sobre a distribuição regional das vendas e pode auxiliar na alocação de recursos e estratégias de marketing localizadas.

Total de Vendas Por Data do Pedido¶

O gráfico de barras exibido mostra o total de vendas por data do pedido, proporcionando uma visão clara das datas mais lucrativas e padrões de compra.

Esta análise proporciona uma visão abrangente das métricas de vendas e ajuda a identificar áreas de oportunidade e otimização. As visualizações criadas oferecem uma maneira eficaz de comunicar insights complexos de forma clara e impactante, apoiando a tomada de decisões estratégicas e a melhoria contínua dos processos de negócios.