Análise Exploratória de Dados em Linguagem Python Para a Área de Varejo¶
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import datetime as dt
Carregando os Dados¶
url = 'https://raw.githubusercontent.com/jeferson-paz/Curso-de-Python-DSA/main/Cap13/dados/dataset.csv'
df = pd.read_csv(url)
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
df.shape
(9700, 11)
df.head()
| 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 |
df.tail()
| 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¶
df.columns
Index(['ID_Pedido', 'Data_Pedido', 'ID_Cliente', 'Segmento', 'Pais', 'Cidade',
'Estado', 'ID_Produto', 'Categoria', 'SubCategoria', 'Valor_Venda'],
dtype='object')
df.dtypes
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
df['Valor_Venda'].describe()
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
df[df.duplicated()]
| ID_Pedido | Data_Pedido | ID_Cliente | Segmento | Pais | Cidade | Estado | ID_Produto | Categoria | SubCategoria | Valor_Venda |
|---|
df.isnull().sum()
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
df.head()
| 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 |
df_dsa_p1 = df[df['Categoria'] == 'Office Supplies']
df_dsa_p1_total = df_dsa_p1.groupby('Cidade')['Valor_Venda'].sum()
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
df_dsa_p1_total.sort_values(ascending = False)
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
df = df.groupby('Data_Pedido')['Valor_Venda'].sum()
df.head()
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
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()
url = 'https://raw.githubusercontent.com/jeferson-paz/Curso-de-Python-DSA/main/Cap13/dados/dataset.csv'
df = pd.read_csv(url)
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
df = df.groupby('Estado')['Valor_Venda'].sum().reset_index()
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()
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()
url = 'https://raw.githubusercontent.com/jeferson-paz/Curso-de-Python-DSA/main/Cap13/dados/dataset.csv'
df = pd.read_csv(url)
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)
top_10_cidades.head(10)
| 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 |
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()
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()
df.head()
| 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 |
df['Data_Pedido'] = pd.to_datetime(df['Data_Pedido'], dayfirst = True)
df.dtypes
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
df['Ano'] = df['Data_Pedido'].dt.year
df.head()
| 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 |
df_dsa_p6 = df.groupby(['Ano', 'Segmento'])['Valor_Venda'].sum()
df_dsa_p6
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?¶
df['Desconto'] = np.where(df['Valor_Venda'] > 1000, 0.15, 0.10)
df.head()
| 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 |
df['Desconto'].value_counts()
Desconto 0.10 9243 0.15 457 Name: count, dtype: int64
print('No Total 457 Vendas Receberiam Desconto de 15%.')
No Total 457 Vendas Receberiam Desconto de 15%.
df['Valor_Venda_Desconto'] = df['Valor_Venda'] - (df['Valor_Venda'] * df['Desconto'])
df.head()
| 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 |
df_dsa_p8_vendas_antes_desconto = df.loc[df['Desconto'] == 0.15, 'Valor_Venda']
df_dsa_p8_vendas_depois_desconto = df.loc[df['Desconto'] == 0.15, 'Valor_Venda_Desconto']
media_vendas_antes_desconto = df_dsa_p8_vendas_antes_desconto.mean()
media_vendas_depois_desconto = df_dsa_p8_vendas_depois_desconto.mean()
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
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
df['Mes'] = df['Data_Pedido'].dt.month
df.head()
| 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 |
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])
df_dsa_p9
| 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
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)
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>
df.head()
| 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 |
df_dsa_p10 = df.groupby(['Categoria',
'SubCategoria']).sum(numeric_only = True).sort_values('Valor_Venda',
ascending = False).head(12)
df_dsa_p10 = df_dsa_p10[['Valor_Venda']].astype(int).sort_values(by = 'Categoria').reset_index()
df_dsa_p10
| 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 |
df_dsa_p10_cat = df_dsa_p10.groupby('Categoria').sum(numeric_only = True).reset_index()
df_dsa_p10_cat
| Categoria | Valor_Venda | |
|---|---|---|
| 0 | Furniture | 716909 |
| 1 | Office Supplies | 591284 |
| 2 | Technology | 823548 |
cores_categorias = ['#0031d8',
'#0091d8',
'#00d1d8']
cores_subcategorias = ['#a0b4d8',
'#9fb1d8',
'#8ea1d8',
'#7d8fd8',
'#6a8dd8',
'#5681d8',
'#4284d8',
'#2b6fd8',
'#1e6bd8',
'#185cd8',
'#0f4bd8',
'#003ad8']
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()
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.