├── environmental_mcda_synthetic_data.xlsx ├── File └── README.md /environmental_mcda_synthetic_data.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nelvinebi/Environmental-Impact-Assessment-Using-Multi-Criteria-Decision-Analysis-MCDA-/HEAD/environmental_mcda_synthetic_data.xlsx -------------------------------------------------------------------------------- /File: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import pandas as pd 3 | import matplotlib.pyplot as plt 4 | 5 | # Step 1: Define synthetic alternatives and environmental criteria 6 | projects = ['Project A', 'Project B', 'Project C', 'Project D', 'Project E'] 7 | 8 | # Criteria: lower is better for all 9 | data = { 10 | 'Air Pollution (µg/m³)': [35, 50, 20, 45, 30], 11 | 'Water Consumption (m³/day)': [500, 700, 300, 600, 400], 12 | 'Noise Level (dB)': [65, 70, 55, 60, 50], 13 | 'Land Use (hectares)': [25, 35, 20, 30, 22], 14 | 'Biodiversity Loss Index': [0.6, 0.8, 0.3, 0.5, 0.4] # scale 0 to 1 15 | } 16 | 17 | df = pd.DataFrame(data, index=projects) 18 | 19 | # Step 2: Define criteria weights (total = 1) 20 | weights = { 21 | 'Air Pollution (µg/m³)': 0.25, 22 | 'Water Consumption (m³/day)': 0.20, 23 | 'Noise Level (dB)': 0.15, 24 | 'Land Use (hectares)': 0.20, 25 | 'Biodiversity Loss Index': 0.20 26 | } 27 | 28 | # Step 3: Normalize the data (min-max normalization, cost-type criteria) 29 | normalized_df = (df.max() - df) / (df.max() - df.min()) 30 | 31 | # Step 4: Apply weights 32 | for criterion in normalized_df.columns: 33 | normalized_df[criterion] *= weights[criterion] 34 | 35 | # Step 5: Calculate total scores (MCDA score) 36 | normalized_df['MCDA Score'] = normalized_df.sum(axis=1) 37 | normalized_df['Rank'] = normalized_df['MCDA Score'].rank(ascending=False).astype(int) 38 | 39 | # Step 6: Display results 40 | print("Environmental Impact Assessment Ranking:\n") 41 | print(normalized_df[['MCDA Score', 'Rank']].sort_values(by='MCDA Score', ascending=False)) 42 | 43 | # Step 7: Visualization 44 | plt.figure(figsize=(8, 5)) 45 | normalized_df['MCDA Score'].sort_values().plot(kind='barh', color='green') 46 | plt.xlabel('MCDA Environmental Suitability Score') 47 | plt.title('Project Ranking Based on Environmental Impact') 48 | plt.grid(axis='x', linestyle='--', alpha=0.7) 49 | plt.tight_layout() 50 | plt.show() 51 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🌿 Environmental Impact Assessment Using Multi-Criteria Decision Analysis (MCDA) 2 | 3 | This project applies Multi-Criteria Decision Analysis (MCDA) to evaluate and rank alternative project sites based on their environmental impact. It uses synthetic data to simulate various environmental factors and employs the Weighted Sum Model (WSM) to score and rank projects. 4 | 5 | ## 📊 Features 6 | 7 | - Synthetic data generation for five hypothetical projects 8 | - Environmental criteria: air pollution, water consumption, noise level, land use, biodiversity loss 9 | - MCDA using the Weighted Sum Model (WSM) 10 | - Criteria weights for flexible priority setting 11 | - Visualization of project rankings using bar charts 12 | - Export of input data to Excel 13 | 14 | --- 15 | 16 | ## 🧪 Methodology 17 | 18 | ### Criteria Used: 19 | - **Air Pollution (µg/m³)** – Lower is better 20 | - **Water Consumption (m³/day)** – Lower is better 21 | - **Noise Level (dB)** – Lower is better 22 | - **Land Use (hectares)** – Lower is better 23 | - **Biodiversity Loss Index** – Lower is better (scale 0 to 1) 24 | 25 | ### Steps: 26 | 1. Create synthetic environmental data for each project 27 | 2. Normalize data using min-max normalization 28 | 3. Apply weights to criteria (default weights sum to 1) 29 | 4. Calculate MCDA scores using the Weighted Sum Model 30 | 5. Rank projects from most to least sustainable 31 | 32 | --- 33 | 34 | ## 🖥️ How to Run 35 | 36 | 1. Clone the repository or download the code. 37 | 2. Install required libraries: 38 | 39 | ```bash 40 | pip install pandas matplotlib 41 | Run the Python script to see rankings and export the synthetic data: 42 | 43 | bash 44 | Copy 45 | Edit 46 | python mcda_assessment.py 47 | 📁 Files 48 | mcda_assessment.py: Python script implementing MCDA 49 | 50 | environmental_mcda_synthetic_data.xlsx: Sample synthetic input data 51 | 52 | README.md: Project overview and documentation 53 | 54 | 📈 Sample Output 55 | Bar chart ranking the projects by environmental suitability, based on weighted criteria scores. 56 | 57 | 🧩 Future Enhancements 58 | Integrate GIS-based real-world data 59 | 60 | Add economic and social impact layers 61 | 62 | Implement other MCDA methods (AHP, TOPSIS) 63 | 64 | Web-based dashboard interface 65 | 66 | 📜 License 67 | This project is open-source and licensed under the MIT License. 68 | 69 | 👤 Author 70 | Agbozu Ebingiye Nelvin 71 | Email: nelvinebingiye@gmail.com 72 | --------------------------------------------------------------------------------