inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

캐글 Advanced 머신러닝 실전 박치기

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

312

밑바닥개발자

작성한 질문수 77

0

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

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

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

kaggle 머신러닝 배워볼래요?

답변 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 함수를 적용합니다.  만약 천만건, 일억건 이상의 데이터가 있고, 이를 빠르게 수행해야 한다면 어떻게든 이 복잡한 로직을 컬럼레벨로 풀어낼 수 있도록 로직을 구사하는 방법 밖에 없습니다.

감사합니다.

sql사용

0

44

2

좋은 강의 감사드립니다.

0

73

2

8분 40초경 LGBClassifier에서 설정해주신 파라미터들 관련 질문

0

246

2

사용 가능한 RAM을 모두 사용한 후 세션이 다운되었습니다

0

599

1

안녕하세요 선생님

0

228

1

권철민교수님 진심으로 감사드립니다.

0

319

1

안녕하세요 선생님

0

351

1

# credit_card_balance 데이터셋 피쳐엔지니어링

0

267

1

초거대 데이터셋을 Submission하려면?

0

190

1

Library 관련 질문

0

350

3

최적화 함수 에러

0

587

4

LightGBM Iteration관련

0

422

2

안녕하세요 교수님 vm 관련해서 질문이 있습니다.

0

203

1

코드를 실행했는데 오류가 발생합니다

0

1981

2

bayes_opt 회귀 모델에 적용하려면..

0

267

1

타겟값의 로그변환에 대해서

0

779

1

아나콘다 환경설정

0

459

1

깃허브 주소 문의드립니다.

0

359

1

손실함수에 대한 질문

0

342

1

card_bal 데이터셋 시각화 관련 질문입니다

0

230

1

LGBM null값 처리에 관해 질문있습니다

0

538

1

컬럼 관련 질문

0

280

1

히스토그램 x 값

0

364

1

n_iter 횟수 넘음 질문

0

487

2