home · contact · privacy
De-hardcode infections table path from enhance_table.py.
[berlin-corona-table] / enhance_table.py
index 3860ea61b4cc74409718a59b268689043c787d88..2b6bb8dc8ff7fcc4f51cb279a44671294f4a0d79 100755 (executable)
@@ -1,5 +1,11 @@
 #!//usr/bin/env python3
 
+import sys
+if len(sys.argv) != 2:
+    print('Expecting infections table file path as only argument.')
+    exit(1)
+infections_table = sys.argv[1]
+
 # District population numbers as per Wikipedia.
 district_pops = {
   'CW': 342332,
@@ -17,11 +23,11 @@ district_pops = {
   'sum': 3754418,
 }
 
-f = open('daily_infections_table.txt', 'r')
+f = open(infections_table, 'r')
 lines = f.readlines()
 f.close()
 
-# Parse first table file line for the names and order of districts. 
+# Parse first table file line for the names and order of districts.
 db = {}
 sorted_districts = []
 for header in lines[0].split():
@@ -40,11 +46,14 @@ for line in lines[1:]:
         db[district][date] = {'new_infections': int(district_data)}
 sorted_dates.sort()
 
+# In LaGeSo's data, the last "district" is actually the sum of all districts /
+# the whole of Berlin.
+#
 # Fail on any day where the "sum" district's new infections are not the proper
 # sum of the individual districts new infections.  Yes, sometimes Lageso sends
 # data that is troubled in this way.  It will then have to be fixed manually in
 # the table file, since we should have a human look at what mistake was
-# probably made. 
+# probably made.
 for date in sorted_dates:
     sum_district = sorted_districts[-1]
     day_sum = 0
@@ -60,9 +69,9 @@ for i in range(len(sorted_dates)):
     if i < 6:
         continue
     date = sorted_dates[i]
-    week_dates = [] 
+    week_dates = []
     for j in range(7):
-        week_dates += [sorted_dates[i - j]]        
+        week_dates += [sorted_dates[i - j]]
     for district in sorted_districts:
         district_pop = district_pops[district]
         week_sum = 0
@@ -72,6 +81,33 @@ for i in range(len(sorted_dates)):
         db[district][date]['week_average'] = week_sum / 7
         db[district][date]['week_incidence'] = (week_sum / district_pop) * 100000
 
+# Explain what this is.
+intro = """Table of Berlin's Corona infection number development by districts.
+Updated daily around 9pm.
+
+Abbrevations/explanations:
+
+CW: Charlottenburg-Wilmersdorf
+FK: Friedrichshain-Kreuzberg
+Li: Lichtenberg
+MH: Marzahn-Hellersdorf
+Mi: Mitte
+Ne: Neukölln
+Pa: Pankow
+Re: Reinickendorf
+Sp: Spandau
+SZ: Steglitz-Zehlendorf
+TS: Tempelhof-Schöneberg
+TK: Treptow-Köpenick
+sum: sum for all the districts
+wsum: sum for last 7 days
+wavg: per-day average of new infections for last 7 days
+winc: incidence (x per 100k inhabitants) of new infections for last 7 days
+
+Source code: https://plomlompom.com/repos/?p=berlin-corona-table
+"""
+print(intro)
+
 # Output table of enhanced daily infection data, newest on top, separated into
 # 7-day units.
 sorted_dates.reverse()
@@ -82,9 +118,9 @@ for date in sorted_dates:
     if weekday_count == 0:
         print(' '*11, '  '.join(sorted_districts[:-1]),
               sorted_districts[-1], 'wsum', ' wavg', 'winc')
-        week_start_date = date 
+        week_start_date = date
 
-    # Day data line. 
+    # Day data line.
     new_infections = []
     for district in sorted_districts:
         new_infections += [db[district][date]['new_infections']]
@@ -92,13 +128,13 @@ for date in sorted_dates:
     sum_district = sorted_districts[-1]
     sum_district_data = db[sum_district][date]
     if 'week_sum' in sum_district_data:
-        week_sum = '%4s' % sum_district_data['week_sum'] 
+        week_sum = '%4s' % sum_district_data['week_sum']
     if 'week_average' in sum_district_data:
-        week_avg = '%5.1f' % sum_district_data['week_average'] 
+        week_avg = '%5.1f' % sum_district_data['week_average']
     if 'week_incidence' in sum_district_data:
-        week_inc = '%4.1f' % sum_district_data['week_incidence'] 
+        week_inc = '%4.1f' % sum_district_data['week_incidence']
     print(date, ' '.join(['%3s' % infections for infections in new_infections]),
-          week_sum, week_avg, week_inc) 
+          week_sum, week_avg, week_inc)
 
     # Maintain 7-day cycle.
     weekday_count += 1