import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from sklearn.datasets import load_wine
from sklearn.preprocessing import StandardScaler
from sklearn.manifold import TSNE


# 1) f[^ǂݍ & W
wine = load_wine()
X, y = wine.data, wine.target

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)


# 2) t-SNEi2ɍ팸j
tsne = TSNE(n_components=2, perplexity=30, learning_rate=200,
            max_iter=1000, random_state=0)
X_tsne = tsne.fit_transform(X_scaled)


# 3) Uz}iNXƂɃ}[J[ύXj
markers = ["o", "s", "^"]
plt.figure()
plt.title("Wine: t-SNE 2D projection")
for cls in np.unique(y):
    plt.scatter(
        X_tsne[y == cls, 0],
        X_tsne[y == cls, 1],
        marker=markers[cls],
        edgecolor="k",
        linewidths=0.2,
        label=str(cls)
    )
plt.xlabel("t-SNE 1"); plt.ylabel("t-SNE 2")
plt.legend()
plt.tight_layout()
plt.show()