Teaching:TUW - UE InfoVis WS 2006/07 - Gruppe 02 - Aufgabe 3 - Prototype
Tile Map Prototype
authors
Gruppe 02 (Diesenreiter, Weixelbaumer, Felkel, Maier)
architecture
description
images
code
class
//@author: simon diesenreiter (sd) //@year: 2006 //@class TileMap: main class import java.util.Date; import java.text.SimpleDateFormat; import java.text.DateFormat; import prefuse.data.parser.DateTimeParser; import prefuse.data.parser.DateParser; import prefuse.data.parser.TimeParser; import prefuse.data.parser.DoubleParser; import prefuse.data.parser.DataParser; import prefuse.data.parser.ParserFactory; import prefuse.data.io.CSVTableReader; import prefuse.data.io.TableReadListener; import prefuse.data.Table; import prefuse.data.io.DataIOException; import prefuse.data.io.DelimitedTextTableReader; import prefuse.data.Schema; import prefuse.Visualization; import prefuse.render.DefaultRendererFactory; import prefuse.render.RendererFactory; import prefuse.render.AxisRenderer; import prefuse.render.Renderer; import prefuse.render.ShapeRenderer; import prefuse.render.LabelRenderer; import java.io.FileInputStream; import java.io.File; import java.io.FileNotFoundException; import java.util.Calendar; //imports for step4: actions import prefuse.action.layout.AxisLayout; import prefuse.Constants; import prefuse.visual.expression.VisiblePredicate; import prefuse.action.assignment.ColorAction; import prefuse.visual.VisualItem; import prefuse.util.ColorLib; import prefuse.action.assignment.DataShapeAction; import prefuse.action.ActionList; import prefuse.action.RepaintAction; import prefuse.action.assignment.DataColorAction; import java.awt.Color; import prefuse.action.layout.AxisLabelLayout; import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D.Double; //imports for step5: display import prefuse.Display; import prefuse.controls.ZoomControl; import prefuse.controls.PanControl; import javax.swing.BorderFactory; import prefuse.controls.ToolTipControl; //imports for step6: launching the Application import javax.swing.JFrame; //misc imports import prefuse.visual.VisualTable; import prefuse.data.expression.Predicate; import prefuse.data.expression.parser.ExpressionParser; import prefuse.visual.expression.InGroupPredicate; import prefuse.controls.DragControl; public class TileMap { //TABLE-STRINGS private static final String group = "data"; private static final String abfluss = "Abfluss"; private static final String day = "Day"; private static final String week = "Week"; private static final String month = "Month"; private static final String year = "Year"; private static final String dayLabel = "DayLabel"; private static final String weekLabel = "WeekLabel"; private static final String monthLabel = "MonthLabel"; private static final String yearLabel = "YearLabel"; //ACTION-STRINGS private static final String xAction = "xAction"; private static final String yAction = "yAction"; private static final String colorAction = "colorAction"; private static final String dayLAction = "dayLAction"; private static final String monthLAction = "monthLAction"; private static final String yearLAction = "yearLAction"; private static final String drawAction = "drawAction"; private static final int tilesize = 10; //tilesize in pixel private static final int binsize = 5; //number of bins for color-coding private static boolean logFlag = false; // a flag for setting linear or logarithmic scale // private static final String absoluteFilePath = "D:\\infovis_eclipse_workspace\\resources\\abfluss_mittersill_csv_1jahr.csv"; private static final String fileURL = "http://stud3.tuwien.ac.at/~e9926534/abfluss_mittersill_csv_1jahr.csv"; public static void main(String[] args){ //1: read the data from a file******************************************************************* //set up the Parser: DateTimeParser dateTimeParser = new DateTimeParser(); DoubleParser doubleParser = new DoubleParser(); DataParser[] dP2 = new DataParser[]{dateTimeParser, doubleParser}; ParserFactory pF2 = new ParserFactory(dP2); // File file = new File(absoluteFilePath); DelimitedTextTableReader reader = new DelimitedTextTableReader("[;]", pF2); Table table = new Table(); try{ // table = reader.readTable(absoluteFilePath); table = reader.readTable(fileURL); System.out.println("InfoVisMain.main(): reading file: " + fileURL); } catch(DataIOException ex){ System.out.println("InfoVisMain.main(): error reading the file: " + ex.getMessage()); } //add additional columns to the table table.addColumn(day, int.class); table.addColumn(week, int.class); table.addColumn(year, int.class); table.addColumn(dayLabel, String.class); table.addColumn(monthLabel, String.class); table.addColumn(yearLabel, String.class); SimpleDateFormat sdfDay = new SimpleDateFormat("EEE");//day of week SimpleDateFormat sdfMonth = new SimpleDateFormat("MMM"); SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy"); for (int i=0; i<table.getRowCount(); i++){ if(table.canGetDate(table.getColumnName(0))){ Date tmpDate = table.getDate(i, 0); Calendar myCalendar = Calendar.getInstance(); myCalendar.setTime(tmpDate); table.setInt(i, day, myCalendar.get(Calendar.DAY_OF_WEEK)); //introduce an extra week "0" for the case of the beginning of a year where days belong //to the old-year's week int tmpWeek = myCalendar.get(Calendar.WEEK_OF_YEAR); int tmpMonth = myCalendar.get(Calendar.MONTH); if(tmpMonth==0 & tmpWeek==53){ table.setInt(i, week, 0); //if (month==JAN AND week==53 -> week=0) } else{ table.setInt(i, week, tmpWeek); } table.setInt(i, year, myCalendar.get(Calendar.YEAR)); table.setString(i, dayLabel, sdfDay.format(tmpDate)); table.setString(i, monthLabel, sdfMonth.format(tmpDate)); table.setString(i, yearLabel, sdfYear.format(tmpDate)); } } //remove year 1978: Predicate inYear1977 = (Predicate)ExpressionParser.parse(year + "==1977"); Predicate inYear1978 = (Predicate)ExpressionParser.parse(year + "==1978"); // table.remove(inYear1978); //OUTPUT: table properties System.out.println("Table_properties: " + table.toString()); //OUTPUT: table names for (int j=0; j<table.getColumnCount(); j++){ System.out.print(table.getColumnName(j).toString() + "\t"); if(j==0)System.out.print("\t");//this is only for nicer output because that string is so long ;) } //OUTPUT: table values System.out.print("\n"); for(int i=0; i<table.getRowCount(); i++){ for (int j=0; j<table.getColumnCount(); j++){ System.out.print(table.get(i, j).toString() + "\t"); if(j==5 || j==6)System.out.print("\t"); //this is only for nicer output too } System.out.print("\n"); } //2: create a Visualisation... ********************************************************************* Visualization vis = new Visualization(); vis.add(group, table); //-- 3. the renderers and renderer factory --------------------------- vis.setRendererFactory(new RendererFactory() { ShapeRenderer shapeR = new ShapeRenderer(tilesize); Renderer yaxisR = new AxisRenderer(Constants.CENTER, Constants.CENTER); Renderer xaxisR = new AxisRenderer(Constants.CENTER, Constants.CENTER); public Renderer getRenderer(VisualItem item) { return item.isInGroup(TileMap.dayLabel) ? yaxisR : item.isInGroup(TileMap.monthLabel) ? xaxisR : shapeR; } }); // -- 4. the processing actions -------------------------------------- // InGroupPredicate in1977 = new InGroupPredicate("1977"); //the boundingBoxes for the labels and display Rectangle2D yearLabelB = new Rectangle2D.Double(0, 0, 50, 50); Rectangle2D dayLabelB = new Rectangle2D.Double(0, 50, 50, tilesize*7); Rectangle2D monthLabelB = new Rectangle2D.Double(50, 0, tilesize*53, 50); Rectangle2D tileMapB = new Rectangle2D.Double(50, 50, tilesize*53, tilesize*7); //set up which values over which axis to be displayed AxisLayout x_axis = new AxisLayout(group, week, Constants.X_AXIS); x_axis.setLayoutBounds(tileMapB); vis.putAction(xAction, x_axis); // AxisLayout y_axis = new AxisLayout(group, day, Constants.Y_AXIS, VisiblePredicate.TRUE); // y_axis.setLayoutBounds(tileMapB); // vis.putAction(yAction, y_axis); AxisLayout y_axis = new AxisLayout(group, day, Constants.Y_AXIS); y_axis.setLayoutBounds(tileMapB); vis.putAction(yAction, y_axis); //set up the axis-labels and axis-representation AxisLabelLayout dayLabels = new AxisLabelLayout(dayLabel, y_axis); dayLabels.setLayoutBounds(dayLabelB); dayLabels.setSpacing(10); vis.putAction(dayLAction, dayLabels); AxisLabelLayout monthLabels = new AxisLabelLayout(TileMap.monthLabel, x_axis); monthLabels.setLayoutBounds(monthLabelB); monthLabels.setSpacing(15); vis.putAction(monthLAction, monthLabels); //set up the colors to be used for the tilemap int[] palette = ColorLib.getInterpolatedPalette(binsize, ColorLib.color(Color.BLUE), ColorLib.color(Color.RED)); DataColorAction dataColor = new DataColorAction(group, "Abfluss", Constants.NUMERICAL, VisualItem.FILLCOLOR, palette); if(logFlag)dataColor.setScale(Constants.LOG_SCALE); vis.putAction(colorAction, dataColor); //crate an actionList and add all actions to it. finally add the actionList to the Visualization ActionList draw = new ActionList(); draw.add(x_axis); draw.add(y_axis); draw.add(dataColor); draw.add(dayLabels); draw.add(monthLabels); draw.add(new RepaintAction()); vis.putAction(drawAction, draw); // -- 5. the display and interactive controls ------------------------- Display d = new Display(vis); d.setBorder(BorderFactory.createEmptyBorder(20,20,20,20)); d.setSize((int)tileMapB.getWidth()+(int)monthLabelB.getWidth(), (int)tileMapB.getHeight()+(int)dayLabelB.getHeight()); d.setHighQuality(true); d.setPredicate(inYear1977); ToolTipControl ttc = new ToolTipControl(new String[] {"Datum", "Abfluss"}); d.addControlListener(ttc); d.addControlListener(new ZoomControl()); d.addControlListener(new PanControl()); d.addControlListener(new DragControl()); Display d2 = new Display(vis); d2.setBorder(BorderFactory.createEmptyBorder(20,20,20,20)); d2.setLocation(0, 200); d2.setSize((int)tileMapB.getWidth()+(int)monthLabelB.getWidth(), (int)tileMapB.getHeight()+(int)dayLabelB.getHeight()); System.out.println("d2-location: x=" + d2.getLocation().x + " y=" + d2.getLocation().y); d2.setHighQuality(true); // d2.setPredicate(inYear1978); ToolTipControl ttc2 = new ToolTipControl(new String[] {"Datum", "Abfluss"}); d2.addControlListener(ttc2); d2.addControlListener(new ZoomControl()); d2.addControlListener(new PanControl()); d2.addControlListener(new DragControl()); d.validate(); d2.validate(); // -- 6. launch the visualization ------------------------------------- // create a new window to hold the visualization JFrame frame = new JFrame("T I L E M A P"); // ensure application exits when window is closed frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(500, 500); frame.add(d); frame.add(d2); frame.validate(); frame.pack(); // layout components in window frame.setVisible(true); // show the window vis.run(drawAction); } }
example data
example data (InfoVisMain.java)
Copy that data and store it as .csv. For using it you have to change the path to the file in the sourcecode.
Datum;Abfluss 01.01.1977 11:00;5.721 02.01.1977 10:30;5.697 03.01.1977 10:00;5.767 04.01.1977 17:00;5.861 05.01.1977 16:30;5.697 06.01.1977 11:30;5.791 07.01.1977 18:30;5.697 08.01.1977 12:30;5.908 09.01.1977 12:00;5.861 10.01.1977 12:00;5.861 11.01.1977 18:00;5.837 12.01.1977 11:30;6.026 13.01.1977 19:30;5.955 14.01.1977 11:00;5.978 15.01.1977 20:30;5.837 16.01.1977 12:00;6.895 17.01.1977 11:30;6.073 18.01.1977 12:30;5.767 19.01.1977 19:30;6.263 20.01.1977 19:00;5.884 21.01.1977 09:00;6.359 22.01.1977 11:30;6.699 23.01.1977 14:30;5.837 24.01.1977 11:30;5.628 25.01.1977 19:30;5.791 26.01.1977 11:30;5.744 27.01.1977 09:30;5.651 28.01.1977 19:30;5.651 29.01.1977 20:00;6.192 30.01.1977 11:30;5.536 31.01.1977 20:30;5.767 01.02.1977 19:30;5.651 02.02.1977 11:30;6.073 03.02.1977 10:30;6.002 04.02.1977 09:30;6.994 05.02.1977 20:00;6.723 06.02.1977 11:30;7.168 07.02.1977 20:30;6.528 08.02.1977 18:00;6.192 09.02.1977 11:30;7.776 10.02.1977 19:30;7.118 11.02.1977 19:30;7.827 12.02.1977 09:30;7.47 13.02.1977 09:30;7.168 14.02.1977 20:00;6.383 15.02.1977 20:00;6.12 16.02.1977 20:00;6.263 17.02.1977 20:00;6.168 18.02.1977 20:00;5.861 19.02.1977 19:30;5.978 20.02.1977 19:30;6.383 21.02.1977 19:30;9.524 22.02.1977 12:30;7.956 23.02.1977 20:00;7.648 24.02.1977 23:59;8.257 25.02.1977 15:30;10.271 26.02.1977 00:00;9.21 27.02.1977 05:00;8.241 28.02.1977 00:00;6.26 01.03.1977 18:00;5.931 02.03.1977 19:30;5.791 03.03.1977 23:59;8.14 04.03.1977 23:59;17.646 05.03.1977 00:00;17.646 06.03.1977 00:00;11.894 07.03.1977 00:00;10.665 08.03.1977 21:00;10.327 09.03.1977 23:00;10.665 10.03.1977 23:59;10.892 11.03.1977 18:30;11.121 12.03.1977 13:00;10.58 13.03.1977 00:00;10.051 14.03.1977 00:00;9.343 15.03.1977 00:00;8.834 16.03.1977 23:59;8.537 17.03.1977 23:59;10.103 18.03.1977 21:30;12.287 19.03.1977 00:00;12.261 20.03.1977 00:00;10.515 21.03.1977 08:00;10.075 22.03.1977 20:30;10.215 23.03.1977 23:30;11.875 24.03.1977 23:59;13.962 25.03.1977 22:00;14.509 26.03.1977 22:30;15.615 27.03.1977 00:00;15.415 28.03.1977 07:00;18.082 29.03.1977 00:00;16.046 30.03.1977 00:00;13.017 31.03.1977 00:00;10.835 01.04.1977 19:00;10.355 02.04.1977 23:59;12.18 03.04.1977 23:59;13.403 04.04.1977 00:30;13.46 05.04.1977 08:30;12.495 06.04.1977 18:00;12.199 07.04.1977 19:00;11.525 08.04.1977 08:30;11.904 09.04.1977 18:00;11.322 10.04.1977 17:30;10.355 11.04.1977 17:30;10.131 12.04.1977 12:00;9.551 13.04.1977 19:30;10.636 14.04.1977 19:30;11.265 15.04.1977 08:30;10.187 16.04.1977 19:30;8.795 17.04.1977 18:30;10.75 18.04.1977 20:30;12.199 19.04.1977 20:00;12.764 20.04.1977 17:30;11.729 21.04.1977 19:00;12.555 22.04.1977 19:00;13.095 23.04.1977 23:59;16.529 24.04.1977 23:59;20.195 25.04.1977 00:30;20.203 26.04.1977 23:30;23.096 27.04.1977 23:00;28.672 28.04.1977 23:59;36.956 29.04.1977 23:59;56.898 30.04.1977 18:00;81.98 01.05.1977 19:30;77.065 02.05.1977 00:00;70.391 03.05.1977 00:00;51.984 04.05.1977 18:00;93.83 05.05.1977 00:00;86.578 06.05.1977 00:00;57.75 07.05.1977 00:00;37.338 08.05.1977 00:00;29.828 09.05.1977 00:00;28.286 10.05.1977 00:00;22.335 11.05.1977 23:59;23.215 12.05.1977 23:00;42.651 13.05.1977 00:00;41.681 14.05.1977 00:00;37.893 15.05.1977 00:00;30.726 16.05.1977 23:00;29.321 17.05.1977 21:30;32.223 18.05.1977 23:59;33.122 19.05.1977 23:59;99.935 20.05.1977 15:30;137.65 21.05.1977 00:00;110.665 22.05.1977 00:00;75.919 23.05.1977 22:00;59.25 24.05.1977 22:30;63.573 25.05.1977 21:00;76.096 26.05.1977 00:00;73.753 27.05.1977 00:00;67.312 28.05.1977 00:00;53.171 29.05.1977 23:59;52.495 30.05.1977 00:30;52.754 31.05.1977 02:00;50.759 01.06.1977 00:00;38.131 02.06.1977 23:59;36.169 03.06.1977 00:30;36.316 04.06.1977 00:00;30.803 05.06.1977 00:00;26.294 06.06.1977 23:59;29.861 07.06.1977 23:00;51.207 08.06.1977 22:00;63.087 09.06.1977 23:30;82.823 10.06.1977 22:00;109.493 11.06.1977 00:00;104.427 12.06.1977 00:00;90.078 13.06.1977 22:00;103.169 14.06.1977 23:59;120.391 15.06.1977 02:00;125.505 16.06.1977 10:00;85.915 17.06.1977 00:00;58.973 18.06.1977 23:59;74.687 19.06.1977 23:59;86.142 20.06.1977 01:30;86.383 21.06.1977 23:59;73.066 22.06.1977 01:00;73.583 23.06.1977 00:00;62.195 24.06.1977 20:00;54.91 25.06.1977 19:30;75.354 26.06.1977 23:59;94.717 27.06.1977 01:30;94.959 28.06.1977 00:00;64.193 29.06.1977 00:00;51.4 30.06.1977 11:30;62.741 01.07.1977 00:00;49.039 02.07.1977 23:59;48.14 03.07.1977 23:59;65.391 04.07.1977 23:59;72.606 05.07.1977 01:00;72.777 06.07.1977 01:30;62.05 07.07.1977 03:00;55.174 08.07.1977 23:59;54.91 09.07.1977 02:30;55.042 10.07.1977 15:00;65.953 11.07.1977 02:00;61.844 12.07.1977 01:00;55.57 13.07.1977 23:59;100.575 14.07.1977 01:00;115.434 15.07.1977 11:00;93.509 16.07.1977 23:59;70.042 17.07.1977 06:30;101.755 18.07.1977 00:00;65.251 19.07.1977 00:30;60.133 20.07.1977 23:59;73.238 21.07.1977 07:00;207.793 22.07.1977 00:00;76.599 23.07.1977 00:00;44.949 24.07.1977 22:00;47.228 25.07.1977 23:59;66.47 26.07.1977 04:30;85.993 27.07.1977 00:00;56.811 28.07.1977 00:00;40.869 29.07.1977 20:00;34.316 30.07.1977 23:59;40.194 31.07.1977 23:30;253.056 01.08.1977 05:30;271.508 02.08.1977 00:00;119.963 03.08.1977 00:00;54.623 04.08.1977 00:00;39.101 05.08.1977 20:30;82.898 06.08.1977 00:00;71.46 07.08.1977 06:00;68.654 08.08.1977 00:00;53.663 09.08.1977 00:00;49.738 10.08.1977 11:00;59.712 11.08.1977 00:00;46.09 12.08.1977 00:00;33.279 13.08.1977 23:59;38.364 14.08.1977 07:00;54.828 15.08.1977 00:00;34.25 16.08.1977 00:00;27.856 17.08.1977 23:59;35.97 18.08.1977 23:59;39.485 19.08.1977 10:30;45.281 20.08.1977 00:00;42.13 21.08.1977 23:59;41.287 22.08.1977 07:00;64.402 23.08.1977 00:00;43.641 24.08.1977 00:00;32.957 25.08.1977 00:00;27.529 26.08.1977 07:30;26.534 27.08.1977 00:00;25.876 28.08.1977 23:59;30.351 29.08.1977 23:59;42.718 30.08.1977 18:30;47.544 31.08.1977 00:00;47.182 01.09.1977 00:00;40.953 02.09.1977 00:00;31.879 03.09.1977 00:00;31.226 04.09.1977 23:00;47.976 05.09.1977 00:00;46.886 06.09.1977 00:00;30.996 07.09.1977 00:00;21.428 08.09.1977 23:59;25.908 09.09.1977 10:00;104.255 10.09.1977 00:00;44.71 11.09.1977 00:00;26.393 12.09.1977 07:00;25.501 13.09.1977 22:00;24.5 14.09.1977 00:00;24.053 15.09.1977 23:59;21.439 16.09.1977 00:00;21.439 17.09.1977 00:00;17.751 18.09.1977 20:30;16.759 19.09.1977 00:00;16.545 20.09.1977 00:00;16.018 21.09.1977 00:00;14.903 22.09.1977 00:00;14.601 23.09.1977 00:00;14.145 24.09.1977 22:30;14.043 25.09.1977 00:00;14.014 26.09.1977 00:00;13.582 27.09.1977 00:00;12.734 28.09.1977 00:00;12.527 29.09.1977 00:00;11.77 30.09.1977 21:00;11.496 01.10.1977 23:59;11.468 02.10.1977 23:59;12.19 03.10.1977 08:00;12.376 04.10.1977 00:00;12.092 05.10.1977 00:00;11.196 06.10.1977 23:59;10.693 07.10.1977 23:59;10.782 08.10.1977 23:59;13.122 09.10.1977 04:00;13.796 10.10.1977 23:59;13.217 11.10.1977 02:30;14.509 12.10.1977 00:00;12.641 13.10.1977 00:00;12.146 14.10.1977 23:59;11.612 15.10.1977 00:00;11.612 16.10.1977 00:00;10.018 17.10.1977 07:30;9.798 18.10.1977 00:00;9.615 19.10.1977 15:00;9.333 20.10.1977 00:00;9.067 21.10.1977 00:00;8.838 22.10.1977 00:00;8.531 23.10.1977 23:59;8.48 24.10.1977 23:59;8.937 25.10.1977 19:30;9.333 26.10.1977 00:00;9.238 27.10.1977 00:00;8.792 28.10.1977 09:00;9.524 29.10.1977 00:00;9.22 30.10.1977 00:00;8.862 31.10.1977 23:59;8.933 01.11.1977 06:30;9.198 02.11.1977 23:59;10.241 03.11.1977 05:30;11.758 04.11.1977 00:00;10.872 05.11.1977 00:00;8.886 06.11.1977 00:00;8.583 07.11.1977 00:00;8.075 08.11.1977 00:00;7.574 09.11.1977 21:00;6.945 10.11.1977 00:00;6.851 11.11.1977 00:00;6.527 12.11.1977 00:00;6.356 13.11.1977 18:00;7.044 14.11.1977 00:00;6.651 15.11.1977 10:30;6.48 16.11.1977 00:00;6.401 17.11.1977 00:00;6.311 18.11.1977 18:00;6.12 19.11.1977 00:00;6.026 20.11.1977 00:00;4.894 21.11.1977 23:59;4.754 22.11.1977 23:30;4.992 23.11.1977 00:00;4.989 24.11.1977 23:59;5.015 25.11.1977 23:59;5.767 26.11.1977 16:30;5.861 27.11.1977 00:00;5.843 28.11.1977 23:59;6.008 29.11.1977 01:00;6.026 30.11.1977 08:30;5.978 01.12.1977 08:30;5.978 02.12.1977 17:00;5.837 03.12.1977 00:00;5.397 04.12.1977 07:00;5.284 05.12.1977 23:59;5.444 06.12.1977 16:00;5.536 07.12.1977 00:00;4.849 08.12.1977 00:00;4.812 09.12.1977 20:30;5.744 10.12.1977 00:00;5.661 11.12.1977 00:00;5.318 12.12.1977 23:59;5.408 13.12.1977 11:00;6.504 14.12.1977 00:00;6.119 15.12.1977 20:00;5.861 16.12.1977 11:30;5.582 17.12.1977 16:00;5.559 18.12.1977 00:00;5.434 19.12.1977 13:30;5.536 20.12.1977 15:00;5.353 21.12.1977 13:00;5.721 22.12.1977 15:30;5.791 23.12.1977 00:00;5.692 24.12.1977 00:00;5.308 25.12.1977 23:59;5.914 26.12.1977 18:30;6.026 27.12.1977 00:00;5.696 28.12.1977 18:00;5.744 29.12.1977 00:00;5.537 30.12.1977 18:00;5.536 31.12.1977 00:00;4.925 01.01.1978 00:00;4.76 02.01.1978 23:59;4.545 03.01.1978 01:30;4.596 04.01.1978 18:30;4.381 05.01.1978 18:00;4.232 06.01.1978 00:00;3.96 07.01.1978 23:59;3.96 08.01.1978 23:59;3.96 09.01.1978 23:59;3.96 10.01.1978 23:59;3.96 11.01.1978 23:59;3.96 12.01.1978 23:59;3.96 13.01.1978 23:59;3.96 14.01.1978 15:30;4.106 15.01.1978 00:00;3.878 16.01.1978 11:30;4.127 17.01.1978 00:00;4.043 18.01.1978 00:00;3.585 19.01.1978 23:59;3.545 20.01.1978 06:30;3.553 21.01.1978 00:00;3.176