Curso
Introdução ao Shiny e seus benefícios
Quem já trabalhou com R provavelmente ouviu falar do pacote Shiny, que permite criar aplicativos web interativos. O R Shiny foi lançado em 2012 e a demanda cresceu rapidamente quando se percebeu que esse pacote fácil de usar permitia que cientistas e analistas criassem modelos e dashboards mais interativos.
Em 2023, o Shiny para Python saiu da fase alfa, trazendo um framework reativo semelhante para a linguagem Python. O Shiny é conhecido pela simplicidade e eficiência na criação de dashboards e aplicativos web sem exigir habilidades avançadas de desenvolvimento web.
O que é o Shiny?
Shiny é um framework open source para criação de aplicativos web em R e, com os avanços recentes, também em Python. Ele permite que profissionais de dados transformem suas análises em aplicativos web interativos. O núcleo do Shiny gira em torno da programação reativa, em que mudanças nos inputs (como sliders ou botões) disparam atualizações automáticas nos outputs (como gráficos ou tabelas).
Há muitos benefícios no uso do framework Shiny para criar aplicativos web. O Shiny aproveita a programação reativa, permitindo construir apps que respondem dinamicamente às entradas do usuário e oferecem uma experiência mais envolvente e personalizada. Ele conta com uma biblioteca amigável e documentação completa, permitindo que quem tem conhecimentos básicos de programação crie aplicativos interativos e visualmente atraentes. Para quem é fã de Python, o Shiny agora faz a ponte entre o rico ecossistema de ciência de dados do Python e os recursos de desenvolvimento web do Shiny.
Aqui vão alguns exemplos em que o framework Shiny é muito útil:
- Dashboards interativos: o Shiny é perfeito para construir dashboards que permitem explorar e visualizar dados em tempo real. Você pode usar estas dicas para criar um dashboard impecável.
- Exploração de dados: analistas podem usar o Shiny para criar apps que possibilitam explorar conjuntos de dados de forma interativa, ajustando parâmetros e visualizações na hora.
- Sistemas de suporte à decisão: é possível desenvolver sistemas que facilitem decisões orientadas por dados ao oferecer insights dinâmicos.
- Ferramentas educacionais: o Shiny é valioso no contexto educacional, permitindo a criação de materiais didáticos e demonstrações interativas.
Observação: é importante entender que Shiny para R e Shiny para Python são diferentes. Embora compartilhem conceitos, a sintaxe e a terminologia não são intercambiáveis. Se você já sabe usar o Shiny para R, terá vantagem para aprender o Shiny para Python, mas ainda assim precisará entender as diferenças para acomodar o Python.
Shiny comparado a outros frameworks de aplicativos web
Ao pensar em desenvolvimento de aplicativos web para ciência de dados, vale entender como o Shiny se posiciona em relação a outros frameworks.
O Shiny oferece uma combinação única de simplicidade e versatilidade. No entanto, a versão em Python é relativamente nova em comparação com outros frameworks. O Shiny foi projetado para tornar o desenvolvimento de aplicativos web acessível a quem já tem noções de código em Python.
Além da facilidade, ele foi pensado para escalar sem atrito, usando cache e reatividade seletiva para manter o framework reativo eficiente. Isso dá vantagem em relação a alguns outros frameworks de web design. Sua sintaxe declarativa e o modelo de programação reativa também o tornam acessível a analistas de dados, permitindo criar aplicativos interativos sem exigir grande expertise em desenvolvimento web.
Já outros frameworks, como Dash e Streamlit, trazem pontos fortes diferentes. O Dash usa sintaxe "pythônica" e prioriza o desenvolvimento rápido. O Streamlit brilha no protótipo ágil com renderização automática, mas reexecuta todo o programa quando um input muda, gerando ineficiência conforme o app cresce. Flask e Django são frameworks web de uso geral que oferecem flexibilidade e controle, mas costumam exigir mais conhecimento de desenvolvimento web. Se tiver interesse, confira o tutorial de Django da DataCamp.
Além das plataformas de desenvolvimento baseadas em código, analistas de dados também usam Tableau e Power BI para finalidades semelhantes de criação de dashboards. São plataformas de visualização de dados com ferramentas poderosas, mas com custos de licenciamento. Esses programas têm recursos de análise mais limitados que o código puro e exigem que a maior parte da modelagem e das análises complexas sejam feitas em outro lugar. Você pode saber mais sobre Power BI na DataCamp.
É essencial considerar requisitos do projeto, preferências de linguagem e a necessidade de recursos específicos ao escolher o framework mais adequado para uma aplicação de ciência de dados. Embora outros frameworks tenham seus méritos, a mistura de simplicidade e flexibilidade do Shiny, somada à integração com Python, faz dele uma opção bastante atraente para quem quer elevar seus projetos de dados.
|
Framework |
Principais recursos |
Suporte a linguagens |
Curva de aprendizado |
Uso recomendado |
|
Shiny |
Simplicidade e versatilidade |
R, Python |
Baixa |
Aplicativos e visualizações interativas |
|
Dash |
Sintaxe "pythônica" |
Python |
Média |
Desenvolvimento rápido de apps web leves |
|
Streamlit |
Protótipos rápidos com renderização automática |
Python |
Baixa |
Protótipos ágeis para apps de dados |
|
Flask |
Framework web de uso geral |
Python |
Média a alta |
Apps web completos |
|
Django |
Framework web Python de alto nível |
Python |
Média a alta |
Aplicativos e serviços web escaláveis |
|
Tableau/Power BI |
Plataformas de visualização de dados |
Não aplicável |
Baixa |
Visualizações de Business Intelligence |
Configurando o ambiente de desenvolvimento
Uma das grandes vantagens do Shiny para Python é que existe um editor web onde você pode criar seu app sem baixar ou instalar nada. Esse editor web vem com vários exemplos de apps e funcionalidades para você começar e testar sua nova aplicação Shiny.
Mas chegará um momento no desenvolvimento em que você provavelmente vai querer rodar o Shiny no seu dispositivo local. Esta seção orienta a instalação do Python, do Shiny e de suas dependências, além das configurações necessárias para deixar seu ambiente local pronto para uso.
Instalação do Python
Para trabalhar com o Shiny offline, você precisa ter o Python instalado no computador. Se ainda não instalou, acesse o site oficial em python.org e baixe a versão mais recente do Python para o seu sistema operacional. Se já tiver o Python instalado, recomendo atualizar para a versão mais nova para garantir que o Shiny rode corretamente.
Execute o instalador baixado e marque a opção "Add Python to PATH" durante a instalação. Isso facilita rodar o Python pelo terminal. Abra o prompt de comando ou terminal e digite python --version para verificar se a instalação deu certo. Você deve ver o número da versão exibido. Para mais conveniência, você também pode instalar uma IDE (ambiente de desenvolvimento integrado).
Instalação do Shiny
Com o Python configurado, você já pode instalar o Shiny. Tendo a versão mais recente do Python, basta abrir o prompt de comando ou terminal e usar o comando abaixo para instalar a biblioteca Shiny para Python com o pip:
pip install shiny
Se você usa conda em vez de pip, utilize este comando:
conda install -c conda-forge shiny
O Shiny pode exigir dependências adicionais dependendo da sua configuração. Garanta que elas estejam instaladas seguindo as instruções na documentação do Shiny.
Configuração do ambiente de desenvolvimento
Agora que você tem Python e Shiny instalados, há três pontos finais a considerar.
- IDE: se você usa uma IDE, como o VS Code, pode instalar uma extensão para renderizar os outputs do Shiny dentro da IDE.
- Controle de versão: considere usar sistemas de controle de versão como Git para rastrear mudanças no seu código. Inicialize um repositório Git na pasta do projeto para gerenciar e colaborar facilmente nos seus apps Shiny.
- Estrutura do código: organize a estrutura do projeto. Crie pastas separadas para seus aplicativos Shiny, conjuntos de dados e quaisquer recursos adicionais. Isso ajuda a manter uma base de código limpa e organizada, o que é boa prática em qualquer projeto.
Com o ambiente de desenvolvimento configurado, você já pode começar a criar aplicativos web interativos com Shiny para Python.
Criando um app básico em Shiny
Entendendo a estrutura de um app Shiny
Um app Shiny é composto por dois componentes principais: a interface do usuário (UI) e a lógica do servidor.
A UI define a aparência do app e quais elementos estarão disponíveis para interação do usuário. Tudo o que o usuário vê ou com o que interage faz parte da UI, incluindo sliders, botões e gráficos.
A UI é criada com funções que começam com "ui.", como ui.input_numeric, ui.input_slider e ui.output_text. Essas funções são encapsuladas em uma função de página, geralmente ui.page_fluid, que descreve o layout básico da página.
A lógica do servidor define como o app se comporta e responde aos inputs do usuário. Ela consiste em funções que recebem as entradas da UI, as processam e atualizam os elementos de saída conforme necessário. A lógica do servidor é criada com a função server e inclui expressões reativas para lidar com inputs e outputs.
Depois de definir a UI e a lógica do servidor, conectamos tudo em um aplicativo completo, que deve se chamar "app".

Entendendo o modelo de programação reativa
Considere este exemplo da documentação do Shiny.
O exemplo recebe um input do usuário por meio de um slider e o usa para fazer um cálculo exibido na caixa de texto abaixo do slider. Esse exemplo simples está rodando em um navegador local no VS Code.

Como dá para ver, a mágica do Shiny é a interatividade. O motor por trás disso é o modelo de programação reativa. No Shiny, definimos expressões reativas para criar uma cadeia de dependências entre inputs e outputs. Quando um input muda, todas as expressões reativas e saídas dependentes são atualizadas automaticamente. Essa reatividade está no coração do Shiny. Você pode ler mais sobre a reatividade do Shiny aqui.
Alguns elementos-chave tornam essa reatividade possível.
Primeiro, o cálculo reativo, ou reactive.Calc. É um cálculo baseado em um input. Ele mantém em cache o valor retornado até que o input mude; quando isso acontece, o cálculo é reexecutado com o novo input. Isso permite que seu app responda com eficiência às entradas do usuário. Cálculos reativos usam o decorator @reactive.Calc, como no exemplo abaixo.
@reactive.Calc
def double_number():
return input.number() * 2
Outro elemento reativo é o efeito reativo, ou reactive.Effect. Um efeito reativo não retorna um valor quando executa. Em vez disso, dispara um efeito, como modificar uma variável ou salvar um arquivo. Ele também é reexecutado quando os inputs mudam. O reactive.Effect mais comum é o decorator @output, que adiciona uma string com o resultado à fila de mensagens, como no exemplo abaixo.
@output
@render.text
def txt():
return f"The value of x is {input.x()}"
Às vezes, você pode não querer que a reatividade do seu app seja tão instantânea. Por exemplo, se você tem um modelo computacionalmente caro, pode preferir esperar até que vários parâmetros sejam atualizados antes de reexecutá-lo. Nesses casos, reactive.event() ou reactive.isolate() oferecem opções para limitar a reatividade do app.
Adicionando interatividade ao seu app Shiny
Quando você precisa de um app mais complexo
Com essa lógica reativa, o Shiny para Python pode criar apps tão complexos ou simples quanto você precisar. Você pode adicionar botões de opção, caixas de seleção, sliders, caixas de texto, gráficos, mapas e muito mais! Aqui está um exemplo um pouco mais complexo da documentação do Shiny.

Neste exemplo, criamos um mapa de calor com dados aleatórios. Há uma escolha por botão de opção para o estilo do heatmap que o usuário quer ver, e o slider altera a faixa de cores do mapa. A Posit (empresa que criou o Shiny) oferece vários outros exemplos no site, incluindo este divertido clone do Wordle.
Além de ser divertido, esse tipo de interatividade tem muitas aplicações úteis. Você pode criar um modelo que use fatores ambientais, como salinidade e temperatura, para prever florações de algas. Um pesquisador em campo poderia inserir os valores atuais no seu app Shiny e receber uma previsão em tempo real.
Você pode criar um modelo com projeções de receita anual sob determinadas condições. Assim, gestores poderiam simular cenários inserindo números de vendas ou marcando caixas para indicar os produtos ofertados, vendo as previsões atualizarem diante dos olhos.
Os casos de uso são inúmeros em diversos setores.
Tipos de inputs e outputs
O Shiny oferece diversos tipos de entrada e saída para atender a diferentes necessidades de visualização e interação com dados. Aqui está uma tabela simples com inputs e outputs comuns no Shiny para Python.
|
Inputs |
O que faz? |
|
Action Button Input |
Fornece um botão para o usuário selecionar. |
|
Action Link Input |
Permite que o usuário clique em um link. |
|
Text input |
Disponibiliza uma caixa para uma linha simples de texto. |
|
Numeric input |
Disponibiliza uma caixa numérica com setas para cima e para baixo. |
|
Slider input |
Cria um controle deslizante numérico. |
|
Checkbox input |
Gera uma única caixa de seleção para aplicações Verdadeiro/Falso. |
|
Switch input |
Gera um único interruptor liga/desliga. |
|
Checkbox group input |
Cria várias caixas de seleção para múltiplas escolhas. |
|
Select input |
Fornece um menu suspenso de opções. |
|
Radio buttons input |
Cria botões de opção, obrigando uma única escolha. |
|
Text area input |
Disponibiliza uma caixa de texto maior e redimensionável para textos longos. |
|
Date input |
Cria uma caixa de data com calendário para seleção. |
|
Date range input |
Basicamente duas caixas de data emparelhadas para inserir um intervalo. |
|
Password input |
Cria uma caixa de texto que oculta os caracteres digitados. |
———————————————————————————————————————————
|
Outputs |
O que faz? |
|
Text output |
Escreve texto em HTML simples. |
|
Verbatim text output |
Exibe texto em um bloco de código monoespaçado. |
|
UI output |
Permite uma UI mais dinâmica com base nos inputs do usuário. |
|
Plot output |
Gera um gráfico usando bibliotecas Python comuns, como matplotlib. |
|
Table output |
Cria uma tabela simples com cabeçalhos de coluna. |
|
Data Frame / Grid output |
Cria uma tabela personalizável com filtros, grades e limite de linhas. |
Para ver a lista completa de componentes do Shiny, confira esta página.
Personalizando a interface do usuário no Shiny para Python
Layouts e temas
O Shiny oferece flexibilidade para personalizar a interface do usuário por meio de diferentes layouts usando uma função de página. A função mais usada é a page_fluid(), que fornece um design responsivo que se ajusta a diferentes tamanhos de tela. Um layout de largura fixa, adequado para apps com requisitos específicos de design, pode ser obtido com a função page_fixed().
O Shiny utiliza HTML para criar seus apps web. Isso significa que você pode usar temas em CSS para estilizar seu app. Adicionar estilos CSS personalizados permite ajustar a aparência do app Shiny ao seu gosto ou à identidade visual da sua empresa.
Implementação de widgets e extensões customizadas
O Shiny é compatível com ipywidgets para uma variedade de gráficos interativos, mapas, visualizações 3D e streaming de mídia. Ele também oferece alguma compatibilidade com outros widgets Python que podem ser salvos como arquivo HTML. Ao incorporar widgets personalizados, você adapta seu app Shiny a casos de uso específicos e cria uma experiência mais sob medida.
Publicando seu app Shiny para Python
Entendendo as diferentes opções de deploy
Depois de criar um app Shiny bacana, você provavelmente vai querer compartilhá-lo com um público maior, seja no seu portfólio ou com um cliente, publicando-o na web. O Shiny oferece várias opções de deploy para diferentes necessidades.
Deploy local: você pode publicar seu app Shiny em um servidor local, tornando-o acessível dentro da sua organização ou para um grupo específico de usuários.
Plataformas em nuvem: plataformas em nuvem oferecem soluções escaláveis e acessíveis para publicar apps Shiny. Opções populares incluem:
- Shinyapps.io: a plataforma da Posit, feita especificamente para hospedar aplicativos Shiny.
- Heroku: uma plataforma em nuvem que suporta o deploy de apps Shiny.
- AWS, Azure e Google Cloud: grandes provedores de nuvem que permitem publicar apps Shiny em máquinas virtuais ou contêineres.
ShinyLive: o Shiny oferece uma forma nova de executar aplicativos diretamente no navegador sem um servidor separado rodando Python. Ele combina WebAssembly e Pyodide para permitir que apps Shiny rodem sem instalar Python ou Shiny no seu computador. Essa plataforma limita os pacotes Python disponíveis e pode não ser tão segura quanto outras opções, mas é uma ótima forma de compartilhar código não sensível rapidamente.
Conclusão
Shiny para Python é uma novidade empolgante no cenário de desenvolvimento de apps web. Seu uso pode turbinar seu projeto de dados sem exigir muito tempo aprendendo desenvolvimento web. Se você quer experimentar o Shiny para R, confira este curso de fundamentos de Shiny da DataCamp e este curso sobre criação de dashboards com R Shiny. Depois de dominar o básico, pratique suas novas habilidades com um estudo de caso em Shiny!
Sou PhD e tenho 13 anos de experiência trabalhando com dados em um ambiente de pesquisa biológica. Crio software em várias linguagens de programação, incluindo Python, MATLAB e R. Sou apaixonado por compartilhar meu amor pelo aprendizado com o mundo.
