Projeto: Análise Exploratória de Dados em Linguagem Python Para a Área de Varejo¶
In [1]:
#Imports
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import datetime as dt
In [2]:
#Carregando os Dados
df_dsa = pd.read_csv('dados/dataset.csv')
df_dsa.shape
Out[2]:
(9700, 11)
In [3]:
df_dsa.head()
Out[3]:
| 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 [4]:
df_dsa.tail()
Out[4]:
| 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 [5]:
# Colunas do conjunto de dados
df_dsa.columns
Out[5]:
Index(['ID_Pedido', 'Data_Pedido', 'ID_Cliente', 'Segmento', 'Pais', 'Cidade',
'Estado', 'ID_Produto', 'Categoria', 'SubCategoria', 'Valor_Venda'],
dtype='object')
In [6]:
# Verificando o tipo de dado de cada coluna
df_dsa.dtypes
Out[6]:
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 [7]:
# Resumo estatístico da coluna com o valor de venda
df_dsa['Valor_Venda'].describe()
Out[7]:
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 [8]:
# Verificando se há registros duplicados
df_dsa[df_dsa.duplicated()]
Out[8]:
| ID_Pedido | Data_Pedido | ID_Cliente | Segmento | Pais | Cidade | Estado | ID_Produto | Categoria | SubCategoria | Valor_Venda |
|---|
In [9]:
# Verificando de há valores ausentes
df_dsa.isnull().sum()
Out[9]:
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 [10]:
df_dsa.head()
Out[10]:
| 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 [11]:
df_dsa_p1= df_dsa[df_dsa['Categoria'] == 'Office Supplies']
df_dsa_p1_total = df_dsa_p1.groupby('Cidade')['Valor_Venda'].sum()
cidade_maior_venda = df_dsa_p1_total.idxmax()
print("A cidade com maior valor de venda para a categoria 'Office Supplies' é:", cidade_maior_venda,'com: ', df_dsa_p1_total.max(),'em vendas!')
A cidade com maior valor de venda para a categoria 'Office Supplies' é: New York City com: 68362.814 em vendas!
In [12]:
df_dsa_p2 = df_dsa.groupby('Data_Pedido')['Valor_Venda'].sum()
print(df_dsa_p2)
#Plot
plt.figure(figsize = (20, 5))
df_dsa_p2.plot(x = 'Data_Pedido', y = 'Valor_Venda', color = 'blue')
plt.title('Total de Vendas Por Data do Pedido')
plt.show()
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
...
31/10/2017 2346.5790
31/10/2018 523.9280
31/12/2015 5253.2700
31/12/2016 1381.3440
31/12/2017 731.7680
Name: Valor_Venda, Length: 1226, dtype: float64
In [13]:
df_dsa_p3 = df_dsa.groupby('Estado')['Valor_Venda'].sum().reset_index()
print(df_dsa_p3)
#Plot
plt.figure(figsize = (20, 6))
sns.barplot(data = df_dsa_p3, y = 'Valor_Venda', x = 'Estado').set(title = 'Vendas Por Estado')
plt.xticks(rotation = 80)
plt.show()
Estado Valor_Venda 0 Alabama 19510.6400 1 Arizona 35272.6570 2 Arkansas 11673.8300 3 California 442927.0975 4 Colorado 31841.5980 5 Connecticut 13366.7370 6 Delaware 26452.5890 7 District of Columbia 2865.0200 8 Florida 88043.7000 9 Georgia 48083.1600 10 Idaho 4292.5160 11 Illinois 78109.9270 12 Indiana 48718.4000 13 Iowa 4443.5600 14 Kansas 2914.3100 15 Kentucky 36409.5800 16 Louisiana 9131.0500 17 Maine 1270.5300 18 Maryland 23705.5230 19 Massachusetts 27363.2640 20 Michigan 76081.1740 21 Minnesota 29863.1500 22 Mississippi 10771.3400 23 Missouri 22205.1500 24 Montana 5589.3520 25 Nebraska 7194.9500 26 Nevada 16729.1020 27 New Hampshire 7132.5440 28 New Jersey 34265.7120 29 New Mexico 4783.5220 30 New York 304536.4010 31 North Carolina 55165.9640 32 North Dakota 919.9100 33 Ohio 74277.8020 34 Oklahoma 19683.3900 35 Oregon 17284.4620 36 Pennsylvania 114411.6800 37 Rhode Island 22525.0260 38 South Carolina 8481.7100 39 South Dakota 1315.5600 40 Tennessee 30661.8730 41 Texas 163549.8602 42 Utah 11220.0560 43 Vermont 4524.4700 44 Virginia 68194.6700 45 Washington 133826.0060 46 West Virginia 1209.8240 47 Wisconsin 31154.4700 48 Wyoming 1603.1360
In [42]:
df_dsa_p4 = df_dsa.groupby('Cidade')['Valor_Venda'].sum().reset_index().sort_values('Valor_Venda', ascending=False).head(10)
print(df_dsa_p4)
plt.figure(figsize = (10, 3))
sns.barplot(data = df_dsa_p4, y = 'Valor_Venda', x = 'Cidade').set(title = 'TOP 10 Cidades com Maior Total em Vendas')
plt.xticks(rotation = 25)
plt.show()
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 [15]:
# Agrupar e preparar os dados
dados = df_dsa.groupby('Segmento')['Valor_Venda'].sum().reset_index().set_index('Segmento')
# Plot
dados.plot(kind='pie',y='Valor_Venda',figsize=(4,5),legend=False, title='Segmentos com Maior Valor de Vendas', autopct=lambda p: f'{int(p * dados["Valor_Venda"].sum() / 100):,}')# mostra valor absoluto
plt.ylabel("")
plt.show()
#Comprovando os valores
df_dsa_p5 = df_dsa.groupby('Segmento')['Valor_Venda'].sum().reset_index().sort_values('Valor_Venda', ascending=False).head()
print(df_dsa_p5)
Segmento Valor_Venda 0 Consumer 1.133834e+06 1 Corporate 6.792322e+05 2 Home Office 4.224914e+05
In [43]:
# Qual o Total de Vendas Por Segmento e Por ano?
df_dsa['Ano'] = pd.DatetimeIndex(df_dsa['Data_Pedido']).year
df_dsa_p6 = df_dsa.groupby(['Segmento', 'Ano'])['Valor_Venda'].sum().reset_index()
print(df_dsa_p6)
# Plot
plt.figure(figsize = (10, 5))
sns.barplot(data = df_dsa_p6, x = 'Segmento', y = 'Valor_Venda', hue = 'Ano').set(title = 'Total de Vendas Por Ano e Por Segmento')
plt.show()
Segmento Ano Valor_Venda 0 Consumer 2015 256719.9166 1 Consumer 2016 265295.2593 2 Consumer 2017 288459.5572 3 Consumer 2018 323359.6019 4 Corporate 2015 125819.5957 5 Corporate 2016 114643.1229 6 Corporate 2017 203266.7398 7 Corporate 2018 235502.7284 8 Home Office 2015 88229.0878 9 Home Office 2016 74134.1332 10 Home Office 2017 103639.6270 11 Home Office 2018 156488.5849
Pergunta de Negócio 7 (Desafio Nível Júnior):¶
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 [83]:
# Se o valor da venda for maior que 1000, recebe 15% de desconto, caso contrário, receba um desconto de 10%:
df_dsa['Desconto'] = np.where(df_dsa['Valor_Venda'] > 1000, 0.15, 0.10)
df_dsa
Out[83]:
| ID_Pedido | Data_Pedido | ID_Cliente | Segmento | Pais | Cidade | Estado | ID_Produto | Categoria | SubCategoria | Valor_Venda | Ano | Desconto | Valor_Venda_Liquido | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | CA-2017-152156 | 08/11/2017 | CG-12520 | Consumer | United States | Henderson | Kentucky | FUR-BO-10001798 | Furniture | Bookcases | 261.9600 | 2017 | 0.1 | 235.76400 |
| 1 | CA-2017-152156 | 08/11/2017 | CG-12520 | Consumer | United States | Henderson | Kentucky | FUR-CH-10000454 | Furniture | Chairs | 731.9400 | 2017 | 0.1 | 658.74600 |
| 2 | CA-2017-138688 | 12/06/2017 | 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 | 11/10/2016 | SO-20335 | Consumer | United States | Fort Lauderdale | Florida | FUR-TA-10000577 | Furniture | Tables | 957.5775 | 2016 | 0.1 | 861.81975 |
| 4 | US-2016-108966 | 11/10/2016 | SO-20335 | Consumer | United States | Fort Lauderdale | Florida | OFF-ST-10000760 | Office Supplies | Storage | 22.3680 | 2016 | 0.1 | 20.13120 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 9695 | CA-2018-154116 | 15/12/2018 | KM-16660 | Consumer | United States | Inglewood | California | OFF-PA-10004569 | Office Supplies | Paper | 22.8300 | 2018 | 0.1 | 20.54700 |
| 9696 | CA-2018-154116 | 15/12/2018 | KM-16660 | Consumer | United States | Inglewood | California | OFF-AP-10000027 | Office Supplies | Appliances | 54.3200 | 2018 | 0.1 | 48.88800 |
| 9697 | CA-2018-154116 | 15/12/2018 | KM-16660 | Consumer | United States | Inglewood | California | TEC-PH-10000675 | Technology | Phones | 196.7760 | 2018 | 0.1 | 177.09840 |
| 9698 | CA-2017-105291 | 30/10/2017 | SP-20920 | Consumer | United States | San Luis Obispo | California | OFF-FA-10003059 | Office Supplies | Fasteners | 3.6200 | 2017 | 0.1 | 3.25800 |
| 9699 | CA-2018-147032 | 31/07/2018 | LB-16795 | Home Office | United States | Wilmington | Delaware | OFF-PA-10003256 | Office Supplies | Paper | 11.5400 | 2018 | 0.1 | 10.38600 |
9700 rows × 14 columns
In [84]:
desconto = df_dsa[df_dsa[('Desconto')] == 0.15]
print("Número de vendas com desconto de 15%:", desconto.shape[0])
Número de vendas com desconto de 15%: 457
In [ ]: