CSV 데이터 로드
파일에서 tf.data.Dataset로 CSV 데이터를 로드하는 방법의 예이다.
여기에서 사용된 데이터는 Titanic 승객 목록에서 가져온 것이다. 이 모델은 연령, 성별, 티켓 등급 및 단독 여행 여부와 같은 특성을 기반으로 승객의 생존 가능성을 예측한다.
설정
import functools
import numpy as np
import tensorflow as tf
TRAIN_DATA_URL = "https://storage.googleapis.com/tf-datasets/titanic/train.csv"
TEST_DATA_URL = "https://storage.googleapis.com/tf-datasets/titanic/eval.csv"
train_file_path = tf.keras.utils.get_file("train.csv", TRAIN_DATA_URL)
test_file_path = tf.keras.utils.get_file("eval.csv", TEST_DATA_URL)
# Make numpy values easier to read.
np.set_printoptions(precision=3, suppress=True)
데이터 로드하기
시작하려면 CSV 파일의 상단을 보고 형식이 어떻게 지정되는지 본다.
head {train_file_path}
survived,sex,age,n_siblings_spouses,parch,fare,class,deck,embark_town,alone
0,male,22.0,1,0,7.25,Third,unknown,Southampton,n
1,female,38.0,1,0,71.2833,First,C,Cherbourg,n
1,female,26.0,0,0,7.925,Third,unknown,Southampton,y
1,female,35.0,1,0,53.1,First,C,Southampton,n
0,male,28.0,0,0,8.4583,Third,unknown,Queenstown,y
0,male,2.0,3,1,21.075,Third,unknown,Southampton,n
1,female,27.0,0,2,11.1333,Third,unknown,Southampton,n
1,female,14.0,1,0,30.0708,Second,unknown,Cherbourg,n
1,female,4.0,1,1,16.7,Third,G,Southampton,n
pandas를 사용하여 로드하고 NumPy 배열을 TensorFlow에 전달할 수 있다. 큰 파일 세트로 확장해야 하거나 TensorFlow 및 tf.data와 통합되는 로더가 필요한 경우, tf.data.experimental.make_csv_dataset 함수를 사용한다.
명시적으로 식별해야 하는 유일한 열은 모델에서 예측하려는 값을 가진 이니다.
LABEL_COLUMN = 'survived'
LABELS = [0, 1]
이제 파일에서 CSV 데이터를 읽고 데이터세트를 작성한다.
(전체 설명서는 tf.data.experimental.make_csv_dataset를 참조)
def get_dataset(file_path, **kwargs):
dataset = tf.data.experimental.make_csv_dataset(
file_path,
batch_size=5, # Artificially small to make examples easier to show.
label_name=LABEL_COLUMN,
na_value="?",
num_epochs=1,
ignore_errors=True,
**kwargs)
return dataset
raw_train_data = get_dataset(train_file_path)
raw_test_data = get_dataset(test_file_path)
def show_batch(dataset):
for batch, label in dataset.take(1):
for key, value in batch.items():
print("{:20s}: {}".format(key,value.numpy()))
데이터세트의 각 항목은 배치이며 (많은 예제, 많은 레이블 )의 튜플로 표현된다. 예제의 데이터는 행 기반 텐서가 아닌 열 기반 텐서로 구성되며, 각 데이터는 배치 크기 (이 경우 5)만큼 많은 요소가 있다.
show_batch(raw_train_data)
sex : [b'male' b'female' b'male' b'male' b'male']
age : [27. 28. 28. 28. 28.]
n_siblings_spouses : [0 0 0 0 0]
parch : [0 0 0 0 0]
fare : [76.729 13. 0. 8.458 7.896]
class : [b'First' b'Second' b'Second' b'Third' b'Third']
deck : [b'D' b'unknown' b'unknown' b'unknown' b'unknown']
embark_town : [b'Cherbourg' b'Southampton' b'Southampton' b'Queenstown' b'Cherbourg']
alone : [b'y' b'y' b'y' b'y' b'y']
보시다시피 CSV의 열 이름이 지정된다. 데이터세트 생성자가 이들 이름을 자동으로 선택한다. 작업 중인 파일의 첫 번째 줄에 열 이름이 포함되어 있지 않은 경우, 열 이름을 문자열 목록으로 make_csv_dataset 함수의 column_names 인수로 전달한다.
CSV_COLUMNS = ['survived', 'sex', 'age', 'n_siblings_spouses', 'parch', 'fare', 'class', 'deck', 'embark_town', 'alone']
temp_dataset = get_dataset(train_file_path, column_names=CSV_COLUMNS)
show_batch(temp_dataset)
sex : [b'male' b'female' b'male' b'male' b'female']
age : [25. 39. 28. 31. 29.]
n_siblings_spouses : [1 1 0 0 1]
parch : [0 1 0 0 0]
fare : [17.8 79.65 7.896 7.775 26. ]
class : [b'Third' b'First' b'Third' b'Third' b'Second']
deck : [b'unknown' b'E' b'unknown' b'unknown' b'unknown']
embark_town : [b'Southampton' b'Southampton' b'Southampton' b'Southampton'
b'Southampton']
alone : [b'n' b'n' b'y' b'y' b'n']
여기에서는 사용 가능한 모든 열을 사용한다. 데이터세트에서 일부 열을 생략해야 하는 경우, 사용하려는 열의 목록만 작성하고 생성자의 (선택적) select_columns 인수로 전달한다.
SELECT_COLUMNS = ['survived', 'age', 'n_siblings_spouses', 'class', 'deck', 'alone']
temp_dataset = get_dataset(train_file_path, select_columns=SELECT_COLUMNS)
show_batch(temp_dataset)
age : [24. 28. 32. 24. 22.]
n_siblings_spouses : [0 0 0 0 0]
class : [b'Third' b'Second' b'Third' b'Second' b'Third']
deck : [b'unknown' b'unknown' b'unknown' b'unknown' b'unknown']
alone : [b'n' b'y' b'y' b'y' b'y']
https://www.tensorflow.org/tutorials/load_data/csv?hl=ko#%EC%84%A4%EC%A0%95
'DNN with Keras > TensorFlow' 카테고리의 다른 글
[TensorFlow] NumPy 전처리 (0) | 2022.06.16 |
---|---|
[TensorFlow] CSV 전처리 (2) (0) | 2022.06.16 |
[TensorFlow] 이미지 전처리 (2) (0) | 2022.06.16 |
[TensorFlow] 이미지 전처리 (1) (0) | 2022.06.15 |
[TensorFlow] Keras Tuner (0) | 2022.06.15 |