Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[ERRO ao gerar o gráfico]

erro:

ValueError: Value of 'x' is not the name of a column in 'data_frame'. Expected one of ['Data da Compra', 'Preço', 'Ano', 'Mês'] but received: Mes

import streamlit as st
import requests
import pandas as pd
import plotly.express as px

st.set_page_config(layout = 'wide')


def formata_numero(valor, prefixo = ''):
    for unidade in ['', 'mil']:
        if valor <1000:
            return f'{prefixo} {valor:.2f} {unidade}'
        valor /= 1000
    return f'{prefixo} {valor:.2f} milhões'

st.title('DASHBOARD DE VENDAS :shopping_trolley:')

url = 'https://labdados.com/produtos'
response = requests.get(url)
dados = pd.DataFrame.from_dict(response.json())
dados['Data da Compra'] = pd.to_datetime(dados['Data da Compra'], format = '%d/%m/%Y') 


## Tabelas
receita_estados = dados.groupby('Local da compra')[['Preço']].sum()
receita_estados = dados.drop_duplicates(subset = 'Local da compra')[['Local da compra', 'lat', 'lon']].merge(receita_estados, left_on = 'Local da compra', right_index = True).sort_values('Preço', ascending = False)

receita_mensal = pd.DataFrame(dados.set_index('Data da Compra').groupby(pd.Grouper(freq = 'M'))['Preço'].sum()).reset_index()
receita_mensal['Ano'] = receita_mensal['Data da Compra'].dt.year
receita_mensal['Mês'] = receita_mensal['Data da Compra'].dt.month_name()

## Gráficos
fig_mapa_receita = px.scatter_geo(receita_estados,
                                   lat = 'lat',
                                   lon = 'lon',
                                   scope = 'south america',
                                   size = 'Preço',
                                   template = 'seaborn',
                                   hover_name = 'Local da compra',
                                   hover_data = {'lat':False,'lon':False},
                                   title = 'Receita por Estado')

fig_receita_mensal = px.line(receita_mensal,
                                                        x = 'Mes',
                                                        y = 'Preço',
                                                        markers = True,
                                                        range_y = (0, receita_mensal.max()),
                                                        color='Ano',
                                                        line_dash = 'Ano',
                                                        title = 'Receita mensal')

fig_receita_mensal.update_layout(yaxis_title = 'Receita')

## Visualização no streamlit
coluna1, coluna2 = st.columns(2)
with coluna1:
    st.metric('Receita', formata_numero(dados['Preço'].sum(), 'R$'))
    st.plotly_chart(fig_mapa_receita, use_container_width = True)

with coluna2:
    st.metric('Quantidade de vendas', formata_numero(dados.shape[0]))
    st.plotly_chart(fig_receita_mensal, use_container_width = True)

st.dataframe(dados)
1 resposta
solução!

Olá Jefferson, tudo bem com você?

O erro ocorre porque o nome da coluna que você está usando no eixo x do gráfico não corresponde ao nome exato no seu DataFrame. No seu código, você está usando 'Mes', mas a coluna no DataFrame foi declarada como 'Mês' (com acento).

Para corrigir esse erro, basta alterar a linha onde você define a coluna 'Mes' no DataFrame, substituindo 'Mês' por 'Mes'. O código deve ficar como apresentado abaixo:

receita_mensal['Mes'] = receita_mensal['Data da Compra'].dt.month_name()

Após realizar essa correção, salve o arquivo. Execute novamente a aplicação e acesse a URL do Dashboard. Deixo abaixo um GIF apresentado a execução dos passos listados a cima:

GIF apresentando a execução dos passos listados a cima

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado