 bondscell_results j$251c06e4-fc77-11ea-1a0f-73139ba11e83queued¤logsrunning¦outputbody<div class="markdown"><p>However, we should always be wary about visualisations such as these. Perhaps we should be plotting cases per capita instead of absolute numbers of cases. Or should we divide by the area of the country? Some countries, such as China and Canada, are divided into states or regions in the original data set – but others, such as the US, are not. You should always check exactly what is being plotted&#33; </p>
<p>Unfortunately, published visualisations often hide some of  this information. This emphasises the need to be able to get our hands on the data, create our own visualisations and draw our own conclusions.</p>
</div>mimetext/htmlrootassigneelast_run_timestampA;persist_js_state·has_pluto_hook_features§cell_id$251c06e4-fc77-11ea-1a0f-73139ba11e83depends_on_disabled_cells§runtime X)published_object_keysdepends_on_skipped_cells§errored$68f76d3b-b398-459d-bf39-20bf300dcaa2queued¤logsrunning¦outputbodyprefixStringelements "Afghanistan"text/plain"Albania"text/plain"Algeria"text/plain"Andorra"text/plain"Angola"text/plain"Antarctica"text/plain"Antigua and Barbuda"text/plain"Argentina"text/plain	"Armenia"text/plain
"Australia"text/plain"Australia"text/plain"Australia"text/plain"Australia"text/plain"Australia"text/plain"Australia"text/plain"Australia"text/plain"Australia"text/plain"Austria"text/plain"Azerbaijan"text/plain"Bahamas"text/plainmore"Uruguay"text/plain"Uzbekistan"text/plain"Vanuatu"text/plain"Venezuela"text/plain"Vietnam"text/plain"West Bank and Gaza"text/plain"Winter Olympics 2022"text/plain"Yemen"text/plain "Zambia"text/plain!"Zimbabwe"text/plaintypeArrayprefix_shortobjectid753d811beaab27f4mime!application/vnd.pluto.tree+objectrootassigneeall_countrieslast_run_timestampA,persist_js_state·has_pluto_hook_features§cell_id$68f76d3b-b398-459d-bf39-20bf300dcaa2depends_on_disabled_cells§runtimeSQpublished_object_keysdepends_on_skipped_cells§errored$8990f13a-fc35-11ea-338f-0955eeb23c3cqueued¤logsrunning¦outputbody<div class="markdown"><p>Here we have used an <strong>anonymous function</strong> with the syntax <code>x -&gt; ⋯</code>. This is a function which takes the argument <code>x</code> and returns whatever is on the right of the arrow &#40;<code>-&gt;</code>&#41;.</p>
</div>mimetext/htmlrootassigneelast_run_timestampA persist_js_state·has_pluto_hook_features§cell_id$8990f13a-fc35-11ea-338f-0955eeb23c3cdepends_on_disabled_cells§runtime `published_object_keysdepends_on_skipped_cells§errored$b3880f40-fc36-11ea-074a-edc51adeb6f0queued¤logsrunning¦outputbody1<div class="markdown"><h2>Using dates</h2>
</div>mimetext/htmlrootassigneelast_run_timestampA*gpersist_js_state·has_pluto_hook_features§cell_id$b3880f40-fc36-11ea-074a-edc51adeb6f0depends_on_disabled_cells§runtime [published_object_keysdepends_on_skipped_cells§errored$25c79620-14f4-45a7-b120-05ec72cb77e9queued¤logsrunning¦outputbodydateformat"m/d/Y"mimetext/plainrootassigneedate_formatlast_run_timestampA]-persist_js_state·has_pluto_hook_features§cell_id$25c79620-14f4-45a7-b120-05ec72cb77e9depends_on_disabled_cells§runtime [Upublished_object_keysdepends_on_skipped_cells§errored$0f87cec6-fc31-11ea-23d2-395e61f38b6fqueued¤logsrunning¦outputbodyD<div class="markdown"><h1>Module 2: Epidemic propagation</h1>
</div>mimetext/htmlrootassigneelast_run_timestampAMpersist_js_state·has_pluto_hook_features§cell_id$0f87cec6-fc31-11ea-23d2-395e61f38b6fdepends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$893a417c-fcea-11ea-38f4-1df639c54cbcqueued¤logsrunning¦outputbodyy+<script>
var elem = document.getElementById("map");
elem.mapbox.getSource('points').setData({"features":[{"properties":{"size":0.0},"geometry":{"coordinates":[67.709953,33.93911],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[20.1683,41.1533],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[1.6596,28.0339],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[1.5218,42.5063],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[17.8739,-11.2027],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[23.347,-71.9499],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-61.7964,17.0608],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-63.6167,-38.4161],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[45.0382,40.0691],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[149.0124,-35.4735],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[151.2093,-33.8688],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[130.8456,-12.4634],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[153.0251,-27.4698],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[138.6007,-34.9285],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[147.3272,-42.8821],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[144.9631,-37.8136],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[115.8605,-31.9505],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[14.5501,47.5162],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[47.5769,40.1431],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-78.035889,25.025885],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[50.55,26.0275],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[90.3563,23.685],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-59.5432,13.1939],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[27.9534,53.7098],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[4.469936,50.8333],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-88.4976,17.1899],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[2.3158,9.3077],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[90.4336,27.5142],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-63.5887,-16.2902],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[17.6791,43.9159],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[24.6849,-22.3285],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-51.9253,-14.235],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[114.7277,4.5353],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[25.4858,42.7339],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-1.5616,12.2383],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[95.956,21.9162],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[29.9189,-3.3731],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-23.0418,16.5388],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[104.9167,11.55],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[11.5021,3.848],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-116.5765,53.9333],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-127.6476,53.7267],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[0.0,0.0],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[0.0,0.0],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-98.8139,53.7609],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-66.4619,46.5653],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-57.6604,53.1355],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-124.8457,64.8255],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-63.7443,44.682],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-83.1076,70.2998],"type":"Point"},"type":"Feature"},{"properties":{"size":0.6020599913279624},"geometry":{"coordinates":[-85.3232,51.2538],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-63.4168,46.5107],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-73.5491,52.9399],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[null,null],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-106.4509,52.9399],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-135.0,64.2823],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[20.9394,6.6111],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[18.7322,15.4542],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-71.543,-35.6751],"type":"Point"},"type":"Feature"},{"properties":{"size":1.806179973983887},"geometry":{"coordinates":[117.2264,31.8257],"type":"Point"},"type":"Feature"},{"properties":{"size":1.806179973983887},"geometry":{"coordinates":[116.4142,40.1824],"type":"Point"},"type":"Feature"},{"properties":{"size":0.9542425094393249},"geometry":{"coordinates":[107.874,30.0572],"type":"Point"},"type":"Feature"},{"properties":{"size":1.2041199826559248},"geometry":{"coordinates":[117.9874,26.0789],"type":"Point"},"type":"Feature"},{"properties":{"size":0.6020599913279624},"geometry":{"coordinates":[104.2861,35.7518],"type":"Point"},"type":"Feature"},{"properties":{"size":1.5563025007672873},"geometry":{"coordinates":[113.4244,23.3417],"type":"Point"},"type":"Feature"},{"properties":{"size":0.9542425094393249},"geometry":{"coordinates":[108.7881,23.8298],"type":"Point"},"type":"Feature"},{"properties":{"size":0.6020599913279624},"geometry":{"coordinates":[106.8748,26.8154],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[109.7453,19.1959],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[116.1306,39.549],"type":"Point"},"type":"Feature"},{"properties":{"size":0.6020599913279624},"geometry":{"coordinates":[127.7615,47.862],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[114.9042,37.8957],"type":"Point"},"type":"Feature"},{"properties":{"size":0.6020599913279624},"geometry":{"coordinates":[114.2,22.3],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[112.2707,30.9756],"type":"Point"},"type":"Feature"},{"properties":{"size":1.3979400086720377},"geometry":{"coordinates":[111.7088,27.6104],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[113.9448,44.0935],"type":"Point"},"type":"Feature"},{"properties":{"size":1.2041199826559248},"geometry":{"coordinates":[119.455,32.9711],"type":"Point"},"type":"Feature"},{"properties":{"size":1.3979400086720377},"geometry":{"coordinates":[115.7221,27.614],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[126.1923,43.6661],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[122.6085,41.2956],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[113.55,22.1667],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[106.1655,37.2692],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[95.9956,35.7452],"type":"Point"},"type":"Feature"},{"properties":{"size":0.9542425094393249},"geometry":{"coordinates":[108.8701,35.1917],"type":"Point"},"type":"Feature"},{"properties":{"size":1.2041199826559248},"geometry":{"coordinates":[118.1498,36.3427],"type":"Point"},"type":"Feature"},{"properties":{"size":1.6901960800285136},"geometry":{"coordinates":[121.4491,31.202],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[112.2922,37.5777],"type":"Point"},"type":"Feature"},{"properties":{"size":0.9542425094393249},"geometry":{"coordinates":[102.7103,30.6171],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[117.323,39.3054],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[88.0924,31.6927],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[null,null],"type":"Point"},"type":"Feature"},{"properties":{"size":0.6020599913279624},"geometry":{"coordinates":[85.2401,41.1129],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[101.487,24.974],"type":"Point"},"type":"Feature"},{"properties":{"size":2.4608978427565478},"geometry":{"coordinates":[120.0934,29.1832],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-74.2973,4.5709],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[43.3333,-11.6455],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[15.8277,-0.228],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[21.7587,-4.0383],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-83.7534,9.7489],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-5.5471,7.54],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[15.2,45.1],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-77.781167,21.521757],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[33.4299,35.1264],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[15.473,49.8175],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-6.9118,61.8926],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-42.6043,71.7069],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[9.5018,56.2639],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[0.0,0.0],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[42.5903,11.8251],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-61.371,15.415],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-70.1627,18.7357],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-78.1834,-1.8312],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[30.802498,26.820553],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-88.8965,13.7942],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[10.2679,1.6508],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[39.7823,15.1794],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[25.0136,58.5953],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[31.4659,-26.5225],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[40.4897,9.145],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[178.065,-17.7134],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[25.748151,61.92411],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-53.1258,3.9339],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[149.4068,-17.6797],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-61.551,16.265],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-61.0242,14.6415],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[45.166244,-12.8275],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[165.618042,-20.904305],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[55.5364,-21.1151],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-62.8333,17.9],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-56.3159,46.8852],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-63.0501,18.0708],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-178.1165,-14.2938],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[2.2137,46.2276],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[11.6094,-0.8037],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-15.3101,13.4432],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[43.3569,42.3154],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[10.451526,51.165691],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-1.0232,7.9465],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[21.8243,39.0742],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-61.679,12.1165],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-90.2308,15.7835],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-9.6966,9.9456],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-15.1804,11.8037],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-58.93018,4.860416],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-72.2852,18.9712],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[12.4534,41.9029],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-86.2419,15.2],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[19.5033,47.1625],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-19.0208,64.9631],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[78.96288,20.593684],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[113.9213,-0.7893],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[53.688046,32.427908],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[43.679291,33.223191],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-7.6921,53.1424],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[34.851612,31.046051],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[12.56738,41.87194],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-77.2975,18.1096],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[138.252924,36.204824],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[36.51,31.24],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[66.9237,48.0196],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[37.9062,-0.0236],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-168.734,-3.3704],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[127.5101,40.3399],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[127.766922,35.907757],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[20.902977,42.602636],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[47.481766,29.31166],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[74.766098,41.20438],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[102.495496,19.85627],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[24.6032,56.8796],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[35.8623,33.8547],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[28.2336,-29.61],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-9.429499,6.428055],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[17.228331,26.3351],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[9.55,47.14],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[23.8813,55.1694],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[6.1296,49.8153],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[0.0,0.0],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[46.869107,-18.766947],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[34.3015,-13.2543],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[101.975766,4.210484],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[73.2207,3.2028],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-3.996166,17.570692],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[14.3754,35.9375],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[171.1845,7.1315],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-10.9408,21.0079],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[57.552152,-20.348404],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-102.5528,23.6345],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[150.5508,7.4256],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[28.3699,47.4116],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[7.4167,43.7333],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[103.8467,46.8625],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[19.37439,42.708678],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-7.0926,31.7917],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[35.529562,-18.665695],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[18.4904,-22.9576],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[166.9315,-0.5228],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[84.25,28.1667],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-69.9683,12.5211],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-68.2385,12.1784],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-68.99,12.1696],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-63.0548,18.0425],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[5.2913,52.1326],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-159.7777,-21.2367],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-169.8672,-19.0544],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[174.886,-40.9006],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-85.207229,12.865416],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[8.081666,17.607789],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[8.6753,9.082],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[21.7453,41.6086],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[8.4689,60.472],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[55.923255,21.512583],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[69.3451,30.3753],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[134.5825,7.515],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-80.7821,8.538],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[143.95555,-6.314993],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-58.4438,-23.4425],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-75.0152,-9.19],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[121.774017,12.879721],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[19.1451,51.9194],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-8.2245,39.3999],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[51.1839,25.3548],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[24.9668,45.9432],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[105.318756,61.52401],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[29.8739,-1.9403],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-62.782998,17.357822],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-60.9789,13.9094],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-61.2872,12.9843],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-172.1046,-13.759],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[12.4578,43.9424],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[6.6131,0.1864],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[45.079162,23.885942],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-14.4524,14.4974],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[21.0059,44.0165],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[55.492,-4.6796],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-11.779889,8.460555],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[103.8333,1.2833],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[19.699,48.669],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[14.9955,46.1512],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[160.1562,-9.6457],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[46.199616,5.152149],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[22.9375,-30.5595],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[31.307,6.877],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-3.74922,40.463667],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[80.771797,7.873054],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[30.2176,12.8628],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[139.7737,35.6491],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-56.0278,3.9193],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[18.643501,60.128161],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[8.2275,46.8182],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[38.996815,34.802075],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[121.0,23.7],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[71.2761,38.861],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[34.888822,-6.369028],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[100.992541,15.870032],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[125.727539,-8.874217],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[0.8248,8.6195],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-175.1982,-21.179],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-61.2225,10.6918],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[9.537499,33.886917],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[35.2433,38.9637],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[177.6493,-7.1095],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-100.0,40.0],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[32.290275,1.373333],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[31.1656,48.3794],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[53.847818,23.424076],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-63.0686,18.2206],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-64.7505,32.3078],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-64.64,18.4207],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-81.2546,19.3133],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-2.3644,49.3723],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-59.5236,-51.7963],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-5.3536,36.1408],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-2.58949,49.448196],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-4.5481,54.2361],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-2.1358,49.2138],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-62.187366,16.742498],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-128.3242,-24.3768],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-14.3559,-7.9467],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-71.7979,21.694],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-3.436,55.3781],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-55.7658,-32.5228],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[64.585262,41.377491],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[166.9592,-15.3767],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[-66.5897,6.4238],"type":"Point"},"type":"Feature"},{"properties":{"size":0.6020599913279624},"geometry":{"coordinates":[108.277199,14.058324],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[35.2332,31.9522],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[116.4074,39.9042],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[48.516388,15.552727],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[27.849332,-13.133897],"type":"Point"},"type":"Feature"},{"properties":{"size":0.0},"geometry":{"coordinates":[29.154857,-19.015438],"type":"Point"},"type":"Feature"}],"type":"FeatureCollection"})
</script>
mimetext/htmlrootassigneelast_run_timestampA}9persist_js_state·has_pluto_hook_features§cell_id$893a417c-fcea-11ea-38f4-1df639c54cbcdepends_on_disabled_cells§runtime;>published_object_keysdepends_on_skipped_cells§errored$252eff18-fc3d-11ea-0c18-7b130ada882equeued¤logsrunning¦outputbody<div class="markdown"><p>A visual check for this is to plot the data with a <strong>logarithmic scale</strong> on the <span class="tex">$y$</span> axis &#40;but a standard scale on the <span class="tex">$x$</span> axis&#41;.</p>
<p>The reason for this is that if we observe a straight line on such a semi-logarithmic plot, we have</p>
<p class="tex">$$\log&#40;y&#41; \sim ax &#43; b,$$</p>
<p>where we are using <span class="tex">$\sim$</span> to denote approximate equality.</p>
<p>Hence, taking exponentials of both sides, we have</p>
<p class="tex">$$y \sim \exp&#40;ax &#43; b&#41; &#61; c \, e^&#123;ax&#125;,$$</p>
<p>for some constant <span class="tex">$c$</span>.</p>
</div>mimetext/htmlrootassigneelast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$252eff18-fc3d-11ea-0c18-7b130ada882edepends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$c939a87a-fcdc-11ea-29dd-c1f6dd3de88fqueued¤logsrunning¦outputbody+set_points (generic function with 1 method)mimetext/plainrootassigneelast_run_timestampAk5Dpersist_js_state·has_pluto_hook_features§cell_id$c939a87a-fcdc-11ea-29dd-c1f6dd3de88fdepends_on_disabled_cells§runtime 7published_object_keysdepends_on_skipped_cells§errored$a41db8ea-f0e0-461f-a298-bdcea42a67f3queued¤logsrunning¦outputbody;<div><div style = "float: left;"><span>DataFrameRow (1147 columns)</span></div><div style = "float: right;"><span style = "font-style: italic;">1047 columns omitted</span></div><div style = "clear: both;"></div></div><div class = "data-frame" style = "overflow-x: scroll;"><table class = "data-frame" style = "margin-bottom: 6px;"><thead><tr class = "header"><th class = "rowLabel" style = "font-weight: bold; text-align: right;">Row</th><th style = "text-align: left;">province</th><th style = "text-align: left;">country</th><th style = "text-align: left;">latitude</th><th style = "text-align: left;">longitude</th><th style = "text-align: left;">1/22/20</th><th style = "text-align: left;">1/23/20</th><th style = "text-align: left;">1/24/20</th><th style = "text-align: left;">1/25/20</th><th style = "text-align: left;">1/26/20</th><th style = "text-align: left;">1/27/20</th><th style = "text-align: left;">1/28/20</th><th style = "text-align: left;">1/29/20</th><th style = "text-align: left;">1/30/20</th><th style = "text-align: left;">1/31/20</th><th style = "text-align: left;">2/1/20</th><th style = "text-align: left;">2/2/20</th><th style = "text-align: left;">2/3/20</th><th style = "text-align: left;">2/4/20</th><th style = "text-align: left;">2/5/20</th><th style = "text-align: left;">2/6/20</th><th style = "text-align: left;">2/7/20</th><th style = "text-align: left;">2/8/20</th><th style = "text-align: left;">2/9/20</th><th style = "text-align: left;">2/10/20</th><th style = "text-align: left;">2/11/20</th><th style = "text-align: left;">2/12/20</th><th style = "text-align: left;">2/13/20</th><th style = "text-align: left;">2/14/20</th><th style = "text-align: left;">2/15/20</th><th style = "text-align: left;">2/16/20</th><th style = "text-align: left;">2/17/20</th><th style = "text-align: left;">2/18/20</th><th style = "text-align: left;">2/19/20</th><th style = "text-align: left;">2/20/20</th><th style = "text-align: left;">2/21/20</th><th style = "text-align: left;">2/22/20</th><th style = "text-align: left;">2/23/20</th><th style = "text-align: left;">2/24/20</th><th style = "text-align: left;">2/25/20</th><th style = "text-align: left;">2/26/20</th><th style = "text-align: left;">2/27/20</th><th style = "text-align: left;">2/28/20</th><th style = "text-align: left;">2/29/20</th><th style = "text-align: left;">3/1/20</th><th style = "text-align: left;">3/2/20</th><th style = "text-align: left;">3/3/20</th><th style = "text-align: left;">3/4/20</th><th style = "text-align: left;">3/5/20</th><th style = "text-align: left;">3/6/20</th><th style = "text-align: left;">3/7/20</th><th style = "text-align: left;">3/8/20</th><th style = "text-align: left;">3/9/20</th><th style = "text-align: left;">3/10/20</th><th style = "text-align: left;">3/11/20</th><th style = "text-align: left;">3/12/20</th><th style = "text-align: left;">3/13/20</th><th style = "text-align: left;">3/14/20</th><th style = "text-align: left;">3/15/20</th><th style = "text-align: left;">3/16/20</th><th style = "text-align: left;">3/17/20</th><th style = "text-align: left;">3/18/20</th><th style = "text-align: left;">3/19/20</th><th style = "text-align: left;">3/20/20</th><th style = "text-align: left;">3/21/20</th><th style = "text-align: left;">3/22/20</th><th style = "text-align: left;">3/23/20</th><th style = "text-align: left;">3/24/20</th><th style = "text-align: left;">3/25/20</th><th style = "text-align: left;">3/26/20</th><th style = "text-align: left;">3/27/20</th><th style = "text-align: left;">3/28/20</th><th style = "text-align: left;">3/29/20</th><th style = "text-align: left;">3/30/20</th><th style = "text-align: left;">3/31/20</th><th style = "text-align: left;">4/1/20</th><th style = "text-align: left;">4/2/20</th><th style = "text-align: left;">4/3/20</th><th style = "text-align: left;">4/4/20</th><th style = "text-align: left;">4/5/20</th><th style = "text-align: left;">4/6/20</th><th style = "text-align: left;">4/7/20</th><th style = "text-align: left;">4/8/20</th><th style = "text-align: left;">4/9/20</th><th style = "text-align: left;">4/10/20</th><th style = "text-align: left;">4/11/20</th><th style = "text-align: left;">4/12/20</th><th style = "text-align: left;">4/13/20</th><th style = "text-align: left;">4/14/20</th><th style = "text-align: left;">4/15/20</th><th style = "text-align: left;">4/16/20</th><th style = "text-align: left;">4/17/20</th><th style = "text-align: left;">4/18/20</th><th style = "text-align: left;">4/19/20</th><th style = "text-align: left;">4/20/20</th><th style = "text-align: left;">4/21/20</th><th style = "text-align: left;">4/22/20</th><th style = "text-align: left;">4/23/20</th><th style = "text-align: left;">4/24/20</th><th style = "text-align: left;">4/25/20</th><th style = "text-align: left;">4/26/20</th><th style = "text-align: right;">&ctdot;</th></tr><tr class = "subheader headerLastRow"><th class = "rowLabel" style = "font-weight: bold; text-align: right;"></th><th title = "Union{Missing, String}" style = "text-align: left;">String?</th><th title = "String" style = "text-align: left;">String</th><th title = "Union{Missing, Float64}" style = "text-align: left;">Float64?</th><th title = "Union{Missing, Float64}" style = "text-align: left;">Float64?</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Int64" style = "text-align: right;">&ctdot;</th></tr></thead><tbody><tr><td class = "rowLabel" style = "font-weight: bold; text-align: right;">261</td><td style = "font-style: italic; text-align: left;">missing</td><td style = "text-align: left;">US</td><td style = "text-align: right;">40.0</td><td style = "text-align: right;">-100.0</td><td style = "text-align: right;">1</td><td style = "text-align: right;">1</td><td style = "text-align: right;">2</td><td style = "text-align: right;">2</td><td style = "text-align: right;">5</td><td style = "text-align: right;">5</td><td style = "text-align: right;">5</td><td style = "text-align: right;">6</td><td style = "text-align: right;">6</td><td style = "text-align: right;">8</td><td style = "text-align: right;">8</td><td style = "text-align: right;">8</td><td style = "text-align: right;">11</td><td style = "text-align: right;">11</td><td style = "text-align: right;">11</td><td style = "text-align: right;">12</td><td style = "text-align: right;">12</td><td style = "text-align: right;">12</td><td style = "text-align: right;">12</td><td style = "text-align: right;">12</td><td style = "text-align: right;">13</td><td style = "text-align: right;">13</td><td style = "text-align: right;">14</td><td style = "text-align: right;">14</td><td style = "text-align: right;">14</td><td style = "text-align: right;">14</td><td style = "text-align: right;">14</td><td style = "text-align: right;">14</td><td style = "text-align: right;">14</td><td style = "text-align: right;">14</td><td style = "text-align: right;">16</td><td style = "text-align: right;">16</td><td style = "text-align: right;">16</td><td style = "text-align: right;">16</td><td style = "text-align: right;">16</td><td style = "text-align: right;">16</td><td style = "text-align: right;">17</td><td style = "text-align: right;">17</td><td style = "text-align: right;">25</td><td style = "text-align: right;">32</td><td style = "text-align: right;">55</td><td style = "text-align: right;">74</td><td style = "text-align: right;">107</td><td style = "text-align: right;">184</td><td style = "text-align: right;">237</td><td style = "text-align: right;">403</td><td style = "text-align: right;">519</td><td style = "text-align: right;">594</td><td style = "text-align: right;">782</td><td style = "text-align: right;">1147</td><td style = "text-align: right;">1586</td><td style = "text-align: right;">2219</td><td style = "text-align: right;">2978</td><td style = "text-align: right;">3212</td><td style = "text-align: right;">4679</td><td style = "text-align: right;">6512</td><td style = "text-align: right;">9169</td><td style = "text-align: right;">13663</td><td style = "text-align: right;">20030</td><td style = "text-align: right;">26025</td><td style = "text-align: right;">34944</td><td style = "text-align: right;">46096</td><td style = "text-align: right;">56714</td><td style = "text-align: right;">68841</td><td style = "text-align: right;">86662</td><td style = "text-align: right;">105253</td><td style = "text-align: right;">127417</td><td style = "text-align: right;">143544</td><td style = "text-align: right;">165698</td><td style = "text-align: right;">192079</td><td style = "text-align: right;">227903</td><td style = "text-align: right;">260183</td><td style = "text-align: right;">292630</td><td style = "text-align: right;">324340</td><td style = "text-align: right;">353117</td><td style = "text-align: right;">385110</td><td style = "text-align: right;">415256</td><td style = "text-align: right;">446500</td><td style = "text-align: right;">482526</td><td style = "text-align: right;">516707</td><td style = "text-align: right;">545693</td><td style = "text-align: right;">571551</td><td style = "text-align: right;">598794</td><td style = "text-align: right;">627306</td><td style = "text-align: right;">653669</td><td style = "text-align: right;">683351</td><td style = "text-align: right;">716508</td><td style = "text-align: right;">743857</td><td style = "text-align: right;">768888</td><td style = "text-align: right;">799531</td><td style = "text-align: right;">825478</td><td style = "text-align: right;">855445</td><td style = "text-align: right;">887523</td><td style = "text-align: right;">919014</td><td style = "text-align: right;">949640</td><td style = "text-align: right;">975537</td><td style = "text-align: right;">&ctdot;</td></tr></tbody></table></div>mimetext/htmlrootassigneelast_run_timestampA秛persist_js_state·has_pluto_hook_features§cell_id$a41db8ea-f0e0-461f-a298-bdcea42a67f3depends_on_disabled_cells§runtime4zpublished_object_keysdepends_on_skipped_cells§errored$a29c8ad0-fc4a-11ea-14c7-71435769b73equeued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA蟭persist_js_state·has_pluto_hook_features§cell_id$a29c8ad0-fc4a-11ea-14c7-71435769b73edepends_on_disabled_cells§runtime Qɵpublished_object_keysdepends_on_skipped_cells§errored$4e4cca22-fc4c-11ea-12ae-2b51545799ecqueued¤logsrunning¦outputbodymsg"UndefVarError: scatter not definedstacktracecall_shorttop-level scopeinlined£urlpathf/home/runner/work/disorganised-mess/disorganised-mess/covid.jl#==#4e4cca22-fc4c-11ea-12ae-2b51545799ecsource_packagecalltop-level scopelinfo_typeNothinglinefile0covid.jl#==#4e4cca22-fc4c-11ea-12ae-2b51545799ecfunctop-level scopeparent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneelast_run_timestampANpersist_js_state·has_pluto_hook_features§cell_id$4e4cca22-fc4c-11ea-12ae-2b51545799ecdepends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$f8e754ee-fc73-11ea-0c7f-cdc760ab3e94queued¤logsrunning¦outputbodyٛ<div class="markdown"><p>Now we would like to combine the geographical and temporal &#40;time&#41; aspects. One way to do so is to animate time:</p>
</div>mimetext/htmlrootassigneelast_run_timestampASpersist_js_state·has_pluto_hook_features§cell_id$f8e754ee-fc73-11ea-0c7f-cdc760ab3e94depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$c2da1f88-fcdb-11ea-0b18-bf801c373a73queued¤logsrunning¦outputbodyi<data controls='' src='https://api.mapbox.com/mapbox-gl-js/v1.12.0/mapbox-gl.css' type='text/css'></data>mimetext/htmlrootassigneelast_run_timestampACpersist_js_state·has_pluto_hook_features§cell_id$c2da1f88-fcdb-11ea-0b18-bf801c373a73depends_on_disabled_cells§runtime @BHpublished_object_keysdepends_on_skipped_cells§errored$687409a2-fc43-11ea-03e0-d9a7a48165a8queued¤logsrunning¦outputbodys<div class="markdown"><p>Let&#39;s zoom on the part where the growth seems linear on this semi-log plot:</p>
</div>mimetext/htmlrootassigneelast_run_timestampAUpersist_js_state·has_pluto_hook_features§cell_id$687409a2-fc43-11ea-03e0-d9a7a48165a8depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$b4264196-fcdc-11ea-2197-512f8363a4d3queued¤logsrunning¦outputbody.make_features (generic function with 1 method)mimetext/plainrootassigneelast_run_timestampA^Spersist_js_state·has_pluto_hook_features§cell_id$b4264196-fcdc-11ea-2197-512f8363a4d3depends_on_disabled_cells§runtime PIpublished_object_keysdepends_on_skipped_cells§errored$a8b2db96-fc30-11ea-2eea-b938a3a430fbqueued¤logsrunning¦outputbody٬<div class="markdown"><p>We see that the correct spelling is <code>&quot;US&quot;</code>. &#40;And note how the different provinces of the UK are separated.&#41;</p>
</div>mimetext/htmlrootassigneelast_run_timestampA n۰persist_js_state·has_pluto_hook_features§cell_id$a8b2db96-fc30-11ea-2eea-b938a3a430fbdepends_on_disabled_cells§runtime &published_object_keysdepends_on_skipped_cells§errored$67eebb7e-fc36-11ea-03ef-bd6966487bb5queued¤logsrunning¦outputbodyj<div class="markdown"><p>Now we can extract the data into a standard Julia <code>Vector</code>:</p>
</div>mimetext/htmlrootassigneelast_run_timestampA *persist_js_state·has_pluto_hook_features§cell_id$67eebb7e-fc36-11ea-03ef-bd6966487bb5depends_on_disabled_cells§runtime Tpublished_object_keysdepends_on_skipped_cells§errored$511eb51e-fc38-11ea-0492-19532da809dequeued¤logsrunning¦outputbody?<div class="markdown"><h2>Exploratory data analysis</h2>
</div>mimetext/htmlrootassigneelast_run_timestampA,persist_js_state·has_pluto_hook_features§cell_id$511eb51e-fc38-11ea-0492-19532da809dedepends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$9ee79840-30ff-4c92-97f4-e178caceceafqueued¤logsrunning¦outputbodyprefixBoolelements falsetext/plainfalsetext/plainfalsetext/plainfalsetext/plainfalsetext/plainfalsetext/plainfalsetext/plainfalsetext/plain	falsetext/plain
falsetext/plainfalsetext/plainfalsetext/plainfalsetext/plainfalsetext/plainfalsetext/plainfalsetext/plainfalsetext/plainfalsetext/plainfalsetext/plainfalsetext/plainmoretruetext/plaintruetext/plainfalsetext/plainfalsetext/plainfalsetext/plainfalsetext/plainfalsetext/plainfalsetext/plain falsetext/plain!falsetext/plaintypeArrayprefix_shortobjectidd37b6822a7ef255bmime!application/vnd.pluto.tree+objectrootassigneeU_countrieslast_run_timestampA̍Gpersist_js_state·has_pluto_hook_features§cell_id$9ee79840-30ff-4c92-97f4-e178caceceafdepends_on_disabled_cells§runtimelpublished_object_keysdepends_on_skipped_cells§errored$5c1ec9ae-fc2e-11ea-397d-937c7ab1edb2queued¤logsrunning¦outputbody<bond def="i" unique_id="nshu5jMUQi/C"><input type='range' min='1' max='201' value='1'><script>
					const input_el = currentScript.previousElementSibling
					const output_el = currentScript.nextElementSibling
					const displays = ["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", "102", "103", "104", "105", "106", "107", "108", "109", "110", "111", "112", "113", "114", "115", "116", "117", "118", "119", "120", "121", "122", "123", "124", "125", "126", "127", "128", "129", "130", "131", "132", "133", "134", "135", "136", "137", "138", "139", "140", "141", "142", "143", "144", "145", "146", "147", "148", "149", "150", "151", "152", "153", "154", "155", "156", "157", "158", "159", "160", "161", "162", "163", "164", "165", "166", "167", "168", "169", "170", "171", "172", "173", "174", "175", "176", "177", "178", "179", "180", "181", "182", "183", "184", "185", "186", "187", "188", "189", "190", "191", "192", "193", "194", "195", "196", "197", "198", "199", "200", "201"]

					let update_output = () => {
						output_el.value = displays[input_el.valueAsNumber - 1]
					}
					
					input_el.addEventListener("input", update_output)
					// We also poll for changes because the `input_el.value` can change from the outside, e.g. https://github.com/JuliaPluto/PlutoUI.jl/issues/277
					let id = setInterval(update_output, 200)
					invalidation.then(() => {
						clearInterval(id)
						input_el.removeEventListener("input", update_output)
					})
					</script><output style='
						font-family: system-ui;
    					font-size: 15px;
    					margin-left: 3px;
    					transform: translateY(-4px);
    					display: inline-block;'>1</output></bond>mimetext/htmlrootassigneelast_run_timestampAb}persist_js_state·has_pluto_hook_features§cell_id$5c1ec9ae-fc2e-11ea-397d-937c7ab1edb2depends_on_disabled_cells§runtime(published_object_keysdepends_on_skipped_cells§errored$80138b30-fc4a-11ea-0e15-b54cf6b402dfqueued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$80138b30-fc4a-11ea-0e15-b54cf6b402dfdepends_on_disabled_cells§runtime ~ipublished_object_keysdepends_on_skipped_cells§errored$546a40eb-7897-485d-a1b5-c4dfae0a4861queued¤logsrunning¦outputbody<div class="markdown"><p>Now we need to <strong>parse</strong> the date strings, i.e. convert from a string representation into an actual Julia type provided by the <code>Dates.jl</code> standard library package:</p>
</div>mimetext/htmlrootassigneelast_run_timestampAW persist_js_state·has_pluto_hook_features§cell_id$546a40eb-7897-485d-a1b5-c4dfae0a4861depends_on_disabled_cells§runtime "published_object_keysdepends_on_skipped_cells§errored$7b5db0f4-fc36-11ea-09a5-49def64f4c79queued¤logsrunning¦outputbodyprefixInt64elements 1text/plain1text/plain2text/plain2text/plain5text/plain5text/plain5text/plain6text/plain	6text/plain
8text/plain8text/plain8text/plain11text/plain11text/plain11text/plain12text/plain12text/plain12text/plain12text/plain12text/plainmoren103443455text/plaino103533872text/plainp103589757text/plainq103648690text/plainr103650837text/plains103646975text/plaint103655539text/plainu103690910text/plainv103755771text/plainw103802702text/plaintypeArrayprefix_shortobjectidf70bdb756a53be19mime!application/vnd.pluto.tree+objectrootassigneeUS_datalast_run_timestampAppersist_js_state·has_pluto_hook_features§cell_id$7b5db0f4-fc36-11ea-09a5-49def64f4c79depends_on_disabled_cells§runtimeSȵpublished_object_keysdepends_on_skipped_cells§errored$7e7d14a2-fc37-11ea-3f1a-870ca98c4b75queued¤logsrunning¦outputbody<div class="markdown"><p>Note that we are only passing a single vector to the <code>scatter</code> function, so the <span class="tex">$x$</span> coordinates are taken as the natural numbers <span class="tex">$1$</span>, <span class="tex">$2$</span>, etc.</p>
<p>Also note that the <span class="tex">$y$</span>-axis in this plot gives the <em>cumulative</em> case numbers, i.e. the <em>total</em> number of confirmed cases since the start of the epidemic up to the given date. </p>
</div>mimetext/htmlrootassigneelast_run_timestampA apersist_js_state·has_pluto_hook_features§cell_id$7e7d14a2-fc37-11ea-3f1a-870ca98c4b75depends_on_disabled_cells§runtime ɵpublished_object_keysdepends_on_skipped_cells§errored$79ba0433-2a31-475a-87c9-14103ebbff16queued¤logsrunning¦outputbodyprefixStringelements "Afghanistan"text/plain"Albania"text/plain"Algeria"text/plain"Andorra"text/plain"Angola"text/plain"Antarctica"text/plain"Antigua and Barbuda"text/plain"Argentina"text/plain	"Armenia"text/plain
"Australia"text/plain"Austria"text/plain"Azerbaijan"text/plain"Bahamas"text/plain"Bahrain"text/plain"Bangladesh"text/plain"Barbados"text/plain"Belarus"text/plain"Belgium"text/plain"Belize"text/plain"Benin"text/plainmore"Uruguay"text/plain"Uzbekistan"text/plain"Vanuatu"text/plainÒ"Venezuela"text/plainĒ"Vietnam"text/plainŒ"West Bank and Gaza"text/plainƒ"Winter Olympics 2022"text/plainǒ"Yemen"text/plainȒ"Zambia"text/plainɒ"Zimbabwe"text/plaintypeArrayprefix_shortobjectida387813441b71bbdmime!application/vnd.pluto.tree+objectrootassigneecountrieslast_run_timestampAJpersist_js_state·has_pluto_hook_features§cell_id$79ba0433-2a31-475a-87c9-14103ebbff16depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$dc2cfa82-fc86-11ea-1311-bb6e69350d43queued¤logsrunning¦outputbody"/tmp/jl_WJD4Ks"mimetext/plainrootassigneelast_run_timestampA/persist_js_state·has_pluto_hook_features§cell_id$dc2cfa82-fc86-11ea-1311-bb6e69350d43depends_on_disabled_cells§runtime {*3published_object_keysdepends_on_skipped_cells§errored$39982810-fc76-11ea-01c3-3987cfc2fd3cqueued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$39982810-fc76-11ea-01c3-3987cfc2fd3cdepends_on_disabled_cells§runtimeYpublished_object_keysdepends_on_skipped_cells§errored$19f4da16-fc31-11ea-0de9-1dbe668b862dqueued¤logsrunning¦outputbody<div class="markdown"><p>We are starting a new module on modelling epidemic propagation.</p>
<p>Let&#39;s start off by analysing some of the data that is now available on the current COVID-19 pandemic.</p>
</div>mimetext/htmlrootassigneelast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$19f4da16-fc31-11ea-0de9-1dbe668b862ddepends_on_disabled_cells§runtime kpublished_object_keysdepends_on_skipped_cells§errored$1f30a1ac-fc74-11ea-2abf-abf437006babqueued¤logsrunning¦outputbody2020-01-22mimetext/plainrootassigneelast_run_timestampA persist_js_state·has_pluto_hook_features§cell_id$1f30a1ac-fc74-11ea-2abf-abf437006babdepends_on_disabled_cells§runtime.published_object_keysdepends_on_skipped_cells§errored$1633abe8-fc2f-11ea-2c7e-21b3348a3569queued¤logsrunning¦outputbody<div class="markdown"><p>How can we extract the data for a particular country? First we need to know the exact name of the country. E.g. is the US written as &quot;USA&quot;, or &quot;United States&quot;?</p>
<p>We could scroll through to find out, or <strong>filter</strong> the data to only look at a sample of it, for example those countries that begin with the letter &quot;U&quot;.</p>
<p>One way to do this is with an array comprehension:</p>
</div>mimetext/htmlrootassigneelast_run_timestampA .persist_js_state·has_pluto_hook_features§cell_id$1633abe8-fc2f-11ea-2c7e-21b3348a3569depends_on_disabled_cells§runtime rpublished_object_keysdepends_on_skipped_cells§errored$a054e048-4fea-487c-9d06-463723c7151cqueued¤logsrunning¦outputbodymsgUndefVarError: head not definedstacktracecall_shorttop-level scopeinlined£urlpathf/home/runner/work/disorganised-mess/disorganised-mess/covid.jl#==#a054e048-4fea-487c-9d06-463723c7151csource_packagecalltop-level scopelinfo_typeCore.CodeInfolinefile0covid.jl#==#a054e048-4fea-487c-9d06-463723c7151cfunctop-level scopeparent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneelast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$a054e048-4fea-487c-9d06-463723c7151cdepends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$dbaacbb6-fc3b-11ea-0a42-a9792e8a6c4cqueued¤logsrunning¦outputbodymsgUndefVarError: plot not definedstacktracecall_shorttop-level scopeinlined£urlpathf/home/runner/work/disorganised-mess/disorganised-mess/covid.jl#==#dbaacbb6-fc3b-11ea-0a42-a9792e8a6c4csource_packagecalltop-level scopelinfo_typeCore.CodeInfolinefile0covid.jl#==#dbaacbb6-fc3b-11ea-0a42-a9792e8a6c4cfunctop-level scopeparent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneelast_run_timestampA>apersist_js_state·has_pluto_hook_features§cell_id$dbaacbb6-fc3b-11ea-0a42-a9792e8a6c4cdepends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$8709f208-fc4a-11ea-0203-e13eae5f0d93queued¤logsrunning¦outputbodys<div class="markdown"><p>If the <code>province</code> is missing we should use the country name instead:</p>
</div>mimetext/htmlrootassigneelast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$8709f208-fc4a-11ea-0203-e13eae5f0d93depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$07282688-fc3e-11ea-2f9e-5b0581061e65queued¤logsrunning¦outputbody<div class="markdown"><p>We see that there is a period lasting from around day 38 to around day 60 when the curve looks straight on the semi-log plot.  This corresponds to the following date range:</p>
</div>mimetext/htmlrootassigneelast_run_timestampArpersist_js_state·has_pluto_hook_features§cell_id$07282688-fc3e-11ea-2f9e-5b0581061e65depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$3edd2a22-fc4a-11ea-07e5-55ca6d7639e8queued¤logsrunning¦outputbody<div class="markdown"><p>Our data set contains more information: the geographical locations &#40;latitude and longitude&#41; of each country &#40;or, rather, of a particular point that was chosen as being representative of that country&#41;.</p>
</div>mimetext/htmlrootassigneelast_run_timestampAhpersist_js_state·has_pluto_hook_features§cell_id$3edd2a22-fc4a-11ea-07e5-55ca6d7639e8depends_on_disabled_cells§runtime Z published_object_keysdepends_on_skipped_cells§errored$0f329ece-fc74-11ea-1e02-bdbddf551ef3queued¤logsrunning¦outputbody'<bond def="day_ticks" unique_id="cjngP762OUT6">	<plutoui-clock class=' stopped' data-max-value=nothing data-repeat=false>
		<plutoui-analog>
			<plutoui-back><?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   width="39.871094mm"
   height="39.871094mm"
   viewBox="0 0 39.871094 39.871094"
   version="1.1"
   id="svg8"
   inkscape:version="0.92.3 (2405546, 2018-03-11)"
   sodipodi:docname="timer_back.svg">
  <defs
     id="defs2" />
  <sodipodi:namedview
     id="base"
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1.0"
     inkscape:pageopacity="0.0"
     inkscape:pageshadow="2"
     inkscape:zoom="3.959798"
     inkscape:cx="107.29722"
     inkscape:cy="73.940024"
     inkscape:document-units="mm"
     inkscape:current-layer="layer1"
     showgrid="false"
     inkscape:window-width="1920"
     inkscape:window-height="1013"
     inkscape:window-x="-9"
     inkscape:window-y="-9"
     inkscape:window-maximized="1" />
  <metadata
     id="metadata5">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
        <dc:title></dc:title>
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <g
     inkscape:label="Layer 1"
     inkscape:groupmode="layer"
     id="layer1"
     transform="translate(-36.284454,-6.2274818)">
    <circle
       style="fill:#e5e5e5;fill-opacity:1;stroke:#000000;stroke-width:3.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       id="path4518"
       cx="56.220001"
       cy="26.163029"
       r="18.185547" />
    <circle
       style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:6.19706345;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       id="path4522"
       cx="56.220001"
       cy="26.163029"
       r="13" />
  </g>
</svg>
</plutoui-back>
			<plutoui-front><?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   width="39.871094mm"
   height="39.871094mm"
   viewBox="0 0 39.871094 39.871094"
   version="1.1"
   id="svg8"
   sodipodi:docname="timer_front.svg"
   inkscape:version="0.92.3 (2405546, 2018-03-11)">
  <defs
     id="defs2" />
  <sodipodi:namedview
     id="base"
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1.0"
     inkscape:pageopacity="0.0"
     inkscape:pageshadow="2"
     inkscape:zoom="3.959798"
     inkscape:cx="107.29722"
     inkscape:cy="73.940024"
     inkscape:document-units="mm"
     inkscape:current-layer="layer1"
     showgrid="false"
     inkscape:window-width="1920"
     inkscape:window-height="1013"
     inkscape:window-x="-9"
     inkscape:window-y="-9"
     inkscape:window-maximized="1" />
  <metadata
     id="metadata5">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
        <dc:title></dc:title>
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <g
     inkscape:label="Layer 1"
     inkscape:groupmode="layer"
     id="layer1"
     transform="translate(-36.284454,-6.2274818)">
    <path
       style="fill:#d03f13;fill-opacity:1;stroke:none;stroke-width:6.09088135;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 58.720001,26.163029 c 0,1.380712 -1.119288,2.5 -2.5,2.5 -1.380712,0 -2.5,-1.119288 -2.5,-2.5 0,-1.380712 1.119288,-16.2643807 2.5,-16.2643807 1.380712,0 2.5,14.8836687 2.5,16.2643807 z"
       id="path4524"
       inkscape:connector-curvature="0"
       sodipodi:nodetypes="sssss" />
  </g>
</svg>
</plutoui-front>
			<plutoui-zoof style="opacity: 0"><?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   width="39.871094mm"
   height="39.871094mm"
   viewBox="0 0 39.871094 39.871094"
   version="1.1"
   id="svg8"
   sodipodi:docname="timer_zoof.svg"
   inkscape:version="0.92.3 (2405546, 2018-03-11)">
  <defs
     id="defs2" />
  <sodipodi:namedview
     id="base"
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1.0"
     inkscape:pageopacity="0.0"
     inkscape:pageshadow="2"
     inkscape:zoom="3.959798"
     inkscape:cx="103.4976"
     inkscape:cy="81.366126"
     inkscape:document-units="mm"
     inkscape:current-layer="layer1"
     showgrid="false"
     inkscape:window-width="1920"
     inkscape:window-height="1013"
     inkscape:window-x="-9"
     inkscape:window-y="-9"
     inkscape:window-maximized="1" />
  <metadata
     id="metadata5">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
        <dc:title></dc:title>
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <g
     inkscape:label="Layer 1"
     inkscape:groupmode="layer"
     id="layer1"
     transform="translate(-36.284454,-6.2274818)">
    <circle
       style="fill:#f39a7e;fill-opacity:1;stroke:none;stroke-width:4.78696537;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       id="path4527"
       cx="56.220001"
       cy="26.163029"
       r="16.607328" />
  </g>
</svg>
</plutoui-zoof>
		</plutoui-analog>
		<button></button>
		<span>speed: </span>
		<input type="number" value="0.5"  min=0 step=any lang="en-001">
		<span id="unit" title="Click to invert"></span>
	</plutoui-clock>
	<script>
		// const clock = this.querySelector("clock")
const clock = (currentScript ?? this.currentScript).previousElementSibling
const tpsInput = clock.querySelector("input")
const analogfront = clock.querySelector("plutoui-analog plutoui-front")
const analogzoof = clock.querySelector("plutoui-analog plutoui-zoof")
const unit = clock.querySelector("span#unit")
const button = clock.querySelector("button")

const max_value = +clock.dataset.maxValue
const repeat = clock.dataset.repeat === "true"

var t = (clock.value = 1)
var starttime = null
var dt = 1

tpsInput.oninput = (e) => {
    dt = tpsInput.valueAsNumber
    if (clock.classList.contains("inverted")) {
        dt = 1.0 / dt
    }
    dt = dt == Infinity || dt == 0 ? 1e9 : dt
    analogzoof.style.opacity = 0.8 - Math.pow(dt, 0.2)
    analogfront.style.animationDuration = dt + "s"
    e && e.stopPropagation()
}
tpsInput.oninput()

analogfront.onanimationiteration = (e) => {
    if (!clock.classList.contains("stopped")) {
        const running_time = (Date.now() - starttime) / 1000
        t = Math.max(t + 1, Math.floor(running_time / dt))
        if (!isNaN(max_value)) {
            if (repeat) {
                if(t > max_value) {
                    t = 1
                    starttime = Date.now()
                }
            } else {
                if (t >= max_value) {
                    clock.classList.add("stopped")
                    t = max_value
                }
            }
        }
        clock.value = t
        clock.dispatchEvent(new CustomEvent("input"))
    }
}
unit.onclick = (e) => {
    clock.classList.toggle("inverted")
    tpsInput.oninput()
}
button.onclick = (e) => {
    starttime = Date.now()
    clock.classList.toggle("stopped")
    if (!clock.classList.contains("stopped")) {
        t = 1
    }
}

	</script>
	<style>
		plutoui-clock {
    display: flex;
    flex-direction: row;
}

plutoui-clock > * {
    align-self: center;
    margin-right: 0.3rem;
}

plutoui-analog {
    display: block;
    position: relative;
    overflow: hidden;
    width: 20px;
    height: 20px;
}
@media (prefers-color-scheme: dark) {
    plutoui-analog {
        filter: invert(1) hue-rotate(180deg);
    }
}

plutoui-analog > * {
    display: block;
    width: 100%;
    height: 100%;
}

plutoui-analog > * > svg {
    width: 100%;
    height: 100%;
}

plutoui-clock plutoui-analog plutoui-front,
plutoui-clock plutoui-analog plutoui-zoof {
    position: absolute;
    left: 0;
    top: 0;
    animation: 1s linear 🔁 infinite;
}

plutoui-clock.stopped plutoui-analog plutoui-front {
    animation-play-state: paused;
}

plutoui-clock.stopped plutoui-analog plutoui-zoof {
    display: none;
}

plutoui-clock input {
    width: 3rem;
}

plutoui-clock span {
    font-family: 'Roboto Mono', monospace;
    font-size: 0.75rem;
    word-spacing: -0.2rem;
}

plutoui-clock span#unit {
    font-style: italic;
    cursor: pointer;
}

plutoui-clock span#unit::after {
    content: 'secs / tick';
}

plutoui-clock.inverted span#unit::after {
    content: 'ticks / sec';
}

plutoui-clock button {
    margin-left: 1rem;
    margin-right: 1rem;
}

plutoui-clock button::after {
    content: 'Stop';
}

plutoui-clock.stopped button::after {
    content: 'Start';
}

plutoui-clock.fixed span,
plutoui-clock.fixed input {
    display: none;
}

@keyframes 🔁 {
    0% {
        transform: rotate(0deg);
    }
    100% {
        transform: rotate(360deg);
    }
}

	</style>
    </bond>mimetext/htmlrootassigneelast_run_timestampA]persist_js_state·has_pluto_hook_features§cell_id$0f329ece-fc74-11ea-1e02-bdbddf551ef3depends_on_disabled_cells§runtimeyBȵpublished_object_keysdepends_on_skipped_cells§errored$2f254a9e-fc3e-11ea-2c02-75ed59f41903queued¤logsrunning¦outputbody<div class="markdown"><p>i.e. the first 3 weeks of March. Fortunately the imposition of lockdown during the last 10 days of March &#40;on different days in different US states&#41; significantly reduced transmission.</p>
</div>mimetext/htmlrootassigneelast_run_timestampA'persist_js_state·has_pluto_hook_features§cell_id$2f254a9e-fc3e-11ea-2c02-75ed59f41903depends_on_disabled_cells§runtime *vpublished_object_keysdepends_on_skipped_cells§errored$31dc4e46-4839-4f01-b383-1a1189aeb0e6queued¤logsrunning¦outputbody0020-01-22mimetext/plainrootassigneelast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$31dc4e46-4839-4f01-b383-1a1189aeb0e6depends_on_disabled_cells§runtime0published_object_keysdepends_on_skipped_cells§errored$f5c29f0d-937f-4731-8f87-0405ebc966f5queued¤logsrunning¦outputbodyprefixDates.Dateelements 2020-01-22text/plain2020-01-23text/plain2020-01-24text/plain2020-01-25text/plain2020-01-26text/plain2020-01-27text/plain2020-01-28text/plain2020-01-29text/plain	2020-01-30text/plain
2020-01-31text/plain2020-02-01text/plain2020-02-02text/plain2020-02-03text/plain2020-02-04text/plain2020-02-05text/plain2020-02-06text/plain2020-02-07text/plain2020-02-08text/plain2020-02-09text/plain2020-02-10text/plainmoren2023-02-28text/plaino2023-03-01text/plainp2023-03-02text/plainq2023-03-03text/plainr2023-03-04text/plains2023-03-05text/plaint2023-03-06text/plainu2023-03-07text/plainv2023-03-08text/plainw2023-03-09text/plaintypeArrayprefix_shortobjectida95c64a450394c68mime!application/vnd.pluto.tree+objectrootassigneedateslast_run_timestampA-persist_js_state·has_pluto_hook_features§cell_id$f5c29f0d-937f-4731-8f87-0405ebc966f5depends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$4f423a75-43da-486f-ac2a-7220032dac9fqueued¤logsrunning¦outputbodyrowsmissingtext/plain"US"text/plain40.0text/plain-100.0text/plain1text/plain1text/plain2text/plain2text/plainmoremissingtext/plain"Uganda"text/plain1.37333text/plain32.2903text/plain0text/plain0text/plain0text/plain0text/plainmoremissingtext/plain"Ukraine"text/plain48.3794text/plain31.1656text/plain0text/plain0text/plain0text/plain0text/plainmoremissingtext/plain"United Arab Emirates"text/plain23.4241text/plain53.8478text/plain0text/plain0text/plain0text/plain0text/plainmore"Anguilla"text/plain"United Kingdom"text/plain18.2206text/plain-63.0686text/plain0text/plain0text/plain0text/plain0text/plainmore"Bermuda"text/plain"United Kingdom"text/plain32.3078text/plain-64.7505text/plain0text/plain0text/plain0text/plain0text/plainmore"British Virgin Islands"text/plain"United Kingdom"text/plain18.4207text/plain-64.64text/plain0text/plain0text/plain0text/plain0text/plainmore"Cayman Islands"text/plain"United Kingdom"text/plain19.3133text/plain-81.2546text/plain0text/plain0text/plain0text/plain0text/plainmore	"Channel Islands"text/plain"United Kingdom"text/plain49.3723text/plain-2.3644text/plain0text/plain0text/plain0text/plain0text/plainmore
"Falkland Islands (Malvinas)"text/plain"United Kingdom"text/plain-51.7963text/plain-59.5236text/plain0text/plain0text/plain0text/plain0text/plainmoremoremissingtext/plain"Uzbekistan"text/plain41.3775text/plain64.5853text/plain0text/plain0text/plain0text/plain0text/plainmoreobjectidea87911aad95b6ebschemanamesprovincecountrylatitudelongitude1/22/201/23/201/24/201/25/20moretypesString?StringFloat64?Float64?Int64Int64Int64Int64moremime"application/vnd.pluto.table+objectrootassigneelast_run_timestampA"persist_js_state·has_pluto_hook_features§cell_id$4f423a75-43da-486f-ac2a-7220032dac9fdepends_on_disabled_cells§runtimeAEpublished_object_keysdepends_on_skipped_cells§errored$6de0800c-fc37-11ea-0d94-2b6f8f66964dqueued¤logsrunning¦outputbody<div class="markdown"><p>We would like to use actual dates instead of just the number of days since the start of the recorded data. The dates are given in the column names of the <code>DataFrame</code>:</p>
</div>mimetext/htmlrootassigneelast_run_timestampA@persist_js_state·has_pluto_hook_features§cell_id$6de0800c-fc37-11ea-0d94-2b6f8f66964ddepends_on_disabled_cells§runtime okpublished_object_keysdepends_on_skipped_cells§errored$24934438-fc74-11ea-12e4-7f7e50f54029queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampAVpersist_js_state·has_pluto_hook_features§cell_id$24934438-fc74-11ea-12e4-7f7e50f54029depends_on_disabled_cells§runtimeIpublished_object_keysdepends_on_skipped_cells§errored$4358c348-91aa-4c76-a443-0a9cefce0e83queued¤logsrunning¦outputbodymsgUndefVarError: plot not definedstacktracecall_shorttop-level scopeinlined£urlpathf/home/runner/work/disorganised-mess/disorganised-mess/covid.jl#==#4358c348-91aa-4c76-a443-0a9cefce0e83source_packagecalltop-level scopelinfo_typeCore.CodeInfolinefile0covid.jl#==#4358c348-91aa-4c76-a443-0a9cefce0e83functop-level scopeparent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneelast_run_timestampAVґpersist_js_state·has_pluto_hook_features§cell_id$4358c348-91aa-4c76-a443-0a9cefce0e83depends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$9484ea9e-fc2e-11ea-137c-6da8212da5bdqueued¤logsrunning¦outputbody٠<div class="markdown"><p>&#91;Here we used <strong>string interpolation</strong> with <code>&#36;</code> to put the text into a Markdown string.&#93;</p>
</div>mimetext/htmlrootassigneelast_run_timestampA?persist_js_state·has_pluto_hook_features§cell_id$9484ea9e-fc2e-11ea-137c-6da8212da5bddepends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$4ccb2718-fce2-11ea-18c4-89640faec38dqueued¤logsrunning¦outputbody1mimetext/plainrootassigneedaylast_run_timestampA2persist_js_state·has_pluto_hook_features§cell_id$4ccb2718-fce2-11ea-18c4-89640faec38ddepends_on_disabled_cells§runtimeBpublished_object_keysdepends_on_skipped_cells§errored$75d2dc66-fc47-11ea-0e35-05f9cf38e901queued¤logsrunning¦outputbodyو<div class="markdown"><p>This is an example of a <strong>time series</strong>, i.e. a single quantity that changes over time.</p>
</div>mimetext/htmlrootassigneelast_run_timestampA#persist_js_state·has_pluto_hook_features§cell_id$75d2dc66-fc47-11ea-0e35-05f9cf38e901depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$b406eec8-fc77-11ea-1a98-d36d6d3e2393queued¤logsrunning¦outputbody1.2304489213782739mimetext/plainrootassigneelast_run_timestampA 2persist_js_state·has_pluto_hook_features§cell_id$b406eec8-fc77-11ea-1a98-d36d6d3e2393depends_on_disabled_cells§runtimeZ?published_object_keysdepends_on_skipped_cells§errored$861a2c3a-fc88-11ea-2d95-fb076e751203queued¤logsrunning¦outputbody<div id="map" style="height: 500px"></div>
<script>
	mapboxgl.accessToken = 'pk.eyJ1Ijoic2hhc2hpNTMiLCJhIjoiY2ppMG5vZmpuMWEyNjNwb2I5dWhveTkyZCJ9.dQ67jXuhU3DGz7QFR35alw';
var map = new mapboxgl.Map({
	container: 'map',
	style: 'mapbox://styles/mapbox/light-v10',
	zoom: 1,
	center: [0, 0]
});

var elem = document.getElementById("map");

elem.mapbox = map;

map.on('load', function () {

	// Add a GeoJSON source with 2 points
	map.addSource('points', {
		'type': 'geojson',
		'data': {
			'type': 'FeatureCollection',
			'features': [
				{
					'type': 'Feature',
					'geometry': {
						'type': 'Point',
						'coordinates': [
							-77.03238901390978,
							38.913188059745586
						]
					}
				},
				{
					'type': 'Feature',
					'geometry': {
						'type': 'Point',
						'coordinates': [-122.414, 37.776]
					}
				}
			]
		}
	});
	map.addLayer({
	'id': 'points',
	'type': 'circle',
	'source': 'points',
	'paint': {
		'circle-color': {
              "property": "size",
              "stops": [
                [0, "#fff5f0"],
                [1, "#fee0d2"],
                [2, "#fcbba1"],
                [3, "#fc9272"],
                [4, "#fb6a4a"],
                [7, "#ef3b2c"],
                [8, "#cb181d"],
                [9, "#a50f15"],
                [10, "#67000d"]
              ]
            },
		// make circles larger as the user zooms from z12 to z22
		'circle-radius': [
				'interpolate',
				['linear'], ["zoom"],
				0, ['get', 'size']
			]
    }
});
});
</script>
mimetext/htmlrootassigneelast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$861a2c3a-fc88-11ea-2d95-fb076e751203depends_on_disabled_cells§runtime Lpublished_object_keysdepends_on_skipped_cells§errored$c5ad4d40-fc57-11ea-23cb-e55487bc6f7aqueued¤logsrunning¦outputbodyrowsmissingtext/plain"Afghanistan"text/plain33.9391text/plain67.71text/plain0text/plain0text/plain0text/plain0text/plainmoremissingtext/plain"Albania"text/plain41.1533text/plain20.1683text/plain0text/plain0text/plain0text/plain0text/plainmoremissingtext/plain"Algeria"text/plain28.0339text/plain1.6596text/plain0text/plain0text/plain0text/plain0text/plainmoremissingtext/plain"Andorra"text/plain42.5063text/plain1.5218text/plain0text/plain0text/plain0text/plain0text/plainmoremissingtext/plain"Angola"text/plain-11.2027text/plain17.8739text/plain0text/plain0text/plain0text/plain0text/plainmoremissingtext/plain"Antarctica"text/plain-71.9499text/plain23.347text/plain0text/plain0text/plain0text/plain0text/plainmoremissingtext/plain"Antigua and Barbuda"text/plain17.0608text/plain-61.7964text/plain0text/plain0text/plain0text/plain0text/plainmoremissingtext/plain"Argentina"text/plain-38.4161text/plain-63.6167text/plain0text/plain0text/plain0text/plain0text/plainmore	missingtext/plain"Armenia"text/plain40.0691text/plain45.0382text/plain0text/plain0text/plain0text/plain0text/plainmore
"Australian Capital Territory"text/plain"Australia"text/plain-35.4735text/plain149.012text/plain0text/plain0text/plain0text/plain0text/plainmoremoremissingtext/plain"Azerbaijan"text/plain40.1431text/plain47.5769text/plain0text/plain0text/plain0text/plain0text/plainmoreobjectid8cf06766e559b15eschemanamesprovincecountrylatitudelongitude1/22/201/23/201/24/201/25/20moretypesString?StringFloat64?Float64?Int64Int64Int64Int64moremime"application/vnd.pluto.table+objectrootassigneelast_run_timestampA`persist_js_state·has_pluto_hook_features§cell_id$c5ad4d40-fc57-11ea-23cb-e55487bc6f7adepends_on_disabled_cells§runtime Ypublished_object_keysdepends_on_skipped_cells§errored$b0eb3918-fc1f-11ea-238b-7f5d23e424bbqueued¤logsrunning¦outputbody<div class="markdown"><p>How can we extract the list of all the countries? The country names are in the second column.</p>
<p>For some purposes we can think of a <code>DataFrame</code>.as a matrix and use similar syntax. For example, we can extract the second column:</p>
</div>mimetext/htmlrootassigneelast_run_timestampANpersist_js_state·has_pluto_hook_features§cell_id$b0eb3918-fc1f-11ea-238b-7f5d23e424bbdepends_on_disabled_cells§runtime ޵published_object_keysdepends_on_skipped_cells§errored$36c37b4d-eb23-4deb-a593-e511eccd9204queued¤logsrunning¦outputbodymsgUndefVarError: plot not definedstacktracecall_shorttop-level scopeinlined£urlpathf/home/runner/work/disorganised-mess/disorganised-mess/covid.jl#==#36c37b4d-eb23-4deb-a593-e511eccd9204source_packagecalltop-level scopelinfo_typeCore.CodeInfolinefile0covid.jl#==#36c37b4d-eb23-4deb-a593-e511eccd9204functop-level scopeparent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneelast_run_timestampA0,persist_js_state·has_pluto_hook_features§cell_id$36c37b4d-eb23-4deb-a593-e511eccd9204depends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$a7369222-fc20-11ea-314d-4d6b0f0f72ebqueued¤logsrunning¦outputbody<div class="markdown"><p>We will need a couple of new packages. The data is in CSV format, i.e. <em>C</em>omma-<em>S</em>eparated <em>V</em>alues. This is a common data format in which observations, i.e. data points, are separated on different lines. Within each line the different data for that observation are separated by commas or other punctuation &#40;possibly spaces and tabs&#41;.</p>
</div>mimetext/htmlrootassigneelast_run_timestampAIspersist_js_state·has_pluto_hook_features§cell_id$a7369222-fc20-11ea-314d-4d6b0f0f72ebdepends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$fab64d86-fc28-11ea-0ae1-3ba1b9a14759queued¤logsrunning¦outputbody4<div class="markdown"><h2>Using the data</h2>
</div>mimetext/htmlrootassigneelast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$fab64d86-fc28-11ea-0ae1-3ba1b9a14759depends_on_disabled_cells§runtime Ǒpublished_object_keysdepends_on_skipped_cells§errored$9e23b0e2-ac13-4d19-a3f9-4a655a1e9f14queued¤logsrunning¦outputbody"1/22/20"mimetext/plainrootassigneelast_run_timestampA7persist_js_state·has_pluto_hook_features§cell_id$9e23b0e2-ac13-4d19-a3f9-4a655a1e9f14depends_on_disabled_cells§runtime-\published_object_keysdepends_on_skipped_cells§errored$1620aa9d-7dcd-4686-b7e4-a72cebe315edqueued¤logsrunning¦outputbodyٿ<div class="markdown"><p>We can load the data from a CSV using the <code>File</code> function from the <code>CSV.jl</code> package, and then convert it to a <code>DataFrame</code>:</p>
</div>mimetext/htmlrootassigneelast_run_timestampA_|persist_js_state·has_pluto_hook_features§cell_id$1620aa9d-7dcd-4686-b7e4-a72cebe315eddepends_on_disabled_cells§runtime ;}published_object_keysdepends_on_skipped_cells§errored$ada3ceb4-fc2e-11ea-2cbf-399430fa18b5queued¤logsrunning¦outputbody%:<bond def="country" unique_id="Vkra4Vhd/4Zw"><select><option value='puiselect-1'>Afghanistan</option><option value='puiselect-2'>Albania</option><option value='puiselect-3'>Algeria</option><option value='puiselect-4'>Andorra</option><option value='puiselect-5'>Angola</option><option value='puiselect-6'>Antarctica</option><option value='puiselect-7'>Antigua and Barbuda</option><option value='puiselect-8'>Argentina</option><option value='puiselect-9'>Armenia</option><option value='puiselect-10'>Australia</option><option value='puiselect-11'>Austria</option><option value='puiselect-12'>Azerbaijan</option><option value='puiselect-13'>Bahamas</option><option value='puiselect-14'>Bahrain</option><option value='puiselect-15'>Bangladesh</option><option value='puiselect-16'>Barbados</option><option value='puiselect-17'>Belarus</option><option value='puiselect-18'>Belgium</option><option value='puiselect-19'>Belize</option><option value='puiselect-20'>Benin</option><option value='puiselect-21'>Bhutan</option><option value='puiselect-22'>Bolivia</option><option value='puiselect-23'>Bosnia and Herzegovina</option><option value='puiselect-24'>Botswana</option><option value='puiselect-25'>Brazil</option><option value='puiselect-26'>Brunei</option><option value='puiselect-27'>Bulgaria</option><option value='puiselect-28'>Burkina Faso</option><option value='puiselect-29'>Burma</option><option value='puiselect-30'>Burundi</option><option value='puiselect-31'>Cabo Verde</option><option value='puiselect-32'>Cambodia</option><option value='puiselect-33'>Cameroon</option><option value='puiselect-34'>Canada</option><option value='puiselect-35'>Central African Republic</option><option value='puiselect-36'>Chad</option><option value='puiselect-37'>Chile</option><option value='puiselect-38'>China</option><option value='puiselect-39'>Colombia</option><option value='puiselect-40'>Comoros</option><option value='puiselect-41'>Congo (Brazzaville)</option><option value='puiselect-42'>Congo (Kinshasa)</option><option value='puiselect-43'>Costa Rica</option><option value='puiselect-44'>Cote d&apos;Ivoire</option><option value='puiselect-45'>Croatia</option><option value='puiselect-46'>Cuba</option><option value='puiselect-47'>Cyprus</option><option value='puiselect-48'>Czechia</option><option value='puiselect-49'>Denmark</option><option value='puiselect-50'>Diamond Princess</option><option value='puiselect-51'>Djibouti</option><option value='puiselect-52'>Dominica</option><option value='puiselect-53'>Dominican Republic</option><option value='puiselect-54'>Ecuador</option><option value='puiselect-55'>Egypt</option><option value='puiselect-56'>El Salvador</option><option value='puiselect-57'>Equatorial Guinea</option><option value='puiselect-58'>Eritrea</option><option value='puiselect-59'>Estonia</option><option value='puiselect-60'>Eswatini</option><option value='puiselect-61'>Ethiopia</option><option value='puiselect-62'>Fiji</option><option value='puiselect-63'>Finland</option><option value='puiselect-64'>France</option><option value='puiselect-65'>Gabon</option><option value='puiselect-66'>Gambia</option><option value='puiselect-67'>Georgia</option><option value='puiselect-68'>Germany</option><option value='puiselect-69'>Ghana</option><option value='puiselect-70'>Greece</option><option value='puiselect-71'>Grenada</option><option value='puiselect-72'>Guatemala</option><option value='puiselect-73'>Guinea</option><option value='puiselect-74'>Guinea-Bissau</option><option value='puiselect-75'>Guyana</option><option value='puiselect-76'>Haiti</option><option value='puiselect-77'>Holy See</option><option value='puiselect-78'>Honduras</option><option value='puiselect-79'>Hungary</option><option value='puiselect-80'>Iceland</option><option value='puiselect-81'>India</option><option value='puiselect-82'>Indonesia</option><option value='puiselect-83'>Iran</option><option value='puiselect-84'>Iraq</option><option value='puiselect-85'>Ireland</option><option value='puiselect-86'>Israel</option><option value='puiselect-87'>Italy</option><option value='puiselect-88'>Jamaica</option><option value='puiselect-89'>Japan</option><option value='puiselect-90'>Jordan</option><option value='puiselect-91'>Kazakhstan</option><option value='puiselect-92'>Kenya</option><option value='puiselect-93'>Kiribati</option><option value='puiselect-94'>Korea, North</option><option value='puiselect-95'>Korea, South</option><option value='puiselect-96'>Kosovo</option><option value='puiselect-97'>Kuwait</option><option value='puiselect-98'>Kyrgyzstan</option><option value='puiselect-99'>Laos</option><option value='puiselect-100'>Latvia</option><option value='puiselect-101'>Lebanon</option><option value='puiselect-102'>Lesotho</option><option value='puiselect-103'>Liberia</option><option value='puiselect-104'>Libya</option><option value='puiselect-105'>Liechtenstein</option><option value='puiselect-106'>Lithuania</option><option value='puiselect-107'>Luxembourg</option><option value='puiselect-108'>MS Zaandam</option><option value='puiselect-109'>Madagascar</option><option value='puiselect-110'>Malawi</option><option value='puiselect-111'>Malaysia</option><option value='puiselect-112'>Maldives</option><option value='puiselect-113'>Mali</option><option value='puiselect-114'>Malta</option><option value='puiselect-115'>Marshall Islands</option><option value='puiselect-116'>Mauritania</option><option value='puiselect-117'>Mauritius</option><option value='puiselect-118'>Mexico</option><option value='puiselect-119'>Micronesia</option><option value='puiselect-120'>Moldova</option><option value='puiselect-121'>Monaco</option><option value='puiselect-122'>Mongolia</option><option value='puiselect-123'>Montenegro</option><option value='puiselect-124'>Morocco</option><option value='puiselect-125'>Mozambique</option><option value='puiselect-126'>Namibia</option><option value='puiselect-127'>Nauru</option><option value='puiselect-128'>Nepal</option><option value='puiselect-129'>Netherlands</option><option value='puiselect-130'>New Zealand</option><option value='puiselect-131'>Nicaragua</option><option value='puiselect-132'>Niger</option><option value='puiselect-133'>Nigeria</option><option value='puiselect-134'>North Macedonia</option><option value='puiselect-135'>Norway</option><option value='puiselect-136'>Oman</option><option value='puiselect-137'>Pakistan</option><option value='puiselect-138'>Palau</option><option value='puiselect-139'>Panama</option><option value='puiselect-140'>Papua New Guinea</option><option value='puiselect-141'>Paraguay</option><option value='puiselect-142'>Peru</option><option value='puiselect-143'>Philippines</option><option value='puiselect-144'>Poland</option><option value='puiselect-145'>Portugal</option><option value='puiselect-146'>Qatar</option><option value='puiselect-147'>Romania</option><option value='puiselect-148'>Russia</option><option value='puiselect-149'>Rwanda</option><option value='puiselect-150'>Saint Kitts and Nevis</option><option value='puiselect-151'>Saint Lucia</option><option value='puiselect-152'>Saint Vincent and the Grenadines</option><option value='puiselect-153'>Samoa</option><option value='puiselect-154'>San Marino</option><option value='puiselect-155'>Sao Tome and Principe</option><option value='puiselect-156'>Saudi Arabia</option><option value='puiselect-157'>Senegal</option><option value='puiselect-158'>Serbia</option><option value='puiselect-159'>Seychelles</option><option value='puiselect-160'>Sierra Leone</option><option value='puiselect-161'>Singapore</option><option value='puiselect-162'>Slovakia</option><option value='puiselect-163'>Slovenia</option><option value='puiselect-164'>Solomon Islands</option><option value='puiselect-165'>Somalia</option><option value='puiselect-166'>South Africa</option><option value='puiselect-167'>South Sudan</option><option value='puiselect-168'>Spain</option><option value='puiselect-169'>Sri Lanka</option><option value='puiselect-170'>Sudan</option><option value='puiselect-171'>Summer Olympics 2020</option><option value='puiselect-172'>Suriname</option><option value='puiselect-173'>Sweden</option><option value='puiselect-174'>Switzerland</option><option value='puiselect-175'>Syria</option><option value='puiselect-176'>Taiwan*</option><option value='puiselect-177'>Tajikistan</option><option value='puiselect-178'>Tanzania</option><option value='puiselect-179'>Thailand</option><option value='puiselect-180'>Timor-Leste</option><option value='puiselect-181'>Togo</option><option value='puiselect-182'>Tonga</option><option value='puiselect-183'>Trinidad and Tobago</option><option value='puiselect-184'>Tunisia</option><option value='puiselect-185'>Turkey</option><option value='puiselect-186'>Tuvalu</option><option value='puiselect-187'>US</option><option value='puiselect-188'>Uganda</option><option value='puiselect-189'>Ukraine</option><option value='puiselect-190'>United Arab Emirates</option><option value='puiselect-191'>United Kingdom</option><option value='puiselect-192'>Uruguay</option><option value='puiselect-193'>Uzbekistan</option><option value='puiselect-194'>Vanuatu</option><option value='puiselect-195'>Venezuela</option><option value='puiselect-196'>Vietnam</option><option value='puiselect-197'>West Bank and Gaza</option><option value='puiselect-198'>Winter Olympics 2022</option><option value='puiselect-199'>Yemen</option><option value='puiselect-200'>Zambia</option><option value='puiselect-201'>Zimbabwe</option></select></bond>mimetext/htmlrootassigneelast_run_timestampA淐Gpersist_js_state·has_pluto_hook_features§cell_id$ada3ceb4-fc2e-11ea-2cbf-399430fa18b5depends_on_disabled_cells§runtimeT#>published_object_keysdepends_on_skipped_cells§errored$34440afc-fc2e-11ea-0484-5b47af235badqueued¤logsrunning¦outputbody<div class="markdown"><p>It turns out that some countries are divided into provinces, so there are repetitions in the <code>country</code> column that we can eliminate with the <code>unique</code> function:</p>
</div>mimetext/htmlrootassigneelast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$34440afc-fc2e-11ea-0484-5b47af235baddepends_on_disabled_cells§runtime `published_object_keysdepends_on_skipped_cells§errored$a26b8742-6a16-445a-ae77-25a4189c0f14queued¤logsrunning¦outputbodymsg{ArgumentError: Package Plots not found in current path:
- Run `import Pkg; Pkg.add("Plots")` to install the Plots package.
stacktracecall_short"require(into::Module, mod::Symbol)inlined£urlehttps://github.com/JuliaLang/julia/tree/742b9abb4dd4621b667ec5bb3434b8b3602f96fd/base/loading.jl#L959path./loading.jlsource_packagecall"require(into::Module, mod::Symbol)linfo_typeCore.MethodInstancelineǤfileloading.jlfuncrequireparent_modulefrom_ccall_shorttop-level scopeinlined£urlpathf/home/runner/work/disorganised-mess/disorganised-mess/covid.jl#==#a26b8742-6a16-445a-ae77-25a4189c0f14source_packagecalltop-level scopelinfo_typeCore.CodeInfolinefile0covid.jl#==#a26b8742-6a16-445a-ae77-25a4189c0f14functop-level scopeparent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneelast_run_timestampAlpersist_js_state·has_pluto_hook_features§cell_id$a26b8742-6a16-445a-ae77-25a4189c0f14depends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$ed383524-e0c0-4da2-9a98-ca75aadd2c9equeued¤logsrunning¦outputbody8<div class="markdown"><p>Array comprehension:</p>
</div>mimetext/htmlrootassigneelast_run_timestampA Cpersist_js_state·has_pluto_hook_features§cell_id$ed383524-e0c0-4da2-9a98-ca75aadd2c9edepends_on_disabled_cells§runtime µpublished_object_keysdepends_on_skipped_cells§errored$b93b88b0-fc4d-11ea-0c45-8f64983f8b5cqueued¤logsrunning¦outputbody<div class="markdown"><p>We would also like to see the outlines of each country. For this we can use, for example, the data from <a href="https://www.naturalearthdata.com/downloads/110m-cultural-vectors/110m-admin-0-countries">Natural Earth</a>, which comes in the form of <strong>shape files</strong>, giving the outlines in terms of latitude and longitude coordinates. </p>
<p>These may be read in using the <code>Shapefile.jl</code> package.</p>
</div>mimetext/htmlrootassigneelast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$b93b88b0-fc4d-11ea-0c45-8f64983f8b5cdepends_on_disabled_cells§runtime [published_object_keysdepends_on_skipped_cells§errored$c460b0c3-6d3b-439b-8cc7-1c58d6547f51queued¤logsrunning¦outputbody"covid_data.csv"mimetext/plainrootassigneelast_run_timestampAIpersist_js_state·has_pluto_hook_features§cell_id$c460b0c3-6d3b-439b-8cc7-1c58d6547f51depends_on_disabled_cells§runtimeCpublished_object_keysdepends_on_skipped_cells§errored$1a59b12e-fceb-11ea-0634-1b4daee1bc62queued¤logsrunning¦outputbodyprefixFloat64elements 0.0text/plain0.0text/plain0.0text/plain0.0text/plain0.0text/plain0.0text/plain0.0text/plain0.0text/plain	0.0text/plain
0.0text/plain0.0text/plain0.0text/plain0.0text/plain0.0text/plain0.0text/plain0.0text/plain0.0text/plain0.0text/plain0.0text/plain0.0text/plainmore0.0text/plain0.0text/plain0.0text/plain0.0text/plain0.30103text/plain0.0text/plain0.0text/plain0.0text/plain 0.0text/plain!0.0text/plaintypeArrayprefix_shortobjectid2681c12ec6fb79e3mime!application/vnd.pluto.tree+objectrootassigneelast_run_timestampANpersist_js_state·has_pluto_hook_features§cell_id$1a59b12e-fceb-11ea-0634-1b4daee1bc62depends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$91f99062-fc43-11ea-1b0e-afe8aa8a1c3dqueued¤logsrunning¦outputbody38:60mimetext/plainrootassigneeexp_periodlast_run_timestampAnGVpersist_js_state·has_pluto_hook_features§cell_id$91f99062-fc43-11ea-1b0e-afe8aa8a1c3ddepends_on_disabled_cells§runtime2"published_object_keysdepends_on_skipped_cells§errored$ae9149f4-fcdc-11ea-30a3-031d38f38b23queued¤logsrunning¦outputbodys<script controls='' src='https://api.mapbox.com/mapbox-gl-js/v1.12.0/mapbox-gl.js' type='text/javascript'></script>mimetext/htmlrootassigneelast_run_timestampAFrְpersist_js_state·has_pluto_hook_features§cell_id$ae9149f4-fcdc-11ea-30a3-031d38f38b23depends_on_disabled_cells§runtime >2published_object_keysdepends_on_skipped_cells§errored$a772eadc-fc35-11ea-3d38-4b121f88f1d7queued¤logsrunning¦outputbody
<div class="markdown"><p>To extract a single row we need the <strong>index</strong> of the row &#40;i.e. which number row it is in the <code>DataFrame</code>&#41;. The <code>findfirst</code> function finds the first row that satisfies the given predicate:</p>
</div>mimetext/htmlrootassigneelast_run_timestampA Ύpersist_js_state·has_pluto_hook_features§cell_id$a772eadc-fc35-11ea-3d38-4b121f88f1d7depends_on_disabled_cells§runtime apublished_object_keysdepends_on_skipped_cells§errored$4f23c8fc-fc43-11ea-0e73-e5f89d14155cqueued¤logsrunning¦outputbodymsgUndefVarError: plot not definedstacktracecall_shorttop-level scopeinlined£urlpathf/home/runner/work/disorganised-mess/disorganised-mess/covid.jl#==#4f23c8fc-fc43-11ea-0e73-e5f89d14155csource_packagecalltop-level scopelinfo_typeCore.CodeInfolinefile0covid.jl#==#4f23c8fc-fc43-11ea-0e73-e5f89d14155cfunctop-level scopeparent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneelast_run_timestampA^t persist_js_state·has_pluto_hook_features§cell_id$4f23c8fc-fc43-11ea-0e73-e5f89d14155cdepends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$a39589ee-20e3-4f22-bf81-167fd815f6f9queued¤logsrunning¦outputbody(<div class="markdown">Afghanistan
</div>mimetext/htmlrootassigneelast_run_timestampA梤jpersist_js_state·has_pluto_hook_features§cell_id$a39589ee-20e3-4f22-bf81-167fd815f6f9depends_on_disabled_cells§runtime ]knpublished_object_keysdepends_on_skipped_cells§errored$cbd9c1aa-fc37-11ea-29d9-e3361406796fqueued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampAᤌepersist_js_state·has_pluto_hook_features§cell_id$cbd9c1aa-fc37-11ea-29d9-e3361406796fdepends_on_disabled_cells§runtime #published_object_keysdepends_on_skipped_cells§errored$450b4902-fc30-11ea-321d-29faf6188ff5queued¤logsrunning¦outputbody<div class="markdown"><p>Note that this returns an array of booleans of the same length as the vector <code>all_countries</code>. We can now use this to index into the <code>DataFrame</code>:</p>
</div>mimetext/htmlrootassigneelast_run_timestampA Y)persist_js_state·has_pluto_hook_features§cell_id$450b4902-fc30-11ea-321d-29faf6188ff5depends_on_disabled_cells§runtime 9Kpublished_object_keysdepends_on_skipped_cells§errored$38344160-fc27-11ea-220e-95aa00e4b083queued¤logsrunning¦outputbodyrowsmissingtext/plain"Afghanistan"text/plain33.9391text/plain67.71text/plain0text/plain0text/plain0text/plain0text/plainmoremissingtext/plain"Albania"text/plain41.1533text/plain20.1683text/plain0text/plain0text/plain0text/plain0text/plainmoremissingtext/plain"Algeria"text/plain28.0339text/plain1.6596text/plain0text/plain0text/plain0text/plain0text/plainmoremissingtext/plain"Andorra"text/plain42.5063text/plain1.5218text/plain0text/plain0text/plain0text/plain0text/plainmoremissingtext/plain"Angola"text/plain-11.2027text/plain17.8739text/plain0text/plain0text/plain0text/plain0text/plainmoremissingtext/plain"Antarctica"text/plain-71.9499text/plain23.347text/plain0text/plain0text/plain0text/plain0text/plainmoremissingtext/plain"Antigua and Barbuda"text/plain17.0608text/plain-61.7964text/plain0text/plain0text/plain0text/plain0text/plainmoremissingtext/plain"Argentina"text/plain-38.4161text/plain-63.6167text/plain0text/plain0text/plain0text/plain0text/plainmore	missingtext/plain"Armenia"text/plain40.0691text/plain45.0382text/plain0text/plain0text/plain0text/plain0text/plainmore
"Australian Capital Territory"text/plain"Australia"text/plain-35.4735text/plain149.012text/plain0text/plain0text/plain0text/plain0text/plainmoremore!missingtext/plain"Zimbabwe"text/plain-19.0154text/plain29.1549text/plain0text/plain0text/plain0text/plain0text/plainmoreobjectid99c6a2dcb6a177schemanamesProvince/StateCountry/RegionLatLong1/22/201/23/201/24/201/25/20moretypesString?StringFloat64?Float64?Int64Int64Int64Int64moremime"application/vnd.pluto.table+objectrootassigneelast_run_timestampAє6persist_js_state·has_pluto_hook_features§cell_id$38344160-fc27-11ea-220e-95aa00e4b083depends_on_disabled_cells§runtime   #&published_object_keysdepends_on_skipped_cells§errored$287f0fa8-fc44-11ea-2788-9f3ac4ee6d2bqueued¤logsrunning¦outputbody7<div class="markdown"><h2>Geographical data</h2>
</div>mimetext/htmlrootassigneelast_run_timestampAS.persist_js_state·has_pluto_hook_features§cell_id$287f0fa8-fc44-11ea-2788-9f3ac4ee6d2bdepends_on_disabled_cells§runtime zpublished_object_keysdepends_on_skipped_cells§errored$d228e232-fc39-11ea-1569-a31b817118c4queued¤logsrunning¦outputbody<div class="markdown"><p>Working with <em>cumulative</em> data is often less intuitive. Let&#39;s look at the actual number of daily cases. Julia has a <code>diff</code> function to calculate the difference between successive entries of a vector:</p>
</div>mimetext/htmlrootassigneelast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$d228e232-fc39-11ea-1569-a31b817118c4depends_on_disabled_cells§runtime 3published_object_keysdepends_on_skipped_cells§errored$9626d74a-fc3d-11ea-2ab3-978dc46c0f1fqueued¤logsrunning¦outputbody<div class="markdown"><p>Since the data contains some zeros, we need to replace those with <code>NaN</code>s &#40;&quot;Not a Number&quot;&#41;, which <code>Plots.jl</code> interprets as a signal to break the line</p>
</div>mimetext/htmlrootassigneelast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$9626d74a-fc3d-11ea-2ab3-978dc46c0f1fdepends_on_disabled_cells§runtime eppublished_object_keysdepends_on_skipped_cells§errored$3519cf96-fc26-11ea-3386-d97c61ea1b85queued¤logsrunning¦outputbody!<div class="markdown"><p>Since we need to manipulate the columns, let&#39;s rename them to something shorter. We can do this either <strong>in place</strong>, i.e. modifying the original <code>DataFrame</code>, or <strong>out of place</strong>, creating a new <code>DataFrame</code>. The convention in Julia is that functions that modify their argument have a name ending with <code>&#33;</code> &#40;often pronounced &quot;bang&quot;&#41;.</p>
<p>We can use the <code>head</code> function to see only the first few lines of the data.</p>
</div>mimetext/htmlrootassigneelast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$3519cf96-fc26-11ea-3386-d97c61ea1b85depends_on_disabled_cells§runtime :published_object_keysdepends_on_skipped_cells§errored$16a79308-fc36-11ea-16e5-e1087d7ebbdaqueued¤logsrunning¦outputbody261mimetext/plainrootassigneeUS_rowlast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$16a79308-fc36-11ea-16e5-e1087d7ebbdadepends_on_disabled_cells§runtimeTpublished_object_keysdepends_on_skipped_cells§errored$ada44a56-fc56-11ea-2ab7-fb649be7e066queued¤logsrunning¦outputbodymsg>ArgumentError: File not found: ./ne_110m_admin_0_countries.dbfstacktracecall_shortShapefile.Table(path::String)inlined£url@file:///home/runner/.julia/packages/Shapefile/8RfBg/src/table.jlpath9/home/runner/.julia/packages/Shapefile/8RfBg/src/table.jlsource_packagecallShapefile.Table(path::String)linfo_typeCore.MethodInstancelineGfiletable.jlfuncTableparent_modulefrom_ccall_shorttop-level scopeinlinedãurlpathf/home/runner/work/disorganised-mess/disorganised-mess/covid.jl#==#ada44a56-fc56-11ea-2ab7-fb649be7e066source_packagecalltop-level scopelinfo_typeNothinglinefile0covid.jl#==#ada44a56-fc56-11ea-2ab7-fb649be7e066func##function_wrapped_cell#472parent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneelast_run_timestampAr*persist_js_state·has_pluto_hook_features§cell_id$ada44a56-fc56-11ea-2ab7-fb649be7e066depends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$64d9bcea-7c85-421d-8f1e-17ea8ee694daqueued¤logsrunning¦outputbody٘"https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv"mimetext/plainrootassigneeurllast_run_timestampA֪persist_js_state·has_pluto_hook_features§cell_id$64d9bcea-7c85-421d-8f1e-17ea8ee694dadepends_on_disabled_cells§runtime'hpublished_object_keysdepends_on_skipped_cells§errored$210cee94-fc3e-11ea-1a6e-7f88270354e1queued¤logsrunning¦outputbodyprefixDates.Dateelements 2020-02-28text/plain2020-02-29text/plain2020-03-01text/plain2020-03-02text/plain2020-03-03text/plain2020-03-04text/plain2020-03-05text/plain2020-03-06text/plain	2020-03-07text/plain
2020-03-08text/plain2020-03-09text/plain2020-03-10text/plain2020-03-11text/plain2020-03-12text/plain2020-03-13text/plain2020-03-14text/plain2020-03-15text/plain2020-03-16text/plain2020-03-17text/plain2020-03-18text/plain2020-03-19text/plain2020-03-20text/plain2020-03-21text/plaintypeArrayprefix_shortobjectid46ee8183dbf22275mime!application/vnd.pluto.tree+objectrootassigneelast_run_timestampAwðpersist_js_state·has_pluto_hook_features§cell_id$210cee94-fc3e-11ea-1a6e-7f88270354e1depends_on_disabled_cells§runtime/ʵpublished_object_keysdepends_on_skipped_cells§errored$539c951c-fc48-11ea-2293-457b7717ea4dqueued¤logsrunning¦outputbodyل<div class="markdown"><p>We can fit a straight line using <strong>linear regression</strong> to this portion of the data.</p>
</div>mimetext/htmlrootassigneelast_run_timestampA=persist_js_state·has_pluto_hook_features§cell_id$539c951c-fc48-11ea-2293-457b7717ea4ddepends_on_disabled_cells§runtime εpublished_object_keysdepends_on_skipped_cells§errored$aaa7c012-fc1f-11ea-3c6c-89630affb1dbqueued¤logsrunning¦outputbodyC<div class="markdown"><h2>Extracting useful information</h2>
</div>mimetext/htmlrootassigneelast_run_timestampA԰persist_js_state·has_pluto_hook_features§cell_id$aaa7c012-fc1f-11ea-3c6c-89630affb1dbdepends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$e9ad97b6-fdef-4f48-bd32-634cfd2ce0e6queued¤logsrunning¦outputbodymsgUndefVarError: head not definedstacktracecall_shorttop-level scopeinlined£urlpathf/home/runner/work/disorganised-mess/disorganised-mess/covid.jl#==#e9ad97b6-fdef-4f48-bd32-634cfd2ce0e6source_packagecalltop-level scopelinfo_typeCore.CodeInfolinefile0covid.jl#==#e9ad97b6-fdef-4f48-bd32-634cfd2ce0e6functop-level scopeparent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneelast_run_timestampAکpersist_js_state·has_pluto_hook_features§cell_id$e9ad97b6-fdef-4f48-bd32-634cfd2ce0e6depends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$d3398953-afee-4989-932c-995c3ffc0c40queued¤logsrunning¦outputbody=<div class="markdown"><h2>Exploring COVID-19 data</h2>
</div>mimetext/htmlrootassigneelast_run_timestampAɰpersist_js_state·has_pluto_hook_features§cell_id$d3398953-afee-4989-932c-995c3ffc0c40depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$0b01120c-fc3d-11ea-1381-8bab939e6214queued¤logsrunning¦outputbodyٿ<div class="markdown"><h2>Exponential growth</h2>
<p>Simple models of epidemic spread often predict a period with <strong>exponential growth</strong>. Do the data corroborate this?</p>
</div>mimetext/htmlrootassigneelast_run_timestampAʰpersist_js_state·has_pluto_hook_features§cell_id$0b01120c-fc3d-11ea-1381-8bab939e6214depends_on_disabled_cells§runtime յpublished_object_keysdepends_on_skipped_cells§errored$db4c1f10-7c37-4513-887a-2467ce673458queued¤logslinemsg[32m[1m    Updating[22m[39m registry at `~/.julia/registries/General.toml`
[32m[1m   Resolving[22m[39m package versions...
[32m[1m    Updating[22m[39m `~/.julia/environments/v1.7/Project.toml`
 [90m [336ed68f] [39m[92m+ CSV v0.10.15[39m
[32m[1m    Updating[22m[39m `~/.julia/environments/v1.7/Manifest.toml`
 [90m [336ed68f] [39m[92m+ CSV v0.10.15[39m
 [90m [944b1d66] [39m[92m+ CodecZlib v0.7.8[39m
 [90m [34da2185] [39m[92m+ Compat v4.16.0[39m
 [90m [9a962f9c] [39m[92m+ DataAPI v1.16.0[39m
 [90m [e2d170a0] [39m[92m+ DataValueInterfaces v1.0.0[39m
 [90m [48062228] [39m[92m+ FilePathsBase v0.9.24[39m
 [90m [842dd82b] [39m[92m+ InlineStrings v1.4.4[39m
 [90m [82899510] [39m[92m+ IteratorInterfaceExtensions v1.0.0[39m
 [90m [bac558e1] [39m[92m+ OrderedCollections v1.8.1[39m
 [90m [69de0a69] [39m[92m+ Parsers v2.8.3[39m
 [90m [2dfb63ee] [39m[92m+ PooledArrays v1.4.3[39m
 [90m [91c51154] [39m[92m+ SentinelArrays v1.4.8[39m
 [90m [3783bdb8] [39m[92m+ TableTraits v1.0.1[39m
 [90m [bd369af6] [39m[92m+ Tables v1.12.1[39m
 [90m [3bb67fe8] [39m[92m+ TranscodingStreams v0.11.3[39m
 [90m [ea10d353] [39m[92m+ WeakRefStrings v1.4.2[39m
 [90m [76eceee3] [39m[92m+ WorkerUtilities v1.6.1[39m
 [90m [2a0f44e3] [39m[92m+ Base64[39m
 [90m [9fa8497b] [39m[92m+ Future[39m
 [90m [b77e0a4c] [39m[92m+ InteractiveUtils[39m
 [90m [56ddb016] [39m[92m+ Logging[39m
 [90m [d6f4376e] [39m[92m+ Markdown[39m
 [90m [a63ad114] [39m[92m+ Mmap[39m
 [90m [8dfed614] [39m[92m+ Test[39m
 [90m [cf7118a7] [39m[92m+ UUIDs[39m
 [90m [83775a58] [39m[92m+ Zlib_jll[39m
[32m[1m   Resolving[22m[39m package versions...
[32m[1m    Updating[22m[39m `~/.julia/environments/v1.7/Project.toml`
 [90m [a93c6f00] [39m[92m+ DataFrames v1.7.0[39m
[32m[1m    Updating[22m[39m `~/.julia/environments/v1.7/Manifest.toml`
 [90m [a8cc5b0e] [39m[92m+ Crayons v4.1.1[39m
 [90m [a93c6f00] [39m[92m+ DataFrames v1.7.0[39m
 [90m [864edb3b] [39m[92m+ DataStructures v0.18.22[39m
 [90m [41ab1584] [39m[92m+ InvertedIndices v1.3.1[39m
 [90m [b964fa9f] [39m[92m+ LaTeXStrings v1.4.0[39m
 [90m [e1d29d7a] [39m[92m+ Missings v1.2.0[39m
 [90m [08abe8d2] [39m[92m+ PrettyTables v2.3.2[39m
 [90m [189a3867] [39m[92m+ Reexport v1.2.2[39m
 [90m [a2af1166] [39m[92m+ SortingAlgorithms v1.2.1[39m
 [90m [892a3eda] [39m[92m+ StringManipulation v0.3.4[39m
[32m[1m   Resolving[22m[39m package versions...
[32m[1m    Updating[22m[39m `~/.julia/environments/v1.7/Project.toml`
 [90m [7f904dfe] [39m[92m+ PlutoUI v0.7.64[39m
[32m[1m    Updating[22m[39m `~/.julia/environments/v1.7/Manifest.toml`
 [90m [6e696c72] [39m[92m+ AbstractPlutoDingetjes v1.3.2[39m
 [90m [3da002f7] [39m[92m+ ColorTypes v0.12.1[39m
 [90m [53c48c17] [39m[92m+ FixedPointNumbers v0.8.5[39m
 [90m [47d2ed2b] [39m[92m+ Hyperscript v0.0.5[39m
 [90m [ac1192a8] [39m[92m+ HypertextLiteral v0.9.5[39m
 [90m [b5f81e59] [39m[92m+ IOCapture v0.2.5[39m
 [90m [682c06a0] [39m[92m+ JSON v0.21.4[39m
 [90m [6c6e2e6c] [39m[92m+ MIMEs v1.1.0[39m
 [90m [7f904dfe] [39m[92m+ PlutoUI v0.7.64[39m
 [90m [410a4b4d] [39m[92m+ Tricks v0.1.10[39m
 [90m [5c2747f8] [39m[92m+ URIs v1.5.2[39m
 [90m [0dad84c5] [39m[92m+ ArgTools[39m
 [90m [f43a241f] [39m[92m+ Downloads[39m
 [90m [7b1f6079] [39m[92m+ FileWatching[39m
 [90m [b27032c2] [39m[92m+ LibCURL[39m
 [90m [76f85450] [39m[92m+ LibGit2[39m
 [90m [ca575930] [39m[92m+ NetworkOptions[39m
 [90m [44cfe95a] [39m[92m+ Pkg[39m
 [90m [3fa0cd96] [39m[92m+ REPL[39m
 [90m [6462fe0b] [39m[92m+ Sockets[39m
 [90m [a4e569a6] [39m[92m+ Tar[39m
 [90m [deac9b47] [39m[92m+ LibCURL_jll[39m
 [90m [29816b5a] [39m[92m+ LibSSH2_jll[39m
 [90m [c8ffd9c3] [39m[92m+ MbedTLS_jll[39m
 [90m [14a3606d] [39m[92m+ MozillaCACerts_jll[39m
 [90m [8e850ede] [39m[92m+ nghttp2_jll[39m
 [90m [3f19e933] [39m[92m+ p7zip_jll[39m
[32m[1m   Resolving[22m[39m package versions...
[32m[1m   Installed[22m[39m Shapefile ─────────── v0.11.0
[32m[1m   Installed[22m[39m GeoInterfaceRecipes ─ v1.0.2
[32m[1m   Installed[22m[39m DBFTables ─────────── v1.2.7
[32m[1m    Updating[22m[39m `~/.julia/environments/v1.7/Project.toml`
 [90m [8e980c4a] [39m[92m+ Shapefile v0.11.0[39m
[32m[1m    Updating[22m[39m `~/.julia/environments/v1.7/Manifest.toml`
 [90m [75c7ada1] [39m[92m+ DBFTables v1.2.7[39m
 [90m [411431e0] [39m[92m+ Extents v0.1.4[39m
 [90m [68eda718] [39m[92m+ GeoFormatTypes v0.4.4[39m
 [90m [cf35fbd7] [39m[92m+ GeoInterface v1.4.1[39m
 [90m [0329782f] [39m[92m+ GeoInterfaceRecipes v1.0.2[39m
 [90m [3cdcf5f2] [39m[92m+ RecipesBase v1.3.4[39m
 [90m [8e980c4a] [39m[92m+ Shapefile v0.11.0[39m
[32m[1mPrecompiling[22m[39m project...
[32m  ✓ [39m[90mGeoInterfaceRecipes[39m
[32m  ✓ [39m[90mDBFTables[39m
[32m  ✓ [39mShapefile
  3 dependencies successfully precompiled in 3 seconds (53 already precompiled)
[32m[1m   Resolving[22m[39m package versions...
[32m[1m   Installed[22m[39m ZipFile ─ v0.10.1
[32m[1m    Updating[22m[39m `~/.julia/environments/v1.7/Project.toml`
 [90m [a5390f91] [39m[92m+ ZipFile v0.10.1[39m
[32m[1m    Updating[22m[39m `~/.julia/environments/v1.7/Manifest.toml`
 [90m [a5390f91] [39m[92m+ ZipFile v0.10.1[39m
[32m[1mPrecompiling[22m[39m project...
[32m  ✓ [39mZipFile
  1 dependency successfully precompiled in 0 seconds (56 already precompiled)
[32m[1m   Resolving[22m[39m package versions...
[32m[1m    Updating[22m[39m `~/.julia/environments/v1.7/Project.toml`
 [90m [682c06a0] [39m[92m+ JSON v0.21.4[39m
[32m[1m  No Changes[22m[39m to `~/.julia/environments/v1.7/Manifest.toml`
text/plaincell_id$db4c1f10-7c37-4513-887a-2467ce673458kwargsidPlutoRunner_d1acb81efileP/home/runner/.julia/packages/Pluto/6smog/src/runner/PlutoRunner/src/io/stdout.jlgroupstdoutlevelLogLevel(-555)running¦outputbodymimetext/plainrootassigneelast_run_timestampA5upersist_js_state·has_pluto_hook_features§cell_id$db4c1f10-7c37-4513-887a-2467ce673458depends_on_disabled_cells§runtime   jpublished_object_keysdepends_on_skipped_cells§errored$be868a52-fc3b-11ea-0b60-7fea05ffe8e9queued¤logsrunning¦outputbodymsgUndefVarError: plot not definedstacktracecall_shorttop-level scopeinlined£urlpathf/home/runner/work/disorganised-mess/disorganised-mess/covid.jl#==#be868a52-fc3b-11ea-0b60-7fea05ffe8e9source_packagecalltop-level scopelinfo_typeCore.CodeInfolinefile0covid.jl#==#be868a52-fc3b-11ea-0b60-7fea05ffe8e9functop-level scopeparent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneelast_run_timestampASQUpersist_js_state·has_pluto_hook_features§cell_id$be868a52-fc3b-11ea-0b60-7fea05ffe8e9depends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$16981da0-fc4d-11ea-37a2-535aa014a298queued¤logsrunning¦outputbodyprefixUnion{Missing, Float64}elements 33.9391text/plain41.1533text/plain28.0339text/plain42.5063text/plain-11.2027text/plain-71.9499text/plain17.0608text/plain-38.4161text/plain	40.0691text/plain
-35.4735text/plain-33.8688text/plain-12.4634text/plain-27.4698text/plain-34.9285text/plain-42.8821text/plain-37.8136text/plain-31.9505text/plain47.5162text/plain40.1431text/plain25.0259text/plainmore-32.5228text/plain41.3775text/plain-15.3767text/plain6.4238text/plain14.0583text/plain31.9522text/plain39.9042text/plain15.5527text/plain -13.1339text/plain!-19.0154text/plaintypeArrayprefix_shortobjectid2aa13290db5263c3mime!application/vnd.pluto.tree+objectrootassigneelast_run_timestampA8qpersist_js_state·has_pluto_hook_features§cell_id$16981da0-fc4d-11ea-37a2-535aa014a298depends_on_disabled_cells§runtime>published_object_keysdepends_on_skipped_cells§errored$12900562-fc3a-11ea-25e1-f7c91a6940e5queued¤logsrunning¦outputbody<div class="markdown"><p>Note that discrete data should <em>always</em> be plotted with points. The lines are just to guide the eye. </p>
<p>Cumulating data corresponds to taking the integral of a function and is a <em>smoothing</em> operation. Note that the cumulative data is indeed visually smoother than the daily data.</p>
<p>The oscillations in the daily data seem to be due to a lower incidence of reporting at weekends. We could try to smooth this out by taking a <strong>moving average</strong>, say over the past week:</p>
</div>mimetext/htmlrootassigneelast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$12900562-fc3a-11ea-25e1-f7c91a6940e5depends_on_disabled_cells§runtime m	published_object_keysdepends_on_skipped_cells§errored$c400ce4e-fc30-11ea-13b1-b54cf8f5630equeued¤logsrunning¦outputbody<div class="markdown"><p>Now we would like to extract the data for the US alone. How can we access the correct row of the table? We can again filter on the country name. A nicer way to do this is to use the <code>filter</code> function.</p>
<p>This is a <strong>higher-order function</strong>: its first argument is itself a function, which must return <code>true</code> or <code>false</code>.  <code>filter</code> will return all the rows of the <code>DataFrame</code> that satisfy that <strong>predicate</strong>:</p>
</div>mimetext/htmlrootassigneelast_run_timestampA persist_js_state·has_pluto_hook_features§cell_id$c400ce4e-fc30-11ea-13b1-b54cf8f5630edepends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$bcc95a8a-fc2e-11ea-2ccd-3bece42a08e6queued¤logsrunning¦outputbodyc<div class="markdown"><p>You can also use <code>Select</code> to get a dropdown instead:</p>
</div>mimetext/htmlrootassigneelast_run_timestampA persist_js_state·has_pluto_hook_features§cell_id$bcc95a8a-fc2e-11ea-2ccd-3bece42a08e6depends_on_disabled_cells§runtime ǵpublished_object_keysdepends_on_skipped_cells§errored$19bdf146-fc3c-11ea-3c60-bf7823c43a1dqueued¤logsrunning¦outputbodyprefixFloat64elements 0.714286text/plain0.714286text/plain0.857143text/plain0.857143text/plain0.428571text/plain0.857143text/plain0.857143text/plain0.714286text/plain	0.857143text/plain
0.571429text/plain0.571429text/plain0.571429text/plain0.142857text/plain0.285714text/plain0.285714text/plain0.285714text/plain0.285714text/plain0.285714text/plain0.285714text/plain0.285714text/plainmoreg34969.4text/plainh32148.6text/plaini32035.1text/plainj38611.7text/plaink38525.7text/plainl37744.6text/plainm36530.3text/plainn35350.7text/plaino31699.9text/plainp30420.7text/plaintypeArrayprefix_shortobjectid40195018907aa91mime!application/vnd.pluto.tree+objectrootassigneelast_run_timestampAO?persist_js_state·has_pluto_hook_features§cell_id$19bdf146-fc3c-11ea-3c60-bf7823c43a1ddepends_on_disabled_cells§runtime0published_object_keysdepends_on_skipped_cells§errored$a9c39dbe-fc4d-11ea-2e86-4992896e2abbqueued¤logsrunning¦outputbody1<div class="markdown"><h2>Adding maps</h2>
</div>mimetext/htmlrootassigneelast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$a9c39dbe-fc4d-11ea-2e86-4992896e2abbdepends_on_disabled_cells§runtime Zpublished_object_keysdepends_on_skipped_cells§errored$b3e1ebf8-fc56-11ea-05b8-ed0b9e50503dqueued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA<persist_js_state·has_pluto_hook_features§cell_id$b3e1ebf8-fc56-11ea-05b8-ed0b9e50503ddepends_on_disabled_cells§runtimeGƵpublished_object_keysdepends_on_skipped_cells§errored$e0493940-8aa7-4733-af72-cd6bc0e37d92queued¤logsrunning¦outputbody<<div class="markdown"><h2>Download and load data</h2>
</div>mimetext/htmlrootassigneelast_run_timestampA0persist_js_state·has_pluto_hook_features§cell_id$e0493940-8aa7-4733-af72-cd6bc0e37d92depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$99d5a138-fc30-11ea-2977-71732ca3aeadqueued¤logsrunning¦outputbody289mimetext/plainrootassigneelast_run_timestampAҐpersist_js_state·has_pluto_hook_features§cell_id$99d5a138-fc30-11ea-2977-71732ca3aeaddepends_on_disabled_cells§runtime*published_object_keysdepends_on_skipped_cells§errored$85a145c6-fceb-11ea-0c94-27b3ef8270bcqueued¤logsrunning¦outputbody)<div class="markdown"><p>Day 1</p>
</div>mimetext/htmlrootassigneelast_run_timestampAH.persist_js_state·has_pluto_hook_features§cell_id$85a145c6-fceb-11ea-0c94-27b3ef8270bcdepends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$0c098923-b016-4c65-9a37-6b7b56b13a0cqueued¤logsrunning¦outputbodyprefixStringelements "1/22/20"text/plain"1/23/20"text/plain"1/24/20"text/plain"1/25/20"text/plain"1/26/20"text/plain"1/27/20"text/plain"1/28/20"text/plain"1/29/20"text/plain	"1/30/20"text/plain
"1/31/20"text/plain"2/1/20"text/plain"2/2/20"text/plain"2/3/20"text/plain"2/4/20"text/plain"2/5/20"text/plain"2/6/20"text/plain"2/7/20"text/plain"2/8/20"text/plain"2/9/20"text/plain"2/10/20"text/plainmoren"2/28/23"text/plaino"3/1/23"text/plainp"3/2/23"text/plainq"3/3/23"text/plainr"3/4/23"text/plains"3/5/23"text/plaint"3/6/23"text/plainu"3/7/23"text/plainv"3/8/23"text/plainw"3/9/23"text/plaintypeArrayprefix_shortobjectidb1772268603f5390mime!application/vnd.pluto.tree+objectrootassigneedate_stringslast_run_timestampA%cpersist_js_state·has_pluto_hook_features§cell_id$0c098923-b016-4c65-9a37-6b7b56b13a0cdepends_on_disabled_cells§runtimejpublished_object_keysdepends_on_skipped_cells§errored$ee27bd98-fc37-11ea-163c-1365e194fc2equeued¤logsrunning¦outputbodyق<div class="markdown"><p>Since the year was not correctly represented in the original data, we need to manually fix it:</p>
</div>mimetext/htmlrootassigneelast_run_timestampAlpersist_js_state·has_pluto_hook_features§cell_id$ee27bd98-fc37-11ea-163c-1365e194fc2edepends_on_disabled_cells§runtime  published_object_keysdepends_on_skipped_cells§errored$f099424c-0e22-42fb-894c-d8c2a65715fbqueued¤logsrunning¦outputbodymsg"UndefVarError: scatter not definedstacktracecall_shorttop-level scopeinlined£urlpathf/home/runner/work/disorganised-mess/disorganised-mess/covid.jl#==#f099424c-0e22-42fb-894c-d8c2a65715fbsource_packagecalltop-level scopelinfo_typeCore.CodeInfolinefile0covid.jl#==#f099424c-0e22-42fb-894c-d8c2a65715fbfunctop-level scopeparent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneelast_run_timestampA缝(persist_js_state·has_pluto_hook_features§cell_id$f099424c-0e22-42fb-894c-d8c2a65715fbdepends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$57a9bb06-fc4a-11ea-2665-7f97026981dcqueued¤logsrunning¦outputbodyٕ<div class="markdown"><p>Let&#39;s extract and plot the geographical information. To reduce the visual noise a bit we will only use those </p>
</div>mimetext/htmlrootassigneelast_run_timestampA}̰persist_js_state·has_pluto_hook_features§cell_id$57a9bb06-fc4a-11ea-2665-7f97026981dcdepends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$bb6316b7-23fb-44a3-b64a-dfb71a7df011queued¤logsrunning¦outputbodyprefixStringelements "province"text/plain"country"text/plain"latitude"text/plain"longitude"text/plain"1/22/20"text/plain"1/23/20"text/plain"1/24/20"text/plain"1/25/20"text/plain	"1/26/20"text/plain
"1/27/20"text/plain"1/28/20"text/plain"1/29/20"text/plain"1/30/20"text/plain"1/31/20"text/plain"2/1/20"text/plain"2/2/20"text/plain"2/3/20"text/plain"2/4/20"text/plain"2/5/20"text/plain"2/6/20"text/plainmorer"2/28/23"text/plains"3/1/23"text/plaint"3/2/23"text/plainu"3/3/23"text/plainv"3/4/23"text/plainw"3/5/23"text/plainx"3/6/23"text/plainy"3/7/23"text/plainz"3/8/23"text/plain{"3/9/23"text/plaintypeArrayprefix_shortobjectidfeb88e38fd103b60mime!application/vnd.pluto.tree+objectrootassigneecolumn_nameslast_run_timestampAtְpersist_js_state·has_pluto_hook_features§cell_id$bb6316b7-23fb-44a3-b64a-dfb71a7df011depends_on_disabled_cells§runtime 򌸵published_object_keysdepends_on_skipped_cells§errored$d911edb6-fc87-11ea-2258-d34d61c02245queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA䏰persist_js_state·has_pluto_hook_features§cell_id$d911edb6-fc87-11ea-2258-d34d61c02245depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$7b2496b0-fc35-11ea-0e78-473e5e8eac44queued¤logsrunning¦outputbodyrows"Anguilla"text/plain"United Kingdom"text/plain18.2206text/plain-63.0686text/plain0text/plain0text/plain0text/plain0text/plainmore"Bermuda"text/plain"United Kingdom"text/plain32.3078text/plain-64.7505text/plain0text/plain0text/plain0text/plain0text/plainmore"British Virgin Islands"text/plain"United Kingdom"text/plain18.4207text/plain-64.64text/plain0text/plain0text/plain0text/plain0text/plainmore"Cayman Islands"text/plain"United Kingdom"text/plain19.3133text/plain-81.2546text/plain0text/plain0text/plain0text/plain0text/plainmore"Channel Islands"text/plain"United Kingdom"text/plain49.3723text/plain-2.3644text/plain0text/plain0text/plain0text/plain0text/plainmore"Falkland Islands (Malvinas)"text/plain"United Kingdom"text/plain-51.7963text/plain-59.5236text/plain0text/plain0text/plain0text/plain0text/plainmore"Gibraltar"text/plain"United Kingdom"text/plain36.1408text/plain-5.3536text/plain0text/plain0text/plain0text/plain0text/plainmore"Guernsey"text/plain"United Kingdom"text/plain49.4482text/plain-2.58949text/plain0text/plain0text/plain0text/plain0text/plainmore	"Isle of Man"text/plain"United Kingdom"text/plain54.2361text/plain-4.5481text/plain0text/plain0text/plain0text/plain0text/plainmore
"Jersey"text/plain"United Kingdom"text/plain49.2138text/plain-2.1358text/plain0text/plain0text/plain0text/plain0text/plainmore"Montserrat"text/plain"United Kingdom"text/plain16.7425text/plain-62.1874text/plain0text/plain0text/plain0text/plain0text/plainmore"Pitcairn Islands"text/plain"United Kingdom"text/plain-24.3768text/plain-128.324text/plain0text/plain0text/plain0text/plain0text/plainmore."Saint Helena, Ascension and Tristan da Cunha"text/plain"United Kingdom"text/plain-7.9467text/plain-14.3559text/plain0text/plain0text/plain0text/plain0text/plainmore"Turks and Caicos Islands"text/plain"United Kingdom"text/plain21.694text/plain-71.7979text/plain0text/plain0text/plain0text/plain0text/plainmoremissingtext/plain"United Kingdom"text/plain55.3781text/plain-3.436text/plain0text/plain0text/plain0text/plain0text/plainmoreobjectid9193a76923903f1dschemanamesprovincecountrylatitudelongitude1/22/201/23/201/24/201/25/20moretypesString?StringFloat64?Float64?Int64Int64Int64Int64moremime"application/vnd.pluto.table+objectrootassigneelast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$7b2496b0-fc35-11ea-0e78-473e5e8eac44depends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$efa281da-cef9-41bc-923e-625140ce5a07queued¤logsrunning¦outputbody<div class="markdown"><p>In this notebook we will explore and analyse data on the COVID-19 pandemic. The aim is to use Julia&#39;s tools to analyse and visualise the data in different ways.</p>
<p>Here is an example of the kind of visualisation we will be able to produce:</p>
</div>mimetext/htmlrootassigneelast_run_timestampAHpersist_js_state·has_pluto_hook_features§cell_id$efa281da-cef9-41bc-923e-625140ce5a07depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$ad43cea2-fc28-11ea-2bc3-a9d81e3766f4queued¤logsrunning¦outputbodyX<div class="markdown"><p>A <code>DataFrame</code> is a standard way of storing <strong>heterogeneous data</strong> in Julia, i.e. a table consisting of columns with different types. As you can see from the display of the <code>DataFrame</code> object above, each column has an associated type, but different columns have different types, reflecting the type of the data in that column.</p>
<p>In our case, country names are stored as <code>String</code>s, their latitude and longitude as <code>Float64</code>s and the &#40;cumulative&#41; case counts for each day as <code>Int64</code>s. .</p>
</div>mimetext/htmlrootassigneelast_run_timestampAx:persist_js_state·has_pluto_hook_features§cell_id$ad43cea2-fc28-11ea-2bc3-a9d81e3766f4depends_on_disabled_cells§runtime L^published_object_keysdepends_on_skipped_cells§errored$7ec28cd0-fc87-11ea-2de5-1959ea5dc37cqueued¤logsrunning¦outputbodymsgِHTTP/2 500 while requesting https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/ne_110m_admin_0_countries.zipstacktracecall_short#3inlinedãurlpath`/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.7/Downloads/src/Downloads.jlsource_packagecall#3linfo_typeNothinglinefileDownloads.jlfunc#3parent_modulefrom_ccall_shortوarg_write(f::Downloads.var"#3#4"{Nothing, Vector{Pair{String, String}}, Float64, Nothing, Bool, Nothing, Nothing, String}, arg::Nothing)inlined£urlefile:///buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.7/ArgTools/src/ArgTools.jlpath^/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.7/ArgTools/src/ArgTools.jlsource_packagecallوarg_write(f::Downloads.var"#3#4"{Nothing, Vector{Pair{String, String}}, Float64, Nothing, Bool, Nothing, Nothing, String}, arg::Nothing)linfo_typeCore.MethodInstancelineefileArgTools.jlfuncarg_writeparent_modulefrom_ccall_short#download#2inlinedãurlpath`/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.7/Downloads/src/Downloads.jlsource_packagecall#download#2linfo_typeNothinglinefileDownloads.jlfunc#download#2parent_modulefrom_ccall_short&download(url::String, output::Nothing)inlined£urlgfile:///buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.7/Downloads/src/Downloads.jlpath`/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.7/Downloads/src/Downloads.jlsource_packagecall&download(url::String, output::Nothing)linfo_typeCore.MethodInstancelinefileDownloads.jlfuncdownloadparent_modulefrom_ccall_short#invokelatest#2inlinedãurlpath./essentials.jlsource_packagecall#invokelatest#2linfo_typeNothingline̤fileessentials.jlfunc#invokelatest#2parent_modulefrom_ccall_shortinvokelatestinlinedãurlpath./essentials.jlsource_packagecallinvokelatestlinfo_typeNothinglineʤfileessentials.jlfuncinvokelatestparent_modulefrom_ccall_shortdo_downloadinlinedãurlpath./download.jlsource_packagecalldo_downloadlinfo_typeNothinglinefiledownload.jlfuncdo_downloadparent_modulefrom_ccall_shortdownloadinlinedãurlpath./download.jlsource_packagecalldownloadlinfo_typeNothinglinefiledownload.jlfuncdownloadparent_modulefrom_ccall_shorttop-level scopeinlinedãurlpathf/home/runner/work/disorganised-mess/disorganised-mess/covid.jl#==#7ec28cd0-fc87-11ea-2de5-1959ea5dc37csource_packagecalltop-level scopelinfo_typeNothinglinefile0covid.jl#==#7ec28cd0-fc87-11ea-2de5-1959ea5dc37cfunc##function_wrapped_cell#464parent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneelast_run_timestampASŰpersist_js_state·has_pluto_hook_features§cell_id$7ec28cd0-fc87-11ea-2de5-1959ea5dc37cdepends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§erroredñcell_dependencies j$251c06e4-fc77-11ea-1a0f-73139ba11e83precedence_heuristic	cell_id$251c06e4-fc77-11ea-1a0f-73139ba11e83downstream_cells_mapupstream_cells_map@md_strgetindex$68f76d3b-b398-459d-bf39-20bf300dcaa2precedence_heuristic	cell_id$68f76d3b-b398-459d-bf39-20bf300dcaa2downstream_cells_mapall_countries$79ba0433-2a31-475a-87c9-14103ebbff16$9ee79840-30ff-4c92-97f4-e178caceceaf$16a79308-fc36-11ea-16e5-e1087d7ebbda$a29c8ad0-fc4a-11ea-14c7-71435769b73eupstream_cells_map:data$38344160-fc27-11ea-220e-95aa00e4b083$8990f13a-fc35-11ea-338f-0955eeb23c3cprecedence_heuristic	cell_id$8990f13a-fc35-11ea-338f-0955eeb23c3cdownstream_cells_mapupstream_cells_map@md_strgetindex$b3880f40-fc36-11ea-074a-edc51adeb6f0precedence_heuristic	cell_id$b3880f40-fc36-11ea-074a-edc51adeb6f0downstream_cells_mapupstream_cells_map@md_strgetindex$25c79620-14f4-45a7-b120-05ec72cb77e9precedence_heuristic	cell_id$25c79620-14f4-45a7-b120-05ec72cb77e9downstream_cells_mapdate_format$31dc4e46-4839-4f01-b383-1a1189aeb0e6$f5c29f0d-937f-4731-8f87-0405ebc966f5upstream_cells_mapDates$cbd9c1aa-fc37-11ea-29d9-e3361406796fDates.DateFormat$0f87cec6-fc31-11ea-23d2-395e61f38b6fprecedence_heuristic	cell_id$0f87cec6-fc31-11ea-23d2-395e61f38b6fdownstream_cells_mapupstream_cells_map@md_strgetindex$893a417c-fcea-11ea-38f4-1df639c54cbcprecedence_heuristic	cell_id$893a417c-fcea-11ea-38f4-1df639c54cbcdownstream_cells_mapupstream_cells_mapday$4ccb2718-fce2-11ea-18c4-89640faec38d:set_points$c939a87a-fcdc-11ea-29dd-c1f6dd3de88fdata$38344160-fc27-11ea-220e-95aa00e4b083daily$39982810-fc76-11ea-01c3-3987cfc2fd3c$252eff18-fc3d-11ea-0c18-7b130ada882eprecedence_heuristic	cell_id$252eff18-fc3d-11ea-0c18-7b130ada882edownstream_cells_mapupstream_cells_map@md_strgetindex$c939a87a-fcdc-11ea-29dd-c1f6dd3de88fprecedence_heuristic	cell_id$c939a87a-fcdc-11ea-29dd-c1f6dd3de88fdownstream_cells_mapset_points$893a417c-fcea-11ea-38f4-1df639c54cbcupstream_cells_mapJSON$db4c1f10-7c37-4513-887a-2467ce673458make_features$b4264196-fcdc-11ea-2197-512f8363a4d3HTMLsprintJSON.print$a41db8ea-f0e0-461f-a298-bdcea42a67f3precedence_heuristic	cell_id$a41db8ea-f0e0-461f-a298-bdcea42a67f3downstream_cells_mapupstream_cells_map:data$38344160-fc27-11ea-220e-95aa00e4b083US_row$16a79308-fc36-11ea-16e5-e1087d7ebbda$a29c8ad0-fc4a-11ea-14c7-71435769b73eprecedence_heuristic	cell_id$a29c8ad0-fc4a-11ea-14c7-71435769b73edownstream_cells_mapindicesupstream_cells_mapprovince$80138b30-fc4a-11ea-0e15-b54cf6b402dfall_countries$68f76d3b-b398-459d-bf39-20bf300dcaa2ismissing$4e4cca22-fc4c-11ea-12ae-2b51545799ecprecedence_heuristic	cell_id$4e4cca22-fc4c-11ea-12ae-2b51545799ecdownstream_cells_mapupstream_cells_maplengthannotate!:province$80138b30-fc4a-11ea-0e15-b54cf6b402dfscatterRGBAdata$38344160-fc27-11ea-220e-95aa00e4b083Float64plot!text$f8e754ee-fc73-11ea-0c7f-cdc760ab3e94precedence_heuristic	cell_id$f8e754ee-fc73-11ea-0c7f-cdc760ab3e94downstream_cells_mapupstream_cells_map@md_strgetindex$c2da1f88-fcdb-11ea-0b18-bf801c373a73precedence_heuristic	cell_id$c2da1f88-fcdb-11ea-0b18-bf801c373a73downstream_cells_mapupstream_cells_mapResource$687409a2-fc43-11ea-03e0-d9a7a48165a8precedence_heuristic	cell_id$687409a2-fc43-11ea-03e0-d9a7a48165a8downstream_cells_mapupstream_cells_map@md_strgetindex$b4264196-fcdc-11ea-2197-512f8363a4d3precedence_heuristic	cell_id$b4264196-fcdc-11ea-2197-512f8363a4d3downstream_cells_mapmake_features$c939a87a-fcdc-11ea-29dd-c1f6dd3de88fupstream_cells_mapDictmaplog10*=>$a8b2db96-fc30-11ea-2eea-b938a3a430fbprecedence_heuristic	cell_id$a8b2db96-fc30-11ea-2eea-b938a3a430fbdownstream_cells_mapupstream_cells_map@md_strgetindex$67eebb7e-fc36-11ea-03ef-bd6966487bb5precedence_heuristic	cell_id$67eebb7e-fc36-11ea-03ef-bd6966487bb5downstream_cells_mapupstream_cells_map@md_strgetindex$511eb51e-fc38-11ea-0492-19532da809deprecedence_heuristic	cell_id$511eb51e-fc38-11ea-0492-19532da809dedownstream_cells_mapupstream_cells_map@md_strgetindex$9ee79840-30ff-4c92-97f4-e178caceceafprecedence_heuristic	cell_id$9ee79840-30ff-4c92-97f4-e178caceceafdownstream_cells_mapU_countries$99d5a138-fc30-11ea-2977-71732ca3aead$4f423a75-43da-486f-ac2a-7220032dac9fupstream_cells_mapall_countries$68f76d3b-b398-459d-bf39-20bf300dcaa2startswith$5c1ec9ae-fc2e-11ea-397d-937c7ab1edb2precedence_heuristic	cell_id$5c1ec9ae-fc2e-11ea-397d-937c7ab1edb2downstream_cells_mapi$a39589ee-20e3-4f22-bf81-167fd815f6f9upstream_cells_mapCore:Base.get@bindSlidercountries$79ba0433-2a31-475a-87c9-14103ebbff16BaselengthPlutoRunnerPlutoRunner.create_bondCore.applicable$80138b30-fc4a-11ea-0e15-b54cf6b402dfprecedence_heuristic	cell_id$80138b30-fc4a-11ea-0e15-b54cf6b402dfdownstream_cells_mapprovince$a29c8ad0-fc4a-11ea-14c7-71435769b73e$4e4cca22-fc4c-11ea-12ae-2b51545799ecupstream_cells_mapdata$38344160-fc27-11ea-220e-95aa00e4b083$546a40eb-7897-485d-a1b5-c4dfae0a4861precedence_heuristic	cell_id$546a40eb-7897-485d-a1b5-c4dfae0a4861downstream_cells_mapupstream_cells_map@md_strgetindex$7b5db0f4-fc36-11ea-09a5-49def64f4c79precedence_heuristic	cell_id$7b5db0f4-fc36-11ea-09a5-49def64f4c79downstream_cells_mapUS_data$f099424c-0e22-42fb-894c-d8c2a65715fb$36c37b4d-eb23-4deb-a593-e511eccd9204$dbaacbb6-fc3b-11ea-0a42-a9792e8a6c4cupstream_cells_map:data$38344160-fc27-11ea-220e-95aa00e4b083US_row$16a79308-fc36-11ea-16e5-e1087d7ebbdaendVector$7e7d14a2-fc37-11ea-3f1a-870ca98c4b75precedence_heuristic	cell_id$7e7d14a2-fc37-11ea-3f1a-870ca98c4b75downstream_cells_mapupstream_cells_map@md_strgetindex$79ba0433-2a31-475a-87c9-14103ebbff16precedence_heuristic	cell_id$79ba0433-2a31-475a-87c9-14103ebbff16downstream_cells_mapcountries$5c1ec9ae-fc2e-11ea-397d-937c7ab1edb2$a39589ee-20e3-4f22-bf81-167fd815f6f9$ada3ceb4-fc2e-11ea-2cbf-399430fa18b5upstream_cells_mapuniqueall_countries$68f76d3b-b398-459d-bf39-20bf300dcaa2$dc2cfa82-fc86-11ea-1311-bb6e69350d43precedence_heuristic	cell_id$dc2cfa82-fc86-11ea-1311-bb6e69350d43downstream_cells_mapupstream_cells_mapdownload$39982810-fc76-11ea-01c3-3987cfc2fd3cprecedence_heuristic	cell_id$39982810-fc76-11ea-01c3-3987cfc2fd3cdownstream_cells_mapdaily$4ccb2718-fce2-11ea-18c4-89640faec38d$b406eec8-fc77-11ea-1a98-d36d6d3e2393$893a417c-fcea-11ea-38f4-1df639c54cbc$1a59b12e-fceb-11ea-0634-1b4daee1bc62upstream_cells_map:maxdata$38344160-fc27-11ea-220e-95aa00e4b083Arrayislessdiffend$19f4da16-fc31-11ea-0de9-1dbe668b862dprecedence_heuristic	cell_id$19f4da16-fc31-11ea-0de9-1dbe668b862ddownstream_cells_mapupstream_cells_map@md_strgetindex$1f30a1ac-fc74-11ea-2abf-abf437006babprecedence_heuristic	cell_id$1f30a1ac-fc74-11ea-2abf-abf437006babdownstream_cells_mapupstream_cells_mapday$4ccb2718-fce2-11ea-18c4-89640faec38ddates$f5c29f0d-937f-4731-8f87-0405ebc966f5$1633abe8-fc2f-11ea-2c7e-21b3348a3569precedence_heuristic	cell_id$1633abe8-fc2f-11ea-2c7e-21b3348a3569downstream_cells_mapupstream_cells_map@md_strgetindex$a054e048-4fea-487c-9d06-463723c7151cprecedence_heuristic	cell_id$a054e048-4fea-487c-9d06-463723c7151cdownstream_cells_mapdata_2upstream_cells_mapheaddata$38344160-fc27-11ea-220e-95aa00e4b083rename=>$dbaacbb6-fc3b-11ea-0a42-a9792e8a6c4cprecedence_heuristic	cell_id$dbaacbb6-fc3b-11ea-0a42-a9792e8a6c4cdownstream_cells_mapdaily_cases$19bdf146-fc3c-11ea-3c60-bf7823c43a1d$be868a52-fc3b-11ea-0b60-7fea05ffe8e9$4358c348-91aa-4c76-a443-0a9cefce0e83$4f23c8fc-fc43-11ea-0e73-e5f89d14155cupstream_cells_mapUS_data$7b5db0f4-fc36-11ea-09a5-49def64f4c79:plotdates$f5c29f0d-937f-4731-8f87-0405ebc966f5diffend$8709f208-fc4a-11ea-0203-e13eae5f0d93precedence_heuristic	cell_id$8709f208-fc4a-11ea-0203-e13eae5f0d93downstream_cells_mapupstream_cells_map@md_strgetindex$07282688-fc3e-11ea-2f9e-5b0581061e65precedence_heuristic	cell_id$07282688-fc3e-11ea-2f9e-5b0581061e65downstream_cells_mapupstream_cells_map@md_strfirstexp_period$91f99062-fc43-11ea-1b0e-afe8aa8a1c3dlastgetindex$3edd2a22-fc4a-11ea-07e5-55ca6d7639e8precedence_heuristic	cell_id$3edd2a22-fc4a-11ea-07e5-55ca6d7639e8downstream_cells_mapupstream_cells_map@md_strgetindex$0f329ece-fc74-11ea-1e02-bdbddf551ef3precedence_heuristic	cell_id$0f329ece-fc74-11ea-1e02-bdbddf551ef3downstream_cells_mapday_ticks$4ccb2718-fce2-11ea-18c4-89640faec38dupstream_cells_mapCoreBaseClockPlutoRunner.create_bondPlutoRunnerCore.applicable@bindBase.get$2f254a9e-fc3e-11ea-2c02-75ed59f41903precedence_heuristic	cell_id$2f254a9e-fc3e-11ea-2c02-75ed59f41903downstream_cells_mapupstream_cells_map@md_strgetindex$31dc4e46-4839-4f01-b383-1a1189aeb0e6precedence_heuristic	cell_id$31dc4e46-4839-4f01-b383-1a1189aeb0e6downstream_cells_mapupstream_cells_mapdate_strings$0c098923-b016-4c65-9a37-6b7b56b13a0cDatedate_format$25c79620-14f4-45a7-b120-05ec72cb77e9parse$f5c29f0d-937f-4731-8f87-0405ebc966f5precedence_heuristic	cell_id$f5c29f0d-937f-4731-8f87-0405ebc966f5downstream_cells_mapdates$36c37b4d-eb23-4deb-a593-e511eccd9204$dbaacbb6-fc3b-11ea-0a42-a9792e8a6c4c$210cee94-fc3e-11ea-1a6e-7f88270354e1$1f30a1ac-fc74-11ea-2abf-abf437006babupstream_cells_mapdate_strings$0c098923-b016-4c65-9a37-6b7b56b13a0c+date_format$25c79620-14f4-45a7-b120-05ec72cb77e9DateYearparse$4f423a75-43da-486f-ac2a-7220032dac9fprecedence_heuristic	cell_id$4f423a75-43da-486f-ac2a-7220032dac9fdownstream_cells_mapupstream_cells_map:U_countries$9ee79840-30ff-4c92-97f4-e178caceceafdata$38344160-fc27-11ea-220e-95aa00e4b083$6de0800c-fc37-11ea-0d94-2b6f8f66964dprecedence_heuristic	cell_id$6de0800c-fc37-11ea-0d94-2b6f8f66964ddownstream_cells_mapupstream_cells_map@md_strgetindex$24934438-fc74-11ea-12e4-7f7e50f54029precedence_heuristic	cell_id$24934438-fc74-11ea-12e4-7f7e50f54029downstream_cells_mapupstream_cells_map$4358c348-91aa-4c76-a443-0a9cefce0e83precedence_heuristic	cell_id$4358c348-91aa-4c76-a443-0a9cefce0e83downstream_cells_mapupstream_cells_mapdaily_cases$dbaacbb6-fc3b-11ea-0a42-a9792e8a6c4ctitle!replaceplot=>xlabel!NaNylabel!$9484ea9e-fc2e-11ea-137c-6da8212da5bdprecedence_heuristic	cell_id$9484ea9e-fc2e-11ea-137c-6da8212da5bddownstream_cells_mapupstream_cells_map@md_strgetindex$4ccb2718-fce2-11ea-18c4-89640faec38dprecedence_heuristic	cell_id$4ccb2718-fce2-11ea-18c4-89640faec38ddownstream_cells_mapday$b406eec8-fc77-11ea-1a98-d36d6d3e2393$1f30a1ac-fc74-11ea-2abf-abf437006bab$85a145c6-fceb-11ea-0c94-27b3ef8270bc$893a417c-fcea-11ea-38f4-1df639c54cbc$1a59b12e-fceb-11ea-0634-1b4daee1bc62upstream_cells_mapday_ticks$0f329ece-fc74-11ea-1e02-bdbddf551ef3minislesssizedaily$39982810-fc76-11ea-01c3-3987cfc2fd3c$75d2dc66-fc47-11ea-0e35-05f9cf38e901precedence_heuristic	cell_id$75d2dc66-fc47-11ea-0e35-05f9cf38e901downstream_cells_mapupstream_cells_map@md_strgetindex$b406eec8-fc77-11ea-1a98-d36d6d3e2393precedence_heuristic	cell_id$b406eec8-fc77-11ea-1a98-d36d6d3e2393downstream_cells_mapupstream_cells_mapday$4ccb2718-fce2-11ea-18c4-89640faec38d:log10daily$39982810-fc76-11ea-01c3-3987cfc2fd3cmaximum$861a2c3a-fc88-11ea-2d95-fb076e751203precedence_heuristic	cell_id$861a2c3a-fc88-11ea-2d95-fb076e751203downstream_cells_mapupstream_cells_mapBaseBase.Docs.HTML@html_str$c5ad4d40-fc57-11ea-23cb-e55487bc6f7aprecedence_heuristic	cell_id$c5ad4d40-fc57-11ea-23cb-e55487bc6f7adownstream_cells_mapupstream_cells_mapfilterdata$38344160-fc27-11ea-220e-95aa00e4b083startswith$b0eb3918-fc1f-11ea-238b-7f5d23e424bbprecedence_heuristic	cell_id$b0eb3918-fc1f-11ea-238b-7f5d23e424bbdownstream_cells_mapupstream_cells_map@md_strgetindex$36c37b4d-eb23-4deb-a593-e511eccd9204precedence_heuristic	cell_id$36c37b4d-eb23-4deb-a593-e511eccd9204downstream_cells_mapupstream_cells_mapUS_data$7b5db0f4-fc36-11ea-09a5-49def64f4c79title!plotdates$f5c29f0d-937f-4731-8f87-0405ebc966f5xlabel!ylabel!$a7369222-fc20-11ea-314d-4d6b0f0f72ebprecedence_heuristic	cell_id$a7369222-fc20-11ea-314d-4d6b0f0f72ebdownstream_cells_mapupstream_cells_map@md_strgetindex$fab64d86-fc28-11ea-0ae1-3ba1b9a14759precedence_heuristic	cell_id$fab64d86-fc28-11ea-0ae1-3ba1b9a14759downstream_cells_mapupstream_cells_map@md_strgetindex$9e23b0e2-ac13-4d19-a3f9-4a655a1e9f14precedence_heuristic	cell_id$9e23b0e2-ac13-4d19-a3f9-4a655a1e9f14downstream_cells_mapupstream_cells_mapdate_strings$0c098923-b016-4c65-9a37-6b7b56b13a0c$1620aa9d-7dcd-4686-b7e4-a72cebe315edprecedence_heuristic	cell_id$1620aa9d-7dcd-4686-b7e4-a72cebe315eddownstream_cells_mapupstream_cells_map@md_strgetindex$ada3ceb4-fc2e-11ea-2cbf-399430fa18b5precedence_heuristic	cell_id$ada3ceb4-fc2e-11ea-2cbf-399430fa18b5downstream_cells_mapcountryupstream_cells_mapcountries$79ba0433-2a31-475a-87c9-14103ebbff16BaseCorePlutoRunner.create_bondPlutoRunnerCore.applicable@bindBase.getSelect$34440afc-fc2e-11ea-0484-5b47af235badprecedence_heuristic	cell_id$34440afc-fc2e-11ea-0484-5b47af235baddownstream_cells_mapupstream_cells_map@md_strgetindex$a26b8742-6a16-445a-ae77-25a4189c0f14precedence_heuristiccell_id$a26b8742-6a16-445a-ae77-25a4189c0f14downstream_cells_mapPlotsupstream_cells_map$ed383524-e0c0-4da2-9a98-ca75aadd2c9eprecedence_heuristic	cell_id$ed383524-e0c0-4da2-9a98-ca75aadd2c9edownstream_cells_mapupstream_cells_map@md_strgetindex$b93b88b0-fc4d-11ea-0c45-8f64983f8b5cprecedence_heuristic	cell_id$b93b88b0-fc4d-11ea-0c45-8f64983f8b5cdownstream_cells_mapupstream_cells_map@md_strgetindex$c460b0c3-6d3b-439b-8cc7-1c58d6547f51precedence_heuristic	cell_id$c460b0c3-6d3b-439b-8cc7-1c58d6547f51downstream_cells_mapupstream_cells_mapdownloadurl$64d9bcea-7c85-421d-8f1e-17ea8ee694da$1a59b12e-fceb-11ea-0634-1b4daee1bc62precedence_heuristic	cell_id$1a59b12e-fceb-11ea-0634-1b4daee1bc62downstream_cells_mapupstream_cells_mapday$4ccb2718-fce2-11ea-18c4-89640faec38d:log10daily$39982810-fc76-11ea-01c3-3987cfc2fd3c$91f99062-fc43-11ea-1b0e-afe8aa8a1c3dprecedence_heuristic	cell_id$91f99062-fc43-11ea-1b0e-afe8aa8a1c3ddownstream_cells_mapexp_period$07282688-fc3e-11ea-2f9e-5b0581061e65$210cee94-fc3e-11ea-1a6e-7f88270354e1upstream_cells_map:$ae9149f4-fcdc-11ea-30a3-031d38f38b23precedence_heuristic	cell_id$ae9149f4-fcdc-11ea-30a3-031d38f38b23downstream_cells_mapupstream_cells_mapResource$a772eadc-fc35-11ea-3d38-4b121f88f1d7precedence_heuristic	cell_id$a772eadc-fc35-11ea-3d38-4b121f88f1d7downstream_cells_mapupstream_cells_map@md_strgetindex$4f23c8fc-fc43-11ea-0e73-e5f89d14155cprecedence_heuristic	cell_id$4f23c8fc-fc43-11ea-0e73-e5f89d14155cdownstream_cells_mapupstream_cells_mapdaily_cases$dbaacbb6-fc3b-11ea-0a42-a9792e8a6c4ctitle!replaceplot=>xlabel!NaNylabel!$a39589ee-20e3-4f22-bf81-167fd815f6f9precedence_heuristic	cell_id$a39589ee-20e3-4f22-bf81-167fd815f6f9downstream_cells_mapupstream_cells_map@md_strcountries$79ba0433-2a31-475a-87c9-14103ebbff16i$5c1ec9ae-fc2e-11ea-397d-937c7ab1edb2Textgetindex$cbd9c1aa-fc37-11ea-29d9-e3361406796fprecedence_heuristiccell_id$cbd9c1aa-fc37-11ea-29d9-e3361406796fdownstream_cells_mapDates$25c79620-14f4-45a7-b120-05ec72cb77e9upstream_cells_map$450b4902-fc30-11ea-321d-29faf6188ff5precedence_heuristic	cell_id$450b4902-fc30-11ea-321d-29faf6188ff5downstream_cells_mapupstream_cells_map@md_strgetindex$38344160-fc27-11ea-220e-95aa00e4b083precedence_heuristic	cell_id$38344160-fc27-11ea-220e-95aa00e4b083downstream_cells_mapcsv_datadata$a054e048-4fea-487c-9d06-463723c7151c$e9ad97b6-fdef-4f48-bd32-634cfd2ce0e6$68f76d3b-b398-459d-bf39-20bf300dcaa2$4f423a75-43da-486f-ac2a-7220032dac9f$7b2496b0-fc35-11ea-0e78-473e5e8eac44$a41db8ea-f0e0-461f-a298-bdcea42a67f3$7b5db0f4-fc36-11ea-09a5-49def64f4c79$bb6316b7-23fb-44a3-b64a-dfb71a7df011$0c098923-b016-4c65-9a37-6b7b56b13a0c$c5ad4d40-fc57-11ea-23cb-e55487bc6f7a$80138b30-fc4a-11ea-0e15-b54cf6b402df$4e4cca22-fc4c-11ea-12ae-2b51545799ec$16981da0-fc4d-11ea-37a2-535aa014a298$39982810-fc76-11ea-01c3-3987cfc2fd3c$893a417c-fcea-11ea-38f4-1df639c54cbcupstream_cells_mapCSV$db4c1f10-7c37-4513-887a-2467ce673458CSV.FileDataFrame$287f0fa8-fc44-11ea-2788-9f3ac4ee6d2bprecedence_heuristic	cell_id$287f0fa8-fc44-11ea-2788-9f3ac4ee6d2bdownstream_cells_mapupstream_cells_map@md_strgetindex$d228e232-fc39-11ea-1569-a31b817118c4precedence_heuristic	cell_id$d228e232-fc39-11ea-1569-a31b817118c4downstream_cells_mapupstream_cells_map@md_strgetindex$9626d74a-fc3d-11ea-2ab3-978dc46c0f1fprecedence_heuristic	cell_id$9626d74a-fc3d-11ea-2ab3-978dc46c0f1fdownstream_cells_mapupstream_cells_map@md_strgetindex$3519cf96-fc26-11ea-3386-d97c61ea1b85precedence_heuristic	cell_id$3519cf96-fc26-11ea-3386-d97c61ea1b85downstream_cells_mapupstream_cells_map@md_strgetindex$16a79308-fc36-11ea-16e5-e1087d7ebbdaprecedence_heuristic	cell_id$16a79308-fc36-11ea-16e5-e1087d7ebbdadownstream_cells_mapUS_row$a41db8ea-f0e0-461f-a298-bdcea42a67f3$7b5db0f4-fc36-11ea-09a5-49def64f4c79upstream_cells_mapfindfirstall_countries$68f76d3b-b398-459d-bf39-20bf300dcaa2==$ada44a56-fc56-11ea-2ab7-fb649be7e066precedence_heuristic	cell_id$ada44a56-fc56-11ea-2ab7-fb649be7e066downstream_cells_mapshp_countriesupstream_cells_mapShapefile$db4c1f10-7c37-4513-887a-2467ce673458Shapefile.TableShapefile.shapes$64d9bcea-7c85-421d-8f1e-17ea8ee694daprecedence_heuristic	cell_id$64d9bcea-7c85-421d-8f1e-17ea8ee694dadownstream_cells_mapurl$c460b0c3-6d3b-439b-8cc7-1c58d6547f51upstream_cells_map$210cee94-fc3e-11ea-1a6e-7f88270354e1precedence_heuristic	cell_id$210cee94-fc3e-11ea-1a6e-7f88270354e1downstream_cells_mapupstream_cells_mapexp_period$91f99062-fc43-11ea-1b0e-afe8aa8a1c3ddates$f5c29f0d-937f-4731-8f87-0405ebc966f5$539c951c-fc48-11ea-2293-457b7717ea4dprecedence_heuristic	cell_id$539c951c-fc48-11ea-2293-457b7717ea4ddownstream_cells_mapupstream_cells_map@md_strgetindex$aaa7c012-fc1f-11ea-3c6c-89630affb1dbprecedence_heuristic	cell_id$aaa7c012-fc1f-11ea-3c6c-89630affb1dbdownstream_cells_mapupstream_cells_map@md_strgetindex$e9ad97b6-fdef-4f48-bd32-634cfd2ce0e6precedence_heuristic	cell_id$e9ad97b6-fdef-4f48-bd32-634cfd2ce0e6downstream_cells_mapupstream_cells_mapheaddata$38344160-fc27-11ea-220e-95aa00e4b083rename!=>$d3398953-afee-4989-932c-995c3ffc0c40precedence_heuristic	cell_id$d3398953-afee-4989-932c-995c3ffc0c40downstream_cells_mapupstream_cells_map@md_strgetindex$0b01120c-fc3d-11ea-1381-8bab939e6214precedence_heuristic	cell_id$0b01120c-fc3d-11ea-1381-8bab939e6214downstream_cells_mapupstream_cells_map@md_strgetindex$db4c1f10-7c37-4513-887a-2467ce673458precedence_heuristiccell_id$db4c1f10-7c37-4513-887a-2467ce673458downstream_cells_mapCSV$38344160-fc27-11ea-220e-95aa00e4b083JSON$c939a87a-fcdc-11ea-29dd-c1f6dd3de88fShapefile$ada44a56-fc56-11ea-2ab7-fb649be7e066Pkg$db4c1f10-7c37-4513-887a-2467ce673458PlutoUIDataFramesZipFile$7ec28cd0-fc87-11ea-2de5-1959ea5dc37cupstream_cells_mapPkg.addPkg$db4c1f10-7c37-4513-887a-2467ce673458$be868a52-fc3b-11ea-0b60-7fea05ffe8e9precedence_heuristic	cell_id$be868a52-fc3b-11ea-0b60-7fea05ffe8e9downstream_cells_mapupstream_cells_mapdaily_cases$dbaacbb6-fc3b-11ea-0a42-a9792e8a6c4cplotplot!running_mean$19bdf146-fc3c-11ea-3c60-bf7823c43a1d$16981da0-fc4d-11ea-37a2-535aa014a298precedence_heuristic	cell_id$16981da0-fc4d-11ea-37a2-535aa014a298downstream_cells_mapupstream_cells_mapdata$38344160-fc27-11ea-220e-95aa00e4b083$12900562-fc3a-11ea-25e1-f7c91a6940e5precedence_heuristic	cell_id$12900562-fc3a-11ea-25e1-f7c91a6940e5downstream_cells_mapupstream_cells_map@md_strgetindex$c400ce4e-fc30-11ea-13b1-b54cf8f5630eprecedence_heuristic	cell_id$c400ce4e-fc30-11ea-13b1-b54cf8f5630edownstream_cells_mapupstream_cells_map@md_strgetindex$bcc95a8a-fc2e-11ea-2ccd-3bece42a08e6precedence_heuristic	cell_id$bcc95a8a-fc2e-11ea-2ccd-3bece42a08e6downstream_cells_mapupstream_cells_map@md_strgetindex$19bdf146-fc3c-11ea-3c60-bf7823c43a1dprecedence_heuristiccell_id$19bdf146-fc3c-11ea-3c60-bf7823c43a1ddownstream_cells_mapStatisticsrunning_mean$be868a52-fc3b-11ea-0b60-7fea05ffe8e9upstream_cells_maplength:-daily_cases$dbaacbb6-fc3b-11ea-0a42-a9792e8a6c4cmean$a9c39dbe-fc4d-11ea-2e86-4992896e2abbprecedence_heuristic	cell_id$a9c39dbe-fc4d-11ea-2e86-4992896e2abbdownstream_cells_mapupstream_cells_map@md_strgetindex$b3e1ebf8-fc56-11ea-05b8-ed0b9e50503dprecedence_heuristic	cell_id$b3e1ebf8-fc56-11ea-05b8-ed0b9e50503ddownstream_cells_mapupstream_cells_map$e0493940-8aa7-4733-af72-cd6bc0e37d92precedence_heuristic	cell_id$e0493940-8aa7-4733-af72-cd6bc0e37d92downstream_cells_mapupstream_cells_map@md_strgetindex$99d5a138-fc30-11ea-2977-71732ca3aeadprecedence_heuristic	cell_id$99d5a138-fc30-11ea-2977-71732ca3aeaddownstream_cells_mapupstream_cells_maplengthU_countries$9ee79840-30ff-4c92-97f4-e178caceceaf$85a145c6-fceb-11ea-0c94-27b3ef8270bcprecedence_heuristic	cell_id$85a145c6-fceb-11ea-0c94-27b3ef8270bcdownstream_cells_mapupstream_cells_map@md_strday$4ccb2718-fce2-11ea-18c4-89640faec38dgetindex$0c098923-b016-4c65-9a37-6b7b56b13a0cprecedence_heuristic	cell_id$0c098923-b016-4c65-9a37-6b7b56b13a0cdownstream_cells_mapdate_strings$9e23b0e2-ac13-4d19-a3f9-4a655a1e9f14$31dc4e46-4839-4f01-b383-1a1189aeb0e6$f5c29f0d-937f-4731-8f87-0405ebc966f5upstream_cells_mapnames:data$38344160-fc27-11ea-220e-95aa00e4b083Stringend$ee27bd98-fc37-11ea-163c-1365e194fc2eprecedence_heuristic	cell_id$ee27bd98-fc37-11ea-163c-1365e194fc2edownstream_cells_mapupstream_cells_map@md_strgetindex$f099424c-0e22-42fb-894c-d8c2a65715fbprecedence_heuristic	cell_id$f099424c-0e22-42fb-894c-d8c2a65715fbdownstream_cells_mapupstream_cells_mapUS_data$7b5db0f4-fc36-11ea-09a5-49def64f4c79scatter$57a9bb06-fc4a-11ea-2665-7f97026981dcprecedence_heuristic	cell_id$57a9bb06-fc4a-11ea-2665-7f97026981dcdownstream_cells_mapupstream_cells_map@md_strgetindex$bb6316b7-23fb-44a3-b64a-dfb71a7df011precedence_heuristic	cell_id$bb6316b7-23fb-44a3-b64a-dfb71a7df011downstream_cells_mapcolumn_namesupstream_cells_mapnamesdata$38344160-fc27-11ea-220e-95aa00e4b083$d911edb6-fc87-11ea-2258-d34d61c02245precedence_heuristic	cell_id$d911edb6-fc87-11ea-2258-d34d61c02245downstream_cells_mapupstream_cells_map$7b2496b0-fc35-11ea-0e78-473e5e8eac44precedence_heuristic	cell_id$7b2496b0-fc35-11ea-0e78-473e5e8eac44downstream_cells_mapupstream_cells_mapfilterdata$38344160-fc27-11ea-220e-95aa00e4b083==$efa281da-cef9-41bc-923e-625140ce5a07precedence_heuristic	cell_id$efa281da-cef9-41bc-923e-625140ce5a07downstream_cells_mapupstream_cells_map@md_strgetindex$ad43cea2-fc28-11ea-2bc3-a9d81e3766f4precedence_heuristic	cell_id$ad43cea2-fc28-11ea-2bc3-a9d81e3766f4downstream_cells_mapupstream_cells_map@md_strgetindex$7ec28cd0-fc87-11ea-2de5-1959ea5dc37cprecedence_heuristic	cell_id$7ec28cd0-fc87-11ea-2de5-1959ea5dc37cdownstream_cells_maprzipfileupstream_cells_mapwriteopenZipFile.ReaderdownloadZipFile$db4c1f10-7c37-4513-887a-2467ce673458printlnclosereadcell_execution_order j$db4c1f10-7c37-4513-887a-2467ce673458$a26b8742-6a16-445a-ae77-25a4189c0f14$cbd9c1aa-fc37-11ea-29d9-e3361406796f$0f87cec6-fc31-11ea-23d2-395e61f38b6f$19f4da16-fc31-11ea-0de9-1dbe668b862d$d3398953-afee-4989-932c-995c3ffc0c40$efa281da-cef9-41bc-923e-625140ce5a07$e0493940-8aa7-4733-af72-cd6bc0e37d92$64d9bcea-7c85-421d-8f1e-17ea8ee694da$c460b0c3-6d3b-439b-8cc7-1c58d6547f51$a7369222-fc20-11ea-314d-4d6b0f0f72eb$1620aa9d-7dcd-4686-b7e4-a72cebe315ed$38344160-fc27-11ea-220e-95aa00e4b083$ad43cea2-fc28-11ea-2bc3-a9d81e3766f4$fab64d86-fc28-11ea-0ae1-3ba1b9a14759$3519cf96-fc26-11ea-3386-d97c61ea1b85$a054e048-4fea-487c-9d06-463723c7151c$e9ad97b6-fdef-4f48-bd32-634cfd2ce0e6$aaa7c012-fc1f-11ea-3c6c-89630affb1db$b0eb3918-fc1f-11ea-238b-7f5d23e424bb$68f76d3b-b398-459d-bf39-20bf300dcaa2$34440afc-fc2e-11ea-0484-5b47af235bad$79ba0433-2a31-475a-87c9-14103ebbff16$5c1ec9ae-fc2e-11ea-397d-937c7ab1edb2$a39589ee-20e3-4f22-bf81-167fd815f6f9$9484ea9e-fc2e-11ea-137c-6da8212da5bd$bcc95a8a-fc2e-11ea-2ccd-3bece42a08e6$ada3ceb4-fc2e-11ea-2cbf-399430fa18b5$1633abe8-fc2f-11ea-2c7e-21b3348a3569$ed383524-e0c0-4da2-9a98-ca75aadd2c9e$9ee79840-30ff-4c92-97f4-e178caceceaf$99d5a138-fc30-11ea-2977-71732ca3aead$450b4902-fc30-11ea-321d-29faf6188ff5$4f423a75-43da-486f-ac2a-7220032dac9f$a8b2db96-fc30-11ea-2eea-b938a3a430fb$c400ce4e-fc30-11ea-13b1-b54cf8f5630e$7b2496b0-fc35-11ea-0e78-473e5e8eac44$8990f13a-fc35-11ea-338f-0955eeb23c3c$a772eadc-fc35-11ea-3d38-4b121f88f1d7$16a79308-fc36-11ea-16e5-e1087d7ebbda$a41db8ea-f0e0-461f-a298-bdcea42a67f3$67eebb7e-fc36-11ea-03ef-bd6966487bb5$7b5db0f4-fc36-11ea-09a5-49def64f4c79$f099424c-0e22-42fb-894c-d8c2a65715fb$7e7d14a2-fc37-11ea-3f1a-870ca98c4b75$75d2dc66-fc47-11ea-0e35-05f9cf38e901$b3880f40-fc36-11ea-074a-edc51adeb6f0$6de0800c-fc37-11ea-0d94-2b6f8f66964d$bb6316b7-23fb-44a3-b64a-dfb71a7df011$0c098923-b016-4c65-9a37-6b7b56b13a0c$546a40eb-7897-485d-a1b5-c4dfae0a4861$9e23b0e2-ac13-4d19-a3f9-4a655a1e9f14$25c79620-14f4-45a7-b120-05ec72cb77e9$31dc4e46-4839-4f01-b383-1a1189aeb0e6$ee27bd98-fc37-11ea-163c-1365e194fc2e$f5c29f0d-937f-4731-8f87-0405ebc966f5$36c37b4d-eb23-4deb-a593-e511eccd9204$511eb51e-fc38-11ea-0492-19532da809de$d228e232-fc39-11ea-1569-a31b817118c4$dbaacbb6-fc3b-11ea-0a42-a9792e8a6c4c$19bdf146-fc3c-11ea-3c60-bf7823c43a1d$12900562-fc3a-11ea-25e1-f7c91a6940e5$be868a52-fc3b-11ea-0b60-7fea05ffe8e9$0b01120c-fc3d-11ea-1381-8bab939e6214$252eff18-fc3d-11ea-0c18-7b130ada882e$9626d74a-fc3d-11ea-2ab3-978dc46c0f1f$4358c348-91aa-4c76-a443-0a9cefce0e83$687409a2-fc43-11ea-03e0-d9a7a48165a8$4f23c8fc-fc43-11ea-0e73-e5f89d14155c$91f99062-fc43-11ea-1b0e-afe8aa8a1c3d$07282688-fc3e-11ea-2f9e-5b0581061e65$210cee94-fc3e-11ea-1a6e-7f88270354e1$2f254a9e-fc3e-11ea-2c02-75ed59f41903$539c951c-fc48-11ea-2293-457b7717ea4d$287f0fa8-fc44-11ea-2788-9f3ac4ee6d2b$3edd2a22-fc4a-11ea-07e5-55ca6d7639e8$c5ad4d40-fc57-11ea-23cb-e55487bc6f7a$57a9bb06-fc4a-11ea-2665-7f97026981dc$80138b30-fc4a-11ea-0e15-b54cf6b402df$8709f208-fc4a-11ea-0203-e13eae5f0d93$a29c8ad0-fc4a-11ea-14c7-71435769b73e$4e4cca22-fc4c-11ea-12ae-2b51545799ec$16981da0-fc4d-11ea-37a2-535aa014a298$a9c39dbe-fc4d-11ea-2e86-4992896e2abb$b93b88b0-fc4d-11ea-0c45-8f64983f8b5c$7ec28cd0-fc87-11ea-2de5-1959ea5dc37c$dc2cfa82-fc86-11ea-1311-bb6e69350d43$ada44a56-fc56-11ea-2ab7-fb649be7e066$d911edb6-fc87-11ea-2258-d34d61c02245$b3e1ebf8-fc56-11ea-05b8-ed0b9e50503d$f8e754ee-fc73-11ea-0c7f-cdc760ab3e94$39982810-fc76-11ea-01c3-3987cfc2fd3c$0f329ece-fc74-11ea-1e02-bdbddf551ef3$4ccb2718-fce2-11ea-18c4-89640faec38d$b406eec8-fc77-11ea-1a98-d36d6d3e2393$1f30a1ac-fc74-11ea-2abf-abf437006bab$24934438-fc74-11ea-12e4-7f7e50f54029$c2da1f88-fcdb-11ea-0b18-bf801c373a73$ae9149f4-fcdc-11ea-30a3-031d38f38b23$85a145c6-fceb-11ea-0c94-27b3ef8270bc$861a2c3a-fc88-11ea-2d95-fb076e751203$1a59b12e-fceb-11ea-0634-1b4daee1bc62$b4264196-fcdc-11ea-2197-512f8363a4d3$c939a87a-fcdc-11ea-29dd-c1f6dd3de88f$893a417c-fcea-11ea-38f4-1df639c54cbc$251c06e4-fc77-11ea-1a0f-73139ba11e83last_hot_reload_time        shortpathcovid.jlprocess_statusreadypath>/home/runner/work/disorganised-mess/disorganised-mess/covid.jlpluto_versionv0.19.47last_save_timeAcell_order j$0f87cec6-fc31-11ea-23d2-395e61f38b6f$19f4da16-fc31-11ea-0de9-1dbe668b862d$d3398953-afee-4989-932c-995c3ffc0c40$efa281da-cef9-41bc-923e-625140ce5a07$e0493940-8aa7-4733-af72-cd6bc0e37d92$64d9bcea-7c85-421d-8f1e-17ea8ee694da$c460b0c3-6d3b-439b-8cc7-1c58d6547f51$a7369222-fc20-11ea-314d-4d6b0f0f72eb$db4c1f10-7c37-4513-887a-2467ce673458$1620aa9d-7dcd-4686-b7e4-a72cebe315ed$38344160-fc27-11ea-220e-95aa00e4b083$ad43cea2-fc28-11ea-2bc3-a9d81e3766f4$fab64d86-fc28-11ea-0ae1-3ba1b9a14759$3519cf96-fc26-11ea-3386-d97c61ea1b85$a054e048-4fea-487c-9d06-463723c7151c$e9ad97b6-fdef-4f48-bd32-634cfd2ce0e6$aaa7c012-fc1f-11ea-3c6c-89630affb1db$b0eb3918-fc1f-11ea-238b-7f5d23e424bb$68f76d3b-b398-459d-bf39-20bf300dcaa2$34440afc-fc2e-11ea-0484-5b47af235bad$79ba0433-2a31-475a-87c9-14103ebbff16$5c1ec9ae-fc2e-11ea-397d-937c7ab1edb2$a39589ee-20e3-4f22-bf81-167fd815f6f9$9484ea9e-fc2e-11ea-137c-6da8212da5bd$bcc95a8a-fc2e-11ea-2ccd-3bece42a08e6$ada3ceb4-fc2e-11ea-2cbf-399430fa18b5$1633abe8-fc2f-11ea-2c7e-21b3348a3569$ed383524-e0c0-4da2-9a98-ca75aadd2c9e$9ee79840-30ff-4c92-97f4-e178caceceaf$99d5a138-fc30-11ea-2977-71732ca3aead$450b4902-fc30-11ea-321d-29faf6188ff5$4f423a75-43da-486f-ac2a-7220032dac9f$a8b2db96-fc30-11ea-2eea-b938a3a430fb$c400ce4e-fc30-11ea-13b1-b54cf8f5630e$7b2496b0-fc35-11ea-0e78-473e5e8eac44$8990f13a-fc35-11ea-338f-0955eeb23c3c$a772eadc-fc35-11ea-3d38-4b121f88f1d7$16a79308-fc36-11ea-16e5-e1087d7ebbda$a41db8ea-f0e0-461f-a298-bdcea42a67f3$67eebb7e-fc36-11ea-03ef-bd6966487bb5$7b5db0f4-fc36-11ea-09a5-49def64f4c79$a26b8742-6a16-445a-ae77-25a4189c0f14$f099424c-0e22-42fb-894c-d8c2a65715fb$7e7d14a2-fc37-11ea-3f1a-870ca98c4b75$75d2dc66-fc47-11ea-0e35-05f9cf38e901$b3880f40-fc36-11ea-074a-edc51adeb6f0$6de0800c-fc37-11ea-0d94-2b6f8f66964d$bb6316b7-23fb-44a3-b64a-dfb71a7df011$0c098923-b016-4c65-9a37-6b7b56b13a0c$546a40eb-7897-485d-a1b5-c4dfae0a4861$cbd9c1aa-fc37-11ea-29d9-e3361406796f$9e23b0e2-ac13-4d19-a3f9-4a655a1e9f14$25c79620-14f4-45a7-b120-05ec72cb77e9$31dc4e46-4839-4f01-b383-1a1189aeb0e6$ee27bd98-fc37-11ea-163c-1365e194fc2e$f5c29f0d-937f-4731-8f87-0405ebc966f5$36c37b4d-eb23-4deb-a593-e511eccd9204$511eb51e-fc38-11ea-0492-19532da809de$d228e232-fc39-11ea-1569-a31b817118c4$dbaacbb6-fc3b-11ea-0a42-a9792e8a6c4c$12900562-fc3a-11ea-25e1-f7c91a6940e5$19bdf146-fc3c-11ea-3c60-bf7823c43a1d$be868a52-fc3b-11ea-0b60-7fea05ffe8e9$0b01120c-fc3d-11ea-1381-8bab939e6214$252eff18-fc3d-11ea-0c18-7b130ada882e$9626d74a-fc3d-11ea-2ab3-978dc46c0f1f$4358c348-91aa-4c76-a443-0a9cefce0e83$687409a2-fc43-11ea-03e0-d9a7a48165a8$4f23c8fc-fc43-11ea-0e73-e5f89d14155c$07282688-fc3e-11ea-2f9e-5b0581061e65$91f99062-fc43-11ea-1b0e-afe8aa8a1c3d$210cee94-fc3e-11ea-1a6e-7f88270354e1$2f254a9e-fc3e-11ea-2c02-75ed59f41903$539c951c-fc48-11ea-2293-457b7717ea4d$287f0fa8-fc44-11ea-2788-9f3ac4ee6d2b$3edd2a22-fc4a-11ea-07e5-55ca6d7639e8$c5ad4d40-fc57-11ea-23cb-e55487bc6f7a$57a9bb06-fc4a-11ea-2665-7f97026981dc$80138b30-fc4a-11ea-0e15-b54cf6b402df$8709f208-fc4a-11ea-0203-e13eae5f0d93$a29c8ad0-fc4a-11ea-14c7-71435769b73e$4e4cca22-fc4c-11ea-12ae-2b51545799ec$16981da0-fc4d-11ea-37a2-535aa014a298$a9c39dbe-fc4d-11ea-2e86-4992896e2abb$b93b88b0-fc4d-11ea-0c45-8f64983f8b5c$7ec28cd0-fc87-11ea-2de5-1959ea5dc37c$dc2cfa82-fc86-11ea-1311-bb6e69350d43$ada44a56-fc56-11ea-2ab7-fb649be7e066$d911edb6-fc87-11ea-2258-d34d61c02245$b3e1ebf8-fc56-11ea-05b8-ed0b9e50503d$f8e754ee-fc73-11ea-0c7f-cdc760ab3e94$39982810-fc76-11ea-01c3-3987cfc2fd3c$0f329ece-fc74-11ea-1e02-bdbddf551ef3$4ccb2718-fce2-11ea-18c4-89640faec38d$b406eec8-fc77-11ea-1a98-d36d6d3e2393$1f30a1ac-fc74-11ea-2abf-abf437006bab$24934438-fc74-11ea-12e4-7f7e50f54029$c2da1f88-fcdb-11ea-0b18-bf801c373a73$ae9149f4-fcdc-11ea-30a3-031d38f38b23$85a145c6-fceb-11ea-0c94-27b3ef8270bc$861a2c3a-fc88-11ea-2d95-fb076e751203$893a417c-fcea-11ea-38f4-1df639c54cbc$1a59b12e-fceb-11ea-0634-1b4daee1bc62$c939a87a-fcdc-11ea-29dd-c1f6dd3de88f$b4264196-fcdc-11ea-2197-512f8363a4d3$251c06e4-fc77-11ea-1a0f-73139ba11e83published_objectsnbpkginstall_time_nsinstantiatedòinstalled_versionsterminal_outputsenabled·restart_recommended_msgrestart_required_msgbusy_packageswaiting_for_permission,waiting_for_permission_but_probably_disabled«cell_inputs j$251c06e4-fc77-11ea-1a0f-73139ba11e83cell_id$251c06e4-fc77-11ea-1a0f-73139ba11e83codeamd"However, we should always be wary about visualisations such as these. Perhaps we should be plotting cases per capita instead of absolute numbers of cases. Or should we divide by the area of the country? Some countries, such as China and Canada, are divided into states or regions in the original data set -- but others, such as the US, are not. You should always check exactly what is being plotted! 

Unfortunately, published visualisations often hide some of  this information. This emphasises the need to be able to get our hands on the data, create our own visualisations and draw our own conclusions."metadatashow_logsèdisabled®skip_as_script«code_folded$68f76d3b-b398-459d-bf39-20bf300dcaa2cell_id$68f76d3b-b398-459d-bf39-20bf300dcaa2code"all_countries = data[:, "country"]metadatashow_logsèdisabled®skip_as_script«code_folded$8990f13a-fc35-11ea-338f-0955eeb23c3ccell_id$8990f13a-fc35-11ea-338f-0955eeb23c3ccodeٵmd"Here we have used an **anonymous function** with the syntax `x -> ⋯`. This is a function which takes the argument `x` and returns whatever is on the right of the arrow (`->`)."metadatashow_logsèdisabled®skip_as_script«code_folded$b3880f40-fc36-11ea-074a-edc51adeb6f0cell_id$b3880f40-fc36-11ea-074a-edc51adeb6f0codemd"## Using dates"metadatashow_logsèdisabled®skip_as_script«code_folded$25c79620-14f4-45a7-b120-05ec72cb77e9cell_id$25c79620-14f4-45a7-b120-05ec72cb77e9code'date_format = Dates.DateFormat("m/d/Y")metadatashow_logsèdisabled®skip_as_script«code_folded$0f87cec6-fc31-11ea-23d2-395e61f38b6fcell_id$0f87cec6-fc31-11ea-23d2-395e61f38b6fcode$md"# Module 2: Epidemic propagation"metadatashow_logsèdisabled®skip_as_script«code_folded$893a417c-fcea-11ea-38f4-1df639c54cbccell_id$893a417c-fcea-11ea-38f4-1df639c54cbccodeset_points(data, daily[:, day])metadatashow_logsèdisabled®skip_as_script«code_folded$252eff18-fc3d-11ea-0c18-7b130ada882ecell_id$252eff18-fc3d-11ea-0c18-7b130ada882ecodemd"A visual check for this is to plot the data with a **logarithmic scale** on the $y$ axis (but a standard scale on the $x$ axis).

The reason for this is that if we observe a straight line on such a semi-logarithmic plot, we have

$$\log(y) \sim ax + b,$$

where we are using $\sim$ to denote approximate equality.

Hence, taking exponentials of both sides, we have

$$y \sim \exp(ax + b) = c \, e^{ax},$$

for some constant $c$.
"metadatashow_logsèdisabled®skip_as_script«code_folded$c939a87a-fcdc-11ea-29dd-c1f6dd3de88fcell_id$c939a87a-fcdc-11ea-29dd-c1f6dd3de88fcodefunction set_points(data, fotoday)
	jsondata = sprint(io->JSON.print(io, make_features(data, fotoday)));
	HTML("""
			<script>
			var elem = document.getElementById("map");
			elem.mapbox.getSource('points').setData($jsondata)
			</script>
			""")
endmetadatashow_logsèdisabled®skip_as_script«code_folded$a41db8ea-f0e0-461f-a298-bdcea42a67f3cell_id$a41db8ea-f0e0-461f-a298-bdcea42a67f3codedata[US_row, :]metadatashow_logsèdisabled®skip_as_script«code_folded$a29c8ad0-fc4a-11ea-14c7-71435769b73ecell_id$a29c8ad0-fc4a-11ea-14c7-71435769b73ecodeWbegin
	indices = ismissing.(province)
	province[indices] .= all_countries[indices]
end;metadatashow_logsèdisabled®skip_as_script«code_folded$4e4cca22-fc4c-11ea-12ae-2b51545799eccell_id$4e4cca22-fc4c-11ea-12ae-2b51545799eccodebegin 
	
	scatter(data.longitude, data.latitude, leg=false, alpha=0.5, ms=2)

	for i in 1:length(province)	
		annotate!(data.longitude[i], data.latitude[i], text(province[i], :center, 5, color=RGBA{Float64}(0.0,0.0,0.0,0.3)))
	end
	
	plot!(axis=false)
endmetadatashow_logsèdisabled®skip_as_script«code_folded$f8e754ee-fc73-11ea-0c7f-cdc760ab3e94cell_id$f8e754ee-fc73-11ea-0c7f-cdc760ab3e94codesmd"Now we would like to combine the geographical and temporal (time) aspects. One way to do so is to animate time:"metadatashow_logsèdisabled®skip_as_script«code_folded$c2da1f88-fcdb-11ea-0b18-bf801c373a73cell_id$c2da1f88-fcdb-11ea-0b18-bf801c373a73codeEResource("https://api.mapbox.com/mapbox-gl-js/v1.12.0/mapbox-gl.css")metadatashow_logsèdisabled®skip_as_script«code_folded$687409a2-fc43-11ea-03e0-d9a7a48165a8cell_id$687409a2-fc43-11ea-03e0-d9a7a48165a8codeOmd"Let's zoom on the part where the growth seems linear on this semi-log plot:"metadatashow_logsèdisabled®skip_as_script«code_folded$b4264196-fcdc-11ea-2197-512f8363a4d3cell_id$b4264196-fcdc-11ea-2197-512f8363a4d3codeCfunction make_features(data, fotoday)
	point(long, lat, n) =
		Dict("type"=>"Feature",
			"properties"=>Dict("size" => 2 * log10(n)),
			"geometry"=>Dict(
				"type" => "Point",
				"coordinates" => [long, lat]))
	Dict("type" => "FeatureCollection",
		"features" => map(point, data.longitude, data.latitude, fotoday))


endmetadatashow_logsèdisabled®skip_as_script«code_folded$a8b2db96-fc30-11ea-2eea-b938a3a430fbcell_id$a8b2db96-fc30-11ea-2eea-b938a3a430fbcodesmd"""We see that the correct spelling is `"US"`. (And note how the different provinces of the UK are separated.)"""metadatashow_logsèdisabled®skip_as_script«code_folded$67eebb7e-fc36-11ea-03ef-bd6966487bb5cell_id$67eebb7e-fc36-11ea-03ef-bd6966487bb5code?md"Now we can extract the data into a standard Julia `Vector`:"metadatashow_logsèdisabled®skip_as_script«code_folded$511eb51e-fc38-11ea-0492-19532da809decell_id$511eb51e-fc38-11ea-0492-19532da809decode md"## Exploratory data analysis"metadatashow_logsèdisabled®skip_as_script«code_folded$9ee79840-30ff-4c92-97f4-e178caceceafcell_id$9ee79840-30ff-4c92-97f4-e178caceceafcodeEU_countries = [startswith(country, "U") for country in all_countries]metadatashow_logsèdisabled®skip_as_script«code_folded$5c1ec9ae-fc2e-11ea-397d-937c7ab1edb2cell_id$5c1ec9ae-fc2e-11ea-397d-937c7ab1edb2code4@bind i Slider(1:length(countries), show_value=true)metadatashow_logsèdisabled®skip_as_script«code_folded$80138b30-fc4a-11ea-0e15-b54cf6b402dfcell_id$80138b30-fc4a-11ea-0e15-b54cf6b402dfcodeprovince = data.province;metadatashow_logsèdisabled®skip_as_script«code_folded$546a40eb-7897-485d-a1b5-c4dfae0a4861cell_id$546a40eb-7897-485d-a1b5-c4dfae0a4861code٭md"""
Now we need to **parse** the date strings, i.e. convert from a string representation into an actual Julia type provided by the `Dates.jl` standard library package:
"""metadatashow_logsèdisabled®skip_as_script«code_folded$7b5db0f4-fc36-11ea-09a5-49def64f4c79cell_id$7b5db0f4-fc36-11ea-09a5-49def64f4c79code%US_data = Vector(data[US_row, 5:end])metadatashow_logsèdisabled®skip_as_script«code_folded$7e7d14a2-fc37-11ea-3f1a-870ca98c4b75cell_id$7e7d14a2-fc37-11ea-3f1a-870ca98c4b75codeEmd"Note that we are only passing a single vector to the `scatter` function, so the $x$ coordinates are taken as the natural numbers $1$, $2$, etc.

Also note that the $y$-axis in this plot gives the *cumulative* case numbers, i.e. the *total* number of confirmed cases since the start of the epidemic up to the given date. 
"metadatashow_logsèdisabled®skip_as_script«code_folded$79ba0433-2a31-475a-87c9-14103ebbff16cell_id$79ba0433-2a31-475a-87c9-14103ebbff16code!countries = unique(all_countries)metadatashow_logsèdisabled®skip_as_script«code_folded$dc2cfa82-fc86-11ea-1311-bb6e69350d43cell_id$dc2cfa82-fc86-11ea-1311-bb6e69350d43codecdownload("https://www.naturalearthdata.com/downloads/110m-cultural-vectors/110m-admin-0-countries")metadatashow_logsèdisabled®skip_as_script«code_folded$39982810-fc76-11ea-01c3-3987cfc2fd3ccell_id$39982810-fc76-11ea-01c3-3987cfc2fd3ccode5daily = max.(1, diff(Array(data[:, 5:end]), dims=2));metadatashow_logsèdisabled®skip_as_script«code_folded$19f4da16-fc31-11ea-0de9-1dbe668b862dcell_id$19f4da16-fc31-11ea-0de9-1dbe668b862dcode٫md"We are starting a new module on modelling epidemic propagation.

Let's start off by analysing some of the data that is now available on the current COVID-19 pandemic.
"metadatashow_logsèdisabled®skip_as_script«code_folded$1f30a1ac-fc74-11ea-2abf-abf437006babcell_id$1f30a1ac-fc74-11ea-2abf-abf437006babcodedates[day]metadatashow_logsèdisabled®skip_as_script«code_folded$1633abe8-fc2f-11ea-2c7e-21b3348a3569cell_id$1633abe8-fc2f-11ea-2c7e-21b3348a3569codetmd"""How can we extract the data for a particular country? First we need to know the exact name of the country. E.g. is the US written as "USA", or "United States"?

We could scroll through to find out, or **filter** the data to only look at a sample of it, for example those countries that begin with the letter "U".

One way to do this is with an array comprehension:"""metadatashow_logsèdisabled®skip_as_script«code_folded$a054e048-4fea-487c-9d06-463723c7151ccell_id$a054e048-4fea-487c-9d06-463723c7151ccodeubegin
	data_2 = rename(data, 1 => "province", 2 => "country", 3 => "latitude", 4 => "longitude")   
	head(data_2)
endmetadatashow_logsèdisabled®skip_as_script«code_folded$dbaacbb6-fc3b-11ea-0a42-a9792e8a6c4ccell_id$dbaacbb6-fc3b-11ea-0a42-a9792e8a6c4ccode٦begin
	daily_cases = diff(US_data)
	plot(dates[2:end], daily_cases, m=:o, leg=false, xlabel="days", ylabel="daily US cases", alpha=0.5)   # use "o"-shaped markers
endmetadatashow_logsèdisabled®skip_as_script«code_folded$8709f208-fc4a-11ea-0203-e13eae5f0d93cell_id$8709f208-fc4a-11ea-0203-e13eae5f0d93codeHmd"If the `province` is missing we should use the country name instead:"metadatashow_logsèdisabled®skip_as_script«code_folded$07282688-fc3e-11ea-2f9e-5b0581061e65cell_id$07282688-fc3e-11ea-2f9e-5b0581061e65codemd"We see that there is a period lasting from around day $(first(exp_period)) to around day $(last(exp_period)) when the curve looks straight on the semi-log plot. 
This corresponds to the following date range:"metadatashow_logsèdisabled®skip_as_script«code_folded$3edd2a22-fc4a-11ea-07e5-55ca6d7639e8cell_id$3edd2a22-fc4a-11ea-07e5-55ca6d7639e8codemd"Our data set contains more information: the geographical locations (latitude and longitude) of each country (or, rather, of a particular point that was chosen as being representative of that country)."metadatashow_logsèdisabled®skip_as_script«code_folded$0f329ece-fc74-11ea-1e02-bdbddf551ef3cell_id$0f329ece-fc74-11ea-1e02-bdbddf551ef3code@bind day_ticks Clock(0.5)metadatashow_logsèdisabled®skip_as_script«code_folded$2f254a9e-fc3e-11ea-2c02-75ed59f41903cell_id$2f254a9e-fc3e-11ea-2c02-75ed59f41903codeٻmd"i.e. the first 3 weeks of March. Fortunately the imposition of lockdown during the last 10 days of March (on different days in different US states) significantly reduced transmission."metadatashow_logsèdisabled®skip_as_script«code_folded$31dc4e46-4839-4f01-b383-1a1189aeb0e6cell_id$31dc4e46-4839-4f01-b383-1a1189aeb0e6code)parse(Date, date_strings[1], date_format)metadatashow_logsèdisabled®skip_as_script«code_folded$f5c29f0d-937f-4731-8f87-0405ebc966f5cell_id$f5c29f0d-937f-4731-8f87-0405ebc966f5code=dates = parse.(Date, date_strings, date_format) .+ Year(2000)metadatashow_logsèdisabled®skip_as_script«code_folded$4f423a75-43da-486f-ac2a-7220032dac9fcell_id$4f423a75-43da-486f-ac2a-7220032dac9fcodedata[U_countries, :]metadatashow_logsèdisabled®skip_as_script«code_folded$6de0800c-fc37-11ea-0d94-2b6f8f66964dcell_id$6de0800c-fc37-11ea-0d94-2b6f8f66964dcode٫md"We would like to use actual dates instead of just the number of days since the start of the recorded data. The dates are given in the column names of the `DataFrame`:
"metadatashow_logsèdisabled®skip_as_script«code_folded$24934438-fc74-11ea-12e4-7f7e50f54029cell_id$24934438-fc74-11ea-12e4-7f7e50f54029code#=
begin 
	plot(shp_countries, alpha=0.2)
	scatter!(data.longitude, data.latitude, leg=false, ms=2*log10.(daily[:, day]), alpha=0.7)
	xlabel!("latitude")
	ylabel!("longitude")
	title!("daily cases per country")
end
=#metadatashow_logsèdisabled®skip_as_script«code_folded$4358c348-91aa-4c76-a443-0a9cefce0e83cell_id$4358c348-91aa-4c76-a443-0a9cefce0e83codeٰbegin
	plot(replace(daily_cases, 0 => NaN), 
		yscale=:log10, 
		leg=false, m=:o)
	
	xlabel!("day")
	ylabel!("confirmed cases in US")
	title!("US confirmed COVID-19 cases")
endmetadatashow_logsèdisabled®skip_as_script«code_folded$9484ea9e-fc2e-11ea-137c-6da8212da5bdcell_id$9484ea9e-fc2e-11ea-137c-6da8212da5bdcode\md"[Here we used **string interpolation** with `$` to put the text into a Markdown string.]"metadatashow_logsèdisabled®skip_as_script«code_folded$4ccb2718-fce2-11ea-18c4-89640faec38dcell_id$4ccb2718-fce2-11ea-18c4-89640faec38dcode$day = min(day_ticks, size(daily, 2))metadatashow_logsèdisabled®skip_as_script«code_folded$75d2dc66-fc47-11ea-0e35-05f9cf38e901cell_id$75d2dc66-fc47-11ea-0e35-05f9cf38e901code[md"This is an example of a **time series**, i.e. a single quantity that changes over time."metadatashow_logsèdisabled®skip_as_script«code_folded$b406eec8-fc77-11ea-1a98-d36d6d3e2393cell_id$b406eec8-fc77-11ea-1a98-d36d6d3e2393codelog10(maximum(daily[:, day]))metadatashow_logsèdisabled®skip_as_script«code_folded$861a2c3a-fc88-11ea-2d95-fb076e751203cell_id$861a2c3a-fc88-11ea-2d95-fb076e751203codehtml"""
<div id="map" style="height: 500px"></div>
<script>
	mapboxgl.accessToken = 'pk.eyJ1Ijoic2hhc2hpNTMiLCJhIjoiY2ppMG5vZmpuMWEyNjNwb2I5dWhveTkyZCJ9.dQ67jXuhU3DGz7QFR35alw';
var map = new mapboxgl.Map({
	container: 'map',
	style: 'mapbox://styles/mapbox/light-v10',
	zoom: 1,
	center: [0, 0]
});

var elem = document.getElementById("map");

elem.mapbox = map;

map.on('load', function () {

	// Add a GeoJSON source with 2 points
	map.addSource('points', {
		'type': 'geojson',
		'data': {
			'type': 'FeatureCollection',
			'features': [
				{
					'type': 'Feature',
					'geometry': {
						'type': 'Point',
						'coordinates': [
							-77.03238901390978,
							38.913188059745586
						]
					}
				},
				{
					'type': 'Feature',
					'geometry': {
						'type': 'Point',
						'coordinates': [-122.414, 37.776]
					}
				}
			]
		}
	});
	map.addLayer({
	'id': 'points',
	'type': 'circle',
	'source': 'points',
	'paint': {
		'circle-color': {
              "property": "size",
              "stops": [
                [0, "#fff5f0"],
                [1, "#fee0d2"],
                [2, "#fcbba1"],
                [3, "#fc9272"],
                [4, "#fb6a4a"],
                [7, "#ef3b2c"],
                [8, "#cb181d"],
                [9, "#a50f15"],
                [10, "#67000d"]
              ]
            },
		// make circles larger as the user zooms from z12 to z22
		'circle-radius': [
				'interpolate',
				['linear'], ["zoom"],
				0, ['get', 'size']
			]
    }
});
});
</script>
"""metadatashow_logsèdisabled®skip_as_script«code_folded$c5ad4d40-fc57-11ea-23cb-e55487bc6f7acell_id$c5ad4d40-fc57-11ea-23cb-e55487bc6f7acode-filter(x -> startswith(x.country, "A"), data)metadatashow_logsèdisabled®skip_as_script«code_folded$b0eb3918-fc1f-11ea-238b-7f5d23e424bbcell_id$b0eb3918-fc1f-11ea-238b-7f5d23e424bbcodemd"How can we extract the list of all the countries? The country names are in the second column.

For some purposes we can think of a `DataFrame`.as a matrix and use similar syntax. For example, we can extract the second column:
"metadatashow_logsèdisabled®skip_as_script«code_folded$36c37b4d-eb23-4deb-a593-e511eccd9204cell_id$36c37b4d-eb23-4deb-a593-e511eccd9204codebegin
	plot(dates, US_data, xrotation=45, leg=:topleft, 
	    label="US data", m=:o, ms=3, alpha=0.5)
	
	xlabel!("date")
	ylabel!("cumulative US cases")
	title!("US cumulative confirmed COVID-19 cases")
endmetadatashow_logsèdisabled®skip_as_script«code_folded$a7369222-fc20-11ea-314d-4d6b0f0f72ebcell_id$a7369222-fc20-11ea-314d-4d6b0f0f72ebcodeRmd"We will need a couple of new packages. The data is in CSV format, i.e. *C*omma-*S*eparated *V*alues. This is a common data format in which observations, i.e. data points, are separated on different lines. Within each line the different data for that observation are separated by commas or other punctuation (possibly spaces and tabs)."metadatashow_logsèdisabled®skip_as_script«code_folded$fab64d86-fc28-11ea-0ae1-3ba1b9a14759cell_id$fab64d86-fc28-11ea-0ae1-3ba1b9a14759codemd"## Using the data"metadatashow_logsèdisabled®skip_as_script«code_folded$9e23b0e2-ac13-4d19-a3f9-4a655a1e9f14cell_id$9e23b0e2-ac13-4d19-a3f9-4a655a1e9f14codedate_strings[1]metadatashow_logsèdisabled®skip_as_script«code_folded$1620aa9d-7dcd-4686-b7e4-a72cebe315edcell_id$1620aa9d-7dcd-4686-b7e4-a72cebe315edcodeلmd"""
We can load the data from a CSV using the `File` function from the `CSV.jl` package, and then convert it to a `DataFrame`:
"""metadatashow_logsèdisabled®skip_as_script«code_folded$ada3ceb4-fc2e-11ea-2cbf-399430fa18b5cell_id$ada3ceb4-fc2e-11ea-2cbf-399430fa18b5code@bind country Select(countries)metadatashow_logsèdisabled®skip_as_script«code_folded$34440afc-fc2e-11ea-0484-5b47af235badcell_id$34440afc-fc2e-11ea-0484-5b47af235badcode٣md"It turns out that some countries are divided into provinces, so there are repetitions in the `country` column that we can eliminate with the `unique` function:"metadatashow_logsèdisabled®skip_as_script«code_folded$a26b8742-6a16-445a-ae77-25a4189c0f14cell_id$a26b8742-6a16-445a-ae77-25a4189c0f14codeusing Plotsmetadatashow_logsèdisabled®skip_as_script«code_folded$ed383524-e0c0-4da2-9a98-ca75aadd2c9ecell_id$ed383524-e0c0-4da2-9a98-ca75aadd2c9ecodemd"""
Array comprehension:
"""metadatashow_logsèdisabled®skip_as_script«code_folded$b93b88b0-fc4d-11ea-0c45-8f64983f8b5ccell_id$b93b88b0-fc4d-11ea-0c45-8f64983f8b5ccodemd"We would also like to see the outlines of each country. For this we can use, for example, the data from [Natural Earth](https://www.naturalearthdata.com/downloads/110m-cultural-vectors/110m-admin-0-countries), which comes in the form of **shape files**, giving the outlines in terms of latitude and longitude coordinates. 

These may be read in using the `Shapefile.jl` package.
"metadatashow_logsèdisabled®skip_as_script«code_folded$c460b0c3-6d3b-439b-8cc7-1c58d6547f51cell_id$c460b0c3-6d3b-439b-8cc7-1c58d6547f51codedownload(url, "covid_data.csv")metadatashow_logsèdisabled®skip_as_script«code_folded$1a59b12e-fceb-11ea-0634-1b4daee1bc62cell_id$1a59b12e-fceb-11ea-0634-1b4daee1bc62codelog10.(daily[:, day])metadatashow_logsèdisabled®skip_as_script«code_folded$91f99062-fc43-11ea-1b0e-afe8aa8a1c3dcell_id$91f99062-fc43-11ea-1b0e-afe8aa8a1c3dcodeexp_period = 38:60metadatashow_logsèdisabled®skip_as_script«code_folded$ae9149f4-fcdc-11ea-30a3-031d38f38b23cell_id$ae9149f4-fcdc-11ea-30a3-031d38f38b23codeDResource("https://api.mapbox.com/mapbox-gl-js/v1.12.0/mapbox-gl.js")metadatashow_logsèdisabled®skip_as_script«code_folded$a772eadc-fc35-11ea-3d38-4b121f88f1d7cell_id$a772eadc-fc35-11ea-3d38-4b121f88f1d7codeٿmd"To extract a single row we need the **index** of the row (i.e. which number row it is in the `DataFrame`). The `findfirst` function finds the first row that satisfies the given predicate:"metadatashow_logsèdisabled®skip_as_script«code_folded$4f23c8fc-fc43-11ea-0e73-e5f89d14155ccell_id$4f23c8fc-fc43-11ea-0e73-e5f89d14155ccodebegin
	plot(replace(daily_cases, 0 => NaN), 
		yscale=:log10, 
		leg=false, m=:o,
		xlims=(1, 100))
	
	xlabel!("day")
	ylabel!("confirmed cases in US")
	title!("US confirmed COVID-19 cases")
endmetadatashow_logsèdisabled®skip_as_script«code_folded$a39589ee-20e3-4f22-bf81-167fd815f6f9cell_id$a39589ee-20e3-4f22-bf81-167fd815f6f9codemd"$(Text(countries[i]))"metadatashow_logsèdisabled®skip_as_script«code_folded$cbd9c1aa-fc37-11ea-29d9-e3361406796fcell_id$cbd9c1aa-fc37-11ea-29d9-e3361406796fcodeusing Datesmetadatashow_logsèdisabled®skip_as_script«code_folded$450b4902-fc30-11ea-321d-29faf6188ff5cell_id$450b4902-fc30-11ea-321d-29faf6188ff5codeٔmd"Note that this returns an array of booleans of the same length as the vector `all_countries`. We can now use this to index into the `DataFrame`:"metadatashow_logsèdisabled®skip_as_script«code_folded$38344160-fc27-11ea-220e-95aa00e4b083cell_id$38344160-fc27-11ea-220e-95aa00e4b083codeـbegin
	csv_data = CSV.File("covid_data.csv");   
	data = DataFrame(csv_data)   # it is common to use `df` as a variable name
endmetadatashow_logsèdisabled®skip_as_script«code_folded$287f0fa8-fc44-11ea-2788-9f3ac4ee6d2bcell_id$287f0fa8-fc44-11ea-2788-9f3ac4ee6d2bcodemd"## Geographical data"metadatashow_logsèdisabled®skip_as_script«code_folded$d228e232-fc39-11ea-1569-a31b817118c4cell_id$d228e232-fc39-11ea-1569-a31b817118c4codemd"
Working with *cumulative* data is often less intuitive. Let's look at the actual number of daily cases. Julia has a `diff` function to calculate the difference between successive entries of a vector:
"metadatashow_logsèdisabled®skip_as_script«code_folded$9626d74a-fc3d-11ea-2ab3-978dc46c0f1fcell_id$9626d74a-fc3d-11ea-2ab3-978dc46c0f1fcodeٜmd"""Since the data contains some zeros, we need to replace those with `NaN`s ("Not a Number"), which `Plots.jl` interprets as a signal to break the line"""metadatashow_logsèdisabled®skip_as_script«code_folded$3519cf96-fc26-11ea-3386-d97c61ea1b85cell_id$3519cf96-fc26-11ea-3386-d97c61ea1b85codemd"""Since we need to manipulate the columns, let's rename them to something shorter. We can do this either **in place**, i.e. modifying the original `DataFrame`, or **out of place**, creating a new `DataFrame`. The convention in Julia is that functions that modify their argument have a name ending with `!` (often pronounced "bang").

We can use the `head` function to see only the first few lines of the data.
"""metadatashow_logsèdisabled®skip_as_script«code_folded$16a79308-fc36-11ea-16e5-e1087d7ebbdacell_id$16a79308-fc36-11ea-16e5-e1087d7ebbdacode+US_row = findfirst(==("US"), all_countries)metadatashow_logsèdisabled®skip_as_script«code_folded$ada44a56-fc56-11ea-2ab7-fb649be7e066cell_id$ada44a56-fc56-11ea-2ab7-fb649be7e066codeUshp_countries = Shapefile.shapes(Shapefile.Table("./ne_110m_admin_0_countries.shp"));metadatashow_logsèdisabled®skip_as_script«code_folded$64d9bcea-7c85-421d-8f1e-17ea8ee694dacell_id$64d9bcea-7c85-421d-8f1e-17ea8ee694dacodeٞurl = "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv"metadatashow_logsèdisabled®skip_as_script«code_folded$210cee94-fc3e-11ea-1a6e-7f88270354e1cell_id$210cee94-fc3e-11ea-1a6e-7f88270354e1codedates[exp_period]metadatashow_logsèdisabled®skip_as_script«code_folded$539c951c-fc48-11ea-2293-457b7717ea4dcell_id$539c951c-fc48-11ea-2293-457b7717ea4dcodeWmd"We can fit a straight line using **linear regression** to this portion of the data."metadatashow_logsèdisabled®skip_as_script«code_folded$aaa7c012-fc1f-11ea-3c6c-89630affb1dbcell_id$aaa7c012-fc1f-11ea-3c6c-89630affb1dbcode$md"## Extracting useful information"metadatashow_logsèdisabled®skip_as_script«code_folded$e9ad97b6-fdef-4f48-bd32-634cfd2ce0e6cell_id$e9ad97b6-fdef-4f48-bd32-634cfd2ce0e6codeibegin
	rename!(data, 1 => "province", 2 => "country", 3 => "latitude", 4 => "longitude") 
	head(data)
endmetadatashow_logsèdisabled®skip_as_script«code_folded$d3398953-afee-4989-932c-995c3ffc0c40cell_id$d3398953-afee-4989-932c-995c3ffc0c40code$md"""
## Exploring COVID-19 data
"""metadatashow_logsèdisabled®skip_as_script«code_folded$0b01120c-fc3d-11ea-1381-8bab939e6214cell_id$0b01120c-fc3d-11ea-1381-8bab939e6214codeَmd"## Exponential growth

Simple models of epidemic spread often predict a period with **exponential growth**. Do the data corroborate this?
"metadatashow_logsèdisabled®skip_as_script«code_folded$db4c1f10-7c37-4513-887a-2467ce673458cell_id$db4c1f10-7c37-4513-887a-2467ce673458codeټbegin
	using Pkg   
	Pkg.add.(["CSV", "DataFrames", "PlutoUI", "Shapefile", "ZipFile", "JSON"])

	using CSV
	using DataFrames
	using PlutoUI
	using Shapefile
	using ZipFile
	using JSON
endmetadatashow_logsèdisabled®skip_as_script«code_folded$be868a52-fc3b-11ea-0b60-7fea05ffe8e9cell_id$be868a52-fc3b-11ea-0b60-7fea05ffe8e9codembegin
	plot(daily_cases, label="raw daily cases")
	plot!(running_mean, m=:o, label="running weakly mean")
endmetadatashow_logsèdisabled®skip_as_script«code_folded$16981da0-fc4d-11ea-37a2-535aa014a298cell_id$16981da0-fc4d-11ea-37a2-535aa014a298codedata.latitudemetadatashow_logsèdisabled®skip_as_script«code_folded$12900562-fc3a-11ea-25e1-f7c91a6940e5cell_id$12900562-fc3a-11ea-25e1-f7c91a6940e5codemd"Note that discrete data should *always* be plotted with points. The lines are just to guide the eye. 

Cumulating data corresponds to taking the integral of a function and is a *smoothing* operation. Note that the cumulative data is indeed visually smoother than the daily data.

The oscillations in the daily data seem to be due to a lower incidence of reporting at weekends. We could try to smooth this out by taking a **moving average**, say over the past week:
"metadatashow_logsèdisabled®skip_as_script«code_folded$c400ce4e-fc30-11ea-13b1-b54cf8f5630ecell_id$c400ce4e-fc30-11ea-13b1-b54cf8f5630ecodemd"Now we would like to extract the data for the US alone. How can we access the correct row of the table? We can again filter on the country name. A nicer way to do this is to use the `filter` function.

This is a **higher-order function**: its first argument is itself a function, which must return `true` or `false`.  `filter` will return all the rows of the `DataFrame` that satisfy that **predicate**:
"metadatashow_logsèdisabled®skip_as_script«code_folded$bcc95a8a-fc2e-11ea-2ccd-3bece42a08e6cell_id$bcc95a8a-fc2e-11ea-2ccd-3bece42a08e6code8md"You can also use `Select` to get a dropdown instead:"metadatashow_logsèdisabled®skip_as_script«code_folded$19bdf146-fc3c-11ea-3c60-bf7823c43a1dcell_id$19bdf146-fc3c-11ea-3c60-bf7823c43a1dcodeebegin
	using Statistics
	running_mean = [mean(daily_cases[i-6:i]) for i in 7:length(daily_cases)]
endmetadatashow_logsèdisabled®skip_as_script«code_folded$a9c39dbe-fc4d-11ea-2e86-4992896e2abbcell_id$a9c39dbe-fc4d-11ea-2e86-4992896e2abbcodemd"## Adding maps"metadatashow_logsèdisabled®skip_as_script«code_folded$b3e1ebf8-fc56-11ea-05b8-ed0b9e50503dcell_id$b3e1ebf8-fc56-11ea-05b8-ed0b9e50503dcode!# plot!(shp_countries, alpha=0.2)metadatashow_logsèdisabled®skip_as_script«code_folded$e0493940-8aa7-4733-af72-cd6bc0e37d92cell_id$e0493940-8aa7-4733-af72-cd6bc0e37d92code#md"""
## Download and load data
"""metadatashow_logsèdisabled®skip_as_script«code_folded$99d5a138-fc30-11ea-2977-71732ca3aeadcell_id$99d5a138-fc30-11ea-2977-71732ca3aeadcodelength(U_countries)metadatashow_logsèdisabled®skip_as_script«code_folded$85a145c6-fceb-11ea-0c94-27b3ef8270bccell_id$85a145c6-fceb-11ea-0c94-27b3ef8270bccodemd"""Day $day"""metadatashow_logsèdisabled®skip_as_script«code_folded$0c098923-b016-4c65-9a37-6b7b56b13a0ccell_id$0c098923-b016-4c65-9a37-6b7b56b13a0ccodeSdate_strings = String.(names(data)[5:end])  # apply String function to each elementmetadatashow_logsèdisabled®skip_as_script«code_folded$ee27bd98-fc37-11ea-163c-1365e194fc2ecell_id$ee27bd98-fc37-11ea-163c-1365e194fc2ecodebmd"Since the year was not correctly represented in the original data, we need to manually fix it:"metadatashow_logsèdisabled®skip_as_script«code_folded$f099424c-0e22-42fb-894c-d8c2a65715fbcell_id$f099424c-0e22-42fb-894c-d8c2a65715fbcode[scatter(US_data, m=:o, alpha=0.5, ms=3, xlabel="day", ylabel="cumulative cases", leg=false)metadatashow_logsèdisabled®skip_as_script«code_folded$57a9bb06-fc4a-11ea-2665-7f97026981dccell_id$57a9bb06-fc4a-11ea-2665-7f97026981dccodeqmd"Let's extract and plot the geographical information. To reduce the visual noise a bit we will only use those "metadatashow_logsèdisabled®skip_as_script«code_folded$bb6316b7-23fb-44a3-b64a-dfb71a7df011cell_id$bb6316b7-23fb-44a3-b64a-dfb71a7df011codecolumn_names = names(data)metadatashow_logsèdisabled®skip_as_script«code_folded$d911edb6-fc87-11ea-2258-d34d61c02245cell_id$d911edb6-fc87-11ea-2258-d34d61c02245codemetadatashow_logsèdisabled®skip_as_script«code_folded$7b2496b0-fc35-11ea-0e78-473e5e8eac44cell_id$7b2496b0-fc35-11ea-0e78-473e5e8eac44code0filter(x -> x.country == "United Kingdom", data)metadatashow_logsèdisabled®skip_as_script«code_folded$efa281da-cef9-41bc-923e-625140ce5a07cell_id$efa281da-cef9-41bc-923e-625140ce5a07codemd"""
In this notebook we will explore and analyse data on the COVID-19 pandemic. The aim is to use Julia's tools to analyse and visualise the data in different ways.

Here is an example of the kind of visualisation we will be able to produce:
"""metadatashow_logsèdisabled®skip_as_script«code_folded$ad43cea2-fc28-11ea-2bc3-a9d81e3766f4cell_id$ad43cea2-fc28-11ea-2bc3-a9d81e3766f4codemd"A `DataFrame` is a standard way of storing **heterogeneous data** in Julia, i.e. a table consisting of columns with different types. As you can see from the display of the `DataFrame` object above, each column has an associated type, but different columns have different types, reflecting the type of the data in that column.

In our case, country names are stored as `String`s, their latitude and longitude as `Float64`s and the (cumulative) case counts for each day as `Int64`s.
."metadatashow_logsèdisabled®skip_as_script«code_folded$7ec28cd0-fc87-11ea-2de5-1959ea5dc37ccell_id$7ec28cd0-fc87-11ea-2de5-1959ea5dc37ccode6begin
	zipfile = download("https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/ne_110m_admin_0_countries.zip")

	r = ZipFile.Reader(zipfile);
	for f in r.files
	    println("Filename: \$(f.name)")
		open(f.name, "w") do io
	    	write(io, read(f))
		end
    end
	close(r)
endmetadatashow_logsèdisabled®skip_as_script«code_folded«notebook_id$8cae8068-4aa9-11f0-31ab-a194d2ebba27in_temp_dir¨metadata