PCA via eigen-decomposition of the covariance/correlation matrix.
pip install eigpca
from eigpca import PCA
from sklearn.datasets import load_iris
X = load_iris().data
pca = PCA()
pca.fit(X)
pca.transform(X, n_components=2)
pca.plot(y="eig")
Y axes is proportion of variance
pca.plot(y="pov")