Skip to content

Latest commit

 

History

History
136 lines (94 loc) · 8.2 KB

File metadata and controls

136 lines (94 loc) · 8.2 KB

python_da — 파이썬 기초부터 데이터 분석까지

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 체계에 편입되지 않은 습작 원본 수업

step09step10 사이가 경계선입니다. 앞은 파이썬 문법, 뒤는 데이터 분석 도구이고 설치가 필요해집니다.

출처 열이 중요합니다.

  • 원본 수업 — 2019년 수업 기록 그대로입니다. 결함이 있어도 고치지 않고 문서에 남겨 연습 과제로 돌렸습니다. 코드 스타일도 그때 그대로(% 포매팅, print(a, b))입니다.
  • 신규 — 끊긴 부분을 채우려고 새로 쓴 것입니다. 현행 파이썬 스타일(f-string, 타입 힌트, PEP 8 이름 규칙)로 작성했습니다.

ifEX1.py 는 원래 저장소 맨 위에 있던 13줄짜리 습작이었습니다. 이름이 step03_controlstmt/ifex/ifEx1.py대소문자만 다른데 내용은 전혀 달라 혼동을 주므로, 내용은 그대로 두고 step03_controlstmt/ifex/ifEx0_scratch.py 로 옮겼습니다.

챕터가 서로를 참조합니다

각 챕터는 앞에서 배운 것을 되짚습니다. 순서대로 읽으면 이런 실이 이어집니다.

  • step02 "읽어온 데이터는 모두 문자열" → step08 CSV 값을 int() 로 바꿔야 하는 이유
  • step03 dict.get(x, 9) 로 switch 흉내 → step05 딕셔너리의 표준 사용법 → step07 그 패턴이 낳은 버그
  • step05 복사의 함정 (b = a) → step06 함수 인자로 리스트를 넘길 때 → step07 self. 를 빠뜨렸을 때
  • step05·step08 에서 손으로 짠 개수 세기·그룹 묶기 → step09 Counter·defaultdictstep11 groupby()
  • step08 csv.DictReader 로 한 줄씩 읽기 → step11 read_csv() 한 줄
  • step10 불리언 인덱싱(&·|·괄호) → step11 DataFrame 조건 필터, 문법이 그대로
  • step09 모듈로 빼서 재사용 → step12 krfont.py 로 한글 폰트 설정을 한 곳에
  • step11 groupby·pivot_table 결과 → step12 그대로 .plot() 에 넘김

실행 방법

python3 --version        # 3.x 면 충분합니다
python3 step01_base/helloPython.py

step09 까지는 설치 없이 그대로 실행됩니다. step10 이후는 위 설치 절을 먼저 보세요.

파일을 하나씩 열어 읽고 실행하는 방식입니다. 프로젝트로 묶여 있지 않으므로 어느 파일부터 실행해도 됩니다.

키보드 입력이 필요한 파일이 있습니다. 실행하면 프롬프트가 뜨니 값을 입력하세요.

  • step02_operator/inputTest1.py, inputTest2.py
  • step03_controlstmt/inputex/inputTest3.py, inputTest4.py
  • step03_controlstmt/ifex/ifEx4.py
  • step07_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.py

step12 는 그래프를 output/ 에 PNG로 저장합니다. 창을 띄우려면 각 파일 위쪽의 SHOW = FalseTrue 로 바꾸세요.


Python 3.6 → 지금, 달라진 것

이 코드는 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 에 도달할 수 없습니다. 0a<=0 이 먼저 잡습니다 연습 과제
step03_controlstmt/ifex/ifEx4.py 같은 판정을 두 가지 방식으로 짰는데 평균이 정확히 60일 때 두 결과가 엇갈립니다 연습 과제
test/randomEx.py · argeEx.py step03 에 있는 파일의 초기판입니다. 정본은 step03 쪽입니다

신규 챕터(step04~step12)의 코드는 전부 실행 검증을 거쳤고, 알려진 결함이 없습니다.

출처

2019년 파이썬 수업 실습 코드입니다.