import pandas as pd
import matplotlib.pyplot as plt
= {"ingreso" : [9136.81, 11709.94, 12416.79, 4875.73, 10065.03,
datos 11755.33, 7401.78, 10291.38, 12002.42, 11787.76,
13347.65, 7676.76, 9808.56, 11556.47, 7875.49,
12486.19, 9242.40, 6867.09, 12946.25, 9167.36],
"horas_trabajadas" : [40.38, 41.55, 41.91, 40.18, 41.69,
42.32, 41.57, 41.26, 42.01, 41.46,
41.71, 41.36, 40.82, 41.22, 41.11,
41.07, 41.20, 40.61, 41.52, 41.26]}
= pd.DataFrame(datos) datos
PCA introductorio en Python
print(datos)
ingreso horas_trabajadas
0 9136.81 40.38
1 11709.94 41.55
2 12416.79 41.91
3 4875.73 40.18
4 10065.03 41.69
5 11755.33 42.32
6 7401.78 41.57
7 10291.38 41.26
8 12002.42 42.01
9 11787.76 41.46
10 13347.65 41.71
11 7676.76 41.36
12 9808.56 40.82
13 11556.47 41.22
14 7875.49 41.11
15 12486.19 41.07
16 9242.40 41.20
17 6867.09 40.61
18 12946.25 41.52
19 9167.36 41.26
# Código de visualización
= plt.figure(figsize=(7, 7))
fig "ingreso"], datos["horas_trabajadas"],
plt.scatter(datos[="8", s=550, color="purple", alpha=0.5)
marker"Ingreso", fontsize=20, color="darkblue")
plt.xlabel("Promedio de Horas Trabajadas", fontsize=20, color="darkblue")
plt.ylabel( plt.show()
from sklearn.preprocessing import StandardScaler
# Código de visualización
= plt.figure(figsize=(10, 5))
fig = fig.add_subplot(1, 2, 1)
ax1 = fig.add_subplot(1, 2, 2)
ax2
"Datos Originales", fontsize=20)
ax1.set_title("ingreso"], datos["horas_trabajadas"],
ax1.scatter(datos[="8", s=550, color="purple", alpha=0.5)
marker"Ingreso", fontsize=15)
ax1.set_xlabel("Promedio de Horas Trabajadas", fontsize=15)
ax1.set_ylabel(
# Estandarización de los datos
= pd.DataFrame(StandardScaler().fit_transform(datos),
datos =["ingreso", "horas_trabajadas"])
columns
# Código de visualización
"Datos Estandarizados", fontsize=20)
ax2.set_title("ingreso"], datos["horas_trabajadas"],
ax2.scatter(datos[="8", s=550, color="purple", alpha=0.5)
marker"Ingreso", fontsize=15)
ax2.set_xlabel("Promedio de Horas Trabajadas", fontsize=15)
ax2.set_ylabel(
plt.show()
print(datos.cov())
# Código de visualización
=(7, 7))
plt.figure(figsize"ingreso"], datos["horas_trabajadas"],
plt.scatter(datos[="8", s=550, color="purple", alpha=0.5)
marker"Ingreso", fontsize=15)
plt.xlabel("Promedio de Horas Trabajadas", fontsize=15)
plt.ylabel(-2.2, 1.5, "Positiva", fontsize=28, color="red")
plt.text( plt.show()
ingreso horas_trabajadas
ingreso 1.052632 0.682360
horas_trabajadas 0.682360 1.052632
from numpy.linalg import eig
# Calcular eigenvalores y eigenvectores
= eig(datos.cov())
valores, vectores
= vectores[:, 0]
vector_azul = vectores[:, 1]
vector_rojo
print("Eigenvector Rojo:", vector_rojo, "Eigenvalor:", valores[1])
print("Eigenvector Azul:", vector_azul, "Eigenvalor:", valores[0])
# Código de visualización
=(7, 7))
plt.figure(figsize"equal")
plt.axes().set_aspect(
# Graficando los datos
"ingreso"], datos["horas_trabajadas"],
plt.scatter(datos[="8", s=550, color="purple", alpha=0.5)
marker
# Graficando los eigenvectores
0, 0,
plt.quiver(0]/abs(vector_azul[0])*valores[0],
vector_azul[1]/abs(vector_azul[1])*valores[0],
vector_azul[="blue", angles="xy", scale_units="xy", scale=1, width=0.02)
color
0, 0,
plt.quiver(0]/abs(vector_rojo[0])*valores[1],
vector_rojo[1]/abs(vector_rojo[1])*valores[1],
vector_rojo[="red", angles="xy", scale_units="xy", scale=1, width=0.02)
color
"Ingreso", fontsize=15)
plt.xlabel("Promedio de Horas Trabajadas", fontsize=15)
plt.ylabel( plt.show()
Eigenvector Rojo: [-0.70710678 0.70710678] Eigenvalor: 0.3702717235001509
Eigenvector Azul: [0.70710678 0.70710678] Eigenvalor: 1.7349914343945863
= pd.DataFrame(datos.values @ vectores.T,
proyectados =["ingreso", "horas_trabajadas"])
columns
# Código de visualización
=(8, 8))
plt.figure(figsize"equal")
plt.axes().set_aspect(
# Datos rotados
"ingreso"], proyectados["horas_trabajadas"],
plt.scatter(proyectados[="8", s=550, color="purple", alpha=0.5)
marker
# Proyección de los datos en 1 dimensión
"ingreso"], [-2]*len(proyectados["ingreso"]),
plt.scatter(proyectados[=250, color="red", alpha=0.5)
s
-3]*len(proyectados["horas_trabajadas"]), proyectados["horas_trabajadas"],
plt.scatter([=250, color="blue", alpha=0.5)
s plt.show()
from sklearn.decomposition import PCA
# Obtención de componentes principales
= PCA()
pca = pca.fit_transform(datos)
datos
# Código de visualización
=(7, 7))
plt.figure(figsize"equal")
plt.axes().set_aspect(0], [2]*datos[:, 0].size, s=250, color="red", alpha=0.5)
plt.scatter(datos[:, 1], [1]*datos[:, 1].size, s=250, color="blue", alpha=0.5)
plt.scatter(datos[:, 0.8, 2.2))
plt.ylim((
plt.show()print("Varianza explicada por cada componente:", pca.explained_variance_)
print("Proporción de varianza explicada por cada componente:", pca.explained_variance_ratio_)
Varianza explicada por cada componente: [1.73499143 0.37027172]
Proporción de varianza explicada por cada componente: [0.82412093 0.17587907]