mirror of
https://github.com/ail-project/ail-framework.git
synced 2024-11-10 08:38:28 +00:00
Individualized sentiments-graph loading
This commit is contained in:
parent
f9bf00f022
commit
21f2c43572
3 changed files with 79 additions and 222 deletions
|
@ -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')
|
||||||
|
provider = request.args.get('provider')
|
||||||
|
if getAllProviders == 'True':
|
||||||
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(0)[0], '+inf', '-inf', start=0, num=8)
|
||||||
# if empty, get yesterday top providers
|
# if empty, get yesterday top providers
|
||||||
print 'providers_set_'+ get_date_range(1)[1]
|
|
||||||
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
|
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 still empty, takes from all providers
|
# if still empty, takes from all providers
|
||||||
if range_providers == []:
|
if range_providers == []:
|
||||||
print 'today provider empty'
|
print 'today provider empty'
|
||||||
range_providers = r_serv_charts.smembers('all_provider_set')
|
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"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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++) {
|
||||||
|
@ -45,29 +47,47 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
$.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'];
|
||||||
|
@ -126,8 +145,6 @@ $.getJSON("/sentiment_analysis_getplotdata/",
|
||||||
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);
|
||||||
|
@ -141,7 +158,7 @@ $.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);
|
||||||
|
@ -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,10 +216,15 @@ $.getJSON("/sentiment_analysis_getplotdata/",
|
||||||
$(avgName).addClass("panel-warning")
|
$(avgName).addClass("panel-warning")
|
||||||
}
|
}
|
||||||
|
|
||||||
}//for loop
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return query_plot
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function draw_widgets() {
|
||||||
/* ---------------- Gauge ---------------- */
|
/* ---------------- Gauge ---------------- */
|
||||||
var gaugeOptions = {
|
var gaugeOptions = {
|
||||||
animateEasing: true,
|
animateEasing: true,
|
||||||
|
@ -215,172 +237,3 @@ $.getJSON("/sentiment_analysis_getplotdata/",
|
||||||
arcFillTotal: 20,
|
arcFillTotal: 20,
|
||||||
incTot: 1.0,
|
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 = {
|
|
||||||
|
|
||||||
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();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue