import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
# 1. Создаем данные стран-партнеров ФТС
raw_data = {
'Country': ['Китай', 'Германия', 'Бразилия', 'Турция', 'Беларусь', 'ОАЭ'],
'Price_per_kg': [150, 450, 15, 80, 40, 600],
'Food_Share': [0.05, 0.02, 0.85, 0.60, 0.45, 0.01],
'Frequency': [100, 50, 10, 70, 95, 20]
}
df = pd.DataFrame(raw_data)
# 2. Подготовка данных для ИИ
# Нам нужно нормализовать данные, чтобы разные масштабы не путали алгоритм
scaler = StandardScaler()
features = ['Price_per_kg', 'Food_Share', 'Frequency']
scaled_features = scaler.fit_transform(df[features])
# 3. Обучаем модель K-Means (делим на 3 кластера)
kmeans = KMeans(n_clusters=3, random_state=42)
df['Cluster'] = kmeans.fit_predict(scaled_features)
# 4. Визуализация результатов
plt.figure(figsize=(12, 7))
# Словарь для красивых названий в легенде
cluster_info = {
0: "Технологии и Люкс",
1: "Продовольствие",
2: "Активные соседи"
}
# Рисуем точки для каждого кластера
colors = ['blue', 'green', 'red']
for i in range(3):
cluster_data = df[df['Cluster'] == i]
plt.scatter(cluster_data['Price_per_kg'],
cluster_data['Food_Share'],
s=200,
c=colors[i],
edgecolors='black',
alpha=0.8,
label=f'Кластер {i}: {cluster_info[i]}')
# Добавляем названия стран над точками
for j, txt in enumerate(cluster_data['Country']):
plt.annotate(txt,
(cluster_data['Price_per_kg'].iat[j],
cluster_data['Food_Share'].iat[j]),
xytext=(5, 5),
textcoords="offset points",
fontsize=11,
fontweight="bold")
# Оформление графика
plt.title("Кластеризация стран-партнеров по структуре торговли", fontsize=15)
plt.xlabel("Средняя цена за 1 кг груза ($)", fontsize=12)
plt.ylabel("Доля продовольственных товаров (0.0 - 1.0)", fontsize=12)
plt.legend()
plt.grid(True, linestyle='--', alpha=0.5)
# Показываем результат
plt.tight_layout()
plt.show()