├── WATER_~1.DOC ├── Poster Abstract ├── output (13).png ├── output (14).png ├── output (15).png ├── output (16).png ├── output (17).png ├── output (18).png ├── random_forest_water_quality_model.pkl ├── Very_Poor_WQI_Table.csv ├── Good_WQI_Table.csv ├── Excellent_WQI_Table.csv ├── Poor_WQI_Table.csv ├── README.md ├── explainable_ai_water_quality.py ├── TOPSIS_Ranking_of_Water_Safety.csv ├── CLUSTE~1.CSV ├── Clustered_Water_Quality_Categories.csv ├── Template ├── processed_water_quality_data.csv ├── Water_Quality_ML_Analysis.py ├── Code ├── Water_Quality_Data_with_WQI.csv ├── Water_Quality_Index_Results.csv └── Normalized_Water_Quality_Data.csv /WATER_~1.DOC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Okes2024/Hybrid-Machine-Learning-Framework-for-Water-Quality-Assessment-and-Contamination-Clustering/HEAD/WATER_~1.DOC -------------------------------------------------------------------------------- /Poster Abstract: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Okes2024/Hybrid-Machine-Learning-Framework-for-Water-Quality-Assessment-and-Contamination-Clustering/HEAD/Poster Abstract -------------------------------------------------------------------------------- /output (13).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Okes2024/Hybrid-Machine-Learning-Framework-for-Water-Quality-Assessment-and-Contamination-Clustering/HEAD/output (13).png -------------------------------------------------------------------------------- /output (14).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Okes2024/Hybrid-Machine-Learning-Framework-for-Water-Quality-Assessment-and-Contamination-Clustering/HEAD/output (14).png -------------------------------------------------------------------------------- /output (15).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Okes2024/Hybrid-Machine-Learning-Framework-for-Water-Quality-Assessment-and-Contamination-Clustering/HEAD/output (15).png -------------------------------------------------------------------------------- /output (16).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Okes2024/Hybrid-Machine-Learning-Framework-for-Water-Quality-Assessment-and-Contamination-Clustering/HEAD/output (16).png -------------------------------------------------------------------------------- /output (17).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Okes2024/Hybrid-Machine-Learning-Framework-for-Water-Quality-Assessment-and-Contamination-Clustering/HEAD/output (17).png -------------------------------------------------------------------------------- /output (18).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Okes2024/Hybrid-Machine-Learning-Framework-for-Water-Quality-Assessment-and-Contamination-Clustering/HEAD/output (18).png -------------------------------------------------------------------------------- /random_forest_water_quality_model.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Okes2024/Hybrid-Machine-Learning-Framework-for-Water-Quality-Assessment-and-Contamination-Clustering/HEAD/random_forest_water_quality_model.pkl -------------------------------------------------------------------------------- /Very_Poor_WQI_Table.csv: -------------------------------------------------------------------------------- 1 | Town,WQI,WQI_Class 2 | Opolo 1,203.09566176142823,Very Poor 3 | Agudama 2,212.76593779763897,Very Poor 4 | Agudama 1,218.85493978499414,Very Poor 5 | Etegwe 2,250.43838323266544,Very Poor 6 | -------------------------------------------------------------------------------- /Good_WQI_Table.csv: -------------------------------------------------------------------------------- 1 | Town,WQI,WQI_Class 2 | Akaba 1,56.71107876798835,Good 3 | Ogbuna 2,57.38715008060861,Good 4 | Ogbogoro 1,80.93695130793976,Good 5 | Biogbolo 1,92.43429800670128,Good 6 | Akaibiri 1,96.07152169003201,Good 7 | Okutukutu 1,98.55712291513436,Good 8 | Gbarantoru 2,98.96394199337301,Good 9 | -------------------------------------------------------------------------------- /Excellent_WQI_Table.csv: -------------------------------------------------------------------------------- 1 | Town,WQI,WQI_Class 2 | Kpansia 2,32.29067134345213,Excellent 3 | Amarata 2,34.918134029464866,Excellent 4 | Ogbogoro 2,36.24514060073847,Excellent 5 | Ogu 1,36.24514060073847,Excellent 6 | Gbarantoru 4,39.43029759622886,Excellent 7 | Gbarantoru 1,40.88046829146886,Excellent 8 | Tombia 3,41.130265748397115,Excellent 9 | Kpansia 1,42.487722853099164,Excellent 10 | Yenagwe1,42.74673672558154,Excellent 11 | Kpansia 1,44.33773246484053,Excellent 12 | Okolobiri 4,45.81035957756629,Excellent 13 | Amarata 1,48.61920117235385,Excellent 14 | -------------------------------------------------------------------------------- /Poor_WQI_Table.csv: -------------------------------------------------------------------------------- 1 | Town,WQI,WQI_Class 2 | Tombia 1,102.6139890918344,Poor 3 | Okolobiri 3,102.77744621510985,Poor 4 | Okolobiri 5,108.49980858240279,Poor 5 | Ogbuna 1,108.84872718256177,Poor 6 | Swail 2,109.43368225718976,Poor 7 | Ekeki 1,109.97154222479773,Poor 8 | Gbarantoru 3,111.4823102725834,Poor 9 | Ogbuna 3,112.69658923596407,Poor 10 | Yenizue Epie 1,113.39688232256817,Poor 11 | Swail 1,113.55604650039747,Poor 12 | Akaibiri 1,114.1595064672625,Poor 13 | Akenfa 1,114.92714718501348,Poor 14 | Ogbuna 4,115.49878019851263,Poor 15 | Okolobiri 2,115.97941742631929,Poor 16 | Etegwe 1,117.82421246127444,Poor 17 | Tombia 4,117.85093648078394,Poor 18 | Gbarantoru 5,118.22487553955767,Poor 19 | Okolobiri 1,120.96017561533719,Poor 20 | Tombia 2,121.23386024249449,Poor 21 | Igbogene 2,121.74265632127548,Poor 22 | Akaba 2,124.26708793025313,Poor 23 | Akenfa 2,124.67778053283409,Poor 24 | Yenagwe 2,125.06243762304887,Poor 25 | Opolo 2,125.23393906806042,Poor 26 | Ogu 2,134.44202663798933,Poor 27 | Yenizue Epie 2,138.10536233014616,Poor 28 | Igbogene 1,187.71387985601888,Poor 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 🌊 Water Quality Assessment Using Machine Learning in the Niger Delta 2 | This repository contains the full codebase and data analysis workflow for the study: 3 | 4 | "A Hybrid Machine Learning Framework for Water Quality Assessment and Contamination Clustering in the Niger Delta" 5 | 6 | 📌 Overview 7 | This project combines Water Quality Index (WQI) analysis with supervised and unsupervised machine learning models to assess water contamination across 50 towns in Bayelsa State, Nigeria. 8 | 9 | 🔍 Key Features 10 | WQI Computation based on WHO standards 11 | 12 | ML Regression Models: Random Forest, XGBoost, and LSTM 13 | 14 | Classification Performance: Accuracy, AUC, F1-Score 15 | 16 | Clustering: KMeans used for chemical profile grouping 17 | 18 | Visualizations: Feature importance, ROC curve, spatial WQI map 19 | 20 | 📁 Files 21 | Water_Quality_ML_Analysis.py: Full standalone Python script 22 | 23 | Water_Quality_ML_Analysis.ipynb: Jupyter notebook version 24 | 25 | Water Parameters.csv: Sample dataset used in analysis 26 | 27 | /figures/: Contains model performance charts, maps, and tables (optional) 28 | 29 | README.md: Project documentation 30 | 31 | 📊 Requirements 32 | Python 3.7+ 33 | 34 | Libraries: pandas, numpy, matplotlib, seaborn, scikit-learn, xgboost, tensorflow, keras 35 | 36 | Install dependencies using: 37 | 38 | bash 39 | Copy 40 | Edit 41 | pip install -r requirements.txt 42 | 📌 Applications 43 | Smart environmental monitoring 44 | 45 | WASH (Water, Sanitation & Hygiene) policy support 46 | 47 | Real-time contamination detection in underserved regions 48 | 49 | 📜 Citation 50 | If using this work, please cite: 51 | 52 | Eteh D.R., et al. "Hybrid ML Framework for Water Quality and Contamination Mapping in Nigeria." (Under review, Springer, 2025). 53 | -------------------------------------------------------------------------------- /explainable_ai_water_quality.py: -------------------------------------------------------------------------------- 1 | 2 | # Install required packages (uncomment if running locally) 3 | # !pip install shap lime 4 | 5 | import pandas as pd 6 | import numpy as np 7 | from sklearn.model_selection import train_test_split 8 | from sklearn.ensemble import RandomForestClassifier 9 | from sklearn.preprocessing import KBinsDiscretizer 10 | from sklearn.metrics import classification_report 11 | import shap 12 | import lime 13 | import lime.lime_tabular 14 | import matplotlib.pyplot as plt 15 | 16 | # Load your CSV 17 | df = pd.read_csv("Water Parameters.csv") 18 | 19 | # Prepare features and target 20 | X = df.drop(columns=["FID", "Lat", "long", "Town", "pH"]) 21 | y_continuous = df["pH"] 22 | binner = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform') 23 | y = binner.fit_transform(y_continuous.values.reshape(-1, 1)).ravel() 24 | 25 | # Split data 26 | X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) 27 | 28 | # Train model 29 | model = RandomForestClassifier(random_state=42) 30 | model.fit(X_train, y_train) 31 | 32 | # Report 33 | y_pred = model.predict(X_test) 34 | print("Classification Report:\n", classification_report(y_test, y_pred)) 35 | 36 | # SHAP 37 | explainer = shap.TreeExplainer(model) 38 | shap_values = explainer.shap_values(X_test) 39 | 40 | # SHAP summary plot 41 | shap.summary_plot(shap_values[0], X_test) 42 | 43 | # LIME 44 | explainer_lime = lime.lime_tabular.LimeTabularExplainer( 45 | training_data=X_train.values, 46 | feature_names=X.columns.tolist(), 47 | class_names=['Acidic', 'Neutral', 'Alkaline'], 48 | mode='classification' 49 | ) 50 | 51 | # Explain one instance 52 | i = 0 # Index of instance to explain 53 | exp = explainer_lime.explain_instance(X_test.values[i], model.predict_proba) 54 | exp.show_in_notebook(show_table=True) 55 | -------------------------------------------------------------------------------- /TOPSIS_Ranking_of_Water_Safety.csv: -------------------------------------------------------------------------------- 1 | ,Town,TOPSIS Score,Rank 2 | 17,Agudama 1,0.6038746496356667,1 3 | 24,Yenizue Epie 2,0.5964149857489288,2 4 | 18,Agudama 2,0.5803538933343718,3 5 | 10,Amarata 1,0.5753517353873137,4 6 | 22,Opolo 2,0.5703690232212559,5 7 | 8,Kpansia 1,0.5659426080224929,6 8 | 27,Akaba 2,0.5657307843393805,7 9 | 16,Akenfa 2,0.5594013573738502,8 10 | 48,Tombia 3,0.5464775807331796,9 11 | 41,Okolobiri 1,0.5444034262470002,10 12 | 21,Opolo 1,0.5412518469456288,11 13 | 13,Ogu 1,0.5394151270226475,12 14 | 28,Ogbogoro 2,0.5394151270226475,12 15 | 40,Ogbuna 4,0.5368398515214005,14 16 | 35,Gbarantoru 4,0.5236183292859975,15 17 | 47,Tombia 2,0.5229309760755936,16 18 | 20,Okutukutu 1,0.5225209200798162,17 19 | 0,Igbogene 1,0.5215071518289398,18 20 | 23,Kpansia 2,0.519045979290307,19 21 | 32,Gbarantoru 1,0.5179980502553098,20 22 | 49,Tombia 4,0.5157169023070841,21 23 | 6,Kpansia 1,0.5134266438467218,22 24 | 25,Amarata 2,0.5117044386254811,23 25 | 36,Gbarantoru 5,0.5106791961596944,24 26 | 5,Biogbolo 1,0.5099089963088058,25 27 | 38,Ogbuna 2,0.5031598257840647,26 28 | 26,Swail 2,0.5016880166967508,27 29 | 33,Gbarantoru 2,0.49729648222946754,28 30 | 29,Ogu 2,0.4964756358295211,29 31 | 30,Akaibiri 1,0.4956074306563049,30 32 | 39,Ogbuna 3,0.4928276502796664,31 33 | 46,Tombia 1,0.4927385592525167,32 34 | 4,Etegwe 1,0.48798263751796356,33 35 | 45,Okolobiri 5,0.4838337177685743,34 36 | 1,Yenagwe1,0.4828538578852335,35 37 | 34,Gbarantoru 3,0.4823508502583987,36 38 | 44,Okolobiri 4,0.4802808355244749,37 39 | 43,Okolobiri 3,0.4792607423036455,38 40 | 15,Igbogene 2,0.47530191073242806,39 41 | 12,Ogbogoro 1,0.4750950357082992,40 42 | 31,Akaibiri 1,0.4711892935840581,41 43 | 3,Akenfa 1,0.47027041075432197,42 44 | 42,Okolobiri 2,0.46586011027633767,43 45 | 37,Ogbuna 1,0.461711742648827,44 46 | 19,Etegwe 2,0.4608903150831496,45 47 | 7,Ekeki 1,0.4413194189029347,46 48 | 14,Akaba 1,0.4369796425702719,47 49 | 2,Yenagwe 2,0.4216232605415365,48 50 | 9,Yenizue Epie 1,0.4017544501740191,49 51 | 11,Swail 1,0.394874925860713,50 52 | -------------------------------------------------------------------------------- /CLUSTE~1.CSV: -------------------------------------------------------------------------------- 1 | Town,TOPSIS Score,Water Quality Category 2 | Igbogene 1,0.5215071518289398,Low Quality 3 | Yenagwe1,0.4828538578852335,Medium Quality 4 | Yenagwe 2,0.4216232605415365,Low Quality 5 | Akenfa 1,0.47027041075432197,Medium Quality 6 | Etegwe 1,0.48798263751796356,Medium Quality 7 | Biogbolo 1,0.5099089963088058,Medium Quality 8 | Kpansia 1,0.5134266438467218,Medium Quality 9 | Kpansia 1,0.5659426080224929,Medium Quality 10 | Kpansia 1,0.5134266438467218,Low Quality 11 | Kpansia 1,0.5659426080224929,Low Quality 12 | Ekeki 1,0.4413194189029347,Medium Quality 13 | Yenizue Epie 1,0.4017544501740191,Low Quality 14 | Amarata 1,0.5753517353873137,Low Quality 15 | Swail 1,0.394874925860713,Low Quality 16 | Ogbogoro 1,0.4750950357082992,Medium Quality 17 | Ogu 1,0.5394151270226475,Medium Quality 18 | Akaba 1,0.4369796425702719,Medium Quality 19 | Igbogene 2,0.47530191073242806,Medium Quality 20 | Akenfa 2,0.5594013573738502,High Quality 21 | Agudama 1,0.6038746496356667,High Quality 22 | Agudama 2,0.5803538933343718,High Quality 23 | Etegwe 2,0.4608903150831496,Medium Quality 24 | Okutukutu 1,0.5225209200798162,Medium Quality 25 | Opolo 1,0.5412518469456288,High Quality 26 | Opolo 2,0.5703690232212559,High Quality 27 | Kpansia 2,0.519045979290307,Medium Quality 28 | Yenizue Epie 2,0.5964149857489288,High Quality 29 | Amarata 2,0.5117044386254811,Medium Quality 30 | Swail 2,0.5016880166967508,Medium Quality 31 | Akaba 2,0.5657307843393805,High Quality 32 | Ogbogoro 2,0.5394151270226475,Medium Quality 33 | Ogu 2,0.4964756358295211,High Quality 34 | Akaibiri 1,0.4956074306563049,Medium Quality 35 | Akaibiri 1,0.4711892935840581,Medium Quality 36 | Akaibiri 1,0.4956074306563049,Low Quality 37 | Akaibiri 1,0.4711892935840581,Low Quality 38 | Gbarantoru 1,0.5179980502553098,Low Quality 39 | Gbarantoru 2,0.49729648222946754,Low Quality 40 | Gbarantoru 3,0.4823508502583987,Medium Quality 41 | Gbarantoru 4,0.5236183292859975,Low Quality 42 | Gbarantoru 5,0.5106791961596944,Low Quality 43 | Ogbuna 1,0.461711742648827,Low Quality 44 | Ogbuna 2,0.5031598257840647,Medium Quality 45 | Ogbuna 3,0.4928276502796664,Low Quality 46 | Ogbuna 4,0.5368398515214005,Medium Quality 47 | Okolobiri 1,0.5444034262470002,High Quality 48 | Okolobiri 2,0.46586011027633767,Low Quality 49 | Okolobiri 3,0.4792607423036455,Low Quality 50 | Okolobiri 4,0.4802808355244749,Low Quality 51 | Okolobiri 5,0.4838337177685743,Low Quality 52 | Tombia 1,0.4927385592525167,Low Quality 53 | Tombia 2,0.5229309760755936,Low Quality 54 | Tombia 3,0.5464775807331796,Low Quality 55 | Tombia 4,0.5157169023070841,Low Quality 56 | -------------------------------------------------------------------------------- /Clustered_Water_Quality_Categories.csv: -------------------------------------------------------------------------------- 1 | ,Town,TOPSIS Score,Water Quality Category 2 | 0,Igbogene 1,0.5215071518289398,Low Quality 3 | 1,Yenagwe1,0.4828538578852335,Medium Quality 4 | 2,Yenagwe 2,0.4216232605415365,Low Quality 5 | 3,Akenfa 1,0.47027041075432197,Medium Quality 6 | 4,Etegwe 1,0.48798263751796356,Medium Quality 7 | 5,Biogbolo 1,0.5099089963088058,Medium Quality 8 | 6,Kpansia 1,0.5134266438467218,Medium Quality 9 | 7,Kpansia 1,0.5659426080224929,Medium Quality 10 | 8,Kpansia 1,0.5134266438467218,Low Quality 11 | 9,Kpansia 1,0.5659426080224929,Low Quality 12 | 10,Ekeki 1,0.4413194189029347,Medium Quality 13 | 11,Yenizue Epie 1,0.4017544501740191,Low Quality 14 | 12,Amarata 1,0.5753517353873137,Low Quality 15 | 13,Swail 1,0.394874925860713,Low Quality 16 | 14,Ogbogoro 1,0.4750950357082992,Medium Quality 17 | 15,Ogu 1,0.5394151270226475,Medium Quality 18 | 16,Akaba 1,0.4369796425702719,Medium Quality 19 | 17,Igbogene 2,0.47530191073242806,Medium Quality 20 | 18,Akenfa 2,0.5594013573738502,High Quality 21 | 19,Agudama 1,0.6038746496356667,High Quality 22 | 20,Agudama 2,0.5803538933343718,High Quality 23 | 21,Etegwe 2,0.4608903150831496,Medium Quality 24 | 22,Okutukutu 1,0.5225209200798162,Medium Quality 25 | 23,Opolo 1,0.5412518469456288,High Quality 26 | 24,Opolo 2,0.5703690232212559,High Quality 27 | 25,Kpansia 2,0.519045979290307,Medium Quality 28 | 26,Yenizue Epie 2,0.5964149857489288,High Quality 29 | 27,Amarata 2,0.5117044386254811,Medium Quality 30 | 28,Swail 2,0.5016880166967508,Medium Quality 31 | 29,Akaba 2,0.5657307843393805,High Quality 32 | 30,Ogbogoro 2,0.5394151270226475,Medium Quality 33 | 31,Ogu 2,0.4964756358295211,High Quality 34 | 32,Akaibiri 1,0.4956074306563049,Medium Quality 35 | 33,Akaibiri 1,0.4711892935840581,Medium Quality 36 | 34,Akaibiri 1,0.4956074306563049,Low Quality 37 | 35,Akaibiri 1,0.4711892935840581,Low Quality 38 | 36,Gbarantoru 1,0.5179980502553098,Low Quality 39 | 37,Gbarantoru 2,0.49729648222946754,Low Quality 40 | 38,Gbarantoru 3,0.4823508502583987,Medium Quality 41 | 39,Gbarantoru 4,0.5236183292859975,Low Quality 42 | 40,Gbarantoru 5,0.5106791961596944,Low Quality 43 | 41,Ogbuna 1,0.461711742648827,Low Quality 44 | 42,Ogbuna 2,0.5031598257840647,Medium Quality 45 | 43,Ogbuna 3,0.4928276502796664,Low Quality 46 | 44,Ogbuna 4,0.5368398515214005,Medium Quality 47 | 45,Okolobiri 1,0.5444034262470002,High Quality 48 | 46,Okolobiri 2,0.46586011027633767,Low Quality 49 | 47,Okolobiri 3,0.4792607423036455,Low Quality 50 | 48,Okolobiri 4,0.4802808355244749,Low Quality 51 | 49,Okolobiri 5,0.4838337177685743,Low Quality 52 | 50,Tombia 1,0.4927385592525167,Low Quality 53 | 51,Tombia 2,0.5229309760755936,Low Quality 54 | 52,Tombia 3,0.5464775807331796,Low Quality 55 | 53,Tombia 4,0.5157169023070841,Low Quality 56 | -------------------------------------------------------------------------------- /Template: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Research Poster - Water Quality Assessment 5 | 37 | 38 | 39 |
40 |
41 |

Title

42 |

Hybrid Machine Learning Framework for Water Quality Assessment and Clustering in the Niger Delta

43 |

Agbozu Ebingiye Nelvin, 2024

44 |
45 | 46 |
47 |

Objective

48 |

To develop a scalable ML-based framework for predicting Water Quality Index (WQI) and identifying pollution clusters across Bayelsa State using field data and machine learning models.

49 |
50 | 51 |
52 |

Data

53 |

50 geolocated water samples analyzed across 10 parameters (pH, EC, TDS, NO3, Cl, SO4, Ca, Mg, Na, Fe). WQI computed based on WHO guidelines.

54 |
55 | 56 |
57 |

Methods

58 | 64 |
65 | 66 |
67 |

Key Findings

68 | 74 |
75 | 76 |
77 |

Conclusion

78 |

This hybrid ML framework provides an efficient and interpretable tool for water quality monitoring, supporting SDG 6: Clean Water and Sanitation in underserved regions.

79 |
80 | 81 | 84 |
85 | 86 | 87 | -------------------------------------------------------------------------------- /processed_water_quality_data.csv: -------------------------------------------------------------------------------- 1 | EC,TDS,NO3,Cl,SO4,TA,TH,Ca,Mg,Na,K,Iron,pH 2 | 406,203,0.36,39,1.4,26,25,22.4,6.35,10.86,4.2,0.6,6.12 3 | 715,356,0.165,15,0.8,15,45,8.5,2.48,4.0,1.46,0.14,6.3 4 | 857,430,0.335,21,1.67,17,18,13.7,3.0,6.5,1.55,0.4,6.38 5 | 782,391,0.175,14,0.86,19,37,8.85,2.5,4.85,0.76,0.37,6.1 6 | 164,82,0.165,14,0.82,3,35,8.6,2.76,4.54,1.2,0.38,5.99 7 | 175,84,0.094,16,0.48,5,32,9.0,2.85,5.2,1.4,0.3,5.93 8 | 763,383,0.085,14,0.45,16,30,7.4,2.38,4.74,1.2,0.15,5.6 9 | 1156,578,0.096,22,0.5,15,46,12.48,3.62,5.8,1.8,0.35,6.69 10 | 269,135,0.348,34,1.75,16,101,20.0,5.65,9.95,4.0,0.14,6.14 11 | 1652,826,0.42,47,2.1,15,45,27.86,7.5,13.58,4.65,0.36,6.74 12 | 422,211,0.204,37,0.96,18,91,21.48,6.2,9.84,2.62,0.16,6.05 13 | 722,361,0.49,23,2.45,9,33,16.74,4.4,7.6,2.5,0.36,6.87 14 | 928,464,0.078,16,0.39,18,27,9.2,2.58,5.4,1.8,0.26,6.43 15 | 160,80,0.162,24,0.8,12,56,14.56,3.8,6.0,2.26,0.12,6.2 16 | 530,265,0.17,8,0.86,3,15,6.75,1.76,3.85,0.6,0.18,6.91 17 | 496,248,0.137,13,1.28,8,65,8.16,2.42,5.82,1.76,0.39,6.33 18 | 164,82,0.341,55,5.6,9,93,33.97,8.7,15.9,5.38,0.4,6.13 19 | 334,167,0.23,58,5.5,16,200,34.5,8.84,17.4,5.4,0.7,5.88 20 | 173,87,0.22,46,4.38,17,128,27.6,7.45,13.54,5.1,0.68,6.01 21 | 164,82,0.165,14,0.82,3,35,8.6,2.76,4.54,1.2,0.8,5.99 22 | 91,46,0.132,14,1.42,14,56,8.78,1.96,4.62,0.78,0.32,5.85 23 | 84,42,0.374,43,3.4,22,90,26.74,6.4,12.43,2.7,0.65,5.93 24 | 94,48,0.41,65,5.6,24,115,35.6,7.64,14.9,5.4,0.4,6.38 25 | 348,174,0.127,14,1.38,12,26,9.5,2.64,4.86,1.36,0.11,5.86 26 | 422,211,0.318,90,10.8,22,148,56.88,12.76,28.64,7.34,0.44,6.4 27 | 194,97,0.187,22,0.28,10,47,12.69,4.2,6.38,2.42,0.112,6.74 28 | 486,243,0.172,19,1.64,17,116,11.28,3.54,5.38,1.34,0.35,6.46 29 | 77,38,0.213,40,4.0,14,111,23.86,5.72,12.58,2.55,0.4,5.99 30 | 160,80,0.162,24,0.8,12,56,14.56,3.8,6.0,2.26,0.12,6.2 31 | 172,86,0.348,52,5.25,4,41,29.78,6.88,16.7,4.4,0.43,6.28 32 | 285,142,0.218,14,2.48,17,17,10.35,2.87,5.48,1.72,0.31,6.14 33 | 355,178,0.231,20,3.5,18,34,14.36,3.54,7.6,1.3,0.364,6.59 34 | 420,210,0.31,20,4.0,20,52,13.3,4.2,6.5,2.6,0.136,6.01 35 | 583,292,0.318,34,4.8,18,48,22.18,5.68,9.45,2.8,0.32,5.97 36 | 363,182,0.22,20,3.85,12,36,14.7,2.53,6.84,1.76,0.36,5.96 37 | 364,182,0.23,30,3.64,17,30,13.82,4.86,8.35,2.18,0.132,5.92 38 | 310,155,0.197,12,3.0,18,26,17.48,2.25,5.42,3.2,0.38,6.15 39 | 379,189,0.271,13,4.3,17,43,9.47,2.84,5.46,1.85,0.348,6.49 40 | 304,152,0.176,14,2.34,18,27,10.2,3.0,4.96,1.41,0.186,6.35 41 | 279,140,0.185,11,2.97,23,30,9.78,2.56,3.75,1.92,0.36,6.52 42 | 285,143,0.121,12,2.58,15,21,8.5,2.58,4.34,6.98,0.372,6.08 43 | 382,191,0.278,62,4.84,17,43,32.76,10.72,18.68,2.5,0.388,6.15 44 | 457,274,0.328,16,4.75,17,44,13.6,3.52,7.48,1.2,0.374,5.99 45 | 348,174,0.281,12,3.84,26,41,9.55,2.84,4.72,1.48,0.328,6.6 46 | 298,199,0.217,12,3.76,23,35,9.28,1.78,5.46,1.24,0.146,6.83 47 | 306,153,0.227,13,4.0,28,35,10.32,2.1,4.8,1.2,0.346,6.62 48 | 436,218,0.29,14,3.46,24,45,9.88,3.0,5.75,2.25,0.33,6.24 49 | 307,154,0.214,21,3.2,21,22,13.25,4.34,6.58,3.74,0.39,6.08 50 | 376,188,0.245,32,4.0,22,19,18.72,5.63,9.36,3.96,0.136,6.1 51 | 357,178,0.235,33,3.85,18,10,19.3,5.82,9.65,1.55,0.382,5.67 52 | -------------------------------------------------------------------------------- /Water_Quality_ML_Analysis.py: -------------------------------------------------------------------------------- 1 | 2 | # Full Water Quality ML Analysis Script 3 | import pandas as pd 4 | import numpy as np 5 | import matplotlib.pyplot as plt 6 | import seaborn as sns 7 | from sklearn.preprocessing import StandardScaler, LabelEncoder 8 | from sklearn.model_selection import train_test_split 9 | from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error, confusion_matrix, roc_auc_score 10 | from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier 11 | from xgboost import XGBRegressor, XGBClassifier 12 | from sklearn.cluster import KMeans 13 | from tensorflow.keras.models import Sequential 14 | from tensorflow.keras.layers import LSTM, Dense 15 | from tensorflow.keras.utils import to_categorical 16 | 17 | # Load Data 18 | df = pd.read_csv("Water Parameters.csv") 19 | 20 | # WHO Standards 21 | standards = { 22 | "pH": {"Sn": 8.5, "V_ideal": 7.0}, 23 | "EC": {"Sn": 1500, "V_ideal": 0}, 24 | "TDS": {"Sn": 1000, "V_ideal": 0}, 25 | "NO3": {"Sn": 50, "V_ideal": 0}, 26 | "Cl": {"Sn": 250, "V_ideal": 0}, 27 | "SO4": {"Sn": 250, "V_ideal": 0}, 28 | "Ca": {"Sn": 75, "V_ideal": 0}, 29 | "Mg": {"Sn": 50, "V_ideal": 0}, 30 | "Na": {"Sn": 200, "V_ideal": 0}, 31 | "Iron": {"Sn": 0.3, "V_ideal": 0} 32 | } 33 | 34 | # Compute WQI 35 | qn_values = pd.DataFrame() 36 | for param, limits in standards.items(): 37 | Sn = limits["Sn"] 38 | V_ideal = limits["V_ideal"] 39 | qn_values[param] = ((df[param] - V_ideal) / (Sn - V_ideal)) * 100 40 | 41 | weights = {param: 1 / limits["Sn"] for param, limits in standards.items()} 42 | total_weight = sum(weights.values()) 43 | weights = {param: w / total_weight for param, w in weights.items()} 44 | df["WQI"] = sum(qn_values[param] * weights[param] for param in qn_values.columns) 45 | 46 | # Classify WQI 47 | def classify_wqi(wqi): 48 | if wqi <= 50: 49 | return "Excellent" 50 | elif wqi <= 100: 51 | return "Good" 52 | elif wqi <= 200: 53 | return "Poor" 54 | elif wqi <= 300: 55 | return "Very Poor" 56 | else: 57 | return "Unsuitable" 58 | 59 | df["WQI_Class"] = df["WQI"].apply(classify_wqi) 60 | df["Town"] = df.get("Town", [f"Town {i+1}" for i in range(len(df))]) 61 | 62 | # Features and Targets 63 | features = list(standards.keys()) 64 | X = df[features] 65 | y_reg = df["WQI"] 66 | y_cls = LabelEncoder().fit_transform(df["WQI_Class"]) 67 | 68 | # Standardize Features 69 | scaler = StandardScaler() 70 | X_scaled = scaler.fit_transform(X) 71 | 72 | # Split Data 73 | X_train, X_test, y_train_reg, y_test_reg = train_test_split(X_scaled, y_reg, test_size=0.2, random_state=42) 74 | _, _, y_train_cls, y_test_cls = train_test_split(X_scaled, y_cls, test_size=0.2, random_state=42) 75 | 76 | # Train Regression Models 77 | rf_reg = RandomForestRegressor(random_state=42).fit(X_train, y_train_reg) 78 | xgb_reg = XGBRegressor(random_state=42).fit(X_train, y_train_reg) 79 | rf_pred_reg = rf_reg.predict(X_test) 80 | xgb_pred_reg = xgb_reg.predict(X_test) 81 | 82 | # Train Classification Models 83 | rf_cls = RandomForestClassifier(random_state=42).fit(X_train, y_train_cls) 84 | xgb_cls = XGBClassifier(random_state=42).fit(X_train, y_train_cls) 85 | rf_pred_cls = rf_cls.predict(X_test) 86 | xgb_pred_cls = xgb_cls.predict(X_test) 87 | 88 | # AUC and Confusion Matrix 89 | y_test_cls_bin = to_categorical(y_test_cls) 90 | xgb_pred_proba = xgb_cls.predict_proba(X_test) 91 | xgb_auc = roc_auc_score(y_test_cls_bin, xgb_pred_proba, average='weighted', multi_class='ovr') 92 | print("XGBoost Classification AUC:", xgb_auc) 93 | print("XGBoost Confusion Matrix:\n", confusion_matrix(y_test_cls, xgb_pred_cls)) 94 | 95 | # Clustering 96 | kmeans = KMeans(n_clusters=3, random_state=42) 97 | df["Cluster"] = kmeans.fit_predict(X_scaled) 98 | 99 | # LSTM for Regression 100 | X_lstm = X_scaled.reshape((X_scaled.shape[0], 1, X_scaled.shape[1])) 101 | X_train_lstm, X_test_lstm, y_train_lstm, y_test_lstm = train_test_split(X_lstm, y_reg, test_size=0.2, random_state=42) 102 | lstm_model = Sequential([ 103 | LSTM(50, activation='relu', input_shape=(1, X_scaled.shape[1])), 104 | Dense(1) 105 | ]) 106 | lstm_model.compile(optimizer='adam', loss='mse') 107 | lstm_model.fit(X_train_lstm, y_train_lstm, epochs=100, verbose=0) 108 | lstm_pred = lstm_model.predict(X_test_lstm).flatten() 109 | 110 | # Visualization: Example Figure (Feature Importance) 111 | importances = rf_reg.feature_importances_ 112 | feat_df = pd.DataFrame({'Feature': features, 'Importance': importances}).sort_values(by='Importance', ascending=False) 113 | plt.figure(figsize=(10, 6)) 114 | sns.barplot(data=feat_df, x='Importance', y='Feature') 115 | plt.title('Feature Importance - Random Forest') 116 | plt.tight_layout() 117 | plt.show() 118 | -------------------------------------------------------------------------------- /Code: -------------------------------------------------------------------------------- 1 | # Libraries 2 | import pandas as pd 3 | import numpy as np 4 | import matplotlib.pyplot as plt 5 | import seaborn as sns 6 | from sklearn.preprocessing import StandardScaler, LabelEncoder 7 | from sklearn.model_selection import train_test_split 8 | from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error, confusion_matrix, roc_auc_score, roc_curve, classification_report 9 | from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier 10 | from xgboost import XGBRegressor, XGBClassifier 11 | from sklearn.cluster import KMeans 12 | from tensorflow.keras.models import Sequential 13 | from tensorflow.keras.layers import LSTM, Dense 14 | from tensorflow.keras.utils import to_categorical 15 | 16 | # Load Data 17 | df = pd.read_csv("Water Parameters.csv") 18 | 19 | # WHO Standards 20 | standards = { 21 | "pH": {"Sn": 8.5, "V_ideal": 7.0}, 22 | "EC": {"Sn": 1500, "V_ideal": 0}, 23 | "TDS": {"Sn": 1000, "V_ideal": 0}, 24 | "NO3": {"Sn": 50, "V_ideal": 0}, 25 | "Cl": {"Sn": 250, "V_ideal": 0}, 26 | "SO4": {"Sn": 250, "V_ideal": 0}, 27 | "Ca": {"Sn": 75, "V_ideal": 0}, 28 | "Mg": {"Sn": 50, "V_ideal": 0}, 29 | "Na": {"Sn": 200, "V_ideal": 0}, 30 | "Iron": {"Sn": 0.3, "V_ideal": 0} 31 | } 32 | 33 | # Compute WQI 34 | qn_values = pd.DataFrame() 35 | for param, limits in standards.items(): 36 | Sn = limits["Sn"] 37 | V_ideal = limits["V_ideal"] 38 | qn_values[param] = ((df[param] - V_ideal) / (Sn - V_ideal)) * 100 39 | 40 | weights = {param: 1 / limits["Sn"] for param, limits in standards.items()} 41 | total_weight = sum(weights.values()) 42 | weights = {param: w / total_weight for param, w in weights.items()} 43 | df["WQI"] = sum(qn_values[param] * weights[param] for param in qn_values.columns) 44 | 45 | # Classify WQI 46 | def classify_wqi(wqi): 47 | if wqi <= 50: 48 | return "Excellent" 49 | elif wqi <= 100: 50 | return "Good" 51 | elif wqi <= 200: 52 | return "Poor" 53 | elif wqi <= 300: 54 | return "Very Poor" 55 | else: 56 | return "Unsuitable" 57 | 58 | df["WQI_Class"] = df["WQI"].apply(classify_wqi) 59 | df["Town"] = df.get("Town", [f"Town {i+1}" for i in range(len(df))]) 60 | 61 | # Features and Targets 62 | features = list(standards.keys()) 63 | X = df[features] 64 | y_reg = df["WQI"] 65 | y_cls = LabelEncoder().fit_transform(df["WQI_Class"]) 66 | 67 | # Standardize Features 68 | scaler = StandardScaler() 69 | X_scaled = scaler.fit_transform(X) 70 | 71 | # Split Data 72 | X_train, X_test, y_train_reg, y_test_reg = train_test_split(X_scaled, y_reg, test_size=0.2, random_state=42) 73 | _, _, y_train_cls, y_test_cls = train_test_split(X_scaled, y_cls, test_size=0.2, random_state=42) 74 | 75 | # Train Regression Models 76 | rf_reg = RandomForestRegressor(random_state=42).fit(X_train, y_train_reg) 77 | xgb_reg = XGBRegressor(random_state=42).fit(X_train, y_train_reg) 78 | rf_pred_reg = rf_reg.predict(X_test) 79 | xgb_pred_reg = xgb_reg.predict(X_test) 80 | 81 | # Evaluate Regression 82 | print("Random Forest R²:", r2_score(y_test_reg, rf_pred_reg)) 83 | print("XGBoost R²:", r2_score(y_test_reg, xgb_pred_reg)) 84 | 85 | # Train Classification Models 86 | rf_cls = RandomForestClassifier(random_state=42).fit(X_train, y_train_cls) 87 | xgb_cls = XGBClassifier(random_state=42).fit(X_train, y_train_cls) 88 | rf_pred_cls = rf_cls.predict(X_test) 89 | xgb_pred_cls = xgb_cls.predict(X_test) 90 | 91 | # AUC and Confusion Matrix 92 | y_test_cls_bin = to_categorical(y_test_cls) 93 | xgb_pred_proba = xgb_cls.predict_proba(X_test) 94 | xgb_auc = roc_auc_score(y_test_cls_bin, xgb_pred_proba, average='weighted', multi_class='ovr') 95 | print("XGBoost Classification AUC:", xgb_auc) 96 | print("XGBoost Confusion Matrix:\n", confusion_matrix(y_test_cls, xgb_pred_cls)) 97 | 98 | # Clustering 99 | kmeans = KMeans(n_clusters=3, random_state=42) 100 | df["Cluster"] = kmeans.fit_predict(X_scaled) 101 | 102 | # LSTM for Regression 103 | X_lstm = X_scaled.reshape((X_scaled.shape[0], 1, X_scaled.shape[1])) 104 | X_train_lstm, X_test_lstm, y_train_lstm, y_test_lstm = train_test_split(X_lstm, y_reg, test_size=0.2, random_state=42) 105 | lstm_model = Sequential([ 106 | LSTM(50, activation='relu', input_shape=(1, X_scaled.shape[1])), 107 | Dense(1) 108 | ]) 109 | lstm_model.compile(optimizer='adam', loss='mse') 110 | lstm_model.fit(X_train_lstm, y_train_lstm, epochs=100, verbose=0) 111 | lstm_pred = lstm_model.predict(X_test_lstm).flatten() 112 | 113 | # Visualization: Example Figure (Feature Importance) 114 | importances = rf_reg.feature_importances_ 115 | feat_df = pd.DataFrame({'Feature': features, 'Importance': importances}).sort_values(by='Importance', ascending=False) 116 | plt.figure(figsize=(10, 6)) 117 | sns.barplot(data=feat_df, x='Importance', y='Feature') 118 | plt.title('Feature Importance - Random Forest') 119 | plt.tight_layout() 120 | plt.show() 121 | -------------------------------------------------------------------------------- /Water_Quality_Data_with_WQI.csv: -------------------------------------------------------------------------------- 1 | FID,Lat,long,Town,pH,EC,TDS,NO3,Cl,SO4,TA,TH,Ca,Mg,Na,K,Iron,WQI 2 | 0,5.036889,6.405972,Igbogene 1,6.12,406,203,0.36,39,1.4,26,25,22.4,6.35,10.86,4.2,0.6,44.59734285714287 3 | 1,5.01975,6.398167,Yenagwe1,6.3,715,356,0.165,15,0.8,15,45,8.5,2.48,4.0,1.46,0.14,33.289666666666676 4 | 2,5.016722,6.396528,Yenagwe 2,6.38,857,430,0.335,21,1.67,17,18,13.7,3.0,6.5,1.55,0.4,42.09834761904763 5 | 3,5.002366,6.387691,Akenfa 1,6.1,782,391,0.175,14,0.86,19,37,8.85,2.5,4.85,0.76,0.37,39.723447619047626 6 | 4,4.957417,6.35375,Etegwe 1,5.99,164,82,0.165,14,0.82,3,35,8.6,2.76,4.54,1.2,0.38,28.46645714285714 7 | 5,4.94325,6.324806,Biogbolo 1,5.93,175,84,0.094,16,0.48,5,32,9.0,2.85,5.2,1.4,0.3,26.464504761904763 8 | 6,4.908472,6.337083,Kpansia 1,5.6,763,383,0.085,14,0.45,16,30,7.4,2.38,4.74,1.2,0.15,31.99146666666667 9 | 7,4.929167,6.300806,Ekeki 1,6.69,1156,578,0.096,22,0.5,15,46,12.48,3.62,5.8,1.8,0.35,48.25232380952383 10 | 8,4.917722,6.317583,Kpansia 1,6.14,269,135,0.348,34,1.75,16,101,20.0,5.65,9.95,4.0,0.14,34.727704761904775 11 | 9,4.91175,6.305972,Yenizue Epie 1,6.74,1652,826,0.42,47,2.1,15,45,27.86,7.5,13.58,4.65,0.36,62.50159523809525 12 | 10,4.925861,6.275583,Amarata 1,6.05,422,211,0.204,37,0.96,18,91,21.48,6.2,9.84,2.62,0.16,36.7222761904762 13 | 11,4.916,6.2755,Swail 1,6.87,722,361,0.49,23,2.45,9,33,16.74,4.4,7.6,2.5,0.36,41.491647619047626 14 | 12,4.917028,6.251222,Ogbogoro 1,6.43,928,464,0.078,16,0.39,18,27,9.2,2.58,5.4,1.8,0.26,39.458019047619054 15 | 13,4.903722,6.251222,Ogu 1,6.2,160,80,0.162,24,0.8,12,56,14.56,3.8,6.0,2.26,0.12,25.930123809523813 16 | 14,4.91125,6.255611,Akaba 1,6.91,530,265,0.17,8,0.86,3,15,6.75,1.76,3.85,0.6,0.18,28.10230476190477 17 | 15,5.026869,6.398981,Igbogene 2,6.33,496,248,0.137,13,1.28,8,65,8.16,2.42,5.82,1.76,0.39,37.769676190476204 18 | 16,5.002678,6.379307,Akenfa 2,6.13,164,82,0.341,55,5.6,9,93,33.97,8.7,15.9,5.38,0.4,43.17092380952382 19 | 17,4.992793,6.375336,Agudama 1,5.88,334,167,0.23,58,5.5,16,200,34.5,8.84,17.4,5.4,0.7,62.99 20 | 18,4.98176,6.37166,Agudama 2,6.01,173,87,0.22,46,4.38,17,128,27.6,7.45,13.54,5.1,0.68,52.17295238095239 21 | 19,4.953314,6.355015,Etegwe 2,5.99,164,82,0.165,14,0.82,3,35,8.6,2.76,4.54,1.2,0.8,39.66645714285715 22 | 20,4.952838,6.34541,Okutukutu 1,5.85,91,46,0.132,14,1.42,14,56,8.78,1.96,4.62,0.78,0.32,27.54212380952382 23 | 21,4.94409,6.331098,Opolo 1,5.93,84,42,0.374,43,3.4,22,90,26.74,6.4,12.43,2.7,0.65,45.46450476190477 24 | 22,4.940728,6.326492,Opolo 2,6.38,94,48,0.41,65,5.6,24,115,35.6,7.64,14.9,5.4,0.4,45.3837142857143 25 | 23,4.933825,6.307698,Kpansia 2,5.86,348,174,0.127,14,1.38,12,26,9.5,2.64,4.86,1.36,0.11,24.194171428571433 26 | 24,4.916093,6.301615,Yenizue Epie 2,6.4,422,211,0.318,90,10.8,22,148,56.88,12.76,28.64,7.34,0.44,61.426942857142855 27 | 25,4.935199,6.285502,Amarata 2,6.74,194,97,0.187,22,0.28,10,47,12.69,4.2,6.38,2.42,0.112,26.198695238095244 28 | 26,4.923142,6.272686,Swail 2,6.46,486,243,0.172,19,1.64,17,116,11.28,3.54,5.38,1.34,0.35,42.026695238095236 29 | 27,4.905837,6.258554,Akaba 2,5.99,77,38,0.213,40,4.0,14,111,23.86,5.72,12.58,2.55,0.4,39.268157142857156 30 | 28,4.918221,6.25624,Ogbogoro 2,6.2,160,80,0.162,24,0.8,12,56,14.56,3.8,6.0,2.26,0.12,25.930123809523813 31 | 29,4.899849,6.269169,Ogu 2,6.28,172,86,0.348,52,5.25,4,41,29.78,6.88,16.7,4.4,0.43,38.54257142857144 32 | 30,4.983667,6.276111,Akaibiri 1,6.14,285,142,0.218,14,2.48,17,17,10.35,2.87,5.48,1.72,0.31,28.95117142857143 33 | 31,4.987861,6.275722,Akaibiri 1,6.59,355,178,0.231,20,3.5,18,34,14.36,3.54,7.6,1.3,0.364,34.648714285714284 34 | 32,5.000389,6.279556,Gbarantoru 1,6.01,420,210,0.31,20,4.0,20,52,13.3,4.2,6.5,2.6,0.136,30.788952380952384 35 | 33,4.999861,6.280667,Gbarantoru 2,5.97,583,292,0.318,34,4.8,18,48,22.18,5.68,9.45,2.8,0.32,40.180761904761916 36 | 34,4.999656,6.279361,Gbarantoru 3,5.96,363,182,0.22,20,3.85,12,36,14.7,2.53,6.84,1.76,0.36,33.357514285714295 37 | 35,4.999222,6.2785,Gbarantoru 4,5.92,364,182,0.23,30,3.64,17,30,13.82,4.86,8.35,2.18,0.132,28.228257142857146 38 | 36,5.004056,6.294028,Gbarantoru 5,6.15,310,155,0.197,12,3.0,18,26,17.48,2.25,5.42,3.2,0.38,33.22208571428572 39 | 37,5.032306,6.312556,Ogbuna 1,6.49,379,189,0.271,13,4.3,17,43,9.47,2.84,5.46,1.85,0.348,34.16300476190477 40 | 38,5.033528,6.311917,Ogbuna 2,6.35,304,152,0.176,14,2.34,18,27,10.2,3.0,4.96,1.41,0.186,26.98047142857143 41 | 39,5.034,6.311778,Ogbuna 3,6.52,279,140,0.185,11,2.97,23,30,9.78,2.56,3.75,1.92,0.36,31.90038095238096 42 | 40,5.033361,6.311056,Ogbuna 4,6.08,285,143,0.121,12,2.58,15,21,8.5,2.58,4.34,6.98,0.372,32.42621904761906 43 | 41,5.038194,6.323444,Okolobiri 1,6.15,382,191,0.278,62,4.84,17,43,32.76,10.72,18.68,2.5,0.388,42.729685714285715 44 | 42,5.038,6.319889,Okolobiri 2,5.99,457,274,0.328,16,4.75,17,44,13.6,3.52,7.48,1.2,0.374,37.69592380952382 45 | 43,5.035417,6.321361,Okolobiri 3,6.6,348,174,0.281,12,3.84,26,41,9.55,2.84,4.72,1.48,0.328,33.45636190476192 46 | 44,5.034306,6.318833,Okolobiri 4,6.83,298,199,0.217,12,3.76,23,35,9.28,1.78,5.46,1.24,0.146,28.81019047619048 47 | 45,5.03425,6.31789,Okolobiri 5,6.62,306,153,0.227,13,4.0,28,35,10.32,2.1,4.8,1.2,0.346,32.75152380952381 48 | 46,4.996806,6.262944,Tombia 1,6.24,436,218,0.29,14,3.46,24,45,9.88,3.0,5.75,2.25,0.33,35.17348095238096 49 | 47,5.001417,6.263,Tombia 2,6.08,307,154,0.214,21,3.2,21,22,13.25,4.34,6.58,3.74,0.39,33.96261904761906 50 | 48,5.000861,6.265528,Tombia 3,6.1,376,188,0.245,32,4.0,22,19,18.72,5.63,9.36,3.96,0.136,29.926714285714286 51 | 49,5.000639,6.266833,Tombia 4,5.67,357,178,0.235,33,3.85,18,10,19.3,5.82,9.65,1.55,0.382,33.65516666666668 52 | -------------------------------------------------------------------------------- /Water_Quality_Index_Results.csv: -------------------------------------------------------------------------------- 1 | FID,Lat,long,Town,pH,EC,TDS,NO3,Cl,SO4,TA,TH,Ca,Mg,Na,K,Iron,WQI 2 | 0,5.036889,6.405972,Igbogene 1,6.12,406,203,0.36,39,1.4,26,25,22.4,6.35,10.86,4.2,0.6,187.71387985601888 3 | 1,5.01975,6.398167,Yenagwe1,6.3,715,356,0.165,15,0.8,15,45,8.5,2.48,4.0,1.46,0.14,42.74673672558154 4 | 2,5.016722,6.396528,Yenagwe 2,6.38,857,430,0.335,21,1.67,17,18,13.7,3.0,6.5,1.55,0.4,125.06243762304887 5 | 3,5.002366,6.387691,Akenfa 1,6.1,782,391,0.175,14,0.86,19,37,8.85,2.5,4.85,0.76,0.37,114.92714718501348 6 | 4,4.957417,6.35375,Etegwe 1,5.99,164,82,0.165,14,0.82,3,35,8.6,2.76,4.54,1.2,0.38,117.82421246127444 7 | 5,4.94325,6.324806,Biogbolo 1,5.93,175,84,0.094,16,0.48,5,32,9.0,2.85,5.2,1.4,0.3,92.43429800670128 8 | 6,4.908472,6.337083,Kpansia 1,5.6,763,383,0.085,14,0.45,16,30,7.4,2.38,4.74,1.2,0.15,44.33773246484053 9 | 7,4.929167,6.300806,Ekeki 1,6.69,1156,578,0.096,22,0.5,15,46,12.48,3.62,5.8,1.8,0.35,109.97154222479773 10 | 8,4.917722,6.317583,Kpansia 1,6.14,269,135,0.348,34,1.75,16,101,20.0,5.65,9.95,4.0,0.14,42.487722853099164 11 | 9,4.91175,6.305972,Yenizue Epie 1,6.74,1652,826,0.42,47,2.1,15,45,27.86,7.5,13.58,4.65,0.36,113.39688232256817 12 | 10,4.925861,6.275583,Amarata 1,6.05,422,211,0.204,37,0.96,18,91,21.48,6.2,9.84,2.62,0.16,48.61920117235385 13 | 11,4.916,6.2755,Swail 1,6.87,722,361,0.49,23,2.45,9,33,16.74,4.4,7.6,2.5,0.36,113.55604650039747 14 | 12,4.917028,6.251222,Ogbogoro 1,6.43,928,464,0.078,16,0.39,18,27,9.2,2.58,5.4,1.8,0.26,80.93695130793976 15 | 13,4.903722,6.251222,Ogu 1,6.2,160,80,0.162,24,0.8,12,56,14.56,3.8,6.0,2.26,0.12,36.24514060073847 16 | 14,4.91125,6.255611,Akaba 1,6.91,530,265,0.17,8,0.86,3,15,6.75,1.76,3.85,0.6,0.18,56.71107876798835 17 | 15,5.026869,6.398981,Igbogene 2,6.33,496,248,0.137,13,1.28,8,65,8.16,2.42,5.82,1.76,0.39,121.74265632127548 18 | 16,5.002678,6.379307,Akenfa 2,6.13,164,82,0.341,55,5.6,9,93,33.97,8.7,15.9,5.38,0.4,124.67778053283409 19 | 17,4.992793,6.375336,Agudama 1,5.88,334,167,0.23,58,5.5,16,200,34.5,8.84,17.4,5.4,0.7,218.85493978499414 20 | 18,4.98176,6.37166,Agudama 2,6.01,173,87,0.22,46,4.38,17,128,27.6,7.45,13.54,5.1,0.68,212.76593779763897 21 | 19,4.953314,6.355015,Etegwe 2,5.99,164,82,0.165,14,0.82,3,35,8.6,2.76,4.54,1.2,0.8,250.43838323266544 22 | 20,4.952838,6.34541,Okutukutu 1,5.85,91,46,0.132,14,1.42,14,56,8.78,1.96,4.62,0.78,0.32,98.55712291513436 23 | 21,4.94409,6.331098,Opolo 1,5.93,84,42,0.374,43,3.4,22,90,26.74,6.4,12.43,2.7,0.65,203.09566176142823 24 | 22,4.940728,6.326492,Opolo 2,6.38,94,48,0.41,65,5.6,24,115,35.6,7.64,14.9,5.4,0.4,125.23393906806042 25 | 23,4.933825,6.307698,Kpansia 2,5.86,348,174,0.127,14,1.38,12,26,9.5,2.64,4.86,1.36,0.11,32.29067134345213 26 | 24,4.916093,6.301615,Yenizue Epie 2,6.4,422,211,0.318,90,10.8,22,148,56.88,12.76,28.64,7.34,0.44,138.10536233014616 27 | 25,4.935199,6.285502,Amarata 2,6.74,194,97,0.187,22,0.28,10,47,12.69,4.2,6.38,2.42,0.112,34.918134029464866 28 | 26,4.923142,6.272686,Swail 2,6.46,486,243,0.172,19,1.64,17,116,11.28,3.54,5.38,1.34,0.35,109.43368225718976 29 | 27,4.905837,6.258554,Akaba 2,5.99,77,38,0.213,40,4.0,14,111,23.86,5.72,12.58,2.55,0.4,124.26708793025313 30 | 28,4.918221,6.25624,Ogbogoro 2,6.2,160,80,0.162,24,0.8,12,56,14.56,3.8,6.0,2.26,0.12,36.24514060073847 31 | 29,4.899849,6.269169,Ogu 2,6.28,172,86,0.348,52,5.25,4,41,29.78,6.88,16.7,4.4,0.43,134.44202663798933 32 | 30,4.983667,6.276111,Akaibiri 1,6.14,285,142,0.218,14,2.48,17,17,10.35,2.87,5.48,1.72,0.31,96.07152169003201 33 | 31,4.987861,6.275722,Akaibiri 1,6.59,355,178,0.231,20,3.5,18,34,14.36,3.54,7.6,1.3,0.364,114.1595064672625 34 | 32,5.000389,6.279556,Gbarantoru 1,6.01,420,210,0.31,20,4.0,20,52,13.3,4.2,6.5,2.6,0.136,40.88046829146886 35 | 33,4.999861,6.280667,Gbarantoru 2,5.97,583,292,0.318,34,4.8,18,48,22.18,5.68,9.45,2.8,0.32,98.96394199337301 36 | 34,4.999656,6.279361,Gbarantoru 3,5.96,363,182,0.22,20,3.85,12,36,14.7,2.53,6.84,1.76,0.36,111.4823102725834 37 | 35,4.999222,6.2785,Gbarantoru 4,5.92,364,182,0.23,30,3.64,17,30,13.82,4.86,8.35,2.18,0.132,39.43029759622886 38 | 36,5.004056,6.294028,Gbarantoru 5,6.15,310,155,0.197,12,3.0,18,26,17.48,2.25,5.42,3.2,0.38,118.22487553955767 39 | 37,5.032306,6.312556,Ogbuna 1,6.49,379,189,0.271,13,4.3,17,43,9.47,2.84,5.46,1.85,0.348,108.84872718256177 40 | 38,5.033528,6.311917,Ogbuna 2,6.35,304,152,0.176,14,2.34,18,27,10.2,3.0,4.96,1.41,0.186,57.38715008060861 41 | 39,5.034,6.311778,Ogbuna 3,6.52,279,140,0.185,11,2.97,23,30,9.78,2.56,3.75,1.92,0.36,112.69658923596407 42 | 40,5.033361,6.311056,Ogbuna 4,6.08,285,143,0.121,12,2.58,15,21,8.5,2.58,4.34,6.98,0.372,115.49878019851263 43 | 41,5.038194,6.323444,Okolobiri 1,6.15,382,191,0.278,62,4.84,17,43,32.76,10.72,18.68,2.5,0.388,120.96017561533719 44 | 42,5.038,6.319889,Okolobiri 2,5.99,457,274,0.328,16,4.75,17,44,13.6,3.52,7.48,1.2,0.374,115.97941742631929 45 | 43,5.035417,6.321361,Okolobiri 3,6.6,348,174,0.281,12,3.84,26,41,9.55,2.84,4.72,1.48,0.328,102.77744621510985 46 | 44,5.034306,6.318833,Okolobiri 4,6.83,298,199,0.217,12,3.76,23,35,9.28,1.78,5.46,1.24,0.146,45.81035957756629 47 | 45,5.03425,6.31789,Okolobiri 5,6.62,306,153,0.227,13,4.0,28,35,10.32,2.1,4.8,1.2,0.346,108.49980858240279 48 | 46,4.996806,6.262944,Tombia 1,6.24,436,218,0.29,14,3.46,24,45,9.88,3.0,5.75,2.25,0.33,102.6139890918344 49 | 47,5.001417,6.263,Tombia 2,6.08,307,154,0.214,21,3.2,21,22,13.25,4.34,6.58,3.74,0.39,121.23386024249449 50 | 48,5.000861,6.265528,Tombia 3,6.1,376,188,0.245,32,4.0,22,19,18.72,5.63,9.36,3.96,0.136,41.130265748397115 51 | 49,5.000639,6.266833,Tombia 4,5.67,357,178,0.235,33,3.85,18,10,19.3,5.82,9.65,1.55,0.382,117.85093648078394 52 | -------------------------------------------------------------------------------- /Normalized_Water_Quality_Data.csv: -------------------------------------------------------------------------------- 1 | Town,pH,EC,TDS,NO3,Cl,SO4,TA,TH,Ca,Mg,Na,K,Iron 2 | Igbogene 1,0.3969465648854964,0.20888888888888887,0.2093908629441624,0.6844660194174758,0.3780487804878049,0.10646387832699616,0.92,0.07894736842105263,0.3121883103929782,0.41727272727272724,0.28565689031739655,0.5341246290801187,0.7101449275362317 3 | Yenagwe1,0.5343511450381682,0.4050793650793651,0.4035532994923858,0.21116504854368934,0.08536585365853658,0.0494296577946768,0.48,0.18421052631578946,0.03490923598643525,0.06545454545454546,0.010044194455604671,0.12759643916913946,0.043478260869565216 4 | Yenagwe 2,0.5954198473282437,0.49523809523809526,0.4974619289340101,0.6237864077669903,0.15853658536585366,0.1321292775665399,0.56,0.04210526315789474,0.1386395372032715,0.1127272727272727,0.11048613901165127,0.14094955489614241,0.4202898550724637 5 | Akenfa 1,0.3816793893129766,0.44761904761904764,0.4479695431472081,0.2354368932038835,0.07317073170731708,0.05513307984790873,0.64,0.14210526315789473,0.04189108318372231,0.06727272727272729,0.04419445560466051,0.02373887240356083,0.3768115942028985 6 | Etegwe 1,0.2977099236641223,0.05523809523809523,0.055837563451776644,0.21116504854368934,0.07317073170731708,0.05133079847908743,0.0,0.13157894736842105,0.036904049471374406,0.09090909090909091,0.03173965447971075,0.08902077151335311,0.39130434782608686 7 | Biogbolo 1,0.25190839694656475,0.062222222222222213,0.058375634517766485,0.03883495145631069,0.0975609756097561,0.019011406844106456,0.08000000000000002,0.11578947368421053,0.04488330341113106,0.09909090909090909,0.05825632784250706,0.11869436201780414,0.27536231884057966 8 | Kpansia 1,0.0,0.4355555555555556,0.43781725888324874,0.016990291262135943,0.07317073170731708,0.01615969581749049,0.52,0.10526315789473684,0.01296628765210453,0.056363636363636366,0.03977501004419448,0.08902077151335311,0.0579710144927536 9 | Ekeki 1,0.8320610687022905,0.6850793650793651,0.6852791878172588,0.04368932038834952,0.17073170731707318,0.020912547528517105,0.48,0.18947368421052632,0.11430281268701376,0.1690909090909091,0.08236239453595823,0.17804154302670624,0.3478260869565217 10 | Kpansia 1,0.4122137404580153,0.1219047619047619,0.1230964467005076,0.6553398058252428,0.3170731707317074,0.13973384030418248,0.52,0.4789473684210526,0.2643127867544384,0.35363636363636364,0.2490960224989956,0.5044510385756676,0.043478260869565216 11 | Yenizue Epie 1,0.8702290076335881,1.0,0.9999999999999999,0.8300970873786407,0.47560975609756106,0.1730038022813688,0.48,0.18421052631578946,0.4211051266706563,0.5218181818181818,0.3949377259943753,0.6008902077151336,0.36231884057971003 12 | Amarata 1,0.34351145038167896,0.21904761904761902,0.21954314720812182,0.3058252427184466,0.35365853658536583,0.06463878326996196,0.6,0.4263157894736842,0.293836026331538,0.4036363636363637,0.24467657693852957,0.2997032640949555,0.07246376811594202 13 | Swail 1,0.9694656488549613,0.40952380952380957,0.4098984771573604,1.0,0.1829268292682927,0.20627376425855512,0.24,0.12105263157894736,0.19928186714542184,0.24000000000000002,0.15468059461631178,0.28189910979228483,0.36231884057971003 14 | Ogbogoro 1,0.6335877862595414,0.5403174603174603,0.5406091370558376,0.0,0.0975609756097561,0.01045627376425855,0.6,0.08947368421052632,0.048872930381009344,0.07454545454545455,0.06629168340699079,0.17804154302670624,0.21739130434782605 15 | Ogu 1,0.45801526717557284,0.052698412698412696,0.0532994923857868,0.2038834951456311,0.19512195121951223,0.0494296577946768,0.36,0.2421052631578947,0.15579493317374826,0.18545454545454546,0.09039775010044196,0.24629080118694355,0.014492753623188387 16 | Akaba 1,1.0,0.28761904761904766,0.2880710659898477,0.22330097087378648,0.0,0.05513307984790873,0.0,0.02631578947368421,0.0,0.0,0.00401767778224188,0.0,0.10144927536231879 17 | Igbogene 2,0.5572519083969469,0.26603174603174606,0.26649746192893403,0.14320388349514568,0.06097560975609756,0.09505703422053231,0.2,0.2894736842105263,0.028126870137642118,0.06,0.08316593009240661,0.172106824925816,0.40579710144927533 18 | Akenfa 2,0.4045801526717554,0.05523809523809523,0.055837563451776644,0.638349514563107,0.5731707317073171,0.5057034220532318,0.24,0.43684210526315786,0.5429882306004388,0.6309090909090909,0.4881478505423866,0.7091988130563798,0.4202898550724637 19 | Agudama 1,0.2137404580152671,0.16317460317460317,0.16370558375634517,0.3689320388349515,0.6097560975609757,0.4961977186311787,0.52,1.0,0.5535607420706163,0.6436363636363636,0.5484130172760144,0.712166172106825,0.8550724637681157 20 | Agudama 2,0.3129770992366412,0.060952380952380945,0.06218274111675127,0.34466019417475735,0.46341463414634154,0.38973384030418246,0.56,0.6210526315789473,0.4159186116098145,0.5172727272727273,0.3933306548814785,0.6676557863501483,0.826086956521739 21 | Etegwe 2,0.2977099236641223,0.05523809523809523,0.055837563451776644,0.21116504854368934,0.07317073170731708,0.05133079847908743,0.0,0.13157894736842105,0.036904049471374406,0.09090909090909091,0.03173965447971075,0.08902077151335311,0.9999999999999998 22 | Okutukutu 1,0.1908396946564883,0.008888888888888884,0.010152284263959387,0.13106796116504854,0.07317073170731708,0.10836501901140683,0.44000000000000006,0.2421052631578947,0.04049471374426489,0.018181818181818188,0.03495379670550425,0.02670623145400594,0.3043478260869565 23 | Opolo 1,0.25190839694656475,0.004444444444444438,0.00507614213197969,0.7184466019417476,0.426829268292683,0.2965779467680608,0.76,0.42105263157894735,0.39876321563933764,0.42181818181818187,0.34873443149859384,0.3115727002967359,0.7826086956521738 24 | Opolo 2,0.5954198473282437,0.010793650793650793,0.012690355329949235,0.8058252427184466,0.6951219512195123,0.5057034220532318,0.84,0.5526315789473684,0.5755036904049471,0.5345454545454545,0.4479710727199679,0.712166172106825,0.4202898550724637 25 | Kpansia 2,0.1984732824427482,0.17206349206349206,0.17258883248730963,0.11893203883495146,0.07317073170731708,0.10456273764258553,0.36,0.08421052631578949,0.05485737083582684,0.08000000000000002,0.044596223382884714,0.11275964391691395,0.0 26 | Yenizue Epie 2,0.6106870229007635,0.21904761904761902,0.21954314720812182,0.5825242718446603,1.0,0.9999999999999999,0.76,0.7263157894736842,1.0,0.9999999999999999,1.0000000000000002,1.0,0.47826086956521735 27 | Amarata 2,0.8702290076335881,0.07428571428571429,0.07487309644670051,0.2645631067961165,0.17073170731707318,0.0,0.28,0.19473684210526315,0.11849192100538597,0.22181818181818183,0.10566492567296104,0.27002967359050445,0.002898550724637683 28 | Swail 2,0.6564885496183201,0.2596825396825397,0.26015228426395937,0.22815533980582525,0.13414634146341464,0.12927756653992392,0.56,0.5578947368421052,0.09036505086774385,0.16181818181818183,0.06548814785054238,0.10979228486646886,0.3478260869565217 29 | Akaba 2,0.2977099236641223,0.0,0.0,0.3276699029126213,0.3902439024390244,0.3536121673003802,0.44000000000000006,0.5315789473684212,0.34131258727308994,0.36,0.35476094817195664,0.28931750741839757,0.4202898550724637 30 | Ogbogoro 2,0.45801526717557284,0.052698412698412696,0.0532994923857868,0.2038834951456311,0.19512195121951223,0.0494296577946768,0.36,0.2421052631578947,0.15579493317374826,0.18545454545454546,0.09039775010044196,0.24629080118694355,0.014492753623188387 31 | Ogu 2,0.5190839694656493,0.06031746031746032,0.06091370558375634,0.6553398058252428,0.5365853658536586,0.4724334600760456,0.04000000000000001,0.1631578947368421,0.4594055455814881,0.46545454545454545,0.5202892728003214,0.5637982195845698,0.4637681159420289 32 | Akaibiri 1,0.4122137404580153,0.13206349206349205,0.13197969543147206,0.3398058252427185,0.07317073170731708,0.2091254752851711,0.56,0.0368421052631579,0.07181328545780968,0.10090909090909092,0.06950582563278429,0.1661721068249258,0.28985507246376807 33 | Akaibiri 1,0.7557251908396942,0.1765079365079365,0.17766497461928932,0.37135922330097093,0.14634146341463414,0.306083650190114,0.6,0.12631578947368421,0.1518053062038699,0.16181818181818183,0.15468059461631178,0.10385756676557864,0.3681159420289854 34 | Gbarantoru 1,0.3129770992366412,0.21777777777777776,0.21827411167512686,0.5631067961165049,0.14634146341463414,0.3536121673003802,0.68,0.2210526315789474,0.13066028326351486,0.22181818181818183,0.11048613901165127,0.2967359050445104,0.03768115942028985 35 | Gbarantoru 2,0.2824427480916025,0.32126984126984126,0.3223350253807106,0.5825242718446603,0.3170731707317074,0.42965779467680604,0.6,0.2,0.30779972072611206,0.3563636363636363,0.22900763358778625,0.32640949554896137,0.3043478260869565 36 | Gbarantoru 3,0.2748091603053435,0.18158730158730158,0.182741116751269,0.34466019417475735,0.14634146341463414,0.33935361216730037,0.36,0.1368421052631579,0.15858767205266305,0.06999999999999998,0.12414624347127362,0.172106824925816,0.36231884057971003 37 | Gbarantoru 4,0.24427480916030575,0.1822222222222222,0.182741116751269,0.3689320388349515,0.2682926829268293,0.3193916349809886,0.56,0.10526315789473684,0.14103331338519848,0.28181818181818186,0.18481317798312574,0.23442136498516322,0.031884057971014484 38 | Gbarantoru 5,0.4198473282442752,0.14793650793650792,0.14847715736040606,0.2888349514563107,0.048780487804878064,0.2585551330798479,0.6,0.08421052631578949,0.21404348693397168,0.044545454545454555,0.06709521896343915,0.3857566765578635,0.39130434782608686 39 | Ogbuna 1,0.6793893129770989,0.19174603174603175,0.19162436548223347,0.4684466019417477,0.06097560975609756,0.38212927756653986,0.56,0.17368421052631577,0.05425892679034511,0.09818181818181818,0.06870229007633588,0.18545994065281898,0.34492753623188394 40 | Ogbuna 2,0.5725190839694649,0.14412698412698413,0.1446700507614213,0.23786407766990292,0.07317073170731708,0.19581749049429653,0.6,0.08947368421052632,0.06882106523040094,0.1127272727272727,0.048613901165126566,0.12017804154302669,0.11014492753623184 41 | Ogbuna 3,0.7022900763358777,0.12825396825396823,0.1294416243654822,0.25970873786407767,0.03658536585365854,0.25570342205323193,0.8,0.10526315789473684,0.06044284859365648,0.07272727272727272,0.0,0.19584569732937682,0.36231884057971003 42 | Ogbuna 4,0.36641221374045774,0.13206349206349205,0.133248730964467,0.10436893203883496,0.048780487804878064,0.21863117870722432,0.48,0.05789473684210526,0.03490923598643525,0.07454545454545455,0.023704298915227018,0.9465875370919881,0.37971014492753613 43 | Okolobiri 1,0.4198473282442752,0.19365079365079363,0.19416243654822332,0.4854368932038836,0.6585365853658537,0.4334600760456273,0.56,0.17368421052631577,0.518850987432675,0.8145454545454546,0.5998392928887104,0.28189910979228483,0.4028985507246376 44 | Okolobiri 2,0.2977099236641223,0.24126984126984127,0.29949238578680204,0.6067961165048544,0.0975609756097561,0.4249049429657794,0.56,0.17894736842105263,0.1366447237183323,0.16,0.14985938127762155,0.08902077151335311,0.38260869565217387 45 | Okolobiri 3,0.7633587786259541,0.17206349206349206,0.17258883248730963,0.49271844660194186,0.048780487804878064,0.338403041825095,0.92,0.1631578947368421,0.05585477757829643,0.09818181818181818,0.03897147448774607,0.13056379821958455,0.3159420289855072 46 | Okolobiri 4,0.9389312977099236,0.1403174603174603,0.20431472081218274,0.3373786407766991,0.048780487804878064,0.3307984790874524,0.8,0.13157894736842105,0.05046878116896067,0.0018181818181818299,0.06870229007633588,0.09495548961424333,0.05217391304347824 47 | Okolobiri 5,0.778625954198473,0.14539682539682539,0.1459390862944162,0.36165048543689327,0.06097560975609756,0.3536121673003802,1.0,0.13157894736842105,0.07121484141232795,0.030909090909090914,0.04218561671353957,0.08902077151335311,0.3420289855072463 48 | Tombia 1,0.4885496183206106,0.2279365079365079,0.22842639593908629,0.5145631067961165,0.07317073170731708,0.30228136882129275,0.84,0.18421052631578946,0.06243766207859566,0.1127272727272727,0.08035355564483729,0.24480712166172106,0.3188405797101449 49 | Tombia 2,0.36641221374045774,0.146031746031746,0.14720812182741114,0.33009708737864074,0.15853658536585366,0.27756653992395436,0.72,0.06315789473684211,0.12966287652104524,0.23454545454545453,0.1137002812374448,0.4658753709198813,0.40579710144927533 50 | Tombia 3,0.3816793893129766,0.18984126984126984,0.19035532994923857,0.40533980582524276,0.29268292682926833,0.3536121673003802,0.76,0.047368421052631574,0.23877917414721717,0.3518181818181818,0.22539172358376858,0.49851632047477745,0.03768115942028985 51 | Tombia 4,0.05343511450381655,0.17777777777777776,0.17766497461928932,0.3810679611650486,0.30487804878048785,0.33935361216730037,0.6,0.0,0.25034909235986436,0.36909090909090914,0.23704298915227,0.14094955489614241,0.3942028985507246 52 | --------------------------------------------------------------------------------