Initial commit.
authorFrancois Fleuret <francois@fleuret.org>
Mon, 9 Mar 2020 16:07:25 +0000 (17:07 +0100)
committerFrancois Fleuret <francois@fleuret.org>
Mon, 9 Mar 2020 16:07:25 +0000 (17:07 +0100)
covid19.py [new file with mode: 0755]

diff --git a/covid19.py b/covid19.py
new file mode 100755 (executable)
index 0000000..0fd9ecc
--- /dev/null
@@ -0,0 +1,70 @@
+#!/usr/bin/env python
+
+import os, time, math
+import numpy, csv
+import matplotlib.pyplot as plt
+import matplotlib.dates as mdates
+import urllib.request
+
+url = 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Confirmed.csv'
+
+file = 'time_series_19-covid-Confirmed.csv'
+
+######################################################################
+
+if not os.path.isfile(file) or os.path.getmtime(file) < time.time() - 86400:
+    print('Retrieving file')
+    urllib.request.urlretrieve(url, file)
+
+######################################################################
+
+with open(file, newline='') as csvfile:
+    reader = csv.reader(csvfile, delimiter=',')
+    times = []
+    nb_cases = {}
+    time_col = 5
+    for row_nb, row in enumerate(reader):
+        for col_nb, field in enumerate(row):
+            if row_nb >= 1 and col_nb == 1:
+                country = field
+                if not country in nb_cases:
+                    nb_cases[country] = numpy.zeros(len(times))
+                # print(country)
+            if row_nb == 0 and col_nb >= time_col:
+                times.append(time.mktime(time.strptime(field, '%m/%d/%y')))
+            if row_nb == 1 and col_nb == time_col:
+                nb_cases['World'] = numpy.zeros(len(times))
+            if row_nb >= 1:
+                if col_nb >= time_col:
+                    nb_cases['World'][col_nb - time_col] += int(field)
+                    nb_cases[country][col_nb - time_col] += int(field)
+
+######################################################################
+
+fig = plt.figure()
+ax = fig.add_subplot(1, 1, 1)
+
+ax.grid(color='gray', linestyle='-', linewidth=0.25)
+
+ax.set_title('Nb. of COVID-19 cases')
+ax.set_xlabel('Date', labelpad = 10)
+ax.set_yscale('log')
+
+myFmt = mdates.DateFormatter('%b %d')
+ax.xaxis.set_major_formatter(myFmt)
+dates = mdates.epoch2num(times)
+
+for label, color in [ ('World', 'blue'),
+                      ('Switzerland', 'red'),
+                      ('France', 'green'),
+                      ('South Korea', 'gray'),
+                      ('Mainland China', 'orange') ]:
+    ax.plot(dates, nb_cases[label], color = color, label = label)
+
+# ax.legend(loc='center left', bbox_to_anchor=(1, 0.5), frameon = False)
+ax.legend(frameon = False)
+
+plt.show()
+# fig.savefig('covid19.svg')
+
+######################################################################