소개
파이썬의 데이터 시각화 라이브러리인 Matplotlib을 사용하다 보면 'ValueError: Input contains NaN, infinity or a value too large for dtype('float64')' 에러에 직면할 수 있습니다. 이 에러는 입력 데이터에 NaN(결측값)이나 무한대(infinity), 혹은 너무 큰 값이 포함되어 있을 때 나타납니다. 오늘은 이 문제의 원인과 해결 방법에 대해 알아보겠습니다.
에러 발생 예시 코드
먼저, 위와 같은 에러가 발생할 수 있는 간단한 예제 코드를 살펴보겠습니다.
import matplotlib.pyplot as plt
import numpy as np
# 데이터 생성 (NaN 값 포함)
data = np.array([1, 2, np.nan, 4, 5])
# 그래프 생성
plt.plot(data)
plt.title("Sample Plot")
plt.show()
에러 해결 방법
1. NaN 값 및 무한대 값 제거
가장 먼저 해야 할 일은 데이터에서 NaN 및 무한대 값을 제거하는 것입니다. 이를 통해 에러를 예방할 수 있습니다.
import matplotlib.pyplot as plt
import numpy as np
# 데이터 생성 (NaN 값 포함)
data = np.array([1, 2, np.nan, 4, 5])
# NaN 및 무한대 제거
clean_data = data[~np.isnan(data) & ~np.isinf(data)]
# 그래프 생성
plt.plot(clean_data)
plt.title("Cleaned Sample Plot")
plt.show()
2. 데이터 검증
데이터를 시각화하기 전에 항상 데이터의 값을 검증하는 것이 좋습니다. 예를 들어, 통계적인 값이나 최대값, 최소값을 확인하여 비정상적인 값을 찾아낼 수 있습니다.
import matplotlib.pyplot as plt
import numpy as np
# 데이터 생성
data = np.array([1, 2, np.nan, 4, 5, 1e400]) # 너무 큰 값 포함
# 데이터 검증
if np.any(np.isnan(data)) or np.any(np.isinf(data)) or np.max(data) > np.finfo(np.float64).max:
print("데이터에 NaN값이나 무한대, 너무 큰 값이 포함되어 있습니다.")
else:
plt.plot(data)
plt.title("Sample Plot")
plt.show()
3. 데이터 전처리 기법 사용
데이터에 결측값이나 이상치가 많을 경우, 전처리 기법을 활용하여 데이터를 정제하는 것도 좋은 방법입니다. 예를 들어 평균값 대체법 또는 중위수 대체법을 사용할 수 있습니다.
import matplotlib.pyplot as plt
import numpy as np
# 데이터 생성 (NaN 값 포함)
data = np.array([1, 2, np.nan, 4, 5])
# NaN 값을 평균으로 대체
mean_value = np.nanmean(data)
data[np.isnan(data)] = mean_value
# 그래프 생성
plt.plot(data)
plt.title("Imputed Sample Plot")
plt.show()
마무리
이 블로그 글에서는 Matplotlib에서 발생하는 'ValueError: Input contains NaN, infinity or a value too large for dtype('float64')' 에러에 대한 원인과 해결 방법을 살펴보았습니다. NaN 및 무한대 값의 제거, 데이터 검증, 전처리 기법 등을 통해 이러한 문제를 해결할 수 있습니다. 항상 시각화를 진행하기 전에 데이터를 명확히 검토하는 것이 좋습니다.