27장: 데이터 분석 심화
데이터 분석은 단순한 통계 계산을 넘어, 데이터를 통해 인사이트를 도출하고 의사결정을 지원하는 데 중요한 역할을 합니다. 이 장에서는 파이썬을 사용하여 데이터 분석을 심화하는 방법에 대해 다룹니다. 주요 내용으로는 고급 `pandas` 기능, 데이터 시각화 고급 기법, 시계열 분석, 그리고 머신러닝 기반 데이터 분석을 포함합니다.
#### 27.1 고급 `pandas` 기능
`pandas`는 데이터 분석을 위한 강력한 라이브러리로, 다양한 고급 기능을 제공합니다.
##### 27.1.1 피벗 테이블
피벗 테이블을 사용하여 데이터를 요약하고 집계할 수 있습니다.
```python
import pandas as pd
# 예제 데이터프레임 생성
data = {
'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02'],
'Category': ['A', 'B', 'A', 'B'],
'Value': [10, 20, 30, 40]
}
df = pd.DataFrame(data)
# 피벗 테이블 생성
pivot_table = df.pivot_table(values='Value', index='Date', columns='Category', aggfunc='sum')
print(pivot_table)
```
##### 27.1.2 그룹화 및 집계
데이터를 그룹화하고 다양한 집계 함수를 적용할 수 있습니다.
```python
# 그룹화 및 집계
grouped = df.groupby('Category').agg({'Value': ['sum', 'mean', 'max']})
print(grouped)
```
##### 27.1.3 결측값 처리
결측값을 다양한 방법으로 처리할 수 있습니다.
```python
# 결측값 대체
df['Value'].fillna(df['Value'].mean(), inplace=True)
# 결측값 제거
df.dropna(subset=['Value'], inplace=True)
```
#### 27.2 데이터 시각화 고급 기법
데이터 시각화는 데이터를 이해하고 인사이트를 도출하는 데 중요한 도구입니다.
##### 27.2.1 Seaborn 고급 시각화
`Seaborn`을 사용하여 복잡한 데이터 시각화를 쉽게 구현할 수 있습니다.
```python
import seaborn as sns
import matplotlib.pyplot as plt
# 예제 데이터셋 로드
tips = sns.load_dataset('tips')
# 히트맵 생성
pivot_table = tips.pivot_table(values='tip', index='day', columns='time', aggfunc='mean')
sns.heatmap(pivot_table, annot=True, cmap='coolwarm')
plt.title('Average Tip by Day and Time')
plt.show()
```
##### 27.2.2 Plotly 대화형 시각화
`Plotly`를 사용하여 대화형 시각화를 생성할 수 있습니다. 먼저 `plotly`를 설치해야 합니다.
```sh
pip install plotly
```
```python
import plotly.express as px
# 예제 데이터셋 로드
df = px.data.iris()
# 대화형 산점도 생성
fig = px.scatter(df, x='sepal_width', y='sepal_length', color='species', title='Iris Dataset Scatter Plot')
fig.show()
```
#### 27.3 시계열 분석
시계열 분석은 시간에 따른 데이터의 변화를 분석하는 데 사용됩니다.
##### 27.3.1 시계열 데이터 준비
`pandas`를 사용하여 시계열 데이터를 준비할 수 있습니다.
```python
# 시계열 데이터 생성
date_rng = pd.date_range(start='2023-01-01', end='2023-01-10', freq='D')
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = pd.Series(range(1, len(df)+1))
# 인덱스 설정
df.set_index('date', inplace=True)
print(df)
```
##### 27.3.2 이동 평균
이동 평균을 계산하여 데이터의 추세를 확인할 수 있습니다.
```python
# 이동 평균 계산
df['moving_avg'] = df['data'].rolling(window=3).mean()
print(df)
```
##### 27.3.3 ARIMA 모델
ARIMA 모델을 사용하여 시계열 데이터를 예측할 수 있습니다. 먼저 `statsmodels` 라이브러리를 설치해야 합니다.
```sh
pip install statsmodels
```
```python
from statsmodels.tsa.arima.model import ARIMA
# ARIMA 모델 적합
model = ARIMA(df['data'], order=(1, 1, 1))
model_fit = model.fit()
# 예측
forecast = model_fit.forecast(steps=5)
print(forecast)
```
#### 27.4 머신러닝 기반 데이터 분석
머신러닝 기법을 사용하여 데이터를 분석하고 예측할 수 있습니다.
##### 27.4.1 특성 선택
`scikit-learn`의 `SelectKBest`를 사용하여 중요한 특성을 선택할 수 있습니다.
```python
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest, chi2
# 데이터셋 로드
iris = load_iris()
X, y = iris.data, iris.target
# 특성 선택
selector = SelectKBest(chi2, k=2)
X_new = selector.fit_transform(X, y)
print(X_new)
```
##### 27.4.2 랜덤 포레스트
랜덤 포레스트를 사용하여 분류 문제를 해결할 수 있습니다.
```python
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 모델 훈련
clf = RandomForestClassifier(n_estimators=100)
clf.fit(X_train, y_train)
# 예측
y_pred = clf.predict(X_test)
# 정확도 평가
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
```
##### 27.4.3 교차 검증
교차 검증을 사용하여 모델의 성능을 평가할 수 있습니다.
```python
from sklearn.model_selection import cross_val_score
# 교차 검증
scores = cross_val_score(clf, X, y, cv=5)
print(f'Cross-validation scores: {scores}')
print(f'Mean cross-validation score: {scores.mean()}')
```
이상으로, 파이썬을 사용한 데이터 분석의 심화 내용을 다루었습니다. 데이터 분석에서 고급 기능과 기법을 활용하여 더 깊이 있는 인사이트를 도출할 수 있습니다. 추가로 알고 싶은 내용이나 질문이 있으시면 댓글로 남겨주세요!
---
이 글의 내용은 GoalKicker.com의 Python Notes for Professionals 책을 참조하였습니다.
댓글
댓글 쓰기