데이터 전처리란 무엇인가?
데이터 전처리(pre-processing)란 다양한 소스 또는 단일 소스에서 수집한 모든 데이터를 공통 형식이나 균일한 데이터셋으로 정리하는 작업을 의미합니다.
실제 환경에서 수집되는 데이터는 결코 이상적이지 않습니다. 따라서 데이터에 누락된 셀, 오류, 이상치(outlier), 열 간 불일치 등 다양한 문제가 존재할 가능성이 높습니다.
이미지 역시 마찬가지입니다. 이미지가 올바르게 정렬되어 있지 않거나, 선명하지 않거나, 파일 크기가 지나치게 클 수 있습니다. 전처리의 목표는 바로 이러한 불일치와 오류를 제거하는 데 있습니다.
flatten 함수로 픽셀 값 추출하기
이미지의 픽셀 값을 얻으려면 내장 함수인 'flatten'을 사용합니다. 이미지를 읽어 들인 후 픽셀 값은 데이터프레임(DataFrame) 형태로 저장되며, 'flatten' 함수는 RGB 이미지의 3차원 구조를 1차원으로 변환하여 픽셀 값을 데이터프레임에 담아 줍니다.
행이 매우 많은 데이터프레임 전체를 출력하는 대신, 데이터프레임의 차원(크기)을 출력하는 것이 더 효율적입니다. 아래는 scikit-learn 라이브러리를 활용해 이미지를 업로드하고, 해당 이미지에 포함된 픽셀 값을 데이터프레임으로 가져오는 예시입니다.
예제 코드
from skimage import io
import pandas as pd
path = "path to puppy.PNG"
img = io.imread(path)
print("Image being read")
io.imshow(img)
print("Image printed on console")
my_df = pd.DataFrame(img.flatten())
print("The image pixels dimensions are ")
print(my_df.shape)
실행 결과
Image being read
Image printed on console
The image pixels dimensions are
(886104, 1)
코드 설명
필요한 라이브러리들(skimage, pandas)을 임포트합니다.
이미지가 저장된 파일 경로를 정의합니다.
'imread' 함수를 사용해 해당 경로에 접근하여 이미지를 읽어 들입니다.
'imshow' 함수를 사용해 이미지를 콘솔 화면에 표시합니다.
'flatten' 함수는 RGB 이미지의 3차원 구조를 1차원으로 변환하여 픽셀 값을 데이터프레임으로 가져옵니다.
행이 너무 많은 데이터프레임 전체를 출력하는 대신, shape 속성으로 데이터프레임의 차원만 표시합니다.
데이터프레임의 실제 내용은 print(my_df)를 통해 언제든지 확인할 수 있습니다.
최종 출력 결과는 이미지의 픽셀 값들이 담긴 데이터프레임이며, 위 예제에서는 886104개의 픽셀 값이 1개의 열로 구성되어 있음을 확인할 수 있습니다.