Введение

Качество воды является важнейшей проблемой для здоровья населения и окружающей среды. В этом анализе мы изучим набор данных, содержащий различные параметры качества воды, и спрогнозируем пригодность образцов воды для питья с помощью машинного обучения. Мы рассмотрим анализ данных, предварительную обработку, моделирование и оценку результатов.

Что такое питьевая вода и ее значение?

Питьевая способность означает качество воды, которое делает ее безопасной и пригодной для потребления человеком, в том числе для питья, приготовления пищи и личной гигиены. Питьевая вода не содержит вредных примесей и патогенов, которые могут вызвать проблемы со здоровьем при употреблении. Обеспечение пригодности источников питьевой воды имеет первостепенное значение для здоровья и благополучия населения.

Значение пригодности:

Общественное здравоохранение. Основное значение питьевой воды – защита общественного здоровья. Употребление загрязненной воды может привести к заболеваниям, передающимся через воду, таким как холера, дизентерия и лямблиоз. Питьевая вода снижает риск этих заболеваний, особенно в сообществах с ограниченным доступом к источникам чистой воды.

Профилактика заболеваний, передающихся через воду. Питьевая вода имеет решающее значение для предотвращения заболеваний, передающихся через воду, особенно в развивающихся регионах, где доступ к безопасной питьевой воде может быть затруднен. Обеспечивая питьевую воду, правительства и организации могут снизить заболеваемость болезнями, передающимися через воду, и улучшить общее состояние здоровья.

Безопасность пищевых продуктов. Питьевая вода необходима не только для питья, но и для приготовления пищи. Загрязненная вода, используемая при приготовлении пищи, может привести к болезням пищевого происхождения, что делает ее жизненно важной для кулинарной безопасности.

Гигиена и санитария. Питьевая вода необходима для личной гигиены, включая купание и мытье рук. Доступ к чистой воде способствует соблюдению правил гигиены, что, в свою очередь, снижает распространение болезней.

Сельское хозяйство и промышленность. Питьевая вода также необходима для сельскохозяйственных и промышленных процессов. Многие промышленные процессы требуют чистой воды, а загрязненная вода может повредить оборудование и повлиять на качество продукции.

Охрана окружающей среды. Обеспечение пригодности воды для питья распространяется и на защиту окружающей среды. Загрязнение и контаминация источников воды могут нанести вред водным экосистемам, нарушить биоразнообразие и повлиять на водную жизнь. Поддержание источников питьевой воды помогает сохранить экосистемы и водную среду обитания.

Воздействие на окружающую среду:

Загрязнение воды. Загрязнение источников воды, часто вызванное промышленными сбросами, сельскохозяйственными стоками или неправильной утилизацией отходов, может иметь серьезные последствия для окружающей среды. Загрязненная вода может нанести вред водной жизни, разрушить экосистемы и сократить биоразнообразие.

Эвтрофикация. Чрезмерное содержание питательных веществ в водоемах, таких как азот и фосфор из сельскохозяйственных стоков или сточных вод, может привести к эвтрофикации. Этот процесс вызывает цветение водорослей, истощение кислорода и гибель водных организмов.

Разрушение среды обитания. Загрязнение воды может разрушить среду обитания водных видов, что приведет к сокращению популяций и потенциально угрожает видам.

Загрязнение подземных вод. Загрязнение подземных вод, которые являются важным источником питьевой воды, может сохраняться в течение длительного периода времени и оказывать воздействие на окружающую среду. Очистка загрязненных грунтовых вод может быть сложной и дорогостоящей задачей.

Изменение климата. Изменение климата может повлиять на качество воды, изменяя температурный режим, количество осадков и расход воды. Эти изменения могут повлиять на распределение загрязняющих веществ и качество водных источников.

Начало работы

Импортируем необходимые библиотеки и загружаем датасет:

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import plotly.express as px
import missingno as msno
# Load the dataset
df = pd.read_csv("/content/drive/MyDrive/Ecology/water_potability.csv")

Анализ данных

Давайте начнем с быстрого просмотра первых пяти строк и некоторой описательной статистики набора данных:

df.head()
df.describe().T

Также проверяем наличие пропущенных значений и визуализируем их:

msno.matrix(df)

О переменных

ph: В этом столбце указан уровень pH пробы воды. pH – это мера кислотности или щелочности воды.

Жесткость:Жесткость – это мера концентрации ионов кальция и магния в воде. Это указывает на способность воды образовывать отложения накипи.

Твердые вещества: Твердые вещества относятся к общему количеству растворенных твердых веществ (TDS) в воде, которые включают различные минералы, соли и органические вещества.

Хлорамины. Хлорамины — это химические соединения, которые часто используются в качестве дезинфицирующих средств при очистке питьевой воды. В этом столбце измеряется их концентрация.

Сульфат. Сульфат – это растворенная соль, которая естественным образом встречается в источниках воды. Оно измеряется в этом столбце.

Электропроводность. Электропроводность – это мера способности воды проводить электрический ток, на которую может влиять присутствие ионов и минералов.

Organic_carbon: В этом столбце указана концентрация органических соединений углерода в воде. Органический углерод может влиять на качество воды и процессы очистки.

Тригалометаны. Тригалометаны представляют собой побочные продукты дезинфекции, которые могут образовываться при реакции хлора или других дезинфицирующих средств с органическими веществами в воде.

Мутность. Мутность измеряет мутность или мутность воды из-за присутствия взвешенных частиц, таких как осадок или микроорганизмы.

Питьевая способность. Это целевая переменная, указывающая, пригодна ли проба воды для питья (безопасна для питья) или нет. Это двоичный столбец со значениями 1 (питьевой) и 0 (непитьевой).

Анализ зависимых переменных

Мы создаем круговую диаграмму, чтобы визуализировать распределение пригодности для питья в наборе данных:

potability = pd.DataFrame(df["Potability"].value_counts())
# Create and display a pie chart

Чтобы понять распределение проб питьевой и непитьевой воды, мы создали круговую диаграмму. На диаграмме показана доля каждого класса в наборе данных, что указывает на разумный баланс между пробами питьевой и непитьевой воды.

Корреляционный анализ

Проверяем корреляцию между признаками с помощью карты кластеров:

sns.clustermap(df.corr(), cmap="vlag", dendrogram_ratio=(0.1, 0.2), annot=True, linewidths=.8, figsize=(9, 10))

Рассчитав корреляционную матрицу и визуализировав ее с помощью кластерной карты, мы оценили взаимосвязь между различными параметрами качества воды. Корреляционный анализ показал, как признаки связаны друг с другом. Некоторые функции могут демонстрировать сильные положительные или отрицательные корреляции, тогда как другие могут быть относительно независимыми.

Распределение функций

Визуализируем распределение признаков для проб питьевой и непитьевой воды:

# Create subplots for feature distributions

Мы сравнили распределение показателей качества воды как для питьевой, так и для непитьевой проб воды. Этот анализ был направлен на выявление различий в распределении признаков между двумя классами. Это может помочь нам понять, какие характеристики могут быть более важными при определении пригодности воды для питья.

предварительная обработка; Обработка отсутствующих значений

Мы обрабатываем пропущенные значения, заменяя их средним значением соответствующих столбцов:

for col in ["ph", "Sulfate", "Trihalomethanes"]:
    df[col].fillna(value=df[col].mean(), inplace=True)

Обработка пропущенных значений важна для целостности данных. Мы решили вменить пропущенные значения средним значением соответствующих столбцов. Такой подход позволил нам сохранить ценные данные и одновременно решить проблему их пропажи.

Поезд-Тестовый Сплит

Мы разбили данные на обучающую и тестовую выборки:

X = df.drop("Potability", axis=1).values
y = df["Potability"].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=3)

Мы разделили набор данных на наборы для обучения и тестирования, чтобы облегчить обучение и оценку модели. Обучающий набор использовался для обучения моделей машинного обучения, а тестовый набор позволил нам оценить их производительность на невидимых данных.

Моделирование данных

Мы используем два классификатора: «Дерево решений» и «Случайный лес» для моделирования и оцениваем их показатели точности:

models = [("Decision Tree Classifier", DecisionTreeClassifier(max_depth=3)),
         ("Random Forest Classifier", RandomForestClassifier())]
# Loop through models, train, predict, and evaluate

Модели машинного обучения. Для прогнозирования пригодности воды для питья использовались два алгоритма классификации: классификатор дерева решений и классификатор случайного леса. Эти модели были обучены на обучающих данных и оценены с использованием показателей точности.

  • Классификатор дерева решений. Дерево решений было визуализировано, что дает представление о том, как оно делает прогнозы на основе значений признаков. Эта модель достигла показателя точности примерно 0,57, что указывает на ее способность классифицировать образцы питьевой и непитьевой воды.
  • Классификатор случайного леса. Также использовался случайный лесной классификатор, более сложная ансамблевая модель. После настройки гиперпараметра он достиг показателя точности примерно 0,62, что немного выше, чем у классификатора дерева решений. Это говорит о том, что модель случайного леса обеспечивает лучший баланс между точностью и сложностью модели.

Визуализация дерева решений

Визуализируем классификатор Дерева решений:

df_clf = models[0][1]
# Visualize the Decision Tree

Классификатор случайного леса и настройка гиперпараметра

Мы выполняем настройку гиперпараметров для классификатора случайного леса:

# Define hyperparameter grid and perform Randomized Search CV

Ремоделирование

Мы переобучаем классификатор случайного леса с лучшими параметрами:

best_params = {'n_estimators': 100, 'max_features': 'log2', 'max_depth': 16}
new_model = RandomForestClassifier(**best_params)
new_model.fit(X_train, y_train)

Заключение

В целом анализ дал несколько важных результатов:

Мы получили полное представление о характеристиках, распределении и корреляциях набора данных о качестве воды.

Мы успешно обработали пропущенные значения, чтобы обеспечить целостность данных.

Модели дерева решений и случайного леса продемонстрировали способность прогнозировать питьевую воду на основе предоставленных функций.

Классификатор случайного леса превзошел классификатор дерева решений с точки зрения точности, что указывает на то, что он обеспечивает более точную классификацию проб питьевой и непитьевой воды.

Эти результаты являются многообещающими и дают ценную информацию для оценки качества воды и прогнозирования ее пригодности для питья. Однако для повышения точности прогнозов качества воды можно изучить дальнейшие уточнения, разработку характеристик и оценку модели. Понимание и обеспечение безопасных источников воды по-прежнему имеет важное значение для общественного здравоохранения и охраны окружающей среды, что делает этот анализ решающим шагом на пути к достижению этих целей.

Найдите полный рабочий код здесь

Чтобы узнать больше интересного, нажмите здесь

Рекомендации

  1. Документация Pandas: https://pandas.pydata.org/pandas-docs/stable/index.html
  2. Документация Seaborn: https://seaborn.pydata.org/
  3. Документация Scikit-Learn: https://scikit-learn.org/stable/documentation.html
  4. Документация Plotly Express: https://plotly.com/python/plotly-express/

На простом английском языке

Спасибо, что вы являетесь частью нашего сообщества! Прежде чем уйти: