이 시리즈는 파이썬을 한 번도 다뤄본 적 없는 분이 데이터를 직접 다루는 작은 프로그램을 이해하고 완성하는 것을 목표로 합니다. 남이 짜 둔 코드를 그대로 복사해 붙여넣는 데서 끝내지 않고, 코드가 어떤 구조로 동작하는지 파악해 필요에 맞게 스스로 수정하고 확장하는 힘을 기르는 것이 핵심입니다.
4주간의 여정은 다음과 같습니다. 1주차 파이썬 기초 체력 다지기, 2주차 데이터 처리와 LLM API 연동, 3주차 RAG 검색 구조 이해, 4주차 SQL과 LLM 기반 에이전트 구축입니다. 파이썬을 전혀 몰라도 괜찮습니다. 이 글의 모든 코드 예제는 브라우저에서 바로 실행됩니다. 코드를 읽고, 숫자를 바꿔보고, 실행 버튼을 누르며 데이터가 어떻게 처리되는지 직접 확인해 보세요.
파이썬 코드를 읽고, 고치고, 돌려보는 감을 잡습니다. 간단한 지출·예산 계산을 파이썬으로 직접 수행해 봅니다.
이번 주 계획
평일에는 하루 1~1.5시간, 주말에는 2~3시간을 투자합니다. 개념을 읽고 위젯을 실행하는 데 집중해 보세요.
| 요일 | 학습 내용 | 시간 |
|---|---|---|
| 월 | 파이썬 실행 환경 이해, 변수와 자료형 | 1~1.5h |
| 화 | 리스트: 여러 개의 값(지출 금액 등) 묶기 | 1~1.5h |
| 수 | 딕셔너리: 하나의 항목을 여러 속성으로 표현 | 1~1.5h |
| 목 | 반복문(for)과 조건문(if): 여러 항목 검토 및 조건별 처리 | 1~1.5h |
| 금 | 함수(def)와 모듈(import): 계산 로직 재사용 | 1~1.5h |
| 토 | 에러 메시지 읽는 법, JSON 데이터 파싱 | 2~3h |
| 일 | 주말 미니프로젝트 완성 및 복습 | 2~3h |
딕셔너리, for, if를 활용해 간단한 예산 여유(저축률)를 계산하는 위젯을 실행해 봅니다. 함수를 하나 만들어 보고, 에러 메시지의 마지막 줄을 읽는 법을 익혀 보세요.
변수와 자료형
변수는 데이터를 담는 그릇입니다. 파이썬은 정수(int), 실수(float), 문자열(str), 불리언(bool) 등 데이터의 성격에 따라 자료형을 자동으로 인식합니다. 어떤 지출 항목의 금액과 이름을 변수에 담아 출력해 봅니다.
item_name = "점심 식비"
amount = 8500.0
is_fixed = False
print(f"항목명: {item_name}")
print(f"금액: {amount}, 고정지출여부: {is_fixed}")
print(f"금액 자료형: {type(amount)}")
리스트
여러 개의 데이터를 순서대로 묶을 때 리스트를 사용합니다. 대괄호 []로 감싸며, 하루 동안 쓴 여러 개의 지출 금액을 하나의 리스트로 관리할 수 있습니다. sum()으로 합계를, len()으로 개수를 구하고 append()로 새 항목을 추가합니다.
expenses = [8500.0, 3200.0, 1500.0]
expenses.append(4800.0)
total_spent = sum(expenses)
item_count = len(expenses)
print(f"총 지출 건수: {item_count}")
print(f"총 지출: {total_spent}")
딕셔너리
딕셔너리는 키(Key)와 값(Value)의 쌍으로 데이터를 저장합니다. 이름, 예산, 지출액, 관련 태그 등 서로 다른 성격의 정보를 하나의 항목으로 묶어 표현할 때 유용합니다. 중괄호 {}를 사용하며, 키를 통해 값에 접근하거나 수정합니다.
expense = {
"name": "주간 장보기",
"budget": 120000,
"spent": 80000,
"tags": ["식료품", "생필품"]
}
expense["spent"] = 75000
expense["save_target"] = 0.2
print(f"항목: {expense['name']}")
print(f"수정된 지출: {expense['spent']}")
for와 if
for 반복문은 리스트나 딕셔너리 묶음을 순회하며 동일한 작업을 수행합니다. if 조건문은 특정 조건을 만족할 때만 코드를 실행합니다. 여러 지출 항목의 예산 여유율(예산 대비 남은 비율)을 계산하고, 목표치에 미달하는 경우 경고를 출력하는 로직을 작성해 봅니다.
categories = [
{"name": "식비", "budget": 400000, "spent": 350000},
{"name": "교통비", "budget": 100000, "spent": 60000}
]
for c in categories:
save_rate = (c["budget"] - c["spent"]) / c["budget"]
if save_rate < 0.2:
print(f"[경고] {c['name']} 예산 여유 부족: {save_rate:.2f}")
else:
print(f"[여유] {c['name']} 예산 여유율: {save_rate:.2f}")
함수(def)
자주 사용하는 계산 로직은 함수로 묶어 재사용합니다. def 키워드로 함수를 정의하고, 인자를 받아 결과를 반환(return)합니다. 값들의 목록을 받아 총합(총지출)을 계산하는 함수와 저축률을 계산하는 함수를 만들어 봅니다.
def calc_total_spent(items):
return sum(items)
def calc_save_rate(budget, spent):
return (budget - spent) / budget
items = [100, 50, 20]
total = calc_total_spent(items)
save_rate = calc_save_rate(500, total)
print(f"총지출: {total}")
print(f"저축률: {save_rate:.2f}")
모듈과 import
파이썬은 다양한 기능을 미리 만들어 둔 모듈을 제공합니다. import 명령어로 모듈을 불러와 사용합니다. statistics 모듈로 평균을 계산하고, json 모듈로 딕셔너리를 문자열로 변환해 봅니다.
import statistics
import json
amounts = [100, 150, 120]
avg_amount = statistics.mean(amounts)
data = {"category": "식비", "avg_amount": avg_amount}
json_str = json.dumps(data)
print(f"평균 지출: {avg_amount}")
print(f"JSON 문자열: {json_str}")
파일과 JSON 읽기
외부 시스템과 데이터를 주고받을 때는 JSON 형식을 주로 사용합니다. json.loads()는 JSON 형식의 문자열을 파이썬 딕셔너리로 변환합니다.
import json
raw_data = '{"name": "카페 커피", "amount": 4500, "category": "여가"}'
parsed = json.loads(raw_data)
print(f"항목명: {parsed['name']}")
print(f"금액: {parsed['amount']}")
실제 파일 읽기
실제 컴퓨터에 저장된 파일을 읽을 때는 open("파일경로", "r")을 사용합니다. 파일 객체를 연 후 .read()로 내용을 문자열로 가져오고, 반드시 .close()로 닫아야 합니다. with open(...) as f: 구문을 쓰면 파일을 자동으로 닫아 줍니다.
에러 읽는 법
Traceback은 마지막 줄부터 읽는다
파이썬에서 에러가 발생하면 Traceback이라는 긴 오류 메시지가 출력됩니다. 당황하지 말고 맨 마지막 줄을 확인하세요. 에러의 종류와 원인이 거기에 적혀 있습니다.
| 에러 종류 | 의미 |
|---|---|
| NameError | 정의하지 않은 변수나 함수 이름을 사용함 |
| KeyError | 딕셔너리에 존재하지 않는 키를 호출함 |
| TypeError | 데이터 유형이 맞지 않음 (예: 문자열과 정수 덧셈) |
| IndentationError | 들여쓰기(공백) 규칙을 지키지 않음 |
try-except 구문을 사용하면 에러가 발생했을 때 프로그램이 강제 종료되는 것을 막고 대체 로직을 실행할 수 있습니다.
expense = {"name": "버스 요금", "amount": 1500}
try:
budget = expense["budget"]
except KeyError as e:
print(f"에러 발생: {e} 키가 딕셔너리에 없습니다.")
budget = 0
print(f"최종 예산: {budget}")
엑셀 파일에 담긴 데이터를 본격적으로 다루려면 pandas 패키지가 필요합니다. 브라우저 위젯에서는 무거운 패키지를 실행할 수 없으므로, 집 PC에 파이썬을 설치한 후 아래 코드를 실습해 보세요.
import pandas as pd
df = pd.read_excel("household_budget.xlsx")
total_spent = df["금액"].sum()
print(f"총 지출 합계: {total_spent}")주말 미니프로젝트 — 지출 합계·저축률 계산기
이번 주에 배운 리스트, 딕셔너리, 함수, 반복문, 조건문을 모두 결합합니다. 한 달 예산 정보와 지출 항목 목록을 정의하고, 총지출을 계산한 뒤 목표 저축률 달성 여부를 판정하는 프로그램입니다.
def get_total_spent(items):
return sum(item["amount"] * item["count"] for item in items)
budget_plan = {
"name": "10월 가계부", "budget": 800,
"items": [
{"item": "카페", "amount": 50, "count": 2},
{"item": "간식", "amount": 10, "count": 5}
]
}
spent = get_total_spent(budget_plan["items"])
save_rate = (budget_plan["budget"] - spent) / budget_plan["budget"]
status = "달성" if save_rate >= 0.2 else "미달"
print(f"[{budget_plan['name']}] 지출: {spent}, 저축률: {save_rate:.2f} ({status})")
위젯의 코드를 직접 수정해 보세요. budget_plan 딕셔너리 안의 예산(budget)이나 지출 항목의 금액(amount)을 변경한 후 다시 [실행] 버튼을 눌러 결과가 어떻게 변하는지 확인해 봅니다.
자가 체크리스트
- 변수에 지출 금액(실수)과 항목명(문자열)을 할당하고 출력할 수 있다.
- 여러 지출 금액을 리스트로 만들고,
sum()으로 총합을 구할 수 있다. - 딕셔너리를 사용해 지출 항목 하나를 표현하고, 특정 키의 값을 수정할 수 있다.
for문으로 지출 항목 리스트를 순회하며if문으로 예산 여유율 조건을 검사할 수 있다.- 지출 합계 계산 로직을
def로 함수화하고 인자를 전달해 결과를 반환받을 수 있다. - 에러 메시지(Traceback)가 떴을 때 마지막 줄을 보고 KeyError 등 원인을 파악할 수 있다.
json.loads()를 사용해 문자열 형태의 데이터를 딕셔너리로 변환할 수 있다.
실제 업무에서 쓰는 데이터 처리 프로그램도 결국 오늘 배운 기초의 조합입니다. 예를 들어 엑셀이나 텍스트로 된 입력 데이터를 파싱해 각 항목을 딕셔너리에 담고, 여러 개의 처리 단계(함수)를 순서대로 호출하는 파이프라인으로 구성됩니다. 오늘 배운 딕셔너리, 리스트, 함수의 조합이 바로 그 구조의 기초가 됩니다. 나중에 이런 코드를 직접 수정하거나 기능을 추가할 때 마주칠 에러 메시지를 읽는 법도 반드시 필요합니다.
부록 · 파이썬 치트시트
# 변수와 자료형
amount = 100 (int), rate = 0.2 (float), name = "식비" (str), is_ok = True (bool)
# 리스트
items = [10, 20, 30] / items.append(40) / sum(items) / len(items) / items[0]
# 딕셔너리
exp = {"name": "식비", "spent": 100} / exp["spent"] / exp["budget"] = 150
# for와 if
for e in expenses:
if e["spent"] > 100:
print("High")
# 함수
def calc(a, b):
return a + b
# JSON
import json / json.dumps(dict) → 문자열 / json.loads(str) → 딕셔너리
# f-string (문자열 포맷팅)
f"지출: {spent}, 저축률: {rate:.2f}"
# 주요 에러 4종
NameError(변수오타), KeyError(없는키), TypeError(타입불일치), IndentationError(들여쓰기)
이번 주 용어
| 용어 | 설명 |
|---|---|
| 변수(Variable) | 데이터를 저장하고 참조하기 위한 이름 |
| 자료형(Data Type) | 데이터의 종류 (정수, 실수, 문자열 등) |
| 리스트(List) | 순서가 있는 데이터의 묶음 |
| 딕셔너리(Dictionary) | 키와 값의 쌍으로 이루어진 데이터 구조 |
| 함수(Function) | 특정 작업을 수행하는 재사용 가능한 코드 블록 |
| 인자/반환값 | 함수에 넘겨주는 입력값(인자)과 함수가 돌려주는 결과(반환값) |
| 모듈(Module) | 파이썬 코드를 모아둔 파일, 재사용을 목적으로 함 |
| import | 외부 모듈이나 패키지를 현재 코드에서 사용하도록 불러오는 명령어 |
| 반복문(Loop) | 특정 조건이 만족될 때까지 코드를 반복 실행하는 구문 (for, while) |
| 예외(Exception) | 프로그램 실행 중 발생하는 오류, try-except로 처리 가능 |
| 인터프리터 | 파이썬 코드를 한 줄씩 읽고 실행하는 프로그램 |
| 표준 라이브러리 | 파이썬 설치 시 기본으로 제공되는 모듈 모음 (json, math 등) |
다음 주(2주차)에는 데이터 다루기 심화 과정으로 들어갑니다. 중첩된 딕셔너리와 JSON 구조를 자유롭게 다루고, 실제 엑셀 파일을 읽어오는 방법을 배웁니다. 또한 LLM(대규모 언어 모델)을 API로 호출해 텍스트 데이터를 처리하는 기초를 익힙니다.