Difference between revisions of "Module:NUMBEROF/rank"

From blackwiki
Jump to navigation Jump to search
blackwiki>Johnuniq
 
blackwiki>Johnuniq
(rank wikipedia sister project only; other sister projects in Module:NUMBEROF/other to split overhead)
Line 1: Line 1:
 
-- Return a table of statistics to be accessed once per page using mw.loadData.
 
-- Return a table of statistics to be accessed once per page using mw.loadData.
-- The table ranks each site of form xxx.wikipedia by its number of articles.
+
-- For each sister project, the table ranks each site by its number of articles.
  
local function makeData()
+
local projects = {
local statistics = mw.ext.data.get('Wikipedia statistics/datarank.tab') -- https://commons.wikimedia.org/wiki/Data:Wikipedia_statistics/datarank.tab
+
'wikipedia',
 +
}
 +
 
 +
local function getData(statistics)
 
local iSite, iArticles
 
local iSite, iArticles
 
for i, v in ipairs(statistics.schema.fields) do
 
for i, v in ipairs(statistics.schema.fields) do
Line 18: Line 21:
 
end
 
end
 
return {
 
return {
rankByIndex = rankByIndex,  -- rankByIndex[1] == 'en.wikipedia'
+
rankByIndex = rankByIndex,  -- rankByIndex[1] == 'en'
rankBySite = rankBySite,    -- rankBySite['en.wikipedia'] == 1
+
rankBySite = rankBySite,    -- rankBySite['en'] == 1
 
}
 
}
 +
end
 +
 +
local function makeData()
 +
-- For example, data to rank each language for sister project wikipedia is at
 +
-- https://commons.wikimedia.org/wiki/Data:Wikipedia_statistics/rank/wikipedia.tab
 +
local result = {}
 +
for _, project in ipairs(projects) do
 +
local file = 'Wikipedia statistics/rank/' .. project .. '.tab'
 +
result[project] = getData(mw.ext.data.get(file))
 +
end
 +
return result
 
end
 
end
  
 
return makeData()
 
return makeData()

Revision as of 10:06, 3 June 2020

Documentation for this module may be created at Module:NUMBEROF/rank/doc

-- Return a table of statistics to be accessed once per page using mw.loadData.
-- For each sister project, the table ranks each site by its number of articles.

local projects = {
	'wikipedia',
}

local function getData(statistics)
	local iSite, iArticles
	for i, v in ipairs(statistics.schema.fields) do
		if v.name == 'site' then
			iSite = i
		elseif v.name == 'articles' then
			iArticles = i
		end
	end
	local rankBySite, rankByIndex = {}, {}
	for _, v in ipairs(statistics.data) do
		rankBySite[v[iSite]] = v[iArticles]   -- rank of site from number of articles
		rankByIndex[v[iArticles]] = v[iSite]  -- inverse
	end
	return {
		rankByIndex = rankByIndex,  -- rankByIndex[1] == 'en'
		rankBySite = rankBySite,    -- rankBySite['en'] == 1
	}
end

local function makeData()
	-- For example, data to rank each language for sister project wikipedia is at
	-- https://commons.wikimedia.org/wiki/Data:Wikipedia_statistics/rank/wikipedia.tab
	local result = {}
	for _, project in ipairs(projects) do
		local file = 'Wikipedia statistics/rank/' .. project .. '.tab'
		result[project] = getData(mw.ext.data.get(file))
	end
	return result
end

return makeData()