Quais eleições não-SO tiveram mais candidatos?

Aug 17 2020

Cada eleição de moderador de site do Stack Exchange tem uma caixa na barra lateral que diz:

Após 7 dias, os 30 melhores indicados, ordenados por reputação, avançam para a fase primária. No entanto, se houver 10 ou menos candidatos, passamos diretamente para a fase de eleição.

A parte sobre os "30 melhores" nunca foi relevante em nenhuma eleição que vi. Mesmo nas últimas eleições no site principal Stack Overflow, não houve tantos como 30 candidatos. Eu ia perguntar "isso já foi relevante fora do SO", mas deixe-me fazer uma pergunta um pouco mais ampla:

quais eleições mod, fora do SO, tiveram mais candidatos?

Obviamente, eu poderia vasculhar as páginas de todos os sites /electionpara encontrar essas informações, mas talvez alguém conheça uma maneira mais fácil (ou já tenha coletado os dados).

Respostas

12 Glorfindel Aug 17 2020 at 01:19

Três eleições com muitos candidatos (só de memória, não os eliminei - talvez ArtOfCode tenha algum código para isso):

  • a eleição de Matemática de 2014 , com 23 candidatos, dos quais 20 avançaram para a fase primária (o limite era diferente, ao que parece);
  • a eleição de 2016 para a construção de mundos com 19 candidatos;
  • a eleição do Magento 2018 com 19 candidatos.

Isso não conta os candidatos cujas nomeações foram excluídas (por terem sido recentemente suspensas ou postar uma indicação de piada óbvia).

12 rene Aug 17 2020 at 21:12

Permita-me oferecer esta consulta SEDE .

Isso não retornará o resultado correto, mas pode ajudá-lo a encontrar a resposta correta ao aplicar a abordagem descrita na resposta de Glorfindel.

Minha consulta mostra a classificação das eleições com base em todas as nomeações reais já postadas para aquela eleição específica. SE gentilmente ainda fornece as indicações que foram retiradas também.

Não encontrei nenhuma maneira no esquema público de determinar se eles foram retirados. É por isso que a resposta de Glorfindel está correta e esta não.

Então, aqui está a besta de vários sites com uma tabela temporária e índice temporário insanos e um número ainda mais insano de subconsultas.

Eu confio nessa consulta o fato de que as nomeações são registradas como postagens com posttypeid = 6. Essas postagens acontecerão apenas em um curto período de 7 dias e esses períodos são significativamente separados uns dos outros.

Ao ordenar as postagens na data de criação e usando uma função LAG e LEAD para encontrar o tempo em dias entre as postagens, você pode descobrir onde está o início e o fim de um período, pois esses terão uma diferença em dias superior a 7. A função DateDiff vem a calhar aí. Considerei 42 como o ponto de inflexão, permitindo longos períodos de indicação. Assim que você tiver essas datas de início e término, sua ordem determinará qual é o número da eleição. A partir daí, é uma questão de reintegrar os cargos no intervalo de datas encontrado para cada eleição para dar o número de indicados para uma eleição.

O nome do site da coluna está vinculado à página de eleição correta. Lá você pode encontrar o número de candidatos reais. Isso também dirá quantos indicados se retiraram, ou foram retirados, se você comparar isso com o número no resultado da consulta SEDE.

declare @sql nvarchar(max)

create table #result (site sysname
                    , hostname sysname
                    , id integer
                    , creationdate datetime
                    )
                    
create index #idx_hn_cd on #result(hostname, creationdate)


select @sql = N'insert into #result' + STRING_AGG(concat(N'
select ''', name ,N''' as site
     , ''',hostname ,N'''
     , pm.id  
     , pm.creationdate
    from ', quotename(name), N'.dbo.posts pm
    where pm.posttypeid = 6
'),N' 
union all')
from (select convert(nvarchar(max),name) name
    -- , convert(nvarchar(max),sitename)  sitename
    -- , meta
    -- , domain
     ,  concat( 
        -- based on an idea from Glorfindel 
        -- https://meta.stackexchange.com/a/321181
        (case sitename
        WHEN 'Audio' THEN 'video'
        WHEN 'Beer' THEN 'alcohol'
        WHEN 'CogSci' THEN 'psychology'
        WHEN 'Garage' THEN 'mechanics'
        WHEN 'Health' THEN 'medicalsciences'
        WHEN 'Moderators' THEN 'communitybuilding'
        WHEN 'Photography' THEN 'photo'
        WHEN 'Programmers' THEN 'softwareengineering'
        WHEN 'Vegetarian' THEN 'vegetarianism'
        WHEN 'Writers' THEN 'writing'
        WHEN 'Br' THEN 'pt'
        WHEN 'Mathoverflow' THEN concat((meta+'.'), sitename)
        ELSE case when sitename = domain then null else sitename end
        end +'.')
        , (case 
           when sitename <> 'mathoverflow' then (meta+'.') 
           else null 
           end) 
        , (case 
           when sitename <> 'mathoverflow' then concat((domain + '.'), 'com') 
           else 'net' 
           end)
        ) hostname
from (
select name
, case parsename(name,1) 
  when 'Meta' then parsename(name,2)
  else parsename(name,1) 
  end [sitename]
, case parsename(name,1) 
  when 'Meta' then 'meta'
  else null
  end [meta]
  , coalesce(parsename(name,3), parsename(name,2)) [domain]
from sys.databases
where database_id > 5
and (name not like '%.Meta') -- only main sites have elections
) dbs
) dbsall

exec (@sql)

select rank() over (order by count(*) desc) [ranking]
     , s2 [Site name]
     , election [election]
     , start
     , [end]
     , count(*) [# nominees]
from 
(
select ele_data.s2
     , election
     , min(ele_data.creationdate) start
     , max(ele_data.creationdate) [end]
from
(
  select data.s1 s2
  , ceiling((row_number() over(partition by data.s1 order by creationdate) ) / 2.0) election
     --  , min(creationdate) se
     --  , max(creationdate) ee
        , *
  from (
    select #result.site [s1]
         , id 
         , datediff(
           d
           , lag(creationdate, 1 , '2008-09-01') over(partition by site order by creationdate)
           , creationdate) [days prev]
         , datediff(
           d
           , creationdate
           ,lead(creationdate, 1 , getdate()) over(partition by site order by creationdate)
            ) [days next]
         , creationdate
    from #result
  ) data
  where [days prev] > 42 or [days next]> 42
) ele_data
group by ele_data.s2, election
) rollup
inner join #result r 
   on r.site = s2 
   and r.creationdate between  start and [end]
where s2 <> 'StackOverflow'
group by s2, election, start, [end]
order by count(*) desc

Quando executado hoje, este é o resultado principal:

Lembre-se de que o SEDE é atualizado uma vez por semana no domingo.
Vamos elogiar a amável Monica Cellio pelo incrível Tutorial SEDE que ela escreveu.
Diga "Oi" no bate-papo SEDE .