Comprendi i tuoi dati in tempo reale

Comprendi i dati in tempo reale

Tutorial pratico

con bytewax e ydata-profiling

In questo post del blog, tratteremo come è possibile combinare e sfruttare la soluzione di streaming open-source, bytewax, con ydata-profiling, per migliorare la qualità dei tuoi flussi di streaming. Preparati!

Il processing di flussi consente l’analisi in tempo reale dei dati in transito e prima della memorizzazione e può essere stateful o stateless.

Il processing di flussi stateful viene utilizzato per le raccomandazioni in tempo reale, il rilevamento di pattern o l’elaborazione di eventi complessi, dove è necessaria la conoscenza della cronologia di ciò che è accaduto per l’elaborazione (finestre, unione per chiave, ecc.).

Il processing di flussi stateless viene utilizzato per la trasformazione in linea che non richiede la conoscenza di altri punti di dati nel flusso, come mascherare una email o convertire un tipo.

Foto di Markus Spiske su Unsplash

In generale, i flussi di dati vengono ampiamente utilizzati nell’industria e possono essere applicati a casi d’uso come il rilevamento delle frodi, il monitoraggio dei pazienti o la manutenzione predittiva degli eventi.

Un aspetto cruciale che tutti i flussi di dati devono considerare è la qualità dei dati

A differenza dei modelli tradizionali in cui la qualità dei dati viene di solito valutata durante la creazione del data warehouse o della soluzione dashboard, i dati in streaming richiedono un monitoraggio continuo.

È essenziale mantenere la qualità dei dati durante l’intero processo, dalla raccolta all’alimentazione delle applicazioni downstream. Dopotutto, il costo di una cattiva qualità dei dati può essere elevato per le organizzazioni:

“Il costo dei dati di scarsa qualità rappresenta un sorprendente 15% – 25% del fatturato per la maggior parte delle aziende. (…) I due terzi di questi costi possono essere eliminati anticipando la qualità dei dati.”

— Thomas C. Redman, autore di “Getting in Front on Data Quality”

In tutto questo articolo, ti mostreremo come puoi combinare bytewax con ydata-profiling per profilare e migliorare la qualità dei tuoi flussi di streaming!

Elaborazione di flussi per professionisti dei dati con Bytewax

Bytewax è un framework di processing di flussi OSS progettato specificamente per sviluppatori Python.

Consente agli utenti di creare pipeline di dati in streaming e applicazioni in tempo reale con funzionalità simili a Flink, Spark e Kafka Streams, offrendo al contempo un’interfaccia amichevole e familiare e compatibilità al 100% con l’ecosistema Python.

Utilizzando connettori integrati o librerie Python esistenti, puoi connetterti a fonti di dati in tempo reale e in streaming (Kafka, RedPanda, WebSocket, ecc.) e scrivere dati trasformati su vari sistemi downstream (Kafka, file parquet, data lake, ecc.).

Per le trasformazioni, Bytewax agevola le trasformazioni stateful e stateless con metodi di mappatura, finestre e aggregazione e offre funzionalità familiari come il ripristino e la scalabilità.

Bytewax offre un’esperienza centrata sui dati e su Python per i flussi di dati ed è appositamente progettato per ingegneri e scienziati dei dati. Consente agli utenti di creare pipeline di dati in streaming e applicazioni in tempo reale e creare personalizzazioni necessarie per soddisfare le proprie esigenze senza dover imparare e mantenere piattaforme di streaming basate su JVM come Spark o Flink.

Bytewax è adatto a molti casi d’uso, come ad esempio l’incorporamento di pipeline per l’IA generativa, la gestione dei valori mancanti nei flussi di dati, l’utilizzo di modelli linguistici in un contesto di streaming per comprendere i mercati finanziari e altro ancora. Per ispirazione sui casi d’uso e ulteriori informazioni come documentazione, tutorial e guide, non esitare a visitare il sito web di bytewax.

Perché il data profiling per i flussi di dati?

Il data profiling è fondamentale per un avvio di successo di qualsiasi attività di machine learning e si riferisce alla fase di comprensione approfondita dei dati: la sua struttura, il suo comportamento e la sua qualità.

In poche parole, il data profiling consiste nell’analizzare gli aspetti legati al formato dei dati e ai descrittori di base (ad esempio, il numero di campioni, il numero/tipi di caratteristiche, i valori duplicati), alle caratteristiche intrinseche (come la presenza di dati mancanti o caratteristiche sbilanciate) e ad altri fattori complicanti che possono emergere durante la raccolta o l’elaborazione dei dati (ad esempio, valori errati o caratteristiche inconsistenti).

Garantire elevati standard di qualità dei dati è fondamentale per tutti i settori e le organizzazioni, ma è particolarmente rilevante per i settori che operano con l’output di dati continui, dove le circostanze potrebbero cambiare rapidamente e richiedere azioni immediate (ad esempio, monitoraggio sanitario, valori delle azioni, politiche sulla qualità dell’aria).

Per molti settori, il data profiling viene utilizzato da una prospettiva di analisi esplorativa dei dati, considerando i dati storici archiviati nei database. Al contrario, per i flussi di dati, il data profiling diventa essenziale per la validazione e il controllo continuo della qualità lungo il flusso, dove i dati devono essere verificati in diversi intervalli di tempo o fasi del processo.

Incorporando un data profiling automatico nei nostri flussi di dati, possiamo ottenere immediatamente un feedback sullo stato attuale dei nostri dati e essere avvisati per eventuali problemi potenzialmente critici – che siano legati alla coerenza e all’integrità dei dati (ad esempio, valori corrotti o formati che cambiano) o a eventi che si verificano in brevi periodi di tempo (ad esempio, variazioni dei dati, deviazioni dalle regole aziendali e dagli esiti).

In settori reali – dove si sa che la legge di Murphy è destinata a colpire e “tutto può sicuramente andare storto” – il data profiling automatico potrebbe salvarci da molteplici rompicapi e da sistemi che devono essere messi fuori produzione!

Per quanto riguarda il data profiling, ydata-profiling è sempre stato un preferito del pubblico, sia per dati tabulari che per dati a serie temporali. E non è difficile capire il perché – è una sola riga di codice per un ampio set di analisi e intuizioni.

Operazioni complesse e che richiedono molto tempo sono svolte dietro le quinte: ydata-profiling rileva automaticamente i tipi di caratteristiche contenuti nei dati e in base ai tipi di caratteristiche (numeriche o categoriche) adatta le statistiche riassuntive e le visualizzazioni mostrate nel rapporto di profiling.

Promuovendo un’analisi centrata sui dati, il pacchetto evidenzia le relazioni esistenti tra le caratteristiche, focalizzandosi sulle interazioni e correlazioni tra coppie di caratteristiche e fornisce una valutazione approfondita degli avvisi sulla qualità dei dati, dai valori duplicati o costanti alle caratteristiche sbilanciate.

È davvero una visione a 360 gradi sulla qualità dei nostri dati, con uno sforzo minimo.

Rapporto di Profiling: Evidenziazione di potenziali problemi di qualità dei dati. Immagine di Author.

Mettendo tutto insieme: bytewax e ydata-profiling

Prima di iniziare il progetto, dobbiamo prima impostare le nostre dipendenze Python e configurare la nostra fonte di dati.

Prima, installiamo i pacchetti bytewax e ydata-profiling (Potresti voler utilizzare un ambiente virtuale per questo – controlla queste istruzioni se hai bisogno di una guida aggiuntiva!)

Poi, carichiamo il dataset di telemetria dei sensori ambientali (Licenza – CC0: Dominio pubblico), che contiene diverse misurazioni di temperatura, umidità, monossido di carbonio, gas liquido di petrolio, fumo, luce e movimento da diversi dispositivi IoT:

In un ambiente di produzione, queste misurazioni sarebbero generate in modo continuo da ciascun dispositivo, e l’input avrebbe l’aspetto di quello che ci aspettiamo in una piattaforma di streaming come Kafka. In questo articolo, per simulare il contesto che troveremmo con i dati in streaming, leggeremo i dati dal file CSV una riga alla volta e creeremo un flusso di dati utilizzando bytewax.

(Come nota laterale, un flusso di dati è essenzialmente un pipeline di dati che può essere descritta come un grafo aciclico diretto – DAG)

Prima di tutto, facciamo alcune importazioni necessarie:

Poi, definiamo il nostro oggetto flusso di dati. Successivamente, utilizzeremo un metodo di mappatura senza stato in cui passiamo una funzione per convertire la stringa in un oggetto datetime e ristrutturare i dati nel formato (device_id, dati).

Il metodo map apporterà la modifica a ciascun punto dati in modo stateless. La ragione per cui abbiamo modificato la forma dei nostri dati è per poter raggruppare facilmente i dati nei passaggi successivi per profilare i dati per ciascun dispositivo separatamente anziché per tutti i dispositivi contemporaneamente.

Ora sfrutteremo le capacità stateful di bytewax per raccogliere dati per ciascun dispositivo per una durata di tempo che abbiamo definito. ydata-profiling si aspetta uno snapshot dei dati nel tempo, il che rende l’operatore di finestra il metodo perfetto da utilizzare per fare ciò.

In ydata-profiling, siamo in grado di produrre statistiche riassuntive per un dataframe che è specificato per un contesto particolare. Ad esempio, nel nostro esempio, possiamo produrre snapshot dei dati relativi a ciascun dispositivo IoT o a particolari intervalli di tempo:

Dopo aver definito gli snapshot, sfruttare ydata-profiling è semplice come chiamare il PorfileReport per ciascuno dei dataframe che vogliamo analizzare:

In questo esempio stiamo scrivendo le immagini su file locali come parte di una funzione in un metodo map. Queste potrebbero essere segnalate tramite uno strumento di messaggistica o potremmo salvarle in qualche archivio remoto in futuro. Una volta completato il profilo, il flusso di dati si aspetta un output in modo da poter utilizzare il StdOutput integrato per stampare il dispositivo che è stato profilato e l’ora in cui è stato profilato che è stato passato dalla funzione di profilo nel passaggio di map:

Ci sono diversi modi per eseguire flussi di dati Bytewax. In questo esempio, utilizziamo la stessa macchina locale, ma Bytewax può essere eseguito anche su più processi Python, su più host, in un container Docker, utilizzando un cluster Kubernetes e altro ancora.

In questo articolo, continueremo con una configurazione locale, ma ti incoraggiamo a verificare il nostro strumento di supporto waxctl che gestisce le distribuzioni di flussi di dati Kubernetes una volta che il tuo pipeline è pronta per passare alla produzione.

Supponendo di essere nella stessa directory del file con la definizione del flusso di dati, possiamo eseguirlo utilizzando:

Poi possiamo utilizzare i rapporti di profilazione per convalidare la qualità dei dati, verificare eventuali modifiche negli schemi o nei formati dei dati e confrontare le caratteristiche dei dati tra dispositivi diversi o finestre temporali.

In effetti, possiamo sfruttare la funzionalità di rapporto comparativo che evidenzia le differenze tra due profili dati in modo diretto, rendendo più facile per noi individuare modelli importanti che devono essere investigati o problemi che devono essere affrontati:

Pronto per esplorare i tuoi flussi di dati?

La convalida dei flussi di dati è fondamentale per identificare problemi nella qualità dei dati in modo continuo e confrontare lo stato dei dati in periodi di tempo distinti.

Per le organizzazioni nel settore sanitario, energetico, manifatturiero e dell’intrattenimento – tutte che lavorano con flussi continui di dati – una profilazione automatizzata è fondamentale per stabilire le migliori pratiche di governance dei dati, dalla valutazione della qualità alla privacy dei dati.

Ciò richiede l’analisi di snapshot dei dati che, come mostrato in questo articolo, può essere ottenuta in modo semplice combinando bytewax e ydata-profiling.

Bytewax si occupa di tutti i processi necessari per gestire e strutturare i flussi di dati in snapshot, che possono poi essere riassunti e confrontati con ydata-profiling attraverso un rapporto completo delle caratteristiche dei dati.

Essere in grado di elaborare e profilare correttamente i dati in ingresso apre una moltitudine di casi d’uso in diversi settori, dalla correzione di errori negli schemi e nei formati dei dati all’evidenziazione e mitigazione di problemi aggiuntivi derivanti dalle attività del mondo reale, come rilevazione di anomalie (ad esempio, frodi o rilevamento di intrusioni/minacce), malfunzionamento delle apparecchiature e altri eventi che deviano dalle aspettative (ad esempio, cambiamenti dei dati o mancata allineamento con le regole aziendali).

Ora sei pronto per iniziare a esplorare i tuoi flussi di dati! Fateci sapere quali altri casi d’uso scoprite e come sempre, non esitate a scriverci nei commenti o a trovarci nella Community AI Data-Centric per ulteriori domande e suggerimenti! Ci vediamo là!

Riconoscimenti

Questo articolo è stato scritto con il supporto di Fabiana Clemente (sviluppo di ydata-profiling), Zander Matheson e Oli Makhasoeva (sviluppo di bytewax). È possibile trovare ulteriori informazioni sulle pacchetti OSS nelle rispettive documentazioni: documenti ydata-profiling e documenti bytewax.