CoolFace
Apppublic

Divya499/ReliabilityPulse

sourceHugging Faceupdated 6mo agoView on Hugging Face
1likes
01_eda.py81 linesDownload Raw Back to pipeline
1import pandas as pd2import numpy as np3import matplotlib.pyplot as plt4import seaborn as sns5import os6import sys7 8# Add the project root to sys.path to import path_utils9sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))10import path_utils11 12def perform_eda():13    # Load data14    raw_data_path = path_utils.get_raw_data_path('ai4i2020.csv')15    if not os.path.exists(raw_data_path):16        print(f"Error: Dataset not found at {raw_data_path}")17        return18 19    df = pd.read_csv(raw_data_path)20    print("Dataset loaded successfully!")21    print(f"Shape: {df.shape}")22    print(df.info())23 24    # 1. Failure Distribution25    plt.figure(figsize=(8, 6))26    sns.countplot(x='Machine failure', data=df, palette='viridis')27    plt.title('Machine Failure Distribution (Target)')28    plt.savefig(path_utils.get_output_path('failure_distribution.png'))29    plt.close()30 31    # 2. Failure Rate by Product Type32    plt.figure(figsize=(8, 6))33    sns.barplot(x='Type', y='Machine failure', data=df, palette='magma')34    plt.title('Failure Rate by Product Type (L/M/H)')35    plt.savefig(path_utils.get_output_path('failure_rate_by_type.png'))36    plt.close()37 38    # 3. Numeric Distributions39    numeric_cols = ['Air temperature [K]', 'Process temperature [K]', 40                   'Rotational speed [rpm]', 'Torque [Nm]', 'Tool wear [min]']41    42    plt.figure(figsize=(15, 10))43    for i, col in enumerate(numeric_cols, 1):44        plt.subplot(2, 3, i)45        sns.histplot(df[col], kde=True, color='teal')46        plt.title(f'Distribution of {col}')47    plt.tight_layout()48    plt.savefig(path_utils.get_output_path('numeric_distributions.png'))49    plt.close()50 51    # 4. Box plots: compare sensor readings for failure vs non-failure52    plt.figure(figsize=(15, 10))53    for i, col in enumerate(numeric_cols, 1):54        plt.subplot(2, 3, i)55        sns.boxplot(x='Machine failure', y=col, data=df, palette='Set2')56        plt.title(f'{col} vs Machine Failure')57    plt.tight_layout()58    plt.savefig(path_utils.get_output_path('sensor_boxplots.png'))59    plt.close()60 61    # 5. Correlation Heatmap62    plt.figure(figsize=(12, 10))63    sns.heatmap(df[numeric_cols + ['Machine failure']].corr(), annot=True, cmap='coolwarm', fmt='.2f')64    plt.title('Correlation Heatmap')65    plt.savefig(path_utils.get_output_path('correlation_heatmap.png'))66    plt.close()67 68    # 6. Sub-label Analysis (Failure Modes)69    sub_labels = ['TWF', 'HDF', 'PWF', 'OSF', 'RNF']70    plt.figure(figsize=(10, 6))71    df[sub_labels].sum().sort_values(ascending=False).plot(kind='bar', color='salmon')72    plt.title('Count of Each Failure Mode (Sub-labels)')73    plt.ylabel('Count')74    plt.savefig(path_utils.get_output_path('sub_label_counts.png'))75    plt.close()76 77    print("EDA completed and plots saved in 'outputs/' directory.")78 79if __name__ == "__main__":80    perform_eda()81