From 2371bcdd82c0d0414bd0d5d7761d517f06ab556e Mon Sep 17 00:00:00 2001 From: jvivian Date: Sun, 21 Jul 2024 19:11:21 -0700 Subject: [PATCH] Resolve factor analysis set collection now that `data.h5ad` isn't output Fixes #96 --- dfmdash/streamlit/pages/1_Factor_Analysis.py | 25 +++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/dfmdash/streamlit/pages/1_Factor_Analysis.py b/dfmdash/streamlit/pages/1_Factor_Analysis.py index b74e1d3..13c5dc0 100644 --- a/dfmdash/streamlit/pages/1_Factor_Analysis.py +++ b/dfmdash/streamlit/pages/1_Factor_Analysis.py @@ -35,6 +35,7 @@ def normalize(df): # raw = get_df() # TEST_DIR = Path('dfmdash/data/example-output/') + # Parameter for results def get_factors(res_dir): factor_path = res_dir / "factors.csv" @@ -47,6 +48,26 @@ def get_factors(res_dir): return df +def parse_factor_blocks(file_path: Path) -> list[str]: + factor_blocks = [] + start_collecting = False + + with file_path.open("r") as file: + for line in file: + if "order" in line: + start_collecting = True + continue + + if start_collecting: + if line.strip(): + factor_name = line.split(",")[0].strip() + factor_blocks.append(factor_name) + else: + break + + return factor_blocks + + res_dir = Path(st.text_input("Path to results", value=EX_PATH)) if not res_dir: st.warning("Please provide and hit ") @@ -67,11 +88,9 @@ def get_factors(res_dir): # Normalize original data for state / valid variables ad = ann.read_h5ad(res_dir / "data.h5ad") -factor_map = ad.var["factor"].to_frame() -factor_set = factor_map["factor"].unique().to_list() + [x for x in df.columns if "Global" in x] +factor_set = parse_factor_blocks(res_dir / state / "model.csv") + [x for x in df.columns if "Global" in x] factor = st.sidebar.selectbox("Factor", factor_set) - # Normalize factors and add to new dataframe if st.sidebar.checkbox("Invert Factor"): df[factor] = df[factor] * -1