Boostcamp AI Tech (Day 014)
1. 실습
Seaborn은 Python의 데이터 시각화 라이브러리로, 다양한 유형의 차트를 쉽게 생성할 수 있도록 도와줍니다. 여기서는 정형 데이터를 활용하여 Seaborn을 사용해 Categorical, Distribution, Relational, Regression, Matrix를 다룹니다.
1. Categorical (범주형 데이터)
범주형 데이터를 시각화하는 데 자주 사용되는 차트는 막대그래프와 박스플롯입니다.
import seaborn as sns
import matplotlib.pyplot as plt
# 예제 데이터셋
tips = sns.load_dataset("tips")
# Categorical: 막대그래프
sns.catplot(x="day", y="total_bill", kind="bar", data=tips)
plt.title("Total Bill by Day")
plt.show()
# Categorical: 박스플롯
sns.catplot(x="day", y="total_bill", kind="box", data=tips)
plt.title("Total Bill Distribution by Day")
plt.show()
2. Distribution (분포)
데이터의 분포를 이해하기 위해 히스토그램과 커널 밀도 추정(KDE)을 사용합니다.
# Distribution: 히스토그램
sns.histplot(tips['total_bill'], kde=False)
plt.title("Histogram of Total Bill")
plt.show()
# Distribution: KDE 플롯
sns.kdeplot(tips['total_bill'], shade=True)
plt.title("KDE Plot of Total Bill")
plt.show()
3. Relational (관계형 데이터)
두 변수 간의 관계를 시각화하기 위해 산점도와 선형 회귀선을 그릴 수 있습니다.
# Relational: 산점도
sns.scatterplot(x="total_bill", y="tip", data=tips)
plt.title("Scatter Plot of Total Bill vs Tip")
plt.show()
# Relational: 선형 회귀선 추가
sns.lmplot(x="total_bill", y="tip", data=tips)
plt.title("Linear Regression of Total Bill vs Tip")
plt.show()
4. Regression (회귀)
회귀 분석은 두 변수 간의 선형 관계를 시각화하고 분석하는 데 사용됩니다.
# Regression: 선형 회귀선
sns.lmplot(x="total_bill", y="tip", data=tips, order=1)
plt.title("Linear Regression of Total Bill vs Tip (Order 1)")
plt.show()
# Regression: 다항 회귀선 (2차)
sns.lmplot(x="total_bill", y="tip", data=tips, order=2)
plt.title("Polynomial Regression of Total Bill vs Tip (Order 2)")
plt.show()
5. Matrix (행렬)
데이터 간의 상관관계를 보여주는 히트맵은 행렬 데이터의 시각화에 유용합니다.
# Matrix: 상관관계 히트맵
corr = tips.corr()
sns.heatmap(corr, annot=True, cmap="coolwarm")
plt.title("Correlation Matrix of Tips Dataset")
plt.show()
Seaborn에서 제공하는 Figure-Level API는 전체적인 시각화 구성을 보다 쉽게 관리할 수 있도록 도와줍니다. 이 API는 단일 플롯보다는 복합적인 여러 플롯을 한 번에 그리기 위한 것입니다. jointplot
, pairplot
, FacetGrid
를 사용하여 다양한 시각화를 생성하는 방법을 다룹니다.
1. jointplot
jointplot
은 두 변수 간의 관계를 시각화하며, 산점도와 함께 각 변수의 분포를 동시에 보여줍니다.
import seaborn as sns
import matplotlib.pyplot as plt
# 예제 데이터셋
tips = sns.load_dataset("tips")
# jointplot: 산점도 + 히스토그램
sns.jointplot(x="total_bill", y="tip", data=tips, kind="scatter")
plt.suptitle("Joint Plot of Total Bill vs Tip", y=1.02)
plt.show()
# jointplot: 회귀선 + KDE
sns.jointplot(x="total_bill", y="tip", data=tips, kind="reg")
plt.suptitle("Joint Plot with Regression Line", y=1.02)
plt.show()
2. pairplot
pairplot
은 데이터셋의 각 변수 쌍에 대한 산점도와 히스토그램을 자동으로 생성하여, 변수들 간의 관계를 전체적으로 이해할 수 있도록 도와줍니다.
# pairplot: 모든 변수 간의 관계 시각화
sns.pairplot(tips)
plt.suptitle("Pair Plot of Tips Dataset", y=1.02)
plt.show()
# pairplot: 특정 변수에 따라 색상을 다르게 표시
sns.pairplot(tips, hue="smoker")
plt.suptitle("Pair Plot by Smoker Status", y=1.02)
plt.show()
3. FacetGrid
FacetGrid
는 데이터를 서브셋으로 나누어 여러 개의 플롯을 배열하는 데 사용됩니다. 이를 통해 조건에 따라 데이터의 분포와 관계를 비교할 수 있습니다.
# FacetGrid: 여러 서브플롯 생성
g = sns.FacetGrid(tips, col="time", row="smoker")
g.map(sns.scatterplot, "total_bill", "tip")
g.add_legend()
plt.suptitle("FacetGrid of Total Bill vs Tip by Time and Smoker Status", y=1.02)
plt.show()
# FacetGrid: 히스토그램을 사용한 서브플롯
g = sns.FacetGrid(tips, col="sex", row="day", margin_titles=True)
g.map(sns.histplot, "total_bill")
g.add_legend()
plt.suptitle("FacetGrid of Total Bill by Sex and Day", y=1.02)
plt.show()
차원 축소는 고차원 데이터를 저차원으로 변환하여 중요한 패턴이나 구조를 시각화하고 분석하는 데 유용합니다. 각 기법의 결과물을 비교하여 장단점을 공부했습니다.
1. 데이터 준비 및 라이브러리 임포트
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.manifold import TSNE
import umap.umap_ as UMAP
from sklearn.datasets import load_iris
import pandas as pd
# 데이터셋 로드 (Iris 데이터셋 사용)
iris = load_iris()
data = iris.data
target = iris.target
target_names = iris.target_names
# 데이터프레임으로 변환
df = pd.DataFrame(data, columns=iris.feature_names)
df['target'] = target
df['target_name'] = [target_names[i] for i in target]
2. PCA (Principal Component Analysis)
PCA는 데이터의 분산을 최대한 보존하면서 저차원으로 변환하는 선형 차원 축소 기법입니다.
# PCA를 통해 2차원으로 축소
pca = PCA(n_components=2)
pca_result = pca.fit_transform(data)
# 시각화
df['PCA1'] = pca_result[:, 0]
df['PCA2'] = pca_result[:, 1]
plt.figure(figsize=(8, 6))
sns.scatterplot(x='PCA1', y='PCA2', hue='target_name', data=df, palette='viridis')
plt.title("PCA of Iris Dataset")
plt.show()
3. t-SNE (t-Distributed Stochastic Neighbor Embedding)
t-SNE는 고차원 데이터를 저차원으로 변환할 때 데이터의 국소적인 구조를 잘 보존하는 비선형 기법입니다.
# t-SNE를 통해 2차원으로 축소
tsne = TSNE(n_components=2, random_state=42)
tsne_result = tsne.fit_transform(data)
# 시각화
df['tSNE1'] = tsne_result[:, 0]
df['tSNE2'] = tsne_result[:, 1]
plt.figure(figsize=(8, 6))
sns.scatterplot(x='tSNE1', y='tSNE2', hue='target_name', data=df, palette='viridis')
plt.title("t-SNE of Iris Dataset")
plt.show()
4. UMAP (Uniform Manifold Approximation and Projection)
UMAP은 데이터의 글로벌 구조와 로컬 구조를 모두 잘 보존하는 비선형 차원 축소 기법입니다.
# UMAP을 통해 2차원으로 축소
umap = UMAP(n_components=2, random_state=42)
umap_result = umap.fit_transform(data)
# 시각화
df['UMAP1'] = umap_result[:, 0]
df['UMAP2'] = umap_result[:, 1]
plt.figure(figsize=(8, 6))
sns.scatterplot(x='UMAP1', y='UMAP2', hue='target_name', data=df, palette='viridis')
plt.title("UMAP of Iris Dataset")
plt.show()
5. 결과물 비교 및 장단점 논의
- PCA:
- 장점: 매우 빠르고, 변환 후 결과가 직관적이며 해석하기 쉽습니다.
- 단점: 데이터의 선형적 구조만을 보존하기 때문에, 비선형적 관계를 잘 반영하지 못합니다.
- t-SNE:
- 장점: 데이터의 국소적 구조를 잘 보존하여 복잡한 데이터의 패턴을 효과적으로 시각화할 수 있습니다.
- 단점: 비교적 느리고, 다른 하이퍼파라미터에 매우 민감하여 재현성이 떨어질 수 있습니다.
- UMAP:
- 장점: 데이터의 글로벌 구조와 로컬 구조를 모두 잘 보존하며, 속도도 빠릅니다. t-SNE보다 재현성이 좋고, 대규모 데이터셋에 적합합니다.
- 단점: 하이퍼파라미터 설정에 따라 결과가 달라질 수 있으며, 직관적인 해석이 어려울 수 있습니다.
각 기법을 선택할 때는 데이터의 특성과 목적에 따라 적절한 방법을 선택하는 것이 중요합니다.
2. 마스터 클래스 (안수빈 마스터님)
데이터 사이언스, AI, 그리고 데이터 분석 분야에서 중요하게 고려해야 할 다양한 주제
1. 대학원 입학 및 준비
- 알고리즘 실력: 대학원 입학에 있어서 알고리즘 문제풀이 실력이 중요하긴 하지만, 그것이 입학의 결정적인 요소는 아닙니다. 중요한 것은 연구 주제와 관련된 배경지식과 역량입니다. 가고자 하는 대학원의 교수님이나 연구실에 직접 연락하여 연구 주제와 분위기를 파악하는 것이 좋습니다.
2. 데이터 사이언티스트로서의 학위와 경력
- 석사의 필요성: 데이터 사이언스 분야에서 석사 학위는 검증된 역량을 나타내는 중요한 요소로 작용할 수 있습니다. 하지만 석사에 준하는 실무 역량이나 프로젝트 경험이 있다면 학사 학위로도 충분히 경력을 쌓을 수 있습니다. 문제를 설계하고 해결할 수 있는 능력을 보여주는 것이 중요합니다.
3. 업무와 도메인에 대한 이해
- 업무 사례: 데이터 분석가는 유저 데이터를 활용해 다양한 분석을 수행하고, 이를 바탕으로 팀에 인사이트를 제공합니다. 예를 들어, 블록체인 도메인에서는 경쟁사 분석을 통해 내부 전략을 제안하기도 합니다.
4. 프로젝트 경험과 실무 능력
- A/B Test와 코호트 분석: 프로젝트 경험을 통해 실무에서 활용될 수 있는 전략적 분석 능력을 개발하는 것이 중요합니다. 이를 위해 실제 데이터를 다루는 프로젝트를 자주 수행하며 경험을 쌓는 것이 필요합니다.
- 웹/앱 개발 능력: 데이터 분석 결과를 시각화하거나 배포하는 데 있어 웹/앱 개발 지식은 중요할 수 있지만, 협업과 커뮤니케이션의 관점에서 이 지식을 이해하는 것이 더 중요합니다.
5. 데이터 시각화와 그래프 선택
- 시각화 경험: 적절한 시각화를 선택하기 위해서는 많은 시각화 사례를 보고 경험을 쌓는 것이 중요합니다. 블룸버그, 뉴욕타임즈와 같은 고품질 저널리즘 사이트에서 시각화 사례를 참고하는 것을 추천합니다.
6. HCI와 데이터 분석
- HCI 적용: 데이터 분석가로서 HCI(인간-컴퓨터 상호작용)를 적용하는 방법으로는 A/B 테스트와 같은 사용자 행동 분석이 있습니다. 이를 통해 사용자가 선호하는 디자인과 인터페이스를 찾아내고, 데이터 기반의 결정을 내릴 수 있습니다.
7. AI의 가치와 목적
- AI의 목표: AI의 가장 큰 가치는 생산성 증대뿐만 아니라, 사용자의 창의력과 만족감을 높이는 데 있습니다. 특히, AI를 활용한 ‘재미’ 요소가 중요해지고 있습니다.
8. 알고리즘의 중요성
- 알고리즘 학습: 데이터 사이언스 분야에서는 알고리즘 문제 풀이가 코딩 테스트를 통과할 정도로만 필요하며, 특정 도메인 지식과 문제 해결 능력을 쌓는 것이 더 중요합니다.
9. 미래의 변하지 않을 3가지
- 변하지 않을 요소: 데이터 전처리 파이프라인, 설명 가능한 AI(Explainable AI), AI와 UX의 융합이 앞으로도 중요한 요소로 남을 것입니다. 이러한 인사이트는 사람들의 근본적인 욕구와 불만을 통해 도출할 수 있습니다.
Problem Solver 되기: 단순한 개발자가 아니라, 문제 해결사가 되기를 권장합니다. 이론과 성적보다 실질적인 문제 해결 능력을 기르는 것이 중요합니다.