2019년 파이썬 수업(PyCharm 기반) 실습 코드에서 출발해, 끊긴 뒤를 이어 붙인 파이썬 자료입니다. 출력문에서 시작해 문법 전반을 거쳐 NumPy·pandas 분석과 matplotlib 시각화까지 한 바퀴 돕니다.
저장소 이름에 관해
python_da는 "python data analysis"에서 온 이름이고 원래 README도 "파이썬 데이터 분석" 한 줄이었습니다. 하지만 원본 수업은 조건문(step03)에서 멈췄고, 데이터 분석은커녕 반복문조차 없었습니다.step04이후는 그 빈 곳을 채우려고 새로 작성한 챕터입니다. 이제 저장소 이름값을 합니다.
step01~step09 는 설치가 필요 없습니다. 파이썬만 있으면 그대로 실행됩니다.
step10 부터 NumPy·pandas·matplotlib을 씁니다.
python3 -m venv .venv
source .venv/bin/activate # 윈도우: .venv\Scripts\activate
pip install -r requirements.txt폴더 이름의 step 번호가 그대로 학습 순서입니다. test/ 만 예외입니다.
| 순서 | 폴더 | 무엇을 배우나 | 출처 |
|---|---|---|---|
| 1 | step01_base |
print, 주석, 변수와 자료형, % 문자열 포매팅 |
원본 수업 |
| 2 | step02_operator |
아스키 코드, 형변환, input() 으로 값 받기 |
원본 수업 |
| 3 | step03_controlstmt |
if / 중첩 if / 3항 연산자, dict 로 switch 흉내, random, sys.argv |
원본 수업 |
| 4 | step04_loop |
for / while / range / break·continue / 중첩 반복 |
신규 |
| 5 | step05_datastructure |
리스트 · 튜플 · 딕셔너리 · 집합 / 슬라이싱 / 컴프리헨션 | 신규 |
| 6 | step06_function |
def·return / 기본값·키워드 인자 / *args / 스코프 / 람다 |
신규 |
| 7 | step07_class |
클래스 · 상속 · 매직 메서드 / test/class_ex_01.py 를 고친 정본 |
신규 |
| 8 | step08_file |
파일 입출력 / try~except / CSV 읽고 집계해 저장 |
신규 |
| 9 | step09_module |
모듈·패키지 / import / 표준 라이브러리 |
신규 |
| 10 | step10_numpy |
ndarray / 벡터 연산 / 불리언 인덱싱 / axis |
신규 |
| 11 | step11_pandas |
DataFrame / 정제 / groupby / merge / 시계열 |
신규 |
| 12 | step12_visualization |
matplotlib / 한글 폰트 / 그래프 종류 / 강조 / 대시보드 |
신규 |
| 부록 | test/ |
step 체계에 편입되지 않은 습작 | 원본 수업 |
step09 와 step10 사이가 경계선입니다. 앞은 파이썬 문법, 뒤는 데이터 분석 도구이고 설치가 필요해집니다.
출처 열이 중요합니다.
- 원본 수업 — 2019년 수업 기록 그대로입니다. 결함이 있어도 고치지 않고 문서에 남겨 연습 과제로 돌렸습니다. 코드 스타일도 그때 그대로(
%포매팅,print(a, b))입니다. - 신규 — 끊긴 부분을 채우려고 새로 쓴 것입니다. 현행 파이썬 스타일(f-string, 타입 힌트, PEP 8 이름 규칙)로 작성했습니다.
ifEX1.py 는 원래 저장소 맨 위에 있던 13줄짜리 습작이었습니다. 이름이 step03_controlstmt/ifex/ifEx1.py 와 대소문자만 다른데 내용은 전혀 달라 혼동을 주므로, 내용은 그대로 두고 step03_controlstmt/ifex/ifEx0_scratch.py 로 옮겼습니다.
각 챕터는 앞에서 배운 것을 되짚습니다. 순서대로 읽으면 이런 실이 이어집니다.
step02"읽어온 데이터는 모두 문자열" →step08CSV 값을int()로 바꿔야 하는 이유step03dict.get(x, 9)로 switch 흉내 →step05딕셔너리의 표준 사용법 →step07그 패턴이 낳은 버그step05복사의 함정 (b = a) →step06함수 인자로 리스트를 넘길 때 →step07self.를 빠뜨렸을 때step05·step08에서 손으로 짠 개수 세기·그룹 묶기 →step09Counter·defaultdict→step11groupby()step08csv.DictReader로 한 줄씩 읽기 →step11read_csv()한 줄step10불리언 인덱싱(&·|·괄호) →step11DataFrame 조건 필터, 문법이 그대로step09모듈로 빼서 재사용 →step12krfont.py로 한글 폰트 설정을 한 곳에step11groupby·pivot_table결과 →step12그대로.plot()에 넘김
python3 --version # 3.x 면 충분합니다
python3 step01_base/helloPython.pystep09 까지는 설치 없이 그대로 실행됩니다. step10 이후는 위 설치 절을 먼저 보세요.
파일을 하나씩 열어 읽고 실행하는 방식입니다. 프로젝트로 묶여 있지 않으므로 어느 파일부터 실행해도 됩니다.
키보드 입력이 필요한 파일이 있습니다. 실행하면 프롬프트가 뜨니 값을 입력하세요.
step02_operator/inputTest1.py,inputTest2.pystep03_controlstmt/inputex/inputTest3.py,inputTest4.pystep03_controlstmt/ifex/ifEx4.pystep07_class/calculator.py(종료는q)test/class_ex_01.py
명령행 인자가 필요한 파일도 있습니다.
python3 step03_controlstmt/inputex/argvEx.py 10 20 30인자 없이 실행하면 IndexError 가 납니다. 버그가 아니라 그 파일이 인자를 요구하는 것입니다.
step08·step09·step11 은 그 폴더 안에서 실행하세요. 데이터 파일을 상대 경로로 찾기 때문입니다.
cd step08_file && python3 csvEx1.py
cd step09_module && python3 test1.py
cd step11_pandas && python3 test1.py
cd step12_visualization && python3 test1.pystep12 는 그래프를 output/ 에 PNG로 저장합니다. 창을 띄우려면 각 파일 위쪽의 SHOW = False 를 True 로 바꾸세요.
이 코드는 Python 3.6 환경에서 작성됐습니다. 그대로 실행해도 대부분 동작하지만, 지금은 더 나은 방법이 생긴 것들이 있습니다. 각 챕터 README의 "지금은 이렇게 바뀌었습니다" 절에서 다룹니다.
| 주제 | 이 저장소 | 지금 |
|---|---|---|
| 문자열 포매팅 | '%s' % name, '{0}'.format(x) |
f-string f'{name}' |
| switch 흉내 | dict.get() (step03) |
match 문 (Python 3.10+) |
| 문자열 안 백슬래시 | 그냥 \ |
이스케이프하거나 raw string — 3.12부터 SyntaxWarning, 앞으로 에러 |
%포매팅과 문자열 연결은 일부러 가르치는 내용이라 f-string으로 바꾸지 않았습니다. 바꾸면 그 수업이 사라집니다.
고치지 않고 남겨 두었습니다. 무엇이 왜 잘못됐는지 아는 것 자체가 학습이고, 각 챕터 README에 연습 과제로 정리했습니다.
| 위치 | 문제 | 고친 버전 |
|---|---|---|
test/class_ex_01.py |
dict 리터럴이 호출할 때마다 4개 연산을 전부 실행합니다. 덧셈을 요청해도 div() 가 돌아, 두 번째 값이 0 이면 엉뚱하게 "숫자를 입력하세요"가 나옵니다 |
step07_class/calculator.py |
step03_controlstmt/ifex/ifEx3.py |
if a>0 / elif a<=0 / else 에서 else 에 도달할 수 없습니다. 0 은 a<=0 이 먼저 잡습니다 |
연습 과제 |
step03_controlstmt/ifex/ifEx4.py |
같은 판정을 두 가지 방식으로 짰는데 평균이 정확히 60일 때 두 결과가 엇갈립니다 | 연습 과제 |
test/randomEx.py · argeEx.py |
step03 에 있는 파일의 초기판입니다. 정본은 step03 쪽입니다 |
— |
신규 챕터(step04~step12)의 코드는 전부 실행 검증을 거쳤고, 알려진 결함이 없습니다.
2019년 파이썬 수업 실습 코드입니다.