Difference between revisions of "Building stock in Helsinki"

From Testiwiki
Jump to: navigation, search
m (Locations of city areas)
(Rationale: initiate rcode split into one-ovariable pieces)
Line 170: Line 170:
 
: Sheet 4_Input Buildings (Area Demand). Priority 1. Auxiliaries PPT. Absolute increase/decrease rate will be based on the inhabitants projected in time.
 
: Sheet 4_Input Buildings (Area Demand). Priority 1. Auxiliaries PPT. Absolute increase/decrease rate will be based on the inhabitants projected in time.
 
: This is another list building types that was considered but rejected as too complex: Residential buildings, Government & public administration buildings, Commercial offices buildings, Data centers buildings, Education and K12 and universitiy buildings, Hospitals and healthcare buildings, Hotels and hospitality and leisure buildings, Exhibitions and fairs and halls buildings, Retail and stores and shops buildings, Warehouses & shopping mall buildings, Industrial buildings, Non residential buildings unspecified.
 
: This is another list building types that was considered but rejected as too complex: Residential buildings, Government & public administration buildings, Commercial offices buildings, Data centers buildings, Education and K12 and universitiy buildings, Hospitals and healthcare buildings, Hotels and hospitality and leisure buildings, Exhibitions and fairs and halls buildings, Retail and stores and shops buildings, Warehouses & shopping mall buildings, Industrial buildings, Non residential buildings unspecified.
 +
 +
<rcode name="stockBuildings" label="Initiate stockBuildings (developers only)" embed=1>
 +
library(OpasnetUtils)
 +
 +
# [[Building stock in Helsinki]], building stock, locations by city area (in A Finnish coordinate system)
 +
#stockBuildings <- Ovariable("stockBuildings", ddata = "Op_en7115.stock_details")
 +
#colnames(stockBuildings@data)[colnames(stockBuildings@data) == "Built"] <- "Time"
 +
#colnames(stockBuildings@data)[colnames(stockBuildings@data) == "Postal code"] <- "City_area"
 +
 +
# [[Building stock in Helsinki]]
 +
dat <- opbase.data("Op_en7115.stock_details")[ , c(
 +
# "Rakennus ID",
 +
"Sijainti",
 +
"Valmistumisaika",
 +
# "Julkisivumateriaali",
 +
"Käyttötarkoitus",
 +
# "Lämmitystapa",
 +
"Polttoaine",
 +
# "Rakennusaine",
 +
# "Varusteena koneellinen ilmanvaihto",
 +
# "Perusparannus",
 +
# "Kunta rakennuttajana",
 +
# "Energiatehokkuusluokka",
 +
# "Varusteena aurinkopaneeli",
 +
# "Tilavuus",
 +
"Result" # Rakennusala m2
 +
)]
 +
 +
colnames(dat) <- c("City_area", "Time", "Building types in Facta", "Heating types in Facta", "stockBuildingsResult")
 +
dat$Time <- as.numeric(substring(dat$Time, nchar(as.character(dat$Time)) - 3))
 +
dat$Time <- as.numeric(as.character((cut(dat$Time, breaks = c(0, 1885 + 0:26*5), labels = as.character(1885 + 0:26*5)))))
 +
dat$stockBuildingsResult <- as.numeric(as.character(dat$stockBuildingsResult))
 +
 +
build <- tidy(opbase.data("Op_en7115.building_types"))
 +
colnames(build)[colnames(build) == "Result"] <- "Building"
 +
 +
heat <- tidy(opbase.data("Op_en7115.heating_types"))
 +
colnames(heat)[colnames(heat) == "Result"] <- "Heating"
 +
 +
######################
 +
# Korjaus
 +
########################
 +
temp <- as.character(heat$Heating)
 +
temp[temp == "District heating"]  <- "District"
 +
temp[temp == "Light oil"]  <- "Oil"
 +
temp[temp == "Fuel oil"]  <- "Oil"
 +
 +
heat$Heating <- temp
 +
########################################
 +
 +
dat <- merge(merge(dat, build), heat)[c("City_area", "Time", "Building", "Heating", "stockBuildingsResult")]
 +
 +
temp <- aggregate(dat["stockBuildingsResult"], by = dat[c("Time", "Building", "Heating")], FUN =sum)
 +
temp <- temp[!is.na(temp$stockBuildingsResult) , ]
 +
 +
stockBuildings <- Ovariable("stockBuildings", data = temp) # Replace Basel building data with Helsinki data
 +
 +
objects.store(stockBuildings)
 +
cat("Ovariable stockBuildings stored.\n")
 +
 +
</rcode>
 +
 +
==== Construction and demolition ====
 +
 +
It is assumed that construction equals 2 % of the existing building stock per year. All new buildings are assumed to be energy efficiency "New". It is assumed that no demolition occurs.
 +
 +
<rcode name="changeBuildings" label="Initiate changeBuildings (developers only)" embed=1>
 +
library(OpasnetUtils)
 +
 +
# Construction rate is assumed to be 2 % /a from the year 2010 building stock.
 +
 +
# changeBuildings is defined as in Basel but only created now to match Helsinki data.
 +
 +
objects.latest("Op_en7115", code_name = "stockBuildings") # [[Building stock in Helsinki]]
 +
 +
changeBuildings <- stockBuildings
 +
changeBuildings@name <- "changeBuildings"
 +
colnames(changeBuildings@data)[colnames(changeBuildings@data) == "stockBuildingsResult"] <- "changeBuildingsResult"
 +
changeBuildings@data$changeBuildingsResult <- changeBuildings@data$changeBuildingsResult * 0.02
 +
changeBuildings@data$Time <- NULL
 +
changeBuildings@data$Efficiency <- "New"
 +
changeBuildings@data <- merge(changeBuildings@data, data.frame(Time = 2015 + 0:7 * 5))
 +
 +
objects.store(changeBuildings)
 +
cat("Ovariable changeBuildings stored.\n")
 +
 +
</rcode>
 +
  
 
==== Renovations ====
 
==== Renovations ====
Line 185: Line 273:
 
</t2b>
 
</t2b>
 
{{attack|# |Basel's data|--[[User:Heta|Heta]] ([[User talk:Heta|talk]]) 12:30, 4 June 2015 (UTC)}}
 
{{attack|# |Basel's data|--[[User:Heta|Heta]] ([[User talk:Heta|talk]]) 12:30, 4 June 2015 (UTC)}}
 +
 +
<rcode name="renovationRate" label="Initiate renovationRate (developers only)" embed=1>
 +
library(OpasnetUtils)
 +
 +
renovationRate <- Ovariable('renovationRate',
 +
dependencies = data.frame(Name = "dummy"),
 +
formula = function(...) {
 +
temp <- tidy(opbase.data('Op_en7115', subset = 'Fraction of houses renovated per year'))
 +
temp$Age <- round(as.numeric(as.character(temp$Age)))
 +
out <- as.data.frame(approx(
 +
temp$Age,
 +
temp$Result,
 +
n = (max(temp$Age) - min(temp$Age) + 1),
 +
method = "constant"
 +
))
 +
colnames(out) <- c("Age", "renovationRateResult")
 +
out$renovationRateResult <- out$renovationRateResult / 100
 +
out <- Ovariable("renovationRate", output = out, marginals = c(TRUE, FALSE))
 +
return(out)
 +
}
 +
)
 +
 +
objects.store(renovationRate)
 +
cat("Object renovationRate stored.\n")
 +
 +
</rcode>
  
 
<t2b name='Popularity of renovation types' index='Renovation' obs='Fraction' desc='Description' unit='%'>
 
<t2b name='Popularity of renovation types' index='Renovation' obs='Fraction' desc='Description' unit='%'>
Line 194: Line 308:
 
</t2b>
 
</t2b>
 
{{attack|# |Basel's data|--[[User:Heta|Heta]] ([[User talk:Heta|talk]]) 12:30, 4 June 2015 (UTC)}}
 
{{attack|# |Basel's data|--[[User:Heta|Heta]] ([[User talk:Heta|talk]]) 12:30, 4 June 2015 (UTC)}}
 +
 +
<rcode name="renovationShares" label="Initiate renovationShares (developers only)" embed=1>
 +
library(OpasnetUtils)
 +
 +
renovationShares <- Ovariable("renovationShares",
 +
dependencies = data.frame(Name = "dummy"),
 +
formula = function(...) {
 +
out <- Ovariable("raw", ddata = 'Op_en7115', subset = 'Popularity of renovation types')
 +
out <- findrest((out), cols = "Renovation", total = 100) / 100
 +
 +
renovationyear <- Ovariable("renovationyear", data = data.frame(
 +
Startyear = factor(c(2030)),
 +
Result = 1
 +
))
 +
 +
out <- out * renovationyear # renovation shares repeated for every potential renovation year.
 +
 +
out@output$Renovation <- factor(out@output$Renovation, levels = c(
 +
"None",
 +
"General",
 +
"Windows",
 +
"Technical systems",
 +
"Sheath reform"
 +
), ordered = TRUE)
 +
 +
return(out)
 +
}
 +
)
 +
 +
objects.store(
 +
renovationShares # Fraction of renovation type when renovation is done.
 +
)
 +
 +
cat("Objects renovationShares stored.\n")
 +
 +
</rcode>
  
 
==== Locations of city areas ====
 
==== Locations of city areas ====
Line 308: Line 458:
 
}}
 
}}
  
=== Calculations ===
+
This code creates technical ovariables emissionLocations and heatingShares that are needed to run the [[Building model]] and its ovariables buildings and heatingEnergy.
  
This code creates ovariables that are needed to run the [[Building model]] and its ovariables buildings and heatingEnergy.
+
<rcode name="emissionLocations" label="Initiate emissionLocations (developers only)" embed=1>
 
<rcode name="initiate" label="Initiate objects (developers only)" embed=1>
 
 
library(OpasnetUtils)
 
library(OpasnetUtils)
 
# [[Building stock in Helsinki]], building stock, locations by city area (in A Finnish coordinate system)
 
#stockBuildings <- Ovariable("stockBuildings", ddata = "Op_en7115.stock_details")
 
#colnames(stockBuildings@data)[colnames(stockBuildings@data) == "Built"] <- "Time"
 
#colnames(stockBuildings@data)[colnames(stockBuildings@data) == "Postal code"] <- "City_area"
 
 
# [[Building stock in Helsinki]]
 
dat <- opbase.data("Op_en7115.stock_details")[ , c(
 
# "Rakennus ID",
 
"Sijainti",
 
"Valmistumisaika",
 
# "Julkisivumateriaali",
 
"Käyttötarkoitus",
 
# "Lämmitystapa",
 
"Polttoaine",
 
# "Rakennusaine",
 
# "Varusteena koneellinen ilmanvaihto",
 
# "Perusparannus",
 
# "Kunta rakennuttajana",
 
# "Energiatehokkuusluokka",
 
# "Varusteena aurinkopaneeli",
 
# "Tilavuus",
 
"Result" # Rakennusala m2
 
)]
 
 
colnames(dat) <- c("City_area", "Time", "Building types in Facta", "Heating types in Facta", "stockBuildingsResult")
 
dat$Time <- as.numeric(substring(dat$Time, nchar(as.character(dat$Time)) - 3))
 
dat$Time <- as.numeric(as.character((cut(dat$Time, breaks = c(0, 1885 + 0:26*5), labels = as.character(1885 + 0:26*5)))))
 
dat$stockBuildingsResult <- as.numeric(as.character(dat$stockBuildingsResult))
 
 
build <- tidy(opbase.data("Op_en7115.building_types"))
 
colnames(build)[colnames(build) == "Result"] <- "Building"
 
 
heat <- tidy(opbase.data("Op_en7115.heating_types"))
 
colnames(heat)[colnames(heat) == "Result"] <- "Heating"
 
 
######################
 
# Korjaus
 
########################
 
temp <- as.character(heat$Heating)
 
temp[temp == "District heating"]  <- "District"
 
temp[temp == "Light oil"]  <- "Oil"
 
temp[temp == "Fuel oil"]  <- "Oil"
 
 
heat$Heating <- temp
 
########################################
 
 
dat <- merge(merge(dat, build), heat)[c("City_area", "Time", "Building", "Heating", "stockBuildingsResult")]
 
 
temp <- aggregate(dat["stockBuildingsResult"], by = dat[c("Time", "Building", "Heating")], FUN =sum)
 
temp <- temp[!is.na(temp$stockBuildingsResult) , ]
 
 
stockBuildings <- Ovariable("stockBuildings", data = temp) # Replace Basel building data with Helsinki data
 
 
# Construction rate is assumed to be 2 % /a from the year 2010 building stock.
 
 
# changeBuildings is defined as in Basel but only created now to match Helsinki data.
 
 
changeBuildings <- stockBuildings
 
changeBuildings@name <- "changeBuildings"
 
colnames(changeBuildings@data)[colnames(changeBuildings@data) == "stockBuildingsResult"] <- "changeBuildingsResult"
 
changeBuildings@data$changeBuildingsResult <- changeBuildings@data$changeBuildingsResult * 0.02
 
changeBuildings@data$Time <- NULL
 
changeBuildings@data <- merge(changeBuildings@data, data.frame(Time = 2015 + 0:7 * 5))
 
 
# Geolocations of the buildings for emission calculations. OLD VERSION
 
# emissionLocations <- Ovariable("emissionLocations", ddata = "Op_en7115.locations_of_postal_codes")
 
# colnames(emissionLocations@data)[colnames(emissionLocations@data) == "emissionLocationsResult"] <- "Y"
 
# emissionLocations@data$emissionLocationsResult <- 1
 
  
 
emissionLocations <- Ovariable("emissionLocations", ddata = "Op_en7115", subset = "Emission locations")  
 
emissionLocations <- Ovariable("emissionLocations", ddata = "Op_en7115", subset = "Emission locations")  
Line 390: Line 469:
 
heatingShares <- 1 # This is already in the Basel data.
 
heatingShares <- 1 # This is already in the Basel data.
  
renovationRate <- Ovariable('renovationRate',
+
objects.store(emissionLocations, heatingShares)
dependencies = data.frame(Name = "dummy"),
+
cat("Objects emissionsLocations, heatingShares stored.\n")
formula = function(...) {
 
temp <- tidy(opbase.data('Op_en7115', subset = 'Fraction of houses renovated per year'))
 
temp$Age <- round(as.numeric(as.character(temp$Age)))
 
out <- as.data.frame(approx(
 
temp$Age,
 
temp$Result,
 
n = (max(temp$Age) - min(temp$Age) + 1),
 
method = "constant"
 
))
 
colnames(out) <- c("Age", "renovationRateResult")
 
out$renovationRateResult <- out$renovationRateResult / 100
 
out <- Ovariable("renovationRate", output = out, marginals = c(TRUE, FALSE))
 
return(out)
 
}
 
)
 
 
 
renovationShares <- Ovariable("renovationShares",
 
dependencies = data.frame(Name = "dummy"),
 
formula = function(...) {
 
out <- Ovariable("raw", ddata = 'Op_en7115', subset = 'Popularity of renovation types')
 
out <- findrest((out), cols = "Renovation", total = 100) / 100
 
 
 
renovationyear <- Ovariable("renovationyear", data = data.frame(
 
Startyear = factor(c(2030)),
 
Result = 1
 
))
 
 
 
out <- out * renovationyear # renovation shares repeated for every potential renovation year.
 
 
 
out@output$Renovation <- factor(out@output$Renovation, levels = c(
 
"None",
 
"General",
 
"Windows",
 
"Technical systems",
 
"Sheath reform"
 
), ordered = TRUE)
 
 
 
return(out)
 
}
 
)
 
 
 
objects.store(
 
stockBuildings, # Current building stock
 
changeBuildings, # Building stock change per year
 
emissionLocations, # Locations of buildings and emissions
 
heatingShares, # Heating types of current buildings
 
renovationRate, # Percentage of renovations per year
 
renovationShares # Fraction of renovation type when renovation is done. From [[Building stock in Kuopio]]
 
)
 
 
 
cat("Objects
 
stockBuildings,
 
changeBuildings,
 
emissionLocations,
 
heatingShares,
 
renovationRate,
 
renovationShares
 
stored.\n")
 
  
 
</rcode>
 
</rcode>

Revision as of 20:00, 10 June 2015



During Decision analysis and risk management 2015 course, this page was used to collect student contributions. To see them, look at an archived version. The page has since been updated for its main use. Data in the archived tables was moved: Table 2. Energy parametres of buildings, Table 4. Energy sinks, Table 5. Changes in energy efficiency, Table 6. Important energy parametres. Tables 3, 7, and 8 did not contain data and were removed.

Question

What is the building stock in Helsinki and its projected future?

Answer

Error creating thumbnail: Unable to save thumbnail to destination

+ Show code

Rationale

Data

Building stock

These tables are based on FACTA database classifications and their interpretation for assessments. This data is used for modelling. The data is large and can be seen from Show results

(Stock details). Technical parts on this page are hidden for readability.



The structures of the tables are based on CyPT Excel file N:\YMAL\Projects\ilmastotiekartta\Helsinki Data Input Template - Building Data.xlsx.

Effective floor area of buildings by building type.
Building Baseline 2020 2025 2050 Year of baseline Description
Residential 27884795 32472388 34890241 44069914 2014 Building stock of Helsinki area, 2014
Public 4537025 4764475 4945952 5855546 2014 Building stock of Helsinki area, 2014
Industrial 3277271 3306063 3360467 3640854 2014 Building stock of Helsinki area, 2014
Other 10861972 11406505 11840973 13806423 2014 Building stock of Helsinki area, 2014
Notes
  • Estimates were based on Siemens City Performance toolin seuraava kokous 2.2 and some derived calculations on BUILDING STOCK CALCULATION 2015.
  • How to get the numbers for the baseline floor area for residential, public, industrial and other: Residential floor area was named as residential together, public by summing the floor area of health care, education and common buildings, industrial buildings were as such and other buildings comprise of business, traffic, office and storage buildings.
  • Ref. Helsinki master plan for 2050: there are 860 000 citizens living in Helsinki (ref. www.yleiskaava.fi, visio2050); Residental buildings => fast growth
  • Prediction of citizen number in Helsinki in 2020, 2030, 2040 and 2050 was used for calculations (ref. Helsingin 30% päästövähennysselvitys).
  • Helsinki’s climate policy: 30% reduction in emissions: In 2010 the proportion of jobs in services and public sectors was 94%, and in industry 6%. In 2020 the proportion of jobs in services and public sectors is estimated to be 96%, and in industry 4%. Public and other buildings => between fast growth option and basic option, Industry=> Basic option
  • Prediction of job number in Helsinki in 2020, 2030, 2040 and 2050 was used for calculations (ref. Helsingin 30% päästövähennysselvitys).
  • Tables one and two The presentation of Tables 1 and 2
  • Estimates for floor area development are asked from Alpo Tani (KSV) and Olli-Pekka Pietiläinen (SYKE) as well (26.5.). No answers yet.

Technical notes:

Sheet 4_Input Buildings (Area Demand). Priority 1. Auxiliaries PPT. Absolute increase/decrease rate will be based on the inhabitants projected in time.
This is another list building types that was considered but rejected as too complex: Residential buildings, Government & public administration buildings, Commercial offices buildings, Data centers buildings, Education and K12 and universitiy buildings, Hospitals and healthcare buildings, Hotels and hospitality and leisure buildings, Exhibitions and fairs and halls buildings, Retail and stores and shops buildings, Warehouses & shopping mall buildings, Industrial buildings, Non residential buildings unspecified.

+ Show code

Construction and demolition

It is assumed that construction equals 2 % of the existing building stock per year. All new buildings are assumed to be energy efficiency "New". It is assumed that no demolition occurs.

+ Show code


Renovations

Estimates from Laura Perez and Stephan Trüeb, unibas.ch N:\YMAL\Projects\Urgenche\WP9 Basel\Energy_scenarios_Basel_update.docx

Fraction of houses renovated per year(%)
ObsAgeResultDescription
100Estimates from Laura Perez and Stephan Trüeb
2200Assumption Result applies to buildings older than the value in the Age column.
3251
4301
5501
61001
710001

# : Basel's data --Heta (talk) 12:30, 4 June 2015 (UTC)

+ Show code

Popularity of renovation types(%)
ObsRenovationFractionDescription
1None0
2Windows65
3Technical systems30
4Sheath reform5
5General0

# : Basel's data --Heta (talk) 12:30, 4 June 2015 (UTC)

+ Show code

Locations of city areas

Locations of city areas (hidden for readability).



This code creates technical ovariables emissionLocations and heatingShares that are needed to run the Building model and its ovariables buildings and heatingEnergy.

+ Show code

See also

Helsinki energy decision 2015
In English
Assessment Main page | Helsinki energy decision options 2015
Helsinki data Building stock in Helsinki | Helsinki energy production | Helsinki energy consumption | Energy use of buildings | Emission factors for burning processes | Prices of fuels in heat production | External cost
Models Building model | Energy balance | Health impact assessment | Economic impacts
Related assessments Climate change policies in Helsinki | Climate change policies and health in Kuopio | Climate change policies in Basel
In Finnish
Yhteenveto Helsingin energiapäätös 2015 | Helsingin energiapäätöksen vaihtoehdot 2015 | Helsingin energiapäätökseen liittyviä arvoja | Helsingin energiapäätös 2015.pptx

References


Related files