import numpy as np
import os
import pandas as pd

"""
Explanation: Módulo 4: Transformações e Information Retrieval

Tutorial
Imports para a Aula
End of explanation
"""


""" Série a ser transformada"""
s = pd.Series(
    name="Compras",
    index=["Leite", "Ovos", "Carne", "Arroz", "Feijão"],  
    data=[2, 12, 1, 5, 2]
)
s

"""
Explanation: Propagação de Funções
Series
Variável de Teste
End of explanation
"""


""" Função de Transformação """
def fn(x):
    return x ** 2 + x - 100

""" Transformação elemento a elemento """
s.map(fn)

"""
Explanation: Elemento a elemento
End of explanation
"""


""" DataFrame a ser transformado"""
df = pd.DataFrame(
    index=pd.Index(data=["Leite", "Ovos", "Carne", "Arroz", "Feijão"], name="Itens"),
    columns=["Quantidade",  "Preço Unitário"],
    data=np.array([
        [4, 3, 1, 5, 2],
        [3.00, 6.50, 25.90, 5.00, 3.80]
    ]).T,
)
df

"""
Explanation: DataFrame
Variável de Teste
End of explanation
"""


""" Função de Transformação """
def fn(x):
    return x ** 3 / 100

""" Transformação elemento a elemento """
df.applymap(fn)

"""
Explanation: Elemento a elemento
End of explanation
"""


""" Função de Transformação """
def fn(x):
    return x.product()

""" Transformação elemento a elemento """
df.apply(fn)

""" Transformação elemento a elemento """
df.apply(fn, axis=1)

"""
Explanation: Linhas e Colunas
End of explanation
"""


df1 = pd.DataFrame(
    columns=["user_id", "store_id", "product_id"],
    data=[
        [1, 1, 1],
        [1, 2, 6],
        [3, 2, 7],
        [2, 2, 3],
        [3, 2, 3],
        [4, 3, 2],
        [2, 3, 1],
        [1, 1, 3],
        [1, 3, 3],
        [5, 1, 4],
        [5, 1, 1],
        [3, 2, 1],
        [1, 2, 1],
        [2, 2, 2],
        [3, 2, 2],
        [4, 2, 3],
        [4, 1, 5],
        [5, 1, 6],
        [3, 1, 6],
        [2, 3, 7],
    ]
)
df2 = pd.DataFrame(
    columns=["store_id", "store_name"],
    data=[
        [1, "Pão de Açúcar"],
        [2, "Dia"],
        [3, "Extra"],
    ]
)
df3 = pd.DataFrame(
    columns=["product_id", "product_name"],
    data=[
        [1, "Leite"],
        [2, "Ovos"],
        [3, "Arroz"],
        [4, "Feijão"],
        [5, "Carne"],
        [6, "Frango"],
        [7, "Peixe"]
    ]
)

df = pd.merge(pd.merge(df1, df2, on="store_id"), df3, on="product_id")[["user_id", "store_name", "product_name"]]
df

"""
Explanation: Transformações
Variável de Teste
End of explanation
"""


df.pivot?

df.pivot_table?

df.pivot(columns="store_name", values="product_name")

df.pivot_table(columns="store_name", values="product_name", aggfunc="count")

"""
Explanation: Manipulações
pivot & pivot_table
End of explanation
"""


pd.crosstab?

pd.crosstab(df.store_name, df.product_name)

"""
Explanation: crosstab
End of explanation
"""


pd.DataFrame.groupby?

pd.core.groupby.DataFrameGroupBy.aggregate?

g = df.groupby("product_name")
g

g.describe()

g.aggregate(["min", "mean", "median", "max", "sum"])

g.max()

"""
Explanation: Agrupamento e Agregação
End of explanation
"""


file_name = os.path.join("data", "desafio", "dataset.csv")

dataset = pd.read_csv(filename, sep=",", index_col=0, encoding="utf-8")
dataset.head()

"""
Explanation: Desafio
Objetivo:
Analisar o dataset gerado no Módulo 3 e responder às questões em cada item.
Dataset
End of explanation
"""


""" Entre com o Código aqui """

"""
Explanation: Itens
[ Item A ]
Quantos usuários únicos fizeram pedidos?
End of explanation
"""


""" Entre com o Código aqui """

"""
Explanation: [ Item B ]
Qual a média e o desvio padrão da quantidade de produtos presentes em um pedido um usuário?
End of explanation
"""


""" Entre com o Código aqui """

"""
Explanation: [ Item C ]
Qual a média, o mínimo e o máximo da quantidade de corredores (aisles) por departmento (department)?
End of explanation
"""


""" Entre com o Código aqui """

"""
Explanation: [ Item D ]
Qual o dia da semana em que ocorrem mais pedidos de produtos para cada departmento (department)?
End of explanation
"""


