[kakao x goorm] NumPy, Pandas, Matplotlib의 결합을 통한 데이터 분석 및 시각화
NumPy, Pandas, Matplotlib 결합 정리
오늘은 NumPy, Pandas, Matplotlib의 결합에 대해 배운 내용을 정리해보려고 한다. 이 세 가지 라이브러리는 데이터 분석과 과학 계산에 매우 중요한 도구들이며, 함께 사용하면 데이터 처리와 시각화에서 더욱 강력한 결과를 도출할 수 있다.
1. NumPy란?
NumPy는 고성능 과학 계산을 위한 패키지로, 대규모 데이터 집합을 다룰 수 있는 N차원 배열(ndarray) 객체를 제공한다. 배열 간의 수학적 연산을 빠르게 수행할 수 있으며, 선형 대수, 난수 발생기 등 다양한 수학적 기능도 포함되어 있다. NumPy는 CPU 연산을 기반으로 하며, 대부분의 데이터 분석 라이브러리가 이를 기반으로 작동한다.
2. NumPy ndarray
NumPy의 핵심은 ndarray이다. 이는 파이썬에서 대규모 데이터 집합을 처리할 수 있는 고성능 자료구조로, 같은 데이터 타입의 값만을 저장할 수 있다. 배열의 차원 크기(shape)와 데이터 타입(dtype) 정보를 통해 배열을 효율적으로 다룰 수 있다.
배열 생성 예시:
import numpy as np
data1 = [0, 1, 2, 3, 4, 5]
a1 = np.array(data1)
print(a1)
# 출력: [0 1 2 3 4 5]
3. NumPy와 연산
NumPy 배열에서는 연산이 매우 직관적이다. 예를 들어, 배열에 숫자를 곱하면 배열의 각 원소에 그 숫자가 곱해진다.
x1 = np.array([1, 2, 3, 4, 5])
print(x1 * 2)
# 출력: [ 2 4 6 8 10]
4. Pandas와의 결합
Pandas는 데이터 분석에 강력한 라이브러리로, DataFrame과 Series라는 자료구조를 제공한다. Pandas는 내부적으로 NumPy 배열을 사용하여 데이터를 처리하므로, 두 라이브러리는 자연스럽게 결합된다.
결측치 처리:
Pandas에서는 NumPy 배열을 활용해 결측치(NaN)를 쉽게 처리할 수 있다. 예를 들어, 결측치를 평균값으로 채우는 작업에서 NumPy의 mean() 함수와 결합하여 효율적으로 처리할 수 있다.
결측치 처리 방법:
- 평균 (Mean): 결측치를 해당 열의 평균값으로 채우는 방법. 데이터가 정규분포에 가까운 경우 유용하다.
df['A'].fillna(df['A'].mean(), inplace=True)
- 중앙값 (Median): 데이터의 중앙에 위치한 값으로, 이상치에 덜 민감하다. 데이터가 비대칭적일 때 유용하다.
df['A'].fillna(df['A'].median(), inplace=True)
- 최빈값 (Mode): 가장 많이 등장하는 값으로, 범주형 데이터에서 유용하다.
df['A'].fillna(df['A'].mode()[0], inplace=True)
- 표준편차 (Standard Deviation): 결측치를 평균 + 표준편차 또는 평균 - 표준편차로 채우는 방법. 데이터의 분포를 고려한 방식이다.
mean_A = df['A'].mean()
std_A = df['A'].std()
df['A'].fillna(mean_A + std_A, inplace=True)
결측치 처리 예시:
import pandas as pd
import numpy as np
data = {'A': [1, 2, np.nan, 4], 'B': [5, np.nan, 7, 8]}
df = pd.DataFrame(data)
# NumPy와 결합하여 결측치 처리
df['A'].fillna(df['A'].mean(), inplace=True)
df['B'].fillna(df['B'].mean(), inplace=True)
print(df)
5. Matplotlib과의 결합
Matplotlib은 데이터를 시각화하는 데 유용한 라이브러리로, NumPy 배열과 매우 잘 결합된다. NumPy 배열은 시각화할 데이터의 x, y 축 값으로 사용되며, 이를 통해 대규모 데이터도 빠르게 시각화할 수 있다.
시각화 예시:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100) # 0부터 10까지 100개의 점
y = np.sin(x)
# Matplotlib을 사용하여 그래프 그리기
plt.plot(x, y)
plt.title('Sine Wave')
plt.xlabel('X axis')
plt.ylabel('Y axis')
plt.show()
6. 결측치 처리의 중요성
결측치(NaN, Null 값)는 데이터 분석에서 매우 중요한 문제다. 결측치를 처리하지 않으면 분석 결과가 왜곡되거나 부정확한 결론을 도출할 수 있다.
결측치 처리의 중요성:
- 분석의 정확성 보장: 결측치를 그대로 두면 분석 결과가 왜곡될 수 있다. 결측치를 적절히 처리하면 정확한 분석이 가능하다.
- 모델 성능 향상: 머신러닝 모델에서 결측치를 처리하지 않으면 성능이 떨어질 수 있다. 결측치가 포함된 데이터를 그대로 사용할 경우 학습 과정에 문제가 생길 수 있다.
- 데이터의 일관성 유지: 결측치를 처리하지 않으면 데이터셋 내에서 일관성이 깨질 수 있다. 이를 적절히 처리하면 데이터 간 관계를 정확하게 파악할 수 있다.
- 통계적 해석 가능성: 결측치를 처리하지 않으면 통계적 분석에서 오류가 발생할 수 있다.
- 데이터의 신뢰성 확보: 결측치를 처리하는 과정에서 데이터의 신뢰도를 높일 수 있다. 결측치를 무시하고 분석을 진행하면 신뢰할 수 없는 결과를 얻을 수 있다.
- 다양한 방법을 통한 유연한 분석: 결측치는 평균, 중앙값, 표준편차 등 다양한 방법으로 처리할 수 있다. 데이터의 특성에 맞는 방법을 선택해 더 정확하고 의미 있는 분석을 할 수 있다.
결국, 결측치를 제대로 처리하는 것은 데이터 분석 과정에서 정확성과 신뢰성을 확보하고, 더 나은 결론을 도출하는 데 필수적인 작업이다.