1 INTRODUCTION

1.1 Background

“When we have all data online it will be great for humanity. It is a prerequisite to solving many problems that humankind faces – Robert Cailliau.” What if we do not find any open source online database in a convenient format such as spreadsheet; and we cannot collect primary data for our study due to time and budget constraints as well as pandemic situation. However, we have discovered that some reputable institution published a report along with relevant data in PDF format that we were looking for as a last resort. It seems our problem is solved once we have got the data source even in PDF format. However, the challenges are, we have to extract data from a text file, and we have to copy each of million data points from the PDF document and paste into a spreadsheet for further use. Can you imagine, regarding productivity point of view, how tedious job would it be for a human being. Fortunately, there is a software solution called R Programming. It can download and extract data from PDF document and make a data frame for future analysis within a minute by executing a few lines of codes.

In this report, I am going to show how to use R Programming to extract COVID-19 (a respiratory infectious disease caused by a newly discovered Severe Acute Respiratory Syndrome Coronavirus 2 (SARS-CoV-2)) data by divisions of Bangladesh from the World Health Organization (WHO) Bangladesh Coronavirus disease (COVID-19) update. In fact, I did not find any other reliable sources for downloading such data. Though, it is a small data set with a few observation, reproducible R codes can be applied for extracting a big data set. I will also show how to wrangle messy data to be suitable for analysis. I will also show how to use these downloaded data to create a map which is the ultimate goal of this tutorial.

In epidemiological research, the geographical location of population might have effect on their health outcomes. This phenomenon has been explored in this report in the context of COVID-19 in Bangladesh. However, causes of any variations in health outcomes (e.g. COVID-19 cases, and death) are beyond the scope of this report. It is assumed that visual representation (e.g. Map) of critical information would be more engaging to readers rather than a simple table with numbers. Within this in mind, the objective of this report is to describe geographical variability in COVID-19 cases, deaths, case fatality ratio (CFR), and COVID-19 vaccination coverage in eight divisions of Bangladesh and well as COVID-19 risk mapping by districts in the country.

1.2 Objectives

Overarching objective of this tutorial report is to overcome the scarcity of open source and reliable data on COVID-19 to show spatial disparities between eight divisions of Bangladesh in terms of COVID-19 cases, deaths, CFR, and COVID-19 vaccination coverage as of June 14, 2021. The specific objectives are presented below.

First, to show how to extract reliable and required data from a portable document format (PDF) document using R Programming.

Second, to show how to wrangle messy data and convert it into a suitable data frame for further analysis.

Third, to create a map showing key information related to COVID-19 in eight divisions of Bangladesh.

Finally, to show a COVID-19 risk map demonstrating information in eight divisions of Bangladesh.

2 DATA AND METHODS

Figure 1 outlines different data management and analysis required for customized mapping COVID-19 cases, deaths, CFR, and vaccination coverage across eight divisions in Bangladesh. First, different data have been merged after downloading them from internet to layer on a Leaflet Map. These data are as follows: Bangladesh (BGD) Administrative Data, COVID-19 Data, COVID-19 Vaccination Data, and Map Data. Following sections discuss how these data were extracted from internet and used them for mapping along with corresponding reproducible R Programming Codes. The steps are self-explanatory and easy to follow. If you are new in R, please visit this link to learn more about R and data visualization.

Figure 1: Flow of required data management for mapping exercise

2.1 Data Management

As outlined in previous section four data sources have used to create the map: (i) Bangladesh (BGD) Administrative Data for division level polygons, (ii) COVID-19 Data: Cases, Deaths, CFR, (iii) COVID-19 Data: Vaccination coverage, and (iv) Spatial Data for Leaflet Mapping. As data are not readily available for customized mapping, I have extracted required data from different sources and wrangled before using those data. The data management is briefly described as follows:

2.1.1 Bangladesh (BGD) Administrative Data

Division (Bengali: Bibhag) is the first-level administrative division in Bangladesh. There are currently eight divisions of Bangladesh, each is named after the major city within its jurisdiction that also serves as the administrative seat of that division. Each division is further split into several districts which are then further sub-divided into Upazilas (sub-districts). However, I have used only division level (level-1) data for this tutorial which are: Barisal, Chattogram, Dhaka, Khulna, Rangpur, Rajshahi, Mymensingh, Sylhet. Table 1 demonstrates key statistics of each of those eight divisions while Table 2 shows the name of districts in each of eight divisions of Bangladesh. I downloaded the administrative data from the Humanitarian Data Exchange (HDX) which is an open data platform managed by the United Nations Office for the Coordination of Humanitarian Affairs (OCHA) through its Centre for Humanitarian Data. Data can be downloaded from this website. Please see Appendix section (Bangladesh (BGD) Administrative Data) for details on how to download a zipfile and save it in a local directory for future use.

Table 1: Key statistics of each of eight divisions of Bangladesh

Table 2: Name of districts in each of eight divisions of Bangladesh

2.1.2 COVID-19 Data: Cases, Deaths, CFR

Since there is no open source customized data on COVID-19 (Cases, Death, CFR) by division of Bangladesh, I have extracted required data from WHO weekly update which is in PDF format [29]. Please see R codes in the Appendix for details on how to download a PDF file and then save the PDF text in a local directory for future use. After successfully saving file in a local directory, I loaded data file in RStudio from the local directory for further processing. As the downloaded data are not cleaned, I had to make some data wrangling/cleaning to convert messy data into usable data for analysis. I have explained all steps of data cleaning in Appendix section (COVID-19 Data: Cases, Deaths, CFR) along with reproducible R codes.

2.1.3 COVID-19 Data: Vaccination coverage

As of June 2021, Bangladesh has approved six COVID-19 vaccines with emergency authorization only [1]. These are: (i) Oxford-AstraZeneca (COVISHIELD) produced by Serum Institute of India [2], (ii) Sputnik V produced by Generium Joint Stock Company of Russia [6], (iii) Sinopharm produced by Beijing Institute of Biological Products Co. Ltd. of China [7], (iv) Pfizer-BioNTech produced by Pfizer Manufacturing Belgium NV [5], (v) CoronaVac produced by Sinovac Life [4] Sciences Ltd. of China [4], and (vi) Janssen produced by Johnson & Johnson [3]. It is important to mentioned here that Bangladesh joined the COVAX (COVID-19 Vaccines Global Access ) in June 2020 and received all these aforementioned vaccines under this global vaccine sharing platform. Meanwhile, the WHO has listed BANCOVID produced by a Bangladeshi company called Globe Biotech Limited [8]. However, as of writing this report, BANCOVID has not yet been approved for emergency administration in the country.

Bangladesh began administration of COVID-19 vaccines on 27 January 2021 while mass vaccination was started on 7 February 2021 [1-2]. Although vaccination against COVID-19 started in February 2021, a systematic open source database is not available.

The scarcity of open source data on vaccination coverage by division in Bangladesh, motivated me to use alternative sources of data. As such, COVID-19 vaccination coverage by division of Bangladesh were downloaded from WHO website data which was in PDF format. I have used R Codes before saving file in local directory. After executing R codes in step-1, I would see this image/screenshot in Viewer tab in RStudio (see Figure in Appendix). Then, I selected the shaded area of the table in page 9 and click Done. I played some trick here. Instead of selecting whole table with heading rows, I selected from second rows without headings to avoid messing-up my table. Finally, I saved the file in local directory for future use. After successfully saving file in local directory, I would import file from my local directory. Please See Appendix section (COVID-19 Data: Vaccination) for detailed R codes.

2.1.4 Spatial Data

In this section of data management, I have described how to create different elements and arguments of a function (e.g. leaflet() function in this case) for creating an interactive and/or permanent map showing different attributes layering on the same map. As such, before executing final code in the next section, I created some essential elements for laying on the Leaflet Map. For instance, created a date variable for referring updated data, map title, hyperlink for showing data source, and a label arguments to show data label in the map (see Appendix section called Spatial data for details R codes).

2.1.5 Collating all data and creating Map

In this penultimate section of data management, I combined all data elements for creating the desired Map such as variables and arguments within a function and created a final Leaflet Map. Please see Appendix for details R codes.

2.1.6 COVID-19 risk mapping

Finally, for risk mapping, I used the WHO Bangladesh COVID-19 risk classification map which is based on data as of 20 June 2021 [30]. The WHO has classified risk into four categories: (i) very high risk, (ii) high risk, (iii) medium risk, and (iv) low risk, based on a combination of COVID-19 cases per 100,000 population and test positivity rate [30]. Table 3 shows different combinations of cases and test positivity rate along with classification. To avoid any confusion, I should acknowledge that, I have directly imported WHO Risk Map from WHO Bangladesh weekly update (Vol. No. 69) for this report using R Programming code.

Table 3: COVID-19 risk classification by the WHO Bangladesh, June 2021

2.1.7 Spatial data analysis packages in R

I have used these packages in R: sf [20], leaflet [14, 23], glue [25], scales [24], htmltools [20], htmlwidgets [19], webshot [19], tidyverse [17], tabulizer [27], DiagrammeR [28], stringi [15], knitr, kableExtra, and base R [13] for spatial data analysis, mapping, tabulation, and rendering outputs. Additionally, Walker’s tutorial on ‘Making Interactive Maps in R’ guided me to prepare the map [15].

3 RESULTS

3.1 Cases, deaths, and CFR

There were a total of 826,922 COVID-19 cases identified in Bangladesh as of June 13, 2021. In total, 13,118 deaths were identified in the country. Therefore, overall CFR was around 1.6% at the same time. The highest proportion of reported cases (69%) were from Dhaka division followed by Chattogram (13%), Rajshahi (5%), Khulna (5%), Sylhet (3%), Rangpur (2.5%), Barisal (1.9%), and Mymensingh (1.4%) division. Similarly, highest proportion of reported death were were from Dhaka division (55.6%) followed by Chattogram (19.2%), Khulna (6.6%), Rajshahi (5.9%), Rangpur (3.9%), Sylhet (3.7%), Barisal (3%), and Mymensingh (2.1%) division. The highest CFR was identified from Rangpur (2.5%) followed by Barisal (2.5%), Mymensingh (2.4%), Chattogram (2.3%), Khulna (2.2%), Sylhet (2.1%), Rajshahi (1.9%), and Dhaka (1.3%) division. It turns out that unlike absolute death, relative death is the lowest in Dhaka division (Table 4).

Table 4: COVID-19 cases, death, case fatality ratio (CFR), and vaccination coverage by divisions in Bangladesh

Figure 2: COVID-19 cases, death, CFR, and vaccination coverage by eight divisions in Bangladesh

3.2 Vaccination coverage

National Coverage: According to Health Minister Zahid Maleque, Bangladesh would need to vaccinate some 105 million population in total as predicted in January 2021. Note that eligible population for vaccination against COVID-19 is 40 years old and above excluding front line health workers as of June 2021. Between 7 February and 13 June, 2021, a total of 10,070,182 doses of vaccine were administered, out of which 5,820,015 population received their 1st dose and 4,250,167 competed for their two doses of COVISHIELD as scheduled. In other words, around 12% of population has received at least one dose of a COVID-19 vaccine in the country (Table 4).

Coverage by divisions: In absolute term, the highest number of population received at least one dose of vaccine from Dhaka division followed by Chattogram, Khulna, Rajshahi, Rangpur, Sylhet, Mymensingh, and Barisal division. Similarly, the highest number of population completed for their COVID-19 vaccination from Dhaka division followed by Chattogram, Khulna, Rajshahi, Rangpur, Sylhet, Mymensingh, and Barisal division. In relative term, the proportion of population within a division, the highest proportion of population completed for their COVID-19 vaccination from Dhaka division followed by Khulna, Chattogram, Rangpur, Sylhet, Rajshahi, Barisal, and Mymensingh division (Figure 2).

3.3 COVID-19 risk mapping

The WHO identified the levels of risk based on a one-week (14-20 June) cases per 100,000 population and test positivity rate which is shown in Figure 3.

Barisal Division: In Barisal Division, three districts have been found at high risk (HR) and three at medium risk (MR) as shown in Table 5.

Chattogram Division: In Chattogram Division, six districts, including Chattogram, were found at very high risk (VHR), three were flagged as high risk (HR) and one as moderately risky (MR). On the other hand, Bandarban district was found to be at low risk (LR) area as the cases detected were very few (Figure 3).

Dhaka Division: Seven districts in Dhaka Division were at very high risk (VHR) while two districts, including Dhaka, were at high risk (HR). Four other districts were found at medium risk (MR).

Khulna Division: All of the 10 districts in Khulna division were flagged as very high risk (VHR).

Mymensingh Division: In the Mymensingh Division, two districts were found at hight risk (HR) and two were medium risk (MR).

Rajshahi Division: Out of the eight districts in Rajshahi Division, six were found at very high risk (VHR) while two were at high risk (HR).

Rangpur Division: In Rangpur Division, five districts were at very high risk (VHR) while three were at high risk (HR).

Sylhet Division: For the Sylhet Division, three districts were found at high risk (HR) and one was at medium risk (MR).

Very high risk districts: Out of 64 districts, 40 were identified by the WHO as very high risk (VHR) as of mid June 2021. These districts are: Chattagram, Cox’s Bazar, Sherpur, Jamalpur, Tangail, Gazipur, Kishoreganj, Sylhet, Kushtia, Meherpur, Chuadanga Thakurgaon, Lalmonirhat, Dinajpur, Rangpur, Kurigram, Joypurhat, Naogaon, Bogura, Chapainawabganj, Rajshahi, Natore, Rajbari, Jhenidah, Magura, Faridpur, Jessore, Narail, Madaripur, Gopalganj, Satkhira, Khulna, Bagerhat, Jhalakathi, Pirojpur, Barisal, Chandpur, Feni, Noakhali, and Khagrachhari (Table 5).

Table 5: Level of risks of COVID-19 by districts in Bangladesh, 14-20 June 2021

Figure 3: COVID-19 risk mapping as of 20 June 2021 (Adapted from WHO Bangladesh, 2021)

4 DISCUSSIONS

4.1 Main results

Descriptive data shows health disparities in terms of COVID-19 cases, deaths and case fatality ratio (CFR) among populations living in eight divisions of Bangladesh. Both absolute and relative values of reported COVID-19 cases and deaths were consistently highest in Dhaka Division. It is interesting to note here that though CFR was lowest (1.3%), vaccination coverage was highest (11.9%) in Dhaka Division. Similarly, spatial disparities also found in vaccination coverage (completed vaccine against COVID-19) among populations living in eight divisions which varied from 5% in Mymensingh Division to 11.9% in Dhaka Division. So, spatial disparities in vaccination is quite significant across eight divisions.

Gender disparities were also observed in vaccination coverage irrespective of doses. For instance, as mid June 2021, 62% of male 38% of female population received their first dose of COVID-19 vaccine, while 64% of male and 36% of female population received their second doses of vaccine.

Regarding COVID-19 risk mapping, 40 districts were flagged as very high risk (VHR) zones, 15 districts were as high risk (HR) zones and eight as moderately risk (MR) and only one district was at low risk (LR).

4.2 Interpretations

Evidence shows that population density is positively associated with the percentage of patients with COVID-19 infection in the population [34]. This phenomenon is consistent in Dhaka Division but not in Mymensingh which has a relatively high population density but relatively low COVID-19 cases. Also, the WHO weekly WHO report (week 3-6 May, Vol. No. 63) indicated that the weekly infection rate is higher in the districts with densely populated cities [36]. The WHO report (week 17-23 May, 2021, Vol. No. 65) also showed that most of the districts with higher infection rates were located along or close to the border with India [36].

While globally, 22% of population received at least one dose of COVID-19 vaccine, this figure is only 12% in Bangladesh as of mid June 2021 [9]. In divisional level, this figure varies from 1.3% to 11.9% in the country. Lack of information among mass population might be one of the reasons for this low COVID-19 vaccination coverage. For instance, a BIGD Study has found that over one-third of survey respondents were not informed about COVID-19 vaccine registration in Bangladesh [11, 12]. Additionally, the Government of Bangladesh (GOB) decided to slow down registration communication as the government has faced a vaccine shortage once India stopped supplying COVISHIELD vaccine between April and May 2021. However, the GOB resumed mass registration for COVID-19 vaccination in early July 2021 [37].

In addition, there was a travel ban between capital city and other districts due to countrywide lockdown which might indirectly affect some people receiving their second dose of COVID-19 vaccine who changed their original location. It is because, until first week of May 2021, people could not change their vaccination center meaning a person has to receive second or follow up doses from the health center where she/he received first dose. If someone receives first dose from Rauzan Upazila, he/she has to receive second dose from Rauzan Upazila of Chattogram District [35].

Regarding gender disparities in COVID-19 vaccination, a recent study shows that females are less likely to receive vaccination against COVID-19 compared to their male counterparts in Bangladesh [10] which is consistent to this report.

4.3 Implications

From public health point of view, risk mapping may help public health officials to know the current level of SARS-CoV-2 transmission in the community and the amount of people who are getting infected are tested. The percent positive will be high if the number of positive tests is too high, or if the number of total tests is too low. A higher positivity rate suggests higher transmission and that there are likely more people with coronavirus in the community who haven’t been tested yet. The percent positive is a critical measure which inform a Public Health Officer an indication how widespread infection is in a area where the testing is take place and whether levels of testing are keeping up with levels of disease transmission [32]. The test per positive case varies 7.1 - 7.5, meaning over seven tests are required to identify one COVID-19 positive case in the country [29-30, 38].

From productivity point of view, the reproducible R codes of this document may be useful for a beginner to start with learning data visualization techniques and mapping step by step. Additionally, given the paucity of reliable open source data in a usable format (e.g. spreadsheet format), this report has shown an alternative way of extracting reliable data such as extracting data directly from a PDF document or website using R Programming.

4.4 Limitations

Population structure such as gender, age group in each of eight divisions of Bangladesh might be an influencing factor for spatial variation in case fatality ratio (CRF) and vaccination coverage which was not explored in this report. In addition, density of health facilities and access to healthcare services in each of eight divisions might be other influencing factors for COVID-19 CRF and COVID-19 vaccination coverage which was beyond the scope this report. Finally, this report is based on only a single week data (14 June 2021) that may not be generalized while COVID-19 cases and death fluctuate everyday.

Regarding software usage, there might be other efficient way of extracting PDF data than R Programming.

5 REFERENCES

  1. Anonymous (Jan, 2021). Bangladesh starts COVID vaccination drive, Al Jazeera Media Network. Available at https://www.aljazeera.com/news/2021/1/28/bangladesh-starts-covid-vaccination-drive

  2. Anonymous (Jun, 2021). COVID-19 vaccination in Bangladesh, Wikipedia, Available at https://en.wikipedia.org/wiki/COVID-19_vaccination_in_Bangladesh

  3. Anonymous (Jun, 2021). Single-dose Johnson & Johnson vaccine gets emergency use authorization in Bangladesh, The Daily Star, Available at https://www.thedailystar.net/coronavirus-deadly-new-threat/news/single-dose-covid-19-vaccine-janssen-gets-emergency-use-authorization-bangladesh-2111557

  4. Anonymous (Jun, 2021). Bangladesh approves Sinovac Covid-19 vaccine for emergency use, Dhaka Tribune, Available at https://www.dhakatribune.com/bangladesh/2021/06/06/sinovac-covid-19-vaccine-approved-for-emergency-use

  5. Anonymous (May, 2021). Bangladesh drug regulator authorises Pfizer vaccine for emergency use, Bd News 24, Available at https://bdnews24.com/health/2021/05/27/bangladesh-drug-regulator-authorises-pfizer-vaccine-for-emergency-use

  6. Paul, R (Apr, 2021). Bangladesh approves Russia’s Sputnik V COVID-19 shot; says Sinopharm pending, Reuters, Available at https://www.reuters.com/article/health-coronavirus-bangladesh-vaccine/bangladesh-approves-russias-sputnik-v-covid-19-shot-says-sinopharm-pending-idUSL1N2MK0TP

  7. Anonymous (Apr, 2021). Bangladesh approves China’s Sinopharm Covid-19 vaccine for emergency use, Dhaka Tribune. Available at https://www.dhakatribune.com/bangladesh/2021/04/29/bangladesh-approves-china-s-sinopharm-covid-19-vaccine-for-emergency-use

  8. Anonymous (Oct, 2021). WHO enlists Globe Biotech’s Covid-19 vaccine, The New Nation, Available at https://www.msn.com/en-xl/news/other/who-enlists-globe-biotechs-covid-19-vaccine/ar-BB1a84cv

  9. Anonymous (Jun, 2021). Coronavirus (COVID-19) Vaccinations, Statistics and Research, Our World in Data. Global Change Data Lab, Available at https://ourworldindata.org/covid-vaccinations

  10. Abedin M, Islam MA, Rahman FN, Reza HM, Hossain MZ, Hossain MA, et al. (2021) Willingness to vaccinate against COVID-19 among Bangladeshi adults: Understanding the strategies to optimize vaccination coverage. PLoS ONE 16(4): e0250495. https://doi.org/10.1371/journal.pone.0250495

  11. Anonymous (June, 2021). Over one-third of survey respondents uninformed about COVID-19 vaccine registration: BIGD Study, The Bangladesh Beyond, Available at https://bangladeshbeyond.com.bd/over-one-third-of-survey-respondents-uninformed-about-covid-19-vaccine-registration-bigd-study/

  12. Anonymous (Jun, 2021). Over one-third population uninformed about Covid-19 vaccine registration: Study, Prothom Alo English Desk, Available at https://en.prothomalo.com/bangladesh/over-one-third-population-uninformed-about-covid-19-vaccine-registration-study

  13. R Core Team (2020). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. URL https://www.R-project.org/.

  14. Joe Cheng, Bhaskar Karambelkar and Yihui Xie (2019). leaflet: Create Interactive Web Maps with the JavaScript ‘Leaflet’ Library. R package version 2.0.3. https://CRAN.R-project.org/package=leaflet

  15. Brandon Walker (2019). Making Interactive Maps in R with Less Than 15 Lines of Code, Available at https://towardsdatascience.com/making-interactive-maps-in-r-with-less-than-15-lines-of-code-bfd81f587e12

  16. Lin Y, Hu Z, Zhao Q, Alias H, Danaee M, Wong LP. Understanding COVID-19 vaccine demand and hesitancy: A nationwide online survey in China. PLoS Negl Trop Dis. 2020 Dec 17;14(12):e0008961. doi: 10.1371/journal.pntd.0008961. PMID: 33332359; PMCID: PMC7775119.

  17. Wickham et al., (2019). Welcome to the tidyverse. Journal of Open Source Software, 4(43), 1686, https://doi.org/10.21105/joss.01686

  18. Greg Lin (2020). reactable: Interactive Data Tables Based on ‘React Table’. R package version 0.2.3. https://CRAN.R-project.org/package=reactable

  19. Ramnath Vaidyanathan, Yihui Xie, JJ Allaire, Joe Cheng, Carson Sievert and Kenton Russell (2020). htmlwidgets: HTML Widgets for R. R package version 1.5.2. https://CRAN.R-project.org/package=htmlwidgets

  20. Joe Cheng, Carson Sievert, Winston Chang, Yihui Xie and Jeff Allen (2020). htmltools: Tools for HTML. R package version 0.5.0. https://CRAN.R-project.org/package=htmltools

  21. Stefan Milton Bache and Hadley Wickham (2020). magrittr: A Forward-Pipe Operator for R. R package version 2.0.1. https://CRAN.R-project.org/package=magrittr

  22. Alex Couture-Beil (2018). rjson: JSON for R. R package version 0.2.20. https://CRAN.R-project.org/package=rjson

  23. Tim Appelhans and Florian Detsch (2020). leafpop: Include Tables, Images and Graphs in Leaflet Pop-Ups. R package version 0.0.6. https://CRAN.R-project.org/package=leafpop

  24. Hadley Wickham and Dana Seidel (2020). scales: Scale Functions for Visualization. R package version 1.1.1. https://CRAN.R-project.org/package=scales

  25. Jim Hester (2020). glue: Interpreted String Literals. R package version 1.4.2. https://CRAN.R-project.org/package=glue

  26. Pebesma, E., 2018. Simple Features for R: Standardized Support for Spatial Vector Data. The R Journal 10 (1), 439-446, https://doi.org/10.32614/RJ-2018-009

  27. Thomas J. Leeper (2018). tabulizer: Bindings for Tabula PDF Table. Extractor Library. R package version 0.2.2.

  28. Richard Iannone (2020). DiagrammeR: Graph/Network Visualization. R package version 1.0.6.1. https://CRAN.R-project.org/package=DiagrammeR

  29. World Health Organization [WHO] (2021a). WHO Bangladesh COVID-19 Morbidity and Mortality Weekly Update (MMWU), Published on 14 June 2021, Vol. No. 68, COVID-19 Bangladesh situation reports by WHO Bangladesh, Available at https://cdn.who.int/media/docs/default-source/searo/bangladesh/covid-19-who-bangladesh-situation-reports/who_covid-19-update_68_20210614.pdf?sfvrsn=4439a1fa_7

  30. World Health Organization [WHO] (2021b). WHO Bangladesh COVID-19 Morbidity and Mortality Weekly Update (MMWU), Published on 21 June 2021, Vol. No. 69, COVID-19 Bangladesh situation reports by WHO Bangladesh, Available at https://cdn.who.int/media/docs/default-source/searo/bangladesh/covid-19-who-bangladesh-situation-reports/who_covid-19-update_69_20210621.pdf?sfvrsn=906e97e2_13

  31. Azad, A.K. (2020). National Preparedness and Response Plan for COVID-19, Bangladesh, Version 5, March 2020, Directorate General of Health Services, Health Service Division, Ministry of Health and Family Welfare. Available at https://reliefweb.int/sites/reliefweb.int/files/resources/nprp_covid-19_v6_18032020.pdf

  32. Dowdy, D. & D’Souza, G. (2020). COVID-19 Testing: Understanding the “Percent Positive”, Johns Hopkins Bloomberg School of Public Health, Baltimore. Available at https://www.jhsph.edu/covid-19/articles/covid-19-testing-understanding-the-percent-positive.html

  33. Bangladesh Bureau of Statistics [BBS] (June 2021). 2011 Population & Housing Census: Preliminary Results, Bangladesh Bureau of Statistics, Available at http://www.bbs.gov.bd/WebTestApplication/userfiles/Image/BBS/PHC2011Preliminary%20Result.pdf

  34. Yin H, Sun T, Yao L, Jiao Y, Ma L, Lin L, Graff JC, Aleya L, Postlethwaite A, Gu W, Chen H. Association between population density and infection rate suggests the importance of social distancing and travel restriction in reducing the COVID-19 pandemic. Environ Sci Pollut Res Int. 2021 Jan 13:1-7. doi: 10.1007/s11356-021-12364-4. Epub ahead of print. PMID: 33442802; PMCID: PMC7806252.

  35. Correspondent, S. & bdnews24.com. (April, 2021). Bangladesh allows changing COVID vaccination centre for second dose. Retrieved July 8, 2021, from https://bdnews24.com/bangladesh/2021/04/29/bangladesh-allows-changing-covid-vaccination-centre-for-second-dose

  36. Hasan, K. & Tithila, KK. (May 2021). Border districts’ Covid infection rates raise alarm, Available at https://www.dhakatribune.com/bangladesh/2021/05/27/border-districts-covid-infection-rates-raise-alarm

  37. Anonymous (July 8, 2021). Bangladesh resumes mass registration for COVID-19 vaccination, Safak Yeni, Available at https://www.yenisafak.com/en/news/bangladesh-resumes-mass-registration-for-covid-19-vaccination-3576046

  38. World Health Organization [WHO] (2021c). WHO Bangladesh COVID-19 Morbidity and Mortality Weekly Update (MMWU), Published on 05 July 2021, Vol. No. 71, COVID-19 Bangladesh situation reports by WHO Bangladesh, Available at https://cdn.who.int/media/docs/default-source/searo/bangladesh/covid-19-who-bangladesh-situation-reports/who_covid-19-update_71_20210705.pdf?sfvrsn=cb7f75a1_11

6 APPENDIX

6.1 R Programming Codes

START HERE

Loading R Packages

# Clean up everything 
rm(list=ls()) 
# Set working directory 
setwd("F:/Maps")
# Max number of rows to be printed on R Console screen 
options(max.print=1000000)
# Checking r-version
print(version$version.string) 
# Loading required packages
library("glue");library("sf");library("scales");library("htmltools");
library("leaflet")
library("htmlwidgets");library("webshot");library("tidyverse");
library("tabulizer");
library("DiagrammeR")

Creating a data management outline

fig <- DiagrammeR::grViz("
digraph boxes_and_circles {
    # a 'graph' statement
    graph [overlap = true, fontsize = 18]
    # several 'node' statements
    node [shape = box,
            fixedsize = true,
            style = filled,
            width = 3,
            height = 1,
            fontname = Helvetica,
            fillcolor = white]
    DAT  [label = 'Data have been used \nfor mapping', fontcolor = blue, 
    width=3, fontsize = 20, penwidth = 3, peripheries = 2]
    ADM  [label = 'BGD Administrative \nData', fontcolor = orange, 
    fontsize = 20, penwidth = 3, peripheries = 1]
    COV  [label = 'COVID-19 Data', fontcolor = magenta, fontsize = 20, 
    penwidth = 3, peripheries = 1]
    VAC  [label = 'COVID-19 Vaccination \nData', fontcolor = red, 
    fontsize = 20, penwidth = 3, peripheries = 1]
    LET  [label = 'Map Data', fontcolor = green, fontsize = 20, 
    penwidth = 3, peripheries = 1]
    DF1  [label = 'Bangladesh Admin \nLevel-1 data: \nDivision, 
    Longitude, \nLatitude, Polygons of \ndivisions', fontcolor = black, 
    fontsize = 20, width = 3, height=2, penwidth = 3, peripheries = 1]
    DF2  [label = 'Covid-19: \n Division, Cases, \nDeaths, Case Fatality 
    \nRatio or CFR', fontcolor = black, fontsize = 20, width = 3, height=2, 
    penwidth = 3, peripheries = 1]
    DF3  [label = 'COVID-19 Vaccination:\n Division, Population taken 1st
    \ndose,
    % of Population taken \n1st dose, Population taken 2nd \ndose, 
    % of population taken \n2nd dose', fontcolor = black, fontsize = 18, 
    width = 3.7, height=2, penwidth = 3, peripheries = 1]
    DF4  [label = 'Spatial Data: \n Open street map, \nLeaflet map, Toner
    Lite \nMap, World Imagery Map', fontcolor = black, fontsize = 20, 
    width = 3.5, height=2, penwidth = 3, peripheries = 1]
    MED  [label = 'Merging Dataframes: \n Above four dataframes have been 
    merged by using a unique identifier (e.g., Division). \nThen, relevant 
    attributes data have been layerd on Leaflet Map', fontcolor = black, 
    fontsize = 20, width = 10.7, height=1.5, penwidth = 3, peripheries = 1]
    DD   [label = 'Final Map', fontcolor=blue, shape=circle, fontsize=25, 
    penwidth = 4, peripheries = 1]
    # several 'edge' statements
    DAT->ADM; DAT->COV; DAT->VAC; DAT->LET; ADM->DF1; COV->DF2; 
    VAC->DF3; LET->DF4;
    DF1->MED;DF2->MED; DF3->MED; DF4->DD; {rank=same; MED->DD; }
}
")
# ![Outline of required data management for mapping](data_analysis_layout.png)
# {out.width=100%}

DATA MANAGEMENT

1. Bangladesh (BGD) Administrative Data

# 
# I have to follow these following steps to download and access to 
# Bangladesh Administrative Data for the first time.
# 
# ***Step-1:*** Downloading a zipped file with this line of code. 
# 
# zip.url <- paste0("https://data.humdata.org/dataset/401d3fae-4262-48c9-
# 891f-461fd776d49b
# /", "resource/08736818-ae72-44a9-abd6-a51915c24921/download/bgd_adm_bbs_
# 20201113_shp.zip")
# 
# ***Step-2:*** Getting working directory in your computer with this 
# line of code.
# 
#  dir <- getwd()
# 
# ***Step-3:*** Call a name of zipped file object with this line of code. 
# 
# zip.file <- "file_name.zip"
# 
# ***Step-4:*** Combining zipped file with this line of code. 
# 
# zip.combine <- as.character(paste(dir, zip.file, sep = "/"))
# 
# ***Step-5:*** Downloading zipped file with this line of combination of
# codes. 
# 
# download.file(zip.url, destfile = zip.combine)
# 
# ***Step-6:*** Unzipping file in your local directory with this line
# of code. 
# 
# unzip(zip.file) 
# 
# ***Finally,***I will see this file in the unzipped folder named 
# "bgd_adm_bbs_20201113_SHP" in the local directory. 
# I will load/import this file in a minute.
# Load polygon data of Bangladesh Division level (layer#1)
bd_geo <- sf::st_read(paste0("F:/Maps/Data/bgd_adm_bbs_20201113_SHP/",
                             "bgd_admbnda_adm1_bbs_20201113.shp"),
                      stringsAsFactors = FALSE)
# Rename columns 
names(bd_geo)[3] <- "Division"
bd_geo$Division[1] <- "Barisal"
bd_geo$Division[2] <- "Chattogram"

# Extract Coordinates from each polygons** 
bd_division_points<- sf::st_point_on_surface(bd_geo)
bd_division_coords <-sf::st_coordinates(bd_division_points)
colnames(bd_division_coords) <-c("Longitude", "Latitude")
bd_division_df <- cbind(bd_geo, bd_division_coords)

# Polygon data
bd_map_data <- st_transform(bd_division_df, "+proj=longlat +datum=WGS84")

# Creating a vector with color for 8 divisions in Bangladesh
bd_map_data$col <- c("red", "blue", "yellow", "purple", "pink", "black", 
                     "crimson", "brown")

2. COVID-19 Data: Cases, Deaths, CFR

out <- as.data.frame(extract_tables(paste0("https://cdn.who.int/media/docs/
default-source","/searo/bangladesh/covid-19-who-bangladesh-situation-reports/",
"who_covid-19-update_68_20210614.pdf?sfvrsn=4439a1fa_7"), 
page = 4, method = 'stream'), stringsAsFactors = FALSE)

# Data Cleaning/Wrangling

# Remove first three lines 
out <- out[-(1:3),]

# Selecting only required variables 
out <- dplyr::select(out, X1, X2)

# Split column X2 into 4 by splitting by whitespace
out <- tidyr::separate(data = out, col = 2, into = c('X2.1','X2.2','X2.3',
                                                     'X2.4', 'X2.5', 'X2.6'),
                       sep = ' ', remove = TRUE)

# Unite two columns 
df <- tidyr::unite(data = out, "X212", X2.1:X2.2, sep = "", 
                   remove = TRUE, na.rm = TRUE)
df <- tidyr::unite(data = df, "X245", X2.4:X2.5, sep = "", 
                   remove = TRUE, na.rm = TRUE)
df <- tidyr::unite(data = df, "X2456", X245:X2.6, sep = "", 
                   remove = TRUE, na.rm = TRUE)
df <- tidyr::separate(data = df, X2456, c("X2456.1","X2456.2"),
                      sep='\\.',remove=T)
df <- tidyr::separate(data = df, X2456.1, c("X2456.11","X2456.12"), 
                      sep = -1,remove=T)
df <- tidyr::separate(data = df, X2456.2, c("X2456.21","X2456.22"),
                      sep="%",remove=T)
df <- dplyr::select(df, c(1, 2, 4,5,6))
df <- tidyr::unite(data = df, X24561221, c("X2456.12", "X2456.21"), 
                   sep = "", remove = TRUE, na.rm = TRUE)
# Naming columns 
colnames(df) <- c("Division", "Cases", "Death", "CFR")
df$Cases <- as.numeric(df$Cases)
df$Death <- as.numeric(df$Death)
df$CFR <- (as.numeric(df$CFR))/10
write.csv(df, "F:/Maps/covid19_division_17June.csv")

3. COVID-19 Data: Vaccination

Screenshot of the Page-9 of the PDF document in Viewer tab in RStudio

# Cleaning Vaccination Data
location <- read.csv("F:/Maps/location_17June.csv")

# To remove first column (X)
location$X = NULL 

# Split column X2 into 4 by splitting by whitespace
vac_df <- tidyr::separate(data = location, col = 2, into = 
                              c('X2.1','X2.2','X2.3'), 
                          sep = ' ', remove = TRUE)
vac_df <- tidyr::separate(data = vac_df, col = 5, into = 
                              c('X3.1','X3.2'), 
                          sep = '%', remove = TRUE)
vac_df <- tidyr::separate(data = vac_df, col = 7, into = 
                              c('X4.1','X4.2', 'X4.3'), 
                          sep = ' ', remove = TRUE)
vac_df <- tidyr::separate(data = vac_df, col = 10, into = 
                              c('X5.1','X5.2'), 
                          sep = '%', remove = TRUE)

# I have to remove commas from data frame columns in R by using gsub() 

vac_df$X4.1 = as.numeric(gsub(",", "", vac_df$X4.1))

# Unite multiple columns 
vac_df <- tidyr::unite(data = vac_df, "X2123", X2.1:X2.3, sep = "", 
                       remove = TRUE, 
                       na.rm = TRUE)
vac_df <- tidyr::unite(data = vac_df, "X4123", X4.1:X4.3, sep = "",
                       remove = TRUE, 
                       na.rm = TRUE)
# Selecting desired columns 
vac_df <- dplyr::select(vac_df, c(1, 2, 3, 5,6))

# (Re)naming columns 
colnames(vac_df) <- c("Division", "Admin_dose_1", "Prop_popul_dose_1", 
                      "Admin_dose_2", "Prop_popul_dose_2")

# Change Total into National 
vac_df$Division[9] <- "National"

# Merging df and vac_df
case_vac_df <- dplyr::inner_join(x=df, y=vac_df, by ="Division")

# Saving file in local directory 
write.csv(vac_df, "F:/Maps/covid19_vac_division_17June.csv")

# Merging vaccine data with points/polygon data
data_df <- dplyr::full_join(x= bd_map_data, y=case_vac_df, by= "Division")

# Converting character columns into numeric 
data_df$Cases <- as.numeric(data_df$Cases)
data_df$Death <- as.numeric(data_df$Death)
data_df$CFR <- as.numeric(data_df$CFR)
data_df$Admin_dose_1 <- as.numeric(data_df$Admin_dose_1)
data_df$Prop_popul_dose_1 <- as.numeric(data_df$Prop_popul_dose_1)
data_df$Admin_dose_2 <- as.numeric(data_df$Admin_dose_2)
data_df$Prop_popul_dose_2 <- as.numeric(data_df$Prop_popul_dose_2)

data_cov <- dplyr::select(data_df, Division, Cases, Death, CFR, 
        Admin_dose_1, Prop_popul_dose_1, Admin_dose_2, Prop_popul_dose_2)
data_cov <- dplyr::rename(data_cov, 
                          "1st dose" = Admin_dose_1, 
                          "1st dose(%)" = Prop_popul_dose_1, 
                          "2nd dose" = Admin_dose_2, 
                          "2nd dose(%)" = Prop_popul_dose_2)

# Converting sf into data frame
data_cov2 <-  sf::st_set_geometry(data_cov, NULL)
data_cov2$Cases <- scales::comma(data_cov2$Cases, accuracy = 1)
data_cov2$Death <- scales::comma(data_cov2$Death, accuracy = 1)
data_cov2$`1st dose` <- scales::comma(data_cov2$`1st dose`, accuracy = 1)
data_cov2$`2nd dose` <- scales::comma(data_cov2$`2nd dose`, accuracy = 1)

4. Spatial Data

data_df$Updated <- "14 June 2021"

# Generate a hyper link of data source
data_df$Source <- "<a class='weblink' href= 'https://cdn.who.int/media/docs/
default-source/searo/bangladesh/covid-19-who-bangladesh-situation-reports/
who_covid-19-update_68_20210614.pdf?sfvrsn=4439a1fa_7'
target='_blank' rel='noopener noreferrer'>WHO Bangladesh</a>"

# Creating a popup labels

covid_labels <- glue::glue(
    "<strong><span style='color:blue'><span style='font-size: 14px'>
            {data_df$Division} Division</strong></span><br/>
            Cases: <b><span style='color:blue'>{scales::comma(data_df$Cases, 
            accuracy = 1)}<br/></span></b>
            Death: <b><span style='color:blue'>{scales::comma(data_df$Death,
            accuracy = 1)}<br/></span></b>
            CFR: <b><span style='color:blue'>{scales::comma(data_df$CFR, 
            accuracy = 0.01)}%<br/></span></b>
            Administered 1st dose: <b><span style='color:blue'>
            {scales::comma(data_df$Admin_dose_1, 
            accuracy = 1)}<br/></span></b>
            40+ pop. taken 1st dose: <b><span style='color:blue'>
            {scales::comma(data_df$Prop_popul_dose_1, 
            accuracy = 0.1)}%<br/></span></b>
            Administered 2nd dose: <b><span style='color:blue'>
            {scales::comma(data_df$Admin_dose_2, 
            accuracy = 1)}<br/></span></b>
            40+ pop. taken 2nd dose: <b><span style='color:blue'>
            {scales::comma(data_df$Prop_popul_dose_2, 
            accuracy = 0.1)}%<br/></span></b>
            Updated: <b><span style='color:blue'>
            {data_df$Updated} </span><br/></b>
            Source: {data_df$Source} <br/>") %>%  lapply(htmltools::HTML)

bd_data <- glue::glue(
    "<P><b><span style='font-size: 25px'>
           <span style='color:green'>BANGLADESH<br></span><span 
           style='font-size: 
           16px'><span style='color:blue'>COVID-19 Vaccination:
           </b></span><br/>Administered 1st dose: <b><span 
           style='color:blue'>
           {scales::comma(tail(data_df$Admin_dose_1, 1),accuracy = 1)}
           <br/></span></b>
           % of pop. taken 1st dose: <b><span style='color:blue'>
           {scales::comma(tail(data_df$Prop_popul_dose_1, 1),
           accuracy = 0.1)}% <br/>
           </span></b>Administered 2nd dose: <b><span style='color:blue'>
           {scales::comma(tail(data_df$Admin_dose_2, 1),accuracy = 1)}<br/>
           </span></b>
           % of pop. taken 2nd dose: <b><span style='color:blue'>
           {scales::comma(tail(data_df$Prop_popul_dose_2, 1),
           accuracy = 0.1)}%
           <br/></span></b>Updated: <b><span style='color:blue'>
           {tail(data_df$Updated,1)}</b></span></p>")

# Making a title of the Map
tag.map.title <- tags$style(HTML("
  .leaflet-control.map-title { 
    transform: translate(-50%,20%);
    position: fixed !important;
    left: 20%;
    text-align: center;
    padding-left: 10px; 
    padding-right: 10px; 
    background: rgba(255,255,255,0.75);
    font-weight: bold;
    font-size: 16px;
  }
"))

title <- tags$h3(
    tag.map.title, HTML("COVID-19 cases, death, CFR, and vaccination 
                        in Bangladesh")
)  

CREATING MAP

map <-leaflet::leaflet() %>% 
    addProviderTiles(providers$OpenStreetMap) %>%
    addPolygons(
        data = data_df, 
        fillColor = data_df$col, 
        label = NULL,
        stroke = TRUE,
        smoothFactor = 0.2,
        fillOpacity = 0.8,
        color = "black",
        weight = 2) %>%
    addMarkers(lng= data_df$Longitude, lat= data_df$Latitude, label =
                   covid_labels,
               labelOptions = labelOptions(noHide = TRUE, permanent = TRUE, 
                direction = "right", textsize = "10px", textOnly = FALSE))%>% 
    addMarkers(lng= data_df$Longitude, lat= data_df$Latitude, 
               popup = covid_labels, 
               popupOptions = popupOptions(closeOnClick = FALSE, 
                                           keepInView = TRUE))%>% 
    addControl(title, position = "topleft", className="map-title") %>%
    fitBounds(lng1 = min(data_df$Longitude, na.rm = TRUE), 
              lat1 = min(data_df$Latitude,na.rm = TRUE),
              lng2 = max(data_df$Longitude, na.rm = TRUE), 
              lat2 = max(data_df$Latitude, na.rm = TRUE))%>%
    addMiniMap(toggleDisplay = TRUE, tiles = providers$OpenStreetMap)%>%
    addProviderTiles(providers$Esri.WorldImagery, group = "World Imagery")%>%
    addProviderTiles(providers$Stamen.TonerLite, group = "Toner Lite")%>%
    addProviderTiles(providers$OpenStreetMap, group = "Open SM")%>%
    addLayersControl(baseGroups = c("Open SM", "Toner Lite", "World Imagery"), 
                     options = layersControlOptions(collapsed = FALSE))%>%
    addControl('<a rel="license" href="http://creativecommons.org/licenses
    /by-sa/4.0/">
             <img alt="Creative Commons License" style="border-width:0" 
             src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" />
             </a><br />This work is licensed under a <a rel="license" 
             href="http://
             creativecommons.org/licenses/by-sa/4.0/">Creative Commons 
             Attribution-ShareAlike 4.0 International License</a>.', 
               position = "bottomleft") %>%
    addControl(bd_data, position = 'topright') 

RESULTS

knitr::kable(head(data_cov2, n=50), 
    caption = "COVID-19: Cases, Death, CFR, Vaccine as of 13 Jun'21")

# Saving map as html file 
htmlwidgets::saveWidget(widget = map,
                        file = "covid19_update_17June.html",
                        selfcontained = TRUE)
webshot::webshot("covid19_update_17June.html", 
                 file = "bd_vaccination_june.png", 
                 vwidth = 1200,vheight = 1200) 
# ![COVID-19 cases, death, CFR, and vaccination coverage by eight divisions
# in Bangladesh](bd_vaccination_june.png) 

6.2 Case Definition of COVID-19

6.2.1 Suspect Case

    1. A patient with acute respiratory illness (fever and at least one sign/symptom of respiratory disease (e.g., cough, shortness of breath), AND with no other etiology that fully explains the clinical presentation AND a history of travel to or residence in a country/area or territory reporting local transmission (See situation report) of COVID-19 disease during the 14 days prior to symptom onset.

OR

    1. A patient with any acute respiratory illness AND having been in contact with a confirmed or probable COVID- 19 case (see definition of contact) in the last 14 days prior to onset of symptoms;

OR

    1. A patient with severe acute respiratory infection (fever and at least one sign/symptom of respiratory disease (e.g., cough, shortness breath) AND requiring hospitalization AND with no other etiology that fully explains the clinical presentation [31].

6.2.2 Probable Case

A suspect case for whom testing for COVID-19 is inconclusive.

  • Inconclusive being the result of the test reported by the laboratory [31].

6.2.3 Confirmed Case

A person with laboratory confirmation of COVID-19 infection, irrespective of clinical signs and symptoms.

  • Information regarding laboratory guidance can be found here [31].

6.3 Level of COVID-19 risk by districts

WHO identified levels of COVID-19 risk across districts based on risk classification 14-20 June 2021

Table A1: Levels of COVID-19 risk across districts based on WHO risk classification 14-20 June 2021

STOP HERE

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. If you have any queries at all, please feel free to contact me at and I’ll gladly answer your questions.