async function getDatasetStats() {
  const featureValues = {};
  featureColumns.forEach(feature => {
    featureValues[feature] = [];
  });
  const labelValues = [];

  const dataset = tf.data.csv(HOUSING_CSV_URL, {
    columnConfigs: {
      [labelColumn]: {
        isLabel: true
      }
    }
  });
  const iterator = await dataset.iterator();
  let count = 0;
  while (true) {
    const item = await iterator.next();
    if (item.done) {
      break;
    }
    featureColumns.forEach(feature => {
      if (item.value.xs[feature] == null) {
        throw new Error(`item #{count} lacks feature ${feature}`);
      }
      featureValues[feature].push(item.value.xs[feature]);
    });
    labelValues.push(item.value.ys[labelColumn]);
    count++;
  }

  return tf.tidy(() => {
    const featureMeans = {};
    const featureStddevs = {};
    featureColumns.forEach(feature => {
      const {mean, variance} = tf.moments(featureValues[feature]);
      featureMeans[feature] = mean.arraySync();
      featureStddevs[feature] = tf.sqrt(variance).arraySync();
    });

    const moments = tf.moments(labelValues);
    const labelMean = moments.mean.arraySync();
    const labelStddev = tf.sqrt(moments.variance).arraySync();
    return {
      count,
      featureMeans,
      featureStddevs,
      labelMean,
      labelStddev
    };
  });
}
Calculate the column-by-column statistics of the housing CSV dataset.

@return An object consisting of the following fields:
  count {number} Number of data rows.
  featureMeans {number[]} Each element is the arithmetic mean over all values
    in a column. Ordered by the feature columns in the CSV dataset.
  featureStddevs {number[]} Each element is the standard deviation over all
    values in a column. Ordered by the columsn in the in the CSV dataset.
  labelMean {number} The arithmetic mean of the label column.
  labeStddev {number} The standard deviation of the albel column.