Module:HelperMethods: Difference between revisions
From MaRDI portal
No edit summary |
No edit summary |
||
Line 26: | Line 26: | ||
end | end | ||
return resultsTable | return resultsTable | ||
end | |||
-- Additional function to generate the histogram data | |||
-- colWithYear: Contains the index of the column that contains the year information. Expected format "2023-12-30" | |||
function p.generateHistogramChartFromTable(dataTable, colWithYear) | |||
local yearCounts = {} | |||
for _, row in ipairs(dataTable) do | |||
-- Extract the year from the fourth column (publication date) | |||
local date = row[colWithYear] | |||
if date then -- Check if the date exists | |||
local year = date:sub(1, 4) -- Extract the year | |||
if year ~= "" then | |||
yearCounts[year] = (yearCounts[year] or 0) + 1 | |||
end | |||
end | |||
end | |||
local years = {} | |||
local counts = {} | |||
for year, count in pairs(yearCounts) do | |||
table.insert(years, year) | |||
table.insert(counts, count) | |||
end | |||
-- Sort the years to maintain chronological order | |||
table.sort(years) | |||
local sortedCounts = {} | |||
for _, year in ipairs(years) do | |||
table.insert(sortedCounts, yearCounts[year]) | |||
end | |||
local chartData = { | |||
type = 'bar', | |||
data = { | |||
labels = years, -- x-axis labels (years) | |||
datasets = {{ | |||
label = 'Number of Publications', | |||
data = sortedCounts, -- y-axis data (counts) | |||
backgroundColor = 'rgba(54, 162, 235, 0.2)', | |||
borderColor = 'rgba(54, 162, 235, 1)', | |||
hoverBackgroundColor = 'red', | |||
borderWidth = 1 | |||
}} | |||
}, | |||
options = { | |||
scales = { | |||
y = { | |||
beginAtZero = true | |||
} | |||
} | |||
} | |||
} | |||
return chartData | |||
end | end | ||
return M | return M |
Revision as of 09:47, 13 December 2023
Documentation for this module may be created at Module:HelperMethods/doc
local M = {}
-- Required modules for SPARQL queries and HTML table generation
local sparql = require('SPARQL')
local mwHtml = require('mw.html')
-- Utility function to trim and lowercase a string
function M.trimAndLower(str)
if str == nil then return nil end
str = str:gsub("^%s*(.-)%s*$", "%1")
return str:lower()
end
-- Function to convert JSON results into a Lua table
function M.convertJsonToTable(jsonResults)
local resultsTable = {}
if jsonResults and jsonResults.results and jsonResults.results.bindings then
local bindings = jsonResults.results.bindings
for j = 1, #bindings do
local row = {}
for key, value in pairs(bindings[j]) do
table.insert(row, value.value)
end
table.insert(resultsTable, row)
end
end
return resultsTable
end
-- Additional function to generate the histogram data
-- colWithYear: Contains the index of the column that contains the year information. Expected format "2023-12-30"
function p.generateHistogramChartFromTable(dataTable, colWithYear)
local yearCounts = {}
for _, row in ipairs(dataTable) do
-- Extract the year from the fourth column (publication date)
local date = row[colWithYear]
if date then -- Check if the date exists
local year = date:sub(1, 4) -- Extract the year
if year ~= "" then
yearCounts[year] = (yearCounts[year] or 0) + 1
end
end
end
local years = {}
local counts = {}
for year, count in pairs(yearCounts) do
table.insert(years, year)
table.insert(counts, count)
end
-- Sort the years to maintain chronological order
table.sort(years)
local sortedCounts = {}
for _, year in ipairs(years) do
table.insert(sortedCounts, yearCounts[year])
end
local chartData = {
type = 'bar',
data = {
labels = years, -- x-axis labels (years)
datasets = {{
label = 'Number of Publications',
data = sortedCounts, -- y-axis data (counts)
backgroundColor = 'rgba(54, 162, 235, 0.2)',
borderColor = 'rgba(54, 162, 235, 1)',
hoverBackgroundColor = 'red',
borderWidth = 1
}}
},
options = {
scales = {
y = {
beginAtZero = true
}
}
}
}
return chartData
end
return M