dataset(续)/保存特征工程为csv(1)

323 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第十天,点击查看活动详情

总结:此文为12月更文计划第十天第十五篇。

这篇文章在前面首先进行一下昨天dataset的学习,还有一点小的知识没有学习完。

tf.data.Dataset.from_tensor_slices是tf提供的接口,可以将array数据转化为tensor张量来进行运算,并且可以直接将数据进行切皮处理。

针对各种格式数据转化为dataset方法: 输入参数是元组的情况:

x = np.array([[1, 2], [3, 4], [5, 6]])
y = np.array(['cat', 'dog', 'fox'])
#输入的参数是元祖的情况下
dataset3 = tf.data.Dataset.from_tensor_slices((x, y))
print(dataset3)

for item_x, item_y in dataset3:
    print(item_x, item_y)

输出的结果如下:

image.png

输入的参数是字典的情况下:

dataset4 = tf.data.Dataset.from_tensor_slices({"feature1": x,
                                               "label": y})
print(dataset4)
for item in dataset4:
    print(item["feature1"], item["label"])

输出的结果如下:

image.png
a = tf.data.Dataset.range(1, 6)  # ==> [ 1, 2, 3, 4, 5 ]
print(a)
dataset2=a.interleave(lambda x: tf.data.Dataset.from_tensors(x).repeat(6),
            cycle_length=2, block_length=4)  # ==> [1, 1, 1, 1,
                                             #      2, 2, 2, 2,
                                             #      1, 1,
                                             #      2, 2,
                                             #      3, 3, 3, 3,
                                             #      4, 4, 4, 4,
                                             #      3, 3,
                                             #      4, 4,
                                             #      5, 5, 5, 5,
                                             #      5, 5]
print(dataset2)
for item in dataset2:
    print(item)

输出的结果如下:

image.png

下面要把特征工程后的数据存为csv文件

#下面要把特征工程后的数据存为csv文件
output_dir = "generate_csv"
if not os.path.exists(output_dir):
    os.mkdir(output_dir)

def save_to_csv(output_dir, data, name_prefix,
                header=None, n_parts=10):
    #生成文件名
    path_format = os.path.join(output_dir, "{}_{:02d}.csv")
    filenames = []
    #把数据分为n_parts部分,写到文件中去
    for file_idx, row_indices in enumerate(
        np.array_split(np.arange(len(data)), n_parts)):
        print(file_idx,row_indices)
        #生成子文件名
        part_csv = path_format.format(name_prefix, file_idx)
        filenames.append(part_csv)
        with open(part_csv, "wt", encoding="utf-8") as f:
            #先写头部
            if header is not None:
                f.write(header + "\n")
            for row_index in row_indices:
                #把字符串化后的每个字符串用逗号拼接起来
                f.write(",".join(
                    [repr(col) for col in data[row_index]]))
                f.write('\n')
    return filenames
#np.c_把x和y合并起来
train_data = np.c_[x_train_scaled, y_train]
valid_data = np.c_[x_valid_scaled, y_valid]
test_data = np.c_[x_test_scaled, y_test]
#头部,特征,也有目标
header_cols = housing.feature_names + ["MidianHouseValue"]
#把列表变为字符串
header_str = ",".join(header_cols)
print(header_str)
train_filenames = save_to_csv(output_dir, train_data, "train",
                              header_str, n_parts=20)
valid_filenames = save_to_csv(output_dir, valid_data, "valid",
                              header_str, n_parts=10)
test_filenames = save_to_csv(output_dir, test_data, "test",
                             header_str, n_parts=10)

输出的结果如下:

image.png