From a11f39e7fcd68c8ac49e3e8f4cd2eb468846c80e Mon Sep 17 00:00:00 2001 From: jvivian Date: Sun, 9 Jun 2024 19:17:31 -0700 Subject: [PATCH] HotFix for factor analysis --- .../streamlit/pages/0_Dynamic_Factor_Model.py | 14 ++++++++++++-- covid19_drdfm/streamlit/pages/1_Factor_Analysis.py | 8 +++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/covid19_drdfm/streamlit/pages/0_Dynamic_Factor_Model.py b/covid19_drdfm/streamlit/pages/0_Dynamic_Factor_Model.py index 4752982..9912832 100644 --- a/covid19_drdfm/streamlit/pages/0_Dynamic_Factor_Model.py +++ b/covid19_drdfm/streamlit/pages/0_Dynamic_Factor_Model.py @@ -152,7 +152,7 @@ def additional_params(): if not out_dir: st.warning("Specify output directory (in sidebar) to continue") st.stop() - return global_multiplier, out_dir + return global_multiplier, Path(out_dir) def run_model(ad, out_dir, batch, global_multiplier) -> ModelRunner: @@ -175,4 +175,14 @@ def run_model(ad, out_dir, batch, global_multiplier) -> ModelRunner: batch = None if ad.obs.empty else ad.obs.columns[0] dfm = run_model(ad, out_dir, batch, global_multiplier) st.balloons() -st.stop() + +filt_paths = [subdir / "factors.csv" for subdir in out_dir.iterdir() if (subdir / "factors.csv").exists()] +dfs = [pd.read_csv(x) for x in filt_paths] +try: + filt_df = pd.concat([x for x in dfs if ~x.empty]).set_index("Time") + filt_df.to_csv(out_dir / "factors.csv") + st.dataframe(filt_df) + dfm.ad.write(out_dir / "data.h5ad") + st.balloons() +except ValueError: + st.error(f"No runs succeeded!! Check failures.txt in {out_dir}") diff --git a/covid19_drdfm/streamlit/pages/1_Factor_Analysis.py b/covid19_drdfm/streamlit/pages/1_Factor_Analysis.py index 2101e55..f569161 100644 --- a/covid19_drdfm/streamlit/pages/1_Factor_Analysis.py +++ b/covid19_drdfm/streamlit/pages/1_Factor_Analysis.py @@ -32,7 +32,7 @@ def normalize(df): center_title("Factor Analysis") # Read in data -raw = get_df() +# raw = get_df() # TEST_DIR = Path('covid19_drdfm/data/example-output/') # Parameter for results @@ -72,8 +72,10 @@ def normalize(df): # Normalize original data for state / valid variables -new = normalize(raw[raw.State == state][cols]) -# st.dataframe(new) +ad = ann.read_h5ad(res_dir / "data.h5ad") +new = ad.to_df().reset_index() +new["State"] = ad.obs["State"].to_list() + # Normalize factors and add to new dataframe if st.sidebar.checkbox("Invert Factor"):