Vai al contenuto principale

Padroneggiare Shiny per Python: guida per principianti alla creazione di applicazioni web interattive

Esplora le basi di Shiny per Python per iniziare subito a creare dashboard e applicazioni web interattive con questa nuova libreria!

Scopri con l'IA

Introduzione a Shiny e ai suoi vantaggi

Chi ha esperienza con R avrà probabilmente sentito parlare del pacchetto Shiny, che consente di creare applicazioni web interattive. R Shiny è stato rilasciato nel 2012 e la domanda è cresciuta rapidamente quando si è capito che questo pacchetto, facile da usare, poteva permettere a scienziati e analisti di creare modelli e dashboard più interattivi.

Nel 2023, Shiny per Python è uscito dalla fase alpha, offrendo un framework reattivo simile per il linguaggio Python. Shiny è rinomato per la sua semplicità ed efficacia nella creazione di dashboard e applicazioni web senza la necessità di competenze avanzate di sviluppo web.

Che cos'è Shiny?

Shiny è un framework open source per applicazioni web per R e, con gli sviluppi recenti, per Python. Permette ai professionisti dei dati di trasformare le proprie analisi in applicazioni web interattive. Il cuore di Shiny ruota attorno al concetto di programmazione reattiva, in cui le modifiche agli input (come slider o pulsanti) attivano aggiornamenti automatici negli output (come grafici o tabelle).

Ci sono molti vantaggi nell'usare il framework Shiny per creare applicazioni web. Shiny sfrutta la programmazione reattiva, consentendoti di costruire applicazioni che rispondono in modo dinamico agli input dell'utente, creando un'esperienza più coinvolgente e personalizzata. Shiny ha una libreria user-friendly e una documentazione completa, permettendo anche a chi ha conoscenze di programmazione di base di creare applicazioni interattive e gradevoli alla vista. Per gli appassionati di Python, Shiny offre ora un ponte tra il ricco ecosistema di data science di Python e le capacità di sviluppo web di Shiny.

Ecco alcuni esempi in cui il framework Shiny può essere prezioso:

  • Dashboard interattivi: Shiny è perfetto per creare dashboard interattivi che consentono agli utenti di esplorare e visualizzare i dati in tempo reale. Puoi usare questi consigli per progettare un dashboard eccellente.
  • Esplorazione dei dati: Gli analisti possono usare Shiny per creare applicazioni che permettono agli utenti di esplorare i dataset in modo interattivo, regolando al volo parametri e visualizzazioni.
  • Sistemi di supporto alle decisioni: Shiny può essere utilizzato per sviluppare sistemi di supporto alle decisioni, facilitando scelte guidate dai dati grazie a insight dinamici.
  • Strumenti didattici: Shiny è utile in ambito educativo, consentendo la creazione di materiali didattici e dimostrazioni interattive.

Nota: È importante capire che Shiny per R e Shiny per Python sono diversi. Pur condividendo concetti di base simili, la sintassi e la terminologia non sono intercambiabili. Se sai già usare Shiny per R, avrai un vantaggio nell'imparare Shiny per Python, ma dovrai comunque apprendere le differenze introdotte per adattarlo a Python.

Confronto di Shiny con altri framework per applicazioni web

Quando si considera lo sviluppo di applicazioni web per la data science, è utile capire come Shiny si confronti con altri framework.

Shiny offre una combinazione unica di semplicità e versatilità. Tuttavia, la versione per Python è relativamente nuova rispetto ad altri framework. Shiny è progettato per rendere lo sviluppo di applicazioni web accessibile a chiunque abbia conoscenze di codice Python.

Oltre alla facilità d'uso, è progettato per consentire uno scaling senza intoppi, utilizzando caching e reattività selettiva per mantenere efficiente il suo framework reattivo. Questo gli conferisce un vantaggio rispetto ad alcuni altri framework di web design. La sua sintassi dichiarativa e il modello di programmazione reattiva lo rendono accessibile anche ai data analyst, permettendo loro di creare applicazioni interattive senza una profonda esperienza di sviluppo web.

Al contrario, altri framework come Dash e Streamlit offrono punti di forza differenti. Dash usa una sintassi in stile Python e mette l'accento sullo sviluppo rapido. Streamlit eccelle nel prototipaggio veloce con rendering automatico, ma riesegue l'intero programma quando gli input cambiano, con conseguente inefficienza man mano che le applicazioni crescono. Flask e Django sono framework web generici che offrono flessibilità e controllo, ma spesso richiedono maggiori competenze di sviluppo web. Se ti interessa impararli, puoi leggere il tutorial su Django di DataCamp.

Oltre alle piattaforme di sviluppo web basate su codice, gli analisti dei dati usano anche Tableau e Power BI per scopi simili di creazione di dashboard. Si tratta di piattaforme di visualizzazione dei dati che offrono strumenti potenti ma hanno costi di licenza. Questi programmi hanno anche funzionalità di analisi limitate rispetto al codice puro e richiedono che i modelli e le analisi più complessi vengano completati altrove. Puoi saperne di più su Power BI su DataCamp.

È essenziale considerare i requisiti del progetto, le preferenze di linguaggio e la necessità di funzionalità specializzate quando si sceglie il framework più adatto per una data applicazione di data science. Pur riconoscendo i punti di forza altrui, l'unione unica di semplicità e flessibilità di Shiny, insieme alla sua integrazione con Python, lo rende una scelta interessante per chiunque voglia portare i propri progetti di data science a un livello superiore.

Framework

Caratteristiche principali

Supporto linguaggi

Curve di apprendimento

Caso d'uso

Shiny

Semplicità e versatilità

R, Python

Bassa

Applicazioni e visualizzazioni interattive

Dash

Sintassi "pythonic"

Python

Media

Sviluppo rapido di web app leggere

Streamlit

Prototipazione rapida con rendering automatico

Python

Bassa

Prototipazione veloce per app di dati

Flask

Framework web generico

Python

Da media ad alta

Web app complete

Django

Framework web Python di alto livello

Python

Da media ad alta

Applicazioni e servizi web scalabili

Tableau/Power BI

Piattaforme di visualizzazione dei dati

Non applicabile

Bassa

Visualizzazioni di Business Intelligence

Configurazione dell'ambiente di sviluppo

Una delle grandi qualità di Shiny per Python è la presenza di un editor web in cui puoi creare la tua app senza scaricare o installare nulla. Questo editor web viene fornito con diversi esempi di app e funzionalità che puoi usare per iniziare e provare la tua nuova applicazione Shiny.

Tuttavia, arriverà il momento in cui probabilmente vorrai eseguire Shiny sul tuo dispositivo locale. Questa sezione ti guiderà nell'installazione di Python, Shiny e delle rispettive dipendenze, oltre alle configurazioni necessarie per far funzionare senza problemi il tuo ambiente locale.

Installazione di Python

Per iniziare a lavorare con Shiny offline, devi avere Python installato sul tuo computer. Se non lo hai ancora installato, visita il sito ufficiale di Python su python.org e scarica l'ultima versione di Python per il tuo sistema operativo. Se avevi già installato Python, ti consiglio di aggiornarlo all'ultima versione per assicurarti che Shiny funzioni correttamente.

Esegui il programma di installazione scaricato e seleziona la casella "Add Python to PATH" durante l'installazione. Questo rende più semplice eseguire Python dalla riga di comando. Apri un prompt dei comandi o un terminale e digita python --version per verificare che Python sia stato installato correttamente. Dovresti vedere visualizzato il numero di versione. Per comodità, puoi anche scegliere di installare un IDE (Integrated Development Environment).

Installazione di Shiny

Una volta configurato Python, puoi installare Shiny. Finché hai l'ultima versione di Python, dovresti riuscire ad aprire un prompt dei comandi o un terminale e usare il seguente comando per installare la libreria Shiny per Python utilizzando pip:

pip install shiny

Se usi conda invece di pip, usa questo comando:

conda install -c conda-forge shiny

Shiny può avere dipendenze aggiuntive in base alla configurazione del tuo sistema. Assicurati di installarle seguendo le istruzioni fornite nella documentazione di Shiny.

Configurazione dell'ambiente di sviluppo

Ora che hai installato Python e Shiny, ci sono altri tre aspetti da considerare.

  1. IDE: Se usi un IDE, come VS Code, puoi scegliere di installare un'estensione per consentire il rendering degli output di Shiny all'interno dell'IDE.
  2. Controllo versione: Valuta l'uso di sistemi di controllo versione come Git per tracciare le modifiche al tuo codice. Inizializza un repository Git nella cartella del progetto per gestire e collaborare facilmente sulle tue applicazioni Shiny.
  3. Struttura del codice: Organizza la struttura del progetto. Crea cartelle separate per le tue applicazioni Shiny, i dataset e qualsiasi risorsa aggiuntiva. Questo aiuta a mantenere un codebase pulito e ordinato, che è la best practice per qualsiasi progetto di coding.

Con il tuo ambiente di sviluppo ora configurato, sei pronto per iniziare a creare applicazioni web interattive con Shiny per Python.

Creare una Shiny app di base

Capire la struttura di una Shiny app

Una Shiny app è composta da due componenti principali: l'interfaccia utente (UI) e la logica del server.

L'UI definisce l'aspetto dell'app e quali elementi sono disponibili per l'interazione dell'utente. Tutto ciò che l'utente può vedere o con cui può interagire fa parte dell'UI, inclusi elementi come slider, pulsanti e grafici.

L'UI è creata utilizzando funzioni che iniziano con "ui.", come ui.input_numeric, ui.input_slider e ui.output_text. Queste funzioni sono racchiuse in una funzione di pagina, in genere ui.page_fluid, che descrive il layout di base della pagina.

La logica del server definisce come l'app si comporta e risponde agli input dell'utente. Consiste di funzioni che prendono gli input dell'utente dall'UI, li elaborano e aggiornano di conseguenza gli elementi di output. La logica del server è creata usando la funzione server e include espressioni reattive per gestire input e output.

Dopo aver definito l'UI e la logica del server, li colleghiamo in un'applicazione completa, che deve chiamarsi "app".

image3.png

Comprendere il modello di programmazione reattiva

Considera questo esempio tratto dalla documentazione di Shiny.

Questo esempio prende l'input dell'utente da uno slider e lo usa per eseguire un calcolo che viene mostrato nella casella di testo sotto lo slider. Questo esempio molto semplice viene eseguito in un browser semplice su un host locale in VS Code.

Come puoi vedere da questa semplice dimostrazione, la magia di Shiny è la sua interattività. Il motore dietro l'interattività di Shiny risiede nel suo modello di programmazione reattiva. In Shiny, definiamo espressioni reattive per creare una catena di dipendenze tra input e output. Quando un input cambia, tutte le espressioni reattive e gli output dipendenti vengono aggiornati automaticamente. Questa reattività è il cuore di Shiny. Puoi leggere qui maggiori dettagli sulla reattività di Shiny.

Ci sono alcuni elementi chiave che rendono possibile questa reattività.

Il primo è il calcolo reattivo, ovvero reactive.Calc. Si tratta di un calcolo basato su un input. Questo calcolo memorizza nella cache il valore restituito finché l'input non cambia, momento in cui viene rieseguito con il nuovo input. Ciò consente alla tua app di rispondere in modo efficiente agli input dell'utente. I calcoli reattivi utilizzano il decoratore @reactive.Calc, come nell'esempio seguente.

@reactive.Calc
def double_number():
	return input.number() * 2

Un altro elemento reattivo è un effetto reattivo, ovvero reactive.Effect. Un effetto reattivo non restituisce un valore quando viene eseguito. Invece, innesca un effetto, come modificare una variabile o salvare un file. Inoltre, viene rieseguito quando gli input cambiano. Il reactive.Effect più comune è il decoratore @output, che aggiunge una stringa con il risultato nella coda dei messaggi, come nell'esempio seguente.

@output
@render.text
def txt():
	return f"The value of x is {input.x()}"

A volte potresti non voler che la reattività della tua app sia così istantanea. Per esempio, se hai un modello computazionalmente costoso, potresti voler aspettare che più parametri siano stati aggiornati prima di rieseguirlo. In questo caso, reactive.event() o con reactive.isolate() offrono opzioni per limitare la reattività della tua app.

Aggiungere interattività alla tua Shiny app

Quando ti serve un'app più complessa

Con questa logica reattiva, Shiny per Python può creare app tanto complesse quanto semplici ti servano. Puoi aggiungere pulsanti radio, caselle di controllo, slider, campi di testo, grafici, mappe e molto altro! Ecco un esempio leggermente più complesso tratto dalla documentazione di Shiny.

In questo esempio, abbiamo creato una heatmap di alcuni dati casuali. C'è un'opzione con pulsanti radio per lo stile della heatmap che l'utente vuole visualizzare e la funzione slider cambia l'intervallo di colori nella heatmap. Posit (l'azienda che ha creato Shiny) fornisce diversi altri esempi sul proprio sito, incluso questo divertente clone di Wordle.

Sebbene questo tipo di interattività sia divertente da esplorare, esistono anche molte applicazioni utili. Potresti progettare un modello che prenda fattori ambientali come salinità e temperatura e li usi per prevedere fioriture algali. Un ricercatore sul campo potrebbe inserire i valori attuali nella tua Shiny app e ottenere una previsione in tempo reale.

Potresti progettare un modello che mostri proiezioni di guadagni annuali al verificarsi di determinate condizioni. I manager potrebbero quindi usare la tua app per simulare diversi scenari inserendo numeri di vendite differenti o selezionando le caselle relative ai prodotti offerti, e vedrebbero l'aggiornamento della previsione in tempo reale.

I casi d'uso sono numerosi in più settori.

Tipi di input e output

Shiny offre una varietà di opzioni di input e output per soddisfare diverse esigenze di visualizzazione e interazione con i dati. Ecco una semplice tabella degli input e output comuni disponibili in Shiny per Python.

Input

Cosa fa?

Action Button Input

Fornisce un pulsante da selezionare.

Action Link Input

Permette all'utente di fare clic su un link.

Text input

Fornisce una casella di testo per una semplice riga di testo.

Numeric input

Fornisce una casella di input numerico con frecce su e giù.

Slider input

Crea uno slider numerico.

Checkbox input

Genera una singola casella di controllo per applicazioni True/False.

Switch input

Genera un singolo interruttore on/off.

Checkbox group input

Crea più caselle di controllo per scelte multiple.

Select input

Fornisce un menu a discesa di scelte.

Radio buttons input

Crea scelte con pulsanti radio, imponendo una singola scelta.

Text area input

Fornisce una casella di testo più grande con finestra ridimensionabile per input di testo lunghi.

Date input

Crea una casella di input data con un calendario per scegliere una data.

Date range input

In pratica due caselle data accoppiate che consentono di inserire un intervallo.

Password input

Crea una casella di testo che nasconde il testo inserito.

———————————————————————————————————————

Output

Cosa fa?

Text output

Scrive testo in HTML semplice.

Verbatim text output

Scrive testo all'interno di un blocco di codice a spaziatura fissa.

UI output

Permette un'UI più dinamica basata sugli input dell'utente.

Plot output

Genera un grafico usando librerie Python comuni, come matplotlib.

Table output

Crea una tabella semplice con intestazioni di colonna.

Data Frame / Grid output

Crea una tabella personalizzabile con filtri, linee di griglia e limiti di righe.

Per l'elenco completo dei componenti di Shiny, dai un'occhiata a questa pagina.

Personalizzare l'interfaccia utente in Shiny per Python

Layout e temi

Shiny offre flessibilità nella personalizzazione dell'interfaccia utente attraverso vari layout utilizzando una funzione di pagina. La funzione di pagina più usata è page_fluid(), che fornisce un design responsive che si adatta a diverse dimensioni dello schermo. Un layout a larghezza fissa, adatto ad applicazioni con requisiti di design specifici, può essere ottenuto usando la funzione di pagina page_fixed().

Shiny sfrutta l'HTML per creare le sue app web. Questo significa che puoi usare i temi CSS per dare stile alla tua app. L'aggiunta di CSS personalizzato ti consente di adattare l'aspetto della tua Shiny app alle tue preferenze estetiche o al branding aziendale.Top of Form

Implementazione di widget ed estensioni personalizzati

Shiny supporta gli ipywidgets per una varietà di grafici interattivi, mappe, visualizzazioni 3D e streaming multimediale. Ha anche una certa funzionalità per altri widget Python che possono essere salvati come file HTML. Integrando widget personalizzati, puoi adattare la tua Shiny app a casi d'uso specifici e creare un'esperienza più su misura per l'utente.

Distribuire la tua Shiny app per Python

Spiegazione delle diverse opzioni di distribuzione

Una volta creata una Shiny app convincente, probabilmente vorrai condividerla con un pubblico più ampio, per il tuo portfolio o per un cliente, distribuendola sul web. Shiny supporta diverse opzioni di distribuzione per soddisfare esigenze differenti.

Distribuzione locale: Puoi distribuire la tua Shiny app su un server locale, rendendola accessibile all'interno della tua organizzazione o a un gruppo specifico di utenti.

Piattaforme cloud-based: Le piattaforme cloud offrono soluzioni scalabili e accessibili per distribuire app Shiny. Scelte popolari includono:

  • Shinyapps.io: la piattaforma di Posit progettata specificamente per l'hosting di applicazioni Shiny.
  • Heroku: una piattaforma cloud che supporta la distribuzione di app Shiny.
  • AWS, Azure e Google Cloud: i principali provider cloud che consentono di distribuire app Shiny su macchine virtuali o container.

ShinyLive: Shiny offre un nuovo modo per eseguire applicazioni Shiny all'interno di un browser web senza un server separato che esegue Python. Combina WebAssembly e Pyodide per consentire l'esecuzione delle applicazioni Shiny senza installare Python o Shiny sul tuo computer. Questa piattaforma limita i pacchetti Python disponibili e potrebbe non essere sicura quanto altre soluzioni, ma è un buon modo per condividere rapidamente codice non sensibile.

Conclusione

Shiny per Python è un nuovo protagonista entusiasmante nel panorama dello sviluppo di web app. Il suo utilizzo può migliorare notevolmente il tuo progetto dati senza un investimento di tempo significativo nell'apprendimento dello sviluppo web. Se ti interessa provare Shiny per R, dai un'occhiata a questo corso sui fondamenti di Shiny di DataCamp e a questo corso sulla creazione di dashboard con R Shiny. Una volta apprese le basi, metti in pratica le tue nuove competenze con una case study su Shiny!

Amberle McKee

Autore

Amberle McKee

Sono un PhD con 13 anni di esperienza nel lavoro con i dati in un contesto di ricerca biologica. Creo software in diversi linguaggi di programmazione, tra cui Python, MATLAB e R. Sono appassionato di condividere con il mondo il mio amore per l’apprendimento.

Argomenti

Correlato