Gli scienziati (e i Binge-Watcher) si confrontano!

Data Analytics

Scienziati (e binge-watcher) unitevi!

Da qualche tempo, Swisscom Application Cloud offre un buildpack integrato per il famoso linguaggio statistico R. Questo post ti presenta questo buildpack R e mostra un esempio di visualizzazione dei dati forniti da un servizio web.

"Non è il custode dei film di Harry Potter?". - "No, quello è Walder Frey di Game of Thrones". - "Oh, aspetta, ora che lo vedo, David Bradley ha interpretato entrambi i ruoli".

Questa è la conversazione che ho avuto di recente mentre guardavo After Life, una serie televisiva britannica comica/drammatica.

Per rispondere a queste domande, mi sono chiesto se esistesse un elenco in cui inserire i nomi di due serie TV o film. Mi sarei quindi aspettato di ottenere un elenco di attori e attrici che hanno un ruolo in entrambe le produzioni. Una ricerca di cinque minuti non ha portato subito a nessuna soluzione utile, quindi ho deciso di implementarla da solo.

Avevo in mente un grafo in cui gli attori e le attrici sono dei nodi e i rispettivi ruoli dei bordi che collegano questi nodi.

Fortunatamente, l'Application Cloud di Swisscom dispone di un buildpack integrato per il famoso linguaggio statistico R. Pertanto, ho dovuto scrivere solo un'applicazione R per raccogliere i dati necessari e visualizzarli in un grafico di questo tipo.

Ho scoperto che sono molto più abile nello scrivere applicazioni Java che script R. Ho quindi deciso di scrivere una piccola applicazione Java basata sul framework Reactive Spring, che esegue l'elaborazione dei dati in background e fornisce i risultati attraverso un'interfaccia facile da usare. In questo modo, posso anche sfruttare il secret-store(apre una nuova finestra) e il Container Networking(apre una nuova finestra) di Application Cloud.

Il frontend è stato scritto come un'applicazione R Shiny(apre una nuova finestra). Dopo aver scoperto un paio di insidie e configurazioni degne di nota, voglio darti un'idea di come creare un'applicazione Shiny di base utilizzando R-Buildpack e distribuirla su Application Cloud.

Per iniziare, supponiamo che gli utenti possano inserire un paio di nomi di serie TV o film. Il backend esegue il crawling di un comune database di film e restituisce un grafo composto da nodi e bordi:

Ora, per visualizzare questi dati, un'applicazione Shiny deve consumarli e renderizzarli.  

Creo un nuovo R-script e inizio ad aggiungere queste dipendenze:

Successivamente, l'interfaccia utente viene definita come segue:

searchQuery è il campo di inserimento dell'utente con alcuni titoli come valori predefiniti. In un browser, si presenta così:

La logica del server è implementata per analizzare l'input e recuperare i risultati da un determinato URI. Successivamente, il grafico viene reso con l'aiuto di visNetwork:

Nota che non ho ancora specificato l'host del backend, ma mi aspetto che venga impostata una variabile chiamata URI.  

Non vorrei verificare le mie credenziali in un VCS come Git, quindi indico all'applicazione di leggere i dettagli della connessione dall'ambiente con un valore predefinito per lo sviluppo locale:

Per funzionare, è necessario disporre di un'istanza di secret-store(apre una nuova finestra). Ne ho creata una utilizzando questo comando:

Infine, questo comando espone lo script come applicazione Shiny eseguibile:

Ora, per distribuirlo, ho i seguenti tre file nella stessa directory:

- shiny.r (l'applicazione stessa, come illustrato sopra)
- r.yml
- manifest.yml

Il file r.yml contiene le dipendenze necessarie e si presenta così:

Nota che questo installerà le dipendenze. Non dimenticare di usarle (con library(...)) nello script R. Shiny non viene installato perché viene fornito di default con il buildpack R.  

Il manifest.yml è il noto manifesto di distribuzione con questo contenuto:

Prima di effettuare il push, ricordati di creare una politica di rete per consentire al frontend di accedere al backend come configurato nell'URI del secret-store:

Distribuire con successo l'applicazione nell'Application Cloud è semplice come un cf push. Tuttavia, potrebbe volerci un po' di tempo prima che il processo di staging abbia scaricato tutte le dipendenze di R. Su Github è in corso una discussione su come migliorare questo aspetto in futuro. Dopo che l'applicazione è stata distribuita, puoi accedervi tramite il tuo browser e inserire le produzioni di tuo interesse. Nella conversazione iniziale, David Bradley non era l'unico attore riconosciuto per aver recitato in più di una delle produzioni in questione:

E questo è già tutto. Spero di averti dato una breve introduzione al buildpack di R e che anche tu sia in grado di distribuire le tue applicazioni Shiny.  

Voglio ringraziare tutti i collaboratori per il loro lavoro su questo buildpack. Prendilo in considerazione per i tuoi prossimi grafici scientifici o per disegnare rapidamente altri dati interessanti.  

Buon lavoro!

Roman Bachmann

Roman Bachmann

Head of Cloud Platform Services

Altri articoli getIT

Pronti per Swisscom

Trova il lavoro o il mondo della carriera che fa per te. In cui vuoi contribuire a plasmare e sviluppare te stesso.

Ciò che ne fai è ciò che ci definisce.

Vai ai percorsi di carriera

Vai alle posizioni vacanti cibersicurezza