├── 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 |
59 | - Regression: RF, XGBoost, LSTM
60 | - Classification: WQI class prediction
61 | - Clustering: K-Means for contamination grouping
62 | - Spatial Mapping: Heatmaps and cluster overlays
63 |
64 |
65 |
66 |
67 |
Key Findings
68 |
69 | - XGBoost outperformed others (R² = 0.95, AUC = 0.96)
70 | - Iron, Nitrate, and EC were key drivers
71 | - Majority classified as Poor or Very Poor
72 | - K-Means revealed three chemical clusters
73 |
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 |
--------------------------------------------------------------------------------