In [1]:
# Versão da Linguagem Python
from platform import python_version
print('Versão da Linguagem Python Usada Neste Jupyter Notebook:', python_version())
Você recebeu a tarefa de analisar os dados de compras de um web site! Os dados estão no formato JSON e disponíveis junto com este notebook.
No site, cada usuário efetua login usando sua conta pessoal e pode adquirir produtos à medida que navega pela lista de produtos oferecidos. Cada produto possui um valor de venda. Dados de idade e sexo de cada usuário foram coletados e estão fornecidos no arquivo JSON.
Seu trabalho é entregar uma análise de comportamento de compra dos consumidores. Esse é um tipo de atividade comum realizado por Cientistas de Dados e o resultado deste trabalho pode ser usado, por exemplo, para alimentar um modelo de Machine Learning e fazer previsões sobre comportamentos futuros.
Mas nesta missão você vai analisar o comportamento de compra dos consumidores usando o pacote Pandas da linguagem Python e seu relatório final deve incluir cada um dos seguintes itens:
Contagem de Compradores
Análise Geral de Compras
Informações Demográficas Por Gênero
Análise de Compras Por Gênero
Identifique os 5 principais compradores pelo valor total de compra e, em seguida, liste (em uma tabela):
Identifique os 5 itens mais populares por contagem de compras e, em seguida, liste (em uma tabela):
Identifique os 5 itens mais lucrativos pelo valor total de compra e, em seguida, liste (em uma tabela):
Como considerações finais:
In [2]:
# Imports
import pandas as pd
import numpy as np
In [3]:
pd.__version__
Out[3]:
In [4]:
np.__version__
Out[4]:
In [5]:
# Carrega o arquivo
load_file = "dados_compras.json"
purchase_file = pd.read_json(load_file, orient = "records")
purchase_file.head()
Out[5]:
In [6]:
player_demographics = purchase_file.loc[:, ["Sexo", "Login", "Idade"]]
player_demographics.head()
Out[6]:
In [7]:
# Limpeza dos dados e remoção de duplicatas
player_demographics = player_demographics.drop_duplicates()
player_count = player_demographics.count()[0]
player_count
Out[7]:
In [8]:
# Converter saída para DF para uso posterior em análise
pd.DataFrame({"Total de Jogadores" : [player_count]})
Out[8]:
In [9]:
# Cálculos básicos
average_item_price = purchase_file["Valor"].mean()
total_item_price = purchase_file["Valor"].sum()
total_item_count = purchase_file["Valor"].count()
item_id = len(purchase_file["Item ID"].unique())
# Dataframe para os resultados
summary_calculations = pd.DataFrame({"Número de Itens Únicos" : item_id,
"Número de Compras" : total_item_count,
"Total de Vendas" : total_item_price,
"Preço Médio" : [average_item_price]})
# Data Munging
summary_calculations = summary_calculations.round(2)
summary_calculations ["Preço Médio"] = summary_calculations["Preço Médio"].map("${:,.2f}".format)
summary_calculations ["Total de Vendas"] = summary_calculations["Total de Vendas"].map("${:,.2f}".format)
summary_calculations = summary_calculations.loc[:, ["Número de Itens Únicos", "Preço Médio", "Número de Compras", "Total de Vendas"]]
summary_calculations
Out[9]:
In [10]:
purchase_file["Item ID"].unique()
Out[10]:
In [11]:
# Cálculos básicos
gender_count = player_demographics["Sexo"].value_counts()
gender_percent = (gender_count / player_count) * 100
# Dataframe para os resultados
gender_demographics = pd.DataFrame({"Sexo" : gender_count,
"%" : gender_percent})
# Data Munging
gender_demographics = gender_demographics.round(2)
gender_demographics ["%"] = gender_demographics["%"].map("{:,.1f}%".format)
In [12]:
# Output Test
gender_count
Out[12]:
In [13]:
# Output Test
gender_percent
Out[13]:
In [14]:
# Output Test
gender_demographics
Out[14]:
In [15]:
# Agrupamentos
gender_total_item_price = purchase_file.groupby(["Sexo"]).sum()["Valor"].rename("Total de Vendas")
gender_average_item_price = purchase_file.groupby(["Sexo"]).mean()["Valor"].rename("Average Price")
purchase_count = purchase_file.groupby(["Sexo"]).count()["Valor"].rename("Número de Compras")
normalized_total = gender_total_item_price / gender_demographics["Sexo"]
# Armazenando o resultado em um Dataframe
gender_purchasing_analysis = pd.DataFrame({"Número de Compras" : purchase_count,
"Valor Médio Por Item" : gender_average_item_price,
"Total de Vendas" : gender_total_item_price,
"Total Normalizado" : normalized_total})
# Data Munging
gender_purchasing_analysis = gender_purchasing_analysis.round(2)
gender_purchasing_analysis ["Valor Médio Por Item"] = gender_purchasing_analysis["Valor Médio Por Item"].map("${:,.2f}".format)
gender_purchasing_analysis ["Total de Vendas"] = gender_purchasing_analysis["Total de Vendas"].map("${:,.2f}".format)
gender_purchasing_analysis ["Total Normalizado"] = gender_purchasing_analysis["Total Normalizado"].map("${:,.2f}".format)
In [16]:
# Resultado
gender_total_item_price
Out[16]:
In [17]:
# Resultado
gender_average_item_price
Out[17]:
In [18]:
# Resultado
gender_purchasing_analysis
Out[18]:
In [19]:
# Resultado
normalized_total
Out[19]:
In [20]:
player_demographics
Out[20]:
In [21]:
# Cálculos básicos
age_bins = [0, 9.99, 14.99, 19.99, 24.99, 29.99, 34.99, 39.99, 999]
age_bracket = ["Menos de 10", "10 a 14", "15 a 19", "20 a 24", "25 a 29", "30 a 34", "35 a 39", "Mais de 40"]
purchase_file["Range de Idades"] = pd.cut(purchase_file["Idade"], age_bins, labels=age_bracket)
# Cálculos básicos
age_demographics_count = purchase_file["Range de Idades"].value_counts()
age_demographics_average_item_price = purchase_file.groupby(["Range de Idades"]).mean()["Valor"]
age_demographics_total_item_price = purchase_file.groupby(["Range de Idades"]).sum()["Valor"]
age_demographics_percent = (age_demographics_count / player_count) * 100
# Dataframe para os resultados
age_demographics = pd.DataFrame({"Contagem": age_demographics_count, "%": age_demographics_percent, "Valor Unitario": age_demographics_average_item_price, "Valor Total de Compra": age_demographics_total_item_price})
# Data Munging
age_demographics ["Valor Unitario"] = age_demographics["Valor Unitario"].map("${:,.2f}".format)
age_demographics ["Valor Total de Compra"] = age_demographics["Valor Total de Compra"].map("${:,.2f}".format)
age_demographics ["%"] = age_demographics["%"].map("{:,.2f}%".format)
In [22]:
# Resultado
player_demographics.head()
Out[22]:
In [23]:
# Resultado
age_demographics = age_demographics.sort_index()
age_demographics
Out[23]:
In [24]:
# Cálculos básicos
user_total = purchase_file.groupby(["Login"]).sum()["Valor"].rename("Valor Total de Compra")
user_average = purchase_file.groupby(["Login"]).mean()["Valor"].rename("Valor Médio de Compra")
user_count = purchase_file.groupby(["Login"]).count()["Valor"].rename("Número de Compras")
# Dataframe para os resultados
user_data = pd.DataFrame({"Valor Total de Compra": user_total, "Valor Médio de Compra": user_average, "Número de Compras": user_count})
# Data Munging
user_data ["Valor Total de Compra"] = user_data["Valor Total de Compra"].map("${:,.2f}".format)
user_data ["Valor Médio de Compra"] = user_data["Valor Médio de Compra"].map("${:,.2f}".format)
user_data.sort_values("Valor Total de Compra", ascending=False).head(5)
Out[24]:
In [25]:
# Resultado
user_data
Out[25]:
In [26]:
# Cálculos básicos
user_total = purchase_file.groupby(["Nome do Item"]).sum()["Valor"].rename("Valor Total de Compra")
user_average = purchase_file.groupby(["Nome do Item"]).mean()["Valor"].rename("Valor Médio de Compra")
user_count = purchase_file.groupby(["Nome do Item"]).count()["Valor"].rename("Número de Compras")
# Dataframe para os resultados
user_data = pd.DataFrame({"Valor Total de Compra": user_total, "Valor Médio de Compra": user_average, "Número de Compras": user_count})
# Data Munging
user_data ["Valor Total de Compra"] = user_data["Valor Total de Compra"].map("${:,.2f}".format)
user_data ["Valor Médio de Compra"] = user_data["Valor Médio de Compra"].map("${:,.2f}".format)
user_data.sort_values("Número de Compras", ascending=False).head(5)
Out[26]:
In [27]:
# Cálculos básicos
user_total = purchase_file.groupby(["Nome do Item"]).sum()["Valor"].rename("Valor Total de Compra")
user_average = purchase_file.groupby(["Nome do Item"]).mean()["Valor"].rename("Valor Médio de Compra")
user_count = purchase_file.groupby(["Nome do Item"]).count()["Valor"].rename("Número de Compras")
# Dataframe para os resultados
user_data = pd.DataFrame({"Valor Total de Compra": user_total, "Valor Médio de Compra": user_average, \
"Número de Compras": user_count})
# Data Munging
user_data ["Valor Total Compra"] = user_data["Valor Total de Compra"]
user_data ["Valor Total de Compra"] = user_data["Valor Total de Compra"].map("${:,.2f}".format)
user_data ["Valor Médio de Compra"] = user_data["Valor Médio de Compra"].map("${:,.2f}".format)
display(user_data.sort_values("Valor Total Compra", ascending=False).head(5)[ \
['Valor Total de Compra','Valor Médio de Compra','Número de Compras']])