Individualized sentiments-graph loading

This commit is contained in:
Mokaddem 2016-08-25 13:11:16 +02:00
parent f9bf00f022
commit 21f2c43572
3 changed files with 79 additions and 222 deletions

View file

@ -472,7 +472,7 @@ def sentiment_analysis_trending():
return render_template("sentiment_analysis_trending.html") return render_template("sentiment_analysis_trending.html")
@app.route("/sentiment_analysis_getplotdata/") @app.route("/sentiment_analysis_getplotdata/", methods=['GET'])
def sentiment_analysis_getplotdata(): def sentiment_analysis_getplotdata():
# Get the top providers based on number of pastes # Get the top providers based on number of pastes
oneHour = 60*60 oneHour = 60*60
@ -481,19 +481,22 @@ def sentiment_analysis_getplotdata():
dateStart = dateStart.replace(minute=0, second=0, microsecond=0) dateStart = dateStart.replace(minute=0, second=0, microsecond=0)
dateStart_timestamp = calendar.timegm(dateStart.timetuple()) dateStart_timestamp = calendar.timegm(dateStart.timetuple())
to_return = {} getAllProviders = request.args.get('getProviders')
range_providers = r_serv_charts.zrevrangebyscore('providers_set_'+ get_date_range(0)[0], '+inf', '-inf', start=0, num=8) provider = request.args.get('provider')
# if empty, get yesterday top providers if getAllProviders == 'True':
print 'providers_set_'+ get_date_range(1)[1] range_providers = r_serv_charts.zrevrangebyscore('providers_set_'+ get_date_range(0)[0], '+inf', '-inf', start=0, num=8)
range_providers = r_serv_charts.zrevrangebyscore('providers_set_'+ get_date_range(1)[1], '+inf', '-inf', start=0, num=8) if range_providers == [] else range_providers # if empty, get yesterday top providers
# if still empty, takes from all providers range_providers = r_serv_charts.zrevrangebyscore('providers_set_'+ get_date_range(1)[1], '+inf', '-inf', start=0, num=8) if range_providers == [] else range_providers
if range_providers == []: # if still empty, takes from all providers
print 'today provider empty' if range_providers == []:
range_providers = r_serv_charts.smembers('all_provider_set') print 'today provider empty'
range_providers = r_serv_charts.smembers('all_provider_set')
return jsonify(range_providers)
for cur_provider in range_providers: elif provider is not None:
print cur_provider to_return = {}
cur_provider_name = cur_provider + '_'
cur_provider_name = provider + '_'
list_date = {} list_date = {}
for cur_timestamp in range(int(dateStart_timestamp), int(dateStart_timestamp)-sevenDays-oneHour, -oneHour): for cur_timestamp in range(int(dateStart_timestamp), int(dateStart_timestamp)-sevenDays-oneHour, -oneHour):
cur_set_name = cur_provider_name + str(cur_timestamp) cur_set_name = cur_provider_name + str(cur_timestamp)
@ -503,9 +506,10 @@ def sentiment_analysis_getplotdata():
cur_value = r_serv_sentiment.get(cur_id) cur_value = r_serv_sentiment.get(cur_id)
list_value.append(cur_value) list_value.append(cur_value)
list_date[cur_timestamp] = list_value list_date[cur_timestamp] = list_value
to_return[cur_provider] = list_date to_return[provider] = list_date
return jsonify(to_return) return jsonify(to_return)
return "Bad request"

View file

@ -1,4 +1,6 @@
/* Functions and config */
function generate_offset_to_time(num){ function generate_offset_to_time(num){
var to_ret = {}; var to_ret = {};
for(i=0; i<=num; i++) { for(i=0; i<=num; i++) {
@ -15,7 +17,7 @@
var to_ret = {}; var to_ret = {};
for(i=day; i>=0; i--){ for(i=day; i>=0; i--){
for(j=0; j<24; j++){ for(j=0; j<24; j++){
var t1 =now.getDate()-i + ":"; var t1 =now.getDate()-i + ":";
var t2 =now.getHours()-(23-j); var t2 =now.getHours()-(23-j);
t2 = t2 < 0 ? 24+t2 : t2; t2 = t2 < 0 ? 24+t2 : t2;
t2 += "h"; t2 += "h";
@ -40,34 +42,52 @@
barColor: '#00bf5f', barColor: '#00bf5f',
negBarColor: '#f22929', negBarColor: '#f22929',
zeroColor: '#ffff00', zeroColor: '#ffff00',
tooltipFormat: '<span style="color: {{color}}">&#9679;</span> {{offset:names}}, {{value}} </span>', tooltipFormat: '<span style="color: {{color}}">&#9679;</span> {{offset:names}}, {{value}} </span>',
}; };
$.getJSON("/sentiment_analysis_getplotdata/", /* Plot and queries */
function(data) {
var all_data = [];
var plot_data = [];
var graph_avg = [];
var array_provider = Object.keys(data);
var dates_providers = Object.keys(data[array_provider[0]]);
var dateStart = parseInt(dates_providers[0]);
var oneHour = 60*60;
var oneWeek = oneHour*24*7;
var all_graph_day_sum = 0.0; var all_graph_day_sum = 0.0;
var all_graph_hour_sum = 0.0; var all_graph_hour_sum = 0.0;
var all_graph_hour_maxVal = 0.0; var all_graph_hour_maxVal = 0.0;
var all_day_avg = 0.0; var all_day_avg = 0.0;
var all_day_avg_maxVal = 0.0; var all_day_avg_maxVal = 0.0;
var graph_avg = [];
var all_data = [];
function draw_page() {
$.getJSON("/sentiment_analysis_getplotdata/?getProviders=True",
function(data) {
var promises = [];
for(i=0; i<data.length; i++) {
promises.push(query_and_plot(data[i], i));
}
$.when.apply($, promises).done( function (arg) {
draw_widgets();
});
}
);
}
function query_and_plot(provider, graphNum) {
var query_plot = $.getJSON("/sentiment_analysis_getplotdata/?provider="+provider,
function(data) {
var plot_data = [];
var array_provider = Object.keys(data);
var dates_providers = Object.keys(data[array_provider[0]]);
var dateStart = parseInt(dates_providers[0]);
var oneHour = 60*60;
var oneWeek = oneHour*24*7;
for (graphNum=0; graphNum<8; graphNum++) {
var max_value = 0.0; var max_value = 0.0;
var max_value_day = 0.0; var max_value_day = 0.0;
var graph_data = []; var graph_data = [];
var spark_data = []; var spark_data = [];
var curr_provider = array_provider[graphNum]; var curr_provider = array_provider[0];
var curr_sum = 0.0; var curr_sum = 0.0;
var curr_sum_elem = 0.0; var curr_sum_elem = 0.0;
var day_sum = 0.0; var day_sum = 0.0;
@ -88,7 +108,6 @@ $.getJSON("/sentiment_analysis_getplotdata/",
var neu = 0; var neu = 0;
for(i=0; i<data_array.length; i++){ for(i=0; i<data_array.length; i++){
//console.log(data_array[i].replace(/\'/g, '\"'));
var curr_data = jQuery.parseJSON(data_array[i].replace(/\'/g, '\"')); var curr_data = jQuery.parseJSON(data_array[i].replace(/\'/g, '\"'));
compPosAvg += curr_data['compoundPos']; compPosAvg += curr_data['compoundPos'];
compNegAvg += curr_data['compoundNeg']; compNegAvg += curr_data['compoundNeg'];
@ -123,15 +142,13 @@ $.getJSON("/sentiment_analysis_getplotdata/",
all_graph_hour_sum += hour_sum; all_graph_hour_sum += hour_sum;
all_graph_hour_maxVal = Math.abs(hour_sum) > all_graph_hour_maxVal ? Math.abs(hour_sum) : all_graph_hour_maxVal; all_graph_hour_maxVal = Math.abs(hour_sum) > all_graph_hour_maxVal ? Math.abs(hour_sum) : all_graph_hour_maxVal;
var curr_avg = curr_sum / (curr_sum_elem); var curr_avg = curr_sum / (curr_sum_elem);
if(isNaN(curr_avg)) if(isNaN(curr_avg))
curr_avg = 0.0 curr_avg = 0.0
//var curr_avg = curr_sum / (oneWeek/oneHour);
//var curr_avg = curr_sum / (spark_data.length);
graph_avg.push([curr_provider, curr_avg]); graph_avg.push([curr_provider, curr_avg]);
plot_data.push(spark_data); plot_data.push(spark_data);
all_data.push(graph_data); all_data.push(graph_data);
sparklineOptions.chartRangeMax = max_value; sparklineOptions.chartRangeMax = max_value;
sparklineOptions.chartRangeMin = -max_value; sparklineOptions.chartRangeMin = -max_value;
@ -141,11 +158,11 @@ $.getJSON("/sentiment_analysis_getplotdata/",
var num = graphNum + 1; var num = graphNum + 1;
var placeholder = '.sparkLineStatsWeek' + num; var placeholder = '.sparkLineStatsWeek' + num;
sparklineOptions.barWidth = 2; sparklineOptions.barWidth = 2;
$(placeholder).sparkline(plot_data[graphNum], sparklineOptions); $(placeholder).sparkline(plot_data[0], sparklineOptions);
$(placeholder+'t').text(curr_provider); $(placeholder+'t').text(curr_provider);
var curr_avg_text = isNaN(curr_avg) ? "No data" : curr_avg.toFixed(5); var curr_avg_text = isNaN(curr_avg) ? "No data" : curr_avg.toFixed(5);
$(placeholder+'s').text(curr_avg_text); $(placeholder+'s').text(curr_avg_text);
sparklineOptions.barWidth = 18; sparklineOptions.barWidth = 18;
sparklineOptions.tooltipFormat = '<span style="color: {{color}}">&#9679;</span> Avg: {{value}} </span>' sparklineOptions.tooltipFormat = '<span style="color: {{color}}">&#9679;</span> Avg: {{value}} </span>'
$(placeholder+'b').sparkline([curr_avg], sparklineOptions); $(placeholder+'b').sparkline([curr_avg], sparklineOptions);
@ -169,8 +186,8 @@ $.getJSON("/sentiment_analysis_getplotdata/",
// print today // print today
var data_length = plot_data[graphNum].length; var data_length = plot_data[0].length;
var data_today = plot_data[graphNum].slice(data_length-24, data_length); var data_today = plot_data[0].slice(data_length-24, data_length);
placeholder = '.sparkLineStatsToday' + num; placeholder = '.sparkLineStatsToday' + num;
sparklineOptions.barWidth = 14; sparklineOptions.barWidth = 14;
@ -199,188 +216,24 @@ $.getJSON("/sentiment_analysis_getplotdata/",
$(avgName).addClass("panel-warning") $(avgName).addClass("panel-warning")
} }
}//for loop
/* ---------------- Gauge ---------------- */
var gaugeOptions = {
animateEasing: true,
elementWidth: 200,
elementHeight: 125,
arcFillStart: 10,
arcFillEnd: 12,
arcFillTotal: 20,
incTot: 1.0,
arcBgColorLight: 200,
arcBgColorSat: 0,
arcStrokeFg: 20,
arcStrokeBg: 30,
colorArcFg: '#FF3300',
animateSpeed: 1,
};
// Clone object
var gaugeOptions2 = jQuery.extend(true, {}, gaugeOptions);
var gaugeOptions3 = jQuery.extend(true, {}, gaugeOptions);
gaugeOptions.appendTo = '#gauge_today_last_hour';
gaugeOptions.dialLabel = 'Last hour';
gaugeOptions.elementId = 'gauge1';
var piePercent = (all_graph_hour_sum / 8) / all_graph_hour_maxVal;
gaugeOptions.inc = piePercent;
var gauge_today_last_hour = new FlexGauge(gaugeOptions);
gaugeOptions2.appendTo = '#gauge_today_last_days';
gaugeOptions2.dialLabel = 'Today';
gaugeOptions2.elementId = 'gauge2';
//piePercent = (all_graph_day_sum / (8*24)) / max_value;
piePercent = (all_day_avg / 8) / all_day_avg_maxVal;
gaugeOptions2.inc = piePercent;
var gauge_today_last_days = new FlexGauge(gaugeOptions2);
gaugeOptions3.appendTo = '#gauge_week';
gaugeOptions3.dialLabel = 'Week';
gaugeOptions3.elementId = 'gauge3';
var graph_avg_sum = 0.0;
var temp_max_val = 0.0;
for (i=0; i<graph_avg.length; i++){
graph_avg_sum += graph_avg[i][1];
temp_max_val = Math.abs(graph_avg[i][1]) > temp_max_val ? Math.abs(graph_avg[i][1]) : temp_max_val;
}
piePercent = (graph_avg_sum / graph_avg.length) / temp_max_val;
gaugeOptions3.inc = piePercent;
var gauge_today_last_days = new FlexGauge(gaugeOptions3);
/* --------- Sort providers -------- */
graph_avg.sort(function(a, b){return b[1]-a[1]});
for (i=1; i<6; i++){
$('.worst'+i).text(graph_avg[7-(i-1)][0]);
$('.best'+i).text(graph_avg[i-1][0]);
}
/* ----------- CanvasJS ------------ */
var comp_sum_day_pos = 0.0;
var comp_sum_day_neg = 0.0;
var comp_sum_hour_pos = 0.0;
var comp_sum_hour_neg = 0.0;
for(graphNum=0; graphNum<8; graphNum++){
curr_graphData = all_data[graphNum];
var gauge_data = curr_graphData.slice(curr_graphData.length-24, curr_graphData.length);
for (i=1; i< gauge_data.length; i++){
comp_sum_day_pos += gauge_data[i].compoundPos;
comp_sum_day_neg += gauge_data[i].compoundNeg;
if(i == 23){
comp_sum_hour_pos += gauge_data[i].compoundPos;
comp_sum_hour_neg += gauge_data[i].compoundNeg;
}
}
} }
);
var options_canvasJS_1 = { return query_plot
}
animationEnabled: true,
axisY: {
tickThickness: 0,
lineThickness: 0,
valueFormatString: " ",
gridThickness: 0
},
axisX: {
tickThickness: 0,
lineThickness: 0,
labelFontSize: 0.1,
},
data: [
{
toolTipContent: "<span style='\"'color: {color};'\"'><strong>Positive: </strong></span><span><strong>{y}</strong></span>",
type: "bar",
color: "green",
dataPoints: [
{y: comp_sum_hour_pos/8}
]
},
{
toolTipContent: "<span style='\"'color: {color};'\"'><strong>Negative: </strong></span><span><strong>{y}</strong></span>",
type: "bar",
color: "red",
dataPoints: [
{y: comp_sum_hour_neg/8}
]
}
]
};
var chart_canvas1 = new CanvasJS.Chart("bar_today_last_hour", options_canvasJS_1);
var options_canvasJS_2 = {
animationEnabled: true,
axisY: {
tickThickness: 0,
lineThickness: 0,
valueFormatString: " ",
gridThickness: 0
},
axisX: {
tickThickness: 0,
lineThickness: 0,
labelFontSize: 0.1,
},
data: [
{
toolTipContent: "<span style='\"'color: {color};'\"'><strong>Positive: </strong></span><span><strong>{y}</strong></span>",
type: "bar",
color: "green",
dataPoints: [
{y: comp_sum_day_pos/8}
]
},
{
toolTipContent: "<span style='\"'color: {color};'\"'><strong>Negative: </strong></span><span><strong>{y}</strong></span>",
type: "bar",
color: "red",
dataPoints: [
{y: comp_sum_day_neg/8}
]
}
]
};
var chart_canvas2 = new CanvasJS.Chart("bar_today_last_days", options_canvasJS_2);
chart_canvas1.render();
chart_canvas2.render();
}
);
function draw_widgets() {
/* ---------------- Gauge ---------------- */
var gaugeOptions = {
animateEasing: true,
elementWidth: 200,
elementHeight: 125,
arcFillStart: 10,
arcFillEnd: 12,
arcFillTotal: 20,
incTot: 1.0,

View file

@ -508,7 +508,7 @@
$("#"+activePage).addClass("active"); $("#"+activePage).addClass("active");
$('[data-toggle="tooltip"]').tooltip(); $('[data-toggle="tooltip"]').tooltip();
draw_page();
// Reload every 30min // Reload every 30min
setTimeout(function(){ location.reload(); }, 30*60*1000); setTimeout(function(){ location.reload(); }, 30*60*1000);
}); });