본문 바로가기
자료처리

Python 주성분 분석

by Prof. Sung-Deuk Choi 2024. 7. 1.

파이썬 코드입니다.

R 코드를 ChatGPT에서 그대로 파이썬 코드로 변환시키고,  StandardScaler를 사용하여 데이터를 표준화하는 내용만 더 추가했습니다.

import pandas as pd
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
import seaborn as sns

# Read the data
data = pd.read_csv("C:/Users/skill/Desktop/PCA 프로필.csv")

# Select numeric columns
numeric_data = data.select_dtypes(include=[float, int])

# Standardize the data
scaler = StandardScaler()
scaled_data = scaler.fit_transform(numeric_data)

# Perform PCA
pca = PCA(n_components=2)
pca_result = pca.fit_transform(scaled_data)
scores = pd.DataFrame(pca_result, columns=['PC1', 'PC2'])
loadings = pd.DataFrame(pca.components_.T, columns=['PC1', 'PC2'], index=numeric_data.columns)

# Print scores and loadings
print("Scores:")
print(scores)
print("Loadings:")
print(loadings)

# Score plot for PC1 and PC2
plt.figure(figsize=(10, 7))
sns.scatterplot(x='PC1', y='PC2', data=scores)
plt.title('Score Plot (PC1 vs PC2)')
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.grid(True)
plt.show()

# Loading plot for PC1 and PC2
plt.figure(figsize=(10, 7))
sns.scatterplot(x='PC1', y='PC2', data=loadings)
for i in range(loadings.shape[0]):
    plt.text(loadings.PC1[i], loadings.PC2[i], loadings.index[i], fontsize=12)
plt.title('Loading Plot (PC1 vs PC2)')
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.grid(True)
plt.show()

 

아나콘다와 함께 설치된 주피터 노트북에 코드를 입력했습니다. 

 

PCA 결과가 잘 나왔습니다.

 

Orange는 파이썬을 기반으로 하기 때문에 결과가 동일합니다.

 

 

Orange Data Mining을 이용한 주성분 분석과 군집분석

Orange는 파이썬에 기반한 무료 기계학습 소프트웨어입니다.   Orange Data MiningOrange Data Mining Toolboxorangedatamining.com 엑셀이나 CSV 파일을 불러와서 위젯을 하나씩 연결해서 그래프도 그리고 결과물

eacl.tistory.com

 

댓글