|
# 1. Get the data |
|
|
|
# Prendi Anagrafica.csv |
|
# dal sito Scuola in chiaro del MIUR |
|
|
|
if (file.exists("Anagrafica.zip") == FALSE) { |
|
download.file("http://archivio.pubblica.istruzione.it/scuola_in_chiaro/open_data/Anagrafe.zip", destfile="Anagrafica.zip") |
|
} |
|
|
|
anagraficacsv <- unz(description="Anagrafica.zip", file="Anagrafica.csv") |
|
anagrafica <- read.csv("Anagrafe/Anagrafica.csv", header=TRUE, sep="|") |
|
|
|
# Dati ISTAT |
|
# sulla ripartizione delle province nelle regioni |
|
|
|
if (file.exists("regioni.zip") == FALSE) { |
|
download.file("http://www.istat.it/it/files/2011/01/Ripartizioni-regioni-province.zip", destfile="regioni.zip") |
|
} |
|
|
|
regionicsv <- unz(description="regioni.zip", |
|
file="ripartizioni_regioni_province.csv") |
|
|
|
# na.strings va modificato |
|
# per leggere correttamente la provincia di Napoli |
|
# (altrimenti interpretata come valore mancante) |
|
nuts2 <- read.csv(regionicsv, |
|
sep=";", |
|
header=TRUE, |
|
na.strings=character(0), |
|
fileEncoding="latin1") |
|
|
|
|
|
# 2. Data massaging |
|
|
|
# Invece che impelagarci in geocoding |
|
# ricava la provincia della scuola |
|
# dai primi due caratteri |
|
# del codice meccanografico |
|
# (che corrispondono alle province pre 2008), |
|
anagrafica$provincia <- substr(anagrafica$codice_scuola, 1, 2) |
|
|
|
# ma Bolzano è divisa tra scuole italiane, ladine e tedesche, |
|
anagrafica$provincia[anagrafica$provincia=="IB"] <- "BZ" |
|
anagrafica$provincia[anagrafica$provincia=="LB"] <- "BZ" |
|
anagrafica$provincia[anagrafica$provincia=="TB"] <- "BZ" |
|
|
|
# e due province hanno sigle e codici variati |
|
anagrafica$provincia[anagrafica$provincia=="FO"] <- "FC" |
|
anagrafica$provincia[anagrafica$provincia=="PS"] <- "PU" |
|
|
|
# Vanno cancellate le ultime tre righe del file regioni.csv |
|
# (ISTAT, tu quoque! metadati mescolati ai dati!) |
|
len2 <- dim(nuts2)[1] |
|
nuts2 <- nuts2[-(len2-2:len2),] |
|
|
|
# le province devono essere in ordine alfabetico |
|
nuts2 <- nuts2[order(nuts2$Sigla.automobilistica),] |
|
|
|
|
|
# 3. Explore the data |
|
|
|
# Calcola la proporzione tra scuole paritarie e scuole statali |
|
# su base provinciale |
|
sk2 <- as.data.frame.matrix(table(anagrafica$provincia, anagrafica$statale)) |
|
sk2$tot <- (sk2$PARITARIA + sk2$STATALE) |
|
sk2$prop <- sk2$PARITARIA / (sk2$tot) |
|
|
|
# Calcola totali e proporzioni per regioni |
|
sk2$regione <- nuts2[nuts2$Sigla.automobilistica %in% row.names(sk2), 10] |
|
sk2$n1 <- nuts2[nuts2$Sigla.automobilistica %in% row.names(sk2), 2] |
|
|
|
reg.tot <- by(sk2$tot, sk2$regione, sum) |
|
reg.par <- by(sk2$PARITARIA, sk2$regione, sum) |
|
reg.nuts1 <- factor(by(sk2$n1, sk2$regione, sample, 1)) |
|
reg.df <- data.frame("tot"=c(reg.tot), "par"=c(reg.par), "nuts1"=c(reg.nuts1)) |
|
reg.df$nuts1 <- factor(reg.df$nuts1) |
|
reg.df$prop <- reg.df$par / reg.df$tot |
|
|
|
# Possible NAs flying around |
|
reg.df <- na.exclude(reg.df) |
|
|
|
|
|
# 4. Plot! |
|
|
|
library(ggplot2) |
|
interc = mean(sk2$prop) |
|
|
|
# La Valle d'Aosta è un outlier e viene esclusa dal grafico |
|
ggplot(reg.df[c(1:18,20),], aes(tot, prop, size=tot, colour=nuts1)) + |
|
geom_point() + |
|
geom_abline(intercept = interc, slope = 0) + |
|
scale_colour_brewer(palette="Set1") + |
|
scale_area() |
|
|
|
|
|
# 5. Initial results |
|
|
|
# Regioni grandi, più scuole paritarie |
|
ggplot(reg.df[c(1:18,20),], |
|
aes(tot, prop)) + |
|
stat_smooth(method='lm') + |
|
geom_point() |
|
|
|
# Scuole paritarie prevalentemente per l'infanzia |
|
tipscu <- table(anagrafica$des_tipo_scuola, anagrafica$statale) |
|
tipscu.prop <- tipscu[,1] / (tipscu[,1] + tipscu[,2]) |
|
|
|
|
|
# 6. Don't stop here! |
|
|
|
# dati demografici da http://demo.istat.it/altridati/indicatori/2011/Tab_6.xls e http://demo.istat.it/pop2011/index1.html |