Source code for cowidev.hosp.sources.denmark

import io
import os
import requests
import tempfile
import zipfile

import pandas as pd

from cowidev.utils.web.scraping import get_soup

METADATA = {
    "source_url_hosp": "https://covid19.ssi.dk/overvagningsdata/download-fil-med-overvaagningdata",
    "source_url_icu": "https://github.com/mok0/covid19-data-denmark/raw/master/covid19-data-denmark.csv",
    "source_url_ref": "https://covid19.ssi.dk/overvagningsdata/download-fil-med-overvaagningdata, https://github.com/mok0/covid19-data-denmark",
    "source_name": "Statens Serum Institut, covid19-data-denmark on GitHub",
    "entity": "Denmark",
}


[docs]def read() -> pd.DataFrame: soup = get_soup(METADATA["source_url_hosp"]) zip_url = soup.find("accordions").find("a").get("href") with tempfile.TemporaryDirectory() as tf: r = requests.get(zip_url) z = zipfile.ZipFile(io.BytesIO(r.content)) z.extractall(tf) flow = pd.read_csv( os.path.join(tf, "Regionalt_DB", "06_nye_indlaeggelser_pr_region_pr_dag.csv"), encoding="ISO 8859-1", sep=";", usecols=["Dato", "Indlæggelser"], ) stock = pd.read_csv( os.path.join(tf, "Regionalt_DB", "15_indlagte_pr_region_pr_dag.csv"), encoding="ISO 8859-1", sep=";", usecols=["Dato", "Indlagte"], ) return flow, stock
[docs]def main() -> pd.DataFrame: flow, stock = read() flow = flow.rename(columns={"Dato": "date"}).groupby("date", as_index=False).sum().sort_values("date").head(-1) flow["Indlæggelser"] = flow.Indlæggelser.rolling(7).sum() stock = stock.rename(columns={"Dato": "date"}).groupby("date", as_index=False).sum() df = pd.merge(flow, stock, how="outer", on="date", validate="one_to_one") icu = pd.read_csv(METADATA["source_url_icu"], usecols=["date", "icu_now"]) df = pd.merge(df, icu, on="date", how="outer", validate="one_to_one") df = df.melt("date", var_name="indicator").dropna(subset=["value"]).sort_values(["indicator", "date"]) df["indicator"] = df.indicator.replace( { "Indlæggelser": "Weekly new hospital admissions", "Indlagte": "Daily hospital occupancy", "icu_now": "Daily ICU occupancy", }, ) df["entity"] = METADATA["entity"] return df, METADATA
if __name__ == "__main__": main()