2023-11-04 19:10:52 +04:00
|
|
|
|
import pandas as pd
|
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
from sklearn.cluster import DBSCAN
|
|
|
|
|
from sklearn.preprocessing import StandardScaler
|
|
|
|
|
|
|
|
|
|
# Загрузка данных из .csv-файла
|
|
|
|
|
data = pd.read_csv('stroke_prediction_ds.csv')
|
|
|
|
|
|
|
|
|
|
# В датасете встречаются null-значения, поэтому предварительно очистим датасет от них
|
|
|
|
|
data = data.dropna()
|
|
|
|
|
|
|
|
|
|
# Выбор признаков (гипертензия и сердечные заболевания)
|
|
|
|
|
features = data[['age', 'avg_glucose_level']]
|
|
|
|
|
|
|
|
|
|
# Нормализация признаков перед применением алгоритма DBScan, что позволит алгоритму работать быстрее и давать лучшие
|
|
|
|
|
# результаты, так как данные будут приведены к одному виду на единой шкале
|
|
|
|
|
scaler = StandardScaler()
|
|
|
|
|
features = scaler.fit_transform(features)
|
|
|
|
|
|
|
|
|
|
# Создание экземпляра DBScan
|
|
|
|
|
dbscan = DBSCAN(eps=0.1, min_samples=5)
|
|
|
|
|
|
|
|
|
|
# Применение алгорита DBScan к данным
|
|
|
|
|
data['cluster'] = dbscan.fit_predict(features)
|
|
|
|
|
|
|
|
|
|
# Визуализация данных
|
|
|
|
|
plt.scatter(data['age'], data['avg_glucose_level'], c=data['cluster'])
|
|
|
|
|
plt.xlabel('Возраст')
|
|
|
|
|
plt.ylabel('Средний уровень сахара в крови')
|
|
|
|
|
plt.title('Кластеризация данных по возрасту и среднему уровню сахара в крови')
|
|
|
|
|
plt.show()
|