Here is the code that generates a JustPy app containing a HighCharts graph that represents average ratings by month.
import justpy as jp
import pandas
from datetime import datetime
from pytz import utc
data = pandas.read_csv("reviews.csv", parse_dates=['Timestamp'])
data['Month'] = data['Timestamp'].dt.strftime('%Y-%m')
month_average = data.groupby(['Month']).mean()
chart_def = """
{
chart: {
type: 'spline',
inverted: false
},
title: {
text: 'Average Rating by Month'
},
subtitle: {
text: 'According to the Course Reviews Dataset'
},
xAxis: {
reversed: false,
title: {
enabled: true,
text: 'Month'
},
labels: {
format: '{value} km'
},
accessibility: {
rangeDescription: 'Range: 0 to 80 km.'
},
maxPadding: 0.05,
showLastLabel: true
},
yAxis: {
title: {
text: 'Rating'
},
labels: {
format: '{value}°'
},
accessibility: {
rangeDescription: 'Range: -90°C to 20°C.'
},
lineWidth: 2
},
legend: {
enabled: false
},
tooltip: {
headerFormat: '<b>{series.name}</b><br/>',
pointFormat: '{point.x} km: {point.y}°C'
},
plotOptions: {
spline: {
marker: {
enable: false
}
}
},
series: [{
name: 'Rating',
data: [[0, 15], [10, -50], [20, -56.5], [30, -46.5], [40, -22.1],
[50, -2.5], [60, -27.7], [70, -55.7], [80, -76.5]]
}]
}
"""
def app():
wp = jp.QuasarPage()
h1 = jp.QDiv(a=wp, text="Analysis of Course Reviews", classes="text-h3 text-center q-pa-md")
p1 = jp.QDiv(a=wp, text="These graphs represent course review analysis")
hc = jp.HighCharts(a=wp, options=chart_def)
hc.options.xAxis.categories = list(month_average.index)
hc.options.series[0].data = list(month_average['Rating'])
return wp
jp.justpy(app)