DIVYANSHI SINGH
Final Precision Deployment: Stable UI + Git LFS
27a3018
Raw
History Blame Contribute Delete
2.87 kB
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import os
import sys
# Add the project root to sys.path to import path_utils
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import path_utils
def perform_eda():
# Load data
raw_data_path = path_utils.get_raw_data_path('ai4i2020.csv')
if not os.path.exists(raw_data_path):
print(f"Error: Dataset not found at {raw_data_path}")
return
df = pd.read_csv(raw_data_path)
print("Dataset loaded successfully!")
print(f"Shape: {df.shape}")
print(df.info())
# 1. Failure Distribution
plt.figure(figsize=(8, 6))
sns.countplot(x='Machine failure', data=df, palette='viridis')
plt.title('Machine Failure Distribution (Target)')
plt.savefig(path_utils.get_output_path('failure_distribution.png'))
plt.close()
# 2. Failure Rate by Product Type
plt.figure(figsize=(8, 6))
sns.barplot(x='Type', y='Machine failure', data=df, palette='magma')
plt.title('Failure Rate by Product Type (L/M/H)')
plt.savefig(path_utils.get_output_path('failure_rate_by_type.png'))
plt.close()
# 3. Numeric Distributions
numeric_cols = ['Air temperature [K]', 'Process temperature [K]',
'Rotational speed [rpm]', 'Torque [Nm]', 'Tool wear [min]']
plt.figure(figsize=(15, 10))
for i, col in enumerate(numeric_cols, 1):
plt.subplot(2, 3, i)
sns.histplot(df[col], kde=True, color='teal')
plt.title(f'Distribution of {col}')
plt.tight_layout()
plt.savefig(path_utils.get_output_path('numeric_distributions.png'))
plt.close()
# 4. Box plots: compare sensor readings for failure vs non-failure
plt.figure(figsize=(15, 10))
for i, col in enumerate(numeric_cols, 1):
plt.subplot(2, 3, i)
sns.boxplot(x='Machine failure', y=col, data=df, palette='Set2')
plt.title(f'{col} vs Machine Failure')
plt.tight_layout()
plt.savefig(path_utils.get_output_path('sensor_boxplots.png'))
plt.close()
# 5. Correlation Heatmap
plt.figure(figsize=(12, 10))
sns.heatmap(df[numeric_cols + ['Machine failure']].corr(), annot=True, cmap='coolwarm', fmt='.2f')
plt.title('Correlation Heatmap')
plt.savefig(path_utils.get_output_path('correlation_heatmap.png'))
plt.close()
# 6. Sub-label Analysis (Failure Modes)
sub_labels = ['TWF', 'HDF', 'PWF', 'OSF', 'RNF']
plt.figure(figsize=(10, 6))
df[sub_labels].sum().sort_values(ascending=False).plot(kind='bar', color='salmon')
plt.title('Count of Each Failure Mode (Sub-labels)')
plt.ylabel('Count')
plt.savefig(path_utils.get_output_path('sub_label_counts.png'))
plt.close()
print("EDA completed and plots saved in 'outputs/' directory.")
if __name__ == "__main__":
perform_eda()