kyejin0412 님의 블로그
[TIL] Week 4-3 파이썬 라이브러리, 파일 입출력 본문
오늘은 라이브세션 외에는 코드카타에 집중했다.
개념이 중요하지만 외우기가 귀찮아서 문제푸는 시간이 즐겁다. 그동안 문제를 많이 풀었다보니 코드카타의 문제 리스트 초반 부분은 푼 문제가 많아서, 그냥 내 페이스대로 풀고 있다.
파이썬도 슬슬 시작해보았다. 아직은 입문 문제라 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
- 동적 계산 그래프를 사용하여 신경망 구축하고 학습 가능
- pandas
파일 입출력
프로그램이 종료되면 메모리(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"])
참고 링크
05-6 표준 라이브러리
[[TODO]] - [v] 잘못된 내용이 있는지 논리적 오류가 없는지 확인해 줘 - [v] 작성한 내용중 어렵게 작성된 부분 또는 설명이 부족한 부분이 있는지 확인해 줘 - [v…
wikidocs.net
'내일배움캠프-데이터분석' 카테고리의 다른 글
| [TIL] Week 6-1 기초 프로젝트 (0) | 2025.11.24 |
|---|---|
| [Week 5-4] 파이썬 결측치/이상치 처리, 기초 프로젝트 주제 정하기 (0) | 2025.11.20 |
| [TIL] Week 4-2 파이썬 세트, 컴프리헨션, 예외처리 (0) | 2025.11.11 |
| [TIL] Week 4-1 파이썬 복습 (1) | 2025.11.10 |
| [TIL] Week 3-5 데이터 리터러시 (1) | 2025.11.07 |