TIL/내일배움캠프

파이썬 환경 구축은 어떻게 하나요?

Kou_ 2026. 5. 28. 21:00

목차

  • pip
  • 파이썬 가상환경(venv) 생성
  • Numpy

전처리 & 시각화 라이브 세션 1회차

pip

  • pip (Python Installer Package)라는 도구로 파이썬에서 대부분의 라이브러리를 설치하고 관리 가능
  • PyPI (Python Package Index)에서 패키지를 검색, 다운로드, 설치, 제거, 업그레이드 기능 제공
  • pip 주요 명령어
    명령어 설명
    pip --version 설치된 pip 버전 확인
    pip list 설치된 패키지 목록 조회
    pip list | findstr py 특정 문자열 포함 패키지 검색 (Windows)
    pip show 패키지명 패키지 상세 정보 확인
    pip install 패키지명 패키지 설치
    pip install 패키지명==버전 특정 버전 설치
    pip install --upgrade 패키지명 패키지 최신 버전 업그레이드
    pip install --upgrade pip pip 자체 업그레이드
    pip uninstall 패키지명 패키지 삭제
    pip freeze 설치 패키지 버전 목록 출력
    pip freeze > requirements.txt 현재 환경 패키지 저장
    pip install -r requirements.txt requirements 파일 기반 설치
    pip search 패키지명 패키지 검색 (현재는 deprecated)
    pip cache dir pip 캐시 경로 확인
    pip cache purge pip 캐시 삭제
    python -m pip install 패키지명 특정 Python 환경 기준 설치
    python -m ensurepip pip 복구/초기 설치

파이썬 가상환경(venv) 생성

  1. 파이썬 설치 확인
    • cmd, powershell, VSCode 내부 terminal 등에서 실행
    • 명령어 : python --version
  2. 가상환경 생성
    • 실행 위치 : 프로젝트 폴더 내부 터미널
    • 명령어 : python -m venv venv
  3. 가상환경 활성화
    • windows
      .\venv\Scripts\activate
    • Mac / Linux
      source venv/bin/activate
    • 정상적으로 실행 시 터미널 앞에 (venv) 표시
  4. VSCode 인터프리터 설정
    • 가상환경 활성화에 더해 VSCode가 사용할 파이썬을 지정
      Ctrl + Shift + P → Python: Select Interpreter → venv 선택
  5. 패키지 설치
    • 가상환경 활성화 후 터미널에서 실시
    • 명령어 : pip install 패키지명
  6. 설치된 패키지 확인
    • 명령어 : pip list
  7. 환경 저장 (requrements.txt)
    • 현재 설치된 라이브러리 목록을 저장 → 이걸 바탕으로 팀 프로젝트 진행 시 파이썬 환경을 동일하게 맞출 수 있음
    • 명령어 : pip freeze > requirements.txt
  8. 환경 복원
    • 'requirements.txt'를 바탕으로 다른 PC에서 팀원이 동일 환경을 설치하고자 할 때 사용
    • 명령어 :  pip install -r requirements.txt
  9. 가상환경 종료
    • 명령어 : deactivate
    • (venv) 표시 제거됨
    • .gitignore 설정
      • 가상환경 폴더는 Git에 올리지 않는다.
        → 용량이 매우 크고 OS마다 다르며, requirments.txt로 복원이 가능하다.
      • 예시
        venv/
        __pycache__/
        .ipynb_checkpoints/
        .env

Numpy

  • Numerical Python의 줄임말, 산술 계산을 위해 필수적인 패키지 중 하나
  • ndarray라고 하는 N차원 배열 객체가 핵심 기능 중 하나 (대규모 데이터 집합을 담을 수 있는 빠르고 유연한 자료 구조)
  • 일반적인 list와 Numpy array의 차이점
    • import numpy as np

      num_list = [1, 2, 3]
      num_array = np.array([1,2,3])
    • 둘 다 print 시 동일하게 출력
    • 각각에 *2를 할 경우
      num_list * 2    #[1, 2, 3, 1, 2, 3]
      num_array * 2    #array([2, 4, 6])
    • .dtype
      num_list2 = [1, 2, 3, 'Hello']
      num_array2 = np.array(num_list2)
      print(num_array2.dtype) #<U21    (U21는 NumPy의 문자열 dtype 표현)
      • < : 리틀 엔디안 (little-endian) 방식, 작은 자릿수부터 저장    /    > : 빅 엔디안 (big-endian), 큰 자릿수부터 저장
      • U : 유니코드 문자열 (Unicode string)
      • 21 : 문자열 최대 길이  = 21 글자
      • 즉, 최대 21글자의 유니코드 문자열을 배열
  •  Numpy 차원
    • 1차원 - 축 (행) : axis 0 → Vector
      a = np.array([1, 2, 3])
      print(a)    # [1 2 3]    → 리스트와 다르게 , 없이 나타남
      print(a.shape)    # (3, )    → 배열 모양 = 1차원 형태 : 튜플 형태 (열의 수, ) => 튜플 내 숫자의 수 == 차원
      print(a.ndim)     # 1    → 차원 수
    • 2차원 - 축 (열) : axis 0 → Matrix
      b = np.array([
          [1, 2, 3],
          [4, 5, 6]
      ])
      print(b)    # [[1 2 3]
                         [4 5 6]]
      print(b.shape)    # (2, 3)    → 2차원 : (행의 수, 열의 수)
      print(b.ndim)    # 2
    • 3차원 - 축 (채널) : axis 0 → Tensor
      c = np.array([
          [
              [1, 2, 3],
              [4, 5, 6]
          ],
          [
              [7, 8, 9],
              [10, 11, 12]
          ]
      ])
      print(c)    # [[[ 1  2  3]
                  #   [ 4  5  6]]
                  #  [[ 7  8  9]
                  #   [10 11 12]]]
      print(c.shape)    # (2, 2, 3)    → 3차원 : (층의 수, 행의 수, 열의 수), 층이 가장 바깥 리스트라서 튜플 처음에 위치
      print(c.ndim)     # 3
  • numpy 메소드
    • .size : 배열 속 원소의 총 갯수
    • .arange(배열 크기, 요소 타입) : 범위 내 배열 만들기
      array1 = np.arange(4)
      print(array1)    # [0 1 2 3]
    •  np.zeros() : 모든 값을 0으로 채운 Numpy 배열 생성 함수
      array2 = np.zeros((4,4), dtype=float)
      print(array2)    # 4행 4열의 실수 원소 타입의 배열 생성
      [[0. 0. 0. 0.]
       [0. 0. 0. 0.]
       [0. 0. 0. 0.]
       [0. 0. 0. 0.]]
    • np.ones(배열 크기, 요소 타입) : 모든 값을 1로 ... 
    • np.random.randint(최소값, 최대값, 배열 크기) → np.random은  무작위 숫자 생성, randint는 랜덤 정수 생성
    • np.random.normal(0, 1, 배열 크기) → normal은 평균 0, 표준편차 1인 정규분포를 따르는 배열 생성
    • np.append(리스트, 요소) : 리스트에 마지막에 요소 추가  ↔  일반 list.append()와는 구조가 다름
  • numpy 배열의 출력 (print(배열명) vs 배열명)
    A = np.append(a, 4)
    print(A)    # [6 7 8 9 4]
    A    # array([1, 2, 3, 4])
  • numpy 배열 형태 바꾸기
    array1 = np.array([1,2,3,4])
    array1 = array1.reshape(2,2)
    print(array1)    # [[1 2]
                                [3 4]]
  • numpy 배열 슬라이싱
    arr = np.arange(16).reshape(4,4)
    print(arr)    # [[ 0    1    2    3]
                          [ 4    5    6    7]
                          [ 8    9  10  11]
                          [12 13  14  15]]
    arange(최소,마지막,스텝) : 0~숫자 전까지 배열 형성 ↔ range()와 유사
    .reshape(배열 크기) : 배열 크기로 재형성
  • numpy 배열 슬라이싱
    arr[1:3]    # array([[ 4, 5,   6,   7],
                                 [ 8, 9, 10, 11]])
    → 배열명[시작:마지막,스텝] : 예시에서는 슬라이싱, 가장 바깥 리스트 인덱스 1 (2행)부터 인덱스 2 (3행)까지
  • numpy 배열 인덱스
    arr[2,2]    # 파이썬에서는 10, 주피터에서는 np.int64(10)
  • numpy 배열 내부 리스트 슬라이싱
    arr[:,0:2]    #array([[  0,  1],
                                  [  4,  5],
                                  [  8,  9],
                                  [10, 11]])
    → 모든 행에서 0~1번 열만 출력
  • numpy 배열 합치기 & 나누기
    • numpy 1차원 배열 합치기
      array1 = np.array([1,2,3])
      array2 = np.array([4,5,6])
      array3 = np.concatenate([array1, array2])

      print(array3)    # [1 2 3 4 5 6]
      print(array3.shape)    # (6, )
      np.comcatenate([배열명_1, 배열명_2]) 
    • numpy 2차원 배열 세로축으로 합치기
      array1 = np.arange(4).reshape(1,4)
      array2 = np.arange(8).reshape(2,4)
      print(array1)
      print('----------------')
      print(array2)
      print('----------------')
      array3 = np.concatenate([array1, array2], axis=0)
      print(array3)
      출력 형태
      → array1이 1행으로 합쳐짐 ( axis=0 → 행 )
    • numpy 2차원 배열 가로축으로 합치기
      array1 = np.arange(4).reshape(4,1)
      array2 = np.arange(8).reshape(4,2)

      print(array1)
      print('----------------')
      print(array2)
      print('----------------')

      array3 = np.concatenate([array1, array2], axis=1)
      print(array3)
      출력 형태
      → 1번 array가 제일 왼쪽 열로 합쳐짐 ( axis = 1 → 열 )
    • numpy 배열 나누기
      array = np.arange(8).reshape(2,4)
      left, right = np.split(array, [2], axis=1)
      print(array)
      print('----------------')
      print(left)
      print('----------------')
      print(right)
      출력 형태
      np.split(배열명, 기준 인덱스, 방향) : 기준 인덱스 앞에서 자르기, axis = 0(행, 가로), 1(열, 세로)
  • numpy 덧셈
    z = np.arange(1,11).reshape(2,5)
    np.sum(z, axis=0)    # array([ 7, 9, 11, 13, 15])
    np.sum(z, axis=1)    # array([15, 40])
  • 불리언 인덱싱
    • 불리언 값으로 출력
      (z > 3) & (z%2==0)    # 조건에 해당하는 값은 True, 아니면 False로 출력
      출력결과
    • 요소를 추출
      z[(z > 3) & (z%2==0)]    # array([3, 6, 9])     → 조건에 해당하는 요소만 리스트로 출력
  • 배열 연산
    x = np.array([[1,2], [3,4]], dtype=np.float64)    # x = [[1, 2],             # y = [[5, 6],
    y = np.array([[5,6], [7,8]], dtype=np.float64)              [3, 4]]                        [7, 8]]
    • 더하기x + y     또는     np.add(x,y)
    • 빼기x - y    또는    np.substract(x,y)
    • 곱하기x * y    또는    np.multiply(x,y)
    • 나누기x / y    또는    np.divide(x,y)
    • 행렬곱(Matrix Mulyiplication) → x @ y    또는    np.matmul(x,y)
      # [[19. 22.]    # ex) 19는 행렬곱('x의 행 요소 * y의 열 요소'를 순차적으로 진행) = 1*5+2*7 = 19
      #  [43. 50.]]

실습 1 : 5일간의 불량률 데이터 분석 (기본 통계)

# 일별 불량품 수 (개)
defects = np.array([12, 8, 15, 10, 5])
# 일별 총 생산량 (개)
production = np.array([1000, 1050, 980, 1020, 950])
  1. 총 생산된 제품 수와 총 불량품 수 계산
    total_production = np.sum(production)
    total_defects = np.sum(defects)
    print(f"1. 총 생산량: {total_production}개, 총 불량품 수: {total_defects}개")    # f-string
  2. 5일간 평균 일별 불량품 수 계산
    avg_defects = np.mean(defects)
    print(f"2. 평균 일별 불량품 수: {avg_defects:.2f}개")    # :.2f == 소수점 아래 둘째 자리까지 표시
  3. 각 일별 불량률(%) 계산
    defect_rates_per_day = (defects / production)*100
    print(f'3. 일별 불량률 (%): {defect_rates_per_day.round(2)}')    # .round(n) = 소수점 아래 n자리에서 반올림(rounding)
  4. 전체 기간 최종 불량률(%) 계산
    total_defect_rate = (total_defects / total_production) * 100
    print(f'4. 최종 불량률 (%): {total_defect_rate:.3f}%')

출처
내일배움캠프 교육 자료