R Markdown!
Notebook condiviso per produrre i grafici.
Caricamento dei vari packages. Conviene limitarsi sempre e solo ai package indispensabili.
Caricamento e condizionamento dati
Caricamento dei file di dati Excel in un dataframe:
Eventuali operazioni di condizionamento dati:
NAs introduced by coercion
Attenzione a eventuali errori, dovuti a valori inseriti in modo errato nel foglio elettronico… perché quel NAs introduced by coercion?
Esaminiamo <code>data$NUMERO INDIVIDUI.
[1] "287" "98" "440" "0" "2" "1" "44" "*" "49" "161" "6" "24" "189" "175" "10"
[16] "231" "3" "7" "11" "79" "20" "27" "73" "15" "56" "4" "60" "35" "28" "5"
[31] "192" "107" "22" "142" "383" "85" "298" "13" "53" "12" "386" "106" "209" "19" "81"
[46] "306" "36" "232" "38" "384" "144" "208" "45" "64" "399" "269" "29" "30" "370" "198"
[61] "61" "148" "145" "9" "25" "65" "267" "214" "76" "150" "120" "280" "216" "154" "32"
[76] "21" "112" "34" "58" "14" "8" "50"
In effetti, compare almeno una volta *, che è una brutta cosa (non è tidy): se una variabile contiene numeri, allora deve contenere solo numeri, altrimenti quando la si importa in R fa casino e diventa (il più delle volte cápita così) testo (chr)
Proviamo a fare una specie di “trova-e-cambia”: la cosa migliore sarebbe però tornare a mettere le mani sul foglio con i dati e rendere tidy i dati sin sall’origine…
Non ci dovrebbero più essere asterischi…
Analisi esplorative
Andamento generale della frequentazione del ponte.
Non fare il grafico due volte…
L’idea è che lo script te lo costruisci mano a mano, è ovvio, lo sanno tutti, ma l’obiettivo è il programma finito, che alla fine delle cose puoi aptire e eseguire tutto in un solo colpo e rifà tutte le analisi, senza i “passaggi intermedi”
NumTotInd <- ggplot(data=data, aes(x=DATA, y=individui)) +
stat_summary(fun.y=sum, na.rm=TRUE, geom='line', size=1, col='darkorange1') +
scale_x_datetime(labels=date_format("%d/%m/%Y")) +
theme_minimal() +
theme(plot.title=element_text(size=18)) +
theme(axis.title=element_text(size=16))+
theme(axis.text=element_text(size=12))+
xlab("Data")+
ylab("Numero totale di individui")
# salvataggio grafico su file, il percorso è sempre relativo la file .rprj
png(filename = 'img/NumTotInd.png', width=200, height=150, units="mm", res=300)
print(NumTotInd)
dev.off()
null device
1
Giusto per vedere il plot anche qui nel notebook R:

Per uniformità, iniziamo a “salvarci” gli elementi “di stile” in modo da essere sicuri che tutti i grafici vengano sfornati uguali…
È sufficiente ricordarsi in tutti i grafici di specificare + baseTheme()
Scale for 'x' is already present. Adding another scale for 'x', which will replace the
existing scale.

Bé, buon divertimento…
LS0tCnRpdGxlOiAiR3JhZmljaSBhbmRhbWVudG8gb2NjdXBhemlvbmUgcG9udGUiCm91dHB1dDogCiAgaHRtbF9ub3RlYm9vazogCiAgICBoaWdobGlnaHQ6IHplbmJ1cm4KICAgIHRoZW1lOiBmbGF0bHkKICAgIHRvYzogeWVzCiAgICB0b2NfZmxvYXQ6IHRydWUKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQpgYGAKIyMgUiBNYXJrZG93biEKTm90ZWJvb2sgY29uZGl2aXNvIHBlciBwcm9kdXJyZSBpIGdyYWZpY2kuCgpDYXJpY2FtZW50byBkZWkgdmFyaSBfcGFja2FnZXNfLiBDb252aWVuZSBsaW1pdGFyc2kgc2VtcHJlIGUgc29sbyBhaSBfcGFja2FnZV8gaW5kaXNwZW5zYWJpbGkuIAoKYGBge3IgcGFja2FnZXMsIGVjaG89VFJVRX0KbGlicmFyeShyZWFkeGwpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShzY2FsZXMpCmxpYnJhcnkoY2FyKQojIGxpYnJhcnkocG5nKSAjIG5vbiBzZXJ2ZSwgcG5nKCkgw6ggImRpIHNlcmllIgpgYGAKCiMjIENhcmljYW1lbnRvIGUgY29uZGl6aW9uYW1lbnRvIGRhdGkKCkNhcmljYW1lbnRvIGRlaSBmaWxlIGRpIGRhdGkgRXhjZWwgaW4gdW4gZGF0YWZyYW1lOgpgYGB7ciBsb2FkfQpkYXRhRmlsZU5hbWUgPC0gIkFuYWxpc2kgRGF0aSBSLnhsc3giCiNARklYRUQgbGUgcG9zaXppb25pIGRlaSBmaWxlIHZhbm5vIGluZGljYXRlIHJlbGF0aXZhbWVudGUgYWxsYSBwb3NpemlvbmUgZGVsIGZpbGUgLnJwcm9qCmRhdGEgPC0gcmVhZF94bHN4KHBhdGg9cGFzdGUwKCJkYXRhLyIsIGRhdGFGaWxlTmFtZSksIHNoZWV0PTEpCmBgYAoKRXZlbnR1YWxpIG9wZXJhemlvbmkgZGkgY29uZGl6aW9uYW1lbnRvIGRhdGk6CmBgYHtyIGNvbmRpdGlvbmluZ30KZGF0YSRpbmRpdmlkdWk8LWFzLm51bWVyaWMoZGF0YSQnTlVNRVJPIElORElWSURVSScpCmBgYApBdHRlbnppb25lIGEgZXZlbnR1YWxpIGVycm9yaSwgZG92dXRpIGEgdmFsb3JpIGluc2VyaXRpIGluIG1vZG8gZXJyYXRvIG5lbCBmb2dsaW8gZWxldHRyb25pY28uLi4gcGVyY2jDqSBxdWVsIDxjb2RlPk5BcyBpbnRyb2R1Y2VkIGJ5IGNvZXJjaW9uPD9jb2RlPj8KCkVzYW1pbmlhbW8gYDxjb2RlPmBkYXRhJGBOVU1FUk8gSU5ESVZJRFVJYDwvY29kZT4uCmBgYHtyfQp1bmlxdWUoZGF0YSRgTlVNRVJPIElORElWSURVSWApCmBgYAoKSW4gZWZmZXR0aSwgY29tcGFyZSBhbG1lbm8gdW5hIHZvbHRhIDxjb2RlPio8L2NvZGU+LCBjaGUgw6ggdW5hIGJydXR0YSBjb3NhIChub24gw6ggX3RpZHlfKTogc2UgdW5hIHZhcmlhYmlsZSBjb250aWVuZSBudW1lcmksIGFsbG9yYSBkZXZlIGNvbnRlbmVyZSBzb2xvIG51bWVyaSwgYWx0cmltZW50aSBxdWFuZG8gbGEgc2kgaW1wb3J0YSBpbiBSIGZhIGNhc2lubyBlIGRpdmVudGEgKGlsIHBpw7kgZGVsbGUgdm9sdGUgY8OhcGl0YSBjb3PDrCkgdGVzdG8gKGBjaHJgKQoKUHJvdmlhbW8gYSBmYXJlIHVuYSBzcGVjaWUgZGkgInRyb3ZhLWUtY2FtYmlhIjogbGEgY29zYSBtaWdsaW9yZSBzYXJlYmJlIHBlcsOyIHRvcm5hcmUgYSBtZXR0ZXJlIGxlIG1hbmkgc3VsIGZvZ2xpbyBjb24gaSBkYXRpIGUgcmVuZGVyZSBfdGlkeV8gaSBkYXRpIHNpbiBzYWxsJ29yaWdpbmUuLi4KCmBgYHtyfQpkYXRhW2RhdGEkYE5VTUVSTyBJTkRJVklEVUlgPT0iKiIsXSRgTlVNRVJPIElORElWSURVSWAgPC0gJzAnCmRhdGEkaW5kaXZpZHVpPC1hcy5udW1lcmljKGRhdGEkJ05VTUVSTyBJTkRJVklEVUknKQpgYGAKYGBge3J9ClZpZXcoZGF0YSkKYGBgCk5vbiBjaSBkb3ZyZWJiZXJvIHBpw7kgZXNzZXJlIGFzdGVyaXNjaGkuLi4KCgojIyBBbmFsaXNpIGVzcGxvcmF0aXZlCkFuZGFtZW50byBnZW5lcmFsZSBkZWxsYSBmcmVxdWVudGF6aW9uZSBkZWwgcG9udGUuCgo8Zm9udCBzaXplPTE+Ck5vbiBmYXJlIGlsIGdyYWZpY28gZHVlIHZvbHRlLi4uIAoKTCdpZGVhIMOoIGNoZSBsbyBzY3JpcHQgdGUgbG8gY29zdHJ1aXNjaSBtYW5vIGEgbWFubywgw6ggb3Z2aW8sIGxvIHNhbm5vIHR1dHRpLCBtYSBsJ29iaWV0dGl2byDDqCBpbCBwcm9ncmFtbWEgX2Zpbml0b18sIGNoZSBhbGxhIGZpbmUgZGVsbGUgY29zZSBwdW9pIGFwdGlyZSBlIGVzZWd1aXJlIHR1dHRvIGluIHVuIHNvbG8gY29scG8gZSByaWbDoCB0dXR0ZSBsZSBhbmFsaXNpLCBzZW56YSBpICJwYXNzYWdnaSBpbnRlcm1lZGkiCjwvZm9udD4KCmBgYHtyIHBsb3Q6dG90YWx9Ck51bVRvdEluZCA8LSBnZ3Bsb3QoZGF0YT1kYXRhLCBhZXMoeD1EQVRBLCB5PWluZGl2aWR1aSkpICsgCiAgc3RhdF9zdW1tYXJ5KGZ1bi55PXN1bSwgbmEucm09VFJVRSwgZ2VvbT0nbGluZScsIHNpemU9MSwgY29sPSdkYXJrb3JhbmdlMScpICsgCiAgc2NhbGVfeF9kYXRldGltZShsYWJlbHM9ZGF0ZV9mb3JtYXQoIiVkLyVtLyVZIikpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKHBsb3QudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9MTgpKSArCiAgdGhlbWUoYXhpcy50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT0xNikpKwogIHRoZW1lKGF4aXMudGV4dD1lbGVtZW50X3RleHQoc2l6ZT0xMikpKwogIHhsYWIoIkRhdGEiKSsKICB5bGFiKCJOdW1lcm8gdG90YWxlIGRpIGluZGl2aWR1aSIpCiMgc2FsdmF0YWdnaW8gZ3JhZmljbyBzdSBmaWxlLCBpbCBwZXJjb3JzbyDDqCBzZW1wcmUgcmVsYXRpdm8gbGEgZmlsZSAucnByagpwbmcoZmlsZW5hbWUgPSAnaW1nL051bVRvdEluZC5wbmcnLCB3aWR0aD0yMDAsIGhlaWdodD0xNTAsIHVuaXRzPSJtbSIsIHJlcz0zMDApCnByaW50KE51bVRvdEluZCkKZGV2Lm9mZigpCmBgYApHaXVzdG8gcGVyIHZlZGVyZSBpbCBwbG90IGFuY2hlIHF1aSBuZWwgbm90ZWJvb2sgUjoKYGBge3IgcGxvdDEsIGVjaG89RkFMU0V9CnByaW50KE51bVRvdEluZCkKYGBgCgpQZXIgdW5pZm9ybWl0w6AsIGluaXppYW1vIGEgInNhbHZhcmNpIiBnbGkgZWxlbWVudGkgImRpIHN0aWxlIiBpbiBtb2RvIGRhIGVzc2VyZSBzaWN1cmkgY2hlIHR1dHRpIGkgZ3JhZmljaSB2ZW5nYW5vIHNmb3JuYXRpIHVndWFsaS4uLgoKYGBge3Igc3R5bGVfZGVmaW5pdGlvbnN9CmJhc2VDb2xvciA8LSAnZGFya29yYW5nZTEnCmJhc2VUaGVtZSA8LSB0aGVtZV9taW5pbWFsKCkKYGBgCsOIIHN1ZmZpY2llbnRlIHJpY29yZGFyc2kgaW4gdHV0dGkgaSBncmFmaWNpIGRpIHNwZWNpZmljYXJlIGAgKyBiYXNlVGhlbWUoKWAKCmBgYHtyfQpwcmludChOdW1Ub3RJbmQgKyBzdGF0X3N1bW1hcnkoZnVuLnk9c3VtLCBuYS5ybT1UUlVFLCBnZW9tPSdsaW5lJywgYWVzKGNvbG91cj1TUEVDSUUpKSsgc2NhbGVfeF9kYXRldGltZShsYWJlbHM9ZGF0ZV9mb3JtYXQoIiVkLyVtLyVZIiksIGRhdGVfYnJlYWtzPSIzIHdlZWtzIikgKyB0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9LTkwLCB2anVzdD0wLjUpKSkKYGBgCgpCw6ksIGJ1b24gZGl2ZXJ0aW1lbnRvLi4uCg==