ဘာသာစကား - MM | EN
Myanmar is now nearing a month after identifying the first patient tested Covid-19. This notebook will try to look at publicly available data related to the Covid-19 response in Myanmar and is aimed at shedding light to the need of data-driven responses and the need of annonymised open data in this fight to help our frontline health workers deal with their round-the-clock fight against this disease with limited resources.
Myanmar this time listened quite closely to World Health Organization’s guidelines and tested only suspects with travel history AND symptoms. Not while ago after realising potentials of local clusters that the government decided to increase its testing capacity to around 300 samples a day. Unsurprisingly, more tests proportionately mean more positive cases confirmed.
library(tidyverse)
library(reshape2)
library(foreign)
library(RColorBrewer)
library(scales)
library(ggrepel)
#Data scrapped daily and updated here courtesy of Nyan Lynn Myint/The Ananda: https://github.com/theananda/myanmar-covid19-data/tree/master/MOHS_Dashboard_Data
test <- read_csv("https://raw.githubusercontent.com/theananda/myanmar-covid19-data/master/MOHS_Dashboard_Data/MOHS%20Dashboard%20Data-Summary.csv")
test_cleaned <- test %>%
mutate(Lab_Neg = PUI - Confirmed) %>%
select(Date, Lab_Neg, Confirmed) %>%
melt(id.vars = "Date") %>%
mutate(Date = format(as.Date(Date, "%d-%m-%y"), "%m/%d/%y")) %>%
mutate(variable = gsub("Lab_Neg", "Negative", variable)) %>%
mutate(variable = gsub("Confirmed", "Positive", variable)) %>%
mutate(variable = factor(variable, levels = c("Positive", "Negative"))) %>%
filter(Date != "04/14/20") %>% #Missing data
group_by(Date, variable) %>%
summarise(value = max(value)) #Maximun count taken in case of two entries in a single day
ggplot(test_cleaned, aes(as.Date(Date, "%m/%d/%y"), value, fill= variable)) +
geom_area(stat = "identity", position = "stack") +
scale_fill_manual(values=c("#e74c3c", "#3498db")) +
theme(panel.grid.major = element_line(color = "black", linetype = "dotted", size = .1),
panel.background = element_blank(),
text = element_text(family="Raleway", lineheight = 1.1),
plot.caption = element_text(family="Raleway", hjust=0),
axis.text = element_text(family="Raleway", size = 7),
strip.text = element_text(family="Raleway"),
plot.title = element_text(size =16),
plot.subtitle = element_text(size =9),
axis.title = element_text(size = 9),
plot.margin = unit(c(1,1,1,1), "cm")) +
labs(title="Covid-19 Laboratory Test Results",
subtitle = "Cumulative Total by Day",
y="# of Sample",
x="",
fill = "Result",
caption = "Data: MOHS Dashboard | Graphic: The Ananda")
MoHS used to publish number of hospitalized patients up until 13 April, so it would be worth to check what is the latest situation and which township is most crowded at that point. It looks like the upper part of the country is least affected at the moment, but that might also be under-reporting issue because of their proximity to China and India and weighing on the number of quarantined population there, especially in Sagaing. Or the lack of formal health facilities are contributing to no reported hospitalized cases in these areas.
library(sf)
#Geospatial Data for Township Boundary
tsp <- st_read("tsp.json")
names(tsp)[8] <- "tsp_pcode"
hospitalized <- read_csv("mohs-data-13-04-2020-41 confirmed cases.csv")
baseline <- read_csv("Covid-19 Baseline Township Data.csv")
names(baseline)[4] <- "tsp_pcode"
baseline_cleaned <- baseline %>%
mutate(DocPerThousand = (PHYSNB/POP)*1000) %>%
mutate(NurPerThousand = (NURSNB/POP)*1000) %>%
select(tsp_pcode, DocPerThousand, NurPerThousand)
baseline_cleaned_for_scatter <- baseline %>%
filter(!is.na(PHYSNB)) %>%
filter(!is.na(NURSNB)) %>%
filter(!is.na(HSNB)) %>%
filter(!is.na(BED)) %>%
filter(!is.na(POP)) %>%
group_by(SR_NAME) %>%
summarise(PHYSNB = sum(PHYSNB), NURSNB = sum(NURSNB), HSNB = sum(HSNB), BED = sum(BED), POP = sum(POP)) %>%
mutate(DocPerThousand = (PHYSNB/POP)*1000) %>%
mutate(NurPerThousand = (NURSNB/POP)*1000) %>%
mutate(BedPerThousand = (BED/POP)*1000) %>%
mutate(FrontlinersPerThousand = ((PHYSNB+NURSNB+HSNB)/POP)*1000) %>%
select(SR_NAME, DocPerThousand, NurPerThousand, BedPerThousand, FrontlinersPerThousand)
hospitalized_cleaned <- hospitalized %>%
group_by(tsp_pcode) %>%
summarise(Hospitalized = sum(HosPt))
hospitalized_w_boundary <- left_join(tsp, hospitalized_cleaned, by="tsp_pcode")
baseline_w_boundary <- left_join(tsp, baseline_cleaned, by = "tsp_pcode")
ggplot(hospitalized_w_boundary) +
geom_sf(aes(fill=Hospitalized), color = "white", linetype = "dotted", size = 0.3) +
guides(fill=guide_colorbar(barwidth = 0.5, barheight = 5, ticks=F)) +
scale_fill_gradient(high = "#e74c3c", low ="#3498db") +
theme_minimal() +
theme(panel.background = element_blank(),
panel.border = element_blank(),
panel.grid = element_blank(),
axis.title.x = element_blank(),
axis.text = element_blank(),
text = element_text(family="Raleway"),
plot.title = element_text(size = 15),
plot.margin = unit(c(1,1,1,1), "cm"),
plot.caption = element_text(hjust=0)) +
labs(title="Covid-19 Suspects by Township",
subtitle = "Data as of 13 April 2020",
fill = "Hospitalized PUI",
caption = "Data: MOHS Dashboard | Graphic: The Ananda")
The General Administration Department collected township-level quarantined persons data on daily basis and report to the national committee against Covid-19, but are not released to the public. Center of Disease Control and Prevention under the Department of Public Health reported region/state aggregates in their daily situation reports. Taninthayi and Kayah are only two regions official releasing daily updates of quarantine facilities. Some other volunteers-collected information are updated on The Ananda Github repo.
The general trend is that the number keeps falling since the second week of April because of the persons released from the facilities after finishing the 14-day quarantine, but that’s not always true in some states and regions, for example Sagaing is reporting a peculiar pattern and Magway an increase again lately. As a context, these facilities are run, in most cases, in collaboration between the local community and township-level government offices. They usually hosted foreign returnees, but now contacts to confirmed positive cases.
region <- read_csv("https://raw.githubusercontent.com/theananda/myanmar-covid19-data/master/Region-level%20Quarantine%20Facilities.csv")
region_cleaned <- region %>%
mutate(Formatted_Date = format(as.Date(Date, "%d/%m/%y"), "%m/%d/%y")) %>%
select("State_Region" = `State/Region`, Formatted_Date, "Facilities" = `No. of facilities`, "Persons" = `Total no. of quaranitine people`) %>%
group_by(Formatted_Date) %>%
summarise(Persons = sum(Persons), Facilities = sum(Facilities))
ggplot(region_cleaned, aes(as.Date(Formatted_Date, "%m/%d/%y"), Persons)) +
#facet_wrap(.~State_Region, ncol = 3) +
geom_area(alpha=.6, fill = "#3498db") +
geom_line(color="#e74c3c") +
geom_point(color="#e74c3c", size = 2, alpha =.6) +
theme(panel.grid.major = element_line(color = "black", linetype = "dotted", size = .1),
strip.background = element_blank(),
panel.background = element_blank(),
text = element_text(family="Raleway", lineheight = 1.1),
plot.caption = element_text(family="Raleway"),
axis.text = element_text(family="Raleway", size = 7),
strip.text = element_text(family="Raleway"),
plot.title = element_text(size =16),
plot.subtitle = element_text(size =9),
axis.title = element_text(size = 9),
plot.margin = unit(c(1,1,1,1), "cm")) +
labs(title="Number of People in Quarantine Facilities",
subtitle = "Over the Whole Country",
y="# of People",
x="",
caption = "Data: DPH | Graphic: The Ananda")
region_cleaned_each <- region %>%
mutate(Formatted_Date = format(as.Date(Date, "%d/%m/%y"), "%m/%d/%y")) %>%
select("State_Region" = `State/Region`, Formatted_Date, "Facilities" = `No. of facilities`, "Persons" = `Total no. of quaranitine people`)
ggplot(region_cleaned_each, aes(as.Date(Formatted_Date, "%m/%d/%y"), Persons, group = 1)) +
facet_wrap(.~State_Region, ncol = 5) +
geom_area(alpha=.6, fill = "#3498db") +
geom_line(color="#e74c3c") +
#geom_point(color="#e74c3c") +
theme(panel.grid.major = element_line(color = "black", linetype = "dotted", size = .1),
strip.background = element_blank(),
panel.background = element_blank(),
text = element_text(family="Raleway", lineheight = 1.1),
plot.caption = element_text(family="Raleway"),
axis.text = element_text(family="Raleway", size = 7),
strip.text = element_text(family="Raleway"),
plot.title = element_text(size =16),
plot.subtitle = element_text(size =9),
axis.title = element_text(size = 9),
plot.margin = unit(c(1,1,1,1), "cm")) +
labs(title="Number of People in Quarantine Facilities",
subtitle = "in Different Regions and States",
y="# of People",
x="",
caption = "Data: DPH | Graphic: The Ananda")
The number of quarantine facilities is quite consistent as different townships has already flexed its muscle to host the quaranntine population fully, that’s worrying given what is about to come. Again Sagaing is something. And Magway is opening more new facilities in past two days, what’s happening there?
ggplot(region_cleaned, aes(as.Date(Formatted_Date, "%m/%d/%y"), Facilities)) +
#facet_wrap(.~State_Region, ncol = 3) +
geom_area(alpha=.6, fill = "#3498db") +
geom_line(color="#e74c3c") +
geom_point(color="#e74c3c", size = 2, alpha = .6) +
theme(panel.grid.major = element_line(color = "black", linetype = "dotted", size = .1),
strip.background = element_blank(),
panel.background = element_blank(),
text = element_text(family="Raleway", lineheight = 1.1),
plot.caption = element_text(family="Raleway"),
axis.text = element_text(family="Raleway", size = 7),
strip.text = element_text(family="Raleway"),
plot.title = element_text(size =16),
plot.subtitle = element_text(size =9),
axis.title = element_text(size = 9),
plot.margin = unit(c(1,1,1,1), "cm")) +
labs(title="Number of Quarantine Facilities",
subtitle = "Over the Whole Country",
y="# of Facilities",
x="",
caption = "Data: DPH | Graphic: The Ananda")
ggplot(region_cleaned_each, aes(as.Date(Formatted_Date, "%m/%d/%y"), Facilities, group = 1)) +
facet_wrap(.~State_Region, ncol = 5) +
geom_area(alpha=.6, fill = "#3498db") +
geom_line(color="#e74c3c") +
#geom_point(color="#e74c3c") +
theme(panel.grid = element_blank(),
strip.background = element_blank(),
panel.background = element_blank(),
panel.border = element_rect(fill=NA, linetype = "dotted"),
text = element_text(family="Raleway", lineheight = 1.1),
plot.caption = element_text(family="Raleway"),
axis.text = element_text(family="Raleway", size = 7),
strip.text = element_text(family="Raleway"),
plot.title = element_text(size =16),
plot.subtitle = element_text(size =9),
axis.title = element_text(size = 9),
plot.margin = unit(c(1,1,1,1), "cm")) +
labs(title="Number of Quarantine Facilities",
subtitle = "in Different Regions and States",
y="# of Facilities",
x="",
caption = "Data: DPH | Graphic: The Ananda")
facilities <- read_csv("https://raw.githubusercontent.com/theananda/myanmar-covid19-data/master/Community%20Quarantine%20Facilities%20Latest.csv")
ggplot(facilities, aes(State_Region, Admitted_Total)) +
geom_boxplot(color = "#e74c3c", alpha =.5) +
theme(panel.grid.major = element_line(color = "black", linetype = "dotted", size = .1),
panel.background = element_blank(),
text = element_text(family="Raleway", lineheight = 1.1),
plot.caption = element_text(family="Raleway", hjust=0),
axis.text = element_text(family="Raleway", size = 7),
strip.text = element_text(family="Raleway"),
plot.title = element_text(size =16),
plot.subtitle = element_text(size =9),
axis.title = element_text(size = 9),
plot.margin = unit(c(1,1,1,1), "cm"),
legend.position = "bottom",
legend.key.size = unit(.4, "cm")) +
labs(title="Distribution of Quarantined People in Each Facility",
subtitle = "Data as of 23 April 2020",
y="# of People",
x="",
fill = "",
caption = "Data: Kayah, Taninthayi Governments & Volunteers | Graphic: The Ananda")
According to the World Bank, the global average of hospital beds per one thousand population in 2011 is 2.705. In their 2015 statistics, the physicians per one thousand people is 1.502 and nurses 3.423. In Myanmar, all states/regions, except Nay Pyi Taw and Kayah, are below that average. All healthcare providers (doctors, nurses and medical staff) number are seriously under the average. The number of doctor per one thousand population is below one even in the best-equipped state, meaning that while a doctor cover one thousand population in an average country, our doctor has to cover 10,000 population each.
According to an estimate by Imperial College London, Myanmar’s best case scenario with suppression strategy will hospitalize more than a hundred thousand people, more than 30,000 in the peak situation with one sixth of them in ICUs at the same time. It means that Myanmar’s healthcare system will face the unprecendented workload even in that best case scendario. We need to think of optimizing the limited resources we have. To not overload the frontliners, individuals must heed to advices from health authorities and the authorities must consider maximising the use of quarantine facilities for the near future.
ggplot(baseline_cleaned_for_scatter, aes(DocPerThousand, BedPerThousand)) +
geom_point(size = 4, color = "#e74c3c", alpha = .5) +
geom_text(aes(label=SR_NAME), color = "#2f3542", nudge_y = .22, nudge_x = .03, show.legend = F, check_overlap = T, size = 3, family= "Raleway") +
theme(panel.grid.major = element_line(color = "black", linetype = "dotted", size = .1),
panel.background = element_blank(),
text = element_text(family="Raleway", lineheight = 1.1),
plot.caption = element_text(family="Raleway", hjust=0),
axis.text = element_text(family="Raleway", size = 7),
strip.text = element_text(family="Raleway"),
plot.title = element_text(size =16),
plot.subtitle = element_text(size =9),
axis.title = element_text(size = 9),
plot.margin = unit(c(1,1,1,1), "cm"),
legend.key.size = unit(.4, "cm"),
legend.key = element_blank()) +
labs(title="Healthcare Situation in Regions and States",
subtitle = "Per 1000 Population",
y="Hospital Beds",
x="Physicians",
fill = "",
caption = "Data: GAD | Graphic: The Ananda")
One significant response to Covid-19 by healh authorities in Myanmar is distirbution of relevant medical equipment to hospital in different regions/states. Data as of 10 April suggests that these equipment are distributed mostly to hospitals in big cities such as Yangon, Mandalay and Nay Pyi Taw. Smaller hospitals in other areas might need necessary equipment as basic as the equipment for sending swab samples to the lab in Yangon.
supplies <- read.csv("https://raw.githubusercontent.com/theananda/myanmar-covid19-data/master/Medical%20Supplies%20with%20Location.csv")
supplies_cleaned <- supplies %>%
mutate(Date = format(as.Date(Announcement.Date, "%d/%m/%y"), "%m/%d/%y")) %>%
select(-c(Announcement.Date, hospital.name.mm, Remarks, lat, long, Ref)) %>%
melt(id.vars = c("Date", "Hospital.original")) %>%
filter(!is.na(value)) %>%
group_by(Hospital.original, variable) %>%
summarise(value = sum(value))
breaks <- axTicks(side=2)
ggplot(supplies_cleaned, aes(reorder(Hospital.original, value), value, fill= variable)) +
geom_bar(stat = "identity", position = "stack") +
scale_y_continuous(label=scales::label_comma()) +
scale_fill_brewer(palette = "RdYlBu") +
theme(panel.grid.major = element_line(color = "black", linetype = "dotted", size = .1),
panel.background = element_blank(),
text = element_text(family="Raleway", lineheight = 1.1),
plot.caption = element_text(family="Raleway", hjust=0),
axis.text = element_text(family="Raleway", size = 7),
strip.text = element_text(family="Raleway"),
plot.title = element_text(size =16),
plot.subtitle = element_text(size =9),
axis.title = element_text(size = 9),
plot.margin = unit(c(1,1,1,1), "cm"),
legend.position = "bottom",
legend.key.size = unit(.4, "cm")) +
labs(title="Medical Supplies Distributed to Regions and States",
subtitle = "Data as of 21 April 2020",
y="# of Supplies",
x="",
fill = "",
caption = "Data: CovidMyanmar.Com | Graphic: The Ananda")
Now we have well surpassed a hundred mark with positive cases. This is the long fight for lives of the people. But we should also note that there will be following social and economic consequences. In dealing with this health crisis and looming social and economic crisis, we seriously need the use of evidences for managing limited resources and responding effectively.
If you have any comments or suggestions, write to hka@theananda.org