TensorFlow2.X-CSVファイルを読み取ります(tf.io.decode_csv()を使用)



Tensorflow2 X Read Csv File Use Tf



CSVファイルを読み取ります(tf.io.decode_csv()を使用)

csvファイルを読み取って解析するには、次の2つの部分に分けることができます。

  1. csvの保存場所を読み取り、ファイル名のデータセットを作成します
  2. このデータセットからcsvファイルを読み取って解析し、最後に読み取ったデータをマージしてデータセット全体を形成します。

使用されるいくつかの関数の紹介:
1.tf.data.Dataset.list_files():必要に応じて一致するファイルを一覧表示します。



パラメータ:

list_files(
file_patternshuffle=Noneseed=None )。



  • file_pattern:ファイルマッチングモデル、文字列、または文字列のリスト。例:../*.py現在のフォルダを一覧表示する.pyファイル
  • shuffle=None:リストされたファイルを混合する必要があるかどうか
  • seed=None:ランダムシード。

2. tf.data.TextLineDataset():1つ以上のテキストからデータを読み取り、データセットを形成します。

パラメータ:

tf.data.TextLineDataset(
filenames
compression_type=None,
buffer_size=None
num_parallel_reads=None
)。



  • filenames、:1つ以上のファイル名を含むtf.stringテンソルまたはtf.data.Dataset

  • compression_type=None, :形式はZLIBまたはGZIPです

  • buffer_size=None、:バッファバイト数を決定します

  • num_parallel_reads=None :並行して読み取られたファイルの数。

3.tf.io.decode_csv():csvレコードをテンソルに変換し、各レコードはテンソルをマップします

パラメータ:

tf.io.decode_csv(
records
record_defaults
field_delim=','
use_quote_delim=True
na_value=''
select_cols=None
name=None
)。

  • records:文字列型Tensor。各文字列はcsvのレコード/行であり、すべてのレコードは同じ形式である必要があります
  • record_defaults:特定のタイプのTensorオブジェクトのリスト。使用可能なタイプは、float32、float64、int32、int64、stringです。入力レコードの各列に1つのテンソル、列のスカラーデフォルト値、または列が必要な場合は空のベクトル
  • field_delim=',':オプションの文字列。デフォルトは「、」です。レコード内のフィールドを区切るために使用される文字区切り文字
  • use_quote_delim=True:オプションのブール値。デフォルトはTrueです。 falseの場合、二重引用符は文字列フィールドでは通常の文字として扱われます
  • na_value='':NA / NaNとして認識される追加の文字列
  • select_cols=None:オプションの列インデックスのオプションのソート済みリスト。指定した場合、この列のサブセットのみが解析されて返されます
  • name=None:操作の名前。

戻り値:

Tensorオブジェクトのリスト。これはrecord_defaultsと同じタイプです。各テンソルは、レコードと同じ形状になります。

コード例:

# View Files #train_filenames, valid_filenames, test_filenames are the saved CSV folder names respectively import pprint print('train filenames: ') pprint.pprint(train_filenames) print('valid filenames:') pprint.pprint(valid_filenames) print('test filenames: ') pprint.pprint(test_filenames)

トレインファイル名:
[‘customize_generate_csv train_00.csv’、
‘customize_generate_csv train_01.csv’、
‘customize_generate_csv train_02.csv’、
‘customize_generate_csv train_03.csv’、
‘customize_generate_csv train_04.csv’、
‘customize_generate_csv train_05.csv’、
‘customize_generate_csv train_06.csv’、
‘customize_generate_csv train_07.csv’、
‘customize_generate_csv train_08.csv’、
‘customize_generate_csv train_09.csv’、
‘customize_generate_csv train_10.csv’、
‘customize_generate_csv train_11.csv’、
‘customize_generate_csv train_12.csv’、
‘customize_generate_csv train_13.csv’、
‘customize_generate_csv train_14.csv’、
‘customize_generate_csv train_15.csv’、
‘customize_generate_csv train_16.csv’、
‘customize_generate_csv train_17.csv’、
‘customize_generate_csv train_18.csv’、
‘customize_generate_csv train_19.csv’]
有効なファイル名:
[‘customize_generate_csv valid_00.csv’、
‘customize_generate_csv valid_01.csv’、
‘customize_generate_csv valid_02.csv’、
‘customize_generate_csv valid_03.csv’、
‘customize_generate_csv valid_04.csv’、
‘customize_generate_csv valid_05.csv’、
‘customize_generate_csv valid_06.csv’、
‘customize_generate_csv valid_07.csv’、
‘customize_generate_csv valid_08.csv’、
‘customize_generate_csv valid_09.csv’]
テストファイル名:
[‘customize_generate_csv test_00.csv’、
‘customize_generate_csv test_01.csv’、
‘customize_generate_csv test_02.csv’、
‘customize_generate_csv test_03.csv’、
‘customize_generate_csv test_04.csv’、
‘customize_generate_csv test_05.csv’、
‘customize_generate_csv test_06.csv’、
‘customize_generate_csv test_07.csv’、
‘customize_generate_csv test_08.csv’、
‘customize_generate_csv test_09.csv’]

#tf.data.Data.list_files(): Used to list all files in the directory filename_dataset = tf.data.Dataset.list_files(train_filenames) for filename in filename_dataset: print(filename)

tf.Tensor(b’customize_generate_csv train_09.csv ’、shape =()、dtype = string)
tf.Tensor(b’customize_generate_csv train_12.csv ’、shape =()、dtype = string)
tf.Tensor(b’customize_generate_csv train_17.csv ’、shape =()、dtype = string)
tf.Tensor(b’customize_generate_csv train_19.csv ’、shape =()、dtype = string)
tf.Tensor(b’customize_generate_csv train_08.csv ’、shape =()、dtype = string)
tf.Tensor(b’customize_generate_csv train_07.csv ’、shape =()、dtype = string)
tf.Tensor(b’customize_generate_csv train_03.csv ’、shape =()、dtype = string)
tf.Tensor(b’customize_generate_csv train_16.csv ’、shape =()、dtype = string)
tf.Tensor(b’customize_generate_csv train_15.csv ’、shape =()、dtype = string)
tf.Tensor(b’customize_generate_csv train_10.csv ’、shape =()、dtype = string)
tf.Tensor(b’customize_generate_csv train_11.csv ’、shape =()、dtype = string)
tf.Tensor(b’customize_generate_csv train_01.csv ’、shape =()、dtype = string)
tf.Tensor(b’customize_generate_csv train_18.csv ’、shape =()、dtype = string)
tf.Tensor(b’customize_generate_csv train_00.csv ’、shape =()、dtype = string)
tf.Tensor(b’customize_generate_csv train_06.csv ’、shape =()、dtype = string)
tf.Tensor(b’customize_generate_csv train_02.csv ’、shape =()、dtype = string)
tf.Tensor(b’customize_generate_csv train_14.csv ’、shape =()、dtype = string)
tf.Tensor(b’customize_generate_csv train_04.csv ’、shape =()、dtype = string)
tf.Tensor(b’customize_generate_csv train_13.csv ’、shape =()、dtype = string)
tf.Tensor(b’customize_generate_csv train_05.csv ’、shape =()、dtype = string)

#tf.data.Data.interleave(): Traverse the data in the file and return a dataset dataset #tf.data.TextLineDataset(): Read data from one or more texts to form a dataset n_readers = 5 dataset = filename_dataset.interleave( #skip()Skip the first line of header lambda filename: tf.data.TextLineDataset(filename).skip(1), #The number of parallels is 5, by default one piece of data is taken out of the number of parallels at a time cycle_length = n_readers ) for line in dataset.take(5): print(line.numpy())

b'-0.46357383731798407、-0.9969472983623009、-0.360665182362259、-0.03758824275346155、-0.7513782282717916、-0.11044346277054949、-1.3324374269537262、1.2692798012625406,0
b'-0.27877631514723744,0.26961493546674115、-0.44563685950976084、-0.0952067699106492,1.2317425845839447、-0.027998641115256996、-0.7266744085540406,0.7624447479420658,2.1.1'.7624447479420658.2.1
b'-0.819775446057801、-0.12618576260483452、-0.25010557828795343、0.05971663748529316、-1.1013928489500828、-0.08518203260477861,1.085954931118859、-0.8226570364621759,0.875 '
b’0.6216133377416374,0.34877507508105626,0.09784787148671302、-0.15320100586458107、-0.1957854000052381、-0.04840063829783664,0.7970525684974694、-1.2102367831190115,3.116 ’
b'-0.016009864295304353,0.34877507508105626、-0.14516200231557114、-0.16849220911426202,0.6929859026284989,0.03414743870549869、-0.8524867277601302,0.8469172568288058,2.118

#tf.io.decode_csv(record, record_default): Convert CSV records to tensors. Each column maps to one tensor. sample_str = '1, 2, 3, 4, 5' record_defaults_1 = [tf.constant(0, dtype=tf.int32)] * 5 parsed_fields = tf.io.decode_csv(sample_str, record_defaults_1) print(parsed_fields)

[、、、、、]

record_defaults_2 = [ tf.constant(0, dtype=tf.int32), 0, np.nan, 'hello', tf.constant([]) ] parsed_fields_2 = tf.io.decode_csv(sample_str, record_defaults_2) print(parsed_fields_2)

[、、、、、]

#If the 1. parameter record is empty and record_default is not set to a default value, an error will be reported # 2. If the parameters record and record_default do not match, an error will be reported. try: parsed_fields = tf.io.decode_csv(',,,,', record_defaults_2) except tf.errors.InvalidArgumentError as ex: print(ex)

フィールド4は必須ですが、レコード0にありません。 [Op:DecodeCSV]

try: parsed_fields = tf.io.decode_csv('1, 2, 3, 4, 5, 6, 7', record_defaults_2) except tf.errors.InvalidArgumentError as ex: print(ex)

5つのフィールドが必要ですが、レコード0には7つあります[Op:DecodeCSV]