Closed dennisangemi closed 2 years ago
La mia proposta: semplificare ancora, usando un approccio wide per il data entry.
I fogli glossary
, relic
, items
, status
e i-list
potrebbero divenire un unico foglio, con 3 colonne per ogni lista: endorsement, description e source_title, oltre alle colonne necessarie per subject (category, subject_slug, ...).
Esempio:
subject_id | subject | subject_slug | category | category_id | pd_endorsement | pd_source | pd_description | avs_endorsement | avs_source | avs_description | ... |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | Alloggi popolari | alloggi-popolari | Protezione sociale | 10 | green | Programma elettorale PD | bla bla | green | Programma elettorale AVS | bla bla |
I subject possono venire aggiunti a mano in questo foglio, con la certezza che siano presenti per tutte le liste e con le stesse categorie. Da questo foglio è possibile in seguito ottenere la versione long.
Ciao @vi-enne, atteso che odio versione wide della qualsiasi cosa (preferisco tidy data), la tua proposta mi sembra molto interessante.
Vedo però più di un problema per @angelogulina che dovrebbe riscrivere da 0 il codice per popolare la board a partire dal nuovo foglio items.
Una domanda per @vi-enne
Da questo foglio è possibile in seguito ottenere la versione long
come? (tecnicamente)
dovrebbe farlo Angelo?
Per quanto riguarda pubblicazione in formato open: Non possiamo pubblicare un csv così (almeno io mi rifiuto hahah)
Nonostante tutto però la tua proposta mi piace. Ci rifletto su ma sentirei @angelogulina
P.s. IMHO la procedura da seguire per data entry la sceglie:
La mia è solo un"opinione
@vi-enne come vorresti trattare i subject che appartengono a più categorie? Duplicando le righe?
L'approccio wide non mi convince a pieno, ma personalmente non cambia moltissimo sulla struttura. Cercherei solo di semplificare l'inserimento di un nuovo item, senza dover fare copia incolla in tutti i fogli.
Cercherei solo di semplificare l'inserimento di un nuovo item, senza dover fare copia incolla in tutti i fogli.
Ciao @LorenzoRuff questo problema non dovrebbe presentarsi più perché ho inserito delle formule che popolano automaticamente la colonna subject nei fogli i-list
Cercherei solo di semplificare l'inserimento di un nuovo item, senza dover fare copia incolla in tutti i fogli.
Ciao @LorenzoRuff questo problema non dovrebbe presentarsi più perché ho inserito delle formule che popolano automaticamente la colonna subject nei fogli
i-list
Dovrebbe funzionare allora (bisogna rifare le i-list già presenti?).
Cosa succede a i-list
se rimuovo un subject da glossary
?
Sto pensando alla pulizia e al consolidamento dei subjects.
(bisogna rifare le i-list già presenti?)
Non credo @vi-enne, sarebbe da verificare se la formula per popolare i-lis
sia presente effettivamente in tutti i fogli i-list
. Attualmente purtroppo non posso guardare
Cosa succede a
i-list
se rimuovo un subject daglossary
?
Quanto a questo, purtroppo succede un bel casotto. Se si rimuove un subject dal glossary, esso sarà rimosso anche da i-list
però verranno alterate le relazioni tra subject e endorsement. Questo è senza dubbio problematico ma se prima si selezionano i subject in glossary, e poi NON si toccano più (ok rinominare, non ok eliminare, non ok spostare) allora sarà possibile compilare i-list
senza problemi
Sto pensando alla pulizia e al consolidamento dei subjects.
@vi-enne farlo adesso mi sembra ok (grazie)
Farlo in seguito mi sembra quasi impossibile
Il vantaggio del metodo wide sarebbe (anche) quello: per eliminare un subject basterebbe eliminare tutta la riga corrispondente. Non so, con il sistema attuale sarebbe il caso di consolidare/eliminare i subject che abbiamo adesso con priorità, altrimenti rischiamo di complicare le cose in seguito.
Grazie @vi-enne @LorenzoRuff e @dennisangemi – per quanto mi riguarda (parliamo solo lato codice), dovrei lavorare sia che si adotta l'approccio relic
che quello wide.
Dal JSON alla UI ci sono 3 livelli. In entrambi i casi, le modifiche andrebbero applicate solo ad uno con basso rischio (siamo così bravi che abbiamo pure due unit test 😂).
Taggatemi pure quando avete preso una decisione, così buttiamo giù un piano per assicurarci che le modifiche apportate ai data non rompano il sito.
Grazie @angelogulina, io lascerei decidere @vi-enne e @LorenzoRuff
L'approccio wide faciliterebbe il lavoro di data entry quindi se per voi è ok, per me è ok. L'unica cosa da tenere in considerazine è che bisogna effettuare un reshaping (wide to long) per pubblicare un csv long.
I fogli glossary, relic, items, status e i-list potrebbero divenire un unico foglio, con 3 colonne per ogni lista
A questo punto, se siamo indirizzati verso approccio wide, seguirei la struttura di proposta da @vi-enne ma
category
da items
;relic
per individuare le relazioni tra subject e categorie (gestendo così gli items che appartengono a più categorie);url
(o altra denominazione) per inserire link esterni che fungano da approfondimento per il subject (funzione dell'attuale foglio glossary
)Oppure puliamo i subject adesso e li inseriamo con cura dopo, in modo da non cancellare mai.
Oppure puliamo i subject adesso e li inseriamo con cura dopo, in modo da non cancellare mai.
Per me sono sono soluzioni valide entrambe. La tua (wide) sarebbe assolutamente più flessibile nella gestione dei subject (considererei comunque di mantenere relic).
@vi-enne se in mente hai già idea di come fare reshaping (magari con action in R) seguirei la tua proposta. Ad angelo potremmo consegnare un csv/json che abbia la stessa struttura dell'attuale foglio (items)
Io domani potrei provare a giocare con R ma qui tittə sappiamo che non ti batte nessuno ;)
P.s. dubito che si possa fare reshaping in google sheets. Tutte le volte che tento mi metto le mani ai capelli e mi sembra folle il silenzio di Google. In passato sono riuscito a concatenate qualche array ma erano situazioni più facili di questa
@dennisangemi @vi-enne provo a esprimermi in maniera più chiara.
Ad angelo potremmo consegnare un csv/json che abbia la stessa struttura dell'attuale foglio (items)
Suggerisco quindi di scartare l'idea del codice in R. A meno che il lavoro in R non sia davvero veloce e banale da mantenere (non ho le competenze per valutarlo), meglio che ognuno dedichi tempo al proprio dominio (almeno in questo momento).
Considerando le opzioni che proponete, non vedo nessuna difficoltà da parte mia a riscrivere un po' di codice per fare mapping del JSON. Aggiungere un altro livello (con R) avrebbe invece queste conseguenze:
Grazie 🙇
Chiaro @angelogulina, ma riflettevo anche sul fatto che il csv long servirebbe per la pubblicazione in formato open. Dal momento che non vedo come ottenerlo in google sheet, mi sa che siamo quasi obbligati a passare da R. A meno che qualcuno abbia un'altra idea
@dennisangemi, grazie per il chiarimento.
Teniamo comunque separate le cose:
json
comunque)Certo @angelogulina, ma con R probabilmente prendiamo due piccioni con una fava:
@vi-enne ho provato a buttar giù qualcosa in R
input (df): subject_id | subject | subject_slug | url | pd_endorsement | pd_source | pd_description | avs_endorsement | avs_source | avs_description |
---|---|---|---|---|---|---|---|---|---|
1 | Alloggi popolari | alloggi-popolari | https://it.wikipedia.org/wiki/Istituto_Autonomo_Case_Popolari | green | Programma elettorale PD | bla bla | green | Programma elettorale AVS | bla bla |
2 | blabla | blabla | https://it.wikipedia.org/wiki/Bla_Bla_Bla | red | Programma elettorale PD | bla bla | green | Programma elettorale AVS | bla bla |
input (relic): subject | category |
---|---|
Alloggi popolari | persone |
Alloggi popolari | cura |
blabla | ciao |
blabla | persone |
code:
df %>%
rename(item_source.pd = pd_source,
item_source.avs = avs_source,
item_description.pd = pd_description,
item_description.avs = avs_description,
item_endorsement.pd = pd_endorsement,
item_endorsement.avs = avs_endorsement) %>%
pivot_longer(cols = starts_with("item"),
names_to = c(".value", "field"), names_sep = "_") %>%
separate(field, into = c("type", "list"), sep = "\\.") %>%
spread(type,item) %>%
left_join(relic,., by = "subject")
output: subject | category | subject_id | subject_slug | url | list | description | endorsement | source |
---|---|---|---|---|---|---|---|---|
Alloggi popolari | persone | 1 | alloggi-popolari | https://it.wikipedia.org/wiki/Istituto_Autonomo_Case_Popolari | avs | bla bla | green | Programma elettorale AVS |
Alloggi popolari | persone | 1 | alloggi-popolari | https://it.wikipedia.org/wiki/Istituto_Autonomo_Case_Popolari | pd | bla bla | green | Programma elettorale PD |
Alloggi popolari | cura | 1 | alloggi-popolari | https://it.wikipedia.org/wiki/Istituto_Autonomo_Case_Popolari | avs | bla bla | green | Programma elettorale AVS |
Alloggi popolari | cura | 1 | alloggi-popolari | https://it.wikipedia.org/wiki/Istituto_Autonomo_Case_Popolari | pd | bla bla | green | Programma elettorale PD |
blabla | ciao | 2 | blabla | https://it.wikipedia.org/wiki/Bla_Bla_Bla | avs | bla bla | green | Programma elettorale AVS |
blabla | ciao | 2 | blabla | https://it.wikipedia.org/wiki/Bla_Bla_Bla | pd | bla bla | red | Programma elettorale PD |
blabla | persone | 2 | blabla | https://it.wikipedia.org/wiki/Bla_Bla_Bla | avs | bla bla | green | Programma elettorale AVS |
blabla | persone | 2 | blabla | https://it.wikipedia.org/wiki/Bla_Bla_Bla | pd | bla bla | red | Programma elettorale PD |
@vi-enne probabilmente il codice è super sporco (sentiti libero di apportare modifiche) però ho immaginato questo workflow:
Qui lo script in R che sto preparando
Ho predisposto un'action che esegue il workflow presentato sopra, sembra funzionare
Ci ha messo 7 min. Sono tantini. Sono sicuro che il Borruso riuscirebbe a fare wide2long usando miller (che gira in pochissimi secondi) ma io mi arrangio
Aggiornamenti: A seguito di un piccolo confronto, io e @vi-enne siamo d'accordo ad utilizzare versione wide per la grande flessibilità che essa consente. Passeremo da R per pubblicare csv/json long e dare ad @angelogulina un items.json praticamente uguale a quello che esiste adesso.
Task:
wide
con le info già esistentirm wide.csv
at the end of the scriptdownload reshape convert
download.sh
new_download.sh
and new_convert.sh
i-list
,items
and glossary
from gsheetCiao @angelogulina, io e @vi-enne oggi abbiamo finalizzato la struttura per il data entry. Domani scriveremo le istruzioni per i/le contributors che si vorranno unire a noi.
Siamo riusciti ad effettuare il reshaping del foglio wide senza troppi problemi. L'output in formato long è new_items.csv
.
new_items
in items
per aggiornare i dati del sito? Grazie ;)
Ciao @dennisangemi, grazie a te e a @vi-enne per questo incredibile lavoro. Scusate il ritardo nella risposta.
Grazie @angelogulina , ho modificato i file che vedi sopra ma mi pare che il sito non si stia aggiornando. Ho fatto danno o dobbiamo dare un po' di tempo per la compilazione del sito statico?
Adesso funziona tutto. Grazie @angelogulina @vi-enne chiudo
Alla luce di #13 e #15 butto giù la mia proposta per effettuare il data entry. L'ordine proposto di seguito è importante:
🔎 glossary
🔗 relic
come da #15i-list
aggiungendo le informazioni mancanti (endorsement, description). La colonnasubject
sarà popolata automaticamente a partire da🔎 glossary
così come suggerito da @vi-enne in #13Che ne dite? @vi-enne @LorenzoRuff @angelogulina