diff --git a/CommonFunctions.R b/CommonFunctions.R index 29e2a336dd0adecbf419b8fb6594f2a30f2db62f..d9e204fc973c05ec3f26740132f797f47c5b0fdb 100644 --- a/CommonFunctions.R +++ b/CommonFunctions.R @@ -36,19 +36,26 @@ itemGroupMapping = data.table( bioenergyUse = c(rep(FALSE, 8), rep(TRUE, 10)) ) -rasterFromFile = function(lcType, fileName, offset=0.0) { - plumDt=data.table(read.table(fileName, header=TRUE)) - plumDt[, c('Lon', 'Lat') := list(Lon-offset, Lat-offset)] - rasterFromXYZ(plumDt[, list(Lon, Lat, get(lcType))], crs = "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs") +getItemDetails = function() { + itemDetails = fread(paste0(data_dir_root, "/HALF/itemsInputs.csv")) + itemDetails[, allowedForVeggie:=TRUE] + itemDetails[animal == TRUE & !Item %in% c("Eggs", "Milk - Excluding Butter"), allowedForVeggie:=FALSE] + itemDetails } - getCountryCodes = function(includeWorld=TRUE) { dt = fread(paste0(data_dir_root, "/SSP/country_codes2.csv"), header=TRUE)[, list(Country, CountryCode, Region, IncomeGroup)] if (includeWorld == TRUE) dt = rbind(dt, data.table(Country = "World", CountryCode = "WLD", Region = "World", IncomeGroup="variable")) dt } +##### Plot helper functions +rasterFromFile = function(lcType, fileName, offset=0.0) { + plumDt=data.table(read.table(fileName, header=TRUE)) + plumDt[, c('Lon', 'Lat') := list(Lon-offset, Lat-offset)] + rasterFromXYZ(plumDt[, list(Lon, Lat, get(lcType))], crs = "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs") +} + ########## Country data readCountryData = function() { ########## Land diff --git a/PLUM/Cluster/ProcessClusterRes.R b/PLUM/Cluster/ProcessClusterRes.R index 8c179da1c9b43995bfa0e1eb64366735dbb8cef0..3c5ae25544a1c154ef26f97ec6f9a4f4b7fce9ba 100644 --- a/PLUM/Cluster/ProcessClusterRes.R +++ b/PLUM/Cluster/ProcessClusterRes.R @@ -198,7 +198,7 @@ plotConeLcHind(filename="~/Documents/LURG/PLUM/offline_paper/hind1970/hc/lc_conc -plotConeRcp = function (ensemble, outBase=baseOutputDir, baseYr=2010, endYr=2100, outfilename, saveToFile=FALSE) { +plotConeRcpOrSsp = function (ensemble, outBase=baseOutputDir, baseYr=2010, endYr=2100, outfilename, saveToFile=FALSE) { lc=fread(file.path(outBase, "lc_concat.txt")) if (ensemble %like% 'rcp') { @@ -311,6 +311,6 @@ plotConeRcp = function (ensemble, outBase=baseOutputDir, baseYr=2010, endYr=2100 layout_matrix = rbind(c(1,2, 3,4), c(5,6,7,8), c(9, 10,11,11))) if (saveToFile) dev.off() } -#plotConeRcp('rcp', outBase="~/Documents/LURG/PLUM/offline_paper/rcp", outfilename="rcp_comp_over_time.pdf", saveToFile=TRUE) -plotConeRcp('ssp11', outBase="~/Documents/LURG/PLUM/SamsCouplingPaper", outfilename="ssp.pdf", saveToFile=TRUE) +#plotConeRcpOrSsp('rcp', outBase="~/Documents/LURG/PLUM/offline_paper/rcp", outfilename="rcp_comp_over_time.pdf", saveToFile=TRUE) +plotConeRcpOrSsp('ssp11', outBase="~/Documents/LURG/PLUM/SamsCouplingPaper", outfilename="ssp.pdf", saveToFile=TRUE) diff --git a/PLUM/SetupData/PreparePLUMData.R b/PLUM/SetupData/PreparePLUMData.R index 9d67045e1e1ccf1a2049de1b8a51994779e43ce2..0137a0aa49413b9ec5f2260a933954287b2b6454 100644 --- a/PLUM/SetupData/PreparePLUMData.R +++ b/PLUM/SetupData/PreparePLUMData.R @@ -37,7 +37,7 @@ writePlumFiles = function(dt, year, output_dir) { popForG = processedFull$histDt[Year == 2010 & Item == "Cereals" & !is.na(population), list(Country, popForGrouping=population)] newBaseConsumption = merge(newBaseConsumption, popForG, by='Country', all.x=TRUE) newBaseConsumption[is.na(popForGrouping), popForGrouping:=basePop] - write.table(newBaseConsumption[Country != "Sudan (former)"], file.path(output_dir,"base_consump.csv"), sep=",", row.names=FALSE, quote=FALSE) + write.table(newBaseConsumption[!Country %in% c("World", "Sudan (former)")], file.path(output_dir,"base_consump.csv"), sep=",", row.names=FALSE, quote=FALSE) # Net imports and production (of crops) consumpDt = dt$com_bal[Item %in% itemGroupMapping$combalItem & Year == year, list(Country, Year, Item, net_import=import-export, prod)] diff --git a/PLUM/SetupData/ReadFaoForPlum-notHindcast.R b/PLUM/SetupData/ReadFaoForPlum-notHindcast.R index decdaad4c0273f3ee5c4990becf6a3f5d1a3213c..120e572af0aee52c64b80a52fbc6bd4fee77f852 100644 --- a/PLUM/SetupData/ReadFaoForPlum-notHindcast.R +++ b/PLUM/SetupData/ReadFaoForPlum-notHindcast.R @@ -5,6 +5,9 @@ require(zoo) data_dir_root = "~/Documents/LURG/Data" fao_data_dir = file.path(data_dir_root, "FAOStat-Dec2015") +getItemGroupMapping = function() { + itemGroupMapping +} readLivestockNumbers = function() { animal_prod_data = fread(file.path(fao_data_dir,"Production_LivestockPrimary_E_All_Data_Norm.csv")) @@ -84,7 +87,7 @@ disaggregateCountries = function(Dt,wbCountryDt, colsToChange){ getHistoricDataset = function(commodityDt, countryDt) { - h_dt = commodityDt[Item %in% itemGroupMapping$combalItem, + h_dt = commodityDt[Item %in% getItemGroupMapping()$combalItem, list(Country, Year, Item, supply=supply, net_import=(import-export), @@ -92,7 +95,7 @@ getHistoricDataset = function(commodityDt, countryDt) { feed_rate=feed/supply, other_rate=other/supply)] - h_dt = merge(h_dt, itemGroupMapping[, list(plumDemandItem, Item=combalItem, fcr)], by=c('Item')) + h_dt = merge(h_dt, getItemGroupMapping()[, list(plumDemandItem, Item=combalItem, fcr)], by=c('Item')) itemDetails = fread(paste0(data_dir_root, "/HALF/itemsInputs-PLUM.csv")) h_dt = merge(h_dt, itemDetails, by='Item', all.x=TRUE) @@ -201,7 +204,7 @@ processData = function(minYear=1960, year=2010){ "Soyabean Cake", "Sunflowerseed Oil", "Sunflowerseed Cake", "Palmkernel Oil")) # losses and seed by PLUM crop - print (merge(com_bal_adj, itemGroupMapping[, list(plumCropItem, Item=combalItem, fcr)], by=c('Item'))[Country == "World" & Year == 2010, + print (merge(com_bal_adj, getItemGroupMapping()[, list(plumCropItem, Item=combalItem, fcr)], by=c('Item'))[Country == "World" & Year == year, list(loss_seed_rate=sum(seed+waste)/sum(supply)*100), by= plumCropItem]) country_data = readCountryData() @@ -212,7 +215,8 @@ processData = function(minYear=1960, year=2010){ projectedConsumption = getProjectAllConsumption(baseConsumption,ssp[Year >= year],com_curves) livestockNumbers = readLivestockNumbers() - return(list(ssp=ssp,histDt=histDt,baseConsumption=baseConsumption,com_curves=com_curves,projectedConsumption=projectedConsumption,com_bal=com_bal_adj, livestockNumbers=livestockNumbers)) + return(list(ssp=ssp,histDt=histDt, baseConsumption=baseConsumption, com_curves=com_curves, country_data=country_data, + projectedConsumption=projectedConsumption, com_bal=com_bal_adj, livestockNumbers=livestockNumbers)) } processedFull = processData() diff --git a/PLUM/SetupData/UclProjections.R b/PLUM/SetupData/UclProjections.R new file mode 100644 index 0000000000000000000000000000000000000000..d49ffaa249fc12510501cceb6f7b2e801bb98f5b --- /dev/null +++ b/PLUM/SetupData/UclProjections.R @@ -0,0 +1,65 @@ +fao_data_dir = file.path(data_dir_root, "FAOStat-Sep2018") + +getItemGroupMapping = function() { + rbind(itemGroupMapping, + data.table(plumDemandItem=c("Friut & Veg"), plumCropItem=c("Friut & Veg"), cropProdItem=c("Vegetables Primary", "Fruit Primary"), + combalItem=c("Vegetables", "Fruits - Excluding Wine")), fill=TRUE) +} + +processedFull = processData(year=2013) +itemDetails = getItemDetails() + +consumpChange = merge(processedFull$projectedConsumption[, list(Country, Year, plumCropItem=Item, Model, Scenario, population, cpcAdj=projectedCpc/baseCpc)], + itemDetails, + by=c("plumCropItem"), allow.cartesian=TRUE) + +baseConsump = merge(processedFull$com_bal[Item %in% itemDetails$Item & Year == 2013], + processedFull$country_data[, list(Country, Year, population)], + by=c('Country', 'Year')) +baseConsump = baseConsump[, list(Country, Item, baseCpc=food/population, baseFood=food)] + +dt = merge(consumpChange, baseConsump, by=c("Country", "Item"))[, list(Country, Year, Item, SspModel=Model, Scenario, population, cpcAdj, baseCpc, baseFood, cpc=baseCpc*cpcAdj, food=baseCpc*cpcAdj*population)] + +write.table(dt, "~/Download/foodItemProjections.csv", row.names=FALSE, sep=",") + + +# FIGURE PLOT +baseFigDir="~/Downloads" + +compDt=processedFull$histDt[Year <= 2013 & !is.na(cpc) & !is.na(population) & Country %in% getCountryCodes()$Country, list(Country, Year, Item, FAO=cpc*population*avg_fcr_dm_adj)] + +proj=processedFull$projectedConsumption +proj=proj[!is.na(projectedCpc) & !is.na(population) & Country %in% getCountryCodes()$Country, list(Country, Year, Item, Projected=projectedCpc*population*avg_fcr_dm_adj, Model, Scenario)] +projDt=merge(compDt[Year>=2010], proj, by=c('Country', 'Year', 'Item'), all.y=TRUE) +projDt[!is.na(FAO) & is.na(Projected), Projected:=FAO] + +projDt=rbind(projDt[, list(Country, Year, Item, Model, Scenario, Projected)], + projDt[, list(Country="World", Projected=sum(Projected)), by=c('Year', 'Item', 'Model', 'Scenario')]) +compMelt=melt(compDt, id.vars=c('Country', 'Year', 'Item'), variable.name='Type') +allDtToPlot = rbind(compMelt, projDt[, list(Country, Year, Item, + Type=paste(gsub('(SSP[0-9])_.*', '\\1', Scenario), gsub('([A-Z]+) .*', '\\1', Model)), value=Projected)]) + +check=compDt[Country == "World" & Year == 2010] +check + +plotDemandProjections = function(dt, fileName, countries=c("World", "United States of America", "India", "Brazil", "China")) { + dt2 = dt[Country %in% countries] + faoLabel = "Historic (FAO)" + dt2[Type %like% 'OECD', Type:=gsub('(.*) OECD', '\\1 ', Type)] + dt2[Type=="FAO", Type:=faoLabel] + dt2[, Type:=factor(Type, levels=c(faoLabel, sort(unique(as.character(dt2[!Type %in% c(faoLabel)]$Type)))))] + ggplot(dt2, aes(x=Year, y=value, colour=Type, size=Type, linetype=Type, order = Type)) + + geom_line() + facet_grid(Country ~ Item, scale="free") + scale_y_log10() + + # scale_colour_manual(values = c("black", "red", "#FFB72BCC","#FFB72BCC", "#96DA00CC","#96DA00CC", "#00EABECC", "#00EABECC", "#00D9FFCC", "#00D9FFCC", "#F9A3FFCC", "#F9A3FFCC"), guide = guide_legend(nrow = 2)) + # hcl(h=seq(50,290,60), l=c(80), c=100, alpha=0.8) + scale_colour_manual(values = c("black", "red", "#FFB72BCC","#96DA00CC","#00EABECC", "#00D9FFCC", "#F9A3FFCC")) + # hcl(h=seq(50,290,60), l=c(80), c=100, alpha=0.8) + scale_size_manual(values = c(0.55, 0.55, rep(.45,10))) + + # scale_linetype_manual(values = c(rep("solid", 2), rep(c("solid", "dashed"),5))) + with both OECD and IIASA projections + scale_linetype_manual(values = rep("solid", 7)) + + theme_minimal() + + theme(panel.border = element_rect(colour = "grey10", fill=NA, size=0.3), #axis.line = element_line(size = 0.3, colour ="grey10"), + legend.position="bottom", legend.title=element_blank()) + + labs(x="Year", y="Total consumption (Mt dry matter/year)") + + ggsave(file=fileName,width=9,height=9) +} + +plotDemandProjections(allDtToPlot[!Type %like% 'IIASA'], file.path(baseFigDir,"demand_countries_1961_2100.pdf")) diff --git a/altLU/AltLURead.R b/altLU/AltLURead.R index 7ae8be8a5ba73e60d8e90dc76a6164864d447f55..194a59b947eb096e9fd80a60dc34a149e11c5eb0 100644 --- a/altLU/AltLURead.R +++ b/altLU/AltLURead.R @@ -17,13 +17,6 @@ getFeedConvRatio = function(generateRandom=FALSE, lowerB=-0.2, upperB=0.2) { fcrDt } -getItemDetails = function() { - itemDetails = fread(paste0(data_dir_root, "/HALF/itemsInputs.csv")) - itemDetails[, allowedForVeggie:=TRUE] - itemDetails[animal == TRUE & !Item %in% c("Eggs", "Milk - Excluding Butter"), allowedForVeggie:=FALSE] - itemDetails -} - ########## Food supply readFoodSupply = function() { processFoodSupply = function(fao_file) { @@ -306,7 +299,3 @@ con_prod = allocateMeatExports(con_prod) write.table(merge(itemDetails, con_prod[Country == "World" & Year == 2011, list(Item, mj_per_kg, protein_g_per_kg)], by='Item'), "/Users/peteralexander/Documents/LURG/Alt\ Scenarios/figures/items.csv", row.names=FALSE, sep=",") - - -write.table(merge(itemDetails, con_prod[Country == "United Kingdom" & Year == 2011], by='Item'), - "/Users/peteralexander/Documents/LURG/Alt\ Scenarios/figures/UK_con_prod.csv", row.names=FALSE, sep=",")