데이터 분석: 코드로 이해하는 과정과 방법

2024. 11. 7. 00:12 개발 이야기/머신러닝(딥러닝)

데이터 분석은 다양한 문제를 해결하고 인사이트를 얻기 위해 데이터를 수집하고 처리하는 과정입니다. 이번 포스팅에서는 Python을 활용해 데이터 분석을 어떻게 하는지, 단계별로 코드와 함께 소개해 드리겠습니다. 여러분이 직접 따라할 수 있는 예제와 코드도 포함되어 있으니, 데이터 분석 여정을 함께 시작해 볼까요?

1. 데이터 수집 및 로드하기

데이터 분석의 첫 단계는 데이터를 수집하고 로드하는 것입니다. 데이터는 CSV 파일, 데이터베이스, API 등 다양한 경로에서 수집할 수 있습니다. 예제에서는 CSV 파일을 Pandas 라이브러리를 사용해 불러오는 방법을 소개합니다.

import pandas as pd

# CSV 파일에서 데이터 로드하기
data = pd.read_csv('sample_data.csv')
print(data.head())  # 데이터의 상위 5개 행을 출력해보기

여기서는 pandas 라이브러리를 사용해 CSV 파일을 불러왔습니다. head() 메서드는 데이터의 처음 몇 줄을 미리 살펴볼 때 유용합니다.

2. 데이터 탐색 (EDA: Exploratory Data Analysis)

데이터를 불러왔다면, 데이터의 특성을 이해하기 위해 탐색하는 과정이 필요합니다. 이를 EDA라고 부르며, 데이터의 통계적 요약, 결측치 확인, 데이터의 분포 등을 살펴봅니다.

# 데이터의 기본 정보 출력
data.info()

# 기술 통계량 확인
description = data.describe()
print(description)

# 결측치 확인
missing_values = data.isnull().sum()
print(missing_values)

info() 메서드는 데이터의 타입과 결측치 여부를 확인하는 데 도움을 줍니다. describe()는 수치형 데이터의 요약 통계를 제공해 데이터의 분포를 파악할 수 있게 해줍니다.

3. 데이터 전처리

데이터에는 종종 결측치, 이상치, 잘못된 값 등이 포함되어 있습니다. 분석하기 좋은 형태로 만들기 위해 전처리를 진행합니다.

# 결측치 제거 (필요한 경우 대체할 수도 있음)
data_cleaned = data.dropna()

# 특정 열의 이상치 제거 (예: 값이 100을 초과하는 경우 제거)
data_filtered = data_cleaned[data_cleaned['age'] <= 100]

여기서는 dropna()를 사용해 결측치를 제거하고, 특정 조건에 맞지 않는 데이터(이상치)를 필터링했습니다. 전처리는 데이터의 신뢰성을 높이고 분석 결과의 정확도를 높이는 중요한 과정입니다.

4. 데이터 시각화

데이터의 패턴을 이해하고 통찰을 얻기 위해 시각화가 필요합니다. 이를 통해 변수 간의 관계, 분포 등을 쉽게 파악할 수 있습니다.

import matplotlib.pyplot as plt
import seaborn as sns

# age 변수의 분포 시각화
sns.histplot(data_filtered['age'], kde=True)
plt.title('Age Distribution')
plt.xlabel('Age')
plt.ylabel('Frequency')
plt.show()

# 변수 간 관계 시각화 (예: age와 salary)
sns.scatterplot(x='age', y='salary', data=data_filtered)
plt.title('Age vs Salary')
plt.xlabel('Age')
plt.ylabel('Salary')
plt.show()

matplotlibseaborn 라이브러리를 사용해 데이터를 시각화했습니다. 분포도나 산점도는 데이터의 구조를 이해하는 데 유용하며, 잠재적인 인사이트를 찾는 데 큰 도움이 됩니다.

5. 모델링 및 인사이트 도출

분석 목표에 따라 머신러닝 모델을 적용해 예측을 수행하거나 패턴을 탐색할 수 있습니다. 예를 들어, 회귀 모델을 사용해 특정 변수 간의 관계를 모델링할 수 있습니다.

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# 학습 데이터와 테스트 데이터로 분리
X = data_filtered[['age']]
y = data_filtered['salary']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 선형 회귀 모델 훈련
model = LinearRegression()
model.fit(X_train, y_train)

# 모델 평가 및 예측
predictions = model.predict(X_test)
print(f'Model Coefficients: {model.coef_}')

여기서는 scikit-learn 라이브러리를 사용해 선형 회귀 모델을 학습시켰습니다. 모델의 계수를 통해 나이와 연봉 간의 관계를 분석할 수 있습니다.

6. 결과 해석 및 결론 도출

모델링이 완료되면 결과를 해석하고 인사이트를 도출합니다. 이 과정에서는 데이터가 제시하는 스토리를 분석하고, 이를 바탕으로 결론을 내리게 됩니다. 예를 들어, 나이가 증가함에 따라 연봉이 증가하는 패턴을 발견할 수 있습니다.

# 회귀 모델의 계수 해석
print(f'나이(age)와 연봉(salary)의 관계 계수는: {model.coef_[0]} 입니다.')

이 결과를 바탕으로, 나이가 많아질수록 연봉이 어떻게 변화하는지 설명할 수 있습니다.

결론

이번 포스팅에서는 데이터 분석의 전체 과정을 코드레벨에서 살펴보았습니다. 데이터 수집부터 전처리, 시각화, 모델링까지 단계별로 진행되는 과정에서 각 단계가 가지는 중요성을 이해할 수 있었습니다. 데이터 분석은 데이터를 통해 의미 있는 인사이트를 도출해내는 매우 흥미로운 작업입니다. 앞으로 여러분도 다양한 데이터셋으로 직접 분석을 시도해 보시길 바랍니다.

추후 포스팅에서는 좀 더 복잡한 분석 기법과 다양한 데이터 전처리 방법에 대해서도 다뤄보겠습니다. 궁금한 점이나 다루었으면 하는 내용이 있다면 댓글로 알려주세요!