Source code for acore.decomposition.pca
import pandas as pd
import sklearn.decomposition
# ! also a version in exploratory analysis
[docs]
def run_pca(
df_wide: pd.DataFrame, n_components: int = 2
) -> tuple[pd.DataFrame, sklearn.decomposition.PCA]:
"""Run PCA on DataFrame using :class:`sklearn.decomposition.PCA`.
Parameters
----------
df : pd.DataFrame
DataFrame in wide format to fit features on.
n_components : int, optional
Number of Principal Components to fit, by default 2
Returns
-------
Tuple[pd.DataFrame, sklearn.decomposition.PCA]
principal components of DataFrame with same indices as in original DataFrame,
and fitted PCA model of sklearn
"""
n_comp_max = None
if n_components is not None:
n_comp_max = min(df_wide.shape)
n_comp_max = min(n_comp_max, n_components)
pca = sklearn.decomposition.PCA(n_components=n_comp_max)
pcs = pca.fit_transform(df_wide)
cols = [
f"principal component {i+1} ({var_explained*100:.2f} %)"
for i, var_explained in enumerate(pca.explained_variance_ratio_)
]
pcs = pd.DataFrame(pcs, index=df_wide.index, columns=cols)
return pcs, pca