kyejin0412 님의 블로그

[TIL] Week 4-3 파이썬 라이브러리, 파일 입출력 본문

내일배움캠프-데이터분석

[TIL] Week 4-3 파이썬 라이브러리, 파일 입출력

kyejin0412 2025. 11. 12. 21:17

오늘은 라이브세션 외에는 코드카타에 집중했다.

개념이 중요하지만 외우기가 귀찮아서 문제푸는 시간이 즐겁다. 그동안 문제를 많이 풀었다보니 코드카타의 문제 리스트 초반 부분은 푼 문제가 많아서, 그냥 내 페이스대로 풀고 있다.

파이썬도 슬슬 시작해보았다. 아직은 입문 문제라 10문제를 20분만에 풀었지만, 알고리즘으로 들어가면 어려워지겠지... 지금을 즐기자..ㅋㅋㅋ


 

표준 라이브러리 (파이썬) <-> 외장, 외부 라이브러리 (외부 회사. ex. pip install pandas)

  • 표준 라이브러리 : 파이썬을 설치할 때, 자동으로 설치되는 라이브러리들 (관련된 코드들의 묶음). 파이썬 공식에서 만듦.
    자동 설치되긴 하지만 자주 쓰이지 않으므로 쓸 때 import 해야 함.
  • 외부 라이브러리 : 다른 회사에서 만든 라이브러리로, pip install을 통해 추가로 설치해줘야 함. (import 해야 함)
  • 쓰는 법
    • import 가져올 라이브러리 이름 -> 라이브러리 전체를 가져옴. (= from [library] import *)
    • from 어디서 import 어떤 것을 -> 어디서(특정 라이브러리에서) 어떤 것을(어떤 함수를) 가져온다. -> 더 자주 쓰임
    • 라이브러리가 크기 때문에 컴퓨터에 부담이 됨, 보통 일부를 가져와서 쓴다.
    • import 구문은 가장 상단에 몰아쓰는 경우가 많다.
  • 표준 라이브러리 예시
    • datetime - 날짜/시간 다루기
from datetime import date, time, timedelta, datetime

d = date.today()
print(d) # 2025-11-12

t = time(11,32,00)
print(t) # 11:32:00

dt = datetime.now()
print(dt) # 2025-11-12 11:42:49.893006

dt2 = dt - timedelta(days=1, hours=3) # 시간 간격 (연산용)
print(dt2) # 2025-11-11 08:42:13.448494

# strftime (string format time) 날짜 -> 문자
s = dt.strftime("%Y-%m-%d %H:%M:%S")
print(s) # 2025-11-12 11:42:13

# strptime (strint parse time) 문자 -> 날짜
s2 = dt.strptime(s, "%Y-%m-%d %H:%M:%S")
print(s2) # 2025-11-12 11:42:13

 

  • math - 정확하고 안정적인 수학 연산
    출력되는 데이터 타입 확인 필요 (실수? 정수?)
    분석할 때는 큰 수를 다루게 되는데, 이때 기본 연산자보다 math가 더 정밀도가 높으므로 수학연산은 math를 사용하자.
import math

print(math.pi, math.e)
print(math.sqrt(16))      # 4.0
print(math.pow(2, 3))     # 8.0 (항상 float)
print(2 ** 3)             # 8   (정밀도/형 변환 고려해 선택)
print(math.factorial(5))  # 120
print(math.ceil(4.1))     # 5 (올림)
print(math.floor(4.9))    # 4 (내림)
print(math.trunc(-4.9))   # -4 (소수점 버림; 0쪽으로 절사)

 

 

  • random - 난수, 표본 추출, 섞기
import random

print(random.random())       # [0.0, 1.0)
print(random.randint(1, 10)) # [1, 10] 정수. 10 포함
print(random.randrange(0, 10, 2)) # 0,2,4,6,8

# 재현성(중요)
random.seed(42) # seed 설정해서 다시 실행해도 같은 값 나오게 할 수 있음
print([random.randint(1, 5) for _ in range(5)])  # 매번 같은 결과

# 표본 추출과 섞기
items = ["A", "B", "C", "D"]
print(random.choice(items))     # 임의 1개
print(random.sample(items, 2))  # 중복 없이 2개
random.shuffle(items)           # 제자리 섞기 (반환값 None)
print(items)

 

 

  • os - 파일/디렉토리/환경정보
    운영체제와 상호 작용하기 위한 함수 제공
import os

print(os.getcwd())     # 현재 작업 디렉터리
print(os.listdir(".")) # 현재 폴더의 항목 목록


# 경로다루기 - os.path
import os

p = os.path.join("logs", "winner.txt")  # OS 독립 경로
print(os.path.abspath(p))               # 절대경로
print(os.path.dirname(p))               # 상위 폴더
print(os.path.exists(p))                # 경로 존재 여부
print(os.path.isfile(p), os.path.isdir("logs"))


# 폴더/파일 조작
import os

os.makedirs("logs", exist_ok=True)         # 중첩 폴더 생성(있어도 OK)
os.rename("logs", "logs_backup")           # 이름 변경
os.remove('sample_data/data.csv')          # 파일 삭제

 

 

  • 외부 라이브러리 예시
    • pandas
      • 데이터 조작과 분석을 위한 라이브러리
    • numpy
      • 과학적 계산을 위한 핵심 라이브러리. 다차원 배열과 행렬 연산 지원
    • matplotlib
      • 데이터 시각화를 위한 라이브러리
      • 다양한 그래프와 플롯 생성
      • 수동 설정 시각화 느낌
    • seaborn
      • matplotlib를 기반으로 한 통계용 시각화 라이브러리.
      • matplotlib보다 간편하고 아름다운 시각화 제공
      • 자동 보정 시각화 느낌
    • scikit-learn
      • 머신러닝 알고리즘을 사용할 수 있는 라이브러리.
      • 분류, 회귀, 군집화, 차원 축소 등
    • statsmodels
      • 통계 분석을 위한 라이브러리
      • 회귀분석, 시계열 분석, 비모수 통계 등 다양한 통계 기법 제공
    • scipy
      • 과학기술 및 수학적인 연산을 위한 라이브러리
      • 다양한 과학 및 공학 분야에서 활용됨
      • 선형대수, 최적화, 신호 처리, 통계 분석 등 다양한 기능 제공
    • tensorflow
      • 딥러닝 및 기계학습을 위한 오픈소스 라이브러리. from 구글
      • 그래프 기반의 계산을 통해 수치계산을 수행
      • 신경망을 구축하고 학습 가능
    • pytorch
      • 딥러닝을 위한 오픈소스 라이브러리. from facebook
      • 동적 계산 그래프를 사용하여 신경망 구축하고 학습 가능

 

 

 

파일 입출력

프로그램이 종료되면 메모리(RAM)의 내용이 사라진다.

따라서 코드 결과, 값을 저장해두기 위해 파일을 사용한다. -> 파일 (하드디스크)

 

입력 : 파일에서 값을 불러오기 (가져오기)

출력 : 작업된 값을 파일에 저장하기 (쓰기)

 

f = open("data.txt", "w", encoding="utf-8") # 파일 열기. (파일명 또는 경로, 모드, 인코딩)
f.write("Hello Python!\n")
f.close() # 파일 닫기

 

with open() : 익혀두기!

read, write 모드에서는 with open()을 쓰는게 낫다. 입출력은 컴퓨터가 힘들어하는 작업이므로 오류가 최대한 나지 않게.

with open 은 close()를 해주지 않아도 알아서 파일을 close() 해준다.

예외가 발생하더라도 파일이 안전하게 닫힌다.

with open("data.txt", "w", encoding="utf-8") as f:
    f.write("안녕하세요!\n")
    f.write("파일 입출력 공부 중입니다.")

 

파일 종류

1. csv

  • comma-seperated-values
  • 테이블 같은 형태
  • 데이터가 콤마로 구분되어 있다.
  • 가장 많은 데이터 형태
  • 첫번째 행은 컬럼 정보를 담고있는 행인 경우가 많다.
# csv 예시
name,kor,eng,math
Hannah,90,95,85
Minjun,80,88,92
Yujin,75,85,100
# csv 파일 읽기
with open("scores.csv", "r", encoding="utf-8") as f:
    for line in f:
        print(line.strip().split(","))
# csv 모듈로 읽기
import csv

with open("scores.csv", "r", encoding="utf-8") as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)
        
        
# 출력 - reader()는 한 줄씩 리스트로 반환 
['name', 'kor', 'eng', 'math']
['Hannah', '90', '95', '85']
...

 

# 딕셔너리 형태로 읽기 - DictReader()
import csv

with open("scores.csv", "r", encoding="utf-8") as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row)
        
        
# 출력 - 열 이름(첫 번째 줄)을 자동으로 키로 인식합니다.
{'name': 'Hannah', 'kor': '90', 'eng': '95', 'math': '85'}

 

 

 

2. json

  • JavaScript Object Notation
  • 딕셔너리({}), 리스트([]), 문자열, 숫자 등으로 구성
  • 다른 언어와 쉽게 데이터 교환 가능
  • 실제 API 통신, 웹 개발 등에서 매우 자주 사용됨
# json 쓰기
import json

student = {
    "name": "Hannah",
    "scores": [90, 95, 85],
    "average": 90.0
}

with open("student.json", "w", encoding="utf-8") as f:
    json.dump(student, f, ensure_ascii=False, indent=4)
# json 파일 읽기
with open("students.json", "r", encoding="utf-8") as f:
    data = json.load(f)
    print(data["scores"]["kor"])

 

 


 

참고 링크

https://wikidocs.net/33

 

05-6 표준 라이브러리

[[TODO]] - [v] 잘못된 내용이 있는지 논리적 오류가 없는지 확인해 줘 - [v] 작성한 내용중 어렵게 작성된 부분 또는 설명이 부족한 부분이 있는지 확인해 줘 - [v…

wikidocs.net