Team Ai
Apppublic

StudentOfDS/ExploratoryDataAnalysis-EDA-UsingStreamlit

sourceHugging Faceupdated 3y agoView on Hugging Face
0likes
EDA_On_Streamlit_Main.py253 linesDownload Raw Back to root
1# Importing necessary libraries2import streamlit as st3import pandas as pd4import plotly.express as px5import seaborn as sns6import matplotlib.pyplot as plt7import numpy as np8 9# Function to load dataset10def load_dataset(file_path, file_format):11    """12    Load dataset from file path.13 14    Parameters:15        file_path (str): Path to the dataset file.16        file_format (str): Format of the dataset file ('csv' or 'excel').17 18    Returns:19        DataFrame: Loaded dataset.20    """21    if file_format == 'csv':22        df = pd.read_csv(file_path)23    elif file_format == 'excel':24        df = pd.read_excel(file_path)25    return df26 27# Function to display dataset information28def display_dataset_info(df):29    """30    Display basic information about the dataset.31 32    Parameters:33        df (DataFrame): DataFrame containing the dataset.34    """35    st.subheader("Dataset Information")36    st.write("Number of Rows:", df.shape[0])37    st.write("Number of Columns:", df.shape[1])38    st.dataframe(df.head())39 40# Function to handle missing values41def handle_missing_values(df):42    """43    Handle missing values in the dataset.44 45    Parameters:46        df (DataFrame): DataFrame containing the dataset.47    """48    st.subheader("Missing Values")49    missing_values = df.isnull().sum()50    if missing_values.sum() == 0:51        st.write("No missing values found in the dataset.")52    else:53        st.write(missing_values)54 55# Function to analyze outliers56def analyze_outliers(df):57    """58    Analyze outliers in numerical columns of the dataset.59 60    Parameters:61        df (DataFrame): DataFrame containing the dataset.62    """63    st.subheader("Outlier Analysis")64    numerical_columns = df.select_dtypes(include=np.number).columns65    if len(numerical_columns) == 0:66        st.write("No numerical columns found in the dataset.")67    else:68        outliers = pd.DataFrame(index=numerical_columns, columns=['Count of Outliers'])69        for col in numerical_columns:70            Q1 = df[col].quantile(0.25)71            Q3 = df[col].quantile(0.75)72            IQR = Q3 - Q173            lower_bound = Q1 - 1.5 * IQR74            upper_bound = Q3 + 1.5 * IQR75            outliers.loc[col, 'Count of Outliers'] = df[(df[col] < lower_bound) | (df[col] > upper_bound)].shape[0]76        st.write(outliers)77 78# Function to visualize data distributions79def visualize_data_distribution(df):80    """81    Visualize data distributions of numerical columns in the dataset.82 83    Parameters:84        df (DataFrame): DataFrame containing the dataset.85    """86    st.subheader("Data Distribution")87    numerical_columns = df.select_dtypes(include=np.number).columns88    if len(numerical_columns) == 0:89        st.write("No numerical columns found in the dataset.")90    else:91        selected_columns = st.multiselect("Select columns for visualization:", numerical_columns)92        for col in selected_columns:93            fig = px.histogram(df, x=col, title=f'Distribution of {col}')94            fig.update_layout(margin=dict(l=0, r=0, t=0, b=0))  # Apply tight layout95            st.plotly_chart(fig)96 97# Function to visualize count plots of categorical columns98def visualize_count_plots(df):99    """100    Visualize count plots of categorical columns in the dataset.101 102    Parameters:103        df (DataFrame): DataFrame containing the dataset.104    """105    st.subheader("Count Plots of Categorical Columns")106    categorical_columns = df.select_dtypes(include='object').columns107    if len(categorical_columns) == 0:108        st.write("No categorical columns found in the dataset.")109    else:110        selected_columns = st.multiselect("Select columns for visualization:", categorical_columns)111        for col in selected_columns:112            fig, ax = plt.subplots()113            sns.countplot(data=df, x=col, ax=ax)114            plt.xticks(rotation=45)115            plt.tight_layout()  # Apply tight layout116            st.pyplot(fig)117 118# Function to display descriptive analysis119def display_descriptive_analysis(df):120    """121    Display descriptive analysis of the dataset.122 123    Parameters:124        df (DataFrame): DataFrame containing the dataset.125    """126    st.subheader("Descriptive Analysis")127    st.write(df.describe())128 129# Function to visualize box plots130def visualize_box_plots(df):131    """132    Visualize box plots of numerical columns in the dataset.133 134    Parameters:135        df (DataFrame): DataFrame containing the dataset.136    """137    st.subheader("Box Plots")138    numerical_columns = df.select_dtypes(include=np.number).columns139    if len(numerical_columns) == 0:140        st.write("No numerical columns found in the dataset.")141    else:142        selected_columns = st.multiselect("Select columns for visualization:", numerical_columns)143        for col in selected_columns:144            fig = px.box(df, y=col, title=f'Box Plot of {col}')145            fig.update_layout(margin=dict(l=0, r=0, t=0, b=0))  # Apply tight layout146            st.plotly_chart(fig)147 148# Function to visualize scatter plots149def visualize_scatter_plots(df):150    """151    Visualize scatter plots of numerical columns in the dataset.152 153    Parameters:154        df (DataFrame): DataFrame containing the dataset.155    """156    st.subheader("Scatter Plots")157    numerical_columns = df.select_dtypes(include=np.number).columns158    if len(numerical_columns) < 2:159        st.write("Insufficient numerical columns for scatter plots.")160    else:161        x_col = st.selectbox("Select X-axis column:", numerical_columns)162        y_col = st.selectbox("Select Y-axis column:", numerical_columns)163        fig = px.scatter(df, x=x_col, y=y_col, title="Scatter Plot")164        fig.update_layout(margin=dict(l=0, r=0, t=0, b=0))  # Apply tight layout165        st.plotly_chart(fig)166 167# Function to visualize pair plots168def visualize_pair_plots(df):169    """170    Visualize pair plots of numerical columns in the dataset.171 172    Parameters:173        df (DataFrame): DataFrame containing the dataset.174    """175    st.subheader("Pair Plots")176    numerical_columns = df.select_dtypes(include=np.number).columns177    if len(numerical_columns) < 2:178        st.write("Insufficient numerical columns for pair plots.")179    else:180        fig = px.scatter_matrix(df, dimensions=numerical_columns, title="Pair Plot")181        fig.update_layout(margin=dict(l=0, r=0, t=0, b=0))  # Apply tight layout182        st.plotly_chart(fig)183 184# Function to visualize correlation heatmap185def visualize_correlation_heatmap(df):186    """187    Visualize correlation heatmap of numerical columns in the dataset.188 189    Parameters:190        df (DataFrame): DataFrame containing the dataset.191    """192    st.subheader("Correlation Heatmap")193    fig, ax = plt.subplots()194    sns.heatmap(df.corr(), annot=True, cmap='coolwarm', ax=ax)195    plt.tight_layout()  # Apply tight layout196    st.pyplot(fig)197 198# Main function to run the EDA tool199def main():200    # Page configuration201    st.set_page_config(layout="wide", page_icon="๐Ÿ“Š", page_title="EDA Tool")202 203    # Title and description204    st.title("Exploratory Data Analysis Tool")205    st.write("Upload your dataset to explore its characteristics and distributions.")206 207    # Sidebar for file upload and EDA options208    st.sidebar.title("Options")209    file_path = st.sidebar.file_uploader("Upload Dataset", type=['csv', 'xlsx'])210    if file_path:211        df = load_dataset(file_path, file_format=file_path.name.split('.')[-1])212        display_dataset_info(df)213 214        st.sidebar.subheader("Exploratory Data Analysis")215        options = st.sidebar.multiselect("Choose EDA tasks:", 216                                         ["Display Dataset Info", "Handle Missing Values", "Analyze Outliers", 217                                          "Visualize Data Distribution", "Visualize Count Plots", "Display Descriptive Analysis",218                                          "Visualize Box Plots", "Visualize Scatter Plots", "Visualize Pair Plots", "Visualize Correlation Heatmap"])219 220        if "Display Dataset Info" in options:221            display_dataset_info(df)222        223        if "Handle Missing Values" in options:224            handle_missing_values(df)225        226        if "Analyze Outliers" in options:227            analyze_outliers(df)228        229        if "Visualize Data Distribution" in options:230            visualize_data_distribution(df)231        232        if "Visualize Count Plots" in options:233            visualize_count_plots(df)234        235        if "Display Descriptive Analysis" in options:236            display_descriptive_analysis(df)237        238        if "Visualize Box Plots" in options:239            visualize_box_plots(df)240        241        if "Visualize Scatter Plots" in options:242            visualize_scatter_plots(df)243        244        if "Visualize Pair Plots" in options:245            visualize_pair_plots(df)246        247        if "Visualize Correlation Heatmap" in options:248            visualize_correlation_heatmap(df)249 250# Run the main function251if __name__ == "__main__":252    main()253