[Python] Lambda & MapReduce
본 포스팅은 edwith BoostCourse에서 ‘머신러닝을 위한 파이썬’ 강의를 듣고 한 포스팅입니다.
- Lambda
Lambda는 함수의 이름이 없이 함수처럼 쓸 수 있는 ‘익명함수’이다. 보통 함수의 경우는 함수명과 인자값, 리턴값을 선언을 하여 사용하게 되는데, 람다함수는 이와는 다른 형태이다.
#일반적인 함수
def f(x,y):
return x + y#lambda 함수
f = lambda x,y: x+y
위의 예제에서 x,y를 인자값으로 받고 x+y값을 리턴값으로 f에 넘겨주는 익명함수로 사용하는 형태이다. 파이썬3 개발자들은 굳이 사용할 필요가 없다고들 하지만, 판다스를 사용할 때는 유용하다고 하다.
lambda 함수에서도 list comprehension 처럼 필터를 걸 수 있다. (=조건을 집어 넣을 수 있다.)
lambda x: x**2 if x % 2 == 0 else x
그런데, lambda 함수는 if문을 쓸 경우 반드시 else를 써줘야 한다.
2. Map & Reduce
리스트나 튜플 같은 시퀀스 자료형의 각 element에 동일한 function을 적용하는 것이 Map함수이다.
ex = [1,2,3,4,5]
f = lambda x: x ** 2
list(map(f, ex))
ex라는 리스트를 lambda함수에 인자로 넣고 map 함수를 적용하면 ex 리스트의 1,2,3,4,5에 각각 f 함수가 적용되어 [1,4,9,16,25]의 값이 나온다. 그런데 파이썬 3의 경우 위의 코드 처럼 list()함수 안에 집어넣어주지 않으면 그냥 주소값이 나오니 이부분은 유의해야한다.
시퀀스 자료형의 각 element에 모두 같은 함수를 적용할 수 있어 데이터 분석할 때 굉장히 유용하게 쓰인다.
Reduce 함수는 일반적으로 map 함수와 같이 쓴다. list에 똑같은 함수를 적용해서 통합한다.
from functools import reduce // reduce를 import 해서 사용함
reduce(lambda x, y : x+y, [1,2,3,4,5]))
위의 코드를 실행해보면 15가 나오는데 어떤 식으로 해서 15가 나오냐면, lambda 함수에 인자가 차례대로 전달되는데, 처음에 1과 2가 전달이 된다. 1과 2가 전달이 되어서 3을 리턴하면 그 3과 리스트의 3이 더해져 6이 리턴되고, 6과 4가 더해져 10이 리턴되고, 10이 마지막 5와 더해져 15가 되는 것이다. Reduce 함수 역시 판다스를 사용할 때 많이 사용한다.