Primeira Str
Mais que um cientista da computação e engenheiro, sou um ser humano. E como ser humano, ver é uma das experiências sensoriais mais importantes e gratificantes que podemos ter. Portanto, para começar, vou mostrar meu primeiro painel construído no framework Streamlit (com a ajuda de python, pandas e Altair).
Introdução
Painéis? Quadro? PowerBI? Por que não usar apenas algumas planilhas do Excel?
A palavra “dashboard” é certamente uma palavra da moda no campo da ciência de dados, engenharia de dados, inteligência de negócios e assim por diante. Mas o que é um painel? E o que posso fazer com isso?
Em primeiro lugar, quando ouvimos a palavra painel, lembramos mais rapidamente de um policial puxando carros no cinema, em vez de um sistema de computador repleto de prontuários. “Você não viu o excesso de velocidade no painel do carro?” Bem… Um painel é simplesmente um quadro visual que contém alguns indicadores-chave de desempenho, gráficos e estatísticas. Eles podem ser responsivos, interativos e atualizados em tempo real. Usando uma abordagem diferente, eles são ferramentas para visualização de informações curadas relativas a um cenário de caso específico. Por que curadoria? Porque o sistema é usado com frequência e os dados precisam ser mantidos em um nível essencial para evitar a superalimentação do aplicativo. O tempo é crucial e quanto mais rápido a informação for digerida, melhor.
Então… Tableau e Power BI são apenas estruturas para criar painéis e histórias. Além disso, o Excel pode ser usado para criar painéis. Na verdade, o Excel é o avô dos painéis… No final, a palavra é apenas um termo chique usado para descrever um sistema de informação contendo estatísticas.
Como dizem alguns, uma imagem vale mais que mil palavras, então passamos para a parte prática. Terminamos a introdução aqui e passamos a selecionar as ferramentas e escolher um conjunto de dados aleatório para realizar a EDA, depois encontrar pontos de estresse que podem ser resolvidos ou analisados usando nosso painel e tentar respondê-los. Todos, enquanto painéis em paralelo.
A pilha
Para quebrar grandes quantidades de rochas com eficiência, provavelmente é necessário um conjunto de ferramentas poderosas e dedicadas. A listagem a seguir descreve as diversas ferramentas utilizadas no miniprojeto.
Streamlit . Estrutura de código aberto que segue três princípios principais: scripts como visuais, interação por meio do uso de componentes como variáveis e implantação rápida. Ou seja, com o Streamlit é possível criar dashboards visualmente atraentes sem a necessidade de saber usar front-end e frameworks de estilo. Esse paradigma permite que o sistema ignore detalhes de estilo e concentre toda a atenção na definição do KPI e quais métodos são melhores para representá-los.
Altair. Ferramenta de visualização de dados. Altair tem um objetivo semelhante ao Matplotlib, mas foi construído sobre um conjunto diferente de princípios. O estilo de codificação segue um paradigma declarativo e sua sintaxe se assemelha ao formato JSON.
Pandas . Biblioteca que pode ser usada para explorar, limpar e manipular dados tabulares. Permite unir várias tabelas, preencher valores ausentes, converter, limpar, filtrar e consultar.
Scikit-Learn . A biblioteca oferece várias ferramentas para análise de dados. Desde aprendizado de máquina e modelos estatísticos, cronogramas de treinamento, métricas para quantificação de erros e previsões de dados. Ao usar este Scikit-Learn, é possível analisar dados de forma rápida e fácil. Mas tenha em mente que os modelos implementados não são de ponta.
Numpy . Melhora o tempo necessário para cálculos numéricos dentro do ecossistema Python. Os dados nativos do Numpy consistem em arrays N-Dimensionais.
Picles . Esta ferramenta é utilizada para serialização e desserialização de objetos Python.
O conjunto de dados
O foco do projeto é explorar o que o Streamlit tem a oferecer, não para realizar um projeto de ciência de dados com curadoria de ponta a ponta. Portanto, o conjunto de dados que vamos escolher é quase escolhido por pura sorte.
Nossas descobertas consistem em um conjunto de dados do mercado imobiliário de Seattle (EUA). As instâncias foram coletadas entre maio de 14 e maio de 15.
Os componentes
Agora, é hora de verificar os vários componentes que compõem o painel final. Confira a implementação completa na página do meu Github (https://github.com/LOCLuisPereira/streamlit_house_market).
Métricas iniciais de KPI
Essas métricas de KPI são a primeira coisa que o usuário vê. Eles devem fornecer informações importantes de forma concisa. O Streamlit oferece um componente semelhante a um cartão (streamlit.metric), onde é possível definir o título do KPI, o valor e um delta. Eles são usados para identificação, quantificação e flutuação do valor da medida.
Em nosso caso, temos o número total de casas e algumas outras médias sobre o mercado imobiliário de Seattle (como preço médio das casas, número de andares em condição e assim por diante).

Mapa de Seattle e distribuição de casas
O Streamlit possui um componente de mapa que permite ao desenvolvedor criar rapidamente um mapa de palavra ou cidade (streamlit.map). Este componente é bastante simples e não possui requisitos complexos, pois seu grau de customização é baixo.
Tomemos como exemplo, para verificar a distribuição de instâncias em uma determinada cidade o componente é suficiente. Mas para visualizar a distribuição dos clusters e suas respectivas cores, é necessária outra ferramenta.

Usando gráfico de mapa Altair para visualização de agrupamento
O componente de mapa nativo do Streamlit usa Altair sob o capô. Tão simples como isso. Dissemos anteriormente que este componente é plug-and-play, mas não oferece nenhum tipo de personalização. Uma alternativa para a implementação nativa é usar o Altair Chart e vinculá-lo ao componente Streamlit-Altair Chart.
A localização é fundamental. Especialmente, no negócio do mercado imobiliário. Uma mesma casa pode ter seu valor multiplicado por 20x apenas por estar localizada perto do mar ou dentro de uma cidade grande.
Para garantir que seja realmente verdade, realizamos um experimento. Usando o Scikit-Learn e suas implementações K-Means, executamos o algoritmo com diferentes números de clusters (de 2 a 10). Longitude e latitude foram usadas como características. A cada corrida, verificamos o preço médio da habitação.
A etapa final, visualização, foi feita pela fusão de três componentes. Um controle deslizante para escolher o número desejado de clusters. Um mapa do Altair para mostrar as instâncias e a localização de seus mapas. E um dataframe, para mostrar o preço médio de cada cluster.


No final, a localização realmente importa. À medida que vamos do Sul para o Norte, os preços das casas sobem. As casas no lado esquerdo de Seattle tendem a ser mais baratas. No mercado imobiliário, vários fatores podem influenciar o preço. Por exemplo, as casas do lado direito estão mais próximas do continente e é fácil navegar para outras partes de Seattle ou cidades próximas. Este motivo não é determinante, mas pode pesar no preço final da casa.
Grau e condição
Este componente é simples e curto. Usando dois gráficos de barras, `streamlit.bar_chart`, plotamos a distribuição de teor e condição. Ao visualizar o gráfico, concluímos que a maioria das instâncias está no meio (para ambos os gráficos).

Nós plotamos esses dois recursos um contra o outro. Se considerarmos a pontuação média como neutra, então a maioria das casas tende a ficar no lado neutro das pontuações. Se não forem neutros, caem para uma pontuação positiva tímida.

Que tal reformas de casas? Outro conjunto de KPIs
Usando streamlit.metric, implementamos três métricas de KPI em linha para analisar rapidamente dados relacionados a reformas de casas. Mostramos o número de casas reformadas, sua representatividade em relação às demais e qual é o intervalo de tempo entre a construção e o ano de reforma.

Olhando para o painel, descobrimos que 914 casas foram reformadas. E as casas tendem a ser restauradas após 56 anos de sua construção.
Um painel sem um gráfico de linhas? Impossível…
O gráfico de linhas tende a ser bastante comum. O Streamlit oferece um componente wrap para plotá-los de maneira rápida e fácil. Em nosso painel, nós os usamos para ver as vendas da casa por mês.

Dê uma olhada rápida… Os meses mais vendidos foram julho de 2014 e abril de 2015.
Quartos e banheiros? Empilhá-los ou equilibrá-los?
Às vezes, mais não está intimamente relacionado com melhor. Para confirmá-lo ou desmascará-lo, implementamos um mapa de calor que relaciona o número de quartos, banheiros e preço médio para cada combinação de quarto-banheiro.
Olhando para o novo gráfico, vemos que equilibrar o número de quartos e banheiros é fundamental. A indústria favorece proporções de 1:1 e mais banheiros do que quartos.
Ao empilhar quarto, o preço tende a ficar na mesma faixa. Mas ao adicionar banheiros, o preço sempre tende a aumentar.

Isso provavelmente pode ser explicado seguindo um raciocínio simples. As pessoas não gostam de esperar e não gostam de compartilhar espaços extremamente privados. Em suma, permitir que moradores e hóspedes tenham um maior grau de privacidade leva a valores mais altos nas propriedades.
Eu tenho uma propriedade em Seattle… Você pode me ajudar a encontrar um preço justo para vender?
Podemos desconstruir esta questão em dois problemas menores. O que podemos fazer para conectar o fluxo de informações do usuário ao nosso sistema de informações? E podemos usar qualquer algoritmo de aprendizado de máquina para digerir os dados e atribuir um preço possível com base nas informações de entrada.
O Streamlit oferece vários componentes que conectam automaticamente o usuário e a comunicação do sistema. Neste caso específico, vamos utilizar os componentes do formulário. Esses componentes permitem a junção de outros componentes com a exigência apenas de um botão final, que aciona o envio dos dados.

As informações do componente de formulário são inseridas em dois modelos pré-treinados. Após a inferência, os dados são enviados para o painel e os usuários podem ver duas possíveis estimativas de valor.
Como a missão do projeto é construir um painel e explorar a maioria dos componentes do Streamlit, usamos dois algoritmos básicos de modelo de aprendizado de máquina, que são implementados no Scikit-Learn. No final, temos um Bayesian Ridge e Random Forest com pontuação R2 de 0,54 e 0,87 em todos os dados.

Pode-se questionar, por que manter um modelo com pontuação de 0,54? Mantivemos é como uma piada. Às vezes, o modelo gera valores negativos. Em outras palavras, o modelo nos diz que podemos comprar uma casa… e receber dinheiro para mantê-la.
O que está dentro do Dataframe?
Para esta tarefa, o Streamlit oferece três opções diferentes. Um para tabelas estáticas, um para dataframe e outro para JSON. Aqui, vamos nos concentrar nos dois últimos.
A função do Dataframe gera uma tabela que permite visualizar a estrutura do conjunto de dados de forma tabular. É possível ordenar as colunas em ordem crescente ou decrescente, o que melhora a visualização e a semântica dos dados.

A saída do JSON se assemelha à função de despejo, com recuo, que é nativa da biblioteca JSON do Python.

Ambos os componentes têm um caso de uso. O componente dataframe pode ser usado para analisar informações rapidamente e, por exemplo, encontrar máximos, mínimos, verificar valores ausentes ou nulos e assim por diante. O JSON é excelente para verificar a estrutura de dados e qual tipo, exceto para cada campo no conjunto de dados.
Tomadas finais
Este é o fim da estrada para este projeto. Não exploramos nenhum algoritmo delicado ou de última geração. Eles eram simples na teoria e na implementação. Mas com essa implementação, estamos em condições de meditar e tirar dúvidas sobre o quão bom é o framework e se ele é compatível com nosso stack.
Afinal, a Streamlit consegue oferecer o que se propõe. Criar um painel é tão fácil quanto escrever um script. Os dados são mostrados de forma interativa e organizada. Mesmo que não tenhamos mostrado, implantar um protótipo é rápido e fácil.
Neste momento, só podemos ver duas possíveis desvantagens. Roteamento e estilização. Roteamento para painel de várias páginas. Estilo para estender o mecanismo de estilo atual e permitir um maior grau de personalização.
Minha opinião pessoal sobre o Streamlit é simples. Estou muito animado para usar em meus outros projetos. A criação de protótipos ou painéis internos é rápida, os resultados são esteticamente agradáveis e o EDA se torna ainda mais emocionante… devido à simplicidade com que podemos visualizar os dados no front-end.
Bônus. E os painéis em tempo real?
Em nosso projeto, não tivemos necessidade de atualização de dados em tempo real. Mas o Streamlit oferece métodos para implementar a visualização de dados em tempo real. O mecanismo é simples. Crie um componente vazio, defina um loop, busque e alimente os dados... Voilà! Fluxos de dados contínuos e em tempo real. Veja as imagens abaixo como uma prova das capacidades do framework.


Isso! Vejo você na próxima vez.