Anomalias de votação nas emendas à Constituição Russa. Parte 1

Uma votação de todos os russos sobre a aprovação de emendas à Constituição da Federação Russa foi realizada de 25 de junho a 1 de julho de 2020 (wikipedia) .



O principal objetivo desta postagem é demonstrar como você pode rapidamente começar a trabalhar com dados de votação e mostrar a presença de um certo tipo de anomalia neles.



Todos os cálculos, visualizações e análise de dados são fornecidos no Google Colab, que está disponível neste link do Google Colab .



Link para a segunda parte



Focaremos na identificação de casos de votação de variância zero, ou seja, resultados quando todos os PECs dentro de um TEC votam igualmente ou com variância mínima. Esses casos não têm explicação natural, exceto que a contagem dos votos não foi realizada.



Tem a seguinte aparência (link para as páginas CEC TEC 52 , TEC 33 , TEC 42 e TEC 19 ):











muitos mais exemplos
















e mais alguns exemplos






















Mais adiante no texto 'Para' = 'Sim', 'Contra' = 'Não'.



Fontes de dados



. . , .



JSON CSV . (no data, no job!). , , Telegram- RUElectionData .





  1. .
  2. , 10.00 12.00 15.00 18.00 .
  3. , .


, .



. () youtube.



18 « » . ( ) 12.00 10.00 3%, 15.00 12.00 5% ( ).





, 91%, — 90% ( ).







Runtime->Run All. 15 .



Google Drive Google account. GoogleCredentials . , . .



.



.



( « »). turnouts_05_Jul_2020_14_56.zip results_06_Jul_2020_19_05.zip RUElectionData.



df2 df1 df:



df= pd.merge(df1, df2.drop(columns=['reg']), how='inner',on=['tik', 'uik'])


transliterate:



!pip install transliterate
from transliterate import translit


:



df['turnout_pct']=df['n_ballots_all']/df['n_registered_voters']*100.
df['yes_pct']=df['yes']/df['n_ballots_polling_station']*100.
df['no_pct']=df['no']/df['n_ballots_polling_station']*100.  
df['invalid_pct']=df['n_ballots_invalid']/df['n_ballots_polling_station']*100.


:



df_original=df.copy(deep=True)


. « » «» «». 100%.



df=df[df['turnout_pct']<100.]
ax = df.plot.scatter(x='turnout_pct',y='yes_pct',label=' ()',c='DarkBlue',s=0.001)
ax = df.plot.scatter(x='turnout_pct',y='no_pct',label=' ()',c='DarkRed',s=0.001,ax=ax)




, , «» :







«» :







80%, 85%, 90% 95%.



. , , , .



. , ( ) (: A Model Is Only as Good as Its Assumptions).



« » Excel . () wiki:Median absolute deviation.



, «» . , . , 1- 2- . , , url , .



100 ‘’ 153 5570 6 . 5.5 . .



«» . .



. ().



4 , : « ».



« » 50 «»(«»).





« », . ( ) id_num . id_num 1616, 1995 2165.



id_num=1616 33 ,

( ). :





, «» ( yes_pct) 71.9%. :







, « » «». plot_top_n_results . plot_top_n_results=50 plot_top_n_results=300 .



.



import shutil
from google.colab import files
directory='/content/drive/anomaly/dispersion'
shutil.make_archive(directory, 'zip', directory)
files.download('/content/drive/anomaly/dispersion.zip')




10 . 10 . .



Facebook' .



:

https://elections.dekoder.org/ru/russia/constitution/2020/

https://www.electoral.graphics/ru-ru/



Movimento pelos direitos do eleitor "Golos" https://www.golosinfo.org/ .



Associações de observadores: https://constitution.observer/



PS Obrigado a todos que leram. Espero que você tenha conseguido verificar os cálculos do autor com suas próprias mãos, usando código-fonte aberto e dados. Agradecimentos especiaistyomitch e Lissov pelos comentários espirituosos.






All Articles