CoolFace
Apppublic

AhmedKhaled1122/Data-Analysis-and-Machine-Learning

sourceHugging Faceupdated 11mo agoView on Hugging Face
0likes
preprocessing_gui.py140 linesDownload Raw Back to root
1import numpy as np2import pandas as pd3import streamlit as st4import preprocessing as pp5from streamlit_sortables import sort_items6 7def preprocessing_page():8    st.set_page_config(page_title="Preprocessing", layout="wide")9    st.title("Preprocessing")10 11def sort_values(df, col):12        sort_item = sort_items(df[col].unique().tolist(), direction="vertical", key=f'sort_item_{col}')13        return sort_item14 15def encoding(df):16    st.header("Encoding")17    non_numerical_columns = df.select_dtypes(exclude=['number']).columns18    columns = st.multiselect('Select Columns for Encoding', options=non_numerical_columns, default=non_numerical_columns)19 20    for col in columns:21        st.markdown(f"### Column: {col} -> unique values {df[col].nunique()}")22        encode = st.selectbox('Select Encoder', options=['label encoder', 'ordinal encoder', 'one hot encoder', 'frequency encoder'], key=f'encoder_{col}')23 24        if encode == 'label encoder':25            df = pp.label_encoder(df, col)26            st.success(f'Label Encoding applied successfully to column: {col}')27 28        elif encode == 'ordinal encoder':29            sort = sort_values(df, col)30            df = pp.ordinal_encoder(df, col, sort)31            st.success(f'Ordinal Encoding applied successfully to column: {col}')32 33 34        elif encode == 'one hot encoder':35            df = pp.one_hot_encoder(df, col)36            st.success(f'One Hot Encoding applied successfully to column: {col}')37 38        else:39            df = pp.frequency_encoder(df, col)40            st.success(f'Frequency Encoding applied successfully to column: {col}')41 42    st.dataframe(df, height=213)43    st.markdown(f"**Shape:** {df.shape[0]} rows × {df.shape[1]} columns")44 45    return df46 47 48def show_skewness(df):49    continuous_columns = pp.detect_skewness(df, 0)50    continuous_columns_copy = df[continuous_columns].copy()51 52    st.header('Handle Skewness')53 54    cols = st.columns(4)55    for i, col in enumerate(continuous_columns):56        with cols[i%4]:57            fig = pp.histogram(df, col)58            st.pyplot(fig)59 60    continuous_columns_skewness = pp.detect_skewness(df, 1)61 62    select_columns = st.multiselect('Select Columns To Handle Skewness', options=continuous_columns, default=continuous_columns_skewness)63    select_method = st.selectbox('Select transformation method', options=['Log Transformation', 'Box Cox Transformation', 'Yeojohnson Transformation'])64    if select_method == 'Log Transformation':65        for col in select_columns:66            df = pp.log_transform(df, col)67    elif select_method == 'Box Cox Transformation':68        for col in select_columns:69            if df[col].min() > 0:70                df = pp.box_cox_transform(df, col)71    else:72        for col in select_columns:73            df = pp.yeojohnson_transform(df, col)74        75    st.success(f'Skewness handling completed by {select_method} for {select_columns}')76 77    col1, col2 = st.columns(2)78    for col in select_columns:79        with col1:80            st.subheader('Before Skewness Handling')81            fig = pp.histogram(continuous_columns_copy, col)82            st.pyplot(fig)83 84        with col2:85            st.subheader('After Skewness Handling')86            fig = pp.histogram(df, col)87            st.pyplot(fig)88 89    return df90 91def scaler(df):92    st.subheader('Feature Scaling')93    numeric_cols = df.select_dtypes(include=['number']).columns94    col1, col2 = st.columns(2)95    with col1:96        columns = st.multiselect('Select columns to scale', options=numeric_cols, default=numeric_cols)97    with col2:98        method = scale_method = st.selectbox("Select scaling method", options=['Normalization (MinMaxScaler)', 'Standardization (StandardScaler)'])99    100    for col in columns:101        if method == 'Normalization (MinMaxScaler)':102            pp.min_max_scaler(df, col)103        else:104            pp.standerd_scaler(df, col)105 106    st.success(f'Scaler handling completed by {method} for {columns}')107    st.dataframe(df, height=213)108    st.markdown(f"**Shape:** {df.shape[0]} rows × {df.shape[1]} columns")109    110    return df111 112def correlation(df):113    st.header('Correlations')114    target_column = st.selectbox('Select Target Column', options=df.select_dtypes(include='number').columns)115    corrs = {}116    for col in df.select_dtypes(include='number').columns:117 118        corrs [col] = pp.detect_corr(df, target_column, col)119 120    corrs = pd.Series(corrs).sort_values(ascending=True)121    cols = st.columns(3)122 123    st.subheader('Correlations per columns')124    chunks = [corrs.iloc[i::3] for i in range(3)]125 126    cols = st.columns(3)127 128    for col, chunk in zip(cols, chunks):129        col.table(chunk.to_frame(name="Correlations Per Column"))130    131    default_columns = corrs[corrs.abs() < 0.1].index.tolist() + df.select_dtypes(exclude='number').columns.tolist()132    columns_to_drop = st.multiselect("Drop Unnecessary Columns And Low Correlation With Target", options=df.columns, default=default_columns)133 134    df = pp.delete_low_corr(df, columns_to_drop)135 136    st.success('successfully Droped Unnecessary Columns And Low Correlation With Target')137    st.dataframe(df, height=213)138    st.markdown(f"**Shape:** {df.shape[0]} rows × {df.shape[1]} columns")139    return df140