Added Flop N entries (and time series)
This commit is contained in:
parent
f5f2a05f7e
commit
4fe0302dd8
|
@ -4,11 +4,12 @@
|
||||||
'''
|
'''
|
||||||
:author: Maximilian Golla
|
:author: Maximilian Golla
|
||||||
:contact: maximilian.golla@rub.de
|
:contact: maximilian.golla@rub.de
|
||||||
:version: 0.0.6, 2022-02-03
|
:version: 0.0.7, 2022-02-03
|
||||||
:description: Parses and formats RKI Todesfaelle nach Sterbedatum
|
:description: Parses and formats RKI Todesfaelle nach Sterbedatum
|
||||||
:data: https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Projekte_RKI/COVID-19_Todesfaelle.xlsx
|
:data: https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Projekte_RKI/COVID-19_Todesfaelle.xlsx
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
import copy # deep copy dicts
|
||||||
import sys
|
import sys
|
||||||
import math
|
import math
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
|
@ -96,10 +97,17 @@ def query(data, base, compare, n):
|
||||||
|
|
||||||
# Base must always be later than (<=) compare
|
# Base must always be later than (<=) compare
|
||||||
if b_year > c_year:
|
if b_year > c_year:
|
||||||
print("Invalid query")
|
sys.stderr.write("Invalid query: b_year {} > c_year {}\n".format(b_year, c_year))
|
||||||
return
|
sys.exit(-1)
|
||||||
if b_year == c_year and b_week > c_week:
|
if b_year == c_year and b_week > c_week:
|
||||||
print("Invalid query")
|
sys.stderr.write("Invalid query: b_week {} > c_week {}\n".format(b_week, c_week))
|
||||||
|
sys.exit(-1)
|
||||||
|
return
|
||||||
|
|
||||||
|
# We can not determine more than top / flop 16:
|
||||||
|
if n > len(STATES):
|
||||||
|
sys.stderr.write("Invalid query: n {} > no. of states {}\n".format(n, len(STATES)))
|
||||||
|
sys.exit(-1)
|
||||||
return
|
return
|
||||||
|
|
||||||
# There is no cool way to determine the number of weeks between 202033 and 202119 because of RKI
|
# There is no cool way to determine the number of weeks between 202033 and 202119 because of RKI
|
||||||
|
@ -173,31 +181,52 @@ def query(data, base, compare, n):
|
||||||
print("Change (Percent):")
|
print("Change (Percent):")
|
||||||
print(difference_percent)
|
print(difference_percent)
|
||||||
|
|
||||||
# Get Top N entries
|
|
||||||
|
tmp_top = copy.deepcopy(difference_percent)
|
||||||
|
tmp_flop = copy.deepcopy(difference_percent)
|
||||||
|
|
||||||
|
# Get Top and Flop N entries
|
||||||
top = dict()
|
top = dict()
|
||||||
|
flop = dict()
|
||||||
for i in range(0, n):
|
for i in range(0, n):
|
||||||
max_key = max(difference_percent, key=difference_percent.get)
|
max_key = max(tmp_top, key=tmp_top.get)
|
||||||
top[max_key] = difference_percent[max_key]
|
min_key = min(tmp_flop, key=tmp_flop.get)
|
||||||
del difference_percent[max_key]
|
top[max_key] = tmp_top[max_key]
|
||||||
|
flop[min_key] = tmp_flop[min_key]
|
||||||
|
del tmp_top[max_key]
|
||||||
|
del tmp_flop[min_key]
|
||||||
|
|
||||||
print("\nTop {}:".format(n))
|
print("\nTop {}:".format(n))
|
||||||
print(top)
|
print(top)
|
||||||
|
print("\nFlop {}:".format(n))
|
||||||
|
print(flop)
|
||||||
|
|
||||||
time_series = dict()
|
time_series_top = dict()
|
||||||
|
time_series_flop = dict()
|
||||||
for i in range(0, end + 1):
|
for i in range(0, end + 1):
|
||||||
year = all_entries[i][0:4]
|
year = all_entries[i][0:4]
|
||||||
week = all_entries[i][4:6]
|
week = all_entries[i][4:6]
|
||||||
for state in top:
|
for state in top:
|
||||||
if i >= start:
|
if i >= start:
|
||||||
if year not in time_series:
|
if year not in time_series_top:
|
||||||
time_series[year] = dict()
|
time_series_top[year] = dict()
|
||||||
if week not in time_series[year]:
|
if week not in time_series_top[year]:
|
||||||
time_series[year][week] = dict()
|
time_series_top[year][week] = dict()
|
||||||
if state not in time_series[year][week]:
|
if state not in time_series_top[year][week]:
|
||||||
time_series[year][week][state] = data[year][week][state]
|
time_series_top[year][week][state] = data[year][week][state]
|
||||||
|
for state in flop:
|
||||||
|
if i >= start:
|
||||||
|
if year not in time_series_flop:
|
||||||
|
time_series_flop[year] = dict()
|
||||||
|
if week not in time_series_flop[year]:
|
||||||
|
time_series_flop[year][week] = dict()
|
||||||
|
if state not in time_series_flop[year][week]:
|
||||||
|
time_series_flop[year][week][state] = data[year][week][state]
|
||||||
|
|
||||||
print("\nTime Series:")
|
print("\nTime Series Top:")
|
||||||
output(time_series, top)
|
output(time_series_top, top)
|
||||||
|
print("\nTime Series Flop:")
|
||||||
|
output(time_series_flop, flop)
|
||||||
|
|
||||||
def output(data, states):
|
def output(data, states):
|
||||||
# Print the header
|
# Print the header
|
||||||
|
@ -221,7 +250,7 @@ def main():
|
||||||
output(data, STATES)
|
output(data, STATES)
|
||||||
|
|
||||||
base = "202130"
|
base = "202130"
|
||||||
compare = "202131"
|
compare = "202139"
|
||||||
query(data, base, compare, 5)
|
query(data, base, compare, 5)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
Loading…
Reference in a new issue