opendatasicilia / tansignari

"T'ansignari e t'appeddiri"
http://tansignari.opendatasicilia.it
Creative Commons Attribution 4.0 International
18 stars 10 forks source link

[CSV] da righe a colonne #72

Closed gbvitrano closed 5 years ago

gbvitrano commented 5 years ago

Buon dì Sto giocando con i file della popolazione residente di Palermo qui il google sheet 2019-05-24_16h08_24

Vorrei che le varie cittadinaze da colonne diventassero righe, quindi per ogni singola cittadinaza ci dovrebbero essere 55 righe delle UPL e le relative info, spero di essermi spiagato :-)

gbvitrano commented 5 years ago

Dovrebbe uscire una tabella tipo questa 2019-05-24_17h55_00

aborruso commented 5 years ago

Ciao @gbvitrano a riga di comando è semplicissimo. Per te va bene?

gbvitrano commented 5 years ago

si, ma va bene ma poi devo devo capire bene io una volta per tutte come funzionano gli strumenti che usi :-)

gbvitrano commented 5 years ago

domanda scema... fermo restando che voglio capire come fare a riga di comando, ma con strumenti più popolari non si può fare? Se lo dobbiamo spiegare in Ufficio sarà dura con google sheet o excel figurati la riga di comando :-) :-) :-) In Uffico win 10 non è in tutti i pc e comunque l'utente non ha i permessi per installare bash

aborruso commented 5 years ago

Caro @gbvitrano le parole chiave per questa modalità sono "tidy", "Melt", "unpivot". Te le scrivo perché magari trovi come usarle con i tool che preferisci.

Su quello che si può fare o no in ufficio, il discorso sarebbe lungo. Che senso ha un ufficio in cui non si possono installare strumenti di lavoro?

Ci sono vari soluzioni per usare alcuni strumenti "Linux" in "Win", ma devi sempre poter installare qualcosa. Se installi questo http://www.msys2.org/ (scegli quello a 32 o a 64 bit in base al tuo PC) puoi usare alcuni degli strumenti che amo.

In ogni caso con Miller è molto semplice (e si può usare anche su Win con "msys2").

Per prima cosa ho scaricato il tuo file in TSV.

Di base poi:

mlr --t2c cut -x -f "Cittadinanza,Residenti" \
then reshape -i "Italiani","Afghanistan","Albania","Algeria","Argentina","Armenia","Australia",\
"Austria","Bahamas","Bangladesh","Belgio","Benin (ex Dahomey)","Bielorussia","Bolivia","Bosnia-Erzegovina",\
"Brasile","Bulgaria","Burkina Faso (ex Alto Volta)","Burundi","Camerun","Canada","Capo Verde",\
"Ceca- Repubblica","Cile","Cinese- Repubblica Popolare","Cipro","Colombia","Congo (Repubblica del)",\
"Congo- Repubblica democratica del (ex Zaire)","Corea- Repubblica (Corea del Sud)","Costa d'Avorio",\
"Costa Rica","Croazia","Cuba","Danimarca","Dominicana- Repubblica","Ecuador","Egitto","El Salvador",\
"Eritrea","Estonia","Etiopia","Filippine","Finlandia","Francia","Gabon","Gambia","Georgia","Germania",\
"Ghana","Giamaica","Giappone","Giordania","Grecia","Guatemala","Guinea","Guinea Bissau","Guinea Equatoriale",\
"Honduras","India","Indonesia","Iran- Repubblica Islamica del","Iraq","Irlanda","Israele","Kazakhstan",\
"Kenya","Kosovo","Lettonia","Libano","Liberia","Libia","Lituania","Macedonia- Repubblica di",\
"Madagascar","Mali","Malta","Marocco","Mauritania","Mauritius","Messico","Moldova","Montenegro","Mozambico",\
"Myanmar (ex Birmania)","Nepal","Nicaragua","Niger","Nigeria","Norvegia","Paesi Bassi","Pakistan","Panama",\
"Paraguay","Perù","Polonia","Portogallo","Regno Unito","Romania","Russa- Federazione","Saint Lucia","Senegal",\
"Serbia- Repubblica di","Seychelles","Sierra Leone","Siria","Slovacchia","Slovenia","Somalia","Spagna",\
"Sri Lanka (ex Ceylon)","Stati Uniti d'America","Sud Africa","Sudan","Svezia","Svizzera","Taiwan (ex Formosa)",\
"Tanzania","Thailandia","Togo","Tunisia","Turchia","Ucraina","Uganda","Ungheria","Uruguay","Venezuela",\
"Vietnam","Zambia","Zimbabwe (ex Rhodesia)","Cittadinanza","Residenti" -o Cittadinanza,Residenti input.tsv>output.csv

Note:

In output https://gist.github.com/aborruso/dc16a1c7cd509488e86074348184da85

aborruso commented 5 years ago

Se vuoi rimuovere i record per cui non ci sono residenti diventa

mlr --t2c cut -x -f "Cittadinanza,Residenti" \
then reshape -i "Italiani","Afghanistan","Albania","Algeria","Argentina","Armenia","Australia",\
"Austria","Bahamas","Bangladesh","Belgio","Benin (ex Dahomey)","Bielorussia","Bolivia","Bosnia-Erzegovina",\
"Brasile","Bulgaria","Burkina Faso (ex Alto Volta)","Burundi","Camerun","Canada","Capo Verde",\
"Ceca- Repubblica","Cile","Cinese- Repubblica Popolare","Cipro","Colombia","Congo (Repubblica del)",\
"Congo- Repubblica democratica del (ex Zaire)","Corea- Repubblica (Corea del Sud)","Costa d'Avorio",\
"Costa Rica","Croazia","Cuba","Danimarca","Dominicana- Repubblica","Ecuador","Egitto","El Salvador",\
"Eritrea","Estonia","Etiopia","Filippine","Finlandia","Francia","Gabon","Gambia","Georgia","Germania",\
"Ghana","Giamaica","Giappone","Giordania","Grecia","Guatemala","Guinea","Guinea Bissau","Guinea Equatoriale",\
"Honduras","India","Indonesia","Iran- Repubblica Islamica del","Iraq","Irlanda","Israele","Kazakhstan",\
"Kenya","Kosovo","Lettonia","Libano","Liberia","Libia","Lituania","Macedonia- Repubblica di",\
"Madagascar","Mali","Malta","Marocco","Mauritania","Mauritius","Messico","Moldova","Montenegro","Mozambico",\
"Myanmar (ex Birmania)","Nepal","Nicaragua","Niger","Nigeria","Norvegia","Paesi Bassi","Pakistan","Panama",\
"Paraguay","Perù","Polonia","Portogallo","Regno Unito","Romania","Russa- Federazione","Saint Lucia","Senegal",\
"Serbia- Repubblica di","Seychelles","Sierra Leone","Siria","Slovacchia","Slovenia","Somalia","Spagna",\
"Sri Lanka (ex Ceylon)","Stati Uniti d'America","Sud Africa","Sudan","Svezia","Svizzera","Taiwan (ex Formosa)",\
"Tanzania","Thailandia","Togo","Tunisia","Turchia","Ucraina","Uganda","Ungheria","Uruguay","Venezuela",\
"Vietnam","Zambia","Zimbabwe (ex Rhodesia)","Cittadinanza","Residenti" -o Cittadinanza,Residenti \
then filter -S -x '$Residenti==""' input.tsv >out_noNull.csv

In cui è stato aggiunto then filter -S -x '$Residenti==""' per rimuovere i record in cui residenti è senza valore.

In output https://gist.github.com/aborruso/4e595b1591df74a109f19e78ff43eb0c

gbvitrano commented 5 years ago

Grazie :-) proverò a capire come funziona con un file semplificato, magari con solo 4 colonne di Cittadinanze

pigreco commented 5 years ago

@aborruso grazie per la ottima spiegazione. Chiedo una cosa banale che potrebbe essere utile in futuro, come hai generato l'insieme di tutte le cittadinanze (la parte indicata con xxxxxxxxxxxxxx??

mlr --t2c cut -x -f "Cittadinanza,Residenti" \
then reshape -i xxxxxxxxxxxxxxxxxxxxxxxxxxx -o Cittadinanza,Residenti \
then filter -S -x '$Residenti==""' input.tsv >out_noNull.csv

grazie e buon week end

aborruso commented 5 years ago

@pigreco puoi fare un po' come ti viene più comodo. Detto che non c'è un modo intelligente, perché non sono campi diversi dagli altri, potresti fare così:

# estrai la prima riga
<input.tsv head -n 1 | \
# sostituisci prima "," con "-" e poi i tab con "",""
sed 's/,/-/g;s/\t/","/g' | \
# estrai da ""Ital" a "desia)""
grep -Eo '"Ital.+desia)"'

per ottenere

"Italiani","Afghanistan","Albania","Algeria","Argentina","Armenia","Australia","Austria","Bahamas","Bangladesh","Belgio","Benin (ex Dahomey)","Bielorussia","Bolivia","Bosnia-Erzegovina","Brasile","Bulgaria","Burkina Faso (ex Alto Volta)","Burundi","Camerun","Canada","Capo Verde","Ceca- Repubblica","Cile","Cinese- Repubblica Popolare","Cipro","Colombia","Congo (Repubblica del)","Congo- Repubblica democratica del (ex Zaire)","Corea- Repubblica (Corea del Sud)","Costa d'Avorio","Costa Rica","Croazia","Cuba","Danimarca","Dominicana- Repubblica","Ecuador","Egitto","El Salvador","Eritrea","Estonia","Etiopia","Filippine","Finlandia","Francia","Gabon","Gambia","Georgia","Germania","Ghana","Giamaica","Giappone","Giordania","Grecia","Guatemala","Guinea","Guinea Bissau","Guinea Equatoriale","Honduras","India","Indonesia","Iran- Repubblica Islamica del","Iraq","Irlanda","Israele","Kazakhstan","Kenya","Kosovo","Lettonia","Libano","Liberia","Libia","Lituania","Macedonia- Repubblica di","Madagascar","Mali","Malta","Marocco","Mauritania","Mauritius","Messico","Moldova","Montenegro","Mozambico","Myanmar (ex Birmania)","Nepal","Nicaragua","Niger","Nigeria","Norvegia","Paesi Bassi","Pakistan","Panama","Paraguay","Perù","Polonia","Portogallo","Regno Unito","Romania","Russa- Federazione","Saint Lucia","Senegal","Serbia- Repubblica di","Seychelles","Sierra Leone","Siria","Slovacchia","Slovenia","Somalia","Spagna","Sri Lanka (ex Ceylon)","Stati Uniti d'America","Sud Africa","Sudan","Svezia","Svizzera","Taiwan (ex Formosa)","Tanzania","Thailandia","Togo","Tunisia","Turchia","Ucraina","Uganda","Ungheria","Uruguay","Venezuela","Vietnam","Zambia","Zimbabwe (ex Rhodesia)"