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.decomposition import PCA


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

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


# 2) PCAi2ɍ팸j
pca = PCA(n_components=2, random_state=0)
X_pca = pca.fit_transform(X_scaled)


# 3) ^̕\
explained = pca.explained_variance_ratio_
print("e听̊^:", explained)
print("ݐϊ^:", explained.cumsum())


# 4) Uz}쐬
markers = ["o", "s", "^"]
plt.figure()
plt.title("Wine: PCA 2D projection")
for cls in np.unique(y):
    plt.scatter(
        X_pca[y == cls, 0],
        X_pca[y == cls, 1],
        marker=markers[cls % len(markers)],
        edgecolor="k",
        linewidths=0.2,
        label=str(cls)
    )
plt.xlabel("PC1"); plt.ylabel("PC2")
plt.legend()
plt.tight_layout()
plt.show()


# 5) loadingsie听ɂǂꂾ^Ă邩j
loadings = pd.DataFrame(
    pca.components_.T,
    index=wine.feature_names,
    columns=["PC1", "PC2"]
)
print("\n听ƌʂ̑Ή֌Wiloading sj̐擪10s:")
print(loadings.head(10).round(3))