From 38bc9e6355b93664a596a7dc2588443ff12dfe5b Mon Sep 17 00:00:00 2001 From: Jakob Rosenberger Date: Fri, 22 Jul 2022 12:05:57 +0200 Subject: [PATCH] initial commit --- main.py | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 main.py diff --git a/main.py b/main.py new file mode 100644 index 0000000..f074d3e --- /dev/null +++ b/main.py @@ -0,0 +1,98 @@ +import csv +import math +import random +import matplotlib.pyplot as plt +class Mensch(object): + def __init__(self): + #toImplement + def getCoordinates(self, bdl): + bdlDict = {'Vorarlberg': [0, 0], 'Tirol': [1, 0], 'Kärnten': [2, 0], 'Salzburg': [0, 1], + 'Steiermark': [1, 1], 'Burgenland': [2, 1], 'Oberösterreich': [0, 2], + 'Niederösterreich': [1, 2], 'Wien': [2, 2]} + return [int(bdlDict[bdl][0]) + random.random(), int(bdlDict[bdl][1]) + random.random()] + def die(self): + #toImplement + def infect(self, day): + #toImplement + #Distanz = math.sqrt((self.Koordinaten[0] - Population[randIndex].Koordinaten[0]) * (self.Koordinaten[0] - Population[randIndex].Koordinaten[0]) + (self.Koordinaten[1] - Population[randIndex].Koordinaten[1]) * (self.Koordinaten[1] - Population[randIndex].Koordinaten[1])) +class Simulation(object): + def __init__(self, population): + self.Population = population + def simulate(self): + #toImplement + # Visualisierung + # Scatter Plot + x_inf = [] + y_inf = [] + x_fit = [] + y_fit = [] + for human in Population: + if (human.Infiziert): + x_inf.append(human.Koordinaten[0]) + y_inf.append(human.Koordinaten[1]) + else: + x_fit.append(human.Koordinaten[0]) + y_fit.append(human.Koordinaten[1]) + plt.title("Population") + plt.scatter(x_inf, y_inf, c="red", s=5) + plt.scatter(x_fit, y_fit, c="blue", s=2) + plt.draw() + if (i % 5 == 0): + plt.savefig('result/populationOnDay' + str(i) + '.png') + plt.pause(0.0001) + plt.clf() +if __name__ == '__main__': + print("Generate Population:") + Populationsfaktor = 0.01 + AnteilFrauen = 0.507 + Population = [] + bevAnzahl = 0 + bevDict = {} + gebDict = {} + gestDict = {} + #read data from Statistik Austria + with open('./data/Bevölkerung.csv') as bevoelkerung: + csv_reader = csv.reader(bevoelkerung, delimiter = ';') + rowcnt = 0 + for row in csv_reader: + rowcnt = rowcnt + 1 + if rowcnt == 2: + bevAnzahl = int(int(row[-1])*Populationsfaktor) + if rowcnt > 2: + bevDict[row[0]] = row[-1] + with open('./data/Geburten2021.csv') as geburten: + csv_reader = csv.reader(geburten, delimiter=';') + rowcnt = 0 + for row in csv_reader: + rowcnt = rowcnt + 1 + if rowcnt > 2: + gebDict[row[0]] = [row[-2], row[-1]] + with open('./data/Gestorbene2021.csv') as gestorbene: + csv_reader = csv.reader(gestorbene, delimiter=';') + rowcnt = 0 + for row in csv_reader: + rowcnt = rowcnt + 1 + if rowcnt > 2: + gestDict[row[0]] = [row[-2], row[-1]] + print(bevDict) + print(gebDict) + print(gestDict) + print(bevAnzahl) + print(random.random()) + for i in range(int(bevAnzahl)): + gender = 1 + if(random.random()>0.507): + gender = 0 + age = random.randint(0, 101) + bdl = "" + randBdl = random.random() + BdlCount = 0 + for key in bevDict.keys(): + BdlCount += int(bevDict[key]) + checkWlsk = (BdlCount*Populationsfaktor)/int(bevAnzahl) + if(randBdl < checkWlsk): + bdl = str(key) + break + Population.append(Mensch(age, gender, bdl)) + Simulation = Simulation(Population) + Simulation.simulate()