📌 개요
🔑 학습 키워드
┗ 파이썬 문법요소: 언패킹, 언더스코어, 예외처리
┗ 함수형 프로그래밍: 람다 표현식, map(요소 변경), filter(필터링), reduce(집계)
💡 1. 언패킹 및 언더스코어
[ 언패킹 ]
┗ 언패킹 정의:
- '시퀀스 자료형'(리스트, 튜플, 문자열 등)에서 여러 개의 값을 개별 변수에 분리하여 할당하는 기능
- 하나의 데이터 묶음에서 개별 요소들을 추출하여 각각의 변수에 직접 할당
┗ 언패킹 예시:
<'시퀀스 언패킹'>
rgb = [255, 128, 0]
=> red, green, blue = rgb // 언패킹 부분
print(f"빨강: {red}, 초록: {green}, 파랑: {blue}")
word = "ABC"
=> first, second, third = word // 언패킹 부분
print(f"첫번째 문자: {first}, 두번째 문자: {second},
세번째 문자: {third}")
-> rgb 시퀀스 객체를 각 변수에 할당하는 과정이 시퀀스 언패킹임
<'확장 언패킹'>
monthly_sales = [1200, 1350, 1420, 1500, 1300, 1580,
1620, 1700, 1800, 1850, 1900, 2000]
first, *middle, last = monthly_sales
print(f"첫 달(1월) 판매액: {first}")
print(f"마지막 달(12월) 판매액: {last}")
print(f"중간 달(2~11월)의 판매액: {middle}")
-> * 기호를 활용하면 변수 개수를 맞추지 않더라도 나머지를 리스트(배열)로 넣어주는 기능
[ 언더스코어 ]
┗ 언패킹 정의:
- 시퀀스 데이터는 일반적으로 반복문을 사용하여 처리
- '언더스코어(_)': 반복 변수의 값이 필요하지 않을 때 이를 대체하는 역할
- 즉, 성능과는 관련이 없지만 의미적으로 값이 필요없을을 나타낼 때 쓴다고 보면됨
┗ 언더스코어 예시:
for _ in range(5):
print("Hello, Data Analysis with Open Source!")
-> 반복 변수의 값이 쓰이지 않기 때문에 변수의 값을 '언더스코어'로 대체
-> 성능 영향은 없지만 의미적으로 반복 변수가 쓰이지 않음을 나타내기 위함임.
students = [
(20251234, "김철수", "컴퓨터과학", 2, 3.8),
(20265678, "이영희", "생활과학부", 3, 4.2),
(20243456, "박민수", "사회복지학과", 1, 3.5)
]
print("이름과 성적 출력:")
for _ , name, _ , _ , grade in students:
print(f"{name}의 성적: {grade}")
-> 반복문 안에 여러 변수를 넣고 하나의 시퀀스 객체로 받기 때문에 '언패킹'임
-> 또한, '언더스코어'를 통해 사용할 변수에만 값을 넣고 있음
💡 2. 예외처리
[ 예외처리의 이해 ]
┗ 코드 실행 중 예기치 않은 오류가 발생할 경우에 대비하는 기능 필요
┗ 예외 및 예외 처리: try-except 문과 finally 블록 사용
[ try-except 문 ]
┗ 오류가 발생할 가능성이 있는 코드를 블록으로 감싸서 오류 발생 강제 종료 방지
┗ 여러 종류의 예외가 발생할 가능성이 있는 경우:
try:
number = int(input("숫자를 입력하세요: "))
result = 10 / number
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
except ValueError:
print("유효한 숫자를 입력해야 합니다.")
[ finally 블록 ]
┗ 예외 발생 여부와 관계없이 반드시 실행되는 코드 블록
try:
file = open("data.csv", "r") => 직접명시: with 문 사용 x
content = file.read()
print(content)
except FileNotFoundError:
print("파일을 찾을 수 없습니다.")
finally:
print("파일 작업 종료")
file.close() => 직접명시: with 문 사용 x
💡 3. 함수형 프로그래밍
[ 함수형 프로그래밍 목표 ]
┗ 데이터 변경을 최소화
┗ "순수 함수" 활용을 통해 "부작용"을 줄이는 것
- '순수함수': 같은 입력에 대해 항상 같은 출력을 반환하는 함수
- '부작용': 함수가 단순히 값을 계산하는 것 외에 외부에 영향을 미치는 모든 행위
┗ 함수형 프로그래밍 장점: "코드의 가독성 증가", "디버깅 용이", "병렬 처리 효율적 수행"
[ 람다 함수 ]
┗ 이름이 없는 익명 함수: 람다 함수를 의미
- 한 줄의 표현식으로 작성할 수 있는 간결한 함수
- 즉시 사용할 수 있는 간결한 연산을 수행할 때 적합
- '문법형식': 'lambda 매개변수: 표현식'
┗ 람다 함수의 문법적 특징:
- 단 하나의 표현식만 허용
- '표현식의 결과'는 '자동'으로 '함수의 반환값'이 되므로 return 키워드 사용하지 않음
┗ 람다 함수 활용 예시:
<'일반 함수'>
def add(x):
return x + 2
print(add(3))
<'람다 함수'>
add_lambda = lambda x: x + 2
print(add_lambda(3))
<'람다 함수의 활용'>
employees = { "이지혜": 3000000,
"구민준": 5000000,
"방서연": 4100000 }
adjust_salary = lambda salary: salary * 1.1
updated_salaries = {name: adjust_salary(salary) for
name, salary in employees.items()}
-> '딕셔너리 컴프리헨션': {키: 값 for 변수 in 반복할_데이터}
-> '언패킹': for name, salary in employees.items()
--> 딕셔너리를 '언패킹'으로 각 요소의 키값을 넣어줌
-> 람다 함수: 익명 함수를 통해 함수를 값으로 사용이 가능
[ map 함수 ]
┗ "반복 가능한 객체"의 모든 요소에 특정 함수를 적용하여 "새로운 값"을 "생성"하는 함수
┗ 함수 구조: map(함수, 반복할_자료)
┗ 리스트, 튜플과 같은 자료구조의 요소를 변경할 때 유용
temperature_celsius = [25.6, 27.8, 30.5, 22.3, 28.9, 31.2, 24.7]
celsius_to_fahrenheit = lambda c: (c * 9/5) + 32
temperature_fahrenheit =
list(map(celsius_to_fahrenheit, temperature_celsius))
print("섭씨 온도 데이터:", temperature_celsius)
print("화씨 온도로 변환:", temperature_fahrenheit)
-> 함수(celsius_to_fahreheit), 반복할_자료(temperature_celsius)
-> 리스트의 각각 요소인 섭씨 온도 데이터를 새로운 함수를 적용해 값을 생성해 넣고 리스트를 만드는 과정
[ filter 함수 ]
┗ "반복 가능한 객체"의 요소 중 "특정 조건"을 "만족"하는 요소만 남기는 함수(필터링)
┗ 함수 구조: filter(조건_함수, 반복할_자료)
┗ 조건 함수: 반드시 "True 또는 False"를 "반환"해야 하며, True를 반환하는 요소만 컬렉션에 포함시킴
osda_students = [
{"name": "김지원", "score": 85},
{"name": "이민준", "score": 65},
{"name": "박서연", "score": 90},
{"name": "정현우", "score": 55},
{"name": "최예은", "score": 78} ]
passed_students = list(filter(lambda student:
student["score"] >= 70, osda_students))
print("70점 이상 합격한 학생 목록:")
for student in passed_students:
print(f"이름: {student['name']}, 점수:
{student['score']}")
-> '조건 함수': 람다 -> ["score"] >= 70
-> 'filter(조건함수, 반복할객체->osda_students)'
-> osda 리스트에서 70점 이상인 score의 값을 필터링해서 리스트를 만드는 과정임
[ reduce 함수 ]
┗ 반복 가능한 객체의 모든 요소를 누적하여 하나의 값으로 축소하는 함수
┗ 반복문 없이 데이터를 하나의 값으로 집계
┗ functools 모듈에서 제공
from functools import reduce
numbers = [1, 2, 3, 4, 5]
total_sum = reduce(lambda x, y: x + y, numbers)
print(total_sum) => 15
-> (1) 첫 번째와 두 번째 요소를 함수에 적용 후 중간 결과 생성
-> (2) 해당 과정을 마지막 요소까지 반복해 하나의 값을 반환
-> 1 + 2 = 3, 3 + 3 = 6, 6 + 4 = 10, 10 + 5 = 15
-> 결과값 => 15'방송통신대학교 > 📊 오픈소스기반 데이터분석' 카테고리의 다른 글
| [오픈소스기반 데이터분석] 2강 - 데이터 분석을 위한 파이썬 프로그래밍(1) (0) | 2026.09.18 |
|---|---|
| [오픈소스기반 데이터분석] 1강 - 데이터분석과 오픈소스 (0) | 2026.09.17 |
