Skip to content

Commit

Permalink
Merge remote-tracking branch 'refs/remotes/origin/main' into develop
Browse files Browse the repository at this point in the history
# Conflicts:
#	src/main/java/org/matsim/vsp/freight/food/RunFood.java
  • Loading branch information
rewertvsp committed Nov 23, 2024
2 parents a3daecb + 4e39b53 commit 372e6cd
Show file tree
Hide file tree
Showing 14 changed files with 697 additions and 55 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<parent>
<groupId>org.matsim</groupId>
<artifactId>matsim-all</artifactId>
<version>2025.0-2024w36</version>
<version>2025.0-2024w46</version>
<!-- <version>2025.0-PR3245</version>-->
<!-- <version>2025.0-SNAPSHOT</version>-->
<relativePath/>
Expand Down
170 changes: 170 additions & 0 deletions src/main/R/KaiMT/FoodResults_Data_multiDir_Hbefa.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
##Fasse ERgebnisse aus den verschiedenen Runs zusammen
## KMT Okt'24

####TODOS
# - Prüfen, dass das Umwandlung in Tabelle für LaTex gut klappt, ggf. Infos anpassen
# - ggf. Rundung der Werte
# -aufs Jahr hochrechnen???



# #setwd("C:/git-and-svn/shared-svn/projects/freight/studies/UpdateEventsfromEarlierStudies/foodRetailing_wo_rangeConstraint/71_ICEVBEV_NwCE_BVWP_10000it_DCoff_noTax/analysis")
# EFood <- FALSE
setwd("C:/git-and-svn/shared-svn/projects/freight/studies/UpdateEventsfromEarlierStudies/foodRetailing_with_rangeConstraint/")
EFood <- FALSE


# Install and load necessary packages
if (!requireNamespace("tidyverse", quietly = TRUE)) {
install.packages("tidyverse")
}
if (!requireNamespace("plotly", quietly = TRUE)) {
install.packages("plotly")
}
if (!requireNamespace("gridExtra", quietly = TRUE)) {
install.packages("gridExtra")
}
library(tidyverse)
library(plotly)
library(gridExtra)
library(tibble)

pollutants2WriteExhaust <- c("Scenario", "CO", "CO2_TOTAL", "NOx", "PM", "PM2_5", "BC_exhaust")
pollutants2WriteNonExhaust <- c("Scenario", "PM_non_exhaust", "PM2_5_non_exhaust", "BC_non_exhaust")


# Hauptverzeichnis, in dem sich die Unterordner befinden
main_dir <- getwd()

# Pfad zum spezifischen Referenzordner
referenz_ordner <- "C:/git-and-svn/shared-svn/projects/freight/studies/UpdateEventsfromEarlierStudies/foodRetailing_wo_rangeConstraint/71a_ICEV_NwCE_BVWP_10000it_DCoff_noTax/"

# Liste der Unterordner im Hauptverzeichnis
subdirs <- list.dirs(main_dir, full.names = TRUE, recursive = FALSE)
subdirs <- subdirs[subdirs != referenz_ordner] #Referenzordner soll da nicht drin sein

# Initialisiere einen leeren Dataframe, um die kombinierten Daten zu speichern
kombinierte_daten <- data.frame()

# Lese die Referenzdaten aus dem spezifischen Referenzordner
file_path_referenz <- file.path(referenz_ordner, "Analysis", "1_emissions", "emissionsPerPollutant.csv")


# Überprüfe, ob die Referenzdatei existiert und lese sie ein
if (file.exists(file_path_referenz)) {
referenzdaten_org <- read.csv(file_path_referenz, sep = ";")

# Füge eine Spalte "ScenarioLang" hinzu und setze den Namen des Referenzordners
referenzdaten_org$ScenarioLang <- basename(referenz_ordner)

# Speichere die Referenzdaten als erste Zeile im kombinierten DataFrame
kombinierte_daten <- referenzdaten_org
} else {
stop(paste("Referenzdatei nicht gefunden in:", file_path_referenz))
}



# Durchlaufe alle Unterordner und lies all die Daten ein.
for (subdir in subdirs) {

# Erstelle den genauen Pfad zur gewünschten CSV-Datei
file_path_emissions <- file.path(subdir, "Analysis", "1_emissions", "emissionsPerPollutant.csv")


## Emissions einlesen
if (file.exists(file_path_emissions)) {
df_emissions_org <- read.csv(file_path_emissions, sep = ";")

df_emissions <- df_emissions_org # Erstmal nur eine Kopie davon in der dann gearbeitet wird.

# Füge eine Spalte "ScenarioLang" hinzu und weise ihr den Namen des aktuellen Unterordners zu
df_emissions$ScenarioLang <- basename(subdir)


# Füge die Daten zum kombinierten Dataframe hinzu
kombinierte_daten <- rbind(kombinierte_daten, df_emissions)


} else {
message(paste("Datei nicht gefunden in:", subdir, file_path_emissions))
}

} ## For Schleife

### Etwas aufräumen:
# Entferne die Spalte "Run"
kombinierte_daten <- kombinierte_daten[, !names(kombinierte_daten) %in% c("Run")]
# Bringe die Spalte "ScenarioLang" an die erste Stelle
kombinierte_daten <- kombinierte_daten[, c("ScenarioLang", setdiff(names(kombinierte_daten), "ScenarioLang"))]

# Erstelle die neue Spalte "Scenario": setze "Base Case", wenn es das Referenzszenario ist, sonst den Teil nach dem letzten Unterstrich
kombinierte_daten$Scenario <- ifelse(
kombinierte_daten$ScenarioLang == basename(referenz_ordner),
"Base Case",
sub(".*_", "", kombinierte_daten$ScenarioLang) # Extrahiert den Teil nach dem letzten Unterstrich
)

# Bringe die Spalte "Scenario" an die zweite Stelle
kombinierte_daten <- kombinierte_daten[, c("ScenarioLang", "Scenario", setdiff(names(kombinierte_daten), c("ScenarioLang", "Scenario")))]


head(kombinierte_daten)


### Relative Änderungen berechnen.
#Funktion um relativeÄnderungen zu berechnen
calcRelChanges <- function(data){
# Erhalte die numerischen Spalten im kombinierten DataFrame
numerische_spalten <- sapply(data, is.numeric)

# Extrahiere die Referenzdaten aus dem kombinierten DataFrame
referenzdaten <- data[data$ScenarioLang == basename(referenz_ordner), numerische_spalten]

# Gehe durch alle Szenarien außer dem Referenzszenario und berechne die relative Änderung
for (i in which(data$ScenarioLang != basename(referenz_ordner))) {
for (col in names(data)[numerische_spalten]) {
abs_wert <- as.numeric(data[i, col]) # Sicherstellen, dass es numerisch ist
ref_wert <- as.numeric(referenzdaten[[col]]) # Sicherstellen, dass es numerisch ist

# Überprüfen, ob abs_wert und ref_wert numerisch sind
if (is.na(abs_wert) || is.na(ref_wert)) {
data[i, col] <- "NA"
} else if (ref_wert == 0) { # Bei Referenzwert 0 soll das speziell gehandelt werden
data[i, col] <- paste(abs_wert, " ( -- %)", sep = "")
} else { # Alles gut, rechne und füge hinzu.
rel_aenderung <- round(((abs_wert - ref_wert) / ref_wert) * 100, 1)
data[i, col] <- paste(abs_wert, " (", rel_aenderung, "%)", sep = "")
}
}
}
data <- data
}




#Funktion zum Schreiben des Outputs
write_output <- function(output_file, dataframe) {
cat("Erstma nur die ExhaustEmissions\n\n", file = output_file, append = TRUE)
write.table(dataframe %>% select(all_of(pollutants2WriteExhaust)), file = output_file, sep = ";", row.names = FALSE, col.names = TRUE, append = TRUE)
cat("\n\nUnd nun noch die Non-exhaustEmissions\n\n", file = output_file, append = TRUE)
write.table(dataframe %>% select(all_of(pollutants2WriteNonExhaust)), file = output_file, sep = ";", row.names = FALSE, col.names = TRUE, append = TRUE)
#Und nochmal alle Daten
write.table(dataframe, file = sub("\\.csv$", "_all.csv", output_file), sep = ";", row.names = FALSE, col.names = TRUE)
}


####Berechne relative Änderungen und schreibe es raus
kombinierte_daten_g <- kombinierte_daten
write_output("Emissions_g.csv", calcRelChanges(kombinierte_daten_g))


###Nun noch Umrechnung von g in kg und Ausgabe dessen
kombinierte_daten_kg <- kombinierte_daten
numerische_spalten <- sapply(kombinierte_daten_kg, is.numeric) # Identifiziere alle numerischen Spalten im Dataframe
kombinierte_daten_kg[numerische_spalten] <- kombinierte_daten_kg[numerische_spalten] / 1000

write_output("Emissions_kg.csv", calcRelChanges(kombinierte_daten_kg))
#head(kombinierte_daten_kg)

211 changes: 211 additions & 0 deletions src/main/R/KaiMT/FoodResults_Data_multiDir_Vehicles.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,211 @@
##Fasse die Ergebnisse aus den verschiedenen Runs zusammen
## Anzahl Fzg und vkm
## KMT Okt'24

#### Erweiterungen FZG
# Ausgabe der km in csv-DAtei ist noch offen
# - Das dann mal abgleichen mit aktueller Variante in Diss

#### Erweiterungen W2w --> basierend auf der Grundlage hier
# - basierend auf vkm je typ mit Faktoren je Fzg-Typ mutliplizieren
# - Aufs Jahr hochrechnen?
# - für die Strommixe anpassen als eigene cases.


# #setwd("C:/git-and-svn/shared-svn/projects/freight/studies/UpdateEventsfromEarlierStudies/foodRetailing_wo_rangeConstraint/71_ICEVBEV_NwCE_BVWP_10000it_DCoff_noTax/analysis")
# EFood <- FALSE
setwd("C:/git-and-svn/shared-svn/projects/freight/studies/UpdateEventsfromEarlierStudies/foodRetailing_with_rangeConstraint/")
EFood <- FALSE


# Install and load necessary packages
if (!requireNamespace("tidyverse", quietly = TRUE)) {
install.packages("tidyverse")
}
if (!requireNamespace("plotly", quietly = TRUE)) {
install.packages("plotly")
}
if (!requireNamespace("gridExtra", quietly = TRUE)) {
install.packages("gridExtra")
}
library(tidyverse)
library(plotly)
library(gridExtra)
library(tibble)

# Hauptverzeichnis, in dem sich die Unterordner befinden
main_dir <- getwd()

# Pfad zum spezifischen Referenzordner
referenz_ordner <- "C:/git-and-svn/shared-svn/projects/freight/studies/UpdateEventsfromEarlierStudies/foodRetailing_wo_rangeConstraint/71a_ICEV_NwCE_BVWP_10000it_DCoff_noTax/"

# Liste der Unterordner im Hauptverzeichnis
subdirs <- list.dirs(main_dir, full.names = TRUE, recursive = FALSE)
subdirs <- subdirs[subdirs != referenz_ordner] #Referenzordner soll da nicht drin sein

# Initialisiere einen leeren Dataframe, um die kombinierten Daten zu speichern
kombinierte_daten <- data.frame()

# Lese die Referenzdaten aus dem spezifischen Referenzordner
file_path_referenz <- file.path(referenz_ordner, "Analysis", "TimeDistance_perVehicleType.tsv")


# Überprüfe, ob die Referenzdatei existiert und lese sie ein
if (file.exists(file_path_referenz)) {
referenzdaten_org <- read_delim(file_path_referenz, show_col_types = FALSE)

# Füge eine Spalte "ScenarioLang" hinzu und setze den Namen des Referenzordners
referenzdaten_org$ScenarioLang <- basename(referenz_ordner)

# Speichere die Referenzdaten als erste Zeile im kombinierten DataFrame
kombinierte_daten <- referenzdaten_org
} else {
stop(paste("Referenzdatei nicht gefunden in:", file_path_referenz))
}



# Durchlaufe alle Unterordner und lies all die Daten ein.
for (subdir in subdirs) {

# Erstelle den genauen Pfad zur gewünschten CSV-Datei
file_path_datei <- file.path(subdir, "Analysis", "TimeDistance_perVehicleType.tsv")


## Emissions einlesen
if (file.exists(file_path_datei)) {
df_vehTypes_org <- read_delim(file_path_datei, show_col_types = FALSE)

df_vehTypes <- df_vehTypes_org # Erstmal nur eine Kopie davon in der dann gearbeitet wird.

# Füge eine Spalte "ScenarioLang" hinzu und weise ihr den Namen des aktuellen Unterordners zu
df_vehTypes$ScenarioLang <- basename(subdir)


# Füge die Daten zum kombinierten Dataframe hinzu
kombinierte_daten <- rbind(kombinierte_daten, df_vehTypes)


} else {
message(paste("Datei nicht gefunden in:", subdir, file_path_datei))
}

} ## For Schleife

# Entferne Leerzeichen am Anfang und Ende der Spaltennamen (scheint hier u.a. bei den vehiclTypeId so gewesen zu sein)
names(kombinierte_daten) <- trimws(names(kombinierte_daten))

#function to create categories
create_vehicle_categories <- function(data) {
data <- data %>%
mutate(vehicleCategory = ifelse(vehicleTypeId %in% c("light8t", "light8t_frozen"), yes = "7.5t",
no = ifelse(vehicleTypeId %in% c("light8t_electro", "light8t_frozen_electro", "light8t_electro_large_Quantron", "light8t_frozen_electro_large_Quantron", "light8t_electro_small_Mitsubishi", "light8t_frozen_electro_small_Mitsubishi"), yes = "7.5t_electro",
no = ifelse(vehicleTypeId %in% c("medium18t", "medium18t_frozen"), yes = "18t",
no = ifelse(vehicleTypeId %in% c("medium18t_electro", "medium18t_electro", "medium18t_electro_large_Volvo", "medium18t_electro_small_Renault"), yes = "18t_electro",
no = ifelse(vehicleTypeId %in% c("heavy26t", "heavy26t_frozen"), yes = "26t",
no = ifelse(vehicleTypeId %in% c("heavy26t_electro", "heavy26t_frozen_electro", "heavy26t_electro_large_Daimler", "heavy26t_frozen_electro_large_Daimler", "heavy26t_electro_small_Volvo", "heavy26t_frozen_electro_small_Volvo"), yes = "26t_electro",
no = ifelse(vehicleTypeId %in% c("heavy40t", "heavy40t_frozen"), yes = "40t",
no = ifelse(vehicleTypeId %in% c("heavy40t_electro", "heavy40t_frozen_electro", "heavy40t_electro_large_Scania", "heavy40t_electro_small_Daimler"), yes = "40t_electro",
no = as.character(vehicleTypeId))))))))))
}

#Nur die Fahrzeuggröße -> d.h. egal ob elektro oder nicht.
create_vehicle_sizeClass <- function(data) {
data <- data %>%
mutate(sizeClass = sub("_.*", "", vehicleCategory))

}

### Finde raus, ob es ein BEV oder ICEV ist.
create_vehicle_engineType <- function(data) {
data <- data %>%
mutate(engineType = ifelse(is.na(vehicleCategory) | vehicleCategory == "",
NA, # Falls vehicleCategory leer oder NA ist, setze den Wert auf NA
ifelse(grepl("_electro", vehicleCategory), "BEV", "ICEV"))) # Wenn "_electro" enthalten, BEV, sonst ICEV.

}

kombinierte_daten <- create_vehicle_categories(kombinierte_daten)
kombinierte_daten <- create_vehicle_sizeClass(kombinierte_daten)
kombinierte_daten <- create_vehicle_engineType(kombinierte_daten)

### Etwas aufräumen:

# Entferne die Spalte "Run"
kombinierte_daten <- kombinierte_daten[, !names(kombinierte_daten) %in% c("Run")]
# Bringe die Spalte "ScenarioLang" an die erste Stelle
kombinierte_daten <- kombinierte_daten[, c("ScenarioLang", setdiff(names(kombinierte_daten), "ScenarioLang"))]

# Erstelle die neue Spalte "Scenario": setze "Base Case", wenn es das Referenzszenario ist, sonst den Teil nach dem letzten Unterstrich
kombinierte_daten$Scenario <- ifelse(
kombinierte_daten$ScenarioLang == basename(referenz_ordner),
"Base Case",
sub(".*_", "", kombinierte_daten$ScenarioLang) # Extrahiert den Teil nach dem letzten Unterstrich
)

# Bringe die Spalte "Scenario" an die zweite Stelle
kombinierte_daten <- kombinierte_daten[, c("ScenarioLang", "Scenario", setdiff(names(kombinierte_daten), c("ScenarioLang", "Scenario")))]


head(kombinierte_daten)

# Group by Scenario, SizeClass, and engineType, then summarize the number of vehicles
summarized_data_vehicles <- kombinierte_daten %>%
group_by(Scenario, sizeClass, engineType) %>%
summarize(sumedValue = sum(nuOfVehicles, na.rm = TRUE)) %>%
ungroup()

summarized_data_km <- kombinierte_daten %>%
group_by(Scenario, sizeClass, engineType) %>%
summarize(sumedValue = sum(`SumOfTravelDistances[km]`, na.rm = TRUE)) %>%
ungroup()

# Function to reshape data and calculate sums
reshape_and_calculate_sums <- function(data) {
reshaped_data <- data %>%
unite("SizeClass_engineType", sizeClass, engineType, sep = "_") %>%
spread(key = SizeClass_engineType, value = sumedValue, fill = 0) %>%
mutate(
BEV_Total = rowSums(select(., contains("_BEV")), na.rm = TRUE),
ICEV_Total = rowSums(select(., contains("_ICEV")), na.rm = TRUE),
Total = BEV_Total + ICEV_Total
)
return(reshaped_data)
}

reshaped_data_vehicles <- reshape_and_calculate_sums(summarized_data_vehicles)
reshaped_data_km <- reshape_and_calculate_sums(summarized_data_km)

# View the updated reshaped data
print(reshaped_data_vehicles)
print(reshaped_data_km)

# Round all numeric values in the reshaped_data_km data frame to whole numbers
reshaped_data_km <- reshaped_data_km %>%
mutate(across(where(is.numeric), ~ round(.x, digits = 0)))

#### Ausgabe:
# Define the desired order of scenarios
scenario_order <- c("Base Case", "noTax", "Tax25", "Tax50", "Tax100", "Tax150", "Tax200", "Tax250", "Tax300")

reorderRows <- function (data, order) {
data <- data %>%
mutate(Scenario = factor(Scenario, levels = order)) %>%
arrange(Scenario)
}

reshaped_data_vehicles <- reorderRows(reshaped_data_vehicles, scenario_order)
reshaped_data_km <- reorderRows(reshaped_data_km, scenario_order)

# Define the desired order of columns
column_order <- c("Scenario", "7.5t_ICEV", "7.5t_BEV", "18t_ICEV", "18t_BEV", "26t_ICEV", "26t_BEV", "40t_ICEV", "40t_BEV", "ICEV_Total", "BEV_Total", "Total")

#Funktion zum Schreiben des Outputs
write_output_kmt <- function(output_file, dataframe) {
cat("Summen über die jeweiligen Szenarien \n\n", file = output_file, append = TRUE)
write.table(dataframe %>% select(all_of(column_order)), file = output_file, sep = ";", row.names = FALSE, col.names = TRUE, append = TRUE)
}

write_output_kmt("vehiclesPerType_Anzahl.csv", reshaped_data_vehicles)
write_output_kmt("vehiclesPerType_km.csv", reshaped_data_km)

Loading

0 comments on commit 372e6cd

Please sign in to comment.