"""DataTools Find Unusual Values — stub page.""" from __future__ import annotations import sys from pathlib import Path import streamlit as st _project_root = Path(__file__).resolve().parent.parent.parent.parent if str(_project_root) not in sys.path: sys.path.insert(0, str(_project_root)) from src.gui.components import ( back_to_home_link, render_sticky_footer, render_tool_header, hide_streamlit_chrome, require_feature_or_render_upgrade, ) from src.i18n import t from src.license import FeatureFlag hide_streamlit_chrome() render_sticky_footer() back_to_home_link() from src.audit import log_page_open log_page_open("6_Outlier_Detector") require_feature_or_render_upgrade(FeatureFlag.OUTLIER_DETECTOR) # --------------------------------------------------------------------------- # Header # --------------------------------------------------------------------------- render_tool_header("06_outlier_detector") st.info("This tool is under development.") # --------------------------------------------------------------------------- # What this tool will do # --------------------------------------------------------------------------- st.markdown(""" **Features:** - Z-score detection (configurable threshold) - IQR (interquartile range) detection - MAD (median absolute deviation) detection - Domain-rule violations (e.g., age < 0, price > $1M) - Visual outlier highlighting in data preview - Handling: flag only, remove, cap/winsorize to bounds """) st.divider() # --------------------------------------------------------------------------- # File upload (functional) # --------------------------------------------------------------------------- uploaded = st.file_uploader( "Import CSV or Excel file", type=["csv", "tsv", "xlsx", "xls"], help="Import a file to preview. Processing is not yet available.", key="outlier_file_upload", ) if uploaded is not None: import pandas as pd try: if uploaded.name.endswith((".xlsx", ".xls")): df = pd.read_excel(uploaded) else: df = pd.read_csv(uploaded) st.subheader(f"Preview: {uploaded.name}") st.caption(f"{len(df)} rows, {len(df.columns)} columns") st.dataframe(df.head(10), width="stretch") except Exception as e: from src.core.errors import format_for_user st.error( f"**Could not read `{uploaded.name}`**\n\n" f"```\n{format_for_user(e)}\n```" ) # --------------------------------------------------------------------------- # Placeholder options # --------------------------------------------------------------------------- st.subheader("Detection Method") st.selectbox("Method", ["Z-Score", "IQR (Interquartile Range)", "MAD (Median Absolute Deviation)"], disabled=True) st.slider("Z-Score threshold", 1.0, 5.0, 3.0, 0.1, disabled=True) st.slider("IQR multiplier", 1.0, 3.0, 1.5, 0.1, disabled=True) st.subheader("Handling") st.selectbox("Action", ["Flag only (add column)", "Remove outlier rows", "Cap / Winsorize to bounds"], disabled=True) st.divider() st.button("Detect Outliers", type="primary", width="stretch", disabled=True)