
001
오늘의 키워드: 프로그래밍 기초 마무리...?
파이썬의 기본적인 내용들은 저번주에 다 배웠던 것 같다. 오늘은 앞으로 프로젝트를 하며 쓰게 될 수도 있는 추가적인 문법들과, 만나게 될지도 모르는(이미 만나기도 했던...) 에러들의 대처법 등등을 배웠다.
라이브 세션과 VOD 강의를 연달아 들으면서 데코레이터니 람다니 하는 낯선 개념들이 휘몰아치는데 😵 배운 내용들에 겨우 익숙해질 차에 새로운 내용들이 들어오니 좀 어질어질~... 공부라는 걸 너무 오랜만에 해서 그래요...
그래도 일단은 이 내용들을 하나하나 다 외워서 직접 칠 정도가 될 필요는 없다고 하시니까, 너무 쫄지 말고 천천히 눈에 익혀봐야겠다는 생각으로 보자.
002
오늘 배운 내용
[라이브 세션] : 허진성 튜터님 Python 실력 쑥쑥 심화 세 2회차
1. try / except
코드 실행 중에 에러가 발생해도 프로그램이 끊기지 않고 계속 흘러가도록 예외로 처리하는 함수
except 뒤에 에러 종류(ValueError, IndexError 등등)를 명시하면 해당 에러가 날 때만 처리할 수도 있다.
# 로그 데이터에서 에러 코드가 숫자가 아닐 때 예외 처리하는 함수
def clean_error_code(code_str):
try:
return int(code_str)
except ValueError:
print(f"[경고] 유효하지 않은 에러 코드 형식: '{code_str}'")
return 9999 # 예외 발생 시 디폴트 코드로 반환
print(clean_error_code("404")) # 출력: 404
print(clean_error_code("ERR_01")) # 출력: [경고] 유효하지 않은 에러 코드 형식: 'ERR_01' -> 9999
2. 리스트 컴프리헨션
for문 + 조건문으로 리스트 만드는 걸 한 줄로 압축하는 문법
코드가 훨씬 짧아진다.
# [표현식 for 항목 in iterable if 조건]
# 정상 수치 목록에서 높은 수치만 걸러내기
wbc_list = [6000, 11500, 8200, 13000, 7400]
high_wbc = [v for v in wbc_list if v > 10000]
print(high_wbc) # 출력: [11500, 13000]
근데 나는 아직 이렇게 fancy하게 코드를 짤 정도로 숙련되진 않아서... 그냥 풀어서 쓰게 됨...
3. 딕셔너리 컴프리헨션
중괄호 {} 사용, 결과물이 리스트가 아닌 Key-Value 쌍을 가진 딕셔너리 형태로 나옴
# {키: 값 for 항목 in 이터러블}
items = ["WBC", "RBC", "HGB", "PLT"]
status = {item: "정상" for item in items}
print(status)
# {'WBC': '정상', 'RBC': '정상', 'HGB': '정상', 'PLT': '정상'}
4. map() & filter()
람다랑 세트로 자주 쓰이는 내장 함수. 둘 다 결과가 바로 리스트가 아니라 이터레이터로 반환되어서 list()로 감싸줘야 한다.
- map() : iterable의 각 요소에 함수를 적용. 컨베이어 벨트처럼 전체를 같은 처리 과정에 태운다.
- filter() : 조건이 True인 요소만 남긴다. 품질 검사대처럼 기준 미달은 걸러낸다.
이 함수를 이용해서 코드를 직접 짤 수 있을 정도로 공부는 안 해도 되고, 남의 코드에서 봤을 때 읽을 수 있을 정도로만 공부!
# map — 장비 온도 리스트 전체에 문자열 단위(°C) 붙이기
temp_records = [22.5, 19.8, 31.2, 25.0]
formatted_temps = list(map(lambda t: f"{t}°C", temp_records))
print(formatted_temps)
# 출력: ['22.5°C', '19.8°C', '31.2°C', '25.0°C']
# filter — 불량률 임계치(5.0)를 초과한 위험 수치만 걸러내기
defect_rates = [1.2, 5.8, 3.4, 8.1, 0.5]
danger_rates = list(filter(lambda d: d > 5.0, defect_rates))
print(danger_rates) # 출력: [5.8, 8.1]
5. 파일 입출력 기본
프로그램이 종료되면 메모리(RAM)의 내용은 사라짐. 데이터를 유지하려면 파일로 저장해야 한다.
with open()을 쓰면 파일을 자동으로 닫아줘서 안전하다.
문법 다 외울 필요 없고, 필요할 때 찾아서 복붙하면 된다.
# 쓰기
with open("result.txt", "w", encoding="utf-8") as f:
f.write("WBC: 8500\n")
f.write("판정: 정상\n")
# 읽기
with open("result.txt", "r", encoding="utf-8") as f:
content = f.read()
print(content)
▼ 파일 모드 정리
| "r" | 읽기 (기본값) |
| "w" | 쓰기 (기존 내용 삭제) |
| "a" | 추가 (기존 내용 뒤에 이어쓰기) |
| "b" | 바이너리 모드 (이미지, 엑셀 등) |
한글 데이터를 다룰 때는 인코딩 옵션에 encoding="utf-8"을 필수로 넣어 주어야 글자가 깨지지 않는다.
6. 데이터 형태 분류
| 정형 | 행/열로 구성된 표 | .csv, .xlsx |
| 반정형 | 키-값 쌍. 구조 있지만 표는 아님 | .json, .xml |
| 비정형 | 구조 없음 | .mp3, .mp4, .jpg |
반정형 데이터는 전처리를 통해 정형 데이터로 변환해야 분석할 수 있다.
JSON은 딕셔너리/리스트 구조와 동일해서 파이썬이랑 궁합이 잘 맞는다.
[VOD 강의] 데이터 분석 파이썬 종합반 5주차 수강 완료
1. 파일 확장자별 불러오기 & 저장하기
pandas를 쓰면 확장자에 따라 함수만 바꿔서 동일한 방식으로 불러오기/저장하기 가능
| 확장자 | 불러오기 | 저장하기 |
| .csv | pd.read_csv() | df.to_csv() |
| .xlsx | pd.read_excel() | df.to_excel() |
| .json | pd.read_json() | json.dump() |
| .txt | pd.read_csv(delimiter='\t') | open() + write() |
구글 코랩에서 내 파일을 쓰려면 드라이브 마운트를 먼저 해야 한다!
(코랩은 로그아웃하면 마운트가 초기화돼서 실행할 때마다 다시 해줘야 함)
from google.colab import drive
drive.mount('/content/drive') # 세션 바뀔 때마다 다시 쳐야 함
import pandas as pd
# 경로 조합해서 불량 데이터 엑셀 파일 로드
data_path = "/content/drive/MyDrive/project/file.xlsx"
df_logs = pd.read_excel(data_path)
2. 주요 파이썬 패키지 정리
필요한 패키지는 코드 맨 위에 한꺼번에 불러오는 게 좋다! (그래야 사용한 라이브러리가 한눈에 보이니까)
| pandas | 데이터 조작, 분석. 데이터프레임 다룰 때 핵심 |
| numpy | 수치 계산, 다차원 배열, 행렬 연산 |
| matplotlib | 데이터 시각화. 그래프/플롯 생성 |
| seaborn | matplotlib 기반 통계 시각화. 더 예쁘게 시각화 가능 |
| scikit-learn | 머신러닝 (분류, 회귀, 군집화 등) |
| statsmodels | 통계 분석 (회귀, 시계열 등) |
| scipy | 과학기술 수학 연산 |
| tensorflow | 딥러닝. 구글 개발. 기업에서 많이 씀 |
| pytorch | 딥러닝. Facebook 개발. 연구실에서 많이 씀 |
3. 포맷팅
문자열과 변수를 함께 출력할 때 사용
세 가지 방식이 있는데 요즘은 f-string을 많이 쓴다. (이전 TIL에 방법 작성함)
4. 람다 함수
이름 없는 익명 함수. 한 줄짜리 간단한 연산에 쓴다.
filter(), map() 같은 함수랑 조합할 때 자주 등장하는데, 복잡한 로직은 그냥 def로 짜는 게 편함 (어려워...........)
# 장비 압력 수치가 임계치 내에 있는지 확인하는 익명 함수
check_pressure = lambda p: 10 <= p <= 30
print(check_pressure(25)) # 출력: True
# 가동 중인 장비 압력 리스트에서 정상 압력만 걸러내기
all_pressures = [8, 15, 32, 24, 11, 40]
normal_pressures = list(filter(lambda p: 10 <= p <= 30, all_pressures))
print(normal_pressures) # 출력: [15, 24, 11]
5. glob & os — 파일 찾기·관리
- glob: 특정 규칙이나 확장자 패턴(예: *.csv)을 가진 파일들을 시스템에서 긁어모을 때 사용
- os: 현재 작업 경로를 확인하거나 디렉토리를 생성/수정하는 등 운영체제 기본 기능을 조작할 때 사용
import glob
import os
# 특정 확장자 파일 목록 가져오기
csv_files = glob.glob('/data/*.csv')
# 현재 경로 확인
print(os.getcwd())
# 파일 경로에서 파일명만 추출
file_path = "/content/drive/MyDrive/검사결과.xlsx"
directory, filename = file_path.rsplit('/', 1)
print(filename) # 검사결과.xlsx
6. 클래스 (Class)
함수가 많아지면 관리가 힘들어지는데... 이때 사용하는 게 클래스!
관련된 데이터(속성)와 함수(메서드)를 하나로 묶는 설계도? 라고 이해하면 될 듯
프로젝트 규모가 커지고 관리할 대상이 많아지면 필요하겠지만 지금 당장은 완벽하게 이해할 필요는 없으니까 구조만 파악해둡시다 (이해하려고 해도 어려워서 못한다 😅)
class Equipment:
def __init__(self, eq_name, run_hour): # 객체 초기화 세팅
self.eq_name = eq_name
self.run_hour = run_hour
def check_maintenance(self): # 정비 대상 판정 메서드
if self.run_hour >= 1000:
return "정비 필요"
return "가동 가능"
# 클래스로 장비 객체 찍어내기
pump_01 = Equipment("메인 펌프", 1250)
print(f"{pump_01.eq_name} 상태: {pump_01.check_maintenance()}") # 출력: 메인 펌프 상태: 정비 필요
7. 불리언 인덱싱
조건을 만족하는 요소만 골라내는 방식. numpy에서도 쓰고, pandas에서 데이터 필터링할 때 특히 많이 쓴다.
import numpy as np
values = np.array([3200, 8500, 11000, 6700, 500])
# 조건으로 바로 필터링
normal = values[(values >= 4000) & (values <= 10000)]
print(normal) # [8500 6700]
8. 데코레이터
기존 함수를 직접 수정하지 않고도 함수 외부에 간단한 명령어 (@데코레이터명)를 작성해서 기능을 확장하거나 수정할 수 있게 도와준다. (함수를 통째로 다른 함수로 감싸서 알맹이 앞뒤로 추가 작업을 붙여주는 역할)
# 데코레이터 기본 정의
def log_decorator(func):
def wrapper():
print("[로그] 작업 시작 시간 기록")
func() # 원본 함수 실행
print("[로그] 작업 종료 시간 기록")
return wrapper
# 데코레이터 적용
@log_decorator
def run_test_case():
print("-> QA 테스트 케이스 실행 중...")
run_test_case()
9. 파이썬 에러 읽는 법
▼에러 종류 정리
| SyntaxError | 문법 오류. |
| IndentationError | 들여쓰기 불일치 |
| NameError | 정의되지 않은 변수나 함수 사용 |
| TypeError | 자료형 불일치 (예: 문자열 + 정수) |
| IndexError | 존재하지 않는 인덱스 접근 |
| KeyError | 딕셔너리에 없는 키 접근 |
| FileNotFoundError | 파일 경로 오류 또는 파일 없음 |
예시에도 없는 듣도 보도 못한 에러가 떴다면...?
고민하는 시간도 아까우니까 에러 메시지를 구글링해보자~
만약 검색했는데도 아무것도 안 나온다면...
코드를 하나씩 뜯어보거나,
최후의 보루인 튜터님 찬스를 쓰러 가자...^^
[아티클 스터디]
- 주제 : 양질의 데이터를 판단하는 방법
- 아티클 링크 : 양질의 데이터를 판별하는 5가지 방법 : ② 믿을 수 있는 데이터인가?
- 요약 :
데이터 신뢰성이란 데이터가 실제 정보를 얼마나 정확하게 담고 있는가에 관한 개념이다.
신뢰성 있는 데이터를 판별하려면
- 데이터 오류와 결측 데이터(오류는 자동으로 잡아내기 어려움 / 결측 데이터는 삭제하거나 대체값으로 처리할 수 있지만 완전한 해결책은 X)
- 데이터 가공 정도(원천 데이터는 사람의 손이 덜 탄 만큼 오류가 적음. 그러나 가공 데이터가 무조건 낮은 품질인 것도 아님.)
두 가지를 봐야 한다.
중요한 것은 원천 데이터(데이터의 신뢰성)와 가공 데이터(데이터의 활용성) 사이의 균형을 잘 잡는 것이며, 허용 가능한 오류 수준을 먼저 정한 뒤 데이터를 선택해야 한다.
- 주요 포인트 :
- 데이터 오류는 자동 탐지가 어렵기 때문에 분석 초기에 수집 방법과 데이터 내용을 꼼꼼히 확인하는 과정이 선행되어야 한다.
- 결측 데이터는 단순 누락일 수도 있지만 그 자체에 의미가 있는 경우도 있어, 무조건 대체하거나 삭제하면 분석 결과가 왜곡될 수 있다.
- 빅데이터 분석 시에는 결측 데이터가 없거나 최소한인 데이터를 처음부터 선택하는 것이 신뢰성을 확보하는 현실적인 방법이다.
- 원천 데이터라고 해서 오류가 전혀 없는 것은 아니며, 수집 당시 발생한 오류와 이후 조작 과정에서 생기는 오류가 존재할 수 있다.
- 가공 데이터는 신뢰성이 낮아질 수 있지만, 가공 자체가 문제가 아니라 신뢰성과 활용성 간의 균형을 얼마나 잘 잡는가가 중요하다.
003
오늘의 시행착오
*** 과제 스포 주의 ***
레벨 3 문제 풀다가, 줄글로 된 코드만 쭈욱 써내려가니 이게 맞나...?? 싶어서
튜터님께서 라이브세션 때 알려주신 코드 시각화 사이트를 이용해보았다

코드의 작동 단계를 하나하나씩 순서대로 볼 수 있음 👍
004
내일 학습할 것
- 과제 다시 풀어보기
- 프로그래밍 기초 내용 처음부터 끝까지 복습


'Today I Learned' 카테고리의 다른 글
| [내일배움캠프 QA/QC 트랙 6기 본캠프] TIL #013 데이터 분석 입문! (0) | 2026.05.28 |
|---|---|
| [내일배움캠프 QA/QC 트랙 6기 본캠프] TIL #012 (0) | 2026.05.27 |
| [내일배움캠프 QA/QC 트랙 6기 본캠프] TIL #010 — 🔙🔙🔙 (1) | 2026.05.22 |
| [내일배움캠프 QA/QC 트랙 6기 본캠프] TIL #009 — 함수 (0) | 2026.05.21 |
| [내일배움캠프 QA/QC 트랙 6기 본캠프] TIL #008 — 🤯 (0) | 2026.05.20 |