제퍼넷 로고

Python Map, Reduce 및 Filter의 힘 – 데이터 과학을 위한 함수형 프로그래밍

시간

이 기사는 데이터 과학 Blogathon

Map, Filter, Reduce는 함수형 프로그래밍의 패러다임입니다.

함수형 프로그래밍이란 무엇입니까?

함수형 프로그래밍은 이름에서 알 수 있듯이 함수 평가를 통해 계산합니다. 이를 통해 더 빠른 구현 방법으로 더 간단하고 짧은 코드를 작성할 수 있습니다. 함수형 프로그래밍에서 코드는 순수 함수의 평가에 전적으로 의존합니다.

함수형 프로그래밍

출처: 작성자가 만든 이미지

함수형 프로그래밍에서 순수 함수란 무엇입니까?

함수의 출력이 눈에 띄는 부작용 없이 입력에서 직접 나오는 경우 이를 순수 함수라고 합니다. 전체 프로그램의 상태를 변경하거나 변경 가능한 데이터를 건드리지 않고 함수를 인수로 전달하여 계산합니다.

아래에서 함수형 프로그래밍의 뉘앙스에 대해 논의하고 함수형 프로그래밍 패러다임으로 작성된 코드의 주요 이점을 살펴보겠습니다.

  1. 추상화: 기능을 활용하여 코드를 추상화했습니다. 함수를 작성하고 테스트하고 출력을 확인한 후에는 함수를 호출할 때마다 함수를 정의한 것과 동일한 출력을 생성한다는 것을 알면 안심할 수 있습니다.

  1. 투명성: 순수한 함수를 작성할 때 모든 환경에서 코드의 동작을 확신합니다. 이것은 부작용의 가능성을 제거하고 디버깅을 쉽게 만듭니다.

  2. 병렬 컴퓨팅: 작업이 부작용을 일으키지 않으므로 모든 작업이 잠재적으로 병렬로 실행될 수 있습니다.

  3. 상위 수준 패러다임: 함수를 활용하여 단계별 흐름을 지정하는 대신 함수에서 원하는 결과를 설명합니다.

함수형 프로그래밍의 주요 기능

함수형 프로그래밍 패러다임의 핵심을 형성하는 세 가지 주요 함수는 Map, Filter 및 Reduce입니다.

여기서 주목해야 할 중요한 아이디어는 다른 함수 내부에 함수를 전달하여 작업을 수행한다는 것입니다. 또한 이들은 하나의 특정 출력을 제공하도록 설계된 순수 함수이므로 변수, 사용자 입력 및 의도하지 않은 결과의 변경으로 인해 발생할 수 있는 전체 코드의 버그 가능성을 줄입니다.

아래 표에서 Map, Reduce 및 Filter의 주요 특성에 대한 명확한 요약을 제공합니다. 인수로 전달하는 함수의 효과와 출력에 대한 입력의 효과에 주의하십시오.

함수형 프로그래밍의 3가지 기능

이제 Map, Reduce, Filter를 예제와 함께 살펴보겠습니다.

지도 기능

맵 함수에서 인수로 전달한 함수는 반복 가능한 객체에 적용됩니다.

목록 내포에 익숙하다면 Map 함수도 비슷한 효과가 있습니다. 다양한 요소에 동시에 기능을 매핑하거나 구현해야 할 때 사용합니다.

map 함수는 다음 인수를 사용합니다.

지도(함수, 반복 가능한 객체)

기능: 사용자 정의 함수 또는 람다 함수일 수 있습니다. Lambda는 여러 인수를 사용할 수 있는 익명 함수입니다. 하나의 표현만 가질 수 있습니다.

반복 가능한 객체: 문자열, 튜플, 리스트, 세트, ​​사전과 같은 객체

모든 직원의 이름을 포함하는 FirstName이라는 목록이 있고 모든 직원의 성이 포함된 또 다른 목록이 있다고 가정합니다. 원하는 출력은 전체 이름을 표시하는 것입니다. for 루프를 사용하여 이를 달성할 수 있지만 여러 줄의 코드가 필요하고 지루할 것입니다. 맵 기능을 사용하면 한 줄의 코드로 이를 달성할 수 있습니다.

입력:

first_name = ["키스", "엘리자베스","알렉스","윌리엄"] last_name = ["필립","브라운","스미스","올리버"]

지도 기능

name = list(map(lambda x, y:x+ " "+y, 이름_이름, 성_이름))

아래는 우리가 얻을 출력입니다.

지도 함수의 구현에서 우리가 람다 x, y:x+” “+y로 정의한 람다 함수는 람다 객체를 반환하지만 지도는 iterable의 각 요소를 람다 객체에 전달하고 값을 저장하는 작업을 처리합니다. 지도 객체에 들어갑니다. 지도 객체의 목록 기능을 사용하여 최종적으로 출력 목록을 얻습니다.

이제 모든 숫자의 큐브를 찾고자 하는 예를 들어 보겠습니다. 함수를 인수로 전달하여 수행할 수도 있습니다.

먼저 입력 큐브를 반환하는 함수를 만들어 보겠습니다.

def 큐브(x): x**3 반환

이제 이것을 map 함수에 전달합시다.

arr_num = [1,3,5,7,9] cube_values ​​= list(map(cube, arr_num)) print(cube_values)

출력:

필터 기능

'Filter'는 맵 기능과 유사하게 작동하지만 부울인 조건을 찾는 기능도 필요합니다. 그런 다음 필터는 조건을 만족하는 iterable 객체의 요소를 반환합니다. 본질적으로 부울 논리를 만족하지 않는 개체를 필터링합니다.

필터 함수의 인수

필터(함수, 이터러블 객체)

함수: 필터 함수에 전달된 함수 개체는 항목이 정수인지 여부와 같이 항상 부울 값을 반환해야 합니다.

반복 가능한 객체: map 함수와 유사하게 문자열, 리스트, 튜플, 세트, ​​사전과 같은 모든 반복 가능한 객체를 허용합니다.

필터 기능을 사용하여 이름이 'h'로 끝나는 직원을 필터링하는 방법을 살펴보겠습니다.

이름 = 목록(필터(람다 x: ( x[-1]=='h'),first_name)) 인쇄(이름)

우리는 아래와 같은 결과를 얻을 것입니다:

감소 기능

'Reduce'는 반복 가능한 객체에서 쌍별 연산을 활성화합니다. 각 연속 요소와 함께 전달된 함수에 정의된 각 작업의 결과를 사용합니다. 이것은 궁극적인 값이 하나만 남을 때까지 pyton이 함수를 적용할 총 항목을 줄이는 효과가 있습니다.

reduce 함수의 인수를 살펴보기 전에 파이썬의 functools 라이브러리에서 reduce를 가져와야 한다는 점에 유의해야 합니다.

다음은 가져오기 명령입니다.

functools 가져 오기에서 감소

인수 :

reduce(함수, 반복 가능한 객체)

함수:

  • reduce 함수에 전달된 함수는 쌍별 연산을 수행하기 위해 두 개의 입력 값을 사용합니다.

  • 단일 최종 출력으로 이어집니다.

반복 가능 사물: 문자열, 목록, 튜플, 집합, 사전.

reduce 함수를 이해하기 위한 예를 살펴보겠습니다.

숫자 목록이 있고 가장 큰 숫자를 찾고 싶습니다.

arr_num = [110,569, 784, 377, 900, 126] maximum_num = reduce(lambda x, y: x if x>y else y, arr_num) print(largest_num)

위에 제공된 코드 스니펫에서 functools 라이브러리를 가져와 reduce 함수에 액세스합니다. reduce 함수 구현에서 람다 x, y: x if x>y else y, x>y이면 x를 반환하고 그렇지 않으면 y를 반환합니다.

map, filter, reduce 함수의 의미를 설명하기 위해 간단한 예를 들었지만 이들은 강력하고 복잡한 작업을 우아하게 수행할 수 있습니다. 함수를 전달하여 결과를 달성하고 있기 때문에 출력의 일관성과 코드의 예측 가능성을 확신할 수 있습니다. 이렇게 하면 나중에 필요한 경우 코드를 더 쉽게 검토하고 변경할 수 있습니다. 장기적으로 안정적이기를 원하는 프로그램을 작성할 때 이러한 기능적 프로그래밍 도구가 없어서는 안 될 것입니다.

자세한 내용은 이 블로그에서 사용된 코드가 포함된 내 GitHub 링크를 참조하십시오.

https://github.com/akanshakhandelwal/Python-Notebooks/blob/main/MapFilterReduce.ipynb

이 기사에 표시된 미디어는 Analytics Vidhya의 소유가 아니며 작성자의 재량에 따라 사용됩니다.

PlatoAi. Web3 재창조. 데이터 인텔리전스 증폭.
액세스하려면 여기를 클릭하십시오.

출처: https://www.analyticsvidhya.com/blog/2021/09/the-power-of-python-map-reduce-and-filter-functional-programming-for-data-science/

spot_img

최신 인텔리전스

spot_img