Para iniciar nosso projeto, vamos criar um arquivo de script que conterá o código do nosso dashboard. No Explorador à esquerda do VS Code, criaremos o arquivo Dashboard.py clicando no ícone "New File…".
Feito isso, podemos fechar a aba do Explorador e minimizar o terminal para ter espaço para digitar o código.
Acessando dados da API
Importando as bibliotecas
Primeiramente, vamos incluir as bibliotecas que acabamos de instalar no computador. Para isso, vamos utilizar os comandos de import para cada uma das bibliotecas. Daremos siglas como apelidos para algumas delas:
- Para a biblioteca
streamlit, vamos adicionar st; - Para a
pandas, o apelido pd; - E para a
plotly.express, responsável por criar os gráficos, px.
import streamlit as st
import requests
import pandas as pd
import plotly.express as px
Dessa maneira, temos todas as bibliotecas importadas e vamos conseguir utilizá-las ao longo do nosso projeto.
Adicionando um título ao aplicativo
A primeira coisa que vamos adicionar ao nosso aplicativo é um título. Porém, ainda não sabemos como adicioná-lo. Então, vamos acessar a documentação do Streamlit para descobrir.
Na página da documentação, identificamos que existem dois comandos: o st.write e o recurso Magic. Com o comando st.write, colocamos elementos na tela do aplicativo e o comando identifica a melhor forma de aplicá-lo.
Se colocarmos um título ou um texto, isso será acrescentado ao aplicativo; se colocarmos um DataFrame, será acrescentado esse DataFrame. Basta utilizar o st.write.
O Magic é uma forma de colocar a variável em que criamos o elemento, e ao aplicá-la no código, o elemento também será acrescentado de forma automática.
Sabemos que queremos acrescentar um título, então para organizar melhor, vamos indicar de forma específica que queremos colocar um título.
Logo abaixo na documentação, temos os elementos de texto que podemos acrescentar no aplicativo. Podemos colocar textos em markdown, título (title), cabeçalho (header), subcabeçalho (subheader), caption (uma parte de explicação), blocos de código (code block) e assim por diante.
Como queremos adicionar um título, basta utilizar o comando st.title. A documentação identifica um exemplo de forma prática para conseguirmos utilizar o título:
st.title("The app title")
Retornando ao código, vamos aplicar o comando para adicionar o título "DASHBOARD DE VENDAS", em caixa alta. Nesse texto, também podemos incluir algum emoji para representar as vendas. Nesse caso, vamos adicionar o emoji de um carrinho de compras com :shopping_trolley:.
import streamlit as st
import requests
import pandas as pd
import plotly.express as px
st.title('DASHBOARD DE VENDAS :shopping_trolley:')
Adicionamos o título, mas ainda não temos a exibição no aplicativo. Seria interessante visualizar o resultado, então para isso, iremos executar o aplicativo e verificar se o título aparece conforme esperado.
Para executar o código acima, não vamos usar o botão "Run Python File" como faríamos em um script normal. Precisaremos abrir o terminal e garantir que o ambiente virtual esteja selecionado, ou seja, que esteja escrito (venv) ao início da linha.
Com isso garantido, vamos digitar o comando streamlit run seguido do nome do script, que é Dashboard.py, e executar o comando com a tecla "Enter".
streamlit run Dashboard.py
A página do aplicativo será aberta de forma automática, contendo o título definido e um ícone, o emoji do carrinho de compras que adicionamos, conforme exibido acima. Nosso título está funcionando de forma legal e já temos a primeira visualização do aplicativo!
Agora vamos retornar ao código para acrescentar outros elementos, pois até o momento, só temos a parte do título. Na sequência, faremos a leitura dos dados a partir de uma API.
Leitura dos dados a partir de uma API
Com o VS Code aberto, após executar o comando streamlit run Dashboard.py, obtivemos duas URLs como retorno para acessar o aplicativo:
Endereços obtidos na máquina do instrutor:
Local URL: http://localhost:8501
Network URL: http://192.168.2.170:8501
Embora o código tenha sido executado e o aplicativo aberto de forma automática no navegador, também temos o endereço de IP para acessar o aplicativo caso a página seja fechada no navegador.
O aplicativo continuará rodando, então o terminal estará em execução até que você decida parar teclando "Ctrl + C" ou clicando sobre o ícone de lixeira à esquerda da barra superior do terminal para fechá-lo.
Nesse caso, vamos mantê-lo rodando, pois ainda vamos acrescentar outros elementos. Dessa forma, à medida que escrevemos o código e salvamos as alterações, o aplicativo é atualizado.
Além do título, faremos a leitura dos dados da API. Para isso, vamos utilizar o método get() da biblioteca requests. Após o título, na linha de código 8, vamos usar a variável url para identificar o site onde vamos coletar os dados, que será o endereço da API ("https://labdados.com/produtos").
import streamlit as st
import requests
import pandas as pd
import plotly.express as px
st.title('DASHBOARD DE VENDAS :shopping_trolley:')
url = 'https://labdados.com/produtos'
A partir dessa URL, conseguiremos acessar todos os dados da empresa que vende os produtos online, e com isso, será possível acessar os dados da API.
Conforme dito anteriormente, vamos utilizar o método get() para fazer o acesso. Em uma nova linha logo abaixo de url, vamos escrever a variável response, que vai armazenar o resultado da requisição. Ela será igual a requests.get(), recebendo url como argumento.
import streamlit as st
import requests
import pandas as pd
import plotly.express as px
st.title('DASHBOARD DE VENDAS :shopping_trolley:')
url = 'https://labdados.com/produtos'
response = requests.get(url)
Request > JSON > DataFrame
Agora precisaremos transformar essa requisição em um JSON, o qual será transformado em um DataFrame. Então, vamos escrever na próxima linha a variável dados, que será igual a pd.DataFrame seguido do método from_dict(). Por fim, passaremos response.json() como argumento do método.
import streamlit as st
import requests
import pandas as pd
import plotly.express as px
st.title('DASHBOARD DE VENDAS :shopping_trolley:')
url = 'https://labdados.com/produtos'
response = requests.get(url)
dados = pd.DataFrame.from_dict(response.json())
Dessa maneira, transformamos a requisição em um JSON, e depois o JSON em um DataFrame.
A partir de agora, já conseguimos representar o DataFrame no aplicativo do Streamlit: basta escrever a variável dados no nosso aplicativo. Assim, será utilizado o conceito do Magic para transformar a variável em uma visualização que faça sentido.
Nesse momento, podemos voltar à documentação e identificar a melhor forma de representar o DataFrame, pois possivelmente existe uma forma específica de direcionar o que queremos.
Entendendo a melhor forma de representar o DataFrame
Na documentação, existe uma seção específica para a representação de elementos de dados no Streamlit, chamada "Data display elements". Conseguimos representar DataFrames, tabelas estáticas (static tables), métricas (metrics), e dicionários e JSON (dicts and JSON).
Como queremos representar um DataFrame, vamos utilizar o comando indicado na documentação:
st.dataframe(my_data_frame)
De volta ao código, vamos adicionar o comando st.dataframe() em uma nova linha, passar entre parênteses a variável dados, e por fim salvar.
Lembre-se de sempre salvar o código com o atalho "Ctrl + S".
import streamlit as st
import requests
import pandas as pd
import plotly.express as px
st.title('DASHBOARD DE VENDAS :shopping_trolley:')
url = 'https://labdados.com/produtos'
response = requests.get(url)
dados = pd.DataFrame.from_dict(response.json())
st.dataframe(dados)
Nesse momento, não precisamos executar novamente o comando streamlit run Dashboard.py. Basta voltar ao aplicativo e ele estará atualizado.
Voltando ao aplicativo, visualizamos o título e o ícone que adicionamos, mas não é exibido nenhum DataFrame. Será que fizemos algo errado? Será que não salvamos o código? O que aconteceu?
Na verdade, no canto superior direito da página de dashboard, existe um ícone de "i" indicando que existe uma informação. Ao clicar nele, teremos a mensagem de que um arquivo foi modificado (Source file changed.) e que, a partir disso, podemos selecionar duas opções:
- Reexecutar o código com a opção Rerun;
- Ou definir que sempre será reexecutado, selecionando a opção Always rerun.
Dessa maneira, o aplicativo será executado sempre que fizermos alguma modificação no código. Para tornar o processo mais prático e dinâmico, vamos selecionar a opção Always rerun.
Feito isso, conseguiremos visualizar a seguinte tabela, logo abaixo do título:
Exibição dos 5 primeiros resultados da tabela:
| # | Produto | Categoria do Produto | Preço | Frete | Data da Compra | Vendedor |
|---|
| 0 | Modelagem preditiva | livros | 92.45 | 5.6097 | 01/01/2020 | Thiago Silva |
| 1 | Iniciando em programação | livros | 43.84 | 0 | 01/01/2020 | Mariana Ferreira |
| 2 | Pandeiro | instrumentos musicais | 87.18 | 2.2265 | 01/01/2020 | Thiago Silva |
| 3 | Corda de pular | esporte e lazer | 13.65 | 1.2579 | 01/01/2020 | Camila Ribeiro |
| 4 | Dinossauro Rex | brinquedos | 28.32 | 2.0391 | 01/01/2020 | Juliana Costa |
Um ponto que podemos observar é que o fundo do aplicativo está na cor preta. Para ter uma visualização mais interessante, podemos alterar essa cor. Para isso, abrimos o menu hambúrguer no canto superior direito e selecionamos a opção "Settings".
Na seção "Theme", está indicado que a cor usada na página corresponde à definida como padrão para o sistema ("Use system setting"). Vamos alterar para a opção "Light". Feito isso, modificamos o fundo para uma coloração branca.
Conclusão
Já conseguimos adicionar um título para o aplicativo, iniciar o projeto, e inserir o DataFrame. Porém, ainda não iniciamos o dashboard com os gráficos. No próximo vídeo, começaremos a construir essas visualizações a partir dos dados que fizemos a leitura nesse vídeo. Até já!