Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Dúvida] Data Visualization: Pilotando gráfico

Na aula de data visualization, executei o seguinte código para agregar e somar os valores

df_vendas_ano = df_vendas_ano.groupby(['ano']).sum()

Com essa linha de código, o resultado foi similar ao que o instrutor propôs em aula.

Na etapa de criar o gráfico, quando utilizei o eixo x com o index, apresentou o seguinte erro: TypeError: Data source must be a DataFrame or Mapping, not <class 'pandas.core.series.Series'>.

ax = sns.barplot(data = df_vendas_ano, x = df_vendas_ano.index, y="vendas", palette = [AZUL2])

Como alternativa na variável adicionei o reset_index(), com isso consegui resolver o problema e a linha do gráfico ficou assim:

ax = sns.barplot(data = df_vendas_ano, x = 'ano', y="vendas", palette = [AZUL2])

Entretanto na etapa de utilizar o laço for para identificar o valor máximo, não consegui adapta-lo para deixar o valor máximo e alterar pontualmente a maior cor.

só consegui o resultado esperado quando voltei os exercicios e utilizei o metodo que o instrutor usou

df_vendas_ano = df_vendas_ano.groupby("ano").aggregate("sum")

Para utilizar os valores de index obrigatoriamente precisa utilizar a função aggregate?

Ou me orientem no que fiz de errado e como poderia utilizar o cadastro utilizando a primeira lógica também.

Obrigado

3 respostas

Olá, Diego! Como vai?

Para compreender melhor o cenário e te ajudar de forma eficiente, disponibiliza aqui para mim:

  • O seu código completo
  • O link da aula em que você está realizando essa atividade
Com essas informações, conseguirei te ajudar de forma mais precisa. Ah, se quiser, dá uma olhadinha neste guia sobre como fazer uma boa pergunta no fórum — ele mostra exatamente o que precisamos saber pra conseguir te ajudar da melhor forma e com mais agilidade.
Fico no aguardo e à disposição

Daniel.

Eu vou bem e você?

Segue o link da aula, onde ele executa o laço: https://cursos.alura.com.br/course/data-visualization-graficos-comparacao-distribuicao/task/135069

Segue o link do código: https://gist.github.com/diegodom93/0f1c448b89e9196d04ee4e28ef138f66

solução!

Olá, Diego! Como vai?

Obrigado por aguardar nosso retorno!

Execute o seguinte código em uma célula de um novo notebook no Google Colab:

# Definindo a paleta de cores
AZUL1, AZUL2, AZUL3, AZUL4, AZUL5 = '#03045e', '#0077b6', "#00b4d8", '#90e0ef', '#CDDBF3'
CINZA1, CINZA2, CINZA3, CINZA4, CINZA5 = '#212529', '#495057', '#adb5bd', '#dee2e6', '#f8f9fa'
VERMELHO1, LARANJA1, AMARELO1, VERDE1, VERDE2 = '#e76f51', '#f4a261',	'#e9c46a', '#4c956c', '#2a9d8f'

import pandas as pd
vendas = pd.read_csv("https://raw.githubusercontent.com/alura-cursos/dataviz-graficos/master/dados/relatorio_vendas.csv")

# Atualizando as colunas de pedido e envio para o tipo data
vendas["data_envio"] = pd.to_datetime(vendas["data_envio"], format="%Y-%m-%d") 
vendas["data_pedido"] = pd.to_datetime(vendas["data_pedido"], format="%Y-%m-%d")

# Criando um df desejado
df_vendas_ano = vendas.copy()
df_vendas_ano = df_vendas_ano[["data_pedido", "vendas"]]

# Gerando uma coluna que represente apenas os anos
df_vendas_ano["ano"] = df_vendas_ano.data_pedido.dt.year
df_vendas_ano.drop(labels = "data_pedido", axis = 1, inplace = True)

# Agrupando os dados por ano
df_vendas_ano = df_vendas_ano.groupby(['ano']).sum()

# Importando as bibliotecas
import seaborn as sns
import matplotlib.pyplot as plt

# Área do gráfico e tema da visualização
sns.set_theme(style="white")
fig, ax = plt.subplots(figsize=(10,4))

# Gerando o gráfico de colunas 
ax = sns.barplot(data = df_vendas_ano, x = df_vendas_ano.index, y="vendas", palette = [AZUL2])

# Personalizando o gráfico
ax.set_title("Vendas das lojas de departamentos de\n 2016 a 2019", loc="left", fontsize=18, color= CINZA1)
ax.set_xlabel("")
ax.set_ylabel("")

ax.xaxis.set_tick_params(labelsize = 14, labelcolor = CINZA2)
sns.despine(left= True, bottom = True)

# Escrevendo os valores de cada barra no gráfico
ax.set_yticklabels([])
for i, valor in enumerate(df_vendas_ano["vendas"]):
  qtd = f'R$ {valor:,.0f}'.replace(",",".")
  offset = 1e5
  ax.text(i, valor + offset, qtd, color = CINZA2, fontsize =12, ha = "center", va = "center")

É uma compilação dos códigos executados pela pessoa instrutora, a diferença é que estou usando df_vendas_ano = df_vendas_ano.groupby(['ano']).sum().

Como resultado nós temos:

Gráfico de barras mostrando as vendas de lojas de departamentos de 2016 a 2019, com valores de vendas anuais indicados em cada barra em reais brasileiros.

Agora, em uma outra célula, execute esse bloco de código a seguir que possui o laço for:

# Gerando a função para criar o gráfico de colunas
def grafico_vendas(cores: list=[AZUL2]):
  import matplotlib.pyplot as plt
  import seaborn as sns

  fig, ax = plt.subplots(figsize=(10,4))
  sns.set_theme(style="white")

  ax = sns.barplot(data = df_vendas_ano, y='vendas', x = df_vendas_ano.index, palette = cores)

  ax.set_title("Vendas das lojas de departamentos\nde 2016 a 2019", loc="left", fontsize=18, color= CINZA1)
  ax.set_xlabel("")
  ax.set_ylabel("")
  ax.xaxis.set_tick_params(labelsize = 14, labelcolor = CINZA2)
  sns.despine(left= True, bottom = True)

  ax.set_yticklabels([])
  for i, valor in enumerate(df_vendas_ano["vendas"]):
    qtd = f'R$ {valor:,.0f}'.replace(",",".")
    offset = 1e5
    ax.text(i, valor + offset, qtd, color = CINZA2, fontsize =12, ha = "center", va = "center")

  return ax

# Definindo as cores
cores = []
for ano in df_vendas_ano.index:
  if df_vendas_ano.loc[ano,"vendas"] == df_vendas_ano.vendas.max():
    cores.append(AZUL2)
  else:
    cores.append(AZUL5)

# Chamando a função
ax = grafico_vendas(cores)

E como resultado temos:

Um gráfico de barras exibindo as vendas de lojas de departamentos de 2016 a 2019, destacando R$ 2.305.006 em 2019. Avisos de código também são visíveis.

Repare que é possível obter o mesmo resultado ainda que a gente use df_vendas_ano = df_vendas_ano.groupby(['ano']).sum(), sem aggregate()!

Sugiro que você execute esses blocos de código no seu computador, e depois compare para saber qual ou quais trechos foram deixados de ser executados no momento em que você estava realizando as aulas.

Espero ter ajudado!