# Versão da Linguagem Python
from platform import python_version
print('Versão da Linguagem Python Usada Neste Jupyter Notebook:', python_version())

"""
Explanation: <font color='blue'>Data Science Academy - Python Fundamentos - Capítulo 7</font>
Download: http://github.com/dsacademybr
End of explanation
"""


# Imports
import pandas as pd
import numpy as np

pd.__version__

np.__version__

# Carrega o arquivo
load_file = "dados_compras.json"
purchase_file = pd.read_json(load_file, orient = "records")
purchase_file.head()

"""
Explanation: Missão: Analisar o Comportamento de Compra de Consumidores.
Nível de Dificuldade: Alto
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 

Número total de compradores

 Análise Geral de Compras 

Número de itens exclusivos
Preço médio de compra
Número total de compras
Rendimento total

 Informações Demográficas Por Gênero 

Porcentagem e contagem de compradores masculinos
Porcentagem e contagem de compradores do sexo feminino
Porcentagem e contagem de outros / não divulgados

 Análise de Compras Por Gênero 

Número de compras
Preço médio de compra
Valor Total de Compra
Compras for faixa etária

 Identifique os 5 principais compradores pelo valor total de compra e, em seguida, liste (em uma tabela): 

Login
Número de compras
Preço médio de compra
Valor Total de Compra
Itens mais populares

 Identifique os 5 itens mais populares por contagem de compras e, em seguida, liste (em uma tabela): 

ID do item
Nome do item
Número de compras
Preço do item
Valor Total de Compra
Itens mais lucrativos

 Identifique os 5 itens mais lucrativos pelo valor total de compra e, em seguida, liste (em uma tabela): 

ID do item
Nome do item
Número de compras
Preço do item
Valor Total de Compra

 Como considerações finais: 

Seu script deve funcionar para o conjunto de dados fornecido.
Você deve usar a Biblioteca Pandas e o Jupyter Notebook.
End of explanation
"""


player_demographics = purchase_file.loc[:, ["Sexo", "Login", "Idade"]]
player_demographics.head()

# Limpeza dos dados e remoção de duplicatas
player_demographics = player_demographics.drop_duplicates()
player_count = player_demographics.count()[0]
player_count

# Converter saída para DF para uso posterior em análise
pd.DataFrame({"Total de Jogadores" : [player_count]})

"""
Explanation: Informações Sobre os Compradores
End of explanation
"""


# 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

purchase_file["Item ID"].unique()

"""
Explanation: Análise de Compra
End of explanation
"""


# 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)

# Output Test
gender_count

# Output Test
gender_percent

# Output Test
gender_demographics

"""
Explanation: Informações Demográficas
End of explanation
"""


# 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)

# Resultado
gender_total_item_price

# Resultado
gender_average_item_price

# Resultado
gender_purchasing_analysis

# Resultado
normalized_total

"""
Explanation: Análise de Compra Por Gênero
End of explanation
"""


player_demographics

# 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)

# Resultado
player_demographics.head()

# Resultado
age_demographics = age_demographics.sort_index()
age_demographics

"""
Explanation: Análise Demográfica
End of explanation
"""


# 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)

# Resultado 
user_data

"""
Explanation: Top Spenders
End of explanation
"""


# 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)

"""
Explanation: Itens Mais Populares
End of explanation
"""


# 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']])

"""
Explanation: Itens Mais Lucrativos
End of explanation
"""


