Source code for cowidev.hosp.sources.singapore
import io
import requests
import pandas as pd
METADATA = {
"source_url_flow": "https://data.gov.sg/api/action/package_show?id=covid-19-hospital-admissions",
"source_url_ref": "https://covidsitrep.moh.gov.sg/; https://data.gov.sg/dataset/covid-19-hospital-admissions",
"source_name": "Ministry of Health",
"entity": "Singapore",
}
[docs]def import_flow():
metadata = requests.get(METADATA["source_url_flow"]).json()
for resource in metadata["result"]["resources"]:
if resource["name"] == "New COVID-19 Hospital Admissions":
response = requests.get(resource["url"])
hosp_flow = pd.read_csv(io.StringIO(response.content.decode())).sort_values("date")
if resource["name"] == "New COVID-19 ICU Admissions":
response = requests.get(resource["url"])
icu_flow = pd.read_csv(io.StringIO(response.content.decode())).sort_values("date")
hosp_flow["new_hospital_admissions"] = hosp_flow.new_hospital_admissions.rolling(7).sum()
icu_flow["new_icu_admissions"] = icu_flow.new_icu_admissions.rolling(7).sum()
return hosp_flow, icu_flow
[docs]def main():
hosp_flow, icu_flow = import_flow()
df = (
hosp_flow.merge(icu_flow, on="date", how="outer", validate="one_to_one")
.melt("date", var_name="indicator")
.dropna(subset=["value"])
)
df["indicator"] = df.indicator.replace(
{
"new_hospital_admissions": "Weekly new hospital admissions",
"new_icu_admissions": "Weekly new ICU admissions",
}
)
df["entity"] = METADATA["entity"]
df = df.sort_values(["indicator", "date"])
return df, METADATA
if __name__ == "__main__":
main()