From bd6c8f663eb4a06514c50c9b2fa6b43eff0e1319 Mon Sep 17 00:00:00 2001 From: Tom Date: Wed, 5 Nov 2025 13:46:10 +0000 Subject: [PATCH] Use country data for filter if available --- vertex/getREDCapData.py | 9 ++++++--- vertex/layout/filters.py | 4 +++- vertex/map.py | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/vertex/getREDCapData.py b/vertex/getREDCapData.py index 9798546..129e5f3 100644 --- a/vertex/getREDCapData.py +++ b/vertex/getREDCapData.py @@ -40,7 +40,7 @@ def get_records(redcap_url, redcap_api_key, data_access_groups=None, user_assign } response = requests.post(redcap_url, data=conex) logger.debug("HTTP Status: " + str(response.status_code)) - df = pd.read_csv(io.StringIO(response.text), keep_default_na=False) + df = pd.read_csv(io.StringIO(response.text), dtype={"subjid": "str"}, keep_default_na=False) if data_access_groups is not None: ind = df["redcap_data_access_group"].isin(data_access_groups) df = df.loc[ind].reset_index(drop=True) @@ -70,7 +70,7 @@ def get_records(redcap_url, redcap_api_key, data_access_groups=None, user_assign } try: response = requests.post(redcap_url, data=conex) - df_new = pd.read_csv(io.StringIO(response.text), keep_default_na=False) + df_new = pd.read_csv(io.StringIO(response.text), dtype={"subjid": "str"}, keep_default_na=False) df_new["redcap_data_access_group"] = dag df_list.append(df_new) logger.debug(f"Data access group ID: {dag}, HTTP Status: {response.status_code}") @@ -721,7 +721,10 @@ def get_redcap_data(redcap_url, redcap_api_key, data_access_groups=None, user_as df_map, new_dictionary, quality_report = get_df_map(data, new_dictionary) df_forms_dict = get_df_forms(data, new_dictionary) - if country_mapping is None: + if "demog_country" in dictionary["field_name"].values: + countries = pd.read_csv("assets/countries.csv", encoding="latin-1") + df_map["country_iso"] = df_map["demog_country"].replace(dict(zip(countries["Country"], countries["Code"]))) + elif country_mapping is None: dag = data[["subjid", "redcap_data_access_group"]].drop_duplicates() dag = dag.rename(columns={"redcap_data_access_group": "site"}) dag["country_iso"] = dag["site"].apply(lambda x: x.split("-")[1]) diff --git a/vertex/layout/filters.py b/vertex/layout/filters.py index bdd6eba..de23671 100644 --- a/vertex/layout/filters.py +++ b/vertex/layout/filters.py @@ -322,7 +322,9 @@ def get_filter_options(df_map): outcome_options = [{"label": v, "value": v} for v in df_map["filters_outcome"].dropna().unique()] - country_options = [{"label": c, "value": c} for c in sorted(df_map["filters_country"].dropna().unique())] + countries = pd.read_csv("assets/countries.csv", encoding="latin-1") + country_dict = dict(zip(countries["Code"], countries["Country"])) + country_options = [{"label": country_dict.get(c, None), "value": c} for c in df_map["filters_country"].dropna().unique()] sex_options = [{"label": c, "value": c} for c in sorted(df_map["filters_sex"].dropna().unique())] diff --git a/vertex/map.py b/vertex/map.py index 25b77a2..f4c5665 100644 --- a/vertex/map.py +++ b/vertex/map.py @@ -151,6 +151,6 @@ def filter_df_map(df_map, sex_value, age_value, country_value, admdate_value, ad & ((df_map["filters_admdate"] >= admdate_min) | df_map["filters_admdate"].isna()) & ((df_map["filters_admdate"] <= admdate_max) | df_map["filters_admdate"].isna()) & (df_map["filters_outcome"].isin(outcome_value)) - & (df_map["filters_country"].isin(country_value)) + & (df_map["filters_country"].isin(country_value) | df_map["filters_country"].isna()) ] return df_map_filtered.reset_index(drop=True)