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 책을 참조하였습니다.

댓글