Newsgroup: it.scienza.fisica
Titolo: graficare in 2D dati 1D

Ho un problema di rappresentazione di dati in un grafico
 
vorrei disegnare un grafico bidimensionale di 
"distribuzione" valore (ascisse) / frequenze (ordinate) ... 
ma ho un problema : la mia distribuzione di dati sorgente 
non solo non è CONTINUA, ma addirittura è una distribuzione 
tale per cui ogni singolo valore si manifesta una sola volta.
 
Sostanzialmente la densità di probabilità di un dato valore 
non si può osservare dalla sua frequenza (che è 1) ma bensì 
dalla densità dei punti vicini sul medesimo asse.
 
Ho quindi dati tipo questi
 
*   *  *    *   *  * * *** * **  *   * *    *    *      * *
10001001000010001001010111010110010001010000100001000000101
 
come renderlo bidimensionale ed analogo ad un grafico valore 
/ frequenza ?
 
 
non so se mi sono spiegato bene
 
spero che mi abbiate capito lo stesso :\
 
 
 
-- 
1) Resistere, resistere, resistere.
2) Se tutti pagano le tasse, le tasse le pagano tutti
Soviet_Mario - (aka Gatto_Vizzato)

 spero che mi abbiate capito lo stesso :\
 
Suddividere l'intervallo dei valori in N sottointervalli e contare le
occorenze in ciascun sottointervallo, tipo istogramma, non va bene?
 
-- 
IN EURO NULLA SALUS
 
'Noi non riesamineremo la manovra, ma il contesto nel quale ci poniamo' 

 un grafico valore / frequenza ?
 
Probabilmente non ho capito io perché mi pare un problema
semplice se puoi disporre di excel; li metti in celle una
per riga e poi "inserisci grafico", la prima opzione,
grafico a barre. Il programma ha quell'opzione esattamente 
per questo caso...
 
http://i63.tinypic.com/2vn5jjc.jpg
 
 
Sono sicuro che anche libre office possa farlo.
 
Se invece pensi a trasformarlo in una effettiva
distribuzione mi pare sia un problema di "cluster
analysis" e ho dimenticato praticamente tutto, ricordo che
esiste la disciplina e basta :/
 
 
-- 
"La teoria è sapere come funzionano le cose e
non sapere come farle funzionare; la pratica è
sapere come far funzionare la cose senza sapere come
funzionano; il nostro scopo è unire la pratica
alla teoria per riuscire a non far funzionare
le cose senza capire come abbiamo fatto"

 come renderlo bidimensionale ed analogo ad un grafico valore / frequenza ?
 
Siano dati sul tuo asse i punti di ascisse 0, x1, x2, x3, x4, ...
(sperando che la distanza di x1 dall'origine non sia arbitraria).
 
Riferiamoci al punto P(x2, 0) come esempio.
 
Sopra esso fissi il punto di coordinate Q(x2, k/(x2-x1) + k/(x3-x2))
con k a piacimento, e quindi tracci il segmento verticale P-Q
 
Facendo così per tutti i punti, hai realizzato un grafico a lineette
che dovrebbe soddisfare la tua richiesta.
 
In alternativa, fissi i punti:
   P'((x2-x1)/2, 0)
   P"((x3-x2)/2, 0)
   Q'((x2-x1)/2, k/(x2-x1) + k/(x3-x2))
   Q"((x3-x2)/2, k/(x2-x1) + k/(x3-x2))
dopodiché tracci il rettangolo P'Q'Q"P"
 
Così facendo per tutti i tuoi punti, hai realizzato un istogramma.
 
Bye,
 
   *GB*

 
 
 
 
Devi fare il cosiddetto "binning". Suddividi l'intervallo in intervalli piu' piccoli, conti il numero degli uno all'interno di ogni intervallo, assegni il valore ottenuto alla coordinata del centro dell'intervallo.
 
Per fare venire il grafico bene, devi aggiustare l'ampiezza della suddivisione; ci devono essere abbastanza "uni" dentor ogni sottointervallo.


ci avevo pensato, ma ho un insieme a bassa risoluzione e ho 
paura che (anche se non saprei stimare quanto) introdurrei 
un notevole errore di "bordo" (ossia secondo di come 
delimito i gradini, includere o escludere un valore dentro 
potrebbe distorcermi il grafico).
 
Inoltre non saprei nemmeno se sarebbe utile, dannoso o 
neutro, cercare di "ponderare" il conteggio in funzione del 
valore medesimo e non della sola frequenza.
Boh ... non saprei


 (sperando che la distanza di x1 dall'origine non sia arbitraria).
 
La nota che ho scritto tra parentesi non è chiara. Mi spiego meglio.
 
Che valore dare all'ordinata dell'ultimo punto rilevato? Se il dominio 
dei valori non è limitato superiormente, allora il successivo all'ultimo 
è a distanza infinita e quindi k/(x_oo-x_u) vale zero; pertanto 
l'ordinata dell'ultimo punto sarà y_u = k/(x_u-x_(u-1))
 
Ma che valore dare all'ordinata del primo punto? Dipende dal dominio dei 
valori: se è una retta o una semiretta. Ad es., se quei valori sono 
temperature in kelvin, allora il limite inferiore è lo zero assoluto, 
per cui il punto di ascissa x1 avrà ordinata y1 = k/x1 + k/(x2-x1)
 
Se invece non c'è un limite inferiore, l'ordinata sarà y1 = k/(x2-x1)
 
Bye,
 
   *GB*

 occorenze in ciascun sottointervallo, tipo istogramma, non va bene?
 
Per me va bene, ma perché fare tanti sottointervalli prefissati quando 
si possono misurare le distanze tra un valore e l'altro, e così rendere 
tanto più alto il rettangolo quanto minore è la distanza? Specialmente 
se tali distanze non sono arbitrarie (ad es. se quei punti sono valori 
in una scala di temperatura).
 
Bye,
 
   *GB*


esatto, hai centrato il punto critico. Ho dati rarefatti e 
probabilmente non scegliendo bene la grana potrei avere 
tanti posti vuoti e cascare in punti differenti secondo i 
gradoni



dunque, ho una molto vaga idea che ci vorrebbe una sorta di 
concetto della "finestra mobile", ossia non una suddivisione 
in gradoni fissi, ma una finestra che scorre e conta cosa ci 
sta dentro (come le medie mobili finaziarie che traslano 
sull'asse tempo e si aggiornano).
Ma di fatto operativamente non ho ispirazioni per come farlo.
 
Ripeto : non ho dati abbastanza numerosi da sentirmi sicuro 
che la scelta della granularità (e perfino dove cascano i 
confini tra) a gradoni sia innocua ...


    *GB*
 
 



Per esempio sviiluppando il suggerimento di Archaeopteryx di fare le cose con Excel.
 
Supponi di avere posto i tuoi uni e zeri nella colonna D, da D10 a D68.
Nella colonna C, da C10 a C68 metti i numeri da 1 a 59.
 
Nella casella G10 metti l'ampiezza dell'intervallo di binning. Per esempio 10.
 
Nella casella G11 metti un altro numero che ti serve per inidcare l'intervallo su cui fai una media mobile alla fine.
 
Nella colonna I metti la formula 
 
=COUNTIF(OFFSET(D10;0;0;$G$10;1);1)
 
a partire dalla casella I10 fino alla I68 (copiando in modo da far variare il D10 ...)
 
Nella colonna K (da K10 a K68, con l'I10 "relativo") metti
 
=AVERAGE(OFFSET(I10;-INT($G$11/2);0;$G$11;1))
 
Fai un grafico della colonna K in funz. della colonna C
 
Vedi come il grafico varia cambiando G10 e G11
 
 
 
 
Probabilmente c'e' un po' di ridondanza nei calcoli ... ma dovrebbero darti un risultato utilizzabile. Occhio che se trattare bene primi e ultimi dati e' critico potrebbero esserci degli aggiustamenti da fare, ma dall'occhiata che gli ho dato mi sembra che Excel escluda dalla media automaticamente le celle in cui non ci sono valori.
 
 

 riesca a fare di meglio.
 
Cmq io davo per scontato che il tuo esempio grafico:
 
   *   *  *    *   *  * * *** * **  *   * *    *    *      * *
 
corrispondesse a valori univoci su una scala lineare, tipo:
 
   1,5,8,13,17,20,22,24,25,26,28,30,31,34,38,40,45,50,57,59
 
Ma per poter proporre una soluzione più adeguata al tuo quesito, sarebbe 
opportuno sapere che cos'è esattamente che stai cercando di graficare.
 
Bye,
 
   *GB*

 
 
 
Secondo me il problema non c'e'. Infatti il calcolo indicato da GB da' sisultati simili a quelli del metodo del binning (che da' una densita') se poi fai una media mobile. La media mobile con il metodo di GB la devi fare, perche' senno' il "rumore" non diminuisce all'aumentare del numero dei dati.
 
 
Per i primi e ultimi dati riduci la larghezza dell'intervallo su cui fai la media. La media statistica non varia ma i risultati saranno piu' "rumorosi".

   1,5,8,13,17,20,22,24,25,26,28,30,31,34,38,40,45,50,57,59
 
Ecco il grafico Excel relativo a quei valori (riportati in grassetto su 
sfondo giallino in riga 17):
 
http://i64.tinypic.com/eu2cu0.png
 
 
Per semplicità ho posto k=1 (se per caso il grafico ti sembra troppo 
alto, ti conviene usare k=1/2). I valori sono calcolati come descritto 
nella legenda in basso a destra (con k=1 quindi non esplicitato). 
Ricapitolo quelle formule a parole:
 
Come pre-primo valore di ascissa ho messo zero. Come post-ultimo valore 
ho messo la somma dell'ultimo (x_N) e della massima differenza tra le 
ascisse di due punti successivi (quella tra 50 e 57, evidenziata dal 
bordo a trattini azzurri in mezzo ad essi).
 
Le ordinate preliminari (y) in riga 18 sono calcolate come differenza 
tra le ascisse del punto a destra e di quello a sinistra di ogni punto 
dato. In verde e rosso rispettivamente ho evidenziato i valori massimo e 
minimo di y.
 
L'ordinata effettiva (y') è calcolata per ciascun punto come la somma di 
tali ordinate preliminari massima e minima a cui viene detratta 
l'ordinata preliminare del punto dato. Il grafico a barre è basato su 
questi valori di y' che appaiono in riga 16.
 
Bye,
 
   *GB*

 
 
va bene ... grazie a tutti.
Probabilmente tenterò di applicare l'operatore :
CONST - DISTANZE_punti adiacenti
 
col segno meno come "analogo" lineare della proporzionalità 
inversa, e vedrò come funge ...


 -- 
 
Cosi' se sei in regioni molto dense tutte le densita' ti risultano quasi uguali.