Merge pull request 'podkorytova_yulia_lab_4 is ready' (#139) from podkorytova_yulia_lab_4 into main

Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/139
This commit is contained in:
Alexey 2023-11-06 21:22:56 +04:00
commit 4973adb1f2
5 changed files with 88783 additions and 0 deletions

View File

@ -0,0 +1,39 @@
# Лабораторная работа 4. Кластеризация
### Задание на лабораторную:
Использовать метод кластеризации по варианту для данных из курсовой работы, самостоятельно сформулировав задачу. Интерпретировать результаты и оценить, насколько хорошо он подходит для решения сформулированной вами задачи.
**Вариант 0 (20).**
Алгоритм кластеризации: K-means.
**Набор данных:** "Moscow tutors". Ссылка: https://www.kaggle.com/datasets/vadimantipov/moscow-tutors
**Задача:** разбить репетиторов на 3 группы со схожими характеристиками (стоимость занятия, оценка, количество отзывов и опыт).
***
### Как запустить лабораторную работу:
Для запуска лабораторной работы необходимо открыть файл `lr4.py`, нажать на ПКМ и в выпадающем списке выбрать опцию "Run".
***
### Технологии:
**Pandas** - это библиотека на языке Python, которая предоставляет удобные и эффективные инструменты для обработки и анализа данных. Она предоставляет высокоуровневые структуры данных, такие как DataFrame, которые позволяют легко и гибко работать с табличными данными.
**Matplotlib** - это библиотека визуализации данных на языке программирования Python, которая предоставляет широкий спектр инструментов для создания различных типов графиков, диаграмм и визуализаций данных.
**Scikit-learn (Sklearn)** - это библиотека для языка программирования Python, которая предоставляет инструменты для разработки и применения различных алгоритмов машинного обучения, включая классификацию, регрессию, кластеризацию, снижение размерности и многое другое. Scikit-learn также предлагает функции для предобработки данных, оценки моделей и выбора наилучших параметров.
***
### Что делает лабораторная работа:
В лабораторной работе решается задача кластеризации методом K-means на наборе данных о московских репетиторах.
Сначала загружаются данные из файла `tutors.csv`, пустые значения убираются из выборки.
После выполняется кластеризация методом K-means для выбранных столбцов выборки, происходит получение меток и центров кластеров.
Результатом лабораторной работы являются разбитые на кластеры данные и оценка качества кластеризации, выведенные в консоль, и график, на котором каждая точка данных помечена цветом, соответствующим ее кластеру, а центры кластеров обозначены красными крестиками.
***
### Пример выходных данных:
***Кластеры и оценка кластеризации***
![](consoleRes.jpg)
***График***
![](plotRes.jpg)
***
**Вывод**: результатом лабораторной работы стали 3 группы репетиторов, полученные методом кластеризации K-means.
Группы были сформированы на основе схожих характеристик по стоимости занятия, оценке репетитора, количеству отзывов и опыту работы.
Оценка качества кластеризации была получена при помощи коэффициента силуэта, который показал результат *0.59*,
так как коэффициент может варьироваться от -1 до 1, можно сказать, что оценка высокая и метод K-means подходит для решения поставленной задачи.

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -0,0 +1,44 @@
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
data = pd.read_csv('tutors.csv', index_col=0)
data = data.dropna()
features = ['Price', 'Score', 'Reviews_number', 'Experience']
X = data[features].values
# метод K-means
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
# получение меток кластеров
labels = kmeans.labels_
data['Cluster'] = labels
# получение центров кластеров
cluster_centers = kmeans.cluster_centers_
# подсчет значений в каждом кластере
cluster_counts = data['Cluster'].value_counts()
for cluster in sorted(data['Cluster'].unique()):
cluster_data = data[data['Cluster'] == cluster]
print(f"-----Cluster № {cluster + 1} -----")
print(f"Number of tutors: {cluster_counts[cluster]}")
print("Cluster centers:")
for f, c in zip(features, cluster_centers[cluster]):
print(f"{f} - {c:.2f}")
print()
# оценка качества с помощью коэффициента силуэта
silhouette = silhouette_score(X, labels)
print(f"Коэффициент силуэта: {silhouette:.2f}")
# отображение результатов на графике
plt.scatter(data['Score'], data['Price'], c=labels)
plt.scatter(cluster_centers[:, 1], cluster_centers[:, 0], marker='x', color='red')
plt.xlabel('Score')
plt.ylabel('Price')
plt.title('K-means clustering')
plt.show()

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

File diff suppressed because it is too large Load Diff