[오픈소스기반 데이터분석] 3강 - 데이터 분석을 위한 파이썬 프로그래밍(2)

2026. 9. 25. 20:49·방송통신대학교/📊 오픈소스기반 데이터분석

📌 개요

🔑 학습 키워드

┗  파이썬 문법요소: 언패킹, 언더스코어, 예외처리

┗  함수형 프로그래밍: 람다 표현식, 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
'방송통신대학교/📊 오픈소스기반 데이터분석' 카테고리의 다른 글
  • [오픈소스기반 데이터분석] 2강 - 데이터 분석을 위한 파이썬 프로그래밍(1)
  • [오픈소스기반 데이터분석] 1강 - 데이터분석과 오픈소스
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • 전체
    오늘
    어제
    • 전체보기 (249) N
      • 방송통신대학교 (103) N
        • 📝 프로그래밍 언어론 (13)
        • 📊 오픈소스기반 데이터분석 (3) N
        • ⚙️ 컴퓨터의 이해 (11)
        • 💻 컴퓨터과학 개론 (15)
        • 🔢 자료구조 (14)
        • 🧬 알고리즘 (10)
        • ⚙️ 운영체제 (14)
        • 🕸️ 이산수학 (11)
        • 🌍 유비쿼터스 컴퓨팅 (11)
        • 🖥️ 컴퓨터과학과 (1)
      • 공부 (72)
        • 📚백엔드 공부 (6)
        • ☕Java (23)
        • 🌳Spring (13)
        • ⚙️C (12)
        • ⚡Python (15)
        • JavaScript (1)
        • 🛢️Database (0)
        • Algorithm Problem Solving (2)
      • 네트워크 (7)
        • 📜HTTP (7)
      • 스파르타코딩클럽 (64)
      • 정보 (2)
      • 정리가 필요한 글 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    방송대
    자바
    spring
    파이썬
    방송통신대학교
    프로그래밍 언어론
    배열
    컴퓨터과학 개론
    C언어
    방통대
    함수
    자료구조
    컴퓨터과학과
    Python
    이산수학
    알고리즘
    컴퓨터의 이해
    운영체제
    Java
    그래프
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
junbin2
[오픈소스기반 데이터분석] 3강 - 데이터 분석을 위한 파이썬 프로그래밍(2)
상단으로

티스토리툴바