-
Notifications
You must be signed in to change notification settings - Fork 0
/
absorbtion_data.py
105 lines (73 loc) · 3.77 KB
/
absorbtion_data.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import json
import numpy as np
import random
import trees_data
def load_config(json_file="./green_data/trees_absorption.json"):
with open(json_file, 'r') as file:
config = json.load(file)
return config
def old_tree(time):
# ile CO2 pochłonie jedno 100-letnie drzewo w okreslonym czasie
# time to ilosc dni
old_tree_absorption_const = load_config()["old_tree_absorption"] # kg CO2 rocznie przez 100-letnie drzewo
daily_absorption = old_tree_absorption_const/365
# years_absorption = co2_amount / old_tree_absorption_const
# days_needed = years_absorption * 365 # Zakładamy rok kalendarzowy o 365 dniach
return np.round(daily_absorption * time, 2)
def middle_tree(co2_amount: float):
# ile drzew sredniej wielkości jest w stanie pochłonąac ich emisje w jednym okresie wegetacyjnym.
middle_tree_absorption_in_summer_const = load_config()["middle_tree_absorption"]
middle_tree_count = int(co2_amount / middle_tree_absorption_in_summer_const)
return middle_tree_count
def young_tree(time: int, co2_amount: float):
# ile małych sadzonek byłoby potrzebnych do pochlonięcia wyemitowanych CO2 w danym czasie.
young_tree_absorption = load_config()["young_tree_absorption"] # kg CO2 rocznie
# Obliczanie, ile CO2 pochłonie jedna sadzonka w podanym czasie
young_tree_absorption_in_time = young_tree_absorption/365 * time
# Obliczanie liczby sadzonek potrzebnych do skompensowania podanej ilości CO2 w danym czasie
young_tree_count = int(co2_amount / young_tree_absorption_in_time)
return young_tree_count
def remove_null_values(data):
return {key: value for key, value in data.items() if value['co2_absorpcja'] is not None}
def get_random_key(data):
return random.choice(list(data.keys()))
def parks_absorption(co2_amount: float):
parki_pdf_file_path = "./green_data/Parki.pdf"
parki_data = trees_data.read_pdf_data(parki_pdf_file_path)
parki_df = trees_data.create_parki_df(parki_data)
parki_absorption_file_path = "./green_data/parks_absorption.json"
parki_absorption_data = load_config(parki_absorption_file_path)
filtered_data = remove_null_values(parki_absorption_data)
random_park_name = get_random_key(filtered_data) # Losowy klucz
random_park_data = filtered_data[random_park_name]
number_of_trees = random_park_data['ilosc drzew']
yearly_co2_absorption = random_park_data['co2_absorpcja']
monthly_co2_absrption = yearly_co2_absorption/12
link = random_park_data['link']
filtered_park = parki_df[parki_df['NAZWA PARKU'] == random_park_name]
# Oblicz procent parku potrzebny do zniwelowania CO2
percentage_of_park = np.round((co2_amount / monthly_co2_absrption) * 100, 2)
# Oblicz liczbę drzew potrzebnych do zniwelowania CO2
trees_needed = int((co2_amount / (monthly_co2_absrption / number_of_trees)))
return_data = {'nazwa_parku': random_park_name,
'procent_powierzchni': percentage_of_park,
'potrzebne_drzewa': trees_needed,
'pelna_powierzchnia': None,
'powierznia_potrzebna': None,
'link': link
}
# Sprawdź, czy park istnieje w pliku pdf
if not filtered_park.empty:
park_full_area = float(filtered_park['POW (ha)'].values[0].replace(',', '.'))
park_needed_area = np.round((percentage_of_park/100) * park_full_area, 2)
return_data['pelna_powierzchnia'] = park_full_area
return_data['powierznia_potrzebna'] = park_needed_area
else:
return_data['pelna_powierzchnia'] = 'Brak danych'
return_data['powierznia_potrzebna'] = 'Brak danych'
return return_data
def main():
print(young_tree(30, 5656))
print(parks_absorption(4335))
if __name__ == '__main__':
main()