Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import anndata as ad | |
| import pandas as pd | |
| from pathlib import Path | |
| import io | |
| # Page config | |
| st.set_page_config(page_title="AnnData Explorer", layout="wide") | |
| st.title("AnnData Explorer – X, obs, var") | |
| # Sidebar: file upload | |
| uploaded = st.sidebar.file_uploader("Upload .h5ad", type=["h5ad"]) | |
| def load_adata(path_or_bytes): | |
| if isinstance(path_or_bytes, (str, Path)): | |
| return ad.read_h5ad(path_or_bytes) | |
| # UploadedFile | |
| return ad.read_h5ad(io.BytesIO(path_or_bytes.read())) | |
| if uploaded is None: | |
| st.info("Please upload an .h5ad file from the sidebar.") | |
| st.stop() | |
| adata = load_adata(uploaded) | |
| # Sidebar: dimension info | |
| st.sidebar.write("### Dataset info") | |
| st.sidebar.write(f"Cells: {adata.n_obs}") | |
| st.sidebar.write(f"Features: {adata.n_vars}") | |
| # Main area: three tables | |
| tab1, tab2, tab3 = st.tabs(["X", "obs", "var"]) | |
| with tab1: | |
| st.subheader("AnnData.X") | |
| st.dataframe( | |
| pd.DataFrame( | |
| adata.X.todense() if hasattr(adata.X, "todense") else adata.X, | |
| index=adata.obs_names, | |
| columns=adata.var_names, | |
| ), | |
| use_container_width=True, | |
| ) | |
| with tab2: | |
| st.subheader("AnnData.obs") | |
| st.dataframe(adata.obs, use_container_width=True) | |
| with tab3: | |
| st.subheader("AnnData.var") | |
| st.dataframe(adata.var, use_container_width=True) |