00차시 · 데이터 분석 전 핵심 복습

Python으로 그리는 수학과 움직임

모듈을 불러오고, 자료를 저장하고, 반복문으로 그림을 그리며, 삼각함수와 속도·중력의 원리를 직접 눈으로 확인합니다. 이후 Pandas 데이터 분석에서 반복해서 사용할 Python 기초를 정리합니다.

오늘 배우는 세 가지 핵심

직접 실행

import, 오류 해결, 자료구조, turtle 그래픽

변수를 바꿔 탐구

사인·코사인·탄젠트, 속도·중력

이해·확장

고급 그래픽의 원리와 데이터 분석 연결

교사가 2~3시간 범위에서 속도를 조정할 수 있도록 각 영역을 독립적으로 구성했습니다. 고급 구현 전체는 감상·심화이며, 기초와 핵심 계산 문제를 구분합니다.

01 · 실습 필수

import와 패키지 설치·삭제

모듈은 Python 코드 파일 또는 기능 묶음입니다. import는 그 기능을 현재 프로그램에서 사용하도록 불러오는 명령입니다. pip 설치는 필요한 외부 패키지를 Python 환경에 준비하는 별개 과정입니다.

설치 없이 먼저 확인할 모듈

import random
import math
import turtle

print(random.randint(1, 6))
print(math.sin(math.radians(30)))

일반적인 PC Python 환경에서 random·math·turtle은 별도 pip 설치 대상이 아닙니다. turtle에는 Tk 창을 띄울 수 있는 GUI 환경이 필요합니다.

외부 패키지 예시

import pandas as pd
import matplotlib.pyplot as plt
import pygame

pandas, matplotlib, pygame은 선택한 Python 환경에 설치돼 있어야 합니다. Python 파일을 pygame.py처럼 모듈명과 똑같이 저장하면 충돌할 수 있습니다.

VS Code 터미널에서 순서대로 실행

py --version
py -m pip --version
py -m pip install pygame
py -m pip install pandas matplotlib
py -m pip show pygame
py -m pip uninstall pygame

py 명령이 없는 환경에서는 같은 명령을 python -m pip ...로 바꿔 실행합니다. macOS·Linux에서는 보통 python3 -m pip ...를 사용합니다.

에러가 나면 이렇게 진단하세요.
  1. ModuleNotFoundError: 현재 실행 중인 Python 환경에 패키지가 있는지 확인하고, VS Code 오른쪽 아래 Python 인터프리터를 선택합니다.
  2. No module named pip: 설치한 Python 환경과 pip 구성을 확인합니다.
  3. No matching distribution found: 패키지명·Python 버전·플랫폼 호환성을 확인합니다. pygame-ce는 대안 프로젝트이며 반드시 최신 버전에서 pygame이 실패한다는 뜻은 아닙니다. 필요한 경우 py -m pip install pygame-ce를 검토합니다.
  4. python is not recognized: Python 설치와 실행 경로를 확인합니다. py와 python 중 되는 명령을 사용합니다.
  5. externally-managed-environment나 권한 오류: 가상환경을 만들어 설치하는 편이 안전합니다.
심화: 가상환경 만들기와 모듈 이름 충돌
py -m venv .venv
.venv\Scripts\python -m pip install pygame matplotlib pandas
# PowerShell에서는 가상환경의 python 경로를 직접 지정해도 됩니다.

프로젝트별로 서로 다른 패키지 버전을 관리하고, import pygame이 어느 인터프리터에서 실행되는지 점검합니다.

02 · 시험 핵심

리스트·튜플·딕셔너리 이해

자료구조기호특징Pandas 연결
리스트[ ]순서 있음, 항목 변경 가능여러 관측값을 열 데이터로 사용
튜플( )순서 있음, 항목 변경 불가df.shape의 (행, 열)
딕셔너리{ }키와 값으로 구성pd.DataFrame(data)
books = [3, 5, 2]                 # 리스트
size = (3, 2)                    # 튜플
student = {"name": "A", "books": 3}  # 딕셔너리
print(books[0])     # 3
print(size[1])      # 2
print(student["books"])  # 3

import pandas as pd
data = {"name": ["A", "B", "C"], "books": [3, 5, 2]}
df = pd.DataFrame(data)
print(df.shape)      # (3, 2) / 인덱스 열은 별도 계산 안 함
print(df["books"].mean())

빈 튜플 ()과 원소 한 개짜리 튜플 (3,)도 구분합니다. 괄호가 보인다고 무조건 튜플은 아닙니다. (3 + 2)는 계산을 묶는 괄호입니다.

반복문·나머지·복합 대입도 함께 복습

colors = ["red", "green", "blue"]
for i in range(6):
    print(i, colors[i % 3])

x = 10
x += 3         # x = x + 3
x *= 0.5       # x = x * 0.5
03 · 직접 실행

Turtle 그래픽으로 반복문과 각도 확인

아래 코드는 모두 주석을 제외한 실행 코드입니다. 각 예제를 별도의 .py 파일로 저장해 VS Code에서 실행하세요. 코드 창의 줄은 자동으로 꺾이지 않으며, 긴 줄은 가로 스크롤로 확인할 수 있습니다.

① 무지개 원형 만다라

import turtle

turtle.bgcolor("black")
turtle.speed(0)
turtle.pensize(2)

colors = ["red", "yellow", "green", "cyan", "blue", "magenta"]

for i in range(36):
    turtle.pencolor(colors[i % 6])
    turtle.circle(100)
    turtle.left(10)

turtle.done()

36번 반복하며 원을 10도씩 회전합니다. 여섯 색은 나머지 연산으로 순서대로 바뀝니다.

② 별빛 은하수 회오리

import turtle

turtle.bgcolor("black")
turtle.speed(0)

colors = ["purple", "blue", "cyan", "green", "yellow", "orange", "red"]

for x in range(150):
    turtle.pencolor(colors[x % 7])
    turtle.pensize(x / 40 + 1)
    turtle.forward(x * 2)
    turtle.left(144)

turtle.done()

이동 거리와 선 굵기가 점점 증가하고, 144도 회전으로 별 모양을 만듭니다.

③ 입체적인 사각형 착시 나선

import turtle

turtle.bgcolor("black")
turtle.speed(0)

colors = ["#33FF33", "#33FF57", "#3357FF", "#F3FF33", "#FF33F3", "#00FFFF"]

for i in range(200):
    turtle.pencolor(colors[i % 6])
    turtle.pensize(i // 50 + 1)
    turtle.forward(i * 1.5)
    turtle.right(91)

turtle.done()

200번 반복하며 91도씩 회전합니다. //로 선 굵기를 단계적으로 늘립니다.

④ Turtle 선 색깔을 지정하는 두 가지 방법

Hex 색상 코드: turtle.pencolor("#FF5733") — #RRGGBB 형식으로 RGB 색을 지정합니다.

영문 색상 이름: turtle.pencolor("cyan") — Turtle에서 지원하는 색상 이름을 지정합니다.

import turtle

turtle.pencolor("#FF5733")
turtle.forward(100)

turtle.pencolor("cyan")
turtle.forward(100)

turtle.done()

두 방법 모두 동일한 pencolor() 함수입니다. 위 예제는 앞 100만큼은 주황 계열 Hex 색, 다음 100만큼은 cyan으로 그립니다. Turtle의 Hex 코드는 일반적으로 #RRGGBB의 6자리로 사용합니다.

확인 활동: 세 예제에서 range(), %, //, forward(), circle(), left(), right()의 역할을 설명하고 회전 각도나 반복 횟수를 바꾸어 결과를 비교해 보세요.
04 · 실시간 시각화

사인·코사인·탄젠트 그래프 직접 탐구

sin과 cos는 회전하는 점의 세로·가로 좌표를 설명하고, tan = sin/cos는 기울기와 연결됩니다. 90°·270°에서는 cos=0이므로 tan 값이 정의되지 않습니다. Python의 math.sin, math.cos, math.tan은 각도를 라디안으로 입력합니다.

각도 조절45°
import math
angle = math.radians(30)  # 도를 라디안으로 변환
print(round(math.sin(angle), 2))  # 0.5
print(round(math.cos(angle), 2))  # 0.87
print(round(math.tan(angle), 2))  # 0.58
심화 적용: 원 위의 점은 x = 중심x + 반지름 * cos(각도), y = 중심y + 반지름 * sin(각도)로 구합니다. 파동은 sin(시간 + 위치)로 만들 수 있습니다. 화면 좌표에서는 아래로 갈수록 y가 커진다는 점에 주의하세요.
05 · 실시간 실험

속도·중력·공기 저항으로 파티클 만들기

첨부한 고급 Pygame 입자 코드를 학습하기 쉬운 **좌표·속도·중력 3단계**로 단순화했습니다. 공의 움직임을 관찰한 후 코드를 보고 결과를 계산해 봅니다.

# 복잡한 클래스 없이 기본 원리만 알아봅시다.
x, y = 0, 0
vx, vy = 6, -3
for frame in range(5):
    x += vx           # x 좌표는 수평 속도만큼 이동
    y += vy           # y 좌표는 수직 속도만큼 이동
    vy += 0.15        # 아래 방향 중력
    vx *= 0.96        # 수평 속도 감쇠
    print(frame, round(x, 2), round(y, 2))

화면의 물리 모형은 교육용 단순화 모델입니다. 중력은 프레임마다 수직 속도를 일정량 증가시키는 가정으로 구현했습니다. 실제 중력가속도 9.8m/s²와 동일한 물리 단위가 아닙니다.

파티클 수명과 리스트 순회

life = 255
life -= 4.5
print(life)        # 250.5

particles = [1, 2, 3]
for p in particles[:]:  # 리스트의 복사본 순회
    if p % 2 == 0:
        particles.remove(p)
print(particles)   # [1, 3]

게임 코드의 for _ in range(30)은 반복 횟수 30번만 필요할 때 쓰는 표기입니다. _는 특별한 키워드가 아니라 사용하지 않을 변수 이름 관례입니다.

05-1 · 단계별 원리 설명

화면 좌표계·속도·중력의 관계

수학 좌표와 화면 좌표의 차이부터 x += vx, vy += 0.15, vx *= 0.96의 의미를 한 줄씩 설명하고, 프레임별 값을 계산해 봅니다.

4단계 설명과 프레임별 계산 실습 열기 →

06 · 시연·선택 심화

첨부 고급 그래픽의 원리 이해

첨부 PDF 4~6번은 실무에서 응용되는 그래픽의 개념을 이해하기 위한 참고입니다. 그대로 따라 적게 하기보다는, 학생이 쉽게 설명할 수 있는 작은 코드로 재구성했습니다.

④ 파동: sin의 적용

import math
for x in range(0, 181, 30):
    y = math.sin(math.radians(x)) * 40
    print(x, round(y, 1))

파동이 시간과 위치에 따라 변화합니다. 원본은 HTML·JavaScript 프로그램이므로 Python 파일로 실행하지 않습니다.

⑤ 입자: 방향·속도·중력

import math
angle = math.radians(30)
speed = 10
vx = math.cos(angle) * speed
vy = -math.sin(angle) * speed
print(round(vx, 2), round(vy, 2))

한 입자의 속도를 x, y 방향으로 나눕니다. 원본은 Pygame 예제이며 이 화면의 미리보기는 브라우저 그래픽으로 별도 구현했습니다.

⑥ 오로라: 겹치는 파동

import math
x = math.radians(30)
a = math.sin(x) * 60
b = math.cos(x) * 20
print(round(a + b, 2))

서로 다른 진폭·위상의 파동을 더하면 복합적인 움직임이 나타납니다. 원본은 Tkinter 예제입니다.

미리보기는 참고 원본의 정확한 렌더링이 아니라 같은 수학적 원리를 바탕으로 만든 학생용 교육 시뮬레이션입니다.

07 · 코드 해석

핵심 개념·코드 결과 예측

문항을 먼저 풀고 ‘채점 및 해설’을 누르세요. 필수 기초와 그래픽 심화는 구분되어 있습니다. 실제 시험 출제 범위는 학교의 최종 안내를 따릅니다.

다음 시간: Pandas 데이터 분석

오늘 복습한 import, 리스트, 튜플, 딕셔너리, 반복문은 Pandas에서 계속 등장합니다. 다음 시간부터 DataFrame으로 표를 만들고 CSV 자료를 분석합니다.

Pandas 첫 실습으로 이동 →3단원 수업 안내로 이동