📝 빅데이터 프로그래밍 — 1~8주차 정리

Notes / 3학년1학기 / 빅데이터 프로그래밍 중간고사 대비

📝 개요

빅데이터 프로그래밍 3학년 1학기 — 1~8주차 전체 정리
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 pullfetch + 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

📝 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.

📝 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

🔧 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 fetch vs git 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 모드 재확인

모드HEADIndexWorking Dir
--soft이동유지유지
--mixed (기본)이동초기화유지
--hard이동초기화초기화 ⚠️