1972 lines
2.7 MiB
Plaintext
Raw Normal View History

2024-12-05 13:18:23 +04:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Лаб. 5"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Overall</th>\n",
" <th>Potential</th>\n",
" <th>ShortPassing</th>\n",
" <th>Jersey Number</th>\n",
" <th>Age</th>\n",
" <th>Dribbling</th>\n",
" <th>SprintSpeed</th>\n",
" <th>International Reputation</th>\n",
" <th>Skill Moves</th>\n",
" <th>Weak Foot</th>\n",
" <th>Club</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>94.0</td>\n",
" <td>94</td>\n",
" <td>90.0</td>\n",
" <td>10.0</td>\n",
" <td>31.0</td>\n",
" <td>97.0</td>\n",
" <td>86.0</td>\n",
" <td>5.0</td>\n",
" <td>4.0</td>\n",
" <td>4.0</td>\n",
" <td>FC Barcelona</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>94.0</td>\n",
" <td>94</td>\n",
" <td>81.0</td>\n",
" <td>7.0</td>\n",
" <td>33.0</td>\n",
" <td>88.0</td>\n",
" <td>91.0</td>\n",
" <td>5.0</td>\n",
" <td>5.0</td>\n",
" <td>4.0</td>\n",
" <td>Juventus</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>92.0</td>\n",
" <td>93</td>\n",
" <td>84.0</td>\n",
" <td>10.0</td>\n",
" <td>26.0</td>\n",
" <td>96.0</td>\n",
" <td>90.0</td>\n",
" <td>5.0</td>\n",
" <td>5.0</td>\n",
" <td>5.0</td>\n",
" <td>Paris Saint-Germain</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>91.0</td>\n",
" <td>93</td>\n",
" <td>50.0</td>\n",
" <td>1.0</td>\n",
" <td>27.0</td>\n",
" <td>18.0</td>\n",
" <td>58.0</td>\n",
" <td>4.0</td>\n",
" <td>1.0</td>\n",
" <td>3.0</td>\n",
" <td>Manchester United</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>91.0</td>\n",
" <td>92</td>\n",
" <td>92.0</td>\n",
" <td>7.0</td>\n",
" <td>27.0</td>\n",
" <td>86.0</td>\n",
" <td>76.0</td>\n",
" <td>4.0</td>\n",
" <td>4.0</td>\n",
" <td>5.0</td>\n",
" <td>Manchester City</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Overall Potential ShortPassing Jersey Number Age Dribbling \\\n",
"0 94.0 94 90.0 10.0 31.0 97.0 \n",
"1 94.0 94 81.0 7.0 33.0 88.0 \n",
"2 92.0 93 84.0 10.0 26.0 96.0 \n",
"3 91.0 93 50.0 1.0 27.0 18.0 \n",
"4 91.0 92 92.0 7.0 27.0 86.0 \n",
"\n",
" SprintSpeed International Reputation Skill Moves Weak Foot \\\n",
"0 86.0 5.0 4.0 4.0 \n",
"1 91.0 5.0 5.0 4.0 \n",
"2 90.0 5.0 5.0 5.0 \n",
"3 58.0 4.0 1.0 3.0 \n",
"4 76.0 4.0 4.0 5.0 \n",
"\n",
" Club \n",
"0 FC Barcelona \n",
"1 Juventus \n",
"2 Paris Saint-Germain \n",
"3 Manchester United \n",
"4 Manchester City "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Overall</th>\n",
" <th>Potential</th>\n",
" <th>ShortPassing</th>\n",
" <th>Jersey Number</th>\n",
" <th>Age</th>\n",
" <th>Dribbling</th>\n",
" <th>SprintSpeed</th>\n",
" <th>International Reputation</th>\n",
" <th>Skill Moves</th>\n",
" <th>Weak Foot</th>\n",
" <th>Club</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>18202</th>\n",
" <td>47.0</td>\n",
" <td>65</td>\n",
" <td>49.0</td>\n",
" <td>22.0</td>\n",
" <td>19.0</td>\n",
" <td>42.0</td>\n",
" <td>57.0</td>\n",
" <td>1.0</td>\n",
" <td>2.0</td>\n",
" <td>2.0</td>\n",
" <td>Crewe Alexandra</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18203</th>\n",
" <td>47.0</td>\n",
" <td>63</td>\n",
" <td>43.0</td>\n",
" <td>21.0</td>\n",
" <td>19.0</td>\n",
" <td>39.0</td>\n",
" <td>39.0</td>\n",
" <td>1.0</td>\n",
" <td>2.0</td>\n",
" <td>2.0</td>\n",
" <td>Trelleborgs FF</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18204</th>\n",
" <td>47.0</td>\n",
" <td>67</td>\n",
" <td>38.0</td>\n",
" <td>33.0</td>\n",
" <td>16.0</td>\n",
" <td>45.0</td>\n",
" <td>69.0</td>\n",
" <td>1.0</td>\n",
" <td>2.0</td>\n",
" <td>3.0</td>\n",
" <td>Cambridge United</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18205</th>\n",
" <td>47.0</td>\n",
" <td>66</td>\n",
" <td>42.0</td>\n",
" <td>34.0</td>\n",
" <td>17.0</td>\n",
" <td>51.0</td>\n",
" <td>60.0</td>\n",
" <td>1.0</td>\n",
" <td>2.0</td>\n",
" <td>3.0</td>\n",
" <td>Tranmere Rovers</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18206</th>\n",
" <td>46.0</td>\n",
" <td>66</td>\n",
" <td>48.0</td>\n",
" <td>33.0</td>\n",
" <td>16.0</td>\n",
" <td>43.0</td>\n",
" <td>55.0</td>\n",
" <td>1.0</td>\n",
" <td>2.0</td>\n",
" <td>3.0</td>\n",
" <td>Tranmere Rovers</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Overall Potential ShortPassing Jersey Number Age Dribbling \\\n",
"18202 47.0 65 49.0 22.0 19.0 42.0 \n",
"18203 47.0 63 43.0 21.0 19.0 39.0 \n",
"18204 47.0 67 38.0 33.0 16.0 45.0 \n",
"18205 47.0 66 42.0 34.0 17.0 51.0 \n",
"18206 46.0 66 48.0 33.0 16.0 43.0 \n",
"\n",
" SprintSpeed International Reputation Skill Moves Weak Foot \\\n",
"18202 57.0 1.0 2.0 2.0 \n",
"18203 39.0 1.0 2.0 2.0 \n",
"18204 69.0 1.0 2.0 3.0 \n",
"18205 60.0 1.0 2.0 3.0 \n",
"18206 55.0 1.0 2.0 3.0 \n",
"\n",
" Club \n",
"18202 Crewe Alexandra \n",
"18203 Trelleborgs FF \n",
"18204 Cambridge United \n",
"18205 Tranmere Rovers \n",
"18206 Tranmere Rovers "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Количество уникальных клубов: 652\n",
"Фильтрованная таблица:\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Overall</th>\n",
" <th>Potential</th>\n",
" <th>ShortPassing</th>\n",
" <th>Jersey Number</th>\n",
" <th>Age</th>\n",
" <th>Dribbling</th>\n",
" <th>SprintSpeed</th>\n",
" <th>International Reputation</th>\n",
" <th>Skill Moves</th>\n",
" <th>Weak Foot</th>\n",
" <th>Club</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>94.0</td>\n",
" <td>94</td>\n",
" <td>90.0</td>\n",
" <td>10.0</td>\n",
" <td>31.0</td>\n",
" <td>97.0</td>\n",
" <td>86.0</td>\n",
" <td>5.0</td>\n",
" <td>4.0</td>\n",
" <td>4.0</td>\n",
" <td>FC Barcelona</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>94.0</td>\n",
" <td>94</td>\n",
" <td>81.0</td>\n",
" <td>7.0</td>\n",
" <td>33.0</td>\n",
" <td>88.0</td>\n",
" <td>91.0</td>\n",
" <td>5.0</td>\n",
" <td>5.0</td>\n",
" <td>4.0</td>\n",
" <td>Juventus</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>91.0</td>\n",
" <td>91</td>\n",
" <td>89.0</td>\n",
" <td>10.0</td>\n",
" <td>27.0</td>\n",
" <td>95.0</td>\n",
" <td>88.0</td>\n",
" <td>4.0</td>\n",
" <td>4.0</td>\n",
" <td>4.0</td>\n",
" <td>Chelsea</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>91.0</td>\n",
" <td>91</td>\n",
" <td>93.0</td>\n",
" <td>10.0</td>\n",
" <td>32.0</td>\n",
" <td>90.0</td>\n",
" <td>72.0</td>\n",
" <td>4.0</td>\n",
" <td>4.0</td>\n",
" <td>4.0</td>\n",
" <td>Real Madrid</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>91.0</td>\n",
" <td>91</td>\n",
" <td>82.0</td>\n",
" <td>9.0</td>\n",
" <td>31.0</td>\n",
" <td>87.0</td>\n",
" <td>75.0</td>\n",
" <td>5.0</td>\n",
" <td>3.0</td>\n",
" <td>4.0</td>\n",
" <td>FC Barcelona</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Overall Potential ShortPassing Jersey Number Age Dribbling \\\n",
"0 94.0 94 90.0 10.0 31.0 97.0 \n",
"1 94.0 94 81.0 7.0 33.0 88.0 \n",
"5 91.0 91 89.0 10.0 27.0 95.0 \n",
"6 91.0 91 93.0 10.0 32.0 90.0 \n",
"7 91.0 91 82.0 9.0 31.0 87.0 \n",
"\n",
" SprintSpeed International Reputation Skill Moves Weak Foot Club \n",
"0 86.0 5.0 4.0 4.0 FC Barcelona \n",
"1 91.0 5.0 5.0 4.0 Juventus \n",
"5 88.0 4.0 4.0 4.0 Chelsea \n",
"6 72.0 4.0 4.0 4.0 Real Madrid \n",
"7 75.0 5.0 3.0 4.0 FC Barcelona "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Фильтрованные клубы: ['FC Barcelona', 'Juventus', 'Chelsea', 'Real Madrid', 'Napoli']\n",
"Количество уникальных клубов: 5\n"
]
}
],
"source": [
"import pandas as pd\n",
"\n",
"# Загрузка датасета\n",
"df = pd.read_csv(\"data/kl.csv\")\n",
"\n",
"# Выбираем числовые столбцы и категориальный столбец \"Club\"\n",
"numerical_columns = [\n",
" \"Overall\",\n",
" \"Potential\",\n",
" \"ShortPassing\",\n",
" \"Jersey Number\",\n",
" \"Age\",\n",
" \"Dribbling\",\n",
" \"SprintSpeed\",\n",
" \"International Reputation\",\n",
" \"Skill Moves\",\n",
" \"Weak Foot\",\n",
"]\n",
"categorical_column = \"Club\"\n",
"\n",
"# Создаем новый DataFrame с выбранными столбцами\n",
"selected_columns = numerical_columns + [categorical_column]\n",
"df_selected = df[selected_columns]\n",
"\n",
"# Отображаем первые и последние строки\n",
"display(df_selected.head())\n",
"display(df_selected.tail())\n",
"\n",
"# Уникальные значения в категориальном столбце \"Club\"\n",
"unique_clubs = df_selected[categorical_column].unique()\n",
"print(f\"Количество уникальных клубов: {len(unique_clubs)}\")\n",
"\n",
"# Фильтруем для оставления только 5 клубов\n",
"clubs_to_keep = [\n",
" \"FC Barcelona\",\n",
" \"Juventus\",\n",
" \"Chelsea\",\n",
" \"Real Madrid\",\n",
" \"Napoli\",\n",
"]\n",
"df_filtered = df_selected[df_selected[\"Club\"].isin(clubs_to_keep)].copy()\n",
"\n",
"print(\"Фильтрованная таблица:\")\n",
"display(df_filtered.head())\n",
"\n",
"print(f\"Фильтрованные клубы: {clubs_to_keep}\")\n",
"unique_clubs = df_filtered[categorical_column].unique()\n",
"print(f\"Количество уникальных клубов: {len(unique_clubs)}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Визуализация данных (с учетом особенностей)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Overall</th>\n",
" <th>Potential</th>\n",
" <th>ShortPassing</th>\n",
" <th>Jersey Number</th>\n",
" <th>Age</th>\n",
" <th>Dribbling</th>\n",
" <th>SprintSpeed</th>\n",
" <th>International Reputation</th>\n",
" <th>Skill Moves</th>\n",
" <th>Weak Foot</th>\n",
" <th>Club</th>\n",
" <th>ClubIndex</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>94.0</td>\n",
" <td>94</td>\n",
" <td>90.0</td>\n",
" <td>10.0</td>\n",
" <td>31.0</td>\n",
" <td>97.0</td>\n",
" <td>86.0</td>\n",
" <td>5.0</td>\n",
" <td>4.0</td>\n",
" <td>4.0</td>\n",
" <td>FC Barcelona</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>94.0</td>\n",
" <td>94</td>\n",
" <td>81.0</td>\n",
" <td>7.0</td>\n",
" <td>33.0</td>\n",
" <td>88.0</td>\n",
" <td>91.0</td>\n",
" <td>5.0</td>\n",
" <td>5.0</td>\n",
" <td>4.0</td>\n",
" <td>Juventus</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>91.0</td>\n",
" <td>91</td>\n",
" <td>89.0</td>\n",
" <td>10.0</td>\n",
" <td>27.0</td>\n",
" <td>95.0</td>\n",
" <td>88.0</td>\n",
" <td>4.0</td>\n",
" <td>4.0</td>\n",
" <td>4.0</td>\n",
" <td>Chelsea</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>91.0</td>\n",
" <td>91</td>\n",
" <td>93.0</td>\n",
" <td>10.0</td>\n",
" <td>32.0</td>\n",
" <td>90.0</td>\n",
" <td>72.0</td>\n",
" <td>4.0</td>\n",
" <td>4.0</td>\n",
" <td>4.0</td>\n",
" <td>Real Madrid</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>91.0</td>\n",
" <td>91</td>\n",
" <td>82.0</td>\n",
" <td>9.0</td>\n",
" <td>31.0</td>\n",
" <td>87.0</td>\n",
" <td>75.0</td>\n",
" <td>5.0</td>\n",
" <td>3.0</td>\n",
" <td>4.0</td>\n",
" <td>FC Barcelona</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Overall Potential ShortPassing Jersey Number Age Dribbling \\\n",
"0 94.0 94 90.0 10.0 31.0 97.0 \n",
"1 94.0 94 81.0 7.0 33.0 88.0 \n",
"5 91.0 91 89.0 10.0 27.0 95.0 \n",
"6 91.0 91 93.0 10.0 32.0 90.0 \n",
"7 91.0 91 82.0 9.0 31.0 87.0 \n",
"\n",
" SprintSpeed International Reputation Skill Moves Weak Foot \\\n",
"0 86.0 5.0 4.0 4.0 \n",
"1 91.0 5.0 5.0 4.0 \n",
"5 88.0 4.0 4.0 4.0 \n",
"6 72.0 4.0 4.0 4.0 \n",
"7 75.0 5.0 3.0 4.0 \n",
"\n",
" Club ClubIndex \n",
"0 FC Barcelona 0 \n",
"1 Juventus 1 \n",
"5 Chelsea 2 \n",
"6 Real Madrid 3 \n",
"7 FC Barcelona 0 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x1200 with 6 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"\n",
"def draw_data_2d(data, x_col, y_col, labels, label_names, subplot, color=None):\n",
" # Если задан параметр color, используем его для всех точек\n",
" if color is not None:\n",
" subplot.scatter(data[x_col], data[y_col], color=color, alpha=0.7)\n",
" else:\n",
" # Если color не задан, рисуем для каждой категории свой цвет\n",
" for idx, label_name in enumerate(label_names):\n",
" filtered = data[data[\"ClubIndex\"] == idx] # Фильтрация данных по метке\n",
" subplot.scatter(\n",
" filtered[x_col], filtered[y_col], label=label_name, alpha=0.7\n",
" )\n",
"\n",
" # Оформление графика\n",
" subplot.set_xlabel(x_col)\n",
" subplot.set_ylabel(y_col)\n",
" subplot.legend()\n",
"\n",
"\n",
"# Получаем список уникальных клубов и их индексы\n",
"clubs = df_filtered[\"Club\"].unique()\n",
"club_to_index = {club: idx for idx, club in enumerate(clubs)}\n",
"\n",
"# Добавляем столбец ClubIndex\n",
"df_filtered[\"ClubIndex\"] = df_filtered[\"Club\"].map(club_to_index)\n",
"\n",
"# Проверяем результат\n",
"display(df_filtered.head())\n",
"\n",
"# Подготовка данных для визуализации\n",
"y = df_filtered[\"ClubIndex\"]\n",
"y_names = clubs\n",
"\n",
"# Визуализация\n",
"plt.figure(figsize=(16, 12))\n",
"draw_data_2d(df_filtered, \"Overall\", \"Age\", y.tolist(), y_names, plt.subplot(3, 2, 1))\n",
"draw_data_2d(\n",
" df_filtered,\n",
" \"Potential\",\n",
" \"ShortPassing\",\n",
" y.tolist(),\n",
" y_names,\n",
" plt.subplot(3, 2, 2),\n",
")\n",
"draw_data_2d(\n",
" df_filtered, \"Overall\", \"Potential\", y.tolist(), y_names, plt.subplot(3, 2, 3)\n",
")\n",
"draw_data_2d(\n",
" df_filtered,\n",
" \"Age\",\n",
" \"ShortPassing\",\n",
" y.tolist(),\n",
" y_names,\n",
" plt.subplot(3, 2, 4),\n",
")\n",
"draw_data_2d(df_filtered, \"Age\", \"Potential\", y.tolist(), y_names, plt.subplot(3, 2, 5))\n",
"draw_data_2d(\n",
" df_filtered,\n",
" \"Overall\",\n",
" \"ShortPassing\",\n",
" y.tolist(),\n",
" y_names,\n",
" plt.subplot(3, 2, 6),\n",
")\n",
"\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Визуализация данных (без учета особенностей)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\Ruslan\\AppData\\Local\\Temp\\ipykernel_14468\\2566301338.py:19: UserWarning: No artists with labels found to put in legend. Note that artists whose label start with an underscore are ignored when legend() is called with no argument.\n",
" subplot.legend()\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x1200 with 6 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Создаём фигуру\n",
"plt.figure(figsize=(16, 12))\n",
"\n",
"# Указываем цвет для точек\n",
"color = \"blue\"\n",
"\n",
"draw_data_2d(\n",
" df_filtered,\n",
" \"Overall\",\n",
" \"Age\",\n",
" y.tolist(),\n",
" y_names,\n",
" plt.subplot(3, 2, 1),\n",
" color=color,\n",
")\n",
"draw_data_2d(\n",
" df_filtered,\n",
" \"Potential\",\n",
" \"ShortPassing\",\n",
" y.tolist(),\n",
" y_names,\n",
" plt.subplot(3, 2, 2),\n",
" color=color,\n",
")\n",
"draw_data_2d(\n",
" df_filtered,\n",
" \"Overall\",\n",
" \"Potential\",\n",
" y.tolist(),\n",
" y_names,\n",
" plt.subplot(3, 2, 3),\n",
" color=color,\n",
")\n",
"draw_data_2d(\n",
" df_filtered,\n",
" \"Age\",\n",
" \"ShortPassing\",\n",
" y.tolist(),\n",
" y_names,\n",
" plt.subplot(3, 2, 4),\n",
" color=color,\n",
")\n",
"draw_data_2d(\n",
" df_filtered,\n",
" \"Age\",\n",
" \"Potential\",\n",
" y.tolist(),\n",
" y_names,\n",
" plt.subplot(3, 2, 5),\n",
" color=color,\n",
")\n",
"draw_data_2d(\n",
" df_filtered,\n",
" \"Overall\",\n",
" \"ShortPassing\",\n",
" y.tolist(),\n",
" y_names,\n",
" plt.subplot(3, 2, 6),\n",
" color=color,\n",
")\n",
"\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Иерархическая агломеративная кластеризация (+дендрограмма)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from utils_clusters import get_linkage_matrix, run_agglomerative\n",
"from visual import draw_dendrogram\n",
"from scipy.cluster import hierarchy\n",
"\n",
"df_filtered_noclub = df_filtered.drop(columns=[\"Club\"])\n",
"df_filtered_noclub_nona = df_filtered_noclub.dropna()\n",
"tree = run_agglomerative(df_filtered_noclub_nona)\n",
"linkage_matrix = get_linkage_matrix(tree)\n",
"draw_dendrogram(linkage_matrix)\n",
"\n",
"linkage_matrix = get_linkage_matrix(tree)\n",
"draw_dendrogram(linkage_matrix)\n",
"\n",
"result = hierarchy.fcluster(linkage_matrix, 10, criterion=\"distance\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Получение результатов иерархической кластеризации (+сравнение со случайным разбиением)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"ARI между иерархической кластеризацией и реальными метками: 0.16557998538946547\n",
"ARI между случайным разбиением и реальными метками: -0.0059212373344222965\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABjYAAAMWCAYAAABStL81AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3gc1dn38e/MVu2qN/feMSVgusGmmE4ghB4SWkh4CSSEkEBIQoAkBILhoQYeCDx0CC20EIrpzaEXU9xl3It62b5z3j/GEl5LsiXb0mrt3+e69hI7Mztz72qRz5n7nHNbxhiDiIiIiIiIiIiIiIhIDrCzHYCIiIiIiIiIiIiIiEhXKbEhIiIiIiIiIiIiIiI5Q4kNERERERERERERERHJGUpsiIiIiIiIiIiIiIhIzlBiQ0REREREREREREREcoYSGyIiIiIiIiIiIiIikjOU2BARERERERERERERkZyhxIaIiIiIiIiIiIiIiOQMJTZERERERERERES2sPr6eubPn08qlcp2KCIiWx0lNkREREREREREJENzczM33HBD2/P6+nr+/ve/Zy+gHJBMJrnmmmvYaaedCAQClJSUMGbMGF555ZVshyYistVRYkNEesQ999yDZVl8+OGH7fadfvrpWJbF9ttvn4XIREREREREesaCBQs4++yzGTlyJMFgkMLCQiZPnsyNN95INBrNdnjdkpeXxx/+8AcefPBBlixZwuWXX86zzz6b7bD6rHg8zrRp07j00kvZb7/9eOyxx5gxYwavvvoqe+21V7bDExHZ6nizHYCIbFvmz5/PAw88kO0wREREREREtqjnnnuO448/nkAgwKmnnsr2229PIpHg7bff5je/+Q1ffvkld9xxR7bD7DKPx8MVV1zBqaeeiuM4FBYW8txzz2U7rD7rb3/7G++99x4vvvgi++23X7bDERHZ6imxISK96sorr8Tn8zF69OhshyIiIiIiIrJFVFVVcdJJJzFs2DBeffVVBgwY0Lbv3HPPZf78+TmZFLjwwgs58cQTWbJkCRMmTKC4uDjbIfVJqVSKG264gQsvvFBJDRGRXqKlqESk1yxYsIAHHniAs88+m/79+3d4zAMPPMCkSZPIy8ujtLSUk046iSVLlmQcs99++7H99tvz0Ucfsffee5OXl8eIESP43//934zjEokEf/zjH5k0aRJFRUWEw2H23XdfXnvttYzjFi1ahGVZXHvttVx//fUMGzaMvLw8pk6dyhdffNF23OrVq6moqGC//fbDGNO2ff78+YTDYU488cSMGNdv0H7wwQdYloVlWW3bXn/9dSzL4vXXX8849vTTT2f48OEZ2xzH4YYbbmDixIkEg0H69evH2WefTV1dXbvP8fnnn2fq1KkUFBRQWFjIbrvtxkMPPbTB+K688kps28447q233uL4449n6NChBAIBhgwZwgUXXNDhNPrHH3+cXXfdlYKCgrb32fq5bkjrsmWLFi1q2/bll19SUlLCkUce2a7Q3n777Zdx/tbHPffcs0lxz549mxNOOIGKigry8vIYN24cv//97wG4/PLLO7zWuo91f3fvvfcehx56KEVFRYRCIaZOnco777yTcb3Wc7Zet7CwkLKyMs4//3xisVjGsZZlcfnll2dsmz59OpZlZfz+3n77bfbZZx/Ky8sJBoOMHDmSiy++OON8tbW1/PrXv2aHHXYgPz+fwsJCDjvsMD777LOM87d+Jx9//PF2n1V+fj6nn356xrbhw4e32/bYY49hWVa77/Dq1av58Y9/zNChQ/F4PG2fYX5+frtriYiIiOSSa665hubmZu66666MpEar0aNHc/7552dsa20Hr/9obectXLgQy7K4/vrr253v3XffxbIsHn74YaDj9n1rP2fddvLnn3/O6aef3rZUVv/+/TnzzDOpqanJeG1rmxVg8ODB7LXXXni9Xvr379+uDdzaP1vftdde266dD3DrrbcyceJEAoEAAwcO5Nxzz6W+vr7d67vStu5Ia3v2kUce4Xe/+x39+/cnHA5z1FFHtetbdrXfcPnll7Pddtu1taP33HNPnnrqqbb9c+bMoa6ujoKCAqZOnUooFKKoqIgjjzwyo0+5/mfbqrm5ucPPtqufQ+s5q6urM7Z/+OGH7b4DHfU1lyxZQl5eXoe/r+eff559992XcDhMQUEBRxxxBF9++SUiItmmGRsi0mv+8pe/4PV6ufjiizn55JPb7b/yyiu59NJLOeGEEzjrrLNYs2YNN998M1OmTOGTTz7JGB1UV1fH4YcfzgknnMDJJ5/Mo48+yjnnnIPf7+fMM88EoLGxkTvvvJOTTz6Zn/zkJzQ1NXHXXXdxyCGH8P777/Od73wn4/r33XcfTU1NnHvuucRiMW688UYOOOAAZs2aRb9+/aisrOS2227j+OOP5+abb+YXv/gFjuNw+umnU1BQwK233rrB93/xxRdv1ud39tlnc88993DGGWfwi1/8gqqqKm655RY++eQT3nnnHXw+H+B2kM4880wmTpzIJZdcQnFxMZ988gkvvPACP/jBDzo89913380f/vAHrrvuuoxjHnvsMSKRCOeccw5lZWW8//773HzzzSxdupTHHnus7biZM2dywgknsNNOO3H11VdTVFREdXU1F1xwQbff55IlSzj00EMZP348jz76KF5v+3+qxo8f35Z86Og6XY37888/Z99998Xn8/HTn/6U4cOHs2DBAp599lmuvPJKvv/972fMLrrggguYMGECP/3pT9u2TZgwAYBXX32Vww47jEmTJnHZZZdh2zZ33303BxxwAG+99Ra77757RownnHACw4cP56qrruK///0vN910E3V1ddx3332dfjb19fVcddVV7bY3NTUxYcIETjjhBEKhEDNnzuSaa64hEolw8803A27H+KmnnuL4449nxIgRrFq1ittvv52pU6fy1VdfMXDgwE6v2x2pVKrtd7O+0047jZdffpmf//zn7LTTTng8Hu644w4+/vjjLXJtERERkWx59tlnGTlyJHvvvXe3X3v99ddTXl4OuH2iViNHjmTy5Mk8+OCD7dq7Dz74IAUFBRx99NHdutaMGTNYuHAhZ5xxBv37929bHuvLL7/kv//9b7sb7uu67rrrWLVqVbeut77LL7+cK664gmnTpnHOOecwZ84cbrvtNj744IOMPk1329YdufLKK7Esi4svvpjVq1dzww03MG3aND799FPy8vKArvcbWlpaOOaYYxg+fDjRaJR77rmHY489lpkzZ7L77ru3JYYuueQSxowZwxVXXEEsFuPvf/87kydP5oMPPmDs2LGdxtrZZ7slPoeu+OMf/9hukBXA/fffz2mnncYhhxzC3/72NyKRCLfddhv77LMPn3zySbsEiYhIrzIiIj3g7rvvNoD54IMPjDHGLFiwwHi9XvOLX/zCGGPM1KlTzcSJE9uOX7RokfF4PObKK6/MOM+sWbOM1+vN2D516lQDmOuuu65tWzweN9/5zndMZWWlSSQSxhhjUqmUicfjGeerq6sz/fr1M2eeeWbbtqqqKgOYvLw8s3Tp0rbt7733ngHMBRdckHGOk08+2YRCITN37lwzffp0A5innnoq45ipU6eaqVOntj3/z3/+YwBz6KGHmnX/9L7xxhsGMK+++mrG60877TQzbNiwtudvvfWWAcyDDz6YcdwLL7yQsb2+vt4UFBSYPfbYw0Sj0YxjHcfpML7nnnvOeL1ec+GFF5r1RSKRdtuuuuoqY1mW+eabb9q2XXLJJQYwK1asaNvW+rlOnz693TnW1fpdqaqqMrW1tWa77bYz48aNM9XV1R0eP3nyZLP//vu3u87dd9/d7binTJliCgoKMrYZk/lZrWvYsGHmtNNOa7fdcRwzZswYc8ghh2S8NhKJmBEjRpiDDjqobdtll11mAHPUUUdlnONnP/uZAcxnn33Wtg0wl112Wdvziy66yFRWVppJkyZlfL86cvjhh5vtt9++7XksFjPpdDrjmKqqKhMIBMyf/vSntm2vvfaaAcxjjz3W7pzhcLjd+1//M7n11ltNIBAw+++/f8Z3OBqNGtu2zdlnn53x+tN
"text/plain": [
"<Figure size 1600x800 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.cluster import AgglomerativeClustering\n",
"from sklearn.metrics import adjusted_rand_score\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.datasets import make_classification\n",
"\n",
"# Генерация данных\n",
"X, y = make_classification(n_samples=144, n_features=10, n_informative=6, n_classes=4)\n",
"\n",
"# 1. Иерархическая кластеризация\n",
"agglomerative = AgglomerativeClustering(n_clusters=4)\n",
"cluster_labels_agg = agglomerative.fit_predict(X)\n",
"\n",
"# 2. Случайное разбиение на 5 кластера\n",
"random_labels = np.random.randint(0, 5, size=len(X))\n",
"\n",
"# 3. Сравнение результатов кластеризации\n",
"ari_score = adjusted_rand_score(y, cluster_labels_agg)\n",
"ari_random = adjusted_rand_score(y, random_labels)\n",
"\n",
"# Близко к 1 - супер, близко к 0 - плохо\n",
"print(f\"ARI между иерархической кластеризацией и реальными метками: {ari_score}\")\n",
"print(f\"ARI между случайным разбиением и реальными метками: {ari_random}\")\n",
"\n",
"# Визуализация кластеров\n",
"plt.figure(figsize=(16, 8))\n",
"\n",
"# Кластеры на основе иерархической кластеризации\n",
"plt.subplot(1, 2, 1)\n",
"plt.scatter(X[:, 0], X[:, 1], c=cluster_labels_agg, cmap=\"rainbow\", alpha=0.7)\n",
"plt.title(\"Иерархическая кластеризация\")\n",
"\n",
"# Случайное разбиение\n",
"plt.subplot(1, 2, 2)\n",
"plt.scatter(X[:, 0], X[:, 1], c=random_labels, cmap=\"rainbow\", alpha=0.7)\n",
"plt.title(\"Случайное разбиение\")\n",
"\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Неирархическая кластеризация"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Cluster 1 (127):\n",
"0, 1, 5, 6, 7, 8, 14, 15, 20, 24, 27, 29, 30, 32, 35, 36, 42, 44, 49, 50, 52, 53, 54, 62, 64, 65, 69, 70, 72, 73, 79, 96, 99, 103, 105, 121, 123, 129, 137, 139, 140, 150, 152, 155, 172, 176, 188, 190, 192, 200, 209, 219, 228, 236, 239, 243, 245, 247, 257, 263, 265, 283, 304, 324, 326, 328, 336, 339, 340, 350, 358, 367, 417, 430, 448, 534, 573, 590, 613, 615, 641, 646, 681, 754, 781, 815, 817, 858, 1007, 1037, 1049, 1085, 1143, 1149, 1156, 1254, 1616, 1664, 1859, 2513, 2769, 3118, 3311, 3418, 3684, 5121, 5179, 6000, 6102, 6724, 8284, 8289, 8857, 9141, 10178, 10269, 10526, 10801, 11163, 11300, 11327, 11877, 12504, 13896, 14603, 14646, 15322\n",
"\n",
"--------\n",
"Cluster 2 (20):\n",
"19, 46, 92, 128, 177, 266, 690, 697, 702, 1287, 1763, 3700, 3937, 8732, 10777, 12502, 13687, 14286, 15846, 16806\n",
"\n",
"--------\n"
]
},
{
"data": {
"text/plain": [
"array([[79.48818898, 84.80314961, 76.63779528, 17.51968504, 24.99212598,\n",
" 74.77165354, 73.73228346, 2.26771654, 3.12598425, 3.33858268,\n",
" 1.94488189],\n",
" [73.7 , 80.35 , 34.35 , 20.65 , 25.55 ,\n",
" 16.15 , 44.7 , 1.75 , 1.15 , 2.75 ,\n",
" 2. ]])"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Overall</th>\n",
" <th>Potential</th>\n",
" <th>ShortPassing</th>\n",
" <th>Jersey Number</th>\n",
" <th>Age</th>\n",
" <th>Dribbling</th>\n",
" <th>SprintSpeed</th>\n",
" <th>International Reputation</th>\n",
" <th>Skill Moves</th>\n",
" <th>Weak Foot</th>\n",
" <th>ClubIndex</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>94.0</td>\n",
" <td>94</td>\n",
" <td>90.0</td>\n",
" <td>10.0</td>\n",
" <td>31.0</td>\n",
" <td>97.0</td>\n",
" <td>86.0</td>\n",
" <td>5.0</td>\n",
" <td>4.0</td>\n",
" <td>4.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>94.0</td>\n",
" <td>94</td>\n",
" <td>81.0</td>\n",
" <td>7.0</td>\n",
" <td>33.0</td>\n",
" <td>88.0</td>\n",
" <td>91.0</td>\n",
" <td>5.0</td>\n",
" <td>5.0</td>\n",
" <td>4.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>91.0</td>\n",
" <td>91</td>\n",
" <td>89.0</td>\n",
" <td>10.0</td>\n",
" <td>27.0</td>\n",
" <td>95.0</td>\n",
" <td>88.0</td>\n",
" <td>4.0</td>\n",
" <td>4.0</td>\n",
" <td>4.0</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>91.0</td>\n",
" <td>91</td>\n",
" <td>93.0</td>\n",
" <td>10.0</td>\n",
" <td>32.0</td>\n",
" <td>90.0</td>\n",
" <td>72.0</td>\n",
" <td>4.0</td>\n",
" <td>4.0</td>\n",
" <td>4.0</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>91.0</td>\n",
" <td>91</td>\n",
" <td>82.0</td>\n",
" <td>9.0</td>\n",
" <td>31.0</td>\n",
" <td>87.0</td>\n",
" <td>75.0</td>\n",
" <td>5.0</td>\n",
" <td>3.0</td>\n",
" <td>4.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Overall Potential ShortPassing Jersey Number Age Dribbling \\\n",
"0 94.0 94 90.0 10.0 31.0 97.0 \n",
"1 94.0 94 81.0 7.0 33.0 88.0 \n",
"5 91.0 91 89.0 10.0 27.0 95.0 \n",
"6 91.0 91 93.0 10.0 32.0 90.0 \n",
"7 91.0 91 82.0 9.0 31.0 87.0 \n",
"\n",
" SprintSpeed International Reputation Skill Moves Weak Foot ClubIndex \n",
"0 86.0 5.0 4.0 4.0 0 \n",
"1 91.0 5.0 5.0 4.0 1 \n",
"5 88.0 4.0 4.0 4.0 2 \n",
"6 72.0 4.0 4.0 4.0 3 \n",
"7 75.0 5.0 3.0 4.0 0 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from utils_clusters import print_cluster_result, run_kmeans\n",
"\n",
"# Предположим, что у вас есть DataFrame df с нужными данными\n",
"random_state = 9\n",
"\n",
"# Выполняем кластеризацию KMeans\n",
"labels, centers = run_kmeans(df_filtered_noclub_nona, 2, random_state)\n",
"\n",
"# Выводим результаты кластеризации\n",
"print_cluster_result(df_filtered_noclub_nona, 2, labels)\n",
"display(centers)\n",
"display(df_filtered_noclub_nona.head()) # Выводим несколько строк для проверки"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Визуализация результатов кластеризации"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x1200 with 4 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from visual import draw_cluster_results\n",
"\n",
"plt.figure(figsize=(16, 12))\n",
"draw_cluster_results(df_filtered_noclub_nona, 0, 1, labels, centers, plt.subplot(2, 2, 1))\n",
"draw_cluster_results(df_filtered_noclub_nona, 2, 3, labels, centers, plt.subplot(2, 2, 2))\n",
"draw_cluster_results(df_filtered_noclub_nona, 0, 2, labels, centers, plt.subplot(2, 2, 3))\n",
"draw_cluster_results(df_filtered_noclub_nona, 1, 3, labels, centers, plt.subplot(2, 2, 4))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Разбиение на 5 кластеров и сравнение с реальным разбиением"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABSAAAAd6CAYAAABqn8OpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3xb5fXH8c9zJe+ZONPZey9CQhIgbAgrbAiFsEdpaUspUFYLtLQU6KBAodAfG8Lem4QRViAhCRlk7728tyXd5/eHnaHYkp1Ytizn++7LNb5D51zJsY7Ofe5zjbXWIiIiIiIiIiIiItIInGgnICIiIiIiIiIiIi2XGpAiIiIiIiIiIiLSaNSAFBERERERERERkUajBqSIiIiIiIiIiIg0GjUgRUREREREREREpNGoASkiIiIiIiIiIiKNRg1IERERERERERERaTRqQIqIiIiIiIiIiEijUQNSREREREREREREGo0akCIiIiIiIiIiItJootqALCoq4rrrrqNbt24kJSUxbtw4Zs2atWv9JZdcgjEm6GvChAlRzFhEREREWhrVpCIiIiKNyxvN4FdccQULFy7kueeeIzs7m+eff55jjz2WRYsW0alTJwAmTJjAU089tWufhISEfYrhui6bNm0iLS0NY0xE8xcRERFpCtZaioqKyM7OxnF0AUukNXZNqnpUREREYl1D61FjrbWNkFedysrKSEtL4+233+bkk0/etXzkyJGceOKJ3H333VxyySXk5+fz1ltv7XecDRs20KVLlwhkLCIiIhJd69evp3PnztFOo0VpippU9aiIiIi0FPtbj0ZtBKTf7ycQCJCYmBi0PCkpia+//nrXz1988QXt2rWjVatWHH300dx9991kZWWFfNyKigoqKip2/byzv7p+/XrS09MjfBQiIiIija+wsJAuXbqQlpYW7VRanMaoSVWPioiISEvT0Ho0aiMgAcaNG0d8fDxTpkyhffv2vPjii1x88cX07t2bpUuX8tJLL5GcnEyPHj1YuXIlt956K6mpqcyYMQOPx1PrY955553cddddNZYXFBSo4BMREZGYVFhYSEZGhuqZRhLpmlT1qIiIiLQ0Da1Ho9qAXLlyJZdddhlffvklHo+Hgw46iL59+zJ79mwWL15cY/tVq1bRq1cvpk2bxjHHHFPrY+59xnlnh1YFn4iIiMQqNSAbV6RrUtWjIiIi0tI0tB6N6izmvXr1Yvr06RQXF7N+/XpmzpyJz+ejZ8+etW7fs2dP2rRpw4oVK0I+ZkJCAunp6UFfIiIiIiKhRLomVT0qIiIiEqxZ3EYxJSWFjh07kpeXx8cff8xpp51W63YbNmwgJyeHjh07NnGGIiIiItLSqSYVERERaRxRuwkNwMcff4y1ln79+rFixQpuvPFG+vfvz6WXXkpxcTF33XUXZ511Fh06dGDlypXcdNNN9O7dmxNOOCGaaYuIiIhIC6KaVERERKRxRXUEZEFBAb/85S/p378/F110EYcddhgff/wxcXFxeDwe5s+fz8SJE+nbty+XX345I0eO5KuvviIhISGaaYuIiIhIC6KaVERERKRxRfUmNE1Bk7aLiIhIrFM9E9v0+omIiEisi+mb0IiIiIiIiIiIiEjLpgakiIiIiIiIiIiINBo1IEVERERERERERKTRqAEpIiIiIiIiIiIijcYb7QRERESk+asoq+DT57/iwyc/I2djLlmdWnPiZUdzzIWHk5B04N0J+MMnP2PKX15j27ocjDF0G9iZK++9kINPGB7t1ERERERarHmLNvD6h3P5adkm4uI8HDaqN2dOGE52+8xop9bkVq/YwkMPvMePa7YTANK9DhOPHcrlvzgBx2l+4w11F2wREREJqyivmBuPvpOV89diMFhrMY7BupZew7px/2d3ktYqNdppNpk/TPwb3703u9Z15/3+dK6454KIx1Q9E9v0+omIiDTcEy99w1OvzsDjGAJuVSvLcQxej8O9t5zBqGHdo5tgE/py2nxue/ADrNdTtcAYcC04hmzH8PyUXxMfFxfRmLoLtoiIiDSqB65+jNUL14OFnectbXXRt3rheh74+ePRTK9JvfnQByGbjwAv3/sWS2ataMKMRERERFq+b35YyVOvzgDY1XwEcF2Lzx/glnvfoqCoLFrpNamKCh9/eOB9rMdT1Xg0pmqFU/V9U8DlrltejGKGtVMDUkRERELaviGHr17/Hjfg1rreDbh89fp37NiY08SZRcdLf3urzm0e+90zjZ+IiIiIyAHk5Xd/wKlusO3NWqio9PP+ZwubOKvoePbxaQQS4nY1HGvz9ZKN+P2BJsyqbmpAioiISEiLZiyjrtlarGv56dtlTZRRdOVuyatzm1Xz1jZBJiIiIiIHjvmLN+K6oWtSa2HeovVNmFH0zJyzCtzaBwcAYAyBhDiWLdrQdEnVgxqQIiIiEpIJfWJ1v7Y7IOi5EBEREYmo+tSa5gApwup7lCbMCMloUANSREREQhp0aH8cT/hywfE4DDq0fxNlFF1tOrWuc5s+I3o2QSYiIiIiB47hg7qEvAQbqhqUIwZ3acKMomfsIb0h3F2urcVb4aNP/05Nl1Q9qAEpIiIiIWV1bMUR544L2YR0PA5HnjeOrI6tmjiz6LjgtrPr3Oaqf1zUBJmIiIiIHDgmnXpwyEuwjTEkJsRx4lGDmzir6Ljg8qPxVviq7nodwvjBXfDuvEN2M6EGpIiIiIT1m0evpM9BVaP6dp553vm9z8ie/PqRK6OWW1M75erjGH/O2JDrL7rrPPoepBGQIiIiIpF0yIgeXH3B4QB49hgJ6TiGhHgP9916JumpidFKr0nFx8Vxz+9Px/EHqia/3Dlfe3VDsluClz/efX4UM6ydsXXNLB/jCgsLycjIoKCggPT09GinIyIiEpN8lT6mvzKDj578jB0bc2jTOYsTLzuG8eeMIS4+LtrpNbnpr3zLs3e+wqZVWzDGoeewblz994sYctiARomneia26fUTERGJjMUrNvPGRz/y09JNxMV5OGxUb04/fhhts9KinVqT27Qhh4f++R4/LN+E30JmgpezTx7J+ZcciRPuEu391NB6Rg1IERERkWZO9Uxs0+snIiIisa6h9YwuwRYREREREREREZFGowakiIiIiIiIiIiINBo1IEVERERERERERKTRqAEpIiIiIiIiIiIijUYNSBEREREREREREWk0akCKiIiIiIiIiIhIo1EDUkRERERERERERBqNGpAiIiIiIiIiIiLSaNSAFBERERERERERkUajBqSIiIiIiIiIiIg0GjUgRUREREREREREpNGoASkiIiIiIiIiIiKNRg1IERERERERERERaTRqQIqIiIiIiIiIiEijUQNSREREREREREREGo0akCIiIiIiIiIiItJo1IAUERERERERERGRRqMGpIiIiIiIiIiIiDQaNSBFRERERERERESk0agBKSIiIiIiIiIiIo1GDUgRkRjhq/SxY2MOJYWl0U4lZlWWV7JjYw5lxWVNF6ukvNFjWVuODWzB2sY/LhERETlwWWsp9BVR4CvAtW6004lJ1lrytuaTv70Aa22jxnKtS35lAYW+osaP5brkbsmjYEdho8eS2OSNdgIiIhJeYW4RL/z5dT588lPKiqqaWSOPG8qFfzibwYcNiHJ2sWHHxhye/9NrfPLcdHzlPhzHMHbiKCbfcQ69hnWPaKxt67bz7F2v8tmUr/BV+HE8DoeePprJd5xDj8FdIxrL+tdhix+G8vcAP+DBJk7ApF6L8faKaCwRERE5cFlr+WrHN3yw+UM2l28BICs+ixM6HMdx7Y/BMRrbVBfXdXn74Y947V/vsW3tdgC69M/m3BtO44RLj8IYE7FYARtg6pZpfLx1GrmVuQB0Ssrm5I4nMi5rbERj+X1+Xv/X+7z54PvkbMoDoOfQbky6+QyOmnRoxOJI7DO2hbemCwsLycjIoKCggPT09GinIyKyTwp2FPLrcbexZfU23MDus8yOp6rI++Orv+PQ00dHK72YsHXtdn419lYKdhTi+oOfQ0+ch3s//gNDDo9MI3fTyi38euytFOWXBMXyeB28cV7
"text/plain": [
"<Figure size 1600x2400 with 8 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from visual import draw_data_2d\n",
"\n",
"labels, centers = run_kmeans(df_filtered_noclub_nona, 5, random_state)\n",
"\n",
"yy = df_filtered_noclub_nona[\"ClubIndex\"]\n",
"\n",
"plt.figure(figsize=(16, 24))\n",
"draw_data_2d(\n",
" df_filtered_noclub_nona, 0, 1, labels.tolist(), y_names, plt.subplot(4, 2, 1)\n",
")\n",
"draw_data_2d(df_filtered_noclub_nona, 0, 1, yy.tolist(), y_names, plt.subplot(4, 2, 2))\n",
"draw_data_2d(\n",
" df_filtered_noclub_nona, 2, 3, labels.tolist(), y_names, plt.subplot(4, 2, 3)\n",
")\n",
"draw_data_2d(df_filtered_noclub_nona, 2, 3, yy.tolist(), y_names, plt.subplot(4, 2, 4))\n",
"draw_data_2d(\n",
" df_filtered_noclub_nona, 0, 2, labels.tolist(), y_names, plt.subplot(4, 2, 5)\n",
")\n",
"draw_data_2d(df_filtered_noclub_nona, 0, 2, yy.tolist(), y_names, plt.subplot(4, 2, 6))\n",
"draw_data_2d(\n",
" df_filtered_noclub_nona, 1, 3, labels.tolist(), y_names, plt.subplot(4, 2, 7)\n",
")\n",
"draw_data_2d(df_filtered_noclub_nona, 1, 3, yy.tolist(), y_names, plt.subplot(4, 2, 8))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Понижение размерности до n=2"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 4.24262881e+01, -8.58747627e+00],\n",
" [ 3.35801830e+01, -1.29830105e+01],\n",
" [ 4.04959418e+01, -6.22355075e+00],\n",
" [ 3.27480265e+01, -9.53127256e+00],\n",
" [ 2.60581781e+01, -1.05746609e+01],\n",
" [ 5.84844198e+00, -1.07567293e+01],\n",
" [ 2.25820806e+01, -6.77394030e+00],\n",
" [ 3.38320096e+01, 3.06672924e+00],\n",
" [-6.19442143e+01, -3.21578541e+01],\n",
" [ 1.55854797e+01, -1.54742530e+01],\n",
" [-6.76123495e+00, -2.08022645e+01],\n",
" [ 9.40078003e+00, -8.34388336e+00],\n",
" [ 3.32929954e+01, -5.62124449e+00],\n",
" [ 3.03217103e+01, 3.72556770e+00],\n",
" [ 3.17224922e+01, -8.66653896e+00],\n",
" [ 3.10410788e+01, -4.91871630e+00],\n",
" [ 3.45926138e+01, -5.00978414e+00],\n",
" [ 9.33967159e+00, 3.25311479e-01],\n",
" [-4.34610458e-01, 2.06307453e+00],\n",
" [-6.14013872e+01, -3.11698049e+01],\n",
" [ 2.71110656e+01, -4.02019191e-01],\n",
" [ 3.14040335e+01, -2.41699895e+00],\n",
" [ 2.38236835e+01, -2.04499950e+00],\n",
" [ 1.98906152e+01, -1.40010106e+01],\n",
" [-8.42217331e-01, -2.02065634e+01],\n",
" [ 4.37543202e+00, -1.67445994e+01],\n",
" [ 2.32411925e+01, -4.89906066e+00],\n",
" [ 3.64478991e+01, -2.68727510e+00],\n",
" [ 1.10743894e+01, -6.49993470e+00],\n",
" [ 4.05220056e+00, -3.76972661e+00],\n",
" [ 2.47760462e+01, -1.11960118e+01],\n",
" [-9.14991872e-02, -1.65331150e+01],\n",
" [ 2.75837241e+01, -4.96173669e+00],\n",
" [-6.66637926e+01, -3.11674272e+01],\n",
" [ 9.50701137e+00, -1.16846598e+01],\n",
" [ 1.63584635e+01, -1.19107635e+01],\n",
" [ 1.88564614e+01, -4.60648536e+00],\n",
" [ 2.27580901e+01, -7.60276147e+00],\n",
" [ 2.24451180e+01, -8.11964288e+00],\n",
" [ 2.05703224e+01, -1.32785047e+01],\n",
" [-5.94188538e+01, -1.05057636e+01],\n",
" [ 3.25029982e+01, -2.57371172e+00],\n",
" [ 2.55861783e+01, -8.10980847e+00],\n",
" [ 1.10730417e+01, -2.41491894e+00],\n",
" [ 2.68967287e+01, 5.85795246e+00],\n",
" [-1.16576256e+01, 5.87658929e+00],\n",
" [-9.90439003e-01, -7.34141737e+00],\n",
" [ 3.13960982e+01, -1.46471292e+00],\n",
" [ 2.17171266e+01, 9.51540465e-01],\n",
" [ 2.66366109e+01, 1.55472376e+00],\n",
" [-7.44614752e+01, -2.09749499e+01],\n",
" [ 1.35156911e+00, -9.39365922e+00],\n",
" [ 2.22606929e+01, -9.41956154e+00],\n",
" [ 2.02724913e+01, 2.33500455e+00],\n",
" [ 2.06571002e+01, -1.17252630e+01],\n",
" [-1.27935082e+00, 6.25456273e+00],\n",
" [ 1.50120567e+01, -1.33263141e+01],\n",
" [ 2.06253300e+01, -6.48353798e+00],\n",
" [ 2.51611268e+01, 1.43698217e-01],\n",
" [ 1.17692126e+00, -5.18028128e+00],\n",
" [ 2.54493446e+01, 5.09413109e+00],\n",
" [-5.32044954e+00, -4.47670815e+00],\n",
" [ 2.73256925e+01, -9.87579049e+00],\n",
" [ 4.38061402e-01, -4.05655914e+00],\n",
" [ 2.41242812e+01, -2.56720547e+00],\n",
" [ 2.37764182e+01, -6.11958503e+00],\n",
" [-5.74855786e+01, -2.92778331e+01],\n",
" [ 2.01965061e+01, -4.09207535e+00],\n",
" [ 2.71362937e-01, -1.06799788e+01],\n",
" [ 2.18912022e+01, -9.90075132e+00],\n",
" [ 1.58786997e+01, -6.52276323e+00],\n",
" [ 1.86475028e+01, 5.49588963e+00],\n",
" [ 6.19923198e+00, -1.06047071e+01],\n",
" [ 1.38132063e+01, 5.79442859e+00],\n",
" [ 2.43393293e+01, 4.98623676e+00],\n",
" [ 4.71363078e+00, -8.59959861e+00],\n",
" [ 1.65125859e+01, 1.32282639e+01],\n",
" [ 2.59200254e+01, -3.19342048e+00],\n",
" [ 9.94311263e+00, 1.81087048e+00],\n",
" [ 1.25251817e+01, -6.67214318e+00],\n",
" [ 1.28783917e+01, 5.89280308e+00],\n",
" [-1.97969022e+01, -2.81020062e-01],\n",
" [ 3.73473460e+00, -5.90753041e-01],\n",
" [ 1.13660469e+01, 5.28778432e+00],\n",
" [ 2.20751668e+01, -6.22453710e+00],\n",
" [ 1.63519934e+01, 4.47359554e+00],\n",
" [ 1.07297454e+01, 8.82590113e+00],\n",
" [ 1.93634786e+01, 1.76788004e+00],\n",
" [ 9.20630216e+00, -8.76540997e+00],\n",
" [-7.88211322e+01, -6.62640586e+00],\n",
" [-6.91399470e+01, -1.76351642e+01],\n",
" [-7.04591559e+01, -2.83392791e+01],\n",
" [-1.66642877e+00, -1.34777186e+01],\n",
" [-2.03430852e+01, -2.36754227e+00],\n",
" [ 1.21198241e+01, -1.03265906e+01],\n",
" [-9.21566741e+00, 1.29481427e+00],\n",
" [ 1.63777126e+01, 2.05427511e+00],\n",
" [ 1.70403919e+01, 6.17222493e+00],\n",
" [-4.88248436e+00, -1.51377647e+01],\n",
" [ 1.42271848e+01, 2.11843424e+01],\n",
" [ 1.95716612e+01, -1.64756939e-01],\n",
" [ 1.84499963e+01, 1.45496352e+01],\n",
" [ 2.02229140e+01, -5.60605453e+00],\n",
" [ 9.54234513e+00, 2.33748355e+01],\n",
" [ 1.86232330e+01, -7.66013923e+00],\n",
" [-6.93087128e+01, -1.72047084e+01],\n",
" [ 1.51576098e+01, 1.58913596e+01],\n",
" [ 9.04854678e+00, 1.80129057e+01],\n",
" [-6.56299933e+01, -2.44032909e+01],\n",
" [ 1.74696136e+01, 2.12318082e+01],\n",
" [ 6.16434897e+00, -6.86253117e+00],\n",
" [ 1.20692057e+01, 1.00923199e+00],\n",
" [-1.34296507e+01, -1.60019074e+00],\n",
" [ 2.10566052e+00, 1.86176789e+01],\n",
" [ 1.01272293e+00, 6.12922167e+00],\n",
" [ 8.35702927e+00, 8.84570847e+00],\n",
" [-7.37229787e+01, -5.55296873e+00],\n",
" [-8.01550166e+01, -9.02511738e-01],\n",
" [ 1.06411841e+01, 1.00577657e+01],\n",
" [-2.11065070e+01, -3.07495361e+00],\n",
" [-2.07565845e+00, 2.34834998e+01],\n",
" [ 2.23791600e+00, 1.38073801e+01],\n",
" [-9.09590779e+00, 9.78162954e+00],\n",
" [-1.22940041e+01, 1.92070586e+01],\n",
" [-7.54126717e+00, 1.56736645e+01],\n",
" [-3.39341398e+01, 1.03364011e+01],\n",
" [-1.12446368e+01, 1.40229886e+01],\n",
" [-5.45372741e+00, 1.55907790e+01],\n",
" [-7.39745407e+00, 2.16328759e+01],\n",
" [-7.77234278e+00, 2.29960127e+01],\n",
" [-2.47612344e+01, 1.84953653e+01],\n",
" [-3.83358622e+01, 1.23687847e+01],\n",
" [-1.37958733e+01, 2.06348682e+00],\n",
" [-7.83207859e+00, 2.01719183e+01],\n",
" [-7.32848160e+00, 2.58185529e+01],\n",
" [-1.21298610e+01, 2.42809842e+01],\n",
" [-1.98932945e+01, 1.87099918e+01],\n",
" [-7.15268644e+01, 8.09890763e+00],\n",
" [-2.11032913e+01, 2.41844957e+01],\n",
" [-8.68397146e+01, 5.80019825e+00],\n",
" [-2.31811594e+01, 1.70883184e+01],\n",
" [-8.44507844e+01, 5.53624553e+00],\n",
" [-1.62825753e+01, 4.29235095e+01],\n",
" [-1.59840824e+01, 4.15417065e+01],\n",
" [-2.05284490e+01, 3.91059593e+01],\n",
" [-4.75496217e+01, 3.33350375e+01],\n",
" [-9.28173691e+01, 3.13914929e+01]])"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.decomposition import PCA\n",
"\n",
"reduced_data = PCA(n_components=2).fit_transform(df_filtered_noclub_nona)\n",
"reduced_data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Визуализация данных после понижения"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 4.24262881e+01 -8.58747627e+00]\n",
" [ 3.35801830e+01 -1.29830105e+01]\n",
" [ 4.04959418e+01 -6.22355075e+00]\n",
" [ 3.27480265e+01 -9.53127256e+00]\n",
" [ 2.60581781e+01 -1.05746609e+01]\n",
" [ 5.84844198e+00 -1.07567293e+01]\n",
" [ 2.25820806e+01 -6.77394030e+00]\n",
" [ 3.38320096e+01 3.06672924e+00]\n",
" [-6.19442143e+01 -3.21578541e+01]\n",
" [ 1.55854797e+01 -1.54742530e+01]\n",
" [-6.76123495e+00 -2.08022645e+01]\n",
" [ 9.40078003e+00 -8.34388336e+00]\n",
" [ 3.32929954e+01 -5.62124449e+00]\n",
" [ 3.03217103e+01 3.72556770e+00]\n",
" [ 3.17224922e+01 -8.66653896e+00]\n",
" [ 3.10410788e+01 -4.91871630e+00]\n",
" [ 3.45926138e+01 -5.00978414e+00]\n",
" [ 9.33967159e+00 3.25311479e-01]\n",
" [-4.34610458e-01 2.06307453e+00]\n",
" [-6.14013872e+01 -3.11698049e+01]\n",
" [ 2.71110656e+01 -4.02019191e-01]\n",
" [ 3.14040335e+01 -2.41699895e+00]\n",
" [ 2.38236835e+01 -2.04499950e+00]\n",
" [ 1.98906152e+01 -1.40010106e+01]\n",
" [-8.42217331e-01 -2.02065634e+01]\n",
" [ 4.37543202e+00 -1.67445994e+01]\n",
" [ 2.32411925e+01 -4.89906066e+00]\n",
" [ 3.64478991e+01 -2.68727510e+00]\n",
" [ 1.10743894e+01 -6.49993470e+00]\n",
" [ 4.05220056e+00 -3.76972661e+00]\n",
" [ 2.47760462e+01 -1.11960118e+01]\n",
" [-9.14991872e-02 -1.65331150e+01]\n",
" [ 2.75837241e+01 -4.96173669e+00]\n",
" [-6.66637926e+01 -3.11674272e+01]\n",
" [ 9.50701137e+00 -1.16846598e+01]\n",
" [ 1.63584635e+01 -1.19107635e+01]\n",
" [ 1.88564614e+01 -4.60648536e+00]\n",
" [ 2.27580901e+01 -7.60276147e+00]\n",
" [ 2.24451180e+01 -8.11964288e+00]\n",
" [ 2.05703224e+01 -1.32785047e+01]\n",
" [-5.94188538e+01 -1.05057636e+01]\n",
" [ 3.25029982e+01 -2.57371172e+00]\n",
" [ 2.55861783e+01 -8.10980847e+00]\n",
" [ 1.10730417e+01 -2.41491894e+00]\n",
" [ 2.68967287e+01 5.85795246e+00]\n",
" [-1.16576256e+01 5.87658929e+00]\n",
" [-9.90439003e-01 -7.34141737e+00]\n",
" [ 3.13960982e+01 -1.46471292e+00]\n",
" [ 2.17171266e+01 9.51540465e-01]\n",
" [ 2.66366109e+01 1.55472376e+00]\n",
" [-7.44614752e+01 -2.09749499e+01]\n",
" [ 1.35156911e+00 -9.39365922e+00]\n",
" [ 2.22606929e+01 -9.41956154e+00]\n",
" [ 2.02724913e+01 2.33500455e+00]\n",
" [ 2.06571002e+01 -1.17252630e+01]\n",
" [-1.27935082e+00 6.25456273e+00]\n",
" [ 1.50120567e+01 -1.33263141e+01]\n",
" [ 2.06253300e+01 -6.48353798e+00]\n",
" [ 2.51611268e+01 1.43698217e-01]\n",
" [ 1.17692126e+00 -5.18028128e+00]\n",
" [ 2.54493446e+01 5.09413109e+00]\n",
" [-5.32044954e+00 -4.47670815e+00]\n",
" [ 2.73256925e+01 -9.87579049e+00]\n",
" [ 4.38061402e-01 -4.05655914e+00]\n",
" [ 2.41242812e+01 -2.56720547e+00]\n",
" [ 2.37764182e+01 -6.11958503e+00]\n",
" [-5.74855786e+01 -2.92778331e+01]\n",
" [ 2.01965061e+01 -4.09207535e+00]\n",
" [ 2.71362937e-01 -1.06799788e+01]\n",
" [ 2.18912022e+01 -9.90075132e+00]\n",
" [ 1.58786997e+01 -6.52276323e+00]\n",
" [ 1.86475028e+01 5.49588963e+00]\n",
" [ 6.19923198e+00 -1.06047071e+01]\n",
" [ 1.38132063e+01 5.79442859e+00]\n",
" [ 2.43393293e+01 4.98623676e+00]\n",
" [ 4.71363078e+00 -8.59959861e+00]\n",
" [ 1.65125859e+01 1.32282639e+01]\n",
" [ 2.59200254e+01 -3.19342048e+00]\n",
" [ 9.94311263e+00 1.81087048e+00]\n",
" [ 1.25251817e+01 -6.67214318e+00]\n",
" [ 1.28783917e+01 5.89280308e+00]\n",
" [-1.97969022e+01 -2.81020062e-01]\n",
" [ 3.73473460e+00 -5.90753041e-01]\n",
" [ 1.13660469e+01 5.28778432e+00]\n",
" [ 2.20751668e+01 -6.22453710e+00]\n",
" [ 1.63519934e+01 4.47359554e+00]\n",
" [ 1.07297454e+01 8.82590113e+00]\n",
" [ 1.93634786e+01 1.76788004e+00]\n",
" [ 9.20630216e+00 -8.76540997e+00]\n",
" [-7.88211322e+01 -6.62640586e+00]\n",
" [-6.91399470e+01 -1.76351642e+01]\n",
" [-7.04591559e+01 -2.83392791e+01]\n",
" [-1.66642877e+00 -1.34777186e+01]\n",
" [-2.03430852e+01 -2.36754227e+00]\n",
" [ 1.21198241e+01 -1.03265906e+01]\n",
" [-9.21566741e+00 1.29481427e+00]\n",
" [ 1.63777126e+01 2.05427511e+00]\n",
" [ 1.70403919e+01 6.17222493e+00]\n",
" [-4.88248436e+00 -1.51377647e+01]\n",
" [ 1.42271848e+01 2.11843424e+01]\n",
" [ 1.95716612e+01 -1.64756939e-01]\n",
" [ 1.84499963e+01 1.45496352e+01]\n",
" [ 2.02229140e+01 -5.60605453e+00]\n",
" [ 9.54234513e+00 2.33748355e+01]\n",
" [ 1.86232330e+01 -7.66013923e+00]\n",
" [-6.93087128e+01 -1.72047084e+01]\n",
" [ 1.51576098e+01 1.58913596e+01]\n",
" [ 9.04854678e+00 1.80129057e+01]\n",
" [-6.56299933e+01 -2.44032909e+01]\n",
" [ 1.74696136e+01 2.12318082e+01]\n",
" [ 6.16434897e+00 -6.86253117e+00]\n",
" [ 1.20692057e+01 1.00923199e+00]\n",
" [-1.34296507e+01 -1.60019074e+00]\n",
" [ 2.10566052e+00 1.86176789e+01]\n",
" [ 1.01272293e+00 6.12922167e+00]\n",
" [ 8.35702927e+00 8.84570847e+00]\n",
" [-7.37229787e+01 -5.55296873e+00]\n",
" [-8.01550166e+01 -9.02511738e-01]\n",
" [ 1.06411841e+01 1.00577657e+01]\n",
" [-2.11065070e+01 -3.07495361e+00]\n",
" [-2.07565845e+00 2.34834998e+01]\n",
" [ 2.23791600e+00 1.38073801e+01]\n",
" [-9.09590779e+00 9.78162954e+00]\n",
" [-1.22940041e+01 1.92070586e+01]\n",
" [-7.54126717e+00 1.56736645e+01]\n",
" [-3.39341398e+01 1.03364011e+01]\n",
" [-1.12446368e+01 1.40229886e+01]\n",
" [-5.45372741e+00 1.55907790e+01]\n",
" [-7.39745407e+00 2.16328759e+01]\n",
" [-7.77234278e+00 2.29960127e+01]\n",
" [-2.47612344e+01 1.84953653e+01]\n",
" [-3.83358622e+01 1.23687847e+01]\n",
" [-1.37958733e+01 2.06348682e+00]\n",
" [-7.83207859e+00 2.01719183e+01]\n",
" [-7.32848160e+00 2.58185529e+01]\n",
" [-1.21298610e+01 2.42809842e+01]\n",
" [-1.98932945e+01 1.87099918e+01]\n",
" [-7.15268644e+01 8.09890763e+00]\n",
" [-2.11032913e+01 2.41844957e+01]\n",
" [-8.68397146e+01 5.80019825e+00]\n",
" [-2.31811594e+01 1.70883184e+01]\n",
" [-8.44507844e+01 5.53624553e+00]\n",
" [-1.62825753e+01 4.29235095e+01]\n",
" [-1.59840824e+01 4.15417065e+01]\n",
" [-2.05284490e+01 3.91059593e+01]\n",
" [-4.75496217e+01 3.33350375e+01]\n",
" [-9.28173691e+01 3.13914929e+01]]\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABSYAAAINCAYAAAAjnqEwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3hUVfoH8O+5M5NJnzRS6KEIhA5SRVQExQIqWECxrT8L1rWsbVeRVdd1XeuqrItl3WWxggKCWFBRFAgQEGKoIfQkQALpmWTmnt8fYUImmZ7p8/08Dw/m3jP3vjMTyck77zmvkFJKEBEREREREREREfmREugAiIiIiIiIiIiIKPIwMUlERERERERERER+x8QkERERERERERER+R0Tk0REREREREREROR3TEwSERERERERERGR3zExSURERERERERERH7HxCQRERERERERERH5HROTRERERERERERE5HfaQAcQbFRVxZEjR5CQkAAhRKDDISIiInKLlBJVVVXo2LEjFIWfQYcizkeJiIgo1Lk6J2VispUjR46gS5cugQ6DiIiIqF0OHjyIzp07BzoM8gDno0RERBQunM1JmZhsJSEhAUDTC5eYmBjgaIiIiIjcU1lZiS5dujTPaSj0cD5KREREoc7VOSkTk61YlsskJiZyIkhEREQhi0uAQxfno0RERBQunM1JufEQERERERERERER+R0Tk0REREREREREROR3TEwSERERERERERGR3zExSURERERERERERH7HxCQRERERERERERH5HROTRERERERERERE5HdMTBIREREREREREZHfMTFJREREREREREREfsfEJBEREREREREREfkdE5NERERERERERETkd0xMEhERERERERERkd8xMUlERERERERERER+x8QkEREREREREflVldGIQ5UVqGloCHQoRBRA2kAHQERE/mVWJXKLynG0qh7pCdEYmZ0CjSICHRYRERERRYDdZWV4Zf3P+KpwD1QpoRECF/U6A/ePOQvZScmBDo+I/IyJSSKiCLIyvxhzlxWguKK++ViWIRpzpuRg8oCsAEZGREREROFu29FSzPj0QzSYzVClBACYpcSXe3Zh9f4ifHLVTJyRmhbgKInIn7iUm4goQqzML8bsBXlWSUkAKKmox+wFeViZXxygyIiIiIgo3Ekp8fA3K2E0m2E+lZS0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
"text/plain": [
"<Figure size 1600x600 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# данные после понижения размерности\n",
"plt.figure(figsize=(16, 6))\n",
"\n",
"print(reduced_data)\n",
"\n",
"# Первый график: отображение кластеров с метками\n",
"draw_data_2d(\n",
" pd.DataFrame(\n",
" {\"Overall\": reduced_data[:, 0], \"Potential\": reduced_data[:, 1]}\n",
" ),\n",
" 0,\n",
" 1,\n",
" subplot=plt.subplot(1, 2, 1),\n",
")\n",
"\n",
"# Второй график: отображение с метками кластеров из y\n",
"draw_data_2d(\n",
" pd.DataFrame(\n",
" {\"Overall\": reduced_data[:, 0], \"Potential\": reduced_data[:, 1]}\n",
" ),\n",
" 0,\n",
" 1,\n",
" yy.tolist(),\n",
" y_names,\n",
" plt.subplot(1, 2, 2),\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Визуализация результатов неиерархической кластеризации для двух кластеров с учетом понижения размерности"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGwCAYAAAA0bWYRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABFFUlEQVR4nO3deVxU5eI/8A+L7KssgqKgiAu4FeVyFVFBEVRMQdSuC7h2xbS62b237k0trUgzu2q5faMbmV0VFbyKC4Z7ei23FC3EJbergggKKgLP7w9/c2KYGRhgYJbzeb9evoozZ+Y8Z+bMnM95zrOYCSEEiIiISLbM9V0AIiIi0i+GASIiIpljGCAiIpI5hgEiIiKZYxggIiKSOYYBIiIimWMYICIikjmGASIiIpljGCAiIpI5hgEyOVeuXIGZmRm++uorfRelTuLj4+Hn56e37VdUVKBTp05YuHCh3spgCPbt2wczMzPs27dP30XRyM/PD/Hx8XV6rr6/Jz179sRbb72ll22TKoYBPfvqq69gZmaGH3/8UWl5YWEhunfvDhsbG+zcuVNPpSN1srOzMW/ePFy5ckXfRWkQ69evx7Vr1zBz5kxpmeI4VfyzsbFBu3btMHPmTNy+fVvlNW7fvo0333wTHTp0gJ2dHezt7REcHIwFCxbg/v37arfbvXt3mJmZ4YsvvmioXSMdOXLkCObNm6fxs9TGX/7yF6xYsQL/+9//dFcwqjOGAQNUVFSEQYMG4cyZM9iyZQsGDx6s7yJRJdnZ2Zg/f36DhYE1a9bgl19+aZDX1saiRYswZswYODs7qzz23nvvISUlBcuXL8cf/vAHfPHFF+jVqxdKSkqkdY4fP45OnTphxYoVCAkJwZIlS/DJJ5/gueeew0cffYS4uDiV183JycHx48fh5+eHdevWNej+Uf0dOXIE8+fPr1cYGD58OJycnPD555/rrmBUZ5b6LgApe/DgASIiInDq1Cls3rwZkZGR+i4SNZLi4mLY29ujSZMmeivDyZMncfr0aXzyySdqH4+MjMQLL7wAAJgyZQrc3NywZMkSpKWlYezYsbh//z5GjBgBCwsLnDx5Eh06dFB6/sKFC7FmzRqV1/3mm2/g6emJTz75BLGxsbhy5Uqdb5VUVFSgtLQUNjY2dXo+NQ5zc3PExsbi66+/xvz582FmZqbvIskaawYMyMOHDzF48GCcOHECqampGDJkSLXrz5s3D2ZmZvj1118xbtw4ODs7w8PDA//4xz8ghMC1a9ek9O3l5aX2B/7JkyeYO3cu2rZtC2tra7Rs2RJvvfUWnjx5orRecnIyBgwYAE9PT1hbWyMwMFBtda6fnx+GDh2KQ4cOSbc52rRpg6+//lppvadPn2L+/PkICAiAjY0N3Nzc0KdPH+zZs6fG9+n+/ft4/fXX4efnB2tra/j4+GDChAnIy8vT+Jx+/fqhX79+KsvV3Z//7rvvEBwcDEdHRzg5OaFz58747LPPADyrLh81ahQAoH///lK1eeX7yhkZGQgJCYG9vT0cHR0xZMgQnDt3TmW7Dg4OyM3NRVRUFBwdHfHHP/5RbZkU93YXL16M1atXw9/fH9bW1njxxRdx/PhxlX3auHEjAgMDYWNjg06dOmHLli1at0PYunUrrKys0Ldv3xrXBYABAwYAAC5fvgwAWLVqFW7cuIElS5aoBAEAaNasGf7+97+rLP/2228RGxuLoUOHwtnZGd9++61W2wcAMzMzzJw5E+vWrUNQUBCsra2lW2s3btzApEmT0KxZM1hbWyMoKAhffvmlymtcv34dL730Euzt7eHp6YnXX39d5TsAaL5Hr+74evz4MebNm4d27drBxsYG3t7eGDlyJHJzc6V1KioqsHTpUgQFBcHGxgbNmjXD9OnTUVBQoPRaQggsWLAAPj4+sLOzQ//+/VWOqercv38f8fHxcHZ2houLCyZOnKj2qv7MmTOIj49HmzZtYGNjAy8vL0yaNAn5+fnSOvPmzcOcOXMAAK1bt5a+A4qaMm1/KwBg4MCBuHr1Kk6dOqX1vlDDYM2AgSguLkZkZCSOHz+OTZs2YejQoVo/d/To0ejYsSM++ugjbN++HQsWLEDTpk2xatUqDBgwAElJSVi3bh3efPNNvPjii9IPfUVFBaKjo3Ho0CFMmzYNHTt2xM8//4xPP/0Uv/76K7Zu3Spt44svvkBQUBCio6NhaWmJbdu2YcaMGaioqEBiYqJSeS5evIjY2FhMnjwZEydOxJdffon4+HgEBwcjKCgIwLMflA8//BBTpkxB9+7dUVRUhB9//BEnTpzAwIEDNe7rw4cPERISgvPnz2PSpEl4/vnnkZeXh/T0dFy/fh3u7u61eNdV7dmzB2PHjkVYWBiSkpIAAOfPn8fhw4cxe/Zs9O3bF7NmzcI///lPvP322+jYsSMASP9NSUnBxIkTERERgaSkJJSUlOCLL75Anz59cPLkSaUTcllZGSIiItCnTx8sXrwYdnZ21Zbt22+/xYMHDzB9+nSYmZnh448/xsiRI3Hp0iWpNmH79u0YPXo0OnfujA8//BAFBQWYPHkyWrRoodX+HzlyBJ06ddK6dkJxYnNzcwMApKenw9bWFrGxsVo9HwCOHTuGixcvIjk5GVZWVhg5ciTWrVuHt99+W+vX+P7777FhwwbMnDkT7u7u8PPzw+3bt9GzZ08pLHh4eCAjIwOTJ09GUVERXnvtNQDAo0ePEBYWht9++w2zZs1C8+bNkZKSgu+//17r7VdVXl6OoUOHYu/evRgzZgxmz56NBw8eYM+ePTh79iz8/f0BANOnT8dXX32FhIQEzJo1C5cvX8by5ctx8uRJHD58WPoc3n33XSxYsABRUVGIiorCiRMnMGjQIJSWltZYFiEEhg8fjkOHDuGVV15Bx44dsWXLFkycOFFl3T179uDSpUtISEiAl5cXzp07h9WrV+PcuXM4evQozMzMMHLkSPz6669Yv349Pv30U+k75+HhAaB2vxXBwcEAgMOHD+O5556r8/tNOiBIr5KTkwUA4evrK5o0aSK2bt2q9XPnzp0rAIhp06ZJy8rKyoSPj48wMzMTH330kbS8oKBA2NraiokTJ0rLUlJShLm5uTh48KDS665cuVIAEIcPH5aWlZSUqGw/IiJCtGnTRmmZr6+vACAOHDggLbtz546wtrYWf/7zn6VlXbt2FUOGDNF6XxXeffddAUBs3rxZ5bGKigohhBCXL18WAERycrL0WGhoqAgNDVV5zsSJE4Wvr6/09+zZs4WTk5MoKyvTWIaNGzcKACIrK0tp+YMHD4SLi4uYOnWq0vL//e9/wtnZWWn5xIkTBQDx17/+tcYyKfbHzc1N3Lt3T1qelpYmAIht27ZJyzp37ix8fHzEgwcPpGX79u2TjrGa+Pj4iJiYGJXliuM0MzNT3L17V1y7dk189913ws3NTdja2orr168LIYRwdXUVXbt2rXE7lc2cOVO0bNlS+vx2794tAIiTJ09q9XwAwtzcXJw7d05p+eTJk4W3t7fIy8tTWj5mzBjh7OwsHdNLly4VAMSGDRukdYqLi0Xbtm1VPmdfX1+l75BC1ePryy+/FADEkiVLVNZV7OfBgwcFALFu3Tqlx3fu3Km0/M6dO8LKykoMGTJEeq4QQrz99tsCgNryVLZ161YBQHz88cfSsrKyMhESEqLyPVH3PV+/fr3Kd3rRokUCgLh8+bLK+tr+VihYWVmJP/3pT9XuAzU83iYwELdv34aNjQ1atmxZ6+dOmTJF+n8LCwu88MILEEJg8uTJ0nIXFxe0b98ely5dkpZt3LgRHTt2RIcOHZCXlyf9U1T9ZmVlSeva2tpK/19YWIi8vDyEhobi0qVLKCwsVCpPYGAgQkJCpL89PDxUtu3i4oJz584hJyenVvuampqKrl27YsSIESqP6eKeo4uLC4qLi7W6XVHVnj17cP/+fYwdO1bp/bSwsECPHj2U3k+FP/3pT1q//ujRo+Hq6ir9rXiPFe/rzZs38fPPP2PChAlwcHCQ1gsNDUXnzp212kZ+fr7SNqoKDw+Hh4cHWrZsiTFjxsDBwQFbtmyRah6Kiorg6Oi
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from utils_clusters import fit_kmeans\n",
"from visual import draw_clusters\n",
"\n",
"\n",
"kmeans = fit_kmeans(reduced_data, 2, random_state)\n",
"draw_clusters(reduced_data, kmeans)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Визуализация результатов неиерархической кластеризации для пяти кластеров с учетом понижения размерности"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"kmeans = fit_kmeans(reduced_data, 5, random_state)\n",
"draw_clusters(reduced_data, kmeans)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Сравнение результатов кластеризации с реальным разбиением с учетом понижения размерности"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x1200 with 3 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"labels = [2 if val == 1 else 1 if val == 2 else val for val in kmeans.labels_]\n",
"\n",
"plt.figure(figsize=(16, 12))\n",
"draw_data_2d(\n",
" pd.DataFrame({\"Overall\": reduced_data[:, 0], \"Potential\": reduced_data[:, 1]}),\n",
" 0,\n",
" 1,\n",
" labels,\n",
" y_names,\n",
" plt.subplot(2, 2, 1),\n",
")\n",
"draw_data_2d(\n",
" pd.DataFrame({\"Overall\": reduced_data[:, 0], \"Potential\": reduced_data[:, 1]}),\n",
" 0,\n",
" 1,\n",
" result,\n",
" y_names,\n",
" plt.subplot(2, 2, 2),\n",
")\n",
"draw_data_2d(\n",
" pd.DataFrame({\"Overall\": reduced_data[:, 0], \"Potential\": reduced_data[:, 1]}),\n",
" 0,\n",
" 1,\n",
" yy.tolist(),\n",
" y_names,\n",
" plt.subplot(2, 2, 3),\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Выбор количества кластеров на основе инерции\n",
"Инерция - сумма квадратов расстояний выборок до ближайшего центра кластера, взвешенная по весам выборок, если таковые имеются."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"range(2, 13)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[88724.65511811024,\n",
" 58680.50738611234,\n",
" 50313.51330829106,\n",
" 45319.272574621245,\n",
" 41013.384307408094,\n",
" 38094.87539190409,\n",
" 32321.27378881988,\n",
" 29051.591095598113,\n",
" 27690.913830248697,\n",
" 26830.519788055084,\n",
" 25677.68645472175]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAsUAAAHUCAYAAADSqVW7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABeYklEQVR4nO3dd3hU1dr+8XuSkEKZhJoECB3pShOMSJNIxKDSFJCjiO2IWABF4HgA358FRD0iiqDH8xo8iFJVmiDSkUiVpoAgoQgEVCChhpT1+2O/GRgTIAlkdibz/VzXvmZm7zV7nkm48Ga79rMcxhgjAAAAwIf52V0AAAAAYDdCMQAAAHweoRgAAAA+j1AMAAAAn0coBgAAgM8jFAMAAMDnEYoBAADg8wjFAAAA8HmEYgAAAPg8QjEAn7R8+XI5HA7NnDnT7lJc2rVrp3bt2rleF8Yar9VfvyMAFBaEYgBFhsPhyNW2fPlyj9W0b9++K9YyZswYj9VyvT388MNu36VkyZKqUaOGevTooVmzZikzM9PuEgEg1wLsLgAArpf//ve/bq8//fRTLV68ONv+evXqaceOHZ4sTb1799Zdd92VbX+TJk08Wsf1FhQUpI8//liSdO7cOe3fv19z585Vjx491K5dO3399ddyOp2u8d9++61dpQLAFRGKARQZf/vb39xe//DDD1q8eHG2/ZI8HoqbNm2aYx3eLiAgINv3evXVVzVmzBgNHz5cjz/+uKZNm+Y6FhgY6OkSJUlnzpxRiRIlbPlsAN6B6RMAfFpmZqZee+01Va5cWcHBwerQoYP27NmTbdzatWt15513KjQ0VMWLF1fbtm31/fffe6TGjIwM/eMf/1BERIRKlCihe+65RwcPHsw2bsaMGWrWrJlCQkJUrlw5/e1vf9OhQ4dcx+fMmSOHw6GtW7e69s2aNUsOh0PdunVzO1e9evXUs2fPfNc8bNgwdezYUTNmzNAvv/zi2v/XOcUXLlzQyJEj1axZM4WGhqpEiRJq3bq1li1blu2cf/75px588EE5nU6FhYWpb9++2rJlixwOh+Lj413jHn74YZUsWVK//vqr7rrrLpUqVUp9+vSRJK1atUr33XefqlSpoqCgIEVFRWnQoEE6d+6c22dlnePAgQPq3LmzSpYsqUqVKmnChAmSpG3btun2229XiRIlVLVqVU2dOjXfPysAhQOhGIBPGzNmjL788ku98MILGj58uH744QdXgMqydOlStWnTRikpKRo1apRef/11nTx5UrfffrvWrVuXq885e/as/vjjj2xbenr6Vd/72muvaf78+Ro6dKieffZZLV68WDExMW5BLj4+Xvfff7/8/f01evRoPf7445o9e7Zuu+02nTx5UpJ02223yeFwaOXKla73rVq1Sn5+flq9erVr3++//66dO3eqTZs2ufpul/Pggw/KGKPFixdfdkxKSoo+/vhjtWvXTm+88YZefvll/f7774qNjdXmzZtd4zIzM3X33Xfr888/V9++ffXaa6/pyJEj6tu3b47nTU9PV2xsrCpUqKC33npL3bt3l2T9w+Hs2bPq37+/3nvvPcXGxuq9997TQw89lO0cGRkZ6tSpk6KiojR27FhVq1ZNTz/9tOLj43XnnXeqefPmeuONN1SqVCk99NBDSkxMvKafFwCbGQAoogYMGGAu99fcsmXLjCRTr149k5qa6tr/7rvvGklm27ZtxhhjMjMzTe3atU1sbKzJzMx0jTt79qypXr26ueOOO65YQ2JiopF02S0hIcE1tm3btqZt27bZaqxUqZJJSUlx7Z8+fbqRZN59911jjDEXLlwwFSpUMA0bNjTnzp1zjZs3b56RZEaOHOna16BBA3P//fe7Xjdt2tTcd999RpLZsWOHMcaY2bNnG0lmy5YtV/xuffv2NSVKlLjs8R9//NFIMoMGDbrsd0xPT3f7+RtjzIkTJ0x4eLh55JFHXPtmzZplJJlx48a59mVkZJjbb7/dSDKffPKJW12SzLBhw7LVdPbs2Wz7Ro8ebRwOh9m/f3+2c7z++utudYWEhBiHw2G++OIL1/6dO3caSWbUqFGX/VkAKPy4UgzAp/Xr189tnmvr1q0lSXv37pUkbd68Wbt379YDDzygP//803WF98yZM+rQoYNWrlyZqy4LTzzxhBYvXpxtq1+//lXf+9BDD6lUqVKu1z169FBkZKQWLFggSdqwYYOOHTump556SsHBwa5xcXFxqlu3rubPn+/2/VatWiVJOnXqlLZs2aInnnhC5cqVc+1ftWqVwsLC1LBhw6vWdiUlS5Z0fc7l+Pv7u37+mZmZOn78uNLT09W8eXNt2rTJNW7hwoUqVqyYHn/8cdc+Pz8/DRgw4LLn7t+/f7Z9ISEhrudnzpzRH3/8oVtvvVXGGP3444/Zxj/22GOu52FhYapTp45KlCih+++/37W/Tp06CgsLc/2ZAeCduNEOgE+rUqWK2+vSpUtLkk6cOCFJ2r17tyRd9n/TS1JycrLrfZdTu3ZtxcTE5KvG2rVru712OByqVauW9u3bJ0nav3+/JCuc/VXdunXdpka0bt1akyZN0p49e/Trr7/K4XAoOjraFZYff/xxrVq1Sq1atZKf37VdNzl9+rQkuQX6nEyePFlvv/22du7cqbS0NNf+6tWru57v379fkZGRKl68uNt7a9WqleM5AwICVLly5Wz7Dxw4oJEjR2rOnDmu33GW5ORkt9fBwcEqX768277Q0FBVrlxZDocj2/6/ng+AdyEUA/Bp/v7+Oe43xkiS6yrwm2++qcaNG+c4NuuKqDe47bbbJEkrV67U3r171bRpU9fNbePHj9fp06f1448/6rXXXrvmz9q+fbukywdXSZoyZYoefvhhdenSRUOGDFGFChVc86J//fXXfH92UFBQtlCfkZGhO+64Q8ePH9fQoUNVt25dlShRQocOHdLDDz+c7Yr/5f5sXO3PDADvRCgGgCuoWbOmJMnpdOb7Su+1yrpancUYoz179ujGG2+UJFWtWlWStGvXLt1+++1uY3ft2uU6LllXxqtUqaJVq1Zp7969rukibdq00eDBgzVjxgxlZGRc8012ktU32uFw6I477rjsmJkzZ6pGjRqaPXu229XXUaNGuY2rWrWqli1bprNnz7pdLc6pU8jlbNu2Tb/88osmT57sdmPdlW4EBOA7mFMMAFfQrFkz1axZU2+99ZZrOsClfv/99wKv4dNPP3Wblztz5kwdOXJEnTp1kiQ1b95cFSpU0KRJk5Samuoa980332jHjh2Ki4tzO1/r1q21dOlSrVu3zhWKGzdurFKlSmnMmDEKCQlRs2bNrqnmMWPG6Ntvv1XPnj2zTf+4VNZV10uvsq5du1YJCQlu42JjY5WWlqZ///vfrn2ZmZmuFmm5kdNnGWP07rvv5vocAIourhQDwBX4+fnp448/VqdOndSgQQP169dPlSpV0qFDh7Rs2TI5nU7NnTv3qufZtGmTpkyZkm1/zZo1FR0dfcX3lilTRrfddpv69euno0ePaty4capVq5brprNixYrpjTfeUL9+/dS2bVv17t1bR48e1bvvvqtq1app0KBBbudr3bq1PvvsMzkcDtd0Cn9/f916661atGiR2rVrl+tFNtLT013f6/z589q/f7/mzJmjrVu3qn379vroo4+u+P7OnTtr9uzZ6tq1q+Li4pSYmKhJkyapfv36bv8I6dKli1q0aKHnn39ee/bsUd26dTVnzhwdP35ckrLN8c1J3bp1VbNmTb3wwgs6dOiQnE6nZs2axVxgAJIIxQBwVe3atVNCQoJeeeUVvf/++zp9+rQiIiLUsmVL/f3vf8/VOT7//HN9/vnn2fb37dv3qqH4H//4h7Zu3arRo0fr1KlT6tChgz744AO3aQQPP/ywihcvrjFjxmjo0KEqUaKEunbtqjfeeENhYWFu58u6Oly3bl2VLVvWbf+iRYtcx3MjNTVVDz74oCSpePHiqlChgpo1a6aRI0eqa9euV71Z7+GHH1ZSUpI+/PBDLVq0SPXr19eUKVM0Y8YMLV++3DXO399f8+fP13PPPafJkyfLz89PXbt21ahRo9S
"text/plain": [
"<Figure size 800x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from utils_clusters import get_clusters_inertia\n",
"from visual import draw_elbow_diagram\n",
"\n",
"\n",
"inertias, clusters_range = get_clusters_inertia(df_filtered_noclub_nona, random_state)\n",
"display(clusters_range)\n",
"display(inertias)\n",
"draw_elbow_diagram(inertias, clusters_range)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Выбор количества кластеров на основе коэффициента силуэта¶\n",
"Коэффициент силуэта рассчитывается с использованием среднего расстояния внутри кластера (а) и среднего расстояния до ближайшего кластера (b) для каждого образца. Коэффициент силуэта для образца равен (b - a) / max(a, b). Для пояснения: b — это расстояние между образцом и ближайшим кластером, частью которого образец не является. Обратите внимание, что коэффициент силуэта определяется только в том случае, если количество меток равно 2 <= n_labels <= n_samples - 1.\n",
"\n",
"Эта функция возвращает средний коэффициент силуэта по всем образцам.\n",
"\n",
"Лучшее значение — 1, худшее — -1. Значения около 0 указывают на перекрывающиеся кластеры. Отрицательные значения обычно указывают на то, что образец был отнесен к неправильному кластеру."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"range(2, 13)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[0.6014604423677362,\n",
" 0.40641016226313986,\n",
" 0.2607618424596132,\n",
" 0.24680408556961408,\n",
" 0.25520393257177015,\n",
" 0.24832308156641922,\n",
" 0.23714224866284933,\n",
" 0.2568055911613917,\n",
" 0.2210390156434532,\n",
" 0.20567375653912975,\n",
" 0.19990886356213602]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAArgAAAHUCAYAAADRHluTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABa/0lEQVR4nO3deVxU9f7H8feAsriAC7KoqLikuVKopGZaYWiLmlnZhtJts+Vm2qL1UzMrssWs9GZalraaZmbd0lukZrmmmUtm7ju4JKB4RZ05vz/OZXAEdEaBMzO8no/HeTBz5nvOfAYy3x4+5/u1GYZhCAAAAPATAVYXAAAAAJQkAi4AAAD8CgEXAAAAfoWACwAAAL9CwAUAAIBfIeACAADArxBwAQAA4FcIuAAAAPArBFwAAAD4FQIuAJ+zYMEC2Ww2zZw50+pSnAYMGKAGDRq47LPZbHr22Wedz5999lnZbDYdPHiwbIsDgHKGgAvAK9hsNre2BQsWlGldBw4c0KOPPqpmzZopNDRUkZGRat++vZ566ikdPXq0TGspC8eOHdOzzz5b5Pf522+/dQnsAOCtKlhdAABI0ocffujyfNq0afr+++8L7b/44ou1YcOGMqnp77//Vtu2bZWTk6O7775bzZo106FDh7RmzRq9/fbbGjhwoKpUqSJJmjx5shwOR5nUVZqOHTumUaNGSZK6du3q8tq3336rCRMmEHIBeD0CLgCvcOedd7o8X7p0qb7//vtC+yWVWcB97733tHPnTv3yyy/q2LGjy2s5OTkKCgpyPq9YsWKZ1ITSkZubq8qVK1tdBoASQosCAJ/lcDj0wgsvqG7dugoJCdHVV1+tzZs3Fxq3bNkyde/eXeHh4apUqZK6dOmiX3755Zzn37JliwIDA3XZZZcVei0sLEwhISHO50X14BYnKytLAwYMULVq1RQeHq7U1FQdO3bMZcypU6c0evRoNWrUSMHBwWrQoIGefvpp5eXluYw7s883X4MGDTRgwIBC7zto0CDFxsYqODhYjRs31pgxY5xXnrdv365atWpJkkaNGuVsC3n22Wc1YMAATZgwwfme+Vs+h8OhcePGqUWLFgoJCVFUVJTuv/9+HT58+Jzfj4yMDKWmpqpu3boKDg5WTEyMevXqpe3bt7uM++6779SlSxdVrVpVYWFhateunT755BOXMTNmzFBCQoJCQ0MVERGhO++8U3v27HEZM2DAAFWpUkVbtmzRtddeq6pVq+qOO+644M8BwHtwBReAz3rppZcUEBCgxx9/XNnZ2Xr55Zd1xx13aNmyZc4xP/74o3r06KGEhASNHDlSAQEBev/993XVVVdp0aJFat++fbHnr1+/vux2uz788EP179+/xOq+5ZZbFBcXp7S0NK1atUrvvvuuIiMjNWbMGOeYe+65R1OnTlXfvn01ZMgQLVu2TGlpadqwYYO+/PJLj9/z2LFj6tKli/bs2aP7779f9erV0+LFizVs2DDt27dP48aNU61atZytFzfeeKP69OkjSWrdurVyc3O1d+/eIttGJOn+++/XBx98oNTUVP3zn//Utm3bNH78eP3222/65ZdfznqF+6abbtL69ev1yCOPqEGDBtq/f7++//577dy50/mPhg8++EB33323WrRooWHDhqlatWr67bffNHfuXN1+++3OMampqWrXrp3S0tKUmZmpN954Q7/88ot+++03VatWzfmep06dUnJysi6//HK9+uqrqlSp0gV/DgBexAAAL/TQQw8Zxf0vav78+YYk4+KLLzby8vKc+9944w1DkrF27VrDMAzD4XAYTZo0MZKTkw2Hw+Ecd+zYMSMuLs7o1q3bWWvIyMgwatWqZUgymjVrZjzwwAPGJ598YmRlZRUa279/f6N+/fou+yQZI0eOdD4fOXKkIcm4++67XcbdeOONRs2aNZ3PV69ebUgy7rnnHpdxjz/+uCHJ+PHHH4t9j3z169c3+vfv73w+evRoo3LlysZff/3lMm7o0KFGYGCgsXPnTsMwDOPAgQPFnrO4n8miRYsMScbHH3/ssn/u3LlF7j/d4cOHDUnGK6+8UuyYrKwso2rVqkZiYqLx3//+1+W1/J/riRMnjMjISKNly5YuY7755htDkjFixAjnvv79+xuSjKFDh5bY5wDgXWhRAOCzUlNTXfpgO3fuLEnaunWrJGn16tXatGmTbr/9dh06dEgHDx7UwYMHlZubq6uvvlo//fTTWW8Mi4qK0u+//64HHnhAhw8f1sSJE3X77bcrMjJSo0ePlmEY51X3Aw884PK8c+fOOnTokHJyciSZN3NJ0uDBg13GDRkyRJL073//2+P3nDFjhjp37qzq1as7vw8HDx5UUlKS7Ha7fvrpp/P5KM5zh4eHq1u3bi7nTkhIUJUqVTR//vxijw0NDVVQUJAWLFhQbBvA999/ryNHjmjo0KEubSGSnG0Sv/76q/bv368HH3zQZcx1112nZs2aFfk9GzhwYIl9DgDehRYFAD6rXr16Ls+rV68uSc6gtGnTJkk6a3tBdna287iixMTE6O2339a//vUvbdq0SfPmzdOYMWM0YsQIxcTE6J577inRusPCwrRjxw4FBASocePGLuOio6NVrVo17dixw+P33LRpk9asWePssT3T/v37PT7n6efOzs5WZGSkx+cODg7WmDFjNGTIEEVFRemyyy7T9ddfr5SUFEVHR0sye6ElqWXLlsWeJ/970rRp00KvNWvWTD///LPLvgoVKqhu3bol9jkAeBcCLgCfFRgYWOT+/Cur+VdnX3nlFcXHxxc5Nn+ar3Ox2Wy66KKLdNFFF+m6665TkyZN9PHHH59XwD1X3ae/5/my2+0uzx0Oh7p166Ynn3yyyPEXXXTReb+Xw+FQZGSkPv744yJfLy5U5xs0aJBuuOEGzZ49W/PmzdPw4cOVlpamH3/8UZdccsl513U2wcHBCghw/SXmhX4OAN6DgAvAbzVq1EiSOeNBUlJSiZ23YcOGql69uvbt21di5zxd/fr15XA4tGnTJl188cXO/ZmZmcrKylL9+vWd+6pXr66srCyX40+cOFGotkaNGuno0aPn/D6cLVQX91qjRo30ww8/qFOnTgoNDT3r+YvTqFEjDRkyREOGDNGmTZsUHx+v1157TR999JHz57hu3bpCV7Xz5X9PNm7cqKuuusrltY0bN7p8z85Ww4V+DgDegR5cAH4rISFBjRo10quvvlrkqmMHDhw46/HLli1Tbm5uof3Lly/XoUOHivx1eEm49tprJUnjxo1z2T927FhJZl9pvkaNGhXqn500aVKhK7i33HKLlixZonnz5hV6v6ysLJ06dUqSnLMJnBmaJTnniT3ztVtuuUV2u12jR48udMypU6eKPFe+Y8eO6fjx4y77GjVqpKpVqzqnRLvmmmtUtWpVpaWlFRqbf9W7bdu2ioyM1MSJE12mUvvuu++0YcMGl+9ZcS7kcwDwLlzBBeC3AgIC9O6776pHjx5q0aKFUlNTVadOHe3Zs0fz589XWFiYvv7662KP//DDD/Xxxx/rxhtvVEJCgoKCgrRhwwZNmTJFISEhevrpp0ul7jZt2qh///6aNGmSsrKy1KVLFy1fvlxTp05V7969deWVVzrH3nPPPXrggQd00003qVu3bvr99981b948RUREuJzziSee0Jw5c3T99ddrwIABSkhIUG5urtauXauZM2dq+/btioiIUGhoqJo3b67p06froosuUo0aNdSyZUu1bNlSCQkJkqR//vOfSk5OVmBgoPr166cuXbro/vvvV1pamlavXq1rrrlGFStW1KZNmzRjxgy98cYb6tu3b5Gf9a+//tLVV1+tW265Rc2bN1eFChX05ZdfKjMzU/369ZNkXoF//fXXdc8996hdu3a6/fbbVb16df3+++86duyYpk6dqooVK2rMmDFKTU1Vly5ddNtttzmnCWvQoIEee+yxc37fL+RzAPAy1k7iAABFc2easBkzZrjs37ZtmyHJeP/99132//bbb0afPn2MmjVrGsHBwUb9+vWNW265xUhPTz9rDWvWrDGeeOIJ49JLLzVq1KhhVKhQwYiJiTFuvvl
"text/plain": [
"<Figure size 800x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from utils_clusters import get_clusters_silhouette_scores\n",
"from visual import draw_silhouettes_diagram\n",
"\n",
"silhouette_scores, clusters_range = get_clusters_silhouette_scores(df_filtered_noclub_nona, random_state)\n",
"display(clusters_range)\n",
"display(silhouette_scores)\n",
"draw_silhouettes_diagram(silhouette_scores, clusters_range)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Пример анализа силуэтов для разбиения от 2 до 12 кластеров\n",
"\n",
"https://scikit-learn.org/1.5/auto_examples/cluster/plot_kmeans_silhouette_analysis.html"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1800x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1800x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1800x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABZoAAAKgCAYAAAAS1si3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3wTdR8H8E/SpOlMd2lpoS0to2UVyl5lF0T2HgIVBNlLVFBZCig8CjwiS31AGcpQQERANsgS2UOWlL1XS3fT/J4/Qs6kTdt0puPzziuvXm5+73J3+d23v/udTAghQERERERERERERESUQ3JLB0BERERERERERERERRsTzURERERERERERESUK0w0ExEREREREREREVGuMNFMRERERERERERERLnCRDMRERERERERERER5QoTzURERERERERERESUK0w0ExEREREREREREVGuMNFMRERERERERERERLnCRDMRERERERERERER5QoTzURU6KxYsQIymUx6G2ratKnUf+DAgVL/GzduGE2zb9++gg2aCqVp06ZJ+4S/v3+BLnvgwIHSsps2bZpvy3nw4AEiIyPh4+MDhUIhLXPTpk35tkwq+jI6l5YUmf3OUMlVWPaLwhJHYZDbbVHct6UlyzlERESmMNFMRPnuxx9/REREBEqVKgWlUgknJycEBASgadOmGDNmDHbs2GHpEAs1c5PoJT1xVBIJIdCtWzesWLEC9+7dQ2pqqqVDAgDs27fPaJ9dsWKF0fDnz5+jTp060nC5XI7FixebnFYmk6FDhw4ml7Njx45043LfLxqKe/KHqDBJe169ceOGpUPKEzyPWB4repgn7XYy9VYoFJYOk4goT/BsRkT5qn///li5cqVRv5iYGMTExODGjRvYv38/bt68iYiICGl47dq1MXfu3IIOlShP9erVC1WqVAEAlClTJl+WcevWLRw6dEj6/Prrr6Nx48aQy+XSsgubx48fo1WrVjhz5gwAQC6X45tvvkFkZGSG02zduhXXr19HuXLljPovWLAgX2Ol4ou/M0RFA49VIiKiooWJZiLKN9u3bzdKMoeFhSEiIgIODg54/PgxTp48iSNHjqSbrnLlyqhcuXJBhkqU59q0aYM2bdrk6zJu3rxp9Hn+/PkIDAzM12UmJydDCAGVSpXtaR88eIAWLVrg4sWLAAArKyt8//336NOnT6bTabVaLFy4EF988YXU78qVK9i+fXu2Y6CSLSYmBmq1mr8zREUEj1UyJTdlEUsrV64chg0blq6/XM6bzYmoeODZjIjyze+//y51BwUF4dixY5g5cyYmTZqEL774Avv27cPjx48xceJEo+ny6lbIjRs3on79+rCzs4OLiwu6d++O27dvmxz3xIkT6N+/PwICAmBjYwMHBwdUqVIFEyZMwJ07d9KN7+/vL8U3bdo0o2FZtZcXExOD2bNno27dunBycoK1tTXKli2LgQMH4sKFC+mWExAQYNSvWbNmRm3/6pe3f/9+aZzvvvsuw9tkk5KSsHDhQjRp0gSurq6wtraGt7c3unfvbjLxn5nTp09j+PDhqFu3Lnx8fGBrawsbGxv4+fmhZ8+e+OOPP9JNk3b7REdHY+LEifDz84O1tTXKlSuHWbNmQQiR62WZEhMTA0dHRymGZcuWpRune/fu0vC2bdtK/Q8ePIjOnTvDx8cH1tbWcHBwgL+/P9q2bYtp06YhOjpaGjezNprPnTuHfv36wd/fHyqVCra2tihbtiyaN2+OSZMm4e7du1muh0wmQ3h4uFG/oKAgk8dNdvfvtM2wnD9/Hp06dYKbmxtUKhX+/vvvLONL686dOwgPD5eSzEqlEmvXrs0yyay/8Prf//6HuLg4qf+XX34p7SNWVlaZzuPhw4eYPHkyQkND4ejoCBsbGwQFBWHEiBG4detWuvELcr+Oi4vDjBkzULNmTTg6OkKpVMLT0xOhoaF46623sp1MP378OCIjIxEUFAQ7Ozs4ODigQoUKiIyMxD///JPl9FndYp/Zue+XX35BmzZtpGaS1Go1AgMD0alTJ8yePRtarVa6fThtDXbDZaad78GDB9GrVy+ULVsWKpUKarUa9evXx1dffYWUlJR065C22ZbNmzejQYMGcHBwQNmyZQFk71kAV69eRe/eveHu7g4bGxvUrFkTmzdvNrn9Dh48iKZNm8Le3h6urq7o0aMHoqKictVme26P3+zEn5HsnPvy4vi5f/8+BgwYAHd3d6jVarRv3x5XrlwBAJw8eRJt2rSBo6Njhr/taffj69evY/78+QgJCYGNjQ18fHwwfvx4vHz5MlvbIS9/PwHdPwt79+4NV1dX2Nvbo0mTJti1a1em0+zbtw+DBg1CzZo14e3tDZVKBTs7OwQFBSEyMhLnzp0zGl8mk6FZs2ZG/QICAtI1N6TRaPDRRx/htddeQ2BgIJydnaFUKuHm5obGjRvjyy+/NHm8mXLmzBmj7W94np08ebLUf/z48VL/hw8fGk1z7NgxAKaP1ZycR/RSUlIwZ84cVKpUCSqVCr6+vnjnnXeQlJRk1roB+XOMpXXnzh289957qFGjBtRqNWxsbFC2bFl06tQJO3fuNGsemTVhlRdlFHPKqIauX7+O0aNHIzg4GPb29rC1tUVISAjef/99PHnyJF385pZFsnN+KgzKlCmDd955J93b8HggIirSBBFRPhk1apQAIAAId3d3ce3aNbOmW758uTRd2tNUeHi41H/AgAFS/6ioKKNpIiIijD7r3+XLlxcJCQlG85w3b56Qy+UmxwcgnJycxN69e42m8fPzk4ZPnTrVaNjUqVOlYX5+fkbDrly5Ivz9/TNclkqlEuvWrTO5HFPv8PBwo+Vl9I6KihJCCPHo0SMRGhqa4XhyuVzMnz/frO9JCCG+/PLLTJcrk8nE8uXLM9w+bm5uIjg42OS0H330UZ4uy/C7GDFihNS/du3aRtPExsYKOzs7abj++9i1a5ewsrLKNIa///5bms+AAQOMvie9CxcuGM3f1Hvbtm1ZbvusvnO9nOzfhsdZjRo1hL29vdE0p06dyjS2vXv3Go0/depUERAQYLSf//LLL2ZN26lTJ6n7q6++EkIIER0dLRwdHaX4DI8Tw/OCEEIcPnxYuLu7Z7r+Bw4cMJqmIPfrpk2bZrqsnj17ZrqtDU2fPl3IZLIM57Vx40Zp3IzOpWm3v/7coZfRuS/tedvUOyEhId252tTbcL6TJ0/OdNzGjRuL2NhYoxjTDk/7fZuK15DhtqlWrZq0r6XdB3bt2mU03ZYtW4RCoUg3rpubm2jQoIHJ80FWcnv8Zif+jGT33Jfb48fV1dXk76SHh4fYuHGjUKlU6Yal/W1Pux83b97cZCy1a9c2mi6z/SKvfz+joqKEl5eXye3z2muvZRjHhAkTMt2+1tbWYufOndL4WR1v+uP/5cuXWY7bsmVLodFoslw3rVYr3NzcpOlWr14tDWvUqJHUv1atWlL/9evXS/3VarW0HFPfSXbOI2mnz6h8+MYbb5j93eX1MZbW1q1bTc5T/x4zZow0bmZlTsNp0h5zeVFGMaeMqrdp06ZM5+vj4yMuXryY4XbOqCyS3fNTZsz5HTN8p93emTHcZx0dHUWpUqWEQqEQ7u7uomXLlmLNmjVmz4uIqLBj0xlElG9q1qwpdT958gQVKlRAaGgoateujbCwMDRr1gxBQUH5suwdO3agdu3aiIiIwN69e6V2bK9evYpNmzahV69eAIADBw5g/PjxUi3DsmXLonfv3oiNjcXy5csRHx+P6OhodO3aFdeuXYOLi0uOY0pNTUXnzp2lGoIeHh7o06cPXF1dsWPHDhw+fBhJSUno378/wsLCUK5cOXzwwQe4ceMGZs2aJc3n7bfflppHKFOmDMqUKQMHBwcsXrwY169fBwDUqlULPXv2lKZxdXUFALzxxhs4ffo0AMDR0RF9+vSBr68vDh06hO3bt0Or1WLcuHGoVasWGjZsmOU6qVQq1KtXD6GhoXBzc4ODgwOio6Oxe/duHD9+HEIITJgwAT179oStrW266Z8+fYrnz5+jf//+KF26NL755hupVsuCBQvw4Yc
"text/plain": [
"<Figure size 1800x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1800x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABZoAAAKgCAYAAAAS1si3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3wT9f8H8NddVtt0T3ZbWvawUvYeQkGG7D0FQdnz52Y4QEUFviLDBTJUhgIiArJBEEWGLFmyQTa0dDfJ5/dHyJm0aZvStCnt68kjD27f+y53l8+9+7nPSUIIASIiIiIiIiIiIiKixyS7OgAiIiIiIiIiIiIierIx0UxEREREREREREREucJEMxERERERERERERHlChPNRERERERERERERJQrTDQTERERERERERERUa4w0UxEREREREREREREucJEMxERERERERERERHlChPNRERERERERERERJQrTDQTERERERERERERUa4w0UxEBc7ixYshSZLysda0aVNl+MCBA5XhFy9etJln586d+Rs0FUhTp05VjomwsLB8XffAgQOVdTdt2jTP1nPjxg0MGjQIJUuWhFqtVta5du3aPFsnPfkyu5YWFVn9zlDRVVCOi4ISR0GQ231R2PelK8s5RERE9jDRTER57rvvvkNMTAxCQkKg0Wjg4+OD8PBwNG3aFGPGjMHmzZtdHWKB5mgSvagnjooiIQS6du2KxYsX4/r16zAaja4OCQCwc+dOm2N28eLFNuPv37+P2rVrK+NlWcb8+fPtzitJEjp06GB3PZs3b84wLY/9J0NhT/4QFSTpr6sXL150dUhOweuI67Gih2PSl1Uy++RlxQQiovyidnUARFS49e/fH0uXLrUZFhcXh7i4OFy8eBG7du3CpUuXEBMTo4yvVasWZs6cmd+hEjlVz549UbVqVQBA6dKl82Qdly9fxt69e5X+du3aoVGjRpBlWVl3QXP79m20bNkSf/31FwBAlmV88cUXGDRoUKbzbNiwAefPn0fZsmVths+ZMydPY6XCi78zRE8GnqtUlPAPJkRUGDDRTER5ZtOmTTZJ5ujoaMTExMDT0xO3b9/GoUOH8Ntvv2WYr0qVKqhSpUp+hkrkdK1bt0br1q3zdB2XLl2y6Z89ezYiIiLydJ2pqakQQkCn0+V43hs3bqBFixY4efIkAEClUmHJkiXo3bt3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
"text/plain": [
"<Figure size 1800x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABZoAAAKgCAYAAAAS1si3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3wT9f8H8Fd223QvaAuU0jJahpWyyiq7IHtPgQqC7O1WwAEqXwW+IijqtyjjJ0MBEQHZKEPZe0rZe7V0N83n90fIkbRJm9KRlr6ePEIuN993ubt87t3PfU4mhBAgIiIiIiIiIiIiInpGcnsHQEREREREREREREQlGxPNRERERERERERERJQvTDQTERERERERERERUb4w0UxERERERERERERE+cJEMxERERERERERERHlCxPNRERERERERERERJQvTDQTERERERERERERUb4w0UxERERERERERERE+cJEMxERERERERERERHlCxPNRFTsLFq0CDKZTHqZatasmdR/8ODBUv9Lly6ZTbNjx46iDZqKpWnTpkn7RMWKFYt02YMHD5aW3axZs0Jbzq1btxATE4OAgAAolUppmWvWrCm0ZVLJZ+1cWlrk9DtDpVdx2S+KSxzFQX63xfO+Le1ZziEiIrKEiWYiKnQ//fQToqOjUaZMGahUKri5uSEoKAjNmjXDuHHjsGnTJnuHWKzZmkQv7Ymj0kgIgR49emDRokW4ceMGMjMz7R0SAGDHjh1m++yiRYvMhj98+BD16tWThsvlcixYsMDitDKZDJ06dbK4nE2bNmUbl/t+yfC8J3+IipOs59VLly7ZO6QCwfOI/bGih+3u3buH9957D3Xq1IG7uzuUSiW0Wi2qVauGV199FcePH7d3iEREBUJp7wCI6Pk2cOBALF682KxfQkICEhIScOnSJezcuROXL19GdHS0NLxu3bqYNWtWUYdKVKD69OmDGjVqAADKly9fKMu4cuUKdu/eLX3u0KEDmjRpArlcLi27uLl79y5at26No0ePAgDkcjm+++47xMTEWJ1m/fr1uHjxIipVqmTWf+7cuYUaKz2/+DtDVDLwWKXnwZUrVxAZGYkbN26Y9U9OTsbZs2dx9uxZ/PDDD1i9ejXat29vpyiJiAoGE81EVGg2btxolmSOiIhAdHQ0nJ2dcffuXRw6dAh79+7NNl316tVRvXr1ogyVqMC1bdsWbdu2LdRlXL582ezznDlzEBwcXKjLTE9PhxACGo0mz9PeunULLVu2xKlTpwAACoUCP/74I/r165fjdHq9HvPmzcMXX3wh9Tt37hw2btyY5xiodEtISICrqyt/Z4hKCB6rZEl+yiL28Omnn5olmbt06YI6derg/Pnz+PHHHyGEQEZGBqZPn85EMxGVeGw6g4gKzR9//CF1h4SE4O+//8bHH3+Mt956C1988QV27NiBu3fvYsqUKWbTFdStkKtXr0ZkZCScnJzg4eGBnj174urVqxbHPXjwIAYOHIigoCA4ODjA2dkZNWrUwKRJk3Dt2rVs41esWFGKb9q0aWbDcmsvLyEhATNnzkT9+vXh5uYGtVqNChUqYPDgwTh58mS25QQFBZn1a968uVnbv8bl7dy5Uxrnhx9+sHqbbFpaGubNm4emTZvC09MTarUafn5+6Nmzp8XEf06OHDmCkSNHon79+ggICICjoyMcHBwQGBiI3r1746+//so2TdbtEx8fjylTpiAwMBBqtRqVKlXCjBkzIITI97IsSUhIgIuLixTDwoULs43Ts2dPaXi7du2k/n/++Se6du2KgIAAqNVqODs7o2LFimjXrh2mTZuG+Ph4adyc2mg+fvw4BgwYgIoVK0Kj0cDR0REVKlRAixYt8NZbb+H69eu5rodMJkNUVJRZv5CQEIvHTV7376zNsJw4cQJdunSBl5cXNBoNTp8+nWt8WV27dg1RUVFSklmlUmH58uW5JpnlckNR5X//+x+SkpKk/l9++aW0jygUihzncfv2bbz99tsIDw+Hi4sLHBwcEBISglGjRuHKlSvZxi/K/TopKQkffPABateuDRcXF6hUKvj6+iI8PByvvvpqnpPp+/fvR0xMDEJCQuDk5ARnZ2dUqVIFMTEx+Pfff3OdPrdb7HM69/36669o27at1EySq6srgoOD0aVLF8ycORN6vV66zTprDXbTZWad759//ok+ffqgQoUK0Gg0cHV1RWRkJL766itkZGRkW4eszbasXbsWDRs2hLOzMypUqAAgb88COH/+PPr27Qtvb284ODigdu3aWLt2rcXt9+eff6JZs2bQarXw9PREr169EBcXl6822/N7/OYlfmvycu4riOPn5s2bGDRoELy9veHq6oqOHTvi3LlzAIBDhw6hbdu2cHFxsfrbnnU/vnjxIubMmYOwsDA4ODggICAAEydOxOPHj/O0HQry9xMw/LGwb9++8PT0hFarRdOmTbFly5Ycp9mxYweGDBmC2rVrw8/PDxqNBk5OTggJCUFMTEy22+9lMhmaN29u1i8oKChbc0M6nQ7vvfceXnrpJQQHB8Pd3R0qlQpeXl5o0qQJvvzyS4vHmyVHjx412/6m59m3335b6j9x4kSp/+3bt82m+fvvvwFYPlaf5TxilJGRgc8++wzVqlWDRqNBuXLlMHnyZKSlpdm0bkDhHGNZXbt2DW+88QZefPFFuLq6wsHBARUqVECXLl2wefNmm+aRUxNWBVFGsaWMaurixYsYO3YsQkNDodVq4ejoiLCwMLz55pu4d+9etvhtLYvk5fxkL6a/vzVq1MDq1avxzjvvYNGiRWaJ5bt379ojPCKigiWIiArJmDFjBAABQHh7e4sLFy7YNF1sbKw0XdbTVFRUlNR/0KBBUv+4uDizaaKjo80+G1+VK1cWKSkpZvOcPXu2kMvlFscHINzc3MT27dvNpgkMDJSGT5061WzY1KlTpWGBgYFmw86dOycqVqxodVkajUasWLHC4nIsvaKiosyWZ+0VFxcnhBDizp07Ijw83Op4crlczJkzx6bvSQghvvzyyxyXK5PJRGxsrNXt4+XlJUJDQy1O+9577xXosky/i1GjRkn969atazZNYmKicHJykoYbv48tW7YIhUKRYwynT5+W5jNo0CCz78no5MmTZvO39NqwYUOu2z6379zoWfZv0+PsxRdfFFqt1myaw4cP5xjb9u3bzcafOnWqCAoKMtvPf/31V5um7dKli9T91VdfCSGEiI+PFy4uLlJ8pseJ6XlBCCH27NkjvL29c1z/Xbt2mU1TlPt1s2bNclxW7969c9zWpqZPny5kMpnVea1evVoa19q5NOv2N547jKyd+7Kety29UlJSsp2rLb1M5/v222/nOG6TJk1EYmKiWYxZh2f9vi3Fa8p029SqVUva17LuA1u2bDGbbt26dUKpVGYb18vLSzRs2NDi+SA3+T1+8xK/NXk99+X3+PH09LT4O+nj4yNWr14tNBpNtmFZf9uz7sctWrSwGEvdunXNpstpvyjo38+4uDhRtmxZi9vnpZdeshrHpEmTcty+arVabN68WRo/t+PNePw/fvw413FbtWoldDpdruum1+uFl5eXNN3SpUulYY0bN5b616lTR+q/cuVKqb+rq6u0HEvfSV7OI1mnt1Y+fPnll23+7gr6GMtq/fr1FudpfI0bN04aN6cyp+k0WY+5giij2FJGNVqzZk2O8w0ICBCnTp2yup2tlUXyen7KiS2/Y6avrNs7JxMmTJCmc3FxEX/99ZdIS0sTx48fF+XLl5eGvfbaazbPk4iouGLTGURUaGrXri1137t3D1WqVEF4eDjq1q2LiIgING/eHCEhIYWy7E2bNqFu3bqIjo7G9u3bpXZsz58/jzVr1qBPnz4AgF27dmHixIlSLcMKFSqgb9++SExMRGxsLJKTkxEfH4/u3bvjwoUL8PDweOaYMjMz0bVrV6mGoI+PD/r16wdPT09s2rQJe/bsQVpaGgYOHIiIiAhUqlQJ77zzDi5duoQZM2ZI83nttdek5hHKly+P8uXLw9nZGQsWLMDFixcBAHXq1EHv3r2laTw9PQEAL7/8Mo4cOQIAcHF
"text/plain": [
"<Figure size 1800x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1800x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABZoAAAKgCAYAAAAS1si3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3gUVdsG8HtmWzabRiohQAgJJaEFQu+9iCC9C0QQpDdRsQEWUHilSFPUD5SiFAVEVKQjVaQovUjvPSGdZM/3x7LDbrJJNqRsSO4f115Mn2dmZ2bPPDlzRhJCCBARERERERERERERPSPZ0QEQERERERERERER0fONiWYiIiIiIiIiIiIiyhYmmomIiIiIiIiIiIgoW5hoJiIiIiIiIiIiIqJsYaKZiIiIiIiIiIiIiLKFiWYiIiIiIiIiIiIiyhYmmomIiIiIiIiIiIgoW5hoJiIiIiIiIiIiIqJsYaKZiIiIiIiIiIiIiLKFiWYicpjFixdDkiTlY6lx48bK8P79+yvDL168aDXP9u3b8zZoypcmTZqkHBOlSpXK03X3799fWXfjxo1zbT03b95EZGQkAgICoFarlXWuXbs219ZJz7/0rqWFRUa/M1R45ZfjIr/EkR9kd18U9H3pyHIOERFRVjDRTEQ55ocffkCrVq3g5+cHjUYDd3d3BAUFoXHjxhg1ahQ2btzo6BDzNXuT6IU9cVQYCSHQpUsXLF68GNevX0dKSoqjQwIAbN++3eqYXbx4sdX4Bw8eoGbNmsp4WZaxYMECm/NKkoT27dvbXM/GjRvTTMtj//lQ0JM/RPlJ6uvqxYsXHR1SjuB1xPFY0cM+jx8/xsyZM9G7d2+UK1cOsizbXRkhISEB06ZNQ0REBNzc3GAwGFCxYkW8++67iIqKypsNICLKAWpHB0BEBUPfvn2xZMkSq2HR0dGIjo7GxYsXsWPHDly6dAmtWrVSxteoUQPTp0/P61CJclSPHj1QsWJFAECJEiVyZR2XL1/G7t27lf4XX3wRDRo0gCzLyrrzmzt37qBFixb4559/AACyLOPrr79GZGRkuvNs2LAB58+fR+nSpa2Gz549O1djpYKLvzNEzweeq1QQxMbGYuzYsVme7969e2jRogUOHz5sNfz48eM4fvw4li1bhq1btyIoKCinQiUiyjVMNBNRtv3+++9WSeaIiAi0atUKLi4uuHPnDg4dOoS9e/emma9ChQqoUKFCXoZKlONat26N1q1b5+o6Ll26ZNU/a9YsBAcH5+o6k5KSIISATqfL8rw3b95Es2bNcOLECQCASqXCd999h169emU4n9FoxNy5czFjxgxl2JkzZ/D7779nOQYq3KKjo+Hm5sbfGaLnBM9VsiU7ZRFH0Wg0qFChAqpXr44tW7bgwoULmc4zaNAgJcms1+sxePBgODk54auvvsK9e/dw8eJF9OjRA3v37oUs86F0IsrfeJUiomz7448/lO6QkBDs378fH3/8MSZMmIAZM2Zg+/btuHPnDsaPH281X049CrlmzRrUqVMHzs7OKFKkCLp27YorV67YnPbgwYPo27cvgoKC4OTkBBcXF1SsWBHjxo3D1atX00xfqlQpJb5JkyZZjcusvbzo6GhMnToVtWrVgru7O7RaLUqWLIn+/fvj+PHjadaTupZCkyZNrB63M69vx44dyjTffvttuo/JJiYmYu7cuWjYsCE8PT2h1Wrh7++Prl272kz8Z+TIkSMYOnQoatWqhYCAAOj1ejg5OSEwMBDdu3fHrl270syTev9ERUVh/PjxCAwMhFarRenSpTFlyhQIIbK9Lluio6Ph6uqqxLBw4cI003Tt2lUZ36ZNG2X4n3/+iY4dOyIgIABarRYuLi4oVaoU2rRpg0mTJlk9wphRG81Hjx5Fnz59UKpUKeh0Ouj1epQsWRJNmzbFhAkTcO3atUy3Q5IkNGrUyGpYSEiIzfMmq8d36mZYjh07hg4dOsDLyws6nQ4nT57MNL7Url69ikaNGilJZo1GgxUrVmSaZDbfOP3f//0fYmNjleFz5sxRjhGVSpXhMm7duoW3334b4eHhcHV1hZOTE0JCQjBs2DBcvnw5zfR5eVzHxsbigw8+QLVq1eDq6gqNRgNfX1+Eh4fj1VdfzXIy/cCBA4iMjERISAicnZ3h4uKCsmXLIjIyEv/991+m82f2iH1G176ff/4ZrVu3VppJcnNzQ3BwMDp06ICpU6fCaDQqj1mnrsFuuc7Uy/3zzz/Ro0cPlCxZEjqdDm5ubqhTpw7mzZuHx48fp9mG1M22rFu3DnXr1oWLiwtKliwJIGvvAjh79ix69uwJb29vODk5oVq1ali3bp3N/ffnn3+icePGMBgM8PT0RLdu3XDhwoVstdme3fM3K/GnJyvXvpw4f27cuIF+/frB29sbbm5uaNeuHc6cOQMAOHToEFq3bg1XV9d0f9tTH8fnz5/HrFmzEBYWBicnJwQEBGDs2LF49OhRlvZDTv5+AqY/Fvbs2ROenp4wGAxo2LAhNm/enOE827dvx4ABA1CtWjX4+/tDp9PB2dkZISEhiIyMxNGjR62mlyQJTZo0sRoWFBSUprmh5ORkvPfee3jhhRcQHBwMDw8PaDQaeHl5oUGDBpgzZ47N882Wf/75x2r/W15n3377bWW4ZQ3PW7duWc2zf/9+ALbP1We5jpg9fvwY06ZNQ/ny5aHT6VC8eHG8/vrrSExMtGvbgNw5x1K7evUq3nzzTVStWhVubm5wcnJCyZIl0aFDB2zatMmuZWTUhFVOlFHsKaNaOn/+PEaOHInQ0FAYDAbo9XqEhYXhrbfewt27d9PEb29ZJCvXJ0dxd3fHo0ePcPjwYXz11VfKb1FGTpw4gZ9++knpnz17NmbOnImpU6fi+++/V4b/9ddfbIaQiJ4Pgogom0aMGCEACADC29tbnDt3zq75Fi1apMyX+nLUqFEjZXi/fv2U4RcuXLCap1WrVlb95k+ZMmVEfHy81TJnzpwpZFm2OT0A4e7uLrZt22Y1T2BgoDJ+4sSJVuMmTpyojAsMDLQad+bMGVGqVKl016XT6cTKlSttrsfWp1GjRlbrS+9z4cIFIYQQt2/fFuHh4elOJ8uymDVrll3fkxBCzJkzJ8P1SpIkFi1alO7+8fLyEqGhoTbnfe+993J0XZbfxbBhw5ThNWrUsJonJiZGODs7K+PN38fmzZuFSqXKMIaTJ08qy+nXr5/V92R2/Phxq+Xb+vz222+Z7vvMvnOzZzm+Lc+zqlWrCoPBYDXP4cOHM4xt27ZtVtNPnDhRBAUFWR3nP//8s13zdujQQemeN2+eEEKIqKgo4erqqsRneZ5YXheEEGLPnj3C29s7w+3fuXOn1Tx5eVw3btw4w3V17949w31tafLkyUKSpHSXtWbNGmXa9K6lqfe/+dphlt61L/V129YnPj4+zbXa1sdyuW+//XaG0zZo0EDExMRYxZh6fOrv21a8liz3TeXKlZVjLfUxsHnzZqv51q9fL9RqdZppvby8RN26dW1eDzKT3fM3K/GnJ6vXvuyeP56enjZ/J318fMSaNWuETqdLMy71b3vq47hp06Y2Y6lRo4bVfBkdFzn9+3nhwgVRtGhRm/vnhRdeSDeOcePGZbh/tVqt2LRpkzJ9Zueb+fx/9OhRptM2b95cJCcnZ7ptRqNReHl5KfMtW7ZMGVe/fn1lePXq1ZXhq1atUoa7ubkp67H1nWTlOpJ6/vTKhy+//LLd311On2OpbdiwweYyzZ9Ro0Yp02ZU5rScJ/U5lxNlFHvKqGZr167NcLkBAQHixIkT6e7n9MoiWb0+ZcSe3zHLT+r9nRWW25beb8LUqVOt1nfv3j1lnNFoFG5ubsq411577ZljISLKK2w6g4iyrVq1akr33bt3UbZsWYSHh6NGjRqIiIhAkyZNEBISkivr3rhxI2rUqIFWrVph27ZtSju2Z8+exdq1a9GjRw8AwM6dOzF27FillmHJkiXRs2dPxMTEYNGiRYiLi0NUVBQ6d+6Mc+fOoUiRIs8cU0pKCjp27KjUEPTx8UGvXr3g6emJjRs3Ys+ePUhMTETfvn0RERGB0qV
"text/plain": [
"<Figure size 1800x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1800x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABZoAAAKgCAYAAAAS1si3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3gUVdsG8Hu2JtlkUyEkAUJIKKEZCSC9Q0SkS0cggiC9iV0BFXiFV8AXBET9QClKUUBEQTpKkxZ61dB7S0gve74/NjvsZjfJhpQNyf27rr129kx7dnZmcubJmTOSEEKAiIiIiIiIiIiIiOgpKRwdABERERERERERERE925hoJiIiIiIiIiIiIqI8YaKZiIiIiIiIiIiIiPKEiWYiIiIiIiIiIiIiyhMmmomIiIiIiIiIiIgoT5hoJiIiIiIiIiIiIqI8YaKZiIiIiIiIiIiIiPKEiWYiIiIiIiIiIiIiyhMmmomIiIiIiIiIiIgoT5hoJiKHWbJkCSRJkl/mmjdvLpcPHDhQLr906ZLFPDt37izcoKlImjx5srxPVKhQoVDXPXDgQHndzZs3L7D13Lp1C5GRkQgICIBKpZLXuW7dugJbJz37sjqXlhTZ/Z2hkquo7BdFJY6iIK/borhvS0fWc4iIiHKDiWYiyjc//vgjIiIi4OvrC7VaDXd3dwQFBaF58+YYM2YMNm/e7OgQizR7k+glPXFUEgkh8Morr2DJkiW4ceMG0tPTHR0SAGDnzp0W++ySJUssxj98+BD16tWTxysUCixYsMDmvJIkoWPHjjbXs3nzZqtpue8/G4p78oeoKMl8Xr106ZKjQ8oXPI84Hht62Cc1NRWzZ89G3759UaVKFSgUihwbI6SlpWHt2rUYM2YM6tevj/Lly8PJyQmurq6oVasW3n77bdy5c6dwvwgRUR6oHB0AERUP/fv3x9KlSy3KYmNjERsbi0uXLmHXrl24fPkyIiIi5PF169bFzJkzCztUonzVq1cv1KhRAwBQrly5AlnHlStXsGfPHvnzyy+/jCZNmkChUMjrLmru3r2LNm3a4NixYwAAhUKBb775BpGRkVnOs3HjRvz777+oWLGiRfkXX3xRoLFS8cW/M0TPBh6rVBzEx8dj/PjxuZrn3r176Nq1q1V5cnIyTpw4gRMnTmDx4sXYsWMHqlevnl+hEhEVGCaaiSjPNm3aZJFkDg8PR0REBFxdXXH37l0cOXIE+/bts5qvevXqrDDRM+/FF1/Eiy++WKDruHz5ssXnOXPmIDg4uEDXmZKSAiEEtFptrue9desWWrVqhdOnTwMAlEolvv/+e/Tp0yfb+QwGA+bNm4dZs2bJZefPn8emTZtyHQOVbLGxsdDr9fw7Q/SM4LFKtuSlLuIoarUa1atXR506dbBt2zZER0fbPV/r1q1Rt25dpKamYvXq1bh48SIA4z/vhw4dir/++qsgQyciyhfsOoOI8uyPP/6Qh0NCQnDgwAFMnToV7777LmbNmoWdO3fi7t27mDhxosV8+XUr5Nq1a9GgQQO4uLjA09MT3bt3x9WrV21Oe/jwYfTv3x9BQUHybWk1atTAhAkTcO3aNavpK1SoIMc3efJki3E59ZcXGxuL6dOn44UXXoC7uzs0Gg3Kly+PgQMH4tSpU1brCQoKsihr0aKFxe12pvXt2rVLnua7777L8jbZ5ORkzJs3D02bNoWXlxc0Gg38/PzQvXt3m4n/7ERFRWH48OF44YUXEBAQAGdnZzg5OSEwMBA9e/a0WfHNvH1iYmIwceJEBAYGQqPRoGLFipg2bRqEEHlely2xsbFwc3OTY1i0aJHVNN27d5fHt2vXTi7/888/0aVLFwQEBECj0cDV1RUVKlRAu3btMHnyZMTExMjTZtdH84kTJ9CvXz9UqFABWq0Wzs7OKF++PFq2bIl3330X169fz/F7SJKEZs2aWZSFhITYPG5yu39n7obl5MmT6Ny5M7y9vaHVanHmzJkc48vs2rVraNasmZxkVqvVWLlyZY5JZoXCWCX5v//7P8THx8vlc+fOlfcRpVKZ7TJu376N9957D2FhYXBzc4OTkxNCQkIwYsQIXLlyxWr6wtyv4+Pj8fHHH6N27dpwc3ODWq1G6dKlERYWhtdffz3XyfSDBw8iMjISISEhcHFxgaurKypXrozIyEj8888/Oc6f0y322Z37fvnlF7z44otyN0l6vR7BwcHo3Lkzpk+fDoPBIN9mnbkFu/k6My/3zz//RK9evVC+fHlotVro9Xo0aNAAX375JVJTU62+Q+ZuW9avX4+GDRvC1dUV5cuXB5C7ZwFcuHABvXv3ho+PD5ycnFC7dm2sX7/e5vb7888/0bx5c+h0Onh5eaFHjx6Ijo7OU5/teT1+cxN/VnJz7suP4+fmzZsYMGAAfHx8oNfr0aFDB5w/fx4AcOTIEbz44otwc3PL8m975v3433//xZw5c1CtWjU4OTkhICAA48ePx+PHj3O1HfLz7ydg/Gdh79694eXlBZ1Oh6ZNm2Lr1q3ZzrNz504MGjQItWvXhp+fH7RaLVxcXBASEoLIyEicOHHCYnpJktCiRQuLsqCgIKvuhtLS0vDhhx/ipZdeQnBwMDw8PKBWq+Ht7Y0mTZpg7ty5No83W44dO2ax/c3Ps++9955cbt7C8/bt2xbzHDhwAIDtY/VpziMmqampmDFjBqpWrQqtVouyZcvizTffRHJysl3fDSiYYyyza9eu4e2338bzzz8PvV4PJycnlC9fHp07d8aWLVvsWkZ2XVjlRx3FnjqquX///RejR49GaGgodDodnJ2dUa1aNbzzzju4d++eVfz21kVyc35yFHd3dzx+/BhHjx7F119/Lf8tyo5KpcLYsWNx5coV/Pbbb5gyZQqmTZuG48ePo2rVqvJ0e/bsQWxsbEGGT0SUPwQRUR6NGjVKABAAhI+Pj7h48aJd8y1evFieL/PpqFmzZnL5gAED5PLo6GiLeSIiIiw+m16VKlUSiYmJFsucPXu2UCgUNqcHINzd3cWOHTss5gkMDJTHT5o0yWLcpEmT5HGBgYEW486fPy8qVKiQ5bq0Wq1YtWqVzfXYejVr1sxifVm9oqOjhRBC3LlzR4SFhWU5nUKhEHPmzLHrdxJCiLlz52a7XkmSxOLFi7PcPt7e3iI0NNTmvB9++GG+rsv8txgxYoRcXrduXYt54uLihIuLizze9Hts3bpVKJXKbGM4c+aMvJwBAwZY/E4mp06dsli+rdfvv/+e47bP6Tc3eZr92/w4e/7554VOp7OY5+jRo9nGtmPHDovpJ02aJIKCgiz2819++cWueTt37iwPf/nll0IIIWJiYoSbm5scn/lxYn5eEEKIvXv3Ch8fn2y//+7duy3mKcz9unnz5tmuq2fPntlua3NTpkwRkiRluay1a9fK02Z1Ls28/U3nDpOszn2Zz9u2XomJiVbnalsv8+W+99572U7bpEkTERcXZxFj5vGZf29b8Zoz3za1atWS97XM+8DWrVst5tuwYYNQqVRW03p7e4uGDRvaPB/kJK/Hb27iz0puz315PX68vLxs/p0sVaqUWLt2rdBqtVbjMv9tz7wft2zZ0mYsdevWtZgvu/0iv/9+RkdHizJlytjcPi+99FKWcUyYMCHb7avRaMSWLVvk6XM63kzH/+PHj3OctnXr1iItLS3H72YwGIS3t7c83/Lly+VxjRs3lsvr1Kkjl69evVou1+v18nps/Sa5OY9knj+r+uGrr75q92+X38dYZhs3brS5TNNrzJgx8rTZ1TnN58l8zOVHHcWeOqrJunXrsl1uQECAOH36dJbbOau6SG7PT9mx5++Y+Svz9s4N8++Wm78JJpnPA/fu3XvqWIiICgu7ziCiPKtdu7Y8fO/ePVSuXBlhYWGoW7cuwsPD0aJFC4SEhBTIujdv3oy6desiIiICO3bskPuxvXDhAtatW4devXoBAHbv3o3x48fLrQzLly+P3r17Iy4uDosXL0ZCQgJiYmLQrVs3XLx4EZ6enk8dU3p6Orp06SK3ECxVqhT69OkDLy8vbN68GXv37kVycjL69++P8PBwVKxYEe+//z4
"text/plain": [
"<Figure size 1800x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from utils_clusters import get_clusters_silhouettes\n",
"from visual import draw_silhouettes\n",
"\n",
"silhouettes = get_clusters_silhouettes(reduced_data, random_state)\n",
"draw_silhouettes(reduced_data, silhouettes)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".venv",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}