Problemi di altezza e pixel

Claudio711
Ciao a tutti,
premetto che sono un grafico e con la matematica non ho mai legato bene, spero che qui troverò utili suggerimenti e consigli da voi che indubbiamente ne sapete milto di più.

Il mio problema, quasi sicuramente e matematicamente parlando non è complicato.

Devo fare un grafico che parte da dati statistici che sono i seguenti:

Ho una tabella dove ci sono 550 annunci totali cliccati dagli utenti. La quantità totale per ogni singolo annuncio è 17, 20, 5, 53, 129, 326.

IL PROBLEMA

Devo creare un grafico a barre verticali che possono avere un'anltezza da 1 a 250 pixel massimo. Questo vuol dire che l'annuncio che è stato cliccato 5 volte sarà molto piccolo (il più piccolo), mentre quello che è stato cliccato 326 volte sarà il 100% dell'altezza del grafico, ovvero 250 pixel (il più grande) e naturalmente tutti gli altri in proporzione fra di loro nel mezzo. Cioè devo trasformare i vari dati interi del totale dei singoli annunci, in maniera proporzionata da 1 a 255, in modo che il grafico possa darmi visivamente i dati che mi servono e cioè quali annunci vengono cliccati di più o di meno.

Da tenere presente che:

- non posso usare le percentuali per definire l'altezza di ogni singola barra verticale, ma devo avere un'intero che corrisponde alla giusta proporzione fra il numero di annunci singoli e l'altezza di 255 pixel.

- ho bisogno di una formula/funzione che mi permetta di monitorare sia quantità modeste come suddette che nell'ordine di svariate centinaia di migliaia. Quindi il grafico si deve "muovere proporzionalmente" sia che io abbia 5 e 326 come minimo e massimo che 3000 e 245000.

Probabilmente sarà per voi un giochetto... per me è un pò complicato!

Vi chiedo cortesemente di spiegarmi anche la vostra soluzione, perché trovo profondamente umiliante riscrivere cose a pappagallo senza averle prima capite.

GRAZIE A TUTTI!

Risposte
hamming_burst
Ciao,
penso si possa creare un modello di programmazione matematica senza troppi problemi.
Però devi dire se il problema lo devi poi convertire in un qualche linguaggio o programma in particolare.

Una cosa non mi è chiara:
"Claudio71":
Ho una tabella dove ci sono 550 annunci totali cliccati dagli utenti. La quantità totale per ogni singolo annuncio è 17, 20, 5, 53, 129, 326.

ci son 550 annunci, però dici che per ogni annuncio c'è quella quantità. Deduco da quei 6 dati, che sono più annunci hanno lo stesso numero di click perciò sono dei rappresentanti di gruppo quelle quantità. Giusto?
Se sì, esiste un ordine sugli annunci che raggruppi quelli con totale 17, 20,...? Cioè hai una funzione che inverta la quantità, dato i click totali si avrà l'annuncio corrispondente.

Claudio711
Ciao hamming, grazie per avermi risposto.
Ci sono più annunci. 550 sono i click totali. suddivisi in 6 annunci con queste quantità di click 17, 20, 5, 53, 129, 326.

Quindi il mio, forse banale dilemma è: in una scala da 1 a 255 (altezza del grafico a barre in pixel) come devo calcolare l'altezza della barra del singolo annuncio in base al numero di click che ha ricevuto in modo che la barre verticali nel grafico siano rappresentate dalla più piccola alla più grande in maniera proporzionale ai click ricevuti e a prescindere dalla quantità?

Perché in questo caso il più piccolo è 5 e il più grande è 326. Ma potrebbero ricevere centinaia di click ed essere per esempio 2550 il piccolo e 120000 il grande. Il grafico deve funzionare comunque.

Rimango in attesa! Grazie! ;)

hamming_burst
Ah messo così è diversa la faccenda ed anzi è più semplice.

Sia $x_1,...,x_n$ i click per ogni annuncio, con $n$ numero di annunci. Siano $y_1,...y_n$ i valori di scala che cerchi, allora il problema è trovare la massima approssimazione proporzionale al numero di pixel massimi a disposizione ($y_n$) e il valore dei click ($x_i$).

in parole povere applichi una semplice proporzione elementare con i dati di massimo che possiedi:

$255 : 326 = x : 17 ...$
$x = (255*17)/326$

caso generale:

$max: \sum_{i=1}^n y_i$
vincoli:
$y_n = x_n$
$y_{n-1} = (x_{n-1}/x_n)*y_n$
$...$
$...$
$y_1 = (x_1/x_n)*y_n$
$y_i >= 1\ |\ i=1....n$

Basta che i dati $y_i$ li converti in interi dopo il calcolo, cioè prendi la parte intera con funzione ceil/floor.

mi pare il minimo tra il numero dei vari click non dovrebbe servire, dato che rilassiamo i dati secondo i valori max. Se devi avere implicato anche il minimo basta dirlo che modifichiamo :-)

PS: per curiosità che tipo di grafico sei? ti occupo di grafica vettoriale, pubblicitaria, 3D..

Claudio711
Ciao hamming,
non sono sicuro di aver capito! :(

Dato che l'argomento sta diventando per me di primaria importanza, ti chiedo se possiamo trovarci 5 minuti su skype e chiarire definitivamente la cosa.

Mi trovi come pistidda (ricerca: claudio pistidda genova) oppure dammi il tuo nick che ti cerco io.

Grazie 1000!!!!

hamming_burst
Ciao,
non ho un account skype, mi dispiace.

Ma la faccenda è abbastanza semplice, lasciamo ogni formalismo, e ragioniamo solo sui dati.

Te dici nel primo post:
- non posso usare le percentuali per definire l'altezza di ogni singola barra verticale, ma devo avere un'intero che corrisponde alla giusta proporzione fra il numero di annunci singoli e l'altezza di 255 pixel.

ma ogni calcolo tu faccia, un intero lo puoi ottenere solo se hai a disposizione una funzione cha faccia un arrotondamento alla parte intera.

Te la faccio più facile che posso: prendi i click massimi e i pixel, dividi perciò: $255/326 = 0,782208589$ questo risultato moltiplicalo per ogni numero dei click. Il risultato poi lo dai in pasto a qualche funzione di arrotondamento (se non mi dici che programma utilizzi non posso di altro) alla fine otterrai il numero di pixel.

quello che ho proposto io è sempre una percentuale, invece che in base $100$ è base $255/326$, trovata con una semplice proporzione imparate alle medie.

$255 : 326 = x : 17$ (si legge: $255$ pixel sta a $326$ click come $x$ pixel stanno a $17$ click).

poi basta che moltiplichi e dividi: $x=(255*17)/326$.

Così hai due modi per calcolare il tuo valore, se poi intendi altro devi dirlo.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.