@@ -12,6 +12,7 @@ library(data.table)
1212library(readxl )
1313library(zen4R )
1414library(dplyr )
15+ library(tidyr )
1516library(giscoR )
1617library(sf )
1718
@@ -27,7 +28,7 @@ origagebreaks <- c(1, seq(5, 100, by = 5))
2728# Target age groups (for the analysis)
2829agebreaks <- c(0 , 45 , 65 , 75 , 85 )
2930agelabs <- c(paste(sprintf(" %02i" , agebreaks [- length(agebreaks )]),
30- agebreaks [- 1 ], sep = " " ), sprintf(" %i+" , agebreaks [length(agebreaks )]))
31+ agebreaks [- 1 ] - 1 , sep = " " ), sprintf(" %i+" , agebreaks [length(agebreaks )]))
3132
3233# ------------------------
3334# Download mortality data
@@ -40,12 +41,15 @@ linkd <- paste0("https://www.istat.it/storage/dati_mortalita",
4041 " /decessi-comunali-giornalieri_4-21062023.zip" )
4142
4243# Download zip and open csv
43- temp <- tempfile()
44+ temp <- tempfile(fileext = " .zip" )
45+ tdir <- gsub(" \\\\ [[:alnum:]]*\\ .zip" , " " , temp )
4446download.file(linkd , temp )
4547ftr <- grep(" csv" , zip_list(temp )$ filename , value = T )
46- deathdata <- fread(cmd = sprintf(" unzip -p %s %s" , temp , ftr ),
48+ unzip(temp , ftr , exdir = tdir )
49+ deathdata <- fread(sprintf(" %s\\ %s" , tdir , ftr ),
4750 encoding = " Latin-1" , na.string = " n.d." )
4851unlink(temp )
52+ unlink(sprintf(" %s\\ %s" , tdir , ftr ))
4953
5054# Pad province codes with zeros
5155deathdata [, COD_PROVCOM : = sprintf(" %06d" , COD_PROVCOM )]
@@ -80,13 +84,13 @@ years <- sprintf("20%s", substr(totalvars, 3, 4))
8084# Reshape to long
8185datalong <- melt.data.table(deathdata , id.vars = c(" COD_PROVCOM" , " REG" ,
8286 " PROV" , " CL_ETA" , " GE" , " CITY_ID" , " CITY_NAME" ),
83- measure.vars = totalvars , variable.name = " year" , value.name = " all " )
87+ measure.vars = totalvars , variable.name = " year" , value.name = " deaths " )
8488
8589# Rename years
8690datalong [, year : = gsub(" T_" , " 20" , year , fixed = T )]
8791
8892# Aggregate by city, date and age
89- datatab <- datalong [, .(all = sum(all , na.rm = T )),
93+ datatab <- datalong [, .(deaths = sum(deaths , na.rm = T )),
9094 keyby = .(CITY_ID , year , GE , CL_ETA )]
9195
9296# Create date variables
@@ -95,31 +99,33 @@ datatab[, day := GE - month * 100]
9599datatab [, date : = as.Date(paste(year , month , day , sep = " -" ))]
96100
97101# Create full list of dates
98- fullfactor <- as.data.table(expand.grid(CITY_CODE = unique(datatab $ CITY_ID ),
102+ fullfactor <- as.data.table(expand.grid(city_code = unique(datatab $ CITY_ID ),
99103 date = seq(dstart , dend , by = " day" ), agegroup = 0 : 21 ))
100104
101105# Merge with datatab
102106fulldata <- merge(fullfactor , datatab ,
103- by.x = c(" CITY_CODE " , " date" , " agegroup" ),
107+ by.x = c(" city_code " , " date" , " agegroup" ),
104108 by.y = c(" CITY_ID" , " date" , " CL_ETA" ), all.x = T , all.y = F )
105109
106110# Fill NAs
107- fulldata [, all : = nafill(all , fill = 0 )]
111+ fulldata [, deaths : = nafill(deaths , fill = 0 )]
108112
109113# Clean date related variables
110114fulldata [, " :=" (year = NULL , month = NULL , day = NULL , GE = NULL )]
111115
112116# Aggregate age-groups
113117fulldata [, agegroup : = cut(c(0 , origagebreaks )[agegroup + 1 ], c(agebreaks , Inf ),
114118 right = F , labels = agelabs )]
115- fulldata <- fulldata [, .(all = sum(all )), by = .(CITY_CODE , date , agegroup )]
119+ fulldata <- fulldata [, .(deaths = sum(deaths )),
120+ by = .(city_code , date , agegroup )]
116121
117122# Transform age groups as wide
118- fulldata <- dcast.data.table(fulldata , CITY_CODE + date ~ agegroup ,
119- value.var = " all" )
123+ fulldata <- dcast.data.table(fulldata , city_code + date ~ agegroup ,
124+ value.var = " deaths" )
125+ setnames(fulldata , agelabs , sprintf(" deaths_%s" , agelabs ))
120126
121- # Rename
122- setnames (fulldata , agelabs , sprintf( " all_%s " , agelabs ) )
127+ # Arrange
128+ setorder (fulldata , city_code , date )
123129
124130# ----- Save
125131
@@ -137,18 +143,21 @@ if (!file.exists(fname)){
137143
138144# ----- Metadata
139145
140- # Download metadata used in The Lancet Planetary Health paper from Zenodo
141- download_zenodo(" 10.5281/zenodo.7672108" , path = " data" ,
146+ # Download data used in The Lancet Planetary Health paper from Zenodo
147+ # Also include the metadata
148+ # download_zenodo("10.5281/zenodo.7672108", path = tdir,
149+ # files = list("metadata.csv"))
150+ download_zenodo(" 10.5281/zenodo.10288665" , path = tdir ,
142151 files = list (" metadata.csv" ))
143152
144153# Read metadata
145- metadata <- read.csv(" data /metadata.csv" )
146- unlink(" data /metadata.csv" )
154+ metadata <- read.csv(sprintf( " %s /metadata.csv" , tdir ) )
155+ unlink(sprintf( " %s /metadata.csv" , tdir ) )
147156
148157# Select only Italy
149158metadata <- subset(metadata , CNTR_CODE == " IT" , - c(CNTR_CODE , cntr_name , region ,
150- nmiss , mcc_code , cityname , country , inmcc )) | >
151- rename(CITY_CODE = " URAU_CODE" , CITY_NAME = " URAU_NAME" )
159+ nmiss , mcc_code , cityname , country , inmcc , LABEL )) | >
160+ rename(city_code = " URAU_CODE" , city_name = " URAU_NAME" )
152161
153162# ----- Info about municipalities
154163
@@ -157,12 +166,15 @@ linkg <- paste0("https://www.istat.it/storage/codici-unita-amministrative",
157166 " /Elenco-codici-statistici-e-denominazioni-delle-unita-territoriali.zip" )
158167
159168# Download and load into session
160- temp <- tempfile()
169+ temp <- tempfile(fileext = " .zip" )
170+ tdir <- gsub(" \\\\ [[:alnum:]]*\\ .zip" , " " , temp )
161171download.file(linkg , temp )
162- ftr <- grep(" csv" , zip_list(temp )$ filename , value = T )
163- geoinfo <- fread(cmd = sprintf(" unzip -p %s %s" , temp , ftr ),
172+ ftr <- grep(" csv" , zip_list(temp )$ filename , value = T , useBytes = T )
173+ unzip(temp , ftr , exdir = tdir , junkpaths = T )
174+ geoinfo <- fread(sprintf(" %s\\ %s" , tdir , gsub(" ^.*/" , " " , ftr , useBytes = T )),
164175 encoding = " Latin-1" , na.string = " n.d." )
165176unlink(temp )
177+ unlink(sprintf(" %s\\ %s" , tdir , gsub(" ^.*/" , " " , ftr , useBytes = T )))
166178
167179# Link to cities, select and rename
168180geoinfo <- mutate(geoinfo , `LAU CODE` = sprintf(" %06d" ,
@@ -173,12 +185,29 @@ geoinfo <- mutate(geoinfo, `LAU CODE` = sprintf("%06d",
173185 unique()
174186
175187# Add to metadata
176- metadata <- merge(metadata , geoinfo , by.x = " CITY_CODE" , by.y = " CITY_ID" )
188+ metadata <- merge(metadata , geoinfo , by.x = " city_code" , by.y = " CITY_ID" )
189+
190+ # Separate spatial and age-related variables
191+ agevars <- grep(" [[:alpha:]]+_[[:digit:]]+$" , names(metadata ), value = T )
192+ metadata_spatial <- metadata [, ! names(metadata ) %in% agevars ]
193+
194+ # Age-related variables into long and characterise age groups
195+ metadata_age <- metadata [, c(" city_code" , agevars )]
196+ names(metadata_age ) <- gsub(" ([^_])[[:digit:]]{2}$" , " \\ 1" , names(metadata_age ))
197+ metadata_age <- pivot_longer(metadata_age , cols = ! city_code ,
198+ names_to = c(" .value" , " age" ), names_sep = " _" ) | >
199+ arrange(city_code , age ) | >
200+ mutate(age = as.numeric(age ), agehigh = lead(age ) - 1 , .by = city_code ) | >
201+ select(city_code , age , agehigh , prop , deathrate , lifexp )
202+
177203
178204# Write metadata
179- fname <- " data/metadata .csv.gz"
205+ fname <- " data/metadata_spatial .csv.gz"
180206if (! file.exists(fname )){
181- fwrite(metadata , fname , quote = F , compress = " gzip" )
207+ fwrite(metadata_spatial , " data/metadata_spatial.csv.gz" ,
208+ quote = F , compress = " gzip" )
209+ fwrite(metadata_age , " data/metadata_age.csv.gz" ,
210+ quote = F , compress = " gzip" )
182211}
183212
184213# ----- Geographical data
0 commit comments