Divya499/ReliabilityPulse
1
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 