뒤죽박죽 데이터분석 일기장
[Python] [5일차] 입출력, 파일 저장 및 출력 본문
이번에는 입출력에 대해서 알아보겠습니다.
간단하게 정리하자면 이 2가지에 대해서 정리하려고 합니다.
1. 램 → 하드
2. 하드 → 램
램과 하드 사이의 입출력 속도를 향상 시키려면 pickle이라는 패키지를 사용해야 합니다.
pickle 패키지를 이용해 입출력하면 직렬화 자동화를 통해 입출력 속도가 빨라진다는 장점이 있습니다.
우선, 램에서 하드로 저장하는 예를 들어 보겠습니다.
class Msg:
def __init__(self, data):
self.data = data
msg = Msg('AI School')
msg.data
# 결과
# 'AI School'
어떤 값을 저장하는 클래스를 생성에 문자열을 하나 넣어보겠습니다.
현재, 이 문자열은 RAM에 저장되어 있습니다. 따라서, 이번에는 파일 형태로 하드에 저장해 보겠습니다.
우선, pickle package를 import 합니다.
아래의 코드를 입력해서 저장해줍니다.
import pickle
# RAM > SSD
with open('msg.pkl', 'wb') as file:
pickle.dump(msg, file)
colab에 지원하는 스페셜 코드를 입력하면 위의 코드를 통해 성공적으로 저장된 걸 확인할 수 있습니다.
%ls
# answer
# msg.pkl sample_data/
이번에는 하드에 저장되어 있는 파일을 램으로 불러오는 경우를 알아 보겠습니다.
아까는 open 함수안에 생성할 파일명과 wr(write binary)라는 문자열 값을 입력했는데, 이번에는 저장되어 있는 파일을 읽어오는 것이기에 rb(read binary)라는 문자열을 입력해 줍니다.
그리고 식별자를 만들어 pickle package 안에 있는 load 함수를 통해 값을 저장합니다.
# RAM < SSD
with open('msg.pkl', 'rb') as file:
load_msg = pickle.load(file)
load_msg라는 식별자에 파일을 저장했습니다. 그리고 안에 있는 값을 불러오려고 하면
load_msg.data
# AI School
위와 같이 정상적으로 값이 저장된 걸 확인할 수 있습니다.
우리는 왜 입출력 단계를 거치는 걸까요? 그냥 RAM 단계에서 저장하고 제때제때 사용하면 되지 않을까요? 지금과 같이 데이터가 적고 기계 학습을 하지 않는 단계에서는 그럴 수 있습니다. 하지만, 데이터가 많아 지고 deep learning 이나 machine learning을 시작하면 입출력 단계를 거치지 않으면 엄청 많은 시간이 소요됩니다.
입출력을 사용할 때, 사용하지 않을 때 단계를 간단하게 설명하자면
입출력 X
학습 데이터 > 모델링(학습:8h) > 모델객체(RAM) > 예측
학습 데이터 > 모델링(학습:8h) > 모델객체(RAM) > 예측
학습 데이터 > 모델링(학습:8h) > 모델객체(RAM) > 예측
한 번 시도할 때 마다 8시간이 소요됩니다.
입출력 O
학습 데이터 > 모델링(학습:8h) > 모델객체(RAM) > 모델저장(SSD) > 예측
모델로드 (SSD > RAM: 5min) > 예측
즉, 학습데이터로 모델링된 모델을 하드에 저장한다면 예측하고 싶을때마다 저장된 모델을 하드에서 출력해 예측을 하게 된다면 훨씬 시간 소요가 적습니다.
이런 이유로 입출력은 데이터 모델링을 할 때 꼭 알고 응용해야 하는 단계입니다.
지금까지 입출력에 대해서 복습해 봤습니다. 혹시 틀린 부분이 있다면 댓글로 남겨주시면 감사하겠습니다. 지금까지 읽어주셔서 감사합니다.
'Python' 카테고리의 다른 글
| [Python] 네이버 데이터랩 API 사용기 및 월별 평균량 구하기 (1/2) (0) | 2023.07.18 |
|---|---|
| [Python] [5일차] 모듈과 패키지 (0) | 2023.01.07 |
| [Python] [5일차] Class 파트 2 (2) | 2023.01.06 |
| [Python] [4일차] Class 파트 1 (0) | 2023.01.05 |
| [Python] [강의 3일차] 함수 (0) | 2023.01.04 |