Anomalies de vote sur les amendements à la Constitution russe. Partie 1

Un vote de toute la Russie sur l'approbation des amendements à la Constitution de la Fédération de Russie a eu lieu du 25 juin au 1er juillet 2020 (wikipedia) .



L'objectif principal de cet article est de montrer comment vous pouvez rapidement commencer à travailler avec les données de vote et de montrer la présence d'un certain type d'anomalies.



Tous les calculs, visualisations et analyses de données sont fournis dans Google Colab, qui est disponible à partir de ce lien Google Colab .



Lien vers la deuxième partie



Nous nous concentrerons sur l'identification des cas de vote à variance nulle, c'est-à-dire des résultats lorsque tous les PEC d'un même CET votent de manière égale ou avec une variance minimale. Ces cas n'ont pas d'explication naturelle, si ce n'est que le dépouillement des votes n'a pas été effectué.



Cela ressemble à ceci (lien vers les pages CEC TEC 52 , TEC 33 , TEC 42 et TEC 19 ):











beaucoup plus d'exemples
















et quelques autres exemples






















Plus loin dans le texte «Pour» = «Oui», «Contre» = «Non».



Les sources de données



. . , .



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/



Mouvement pour les droits des électeurs "Golos" https://www.golosinfo.org/ .



Associations d'observateurs: https://constitution.observer/



ps Merci à tous ceux qui ont lu. J'espère que vous avez pu vérifier les calculs de l'auteur de vos propres mains, en utilisant du code et des données open source. Remerciement spécialTyomitch et Lissov pour les commentaires pleins d'esprit.






All Articles