Modulo:Demografia: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
refactoring e raffinamento calcolo default |
fix posizione modulo |
||
(12 versioni intermedie di 2 utenti non mostrate) | |||
Riga 1:
local mWikidata = require('Modulo:Wikidata')
local mChart = require('Modulo:Graph/sandbox')
local p = {}
Riga 10 ⟶ 11:
end
local function
local max = 0
for _,
if
end
return max
Riga 21 ⟶ 22:
-- Eventuali valori non numerici sono ignorati
local function read_array(args)
local
local populations = {}▼
local
raw_data[i] = {year=string.gsub(years[i], "%s", "") , population = tonumber(populations[i]) or 0 }
end▼
▲ if args.popolazione then
for _,s in ipairs(list) do▼
end
end
end▼
for i=1,20 do
local index = tonumber(i)
local year = tonumber(args['a' .. index])
if year then
end
end
end
return
end
local function comp_year(d1, d2)
return d1.year < d2.year
end
local function get_wikidata(from)
local populations_raw = mWikidata._getProperty({'P1082', from=from, rank='normal'}, true)▼
local
▲ local years = {}
▲
for _, claim in ipairs(claims) do
population = tonumber(mWikidata._formatStatement(claim)) or 0,
year = mWikidata._formatQualifiers(claim, 'P585')
}
end
table.sort(raw_data, comp_year)
return raw_data
end
local function default_table(popmax, n)
local default = {}
local log_p = math.ceil(math.log10(popmax))
Riga 76 ⟶ 82:
default.passo2 = 2 * 10 ^ (log_p-2)
end
default.dimx = 488
if n > 15 then default.dimx = 488 + (n-15) * 20 end
return default
end
local function
local
local
years[i], populations[i] =
from_wikidata = true▼
end
if #years == 0 then return '' end▼
graphwidth = tonumber(args.dimx) or default.dimx,
local popmax = max_array(populations)▼
graphheight = tonumber(args.dimy) or 280,
local is_thousand = false▼
ygrid = true,
if from_wikidata and popmax >= 900000 then▼
xtitle = 'anni',
▲ for index,population in ipairs(populations) do
y = { populations
graph_type = 'rect',
▲ end
seriesTitles = {'Popolazione'},
-- calcolo default per la popolazione▼
colors = {'#4682B4'},
local default = default_table(popmax)▼
showValue = true
-- generazione del grafico▼
}
local graph_json = mChart.chart_json(graph)
if args.raw then return graph_json end
return mw.getCurrentFrame():extensionTag('graph', graph_json)
end
local function draw_timeline(raw_data, args, default)
local graph = {}
dump(graph, 'Colors=\n id:lightgrey value:gray(0.9)\n id:darkgrey value:gray(0.7)\n id:sfondo value:rgb(1,1,1)\n id:barra value:rgb(0.6,0.7,0.8)\n\n')
dump(graph, 'ImageSize = width:', args.dimx or
dump(graph, 'PlotArea = left:50 bottom:50 top:30 right:30\nDateFormat = x.y\n')
dump(graph, 'Period = from:0 till:', args.popmax or tostring(default.popmax), '\n')
Riga 109 ⟶ 123:
dump(graph, 'BackgroundColors = canvas:sfondo\n')
dump(graph, 'BarData=\n')
for _,
dump(graph, string.format(' bar: %
end
dump(graph, '\n')
dump(graph, 'PlotData=\n color:barra width:20 align:left\n\n')
for
dump(graph, string.format(' bar:%
end
dump(graph, '\n')
local lang = mw.language.new('it')
dump(graph, 'PlotData=\n')
for
local p_formatted = lang:formatNum(math.floor(
dump(graph, string.format(' bar: %
end
dump(graph, '\n')
Riga 135 ⟶ 149:
draw_graph = mw.getCurrentFrame():extensionTag('timeline', table.concat(graph))
end
return draw_graph
local titolo = "''Abitanti censiti''\n"▼
end
function p._demografia(args)
local graph
local raw_data = read_array(args)
local from_wikidata = false
if #raw_data == 0 then
raw_data = get_wikidata(args.from)
▲ from_wikidata = true
-- if true then return mw.text.jsonEncode(raw_data, mw.text.JSON_PRETTY) end
end
▲ local is_thousand = false
▲ if from_wikidata and popmax >= 900000 then
popmax = popmax / 1000
raw_data[i].population = raw_data[i].population / 1000
is_thousand = true
▲ end
end
▲ -- calcolo default per la popolazione
▲ local default = default_table(popmax, #raw_data)
▲ -- generazione del grafico
if is_thousand then
titolo = "''Abitanti censiti (migliaia)''
end
if args.titolo then
titolo = "''" .. args.titolo .. "''
end
if args.graph then
graph = draw_graph(raw_data, args, default)
else
graph = draw_timeline(raw_data, args, default)
end
return titolo ..
end
|