AI 헬스케어 3기 데이터 분석 코스 Python (7)
람다함수 (Lambda Functions)
람다함수는 간단한 함수를 한 줄로 정의할 수 있는 익명 함수입니다.
의료 데이터 처리에서 환자 목록 정렬, 조건부 필터링, 데이터 변환 등에 매우 유용합니다.
왜 람다함수가 필요할까?
간단한 작업을 위해 함수를 계속 만들기 번거로움
데이터 정렬/필터링에서의 편리함
#a,b라는 파라미터를 가져와서 이 두개를 더한 값을 return하는 함수
def add(a, b):
return a + b
add(10, 20)
람다함수 사용법
람다함수는 lambda 키워드를 사용해 간단하게 함수를 정의하며 return 키워드 없이 표현식의 결과를 자동으로 리턴합니다.
기본 문법
# 기본 형태
lambda 파라미터: 리턴할 표현식
# 예시
lambda x: x * 2
# 일반 함수
def calculate_bmi(weight, height):
return weight / (height ** 2)
# 람다함수로 변환
calculate_bmi_lamda = lambda weight, height: weight / (height ** 2)
# 사용법은 동일
patient_bmi = calculate_bmi_lamda(70, 1.75)
print(f"환자 BMI: {patient_bmi:.1f}")
표현식이란?
표현식(Expression)은 값을 계산해서 결과를 만들어내는 코드입니다.
# 이것들이 모두 "표현식"입니다
x + 5 # 계산 표현식
"hello" # 문자열 표현식
x > 10 # 비교 표현식
a if b else c # 조건 표현식
# 상황 연산자
#value1 if 조건식 else value2
age = 10
# 나이에 따라서 미성년자 or 성인 판별
adult = "성인" if age >= 18 else "미성년자" #"미성년자" or "성인"
print(adult) # 미성년자
#if age >= 18:
# adult = "성인"
#else:
# adult = "미성년자"
람다함수의 활용
1. 조건문에 활용
# 혈압 분류 함수
classify_bp = lambda systolic: "고혈압" if systolic >= 140 else "고혈압전단계" if systolic >= 120 else "정상"
def classify_bp(systolic):
if systolic >= 140:
return "고혈압"
elif systolic >= 120:
return "고혈압전단계"
else:
return "정상"
# 환자 혈압 분류
patients_bp = [120, 135, 145, 110, 155]
for bp in patients_bp:
print(f"혈압 {bp}: {classify_bp(bp)}")
2. 데이터 정렬에 활용
sorted() 함수의 key 매개변수에는 어떤 기준으로 정렬할지를 알려주는 함수를 넣어줍니다.
# 환자 정보 리스트
patients = [
{"name": "김환자", "age": 65, "systolic": 140, "temperature": 36.8},
{"name": "이환자", "age": 45, "systolic": 120, "temperature": 37.2},
{"name": "박환자", "age": 55, "systolic": 155, "temperature": 36.5},
{"name": "최환자", "age": 70, "systolic": 135, "temperature": 38.1}
]
# 혈압 기준으로 정렬 (람다함수 사용)
patients_sorted_by_systolic = sorted(patients, key=lambda patient: patient["systolic"])
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# 각 환자에서 혈압값을 뽑아서 정렬 기준으로 사용
print("=== 혈압 기준 정렬 ===")
for patient in patients_sorted_by_systolic:
print(f"{patient['name']}: {patient['systolic']}mmHg")
# 나이 기준으로 정렬 (내림차순)
patients_sorted_by_age = sorted(patients, key=lambda patient: patient["age"], reverse=True)
print("=== 나이 기준 정렬 (내림차순) ===")
for patient in patients_sorted_by_age:
print(f"{patient['name']}: {patient['age']}세")
일반 함수 vs 람다함수
# 환자 정보 리스트
patients = [
{"name": "김환자", "age": 65, "systolic": 140, "temperature": 36.8},
{"name": "이환자", "age": 45, "systolic": 120, "temperature": 37.2},
{"name": "박환자", "age": 55, "systolic": 155, "temperature": 36.5},
{"name": "최환자", "age": 70, "systolic": 135, "temperature": 38.1}
]
# 1. 일반 함수 방식
def get_patient_risk_level(patient):
if patient["systolic"] >= 160:
return "고위험"
elif patient["systolic"] >= 140:
return "중위험"
else:
return "저위험"
risk_levels = [get_patient_risk_level(p) for p in patients]
# 2. 람다함수 방식 (간단한 경우에만)
get_risk = lambda p: "고위험" if p["systolic"] >= 160 else "중위험" if p["systolic"] >= 140 else "저위험"
risk_levels = [get_risk(p) for p in patients]
환자 체온 분류
환자의 체온을 받아서 발열 여부를 판단하는 함수를 두 가지 방식으로 작성하세요.
# 여기에 코드를 작성하세요
# 방법 1: 일반 함수 방식
def check_fever(temperature):
if temperature >= 37.5:
return "발열"
else:
return "정상"
return "발열" if fever >= 37.5 else "정상"
# 방법 2: 람다함수 방식
check_fever_lambda = almbda if temperature : "발열" if temperature >= 37.5 else "정상"
람다함수 사용 시 주의사항
언제 사용하면 좋을까?
✅ 간단한 계산이나 변환
✅ 일회성 정렬/필터링
✅ map, filter, sorted 함수와 함께
✅ 즉석 데이터 처리
언제 사용하지 말아야 할까?
❌ 복잡한 로직 (3줄 이상)
❌ 반복적으로 사용되는 함수
❌ 디버깅이 중요한 핵심 로직
❌ 다른 사람이 이해하기 어려운 복잡한 조건
람다함수는 의료 데이터 처리에서 빠르고 간편한 도구입니다.
적절히 사용하면 코드가 훨씬 간결하고 효율적이 되지만, 너무 복잡하게 만들면 오히려 가독성을 해칠 수 있으니 상황에 맞게 사용하세요.
# 점심 메뉴 추천하는 프로그램
import random
lunch_menu = ["된장찌개", "김치볶음밥", "비빔면", "제육볶음", "돈까스"]
dinner_menu = ["삼겹살", "피자", "파스타", "곱창", "치킨"]
# 1. 사용자에게 입력값 받아오기
meal = input("점심/저녁 중에 선택하세요")
meal
# 2. 방아온 입력값을 기준으로 해당 메뉴리스트에서 랜덤으로 값 뽑아오기
get_menu = lambda meal: random.sample(lunch_menu,1)[0]if meal == "점심" else random.sample(dinner_menu,1)[0]
print(get_menu(meal))
데이터 처리
keyboard_arrow_down
JSON 데이터 처리
JSON (JavaScript Object Notation)은 딕셔너리와 리스트 같은 파이썬 데이터를 텍스트 파일로 저장하거나 웹에서 주고받을 때 사용하는 표준 데이터 형식입니다.
의료진이 EMR 시스템, 의료 API, 연구 데이터를 다룰 때 자주 접하게 되는 형식입니다.
JSON이란?
JSON은 문자열 형식으로, 의료 데이터를 구조화해서 저장하고 전송할 때 널리 사용됩니다.
Python ↔ JSON 변환
json.dumps() - Python → JSON 문자열
import json # JSON 데이터 처리를 위한 파이썬 내장 모듈
# 환자 정보를 딕셔너리로 저장
patient_info = {
"patient_id": "P001",
"name": "박환자",
"age": 45,
"department": "내과",
"diagnosis": ["고혈압", "당뇨병"],
"medications": ["혈압약", "당뇨약"],
"is_emergency": False,
"blood_sugar": 120.5
}
# JSON 문자열로 변환
json_string = json.dumps(
patient_info, # JSON으로 변환할 파이썬 객체
ensure_ascii=False, # 한글 등 비ASCII 문자를 유니코드 그대로 출력
indent=2 # JSON을 2칸 들여쓰기로 예쁘게 포맷팅
)
print(json_string)
print(f"데이터 타입: {type(json_string)}")
import json
json_string = json.dumps(patient_info, ensure_ascii=False, indent=2)
json_string
# 혈압 분류 판정
systolic = device_data['vital_signs']['systolic_bp']
if systolic >= 140:
bp_category = "고혈압"
elif systolic >= 120:
bp_category = "고혈압 전단계"
else:
bp_category = "정상"
print(f"혈압 분류: {bp_category}")
type(medical_device_data)
data =json.loads(medical_device_data)
type(data)
# 딕셔너리에서 데이터를 뽑아오는 1번째 방법
data["vital_signs"]["heart_rate"]
# 딕셔너리에서 데이터를 뽑아오는 2번째 방법
data.get("vital_signs").get("heart_rate")
CSV 파일 처리
CSV (Comma-Separated Values)는 엑셀처럼 표 형태의 데이터를 쉼표로 구분하여 저장하는 간단한 텍스트 파일 형식입니다.
의료진이 환자 데이터 분석, 연구 결과 정리, 보고서 작성 시 가장 많이 사용하는 형식입니다.
tReader와 DictWriter
딕셔너리 형태로 데이터를 다루면 열 이름으로 직접 접근할 수 있어 더 편리합니다.


댓글
댓글 쓰기