Dataviz attack: rappresentare più variabili in 3D

64 views
Skip to first unread message

Alberto

unread,
Aug 8, 2017, 5:24:58 AM8/8/17
to Spaghetti Open Data
Ciao a tutti, non so se siamo OT, nel caso ditemelo.

Ho un dataset con molte dimensioni da rappresentare, che ha origine in un modello di simulazione. Con qualche semplificazione, posso ridurre il problema a una rappresentazione di più variabili in 3D. Mi servono più variabili perché, al variare di X e Y (variabili che rappresentano le condizioni in cui il modello opera), succedono cose a diverse variabili (che rappresentano gli obiettivi delle scelte simulate nel modello. Spostandosi lungo gli assi X e Y, può succedere che una variabile obiettivo migliori, ma un'altra peggiori. 

Due domande:
  • Avete qualche suggerimento circa software da usare per fare la visualizzazione? Vanno benissimo, anzi meglio, le applicazioni desktop.
  • Avete qualche suggerimento o esempio circa la visualizzazione stessa?
Grazie!

A.

Luca Bonavita

unread,
Aug 8, 2017, 8:16:57 AM8/8/17
to spaghett...@googlegroups.com
Ciao Alberto,

ti consiglierei di provare:

• Crossfilter [1]: prova a cliccare e trascinare il mouse (brushing) sugli istogrammi;
• parallel-coordinates [2]: prova il brushing sugli assi in questo esempio [3].

Sono librerie javascript, non so se possano andare bene ma son un buon punto di partenza per vedere dati multidimensionali in 2D.

Proverei anche Tensorflow [4] (qui [5] un esempio).
Forse Tensorboard [6] ti sarebbe utile ma di nuovo c'è da scrivere codice (python).


Ciao!
Luca

--
http://mindrones.com/


[1] https://github.com/square/crossfilter/
[2] https://syntagmatic.github.io/parallel-coordinates/
[3] https://syntagmatic.github.io/parallel-coordinates/examples/brushing.html
[4] https://www.tensorflow.org/
[5] https://aiexperiments.withgoogle.com/visualizing-high-dimensional-space
[6] https://github.com/tensorflow/tensorflow/blob/r1.2/tensorflow/tensorboard/README.md



--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "Spaghetti Open Data" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a spaghettiopendata+unsubscribe@googlegroups.com.
Visita questo gruppo all'indirizzo https://groups.google.com/group/spaghettiopendata.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/spaghettiopendata/2b809efb-8589-451d-960d-166e2d2b74bd%40googlegroups.com.
Per altre opzioni visita https://groups.google.com/d/optout.


*************************** Disclaimer *****************************
The contents of this e-mail and any file transmitted with it are
confidential and intended solely for the individual or entity to
whom they are addressed. The content may also contain legal,
professional or other privileged information. If you received this
e-mail in error, please destroy it immediately. You should not copy
or use it for any purpose nor disclose its contents to any other
person. The views stated herein do not necessarily represent my
view. Please ensure you have adequate virus protection before you
open or detach any documents from this transmission. I am not
accepting any liability for viruses.
********************* End of Disclaimer ****************************

Alberto

unread,
Aug 9, 2017, 5:17:04 AM8/9/17
to Spaghetti Open Data
Ciao Luca, grazie davvero. Piacere di conoscerti, se già non ci siamo incontrati.

Forse avrei dovuto specificare che sto facendo un progetto di analisi dati, non un sito. Tutte le complicazioni Javascript mele posso anche risparmiare. Alla fine devo produrre un'immagine raster da mettere sul paper, e buonanotte. Con Python me la cavicchio. Con Javascript zero.

Ho pensato a due soluzioni visivamente meno complicate.
  • Soluzione 1:  2 matrici 3 x 3 che rappresentano tutte e 18 le combinazioni dei parametri del modello. Ogni cella della matrice è ulteriormente divisa in 6 "strisce", che rappresentano ciascuna delle 6 variabili obiettivo. Posso semplificare la rappresentazione di ciascuna variabile a tre stati possibili: positiva e statisticamente significativa, non significativa, negativa e statisticamente significativa. Questo si può rappresentare con colori: rosso per il negativo, bianco per il non significativo, verde per il positivo. A questo punto, con un colpo d'occhio si vede quale colore predomina in ciascuna cella, e con un po' di fortuna in tutta la matrice.
  • Soluzione 2: 2 sunburst diagrams. Questi mi permettono di sistemare i miei parametri in una gerarchia, e potrebbe essere una bella soluzione visiva. 
Dataviz catalogue suggerisce (oltre a D3, ma non vale l'investimento di impararsi la sintassi di Javascript apposta) un paio di servizi online. Tu (o altri in lista) avete qualche esperienza o qualche idea? 

Luca Bonavita

unread,
Aug 9, 2017, 6:42:08 AM8/9/17
to spaghett...@googlegroups.com
Ciao Alberto, piacere mio! (non ci siamo mai incontrati dal vivo:)

Cerco con più calma ma se puoi manipolare il dato potresti usare uno scatterlplot:
https://bl.ocks.org/mbostock/3213173
https://bl.ocks.org/mbostock/4063663 (con brushing x tuo uso)

Scarichi il primo "block", passandogli il tuo csv e fai una matrice di 17x17 charts con tutte le combinazioni e poi fai uno screenshot .

Per esempio il primo block si basa su https://gist.github.com/mbostock/3213173, lo scarichi e lo modifichi per usare il tuo csv.

Per vederlo in locale fai partire un server scrivendo, nel terminal:
python -m SimpleHTTPServer
nella directory del gist e vedi la viz in localhost:8000.

Oppure se il dato può essere visto in pubblico posti il tuo gist, che avrà un ID tipo https://gist.github.com/albertocottica/TUOGISTID e lo visualizzi in https://bl.ocks.org/albertocottica/TUOGISTID.

In ogni caso quella viz è sotto GPL 3.0 quindi nel paper penso dovrai citare Mike Bostock e quel block dal quale sei partito.

A presto,
Luca


--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "Spaghetti Open Data" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a spaghettiopendata+unsubscribe@googlegroups.com.
Visita questo gruppo all'indirizzo https://groups.google.com/group/spaghettiopendata.

Per altre opzioni visita https://groups.google.com/d/optout.

Luca Bonavita

unread,
Aug 9, 2017, 8:47:32 AM8/9/17
to spaghett...@googlegroups.com
Ciao Alberto,

2017-08-09 11:17 GMT+02:00 Alberto <alberto...@gmail.com>:
Dataviz catalogue suggerisce (oltre a D3, ma non vale l'investimento di impararsi la sintassi di Javascript apposta) un paio di servizi online. Tu (o altri in lista) avete qualche esperienza o qualche idea? 

Maria Claudia Bodino

unread,
Aug 10, 2017, 9:09:05 AM8/10/17
to Spaghetti Open Data
Ciao Alberto!
Non so se faccia il caso tuo ma in python puoi usare:
Modulo mplot3d


baci e abbracci

Alberto

unread,
Aug 16, 2017, 5:36:22 PM8/16/17
to Spaghetti Open Data
Ciao Luca, Maria Claudia, Napo (che mi ha dato consigli dietro le quinte), e tutti quelli che, anche se non hanno scritto nel thread, comunque hanno dedicato qualche minuto a pensare a dataviz in agosto :-)

Intanto grazie di nuovo per i consigli. Mi sono guardato le cose che avete suggerito. Ma:
  • Alcune cose sono fichissime ma francamente sovradimensionate per le mie esigenze (Tensor Flow). 
  • Altre sono fortemente orientate all'esposizione su web (tipo le cose di Mike Bostock – e ti credo, a lui interessa quello).
  • Ho tentato di montare la visualizzazione con rawgraphs (ottima dritta!), ma avevo un problema: il mio database non è proprio gerarchico, ma semi-gerarchico: avrei bisogno, per ciascuna partizione della gerarchia di ultimo livello, di visualizzare sei valori. Quindi alla fine sunburst non funziona, a meno di non rimontarlo da zero.
Poi c'è un problema più fondamentale. 

I miei valori descrivono statistiche T. Simulo la scelta binaria tra due pratiche alternative di gestione di comunità online. Se invece di A faccio B, cosa succede all'attività totale? La ripartizione dei contributi tra i membri diventa più o meno disuguale? Eccetera. Ho un modello che gira più volte, e a ogni giro mi tira fuori un risultato. La statistica T mi serve per testare l'ipotesi che non cambi niente: la media della variabile X quando faccio B è uguale a quando faccio A. Fantastico, ma c'è un problema: la statistica T visualizzata rischia di essere controintuitiva. Con 46 gradi di libertà (il mio caso), già quando T >  | 2.412 | già la probabilità che le medie siano uguali è minore dell'1%. Quando  T >  | 3.277 | è minore dello 0.1%. Io ho dei T che arrivano a | 150 |. Magari vuole dire che la probabilità è 0.001. Siccome la relazione tra T e probabilità non è lineare, rappresentare linearmente dei T non ha molto senso. 

Quindi ho pensato di fare una cosa molto più semplice, e ridurre i miei T a una variabile discreta con tre stati: 
  1. Negativo e statisticamente significativo ("rosso"): se faccio B invece che A, la mia situazione peggiora rispetto a questa variabile.
  2. Non significativo ("bianco"): è indifferente fare A o B dal punto di vista di questa variabile.
  3. Positivo e statisticamente significativo ("verde"): se faccio B invece che A, la mia situazione migliora rispetto a questa variabile.
Alla fine mi sono caricato i miei csv su Libre Office, li ho riordinati, e ho prodotto cose di questo tipo: 




Questa diventa una mappa di quello che succede alle mie sei variabili (in orizzontale: inc_d, inc_gini etc.) nel passare da A a B a seconda delle due variabili sull'asse orizzontale e quello verticale. Rimane la cosa poco elegante della terza variabile, che ho messo in verticale (newer/more active). In questo esempio i benefici (verdi) sono più grandi sulle righe "newer", e sulla colonna "0.2". La variabile "effort red" è sempre negativa. Vi risparmio la noiosissima spiegazione di cosa sono le variabili, ovviamente.


Domanda: come posso migliorare questa cosa? 


Alberto Manzini

unread,
Sep 4, 2017, 5:52:41 AM9/4/17
to Spaghetti Open Data

 Ciao Alberto (e ciao a tutti, sono nuovo e ne approfitto per salutare il gruppo). La visualizzazione multivariata è sempre un problema perché su una pagina ci stanno (purtroppo) solo 2 dimensioni.
Molto belle le soluzioni proposte da Luca Bonavita, sopratutto Rawgraphs che non conoscevo e ho iniziato a studiarlo.

Le soluzioni che ti propongo sono:
1) fare una matrice 3d con i dati che hai colorato nel tuo ultimo post e poi costruire le proiezioni 2d (variabile 1, variabile 2), (variabile 1, variabile 3), (variabile 2, variabile 3) in modo poi da poter vedere delle dipendenze a partire dalle proiezioni. Non è super elegante perché così avresti 3 grafici

Riorganizzare eventualmente i dati per fare:


3) usare la comodissima libreria Pandas di Python per fare un grafico scatter plot (già suggerito in precedenza, ti suggerisco un altro modo per farlo) http://pandas.pydata.org/pandas-docs/version/0.15.0/visualization.html#scatter-matrix-plot

Laura Camellini

unread,
Sep 5, 2017, 8:42:58 AM9/5/17
to spaghett...@googlegroups.com
Scrissi tempo fa un bell'articolo su come fare visualuzzazioni in blender (puoi generarle anche con python) ma ora non ho neanche il link da passarti perchè il mio sito è in aggiornamento.
Cmq sto mettendo a punto un corso di 80 ore su blender (3d open source su desktop) appena finisco il video su quella lezione lo passo qua in lista... Se cerchi data in blender su gugol qualcosa trovi!

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "Spaghetti Open Data" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a spaghettiopendata+unsubscribe@googlegroups.com.
Visita questo gruppo all'indirizzo https://groups.google.com/group/spaghettiopendata.

Laura Camellini

unread,
Sep 5, 2017, 8:44:59 AM9/5/17
to spaghett...@googlegroups.com
Parola chiave "dataviz in blender"
Reply all
Reply to author
Forward
0 new messages