Source code for timeline.module_timeline

from __future__ import division, print_function
import os
from collections import Counter
from datetime import datetime, date, timedelta
import time
from string import Template

from IPython.core.display import HTML, display

path = os.path.dirname(os.path.abspath(__file__))

[docs]def create_timeline( datasets = [], colors = [] ): import codecs if not datasets: return "No data given to create timeline." plots = create_plots( datasets ) if len(plots) < len(datasets): print("Empty datasets in list!") graph_div_id = int( time.time() * 1000 ) html_template = Template( codecs.open( path + '/timeline.html', 'r').read() ) js_template = Template( codecs.open( path + '/timeline.js', 'r').read() ) css_text = codecs.open( path + '/timeline.css', 'r').read() js_text = js_template.substitute( {'graph_div_id' : graph_div_id, 'plots' : plots, 'line_colors' : colors} ) html_template = html_template.substitute( {'graph_div_id': 'timeline_graph_' + str(graph_div_id), 'css': css_text, 'js': js_text} ) display( HTML( html_template ) ) return None
[docs]def create_plots( datasets ): plots = [] import types for data in datasets: if isinstance( data, types.GeneratorType ): data = list( data ) if data: x_axis, y_axis = create_axes( data ) plots.append( create_data_points( x_axis, y_axis ) ) return plots
[docs]def create_axes( data ): dates_ok = filter( lambda d: d['timestamp'] > datetime(1970,1,1,0,10), data ) dates = map( lambda d: d['timestamp'].date(), dates_ok ) y_axis = Counter( dates ) start_date = min( y_axis ) end_date = max( y_axis ) delta = end_date - start_date x_axis = map( lambda date: start_date + timedelta( days = date ), range( delta.days + 1 ) ) return x_axis, y_axis
[docs]def create_data_points( x_axis, y_axis ): data_points = [] for date in x_axis: if date in y_axis: data_points.append({'close' : y_axis[date], 'date' : str(date)}) else: data_points.append({'close' : 0, 'date' : str(date)}) return data_points