• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

대용량 데이터일 때 apply 대체 함수

21.01.06 14:02 작성 조회수 170

0

안녕하세요! 새해복 많이 받으세요! 질 좋은 강의에 감사 인사 드립니다.

다름이 아니라 Feature engineering 과정 중에서 데이터가 천만을 넘어 억 단위로 넘어갔을 때, 특정 칼럼의 값을 특정 조건에 맞춰 변경하고자 할 때 주로 apply & lambda를 사용하시 잖아요!? 강의 중에 데이터가 대용량으로 갈수록 apply 함수가 작업 완료시 까지 시간이 많이 소요된다고 하셨습니다!(apply함수가 일일이 하나의 row마다 바꿔주는 작업을 해준다고..) 

그렇다면 몇 천만, 억 단위의 데이터 개수까지 가게 되면 apply 함수 대신 사용하는 것이 있나요...? numpy를 이용하면 좀 빠를려나요? 아니면 다른 대체 함수를 찾을 것이 아니라 로컬(또는 클라우드 VM)의 성능을 높여야 하나용..?(GPU라든가..등..)

답변 2

·

답변을 작성해보세요.

0

명쾌한 답변 감사드립니다! DASK 라이브러리에 대해서는 처음 알았는데, 좋은 정보 감사합니다! 오늘도 하나 알아갑니다~!

0

안녕하십니까,

apply 함수를 피하는 어떤 대체 함수가 있는건 아닙니다. Pandas는 결국 Numpy를 사용하므로 numpy를 이용해도 마찬가지입니다. VM이나 CPU H/W 성능을 높여도 마찬가지입니다. Pandas는 CPU 병렬 코어 처리가 안됩니다(그래서 DASK가 탄생했습니다. DASK는 Pandas와 유사하지만 CPU 병렬 처리가 가능합니다. 하지만 아직 불안정한 버전입니다).

numpy는 원래 집합적인 vector processing에 최적화 되어 있습니다. 그래서  같은 데이터 건수의 array들끼리의 연산을 매우 빠르게 할 수 있습니다. DataFrame의 특정 컬럼값이 numpy array라고 생각하시면 됩니다. 그래서 DataFrame의 컬럼값 끼리의 연산은 정말 빠릅니다(RDBMS보다 빠릅니다. 단 메모리에 다 데이터가 올라갔다는 가정하입니다). 

그런데 이게 행(row)단위로 연산을 하게 되면 집합적인 vector processing을 할 수가 없어서 느려집니다. 결국은 속도를 빠르게 하는 방법은 컬럼단위로 하는 방법을 어떻게든 찾을 수 밖에 없습니다.  복잡한 변환 로직의 경우, 가령 여러개의 컬럼을 여러가지 형태로 가공해서 새로운 컬럼을 만들어내는 경우와 같은 경우 어쩔 수 없이 apply 함수를 적용합니다.  만약 천만건, 일억건 이상의 데이터가 있고, 이를 빠르게 수행해야 한다면 어떻게든 이 복잡한 로직을 컬럼레벨로 풀어낼 수 있도록 로직을 구사하는 방법 밖에 없습니다.

감사합니다.