Streamlit: un modo rapido per creare app data-driven

Streamlit: un modo rapido per creare app data-driven

6 Maggio 2022 ai 0
Il modo migliore per creare app data-driven

Capita molto spesso di avere bisogno di una web app in cui inserire i propri dati, vuoi in una serie di grafici interattivi, vuoi in una dashboard, o in generale. Un’app data-driven come Streamlit è utilissima per comunicare agli altri le tue scoperte, e interagire con loro.

Però non è facile come sembra.

Infatti un conto è estrarre i dati, inserirli in una visualizzazione credibile e creare modelli. Un altro è ottimizzare un processo che ti porti a un’app, da condividere con altri colleghi, e in cui altri data engineer possano collaborare.

Per questo oggi parliamo di Streamlit, un framework molto rapido e facilissimo da usare, che in pochi passaggi dà forma alle tue app data-driven.

Vediamo insieme quali difficoltà risolve e per chi, con qualche esempio.

Problemi principali del creare una web app

L’analisi dati e il machine learning si basano su un percorso di solito lineare, che parte dai dati e arriva a qualunque cosa ci sia stato richiesto di ingegnerizzare: che sia una demo di software, una dashboard comoda da usare, oppure un prototipo, i risultati finali della nostra data analysis possono essere molteplici.

Per questo un pizzico di ingegneria software è sempre necessaria, anche solo se stai creando un progetto personale da inserire nel tuo portfolio.

Esempio pratico

Il co-fondatore e CEO di Streamlit, Adrien Treuille, racconta un episodio che accade in realtà in molte aziende.

Treuille lavorava in Zoox a un progetto di auto a guida autonoma, dove si occupavano di tutta la filiera, la pianificazione, la vista, il rilevamento dei pedoni, ecc.

Di cosa avrebbe avuto bisogno il team di 80 ingegneri che si occupava del progetto?

Ad esempio, di una applicazione che esegue due tipi di guida automatica.

Nulla di grave, si può scriverlo in Jupyter Notebook, copia-incollarlo in uno script Python, mandarlo su GitHub e poi usare un framework come Flask.

Ora quel singolo ingegnere che l’ha progettata la può usare. 

E se servisse al suo collega?

E se altri del team decidessero che questa app è così valida che la vogliono implementare con nuove funzionalità?

Qui entrava in gioco la squadra degli esperti in web app, che avrebbe trasformato i requisiti del sistema e il wireframe per svilupparlo in React o Vue con JavaScript, Python, CSS, HTML ecc, creando alla fine un’app splendida e ben progettata.

Ma questi ingegneri del software dovranno presto salutare il team e dedicarsi ad altri progetti, come spesso accade in azienda. 

Ecco perché bisogna rovesciare la regola: “Gli ingegneri dell’apprendimento automatico sono in realtà dei creatori di app” come direbbe Adrien Treuille. Quindi, bisogna renderli autonomi e dare loro lo strumento giusto.

Altrimenti si cade in quella che il CEO di Streamlit chiama una “unmaintainability trap”.

Soluzione: un framework semplice come Streamlit

Cosa sanno scrivere bene i data scientist?

Python, ovviamente! 

Ecco perché Streamlit è così facile da usare: questo framework permette di creare le web app con un percorso diverso da quello che tutti conosciamo, che comincia dal layout e procede con lo sviluppo di un modello. Qui abbiamo una modalità from top to bottom, pura e semplice. 

Il modo in cui si lavora sul flusso di dati è molto simile a Python, con qualche annotazione in più.

Puoi anche prendere uno script Python già fatto e trasformarlo in una web app semplicemente aggiungendo nello stesso file alcune call a Streamlit.

A questo punto vi lascio qualche assaggio del framework, senza la pretesa di fare un elenco esaustivo di tutte le sue funzioni.

Cosa puoi aggiungere in Streamlit

Puoi disegnare grafici, stampare del testo, o aggiungere widget, slider, caselle per i check, pulsanti, barre laterali, il tutto con grandissima facilità. 

Qui sotto vediamo ad esempio come aggiungere una barra a scomparsa con informazioni extra sulla tua web app:

sidebar = st.sidebar()
con sidebar:
     #Aggiungi gli elementi che vuoi inserire

Ora definisci sidebar come una variabile e usa la “Streamlit with notation” per inserire del contenuto al suo interno. 

Visualizzare i dati in Streamlit

Per visualizzare i dati che hai inserito basta passare un dataframe o un grafico da una delle librerie di plottaggio supportate da Streamlit attraverso una funzione st.write come questa:

st.write (frame di dati pandas o grafico da una libreria supportata)

Se ti serve passare un frame di dati e far visualizzare un grafico:

st.line_chart(dati)
st.area_chart(dati)
st.bar_chart(dati)
# Eccetera

E se vuoi più personalizzazione quando usi una libreria di plottaggio supportata, puoi fare così:

st.altair_chart(grafico altair)
st.plotly_chart(grafico plotly express)
# Eccetera

Inserire testo in Streamlit

Non avere grandi pretese di formattazione, la grafica è basilare, ma è molto chiara.

Se vuoi personalizzare titoli e testi, si usa un markdown semplicissimo:

# Testo
st.title()
st.header()
st.write()
# Markdown
st.markdown()
# LaTeX
st.latex()
# Codice
st.code()

Queste sono solo alcune delle funzioni di Streamlit, diciamo quelle che mi sembrano più utili a tutti.

In ogni caso, se vuoi approfondire questo framework, leggiti bene la documentazione e cerca le funzioni che servono al tuo personale progetto di app.

Qualche consiglio lato software

Ricorda di dividere il codice in moduli e cerca di seguire la regola DRY, soprattutto se stai sviluppando un’app corposa.

Certo, sembra comodo buttare in Streamlit uno script lunghissimo, perché tanto l’abbiamo già scritto, però il rischio è sempre quello: trovarsi con un’app pesantissima perché piena di righe di codice inutili e ripetute.

Quindi, ricorda di rispettare le best practice in campo software, sempre.

Come condividere una app creata con Streamlit

Puoi mettere un’app Streamlit nel cloud, oppure sfruttare il loro servizio Streamlit Sharing e toglierti ogni stress.

Svantaggi di Streamlit

Se da un lato Streamlit rende facilissimo creare un’applicazione e condividerla, bisogna essere consapevoli del fatto che la personalizzazione è limitata.

Però nulla è scritto nella pietra: prova a chiedere alla community di Streamlit di attivare nuove funzionalità o informati su come altri utenti hanno aggirato l’ostacolo. Trovi già molte soluzioni online.

Parliamo comunque di un framework che continua a migliorarsi!

In conclusione

Streamlit: un modo rapido per creare app data-driven - Net ai

Streamlit non è Flask, perché li usiamo per obiettivi diversi e in contesti diversi. Qualcuno online sta già dicendo che Streamlit farà sparire Flask, ma non sono così d’accordo.

Streamlit è perfetta per chi ha già uno script Python e vuole trasformarlo in un’app.

Se hai bisogno di un’applicazione di tipo data-driven, visualizzazione dati, machine learning, o di una dashboard, Streamlit è quello che ti serve. Ma per tutto il resto, dovrai cercare altro. 

Insomma, Streamlit va bene per i data engineer e per chi si occupa di machine learning, ma soprattutto per chi vuole rendersi indipendente dall’ingegneria del software.

Ti mettono anche a disposizione delle ottime demo, molto pratiche, e puoi consultare la loro gallery, o una gallery direttamente su Github, per vedere cosa hanno creato gli altri utenti. 

Divertiti!

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *