@SuppressWarnings("deprecation")
  private void createAverages(Date start) {
    if (start.getMinutes() != 30 || start.getSeconds() != 0) {
      // we want to obtain estimates for full hours, i.e. 4:00 or 5:00
      // by calculating averages for 3:30-4:29:59 and 4:30-5:29:59
      throw new RuntimeException("Must start with hh:30:00");
    }

    final int HOURS = 25; // we want to have vehicles for full 24 hours, e.g. 4am to 4am next day

    long startTime = start.getTime() / 1000; // in seconds
    long endTime = startTime + HOURS * 3600; // in seconds

    taxisOverTimeHourlyAverage = new double[HOURS];
    int sum = 0;
    int hour = 0;
    int n = 0;

    for (long t = startTime; t < endTime; t++) {
      if (this.taxisOverTime.containsKey(new Date(t * 1000))) {
        sum += this.taxisOverTime.get(new Date(t * 1000)); // seconds -> milliseconds
        n++;
      }
      if (t % 3600 == 1799) { // t == hh:29:59
        taxisOverTimeHourlyAverage[hour] += (double) sum / n;
        sum = 0;
        hour++;
        n = 0;
      }
    }

    for (int i = 0; i < HOURS; i++) {
      System.out.println(i + " : " + taxisOverTimeHourlyAverage[i]);
    }
  }