Excel & IT Info

아이엑셀러 닷컴, 엑셀러TV

Python

파이썬 람다 함수: 구문 및 애플리케이션

권현욱(엑셀러) 2023. 12. 31. 20:00
반응형

익명 함수(anonymous function)라고도 알려진 파이썬의 람다(Lambda) 함수는 이해하기 쉬운 한 줄로 함수를 작성하는 방법을 제공합니다. 모양과 사용 방법에서 일반 기능과 구별되죠. 쉽게 람다 함수에 접근하는 방법과 람다 함수를 사용하여 사회 경제적 및 인구통계 데이터 세트를 분석하는 방법에 대해 소개합니다.

 

권현욱(엑셀러) | 아이엑셀러 닷컴 대표 · Microsoft Excel MVP · Excel 솔루션 프로바이더 · 작가

 

※ 이 글은 아래 기사 내용을 토대로 작성되었습니다만, 필자의 개인 의견이나 추가 자료들이 다수 포함되어 있습니다.


  • 원문: Python Lambda Functions: Syntax and Applications
  • URL: https://python.plainenglish.io/python-lambda-functions-syntax-and-applications-bc9e99509c14

파이썬 람다 함수 구문 이해

Python에서 람다 함수는 이름이 지정되지 않은 익명 함수로 호출될 수 있으며 다음과 같이 한 줄로 생성될 수 있습니다.

lambda x: x**2

 

일반적인 함수와 달리 아래와 같이 return 문을 사용하지 않고 이 표현식의 결과를 바로 제공합니다.

squared = lambda x: x**2
squared(3)

 

출력 결과는 9입니다.

 

파이썬 람다 함수와 일반 함수 비교

Lambda 함수와 일반 Python 함수는 몇 가지 면에서 다릅니다. 첫째, 람다는 하나의 표현식으로 제한됩니다. 이로 인해 일반 기능보다 유연성이 떨어지지만 더 간단해집니다. def로 생성된 정규 함수에는 많은 표현식과 명령문이 포함될 수 있습니다. 그러나 람다는 단순성과 일회용 시나리오에 중점을 둡니다. 우리가 했던 것과 똑같은 일을 정규 함수로 제곱하여 재현해 보겠습니다.

def squared_regular(x) :
    x = x**2
    return(x)

 

이처럼 일반 함수를 다시 만드는 데는 한 줄이 아닌 세 줄의 코드가 필요합니다. 한 줄짜리 람다 함수를 사용해도 출력 결과는 동일한 것을 볼 수 있습니다.

squared_regular (4)

 

이제 조금 더 복잡한 예를 살펴보겠습니다.

 

파이썬 람다 함수의 실제 애플리케이션

이 섹션에서는 사회경제적 및 인구통계학적 인사이트 데이터에 대해 맵 필터 및 적용이라는 세 가지 다른 기능을 갖춘 람다 함수를 사용합니다. Kaggle 에서 이 데이터를 얻을 수 있습니다 . 다음 섹션에서는 람다 함수를 사용하여 다음을 수행합니다.

 

  • GDP 성장 조정: 람다 함수를 적용하여 경제 성장이 가장 느린 국가를 식별하고 잠재적인 고용 및 빈곤 문제를 드러냈습니다(map()을 사용한 람다 함수).
  • 도시화 지수: 람다를 활용해 도시 성장과 인구 밀도를 결합한 지수를 만들어 도시화에 대한 새로운 시각을 제시했습니다(apply()를 사용한 람다 함수).
  • 높은 수출국 강조: 람다 기능은 GDP 대비 수출이 높은 국가를 찾는 데 도움이 되었으며, 이는 해당 국가가 세계 경제와 강한 유대관계를 보여줍니다(filter()를 사용한 람다 함수).

 

조정 GDP 성장부터 시작해 보겠습니다.

 

최저 조정 GDP 성장 — map()을 사용한 람다 함수

GDP 성장률은 경제 건전성을 이해하는 데 핵심입니다. 예를 들어, GDP 성장률이 낮으면 이는 경제 활동이 취약하다는 것을 의미합니다. 이 문제는 실업률 증가, 임금 인상이나 직업 발전 기회 감소, 빈곤 증가로 이어질 수 있습니다. GDP 성장이 부진한 국가에서는 사람들이 일자리를 찾고, 더 나은 급여를 받고, 경력을 쌓는 데 어려움을 겪는 경우가 많습니다.

 

다양한 국가의 다양한 사회경제적 지표가 포함된 보간된 데이터세트를 로드하는 것부터 시작해 보겠습니다. [여기]에서 확인하고 다운로드할 수 있습니다.

interpolated_data = pd.read_csv("path here")

 

이제 GDP 성장률을 일정 수준으로 조정해 보겠습니다. map() 함수와 람다 표현식을 사용하여 이를 수행합니다. 이 람다는 GDPGrowth% 열의 모든 값에 적용되며 각 값에 성장 조정 계수 1.05를 곱합니다.

growth_adjustment_factor = 1.05  # 5% increase
interpolated_data['Adjusted_GDPGrowth%'] = interpolated_data['GDPGrowth%'].dropna().map(lambda x: x * growth_adjustment_factor)

 

그런 다음 조정 GDP 성장률이 가장 낮은 국가를 찾는 데 중점을 둡니다. 이를 위해 데이터세트를 adjusted_GDPGrowth% 열을 기준으로 오름차순으로 정렬하고 상위 10개 항목을 선택합니다. dropna()를 사용하면 유효한 GDP 성장 데이터가 있는 행만 고려됩니다.

lowest_gdp_growth_data = interpolated_data[['Adjusted_GDPGrowth%', 'Country']].sort_values(by='Adjusted_GDPGrowth%', ascending=True).dropna().head(10)

 

출력은 다음과 같습니다.

 

(이미지: python.plainenglish.io)

 

마지막으로 이 10개 국가를 시각적으로 나타내는 막대 그래프를 만듭니다. 이 그래프는 조정 GDP 성장률이 가장 부진한 국가에 대한 즉각적이고 명확한 관점을 제공합니다. 시각화는 국가와 해당 국가의 조정된 성장률을 강조하여 쉽게 해석할 수 있도록 설계되었습니다.

plt.figure(figsize=(12, 6))
plt.bar(lowest_gdp_growth_data['Country'], lowest_gdp_growth_data['Adjusted_GDPGrowth%'], color='lightcoral')
plt.xlabel('Country')
plt.ylabel('Adjusted GDP Growth %')
plt.title('10 Countries with the Lowest Adjusted GDP Growth Rates')
plt.xticks(rotation=45)
plt.show()

 

출력 결과는 다음과 같습니다.

 

(이미지: python.plainenglish.io)

 

도시화 지수 생성 - apply()를 사용한 Lambda 함수

글로벌 사회경제적, 인구통계학적 데이터를 활용한 도시화 추세 연구에서 우리는 '도시화 지수'라는 특별한 지표를 만들었습니다. Apply() 메서드와 함께 Python 람다 함수를 사용하여 이 인덱스를 계산합니다. 도시 성장과 인구 밀도가 높은 지역에 대한 자세한 정보를 제공합니다.

 

도시화 지수는 국가별로 도시화 정도가 얼마나 심한지 측정합니다. 이는 도시 인구가 얼마나 빠르게 증가하는지와 특정 지역에 얼마나 많은 사람들이 살고 있는지라는 두 가지 중요한 요소를 결합합니다. 먼저 데이터 세트에서 도시 인구 증가 및 인구 밀도에 대한 가장 높은 값을 찾습니다. 우리는 이러한 상위 값을 사용하여 데이터를 정규화합니다. 이를 통해 여러 국가의 도시화 추세를 비교할 수 있습니다.

max_urban_growth = interpolated_data['UrbanPopGrowth%'].max()
max_density = imputed_data['PopDens'].max()

 

이제 도시 성장과 인구 밀도 수치를 정규화하는 람다 함수를 만듭니다. 이러한 함수는 정확한 계산을 보장하기 위해 null 값이 있는지 확인합니다. map() 함수를 사용하여 이러한 정규화를 데이터 세트의 관련 열에 적용합니다.

 

 

urban_growth_normalizer = lambda x: x / max_urban_growth if pd.notnull(x) else None
density_normalizer = lambda x: x / max_density if pd.notnull(x) else None

interpolated_data['Normalized_UrbanGrowth'] = interpolated_data['UrbanPopGrowth%'].map(urban_growth_normalizer)
imputed_data['Normalized_PopDens'] = imputed_data['PopDens'].map(density_normalizer)

 

보간되고 대치된 데이터 세트는 '국가' 열에 병합되어 정규화된 도시 성장 및 인구 밀도 데이터를 정렬합니다.

combined_data = pd.merge(
    imputed_data[['Country', 'Normalized_PopDens']],
    interpolated_data[['Country', 'Normalized_UrbanGrowth']],
    on='Country'
)

 

각 국가의 도시화 지수를 계산하기 위해 새로운 Python 람다 함수가 정의되었습니다. 이 지수는 표준화된 도시 성장과 인구 밀도의 산물입니다. apply() 메서드는 데이터세트 전체에 이 계산을 적용하는 데 사용됩니다.

urbanization_index = lambda row: row['Normalized_PopDens'] * row['Normalized_UrbanGrowth'] if pd.notnull(row['Normalized_PopDens']) and pd.notnull(row['Normalized_UrbanGrowth']) else None
combined_data['Urbanization_Index'] = combined_data.apply(urbanization_index, axis=1)

 

그런 다음 데이터 세트를 처리하여 도시화 지수가 가장 높은 상위 10개 고유 국가를 식별하여 각 국가가 한 번만 표시되도록 합니다. 그리고 나중에 이 나라들을 살펴보겠습니다.

unique_top_urbanization_index = combined_data[[ 'Country' , 'Urbanization_Index' ]].dropna().drop_duplicates(subset=[ 'Country' ]).nlargest( 10 , 'Urbanization_Index' ) unique_top_urbanization_index

 

출력은 다음과 같습니다.

 

(이미지: python.plainenglish.io)

 

이것을 좀 더 시각화해 보겠습니다.

plt.figure(figsize=(12, 6))
plt.bar(unique_top_urbanization_index['Country'], unique_top_urbanization_index['Urbanization_Index'], color='teal')
plt.xlabel('Country')
plt.ylabel('Urbanization Index')
plt.title('Top 10 Unique Countries by Urbanization Index')
plt.xticks(rotation=45)
plt.show()

 

출력 결과는 다음과 같습니다.

 

(이미지: python.plainenglish.io)

 

상위 10대 수출국 — filter()를 사용한 람다 함수

글로벌 사회 경제적 데이터 세트를 탐색하면서 우리는 GDP 대비 수출액이 가장 높은 상위 10개 국가를 식별할 것입니다. 이 분석은 수출이 경제에서 중요한 역할을 하는 국가를 강조합니다.

 

첫 번째 단계는 데이터세트에 있는 모든 국가의 GDP 대비 평균 수출 비율을 계산하는 것입니다. 우리는 이 평균을 벤치마크로 사용하여 글로벌 수출 성과 측면에서 평균보다 훨씬 더 나은 성과를 내고 있는 국가를 찾을 것입니다.

mean_export_percentage = interpolated_data[ 'Exports%GDP' ].mean()

 

이제 filter() 함수와 람다 표현식을 사용하여 데이터세트를 살펴보겠습니다. GDP 대비 수출 비율이 우리가 계산한 평균보다 높은 국가를 선택하겠습니다. 이 단계는 수출을 통해 세계 경제와 깊이 연결된 국가를 찾는 데 도움이 됩니다.

high_export_countries = list(filter(
    lambda x: x[1] > mean_export_percentage, 
    zip(interpolated_data['Country'], interpolated_data['Exports%GDP'])
))

 

그런 다음 결과는 분석 및 시각화의 용이성을 위해 DataFrame으로 변환됩니다.

high_export_countries_df = pd.DataFrame(high_export_countries, columns=[ 'Country' , 'Exports (% of GDP)' ])

 

이러한 국가를 찾은 후 수출 비율에 따라 가장 높은 국가부터 가장 낮은 국가까지 정렬합니다. 중복된 항목을 제거하여 각 국가가 한 번만 표시되도록 합니다. 그런 다음 상위 10개를 선택합니다.

high_export_countries_df_sorted = high_export_countries_df.sort_values(by= 'Exports (% of GDP)' , ascending= False ).drop_duplicates(subset=[ 'Country' ]).head( 10 )

 

출력은 다음과 같습니다.

 

(이미지: python.plainenglish.io)

 

결과를 막대 그래프로 그려보겠습니다. 이는 GDP의 일부로 수출이 가장 많은 국가를 명확하게 보여줍니다. 이를 통해 우리는 이들 국가가 경제에서 수출에 어떻게 집중하는지 비교할 수 있습니다.

plt.figure(figsize=(12, 6))
plt.bar(high_export_countries_df_sorted['Country'], high_export_countries_df_sorted['Exports (% of GDP)'], color='blue')
plt.xlabel('Country')
plt.ylabel('Exports (% of GDP)')
plt.title('Top 10 Distinct High Exporting Countries')
plt.xticks(rotation=45)
plt.show()

 

출력 결과는 다음과 같습니다.

 

(이미지: python.plainenglish.io)

 

정리

파이썬 람다 함수는 데이터 과학자와 분석가에게 유용한 도구입니다. 이 기사에서는 사회경제적 및 인구통계학적 데이터를 통해 입증된 것처럼 이론적 이해의 중요성과 실제 적용에 미치는 영향을 강조합니다.

 

파이썬 람다 함수는 특히 map(), filter() 및 apply()와 같은 메서드와 함께 사용될 때 데이터 조작을 간소화하고 모양을 향상시킵니다. 복잡한 작업을 단순화하여 코드를 더욱 강력하게 만듭니다. 람다 함수에 관심이 있고 데이터 과학에 대해 더 깊이 탐구하고 싶다면 Python 인터뷰 질문과 같은 인터뷰 질문을 연습하고 StrataScratch의 데이터 프로젝트를 다루면서 지식을 확장할 수 있습니다

 

자주 묻는 질문

Python의 람다 함수란 무엇입니까?

람다 함수는 단일 문으로 표현되는 익명 함수입니다. 공식적으로 함수를 정의할 필요 없이 간단한 작업을 수행하는 데 사용할 수 있습니다.

 

Python에서 언제 람다를 사용합니까?

Lambda 함수는 특히 map(), filter() 및 Reduce()와 같은 고차 함수에 대한 인수로 짧은 기간 동안 작은 함수가 필요할 때 유용합니다.

 

람다 함수는 여러 인수를 가질 수 있나요?

람다 함수는 인수를 여러 개 가질 수 있지만 표현식은 하나만 가질 수 있습니다.

 

Python 람다 함수의 제한 사항은 무엇입니까?

Python 람다 함수는 단일 표현식으로 제한되며 명령이나 여러 표현식을 포함할 수 없습니다. 또한 독스트링을 가질 수 없고 함수 이름이 부족합니다.

 

Python의 내장 함수에 람다 함수를 사용할 수 있나요?

물론, 람다 함수는 sorted(), map(), filter() 등과 같은 내장 함수와 함께 사용되는 경우가 많으며, 여기서 해당 함수는 키 함수나 콜백으로 전달될 수 있습니다.