New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Invertitore di tabelle pivot #34

Closed
jenkin opened this Issue Feb 26, 2017 · 20 comments

Comments

Projects
None yet
4 participants
@jenkin
Contributor

jenkin commented Feb 26, 2017

Il problema è semplice: una tabella ben fatta (nel senso della teoria relazionale) separa la struttura dal contenuto, per cui non ci sono valori delle variabili nelle intestazioni delle colonne.

Id	Anno	Numero
a	2016	1
b	2016	2
c	2016	3
a	2017	3
b	2017	2
c	2017	1

In un uso tipico della tabella pivot, però, la tabella originale viene girata in modo da esplicitare l'andamento temporale (in questo caso la funzione di aggregazione è di fatto l'identità).

	2016	2017
a	1	3
b	2	2
c	3	1

Molto spesso le tabelle che si trovano in report e nei portali open data hanno proprio questa forma. Sono human-readable, ma richiedono una trasformazione per essere realmente machine-readable: una sorta di tabella pivot inversa.

Curiosamente questa funzione non è tra quelle bell'e pronte dei fogli di calcolo, cercate per esempio "reverse pivot table" e scoprirete che si parla di una funzione di una vecchia versione di excel non più funzionante. Anche per questo negli ultimi tempi diverse persone mi hanno posto il problema e non sono mai riuscito a fornire risposte convincenti e soprattutto alla portata di non programmatori.

Da un punto di vista algoritmico, l'operazione è banalissima. L'ho implementata in pochi minuti usando UnderscoreJS nella pagina strumenti/pivot-reverser.html nella branch feature/pivot-reverser.

Per metterla a disposizione del mondo (ovvero farne il merge sulla master) è necessario un po' di lavoro sulla pagina per renderla più accattivante e utile da un punto di vista di UX (niente di che, ma almeno sfruttare bootstrap). Magari permettere all'utente di scegliere il separatore di campo per i dati in ingresso e in uscita (ora di default c'è il TAB, ma si può aggiungere almeno la virgola e il punto e virgola). E poi naturalmente fare qualche test.

@aborruso

This comment has been minimized.

Show comment
Hide comment
@aborruso

aborruso Feb 26, 2017

Contributor

@jenkin questa spaccherà :)

Enri ed io abbiamo scritto due post (qui e qui) ispirati a questa esigenza che è veramente forte.

Con un'interfaccia web cambia tutto. Complimenti!

Contributor

aborruso commented Feb 26, 2017

@jenkin questa spaccherà :)

Enri ed io abbiamo scritto due post (qui e qui) ispirati a questa esigenza che è veramente forte.

Con un'interfaccia web cambia tutto. Complimenti!

@jenkin

This comment has been minimized.

Show comment
Hide comment
@jenkin

jenkin Feb 26, 2017

Contributor

Ho invitato Enrico a collaborare... :) Io farei una piccola call to action in ML, finire di sviluppare questo tool è un task molto semplice, ma anche molto istruttivo per chi è alle prime armi e vuole sporcarsi le mani per imparare.

Contributor

jenkin commented Feb 26, 2017

Ho invitato Enrico a collaborare... :) Io farei una piccola call to action in ML, finire di sviluppare questo tool è un task molto semplice, ma anche molto istruttivo per chi è alle prime armi e vuole sporcarsi le mani per imparare.

@ebergam

This comment has been minimized.

Show comment
Hide comment
@ebergam

ebergam Feb 26, 2017

Collaborator

@aborruso Io e @jenkin Ne abbiamo parlato circa 18 ore fa a Termini, e l'ha già fatto.. Che spettacolo, grande Ale :)

Collaborator

ebergam commented Feb 26, 2017

@aborruso Io e @jenkin Ne abbiamo parlato circa 18 ore fa a Termini, e l'ha già fatto.. Che spettacolo, grande Ale :)

@ebergam

This comment has been minimized.

Show comment
Hide comment
@ebergam

ebergam Feb 26, 2017

Collaborator

@jenkin UX messa a posto, un'altra idea sarebbe di riuscire a farlo andare in entrambi i versi, cioè sia così che diciamo nel "verso" mio e @aborruso

Collaborator

ebergam commented Feb 26, 2017

@jenkin UX messa a posto, un'altra idea sarebbe di riuscire a farlo andare in entrambi i versi, cioè sia così che diciamo nel "verso" mio e @aborruso

@jenkin

This comment has been minimized.

Show comment
Hide comment
@jenkin

jenkin Feb 26, 2017

Contributor

@ebergam messa a posto dove?!? :) Il vostro verso è quello delle tabelle pivot standard, tranne il fatto che di solito non c'è la funzione di aggregazione identità tra le scelte... sarebbe molto semplice implementarla, ma richiede più input da parte dell'utente: oltre alla tabella, anche la variabile da mettere in riga, quella da mettere in colonna e quella da mettere tra i valori.

Contributor

jenkin commented Feb 26, 2017

@ebergam messa a posto dove?!? :) Il vostro verso è quello delle tabelle pivot standard, tranne il fatto che di solito non c'è la funzione di aggregazione identità tra le scelte... sarebbe molto semplice implementarla, ma richiede più input da parte dell'utente: oltre alla tabella, anche la variabile da mettere in riga, quella da mettere in colonna e quella da mettere tra i valori.

@ebergam

This comment has been minimized.

Show comment
Hide comment
@ebergam

ebergam Feb 26, 2017

Collaborator

@jenkin in locale, come la committo su ondata? Ne ho le permission? L'ho scaricata e modificata in locale, se puoi mettimi i comandi giusti su come pusharla qui, che stavo cercando come ma non voglio far cazzate :)

Collaborator

ebergam commented Feb 26, 2017

@jenkin in locale, come la committo su ondata? Ne ho le permission? L'ho scaricata e modificata in locale, se puoi mettimi i comandi giusti su come pusharla qui, che stavo cercando come ma non voglio far cazzate :)

@ebergam

This comment has been minimized.

Show comment
Hide comment
@ebergam

ebergam Feb 26, 2017

Collaborator

@jenkin fatto da browser alla fine, prossima volta faccio fork e pull.. :)

Collaborator

ebergam commented Feb 26, 2017

@jenkin fatto da browser alla fine, prossima volta faccio fork e pull.. :)

@jenkin

This comment has been minimized.

Show comment
Hide comment
@jenkin

jenkin Feb 26, 2017

Contributor

Clona il repo in locale, fai checkout sulla branch feature/[nome], lavora, poi commit e push. E poi avvisi di aver fatto.

Contributor

jenkin commented Feb 26, 2017

Clona il repo in locale, fai checkout sulla branch feature/[nome], lavora, poi commit e push. E poi avvisi di aver fatto.

@jenkin

This comment has been minimized.

Show comment
Hide comment
@jenkin

jenkin Feb 26, 2017

Contributor

Vista, ottimo direi... :) Ho sistemato la struttura dell'html, ci sono alcuni problemi sulle librerie js che vengono caricate in chiusura del body, non le elimino perché temo che facciano funzionare il footer...

Contributor

jenkin commented Feb 26, 2017

Vista, ottimo direi... :) Ho sistemato la struttura dell'html, ci sono alcuni problemi sulle librerie js che vengono caricate in chiusura del body, non le elimino perché temo che facciano funzionare il footer...

@ebergam

This comment has been minimized.

Show comment
Hide comment
@ebergam

ebergam Feb 26, 2017

Collaborator

@jenkin su questo bisogna chiedere a @nelsonmau, header e footer li ho presi dalla pagina "risorse"

Collaborator

ebergam commented Feb 26, 2017

@jenkin su questo bisogna chiedere a @nelsonmau, header e footer li ho presi dalla pagina "risorse"

@nelsonmau

This comment has been minimized.

Show comment
Hide comment
@nelsonmau

nelsonmau Feb 26, 2017

Contributor

Grazie @jenkin ed @ebergam, ma questo è il repo del sito non degli strumenti.
Quindi please fate un altro repo con il tool togliendolo da qui, altrimenti quando cambiamo il sito, finisce anche questo in soffitta.
Grazie cari

Contributor

nelsonmau commented Feb 26, 2017

Grazie @jenkin ed @ebergam, ma questo è il repo del sito non degli strumenti.
Quindi please fate un altro repo con il tool togliendolo da qui, altrimenti quando cambiamo il sito, finisce anche questo in soffitta.
Grazie cari

@nelsonmau

This comment has been minimized.

Show comment
Hide comment
@nelsonmau

nelsonmau Feb 26, 2017

Contributor

@jenkin btw notevolissimo il commento "l'ho implementata in pochi minuti", potremmo proporre comando --jenkin a git, prevedendo anche che il software fa un caffè :P

Contributor

nelsonmau commented Feb 26, 2017

@jenkin btw notevolissimo il commento "l'ho implementata in pochi minuti", potremmo proporre comando --jenkin a git, prevedendo anche che il software fa un caffè :P

@jenkin

This comment has been minimized.

Show comment
Hide comment
@jenkin

jenkin Feb 26, 2017

Contributor

@aborruso , secondo te è meglio fare un repo per ognuno di questi mini tool o farne uno solo da esporre sotto tools.ondata.it/[nome strumento] ?

Contributor

jenkin commented Feb 26, 2017

@aborruso , secondo te è meglio fare un repo per ognuno di questi mini tool o farne uno solo da esporre sotto tools.ondata.it/[nome strumento] ?

@aborruso

This comment has been minimized.

Show comment
Hide comment
@aborruso

aborruso Feb 26, 2017

Contributor

@jenkin ne farei soltanto uno da esporre sotto tools.ondata.it/[nome strumento]

Contributor

aborruso commented Feb 26, 2017

@jenkin ne farei soltanto uno da esporre sotto tools.ondata.it/[nome strumento]

@nelsonmau

This comment has been minimized.

Show comment
Hide comment
@nelsonmau

nelsonmau Feb 27, 2017

Contributor

io avrei delle issue da segnare, che intanto appunto segno qui

  • aggiungere pulsante "Reverse" che esegue l'operazione
  • aggiungere pulsante "scarica il risultato come csv"
  • aggiungere dataset di esempio (almeno uno, con spiegazione)
  • aggiungere spiegazione su come funziona
  • scegliere layout e implementarlo
  • ci vorrebbe anche screencast video per mostrare un utilizzo...
Contributor

nelsonmau commented Feb 27, 2017

io avrei delle issue da segnare, che intanto appunto segno qui

  • aggiungere pulsante "Reverse" che esegue l'operazione
  • aggiungere pulsante "scarica il risultato come csv"
  • aggiungere dataset di esempio (almeno uno, con spiegazione)
  • aggiungere spiegazione su come funziona
  • scegliere layout e implementarlo
  • ci vorrebbe anche screencast video per mostrare un utilizzo...
@jenkin

This comment has been minimized.

Show comment
Hide comment
@jenkin

jenkin Feb 27, 2017

Contributor

Rispondo a @nelsonmau :

  • no, l'operazione che dici tu è la tabella pivot, che richiede altri input da parte dell'utente: variabile di riga, di colonna, di valore, funzione di aggregazione, ecc. L'operazione che dici tu risponde a un'altra esigenza, se ci interessa farei proprio un altro tool, simile, ma diverso;
  • ni, nel senso che allora ci vorrebbe anche un "carica csv", mentre per ora è pensato per tabella piccole per cui fai copia / incolla (da cui la scelta del TAB, che è il delimitatore naturale dei copia / incolla sui fogli di calcolo);
  • c'è già nel placeholder, all'interno della textarea in grigio;
  • da migliorare il testo di @ebergam;
  • quello di @ebergam non è già sufficiente?
  • chiederemo a qualcuno di farlo una volta on-line

Personalmente farei giusto qualche test e andrei subito on-line con questo che c'è...

Contributor

jenkin commented Feb 27, 2017

Rispondo a @nelsonmau :

  • no, l'operazione che dici tu è la tabella pivot, che richiede altri input da parte dell'utente: variabile di riga, di colonna, di valore, funzione di aggregazione, ecc. L'operazione che dici tu risponde a un'altra esigenza, se ci interessa farei proprio un altro tool, simile, ma diverso;
  • ni, nel senso che allora ci vorrebbe anche un "carica csv", mentre per ora è pensato per tabella piccole per cui fai copia / incolla (da cui la scelta del TAB, che è il delimitatore naturale dei copia / incolla sui fogli di calcolo);
  • c'è già nel placeholder, all'interno della textarea in grigio;
  • da migliorare il testo di @ebergam;
  • quello di @ebergam non è già sufficiente?
  • chiederemo a qualcuno di farlo una volta on-line

Personalmente farei giusto qualche test e andrei subito on-line con questo che c'è...

@aborruso

This comment has been minimized.

Show comment
Hide comment
@aborruso

aborruso Feb 27, 2017

Contributor
Contributor

aborruso commented Feb 27, 2017

@ebergam

This comment has been minimized.

Show comment
Hide comment
@ebergam

ebergam Feb 27, 2017

Collaborator

@jenkin, assolutamente, il testo sotto l'ho proprio accennato, è da migliorare, ma si può fare in un secondo momento. Su tools.ondata.it/[nome strumento] anche per me è l'idea migliore.

Collaborator

ebergam commented Feb 27, 2017

@jenkin, assolutamente, il testo sotto l'ho proprio accennato, è da migliorare, ma si può fare in un secondo momento. Su tools.ondata.it/[nome strumento] anche per me è l'idea migliore.

@nelsonmau

This comment has been minimized.

Show comment
Hide comment
@nelsonmau

nelsonmau Feb 27, 2017

Contributor

io non agree ma la democrazia regna.

please però, su un altro repo

chiudo la issue :)

Contributor

nelsonmau commented Feb 27, 2017

io non agree ma la democrazia regna.

please però, su un altro repo

chiudo la issue :)

@nelsonmau nelsonmau closed this Feb 27, 2017

@jenkin

This comment has been minimized.

Show comment
Hide comment
Contributor

jenkin commented Feb 28, 2017

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment