verschrottungwahrscheinlich.../load_real_data.py
2020-10-15 16:16:28 +02:00

76 lines
3.3 KiB
Python

from calculations import iterate
from calculations import steady_state_population
import pandas as pd
import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt
def real_mortality_distribution(scaling_factor = 1.51) -> np.ndarray:
df = pd.read_excel("input/mortality.xlsx")
mortality = np.array(df.Mortality)
mortality[np.where(mortality>0)[0]] = 0
mortality=np.hstack((mortality, mortality[-1]))
return np.array(-1*mortality)*scaling_factor
def real_population_distribution(fraction_that_is_cars = 0.8413) -> np.ndarray:
df = pd.read_excel("input/age distribution.xlsx")
return np.array(df["Absolute Anzahl "])*fraction_that_is_cars
def population_distribution_deltas(fraction_that_is_cars = 0.8413) -> np.ndarray:
population_distribution = real_population_distribution()
mortality_distribution = real_mortality_distribution()
df = pd.read_excel("input/new registration numbers.xlsx")
years = np.arange(2020, 2031)
new_registrations = np.array(df["scenario without Covid"][1:])*fraction_that_is_cars
steady_state_registrationss = list()
correction_factors = list()
totals = list()
for i in range(len(years)):
steady_state_registrations = iterate(real_mortality_distribution(), population_distribution.copy())[0][0]
correction_factor = new_registrations[i]/steady_state_registrations
correction_factors.append(correction_factor)
population_distribution, _ = iterate(real_mortality_distribution(), population_distribution, fraction_of_new_cars=correction_factor)
totals.append(sum(population_distribution))
steady_state_registrationss.append(steady_state_registrations)
df = pd.DataFrame({"Year": years,
"Predicted Regsitrations": new_registrations,
"Steady State Registrations": steady_state_registrationss,
"Correction Factor": correction_factors,
"Total": totals})
return df
if __name__ == "__main__":
mortality_distribution = real_mortality_distribution()
population_distribution = real_population_distribution()
steady_state_population_distribution = steady_state_population(mortality_distribution,
total_population=sum(population_distribution))
# Plot Age dtribution
if True:
plt.figure()
df = pd.DataFrame({"Age": np.hstack((np.arange(len(mortality_distribution)),
np.arange(len(mortality_distribution)))),
"Data": np.hstack((population_distribution/1e6,
steady_state_population_distribution/1e6)),
"Scenario": np.hstack((["KBA Data"]*len(mortality_distribution),
["Simulated Steady State"]*len(mortality_distribution)))})
plot_ = sns.barplot(data=df, x="Age", y="Data", hue="Scenario")
plt.title("Population Distribution")
plt.ylabel("Vehicles (Millions)")
plt.xlabel("Age (years)")
for ind, label in enumerate(plot_.get_xticklabels()):
if ind % 10 == 0: # every 10th label is kept
label.set_visible(True)
else:
label.set_visible(False)
plt.show()
plt.close()