본문 바로가기
DNN with Keras/TensorFlow

[TensorFlow] CSV 전처리 (1)

by goatlab 2022. 6. 16.
728x90
반응형
SMALL

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 

 

CSV 데이터 로드  |  TensorFlow Core

Google I/O는 끝입니다! TensorFlow 세션 확인하기 세션 보기 CSV 데이터 로드 이 튜토리얼은 파일에서 tf.data.Dataset로 CSV 데이터를 로드하는 방법의 예를 제공합니다. 이 튜토리얼에서 사용된 데이터는

www.tensorflow.org

 

728x90
반응형
LIST

'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