📝 빅데이터 프로그래밍 — 1~8주차 정리
📝 개요
빅데이터 프로그래밍 3학년 1학기 — 1~8주차 전체 정리
Closed Book · 깃허브 명령어 6문 + 파이썬(NumPy) 4문 출제 예고
Closed Book · 깃허브 명령어 6문 + 파이썬(NumPy) 4문 출제 예고
📅 1주차 — 강의 환경 설정
개발 도구 설치, Shell 사용, 파일 권한 개념, 평가 방식
🛠️ 설치 도구
- Git Bash — Windows용 Bash Shell 환경 (git 명령 + 기본 Unix 명령)
- PyCharm — Python 통합 개발 환경 (JetBrains)
- Python 3.x, GitHub 계정
🐚 Shell 기초
pwd # 현재 위치
ls -al # 숨김 포함 상세 목록
cd folder # 이동
mkdir new # 폴더 생성
touch a.txt # 빈 파일 생성
🔒 파일 권한 rwx × 3 주체
| 주체 | 의미 |
|---|---|
| Owner | 소유자 |
| Group | 소유 그룹 |
| Others | 그 외 모든 사용자 |
각 주체에 r(읽기) · w(쓰기) · x(실행) 권한 부여. 예: -rwxr-xr--
📊 평가
지필고사(중간·기말) 중심 + 출석
📅 2주차 — Git 기본 & 평균 계산
Git 로컬 명령어, vi 에디터, 평균 구하는 3가지 Python 버전
📦 Git 로컬 명령어
git init # 현재 폴더를 Git 저장소로 초기화
git status # 작업 디렉토리/스테이징 상태
git add [파일] # 스테이징
git add . # 전체 스테이징
git reset # 스테이징 취소
git commit -m "메시지" # 버전 기록
git log # 히스토리
git checkout [커밋ID] # 특정 커밋으로 이동
📝 vi 에디터
i— 입력 모드 진입ESC— 명령 모드 복귀:w저장 ·:q종료 ·:wq저장+종료 ·:q!저장 없이 강제 종료
🧮 평균 계산 3가지 방법
# v0.1 — for문으로 직접 합산
scores = [100, 97, 88, 91]
hap, count = 0, 0
for score in scores:
hap = hap + score
count = count + 1
average = hap / count
print(average) # 94.0
# v0.2 — 내장 함수 sum(), len() 사용
scores = [100, 87, 97, 82]
average = sum(scores) / len(scores)
print(average) # 91.5
# v0.3 — statistics 모듈 사용
import statistics
scores = [100, 87, 97, 82]
average = statistics.mean(scores)
print(average) # 91.5
📅 3주차 — NumPy · Pandas · 원격 저장소
Python 속도 한계, NumPy/Pandas 필요성, git remote push/pull
⚡ Python vs C/C++
- Python은 인터프리터 언어로 C/C++ 대비 매우 느림
- 대용량 수치 계산 → NumPy(C 구현, 벡터화)로 해결
- 표(CSV) 형태 데이터 → Pandas로 전처리·그룹화
📊 statistics vs NumPy vs Pandas
| 라이브러리 | 용도 | 특징 |
|---|---|---|
| statistics | 기초 통계 | Python 표준 · 작은 데이터 |
| NumPy | 배열 수치 계산 | C 구현 · 빠름 · ndarray |
| Pandas | 표 데이터 분석 | DataFrame · CSV 처리 · 그룹화 |
🌐 Git 원격 저장소
git remote add origin <URL> # 원격 저장소 등록 (최초 1회)
git push -u origin main # 로컬 → 원격 업로드 (최초 -u로 연결)
git pull # 원격 → 로컬 (가져오기 + 병합)
📊 NumPy / Pandas 평균
import numpy as np
scores = [100, 87, 97, 82]
print(np.mean(scores)) # 91.5
import pandas as pd
print(pd.Series(scores).mean()) # 91.5
📅 4주차 — Pandas 통계 & git reset
Series 통계 함수, mean vs median, git reset 3모드
📈 Pandas Series 통계
import pandas as pd
s = pd.Series([100, 87, 97, 82])
print(s.mean()) # 평균: 91.5
print(s.median()) # 중앙값: 92.0
print(s.sum()) # 366
print(s.max()) # 100
print(s.min()) # 82
mean vs median: 이상치(outlier)가 있을 때 median이 더 대표값에 적합.
예) [10, 10, 10, 1000] → mean=257.5 / median=10
↩️ git fetch vs pull
| 명령 | 동작 |
|---|---|
git fetch | 원격 변경사항 가져오기만 (병합 X) |
git pull | fetch + merge 한 번에 |
git clone <URL> | 원격 저장소 최초 복제 |
🔄 git reset 3 모드 ⭐
flowchart LR
subgraph BEF["git reset 전 상태"]
WD1[Working Dir
수정 중] IDX1[Staging
git add] HEAD1[HEAD
C3 커밋] end subgraph SOFT["--soft (HEAD만 이동)"] WD2[Working Dir ✅ 유지] IDX2[Staging ✅ 유지] HEAD2[HEAD → C1] end subgraph MIX["--mixed (default)"] WD3[Working Dir ✅ 유지] IDX3[Staging ❌ 초기화] HEAD3[HEAD → C1] end subgraph HARD["--hard (모두 삭제)"] WD4[Working Dir ❌ 삭제] IDX4[Staging ❌ 삭제] HEAD4[HEAD → C1] end BEF --> SOFT BEF --> MIX BEF --> HARD
수정 중] IDX1[Staging
git add] HEAD1[HEAD
C3 커밋] end subgraph SOFT["--soft (HEAD만 이동)"] WD2[Working Dir ✅ 유지] IDX2[Staging ✅ 유지] HEAD2[HEAD → C1] end subgraph MIX["--mixed (default)"] WD3[Working Dir ✅ 유지] IDX3[Staging ❌ 초기화] HEAD3[HEAD → C1] end subgraph HARD["--hard (모두 삭제)"] WD4[Working Dir ❌ 삭제] IDX4[Staging ❌ 삭제] HEAD4[HEAD → C1] end BEF --> SOFT BEF --> MIX BEF --> HARD
📝 week04.py min() 예제
import pandas as pd
scores = [88, 76, 92, 59, 81]
s = pd.Series(scores)
print("최저점:", s.min())
📅 5주차 — Git 브랜치 & 매표소 프로그램
충돌 시나리오, 협업 Role, 브랜치 명령, 모듈화 실습
⚠️ Git 충돌 시나리오 2가지
- 동시 push 충돌: A, B가 같은 파일 동일 라인을 각자 수정 후 push → 후발 push는 pull 필요
- 브랜치 병합 충돌: 서로 다른 브랜치에서 같은 파일 수정 후 merge →
<<<<<<<마커 발생
👥 1인분 Role (협업 규칙)
각자 자신의 브랜치에서 작업 · commit 단위 의미 부여 · PR/merge로 통합 · main은 항상 deployable 상태 유지
🌿 Git 브랜치 명령어 ⭐
git branch [이름] # 브랜치 생성
git branch # 브랜치 목록 (* 현재)
git switch [이름] # 브랜치 이동 (checkout 대체)
git checkout -b [이름] # 생성 + 이동 동시
git push -u origin [이름] # 로컬 브랜치를 원격에 처음 올릴 때
git branch -m [이름] # 브랜치 이름 변경
git branch -d [이름] # 병합된 브랜치 삭제
git branch -D [이름] # 강제 삭제
🎫 매표소 프로그램 — 모듈화 실습
# week05.py — Dev01: 입출력 담당
import ticket # Dev02가 만든 요금 계산 모듈 불러오기
humans = int(input("몇 명? "))
ages = list()
for i in range(humans):
age = int(input("나이? "))
ages.append(age)
print(f"총 요금은 {ticket.entrance_fee(ages)}원 입니다.")
# ticket.py — Dev02: 로직 담당 (모듈화)
def entrance_fee(ages: list) -> int:
"""방문자 나이 목록을 받아 총 입장 요금을 계산한다.
Args: ages (list): 방문자 나이 리스트
Returns: int: 총 입장 요금
"""
kid, adult, senior = 5000, 10000, 7000
total_fee = 0
for age in ages:
if age >= 65: # 65세 이상: 시니어
total_fee += senior
elif age >= 19: # 19세 이상: 성인
total_fee += adult
else: # 그 외: 어린이
total_fee += kid
return total_fee
핵심:import 모듈명으로 다른 .py 파일의 함수를 불러올 수 있다.
Docstring(""" """)과 Type Hinting(ages: list)으로 코드 문서화.
📅 6주차 — NumPy 배열 생성 7가지
ndarray 생성 함수, 배열 속성(shape/dtype/ndim/size/T)
🔢 NumPy 배열 생성 7가지 ⭐
import numpy as np
# 1) 리스트 → ndarray 변환
array01 = np.array([1, 2, 3]) # [1 2 3]
# 2) 연속 값 — arange(start, stop, step) (stop 미포함)
array02 = np.arange(0, 10, 2) # [0 2 4 6 8]
# 3) 0으로 채워진 배열
array03 = np.zeros((2, 3)) # 2행 3열, 모두 0.0
# 4) 1로 채워진 배열
array04 = np.ones((2, 3)) # 2행 3열, 모두 1.0
# 5) 지정값으로 채워진 배열
array05 = np.full((2, 3), 9) # 2행 3열, 모두 9
# 6) 균일분포 난수 배열 (0.0 이상 1.0 미만)
array06 = np.random.rand(2, 3)
# 7) 균등 간격 값 — linspace(start, stop, 개수) (stop 포함)
array07 = np.linspace(0, 10, 3) # [0. 5. 10.]
🔍 배열 속성
array08 = np.random.random((2, 3, 3))
print(array08.shape) # (2, 3, 3) — 형태
print(array08.dtype) # float64 — 데이터 타입
print(array08.ndim) # 3 — 차원 수
print(array08.size) # 18 — 전체 원소 개수 (2×3×3)
print(array08.T) # 전치(Transpose): 행↔열 교환
arange vs linspace: arange는 step(간격) 지정 · stop 미포함 / linspace는 개수 지정 · stop 포함
🌳 브랜치 흐름 시각화
git log --oneline --graph --all
📅 7주차 — 벡터화 & 시험 예고
NumPy 통계 함수, 벡터화 vs 루프, 시험 범위 공지
시험 출제 예고 (7주차 기준)
Git 6문제 + NumPy 4문제. 지필고사 Closed Book.
Git 6문제 + NumPy 4문제. 지필고사 Closed Book.
📝 week07.py — 통계 함수 & 벡터화
import numpy as np
import random
# 연속 정수 배열
array02 = np.arange(1, 10) # [1 2 3 4 5 6 7 8 9]
# 통계 함수
print(np.mean(array02)) # 평균: 5.0
print(np.median(array02)) # 중앙값: 5.0
print(np.max(array02)) # 최댓값: 9
print(np.min(array02)) # 최솟값: 1
print(np.var(array02)) # 분산: 6.666...
print(np.std(array02)) # 표준편차: 2.581...
# random.random(): 0.0 이상 1.0 미만 난수
l2 = []
for i in range(3):
l2.append(random.random())
# 리스트 방식 vs NumPy 벡터화 비교
l3 = []
for item in l2:
l3.append(item * 10) # for문으로 하나씩 처리 (느림)
array04 = np.array(l2)
print(array04 * 10) # 배열 전체에 한 번에 연산 (벡터화, 빠름)
print(array04 > 0.5) # 조건 비교 → True/False Boolean 배열 반환
# copy(): 원본과 독립적인 새 배열 생성
array05 = array04.copy()
flowchart LR
subgraph LOOP["❌ Python for-loop"]
L1["for i in range(N):
total += a[i]"] L2[인터프리터 오버헤드
~100배 느림] L1 --> L2 end subgraph VEC["✅ NumPy 벡터화"] V1["np.sum(a)"] V2[C 레벨 SIMD 실행
연속 메모리 접근] V3[성능 ×100] V1 --> V2 --> V3 end LOOP -.같은 결과.-> VEC
total += a[i]"] L2[인터프리터 오버헤드
~100배 느림] L1 --> L2 end subgraph VEC["✅ NumPy 벡터화"] V1["np.sum(a)"] V2[C 레벨 SIMD 실행
연속 메모리 접근] V3[성능 ×100] V1 --> V2 --> V3 end LOOP -.같은 결과.-> VEC
🔧 NumPy dtype
| dtype | 설명 |
|---|---|
int32 / int64 | 정수형 |
float32 / float64 | 실수형 (기본값) |
bool | 불리언 (조건 비교 결과) |
object | 혼합 타입 (문자열+숫자) |
↩️ 커밋 수정/되돌리기
git commit --amend # 가장 최근 커밋 수정 (메시지/파일)
git reset --soft HEAD~1 # 커밋만 취소, 파일은 staged 유지
git reset HEAD~1 # --mixed 기본값: 커밋+스테이징 취소
git reset --hard HEAD~2 # 최근 2개 커밋+파일 모두 삭제
git branch -d [이름] # 병합된 브랜치 삭제
📝 8주차 — 중간고사 정리
Closed Book · Git 6문 + Python/NumPy 4문
⚠️ 시험 출제 유력 항목
Git 명령어 6문 + Python(NumPy) 4문 — 총 10문
📦 Git — 핵심 암기
git commit --amend: 가장 최근 커밋 메시지 수정 또는 파일 추가git reset --soft HEAD~N: 커밋만 취소, 파일은 staged 유지git reset --hard HEAD~N: 커밋 + 파일 모두 삭제 (복구 불가)git branch -d 브랜치명: 병합된 브랜치 삭제 /-D: 강제 삭제git log --oneline --graph --all: 브랜치 흐름 시각화git fetchvsgit pull: fetch=가져오기만 · pull=fetch+merge
🐍 Python/NumPy — 핵심 암기
- NumPy 사용 목적 (ndarray, 벡터화, 빠른 수치 계산)
- NumPy dtype (int32, float64 등)
- NumPy 배열 생성 7가지 (
array,arange,zeros,ones,full,rand,linspace) - NumPy 통계 함수 (
mean,median,max,min,var,std) - 배열 속성: shape, dtype, ndim, size, T
- 벡터화:
array * 10이 for 루프보다 빠른 이유 (C 레벨 일괄 연산)
🔥 git reset 3 모드 재확인
| 모드 | HEAD | Index | Working Dir |
|---|---|---|---|
| --soft | 이동 | 유지 | 유지 |
| --mixed (기본) | 이동 | 초기화 | 유지 |
| --hard | 이동 | 초기화 | 초기화 ⚠️ |