From 3c87f7ca13f346025e988187bd8ac7ed526b5941 Mon Sep 17 00:00:00 2001 From: tobe Date: Wed, 13 Sep 2017 14:33:58 +0800 Subject: [PATCH] Add script to generate and print boston housing dataset --- data/boston_housing/generate_csv_tfrecords.py | 44 +++++ data/boston_housing/print_csv_tfrecords.py | 34 ++++ data/boston_housing/test.csv | 174 ------------------ data/boston_housing/train.csv.tfrecords | Bin 0 -> 35631 bytes 4 files changed, 78 insertions(+), 174 deletions(-) create mode 100755 data/boston_housing/generate_csv_tfrecords.py create mode 100755 data/boston_housing/print_csv_tfrecords.py delete mode 100644 data/boston_housing/test.csv create mode 100644 data/boston_housing/train.csv.tfrecords diff --git a/data/boston_housing/generate_csv_tfrecords.py b/data/boston_housing/generate_csv_tfrecords.py new file mode 100755 index 0000000..74fa386 --- /dev/null +++ b/data/boston_housing/generate_csv_tfrecords.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python + +import tensorflow as tf +import os + + +def generate_tfrecords(input_filename, output_filename): + print("Start to convert {} to {}".format(input_filename, output_filename)) + writer = tf.python_io.TFRecordWriter(output_filename) + + index = 0 + for line in open(input_filename, "r"): + index += 1 + + # Ignore the first line + if index == 1: + continue + + data = line.split(",") + label = float(data[14]) + features = [float(i) for i in data[1:14]] + + example = tf.train.Example(features=tf.train.Features(feature={ + "label": + tf.train.Feature(float_list=tf.train.FloatList(value=[label])), + "features": + tf.train.Feature(float_list=tf.train.FloatList(value=features)), + })) + writer.write(example.SerializeToString()) + + writer.close() + print("Successfully convert {} to {}".format(input_filename, + output_filename)) + + +def main(): + current_path = os.getcwd() + for filename in os.listdir(current_path): + if filename.startswith("") and filename.endswith(".csv"): + generate_tfrecords(filename, filename + ".tfrecords") + + +if __name__ == "__main__": + main() diff --git a/data/boston_housing/print_csv_tfrecords.py b/data/boston_housing/print_csv_tfrecords.py new file mode 100755 index 0000000..6864f6c --- /dev/null +++ b/data/boston_housing/print_csv_tfrecords.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python + +import tensorflow as tf +import os + + +def print_tfrecords(input_filename): + max_print_number = 100 + current_print_number = 0 + + for serialized_example in tf.python_io.tf_record_iterator(input_filename): + # Get serialized example from file + example = tf.train.Example() + example.ParseFromString(serialized_example) + label = example.features.feature["label"].float_list.value + features = example.features.feature["features"].float_list.value + print("Number: {}, label: {}, features: {}".format(current_print_number, + label, features)) + + # Return when reaching max print number + current_print_number += 1 + if current_print_number > max_print_number: + exit() + + +def main(): + current_path = os.getcwd() + tfrecords_file_name = "train.csv.tfrecords" + input_filename = os.path.join(current_path, tfrecords_file_name) + print_tfrecords(input_filename) + + +if __name__ == "__main__": + main() diff --git a/data/boston_housing/test.csv b/data/boston_housing/test.csv deleted file mode 100644 index c45592e..0000000 --- a/data/boston_housing/test.csv +++ /dev/null @@ -1,174 +0,0 @@ -ID,crim,zn,indus,chas,nox,rm,age,dis,rad,tax,ptratio,black,lstat -3,0.02729,0,7.07,0,0.469,7.185,61.1,4.9671,2,242,17.8,392.83,4.03 -6,0.02985,0,2.18,0,0.458,6.43,58.7,6.0622,3,222,18.7,394.12,5.21 -8,0.14455,12.5,7.87,0,0.524,6.172,96.1,5.9505,5,311,15.2,396.9,19.15 -9,0.21124,12.5,7.87,0,0.524,5.631,100,6.0821,5,311,15.2,386.63,29.93 -10,0.17004,12.5,7.87,0,0.524,6.004,85.9,6.5921,5,311,15.2,386.71,17.1 -18,0.7842,0,8.14,0,0.538,5.99,81.7,4.2579,4,307,21,386.75,14.67 -20,0.7258,0,8.14,0,0.538,5.727,69.5,3.7965,4,307,21,390.95,11.28 -25,0.75026,0,8.14,0,0.538,5.924,94.1,4.3996,4,307,21,394.33,16.3 -26,0.84054,0,8.14,0,0.538,5.599,85.7,4.4546,4,307,21,303.42,16.51 -27,0.67191,0,8.14,0,0.538,5.813,90.3,4.682,4,307,21,376.88,14.81 -29,0.77299,0,8.14,0,0.538,6.495,94.4,4.4547,4,307,21,387.94,12.8 -30,1.00245,0,8.14,0,0.538,6.674,87.3,4.239,4,307,21,380.23,11.98 -33,1.38799,0,8.14,0,0.538,5.95,82,3.99,4,307,21,232.6,27.71 -34,1.15172,0,8.14,0,0.538,5.701,95,3.7872,4,307,21,358.77,18.35 -36,0.06417,0,5.96,0,0.499,5.933,68.2,3.3603,5,279,19.2,396.9,9.68 -37,0.09744,0,5.96,0,0.499,5.841,61.4,3.3779,5,279,19.2,377.56,11.41 -38,0.08014,0,5.96,0,0.499,5.85,41.5,3.9342,5,279,19.2,396.9,8.77 -42,0.12744,0,6.91,0,0.448,6.77,2.9,5.7209,3,233,17.9,385.41,4.84 -49,0.25387,0,6.91,0,0.448,5.399,95.3,5.87,3,233,17.9,396.9,30.81 -53,0.0536,21,5.64,0,0.439,6.511,21.1,6.8147,4,243,16.8,396.9,5.28 -60,0.10328,25,5.13,0,0.453,5.927,47.2,6.932,8,284,19.7,396.9,9.22 -63,0.11027,25,5.13,0,0.453,6.456,67.8,7.2255,8,284,19.7,396.9,6.73 -70,0.12816,12.5,6.07,0,0.409,5.885,33,6.498,4,345,18.9,396.9,8.79 -72,0.15876,0,10.81,0,0.413,5.961,17.5,5.2873,4,305,19.2,376.94,9.88 -79,0.05646,0,12.83,0,0.437,6.232,53.7,5.0141,5,398,18.7,386.4,12.34 -80,0.08387,0,12.83,0,0.437,5.874,36.6,4.5026,5,398,18.7,396.06,9.1 -83,0.03659,25,4.86,0,0.426,6.302,32.2,5.4007,4,281,19,396.9,6.72 -92,0.03932,0,3.41,0,0.489,6.405,73.9,3.0921,2,270,17.8,393.55,8.2 -93,0.04203,28,15.04,0,0.464,6.442,53.6,3.6659,4,270,18.2,395.01,8.16 -96,0.12204,0,2.89,0,0.445,6.625,57.8,3.4952,2,276,18,357.98,6.65 -98,0.12083,0,2.89,0,0.445,8.069,76,3.4952,2,276,18,396.9,4.21 -99,0.08187,0,2.89,0,0.445,7.82,36.9,3.4952,2,276,18,393.53,3.57 -100,0.0686,0,2.89,0,0.445,7.416,62.5,3.4952,2,276,18,396.9,6.19 -105,0.1396,0,8.56,0,0.52,6.167,90,2.421,5,384,20.9,392.69,12.33 -106,0.13262,0,8.56,0,0.52,5.851,96.7,2.1069,5,384,20.9,394.05,16.47 -111,0.10793,0,8.56,0,0.52,6.195,54.4,2.7778,5,384,20.9,393.49,13 -113,0.12329,0,10.01,0,0.547,5.913,92.9,2.3534,6,432,17.8,394.95,16.21 -114,0.22212,0,10.01,0,0.547,6.092,95.4,2.548,6,432,17.8,396.9,17.09 -116,0.17134,0,10.01,0,0.547,5.928,88.2,2.4631,6,432,17.8,344.91,15.76 -126,0.16902,0,25.65,0,0.581,5.986,88.4,1.9929,2,188,19.1,385.02,14.81 -130,0.88125,0,21.89,0,0.624,5.637,94.7,1.9799,4,437,21.2,396.9,18.34 -131,0.34006,0,21.89,0,0.624,6.458,98.9,2.1185,4,437,21.2,395.04,12.6 -133,0.59005,0,21.89,0,0.624,6.372,97.9,2.3274,4,437,21.2,385.76,11.12 -136,0.55778,0,21.89,0,0.624,6.335,98.2,2.1107,4,437,21.2,394.67,16.96 -141,0.2909,0,21.89,0,0.624,6.174,93.6,1.6119,4,437,21.2,388.08,24.16 -144,4.0974,0,19.58,0,0.871,5.468,100,1.4118,5,403,14.7,396.9,26.42 -145,2.77974,0,19.58,0,0.871,4.903,97.8,1.3459,5,403,14.7,396.9,29.29 -147,2.15505,0,19.58,0,0.871,5.628,100,1.5166,5,403,14.7,169.27,16.65 -152,1.49632,0,19.58,0,0.871,5.404,100,1.5916,5,403,14.7,341.6,13.28 -153,1.12658,0,19.58,1,0.871,5.012,88,1.6102,5,403,14.7,343.28,12.12 -156,3.53501,0,19.58,1,0.871,6.152,82.6,1.7455,5,403,14.7,88.01,15.02 -158,1.22358,0,19.58,0,0.605,6.943,97.4,1.8773,5,403,14.7,363.43,4.59 -163,1.83377,0,19.58,1,0.605,7.802,98.2,2.0407,5,403,14.7,389.61,1.92 -169,2.3004,0,19.58,0,0.605,6.319,96.1,2.1,5,403,14.7,297.09,11.1 -185,0.08308,0,2.46,0,0.488,5.604,89.8,2.9879,3,193,17.8,391,13.98 -186,0.06047,0,2.46,0,0.488,6.153,68.8,3.2797,3,193,17.8,387.11,13.15 -189,0.12579,45,3.44,0,0.437,6.556,29.1,4.5667,5,398,15.2,382.84,4.56 -196,0.01381,80,0.46,0,0.422,7.875,32,5.6484,4,255,14.4,394.23,2.97 -197,0.04011,80,1.52,0,0.404,7.287,34.1,7.309,2,329,12.6,396.9,4.08 -199,0.03768,80,1.52,0,0.404,7.274,38.3,7.309,2,329,12.6,392.2,6.62 -200,0.0315,95,1.47,0,0.403,6.975,15.3,7.6534,3,402,17,396.9,4.56 -203,0.02177,82.5,2.03,0,0.415,7.61,15.7,6.27,2,348,14.7,395.38,3.11 -208,0.25199,0,10.59,0,0.489,5.783,72.7,4.3549,4,277,18.6,389.43,18.06 -210,0.43571,0,10.59,1,0.489,5.344,100,3.875,4,277,18.6,396.9,23.09 -211,0.17446,0,10.59,1,0.489,5.96,92.1,3.8771,4,277,18.6,393.25,17.27 -213,0.21719,0,10.59,1,0.489,5.807,53.8,3.6526,4,277,18.6,390.94,16.03 -216,0.19802,0,10.59,0,0.489,6.182,42.4,3.9454,4,277,18.6,393.63,9.47 -218,0.07013,0,13.89,0,0.55,6.642,85.1,3.4211,5,276,16.4,392.78,9.69 -219,0.11069,0,13.89,1,0.55,5.951,93.8,2.8893,5,276,16.4,396.9,17.92 -220,0.11425,0,13.89,1,0.55,6.373,92.4,3.3633,5,276,16.4,393.74,10.5 -221,0.35809,0,6.2,1,0.507,6.951,88.5,2.8617,8,307,17.4,391.7,9.71 -229,0.29819,0,6.2,0,0.504,7.686,17,3.3751,8,307,17.4,377.51,3.92 -232,0.46296,0,6.2,0,0.504,7.412,76.9,3.6715,8,307,17.4,376.14,5.25 -238,0.51183,0,6.2,0,0.507,7.358,71.6,4.148,8,307,17.4,390.07,4.73 -239,0.08244,30,4.93,0,0.428,6.481,18.5,6.1899,6,300,16.6,379.41,6.36 -240,0.09252,30,4.93,0,0.428,6.606,42.2,6.1899,6,300,16.6,383.78,7.37 -242,0.10612,30,4.93,0,0.428,6.095,65.1,6.3361,6,300,16.6,394.62,12.4 -246,0.19133,22,5.86,0,0.431,5.605,70.2,7.9549,7,330,19.1,389.13,18.46 -248,0.19657,22,5.86,0,0.431,6.226,79.2,8.0555,7,330,19.1,376.14,10.15 -253,0.08221,22,5.86,0,0.431,6.957,6.8,8.9067,7,330,19.1,386.09,3.53 -255,0.04819,80,3.64,0,0.392,6.108,32,9.2203,1,315,16.4,392.89,6.57 -256,0.03548,80,3.64,0,0.392,5.876,19.1,9.2203,1,315,16.4,395.18,9.25 -257,0.01538,90,3.75,0,0.394,7.454,34.2,6.3361,3,244,15.9,386.34,3.11 -258,0.61154,20,3.97,0,0.647,8.704,86.9,1.801,5,264,13,389.7,5.12 -259,0.66351,20,3.97,0,0.647,7.333,100,1.8946,5,264,13,383.29,7.79 -260,0.65665,20,3.97,0,0.647,6.842,100,2.0107,5,264,13,391.93,6.9 -268,0.57834,20,3.97,0,0.575,8.297,67,2.4216,5,264,13,384.54,7.44 -270,0.09065,20,6.96,1,0.464,5.92,61.5,3.9175,3,223,18.6,391.34,13.65 -271,0.29916,20,6.96,0,0.464,5.856,42.1,4.429,3,223,18.6,388.65,13 -276,0.09604,40,6.41,0,0.447,6.854,42.8,4.2673,4,254,17.6,396.9,2.98 -277,0.10469,40,6.41,1,0.447,7.267,49,4.7872,4,254,17.6,389.25,6.05 -278,0.06127,40,6.41,1,0.447,6.826,27.6,4.8628,4,254,17.6,393.45,4.16 -279,0.07978,40,6.41,0,0.447,6.482,32.1,4.1403,4,254,17.6,396.9,7.19 -281,0.03578,20,3.33,0,0.4429,7.82,64.5,4.6947,5,216,14.9,387.31,3.76 -288,0.03871,52.5,5.32,0,0.405,6.209,31.3,7.3172,6,293,16.6,396.9,7.14 -290,0.04297,52.5,5.32,0,0.405,6.565,22.9,7.3172,6,293,16.6,371.72,9.51 -292,0.07886,80,4.95,0,0.411,7.148,27.7,5.1167,4,245,19.2,396.9,3.56 -295,0.08199,0,13.92,0,0.437,6.009,42.3,5.5027,4,289,16,396.9,10.4 -296,0.12932,0,13.92,0,0.437,6.678,31.1,5.9604,4,289,16,396.9,6.27 -299,0.06466,70,2.24,0,0.4,6.345,20.1,7.8278,5,358,14.8,368.24,4.97 -300,0.05561,70,2.24,0,0.4,7.041,10,7.8278,5,358,14.8,371.58,4.74 -301,0.04417,70,2.24,0,0.4,6.871,47.4,7.8278,5,358,14.8,390.86,6.07 -308,0.04932,33,2.18,0,0.472,6.849,70.3,3.1827,7,222,18.4,396.9,7.53 -314,0.26938,0,9.9,0,0.544,6.266,82.8,3.2628,4,304,18.4,393.39,7.9 -315,0.3692,0,9.9,0,0.544,6.567,87.3,3.6023,4,304,18.4,395.69,9.28 -320,0.47547,0,9.9,0,0.544,6.113,58.8,4.0019,4,304,18.4,396.23,12.73 -322,0.18159,0,7.38,0,0.493,6.376,54.3,4.5404,5,287,19.6,396.9,6.87 -323,0.35114,0,7.38,0,0.493,6.041,49.9,4.7211,5,287,19.6,396.9,7.7 -324,0.28392,0,7.38,0,0.493,5.708,74.3,4.7211,5,287,19.6,391.13,11.74 -327,0.30347,0,7.38,0,0.493,6.312,28.9,5.4159,5,287,19.6,396.9,6.15 -330,0.06724,0,3.24,0,0.46,6.333,17.2,5.2146,4,430,16.9,375.21,7.34 -332,0.05023,35,6.06,0,0.4379,5.706,28.4,6.6407,1,304,16.9,394.02,12.43 -333,0.03466,35,6.06,0,0.4379,6.031,23.3,6.6407,1,304,16.9,362.25,7.83 -336,0.03961,0,5.19,0,0.515,6.037,34.5,5.9853,5,224,20.2,396.9,8.01 -338,0.03041,0,5.19,0,0.515,5.895,59.6,5.615,5,224,20.2,394.81,10.56 -346,0.03113,0,4.39,0,0.442,6.014,48.5,8.0136,3,352,18.8,385.64,10.53 -347,0.06162,0,4.39,0,0.442,5.898,52.3,8.0136,3,352,18.8,364.61,12.67 -351,0.06211,40,1.25,0,0.429,6.49,44.4,8.7921,1,335,19.7,396.9,5.98 -352,0.0795,60,1.69,0,0.411,6.579,35.9,10.7103,4,411,18.3,370.78,5.49 -354,0.01709,90,2.02,0,0.41,6.728,36.1,12.1265,5,187,17,384.46,4.5 -355,0.04301,80,1.91,0,0.413,5.663,21.9,10.5857,4,334,22,382.8,8.05 -356,0.10659,80,1.91,0,0.413,5.936,19.5,10.5857,4,334,22,376.04,5.57 -362,3.83684,0,18.1,0,0.77,6.251,91.1,2.2955,24,666,20.2,350.65,14.19 -364,4.22239,0,18.1,1,0.77,5.803,89,1.9047,24,666,20.2,353.04,14.64 -365,3.47428,0,18.1,1,0.718,8.78,82.9,1.9047,24,666,20.2,354.55,5.29 -370,5.66998,0,18.1,1,0.631,6.683,96.8,1.3567,24,666,20.2,375.33,3.73 -376,19.6091,0,18.1,0,0.671,7.313,97.9,1.3163,24,666,20.2,396.9,13.44 -379,23.6482,0,18.1,0,0.671,6.38,96.2,1.3861,24,666,20.2,396.9,23.69 -380,17.8667,0,18.1,0,0.671,6.223,100,1.3861,24,666,20.2,393.74,21.78 -381,88.9762,0,18.1,0,0.671,6.968,91.9,1.4165,24,666,20.2,396.9,17.21 -382,15.8744,0,18.1,0,0.671,6.545,99.1,1.5192,24,666,20.2,396.9,21.08 -386,16.8118,0,18.1,0,0.7,5.277,98.1,1.4261,24,666,20.2,396.9,30.81 -389,14.3337,0,18.1,0,0.7,4.88,100,1.5895,24,666,20.2,372.92,30.62 -391,6.96215,0,18.1,0,0.7,5.713,97,1.9265,24,666,20.2,394.43,17.11 -394,8.64476,0,18.1,0,0.693,6.193,92.6,1.7912,24,666,20.2,396.9,15.17 -396,8.71675,0,18.1,0,0.693,6.471,98.8,1.7257,24,666,20.2,391.98,17.12 -398,7.67202,0,18.1,0,0.693,5.747,98.9,1.6334,24,666,20.2,393.1,19.92 -400,9.91655,0,18.1,0,0.693,5.852,77.8,1.5004,24,666,20.2,338.16,29.97 -403,9.59571,0,18.1,0,0.693,6.404,100,1.639,24,666,20.2,376.11,20.31 -405,41.5292,0,18.1,0,0.693,5.531,85.4,1.6074,24,666,20.2,329.46,27.38 -406,67.9208,0,18.1,0,0.693,5.683,100,1.4254,24,666,20.2,384.97,22.98 -407,20.7162,0,18.1,0,0.659,4.138,100,1.1781,24,666,20.2,370.22,23.34 -410,14.4383,0,18.1,0,0.597,6.852,100,1.4655,24,666,20.2,179.36,19.78 -411,51.1358,0,18.1,0,0.597,5.757,100,1.413,24,666,20.2,2.6,10.11 -412,14.0507,0,18.1,0,0.597,6.657,100,1.5275,24,666,20.2,35.05,21.22 -413,18.811,0,18.1,0,0.597,4.628,100,1.5539,24,666,20.2,28.79,34.37 -417,10.8342,0,18.1,0,0.679,6.782,90.8,1.8195,24,666,20.2,21.57,25.79 -421,11.0874,0,18.1,0,0.718,6.411,100,1.8589,24,666,20.2,318.75,15.02 -422,7.02259,0,18.1,0,0.718,6.006,95.3,1.8746,24,666,20.2,319.98,15.7 -423,12.0482,0,18.1,0,0.614,5.648,87.6,1.9512,24,666,20.2,291.55,14.1 -424,7.05042,0,18.1,0,0.614,6.103,85.1,2.0218,24,666,20.2,2.52,23.29 -427,12.2472,0,18.1,0,0.584,5.837,59.7,1.9976,24,666,20.2,24.65,15.69 -431,8.49213,0,18.1,0,0.584,6.348,86.1,2.0527,24,666,20.2,83.45,17.64 -436,11.1604,0,18.1,0,0.74,6.629,94.6,2.1247,24,666,20.2,109.85,23.27 -437,14.4208,0,18.1,0,0.74,6.461,93.3,2.0026,24,666,20.2,27.49,18.05 -439,13.6781,0,18.1,0,0.74,5.935,87.9,1.8206,24,666,20.2,68.95,34.02 -447,6.28807,0,18.1,0,0.74,6.341,96.4,2.072,24,666,20.2,318.01,17.79 -450,7.52601,0,18.1,0,0.713,6.417,98.3,2.185,24,666,20.2,304.21,19.31 -451,6.71772,0,18.1,0,0.713,6.749,92.6,2.3236,24,666,20.2,0.32,17.44 -455,9.51363,0,18.1,0,0.713,6.728,94.1,2.4961,24,666,20.2,6.68,18.71 -457,4.66883,0,18.1,0,0.713,5.976,87.9,2.5806,24,666,20.2,10.48,19.01 -471,4.34879,0,18.1,0,0.58,6.167,84,3.0334,24,666,20.2,396.9,16.29 -474,4.64689,0,18.1,0,0.614,6.98,67.6,2.5329,24,666,20.2,374.68,11.66 -476,6.39312,0,18.1,0,0.584,6.162,97.4,2.206,24,666,20.2,302.76,24.1 -483,5.73116,0,18.1,0,0.532,7.061,77,3.4106,24,666,20.2,395.28,7.01 -486,3.67367,0,18.1,0,0.583,6.312,51.9,3.9917,24,666,20.2,388.62,10.58 -490,0.18337,0,27.74,0,0.609,5.414,98.3,1.7554,4,711,20.1,344.05,23.97 -495,0.27957,0,9.69,0,0.585,5.926,42.6,2.3817,6,391,19.2,396.9,13.59 -496,0.17899,0,9.69,0,0.585,5.67,28.8,2.7986,6,391,19.2,393.29,17.6 -497,0.2896,0,9.69,0,0.585,5.39,72.9,2.7986,6,391,19.2,396.9,21.14 -499,0.23912,0,9.69,0,0.585,6.019,65.3,2.4091,6,391,19.2,396.9,12.92 -501,0.22438,0,9.69,0,0.585,6.027,79.7,2.4982,6,391,19.2,396.9,14.33 -505,0.10959,0,11.93,0,0.573,6.794,89.3,2.3889,1,273,21,393.45,6.48 diff --git a/data/boston_housing/train.csv.tfrecords b/data/boston_housing/train.csv.tfrecords new file mode 100644 index 0000000000000000000000000000000000000000..877126db61cb0c6c8a1903a5e0f86c5d59949811 GIT binary patch literal 35631 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 N_~CNWX