Un an après la levée de l'interdiction des élections en ligne, il y avait un grand nombre de nostradams sur le net que le Japon prendrait fin si un parti l'emportait, et la précipitation de Kibayashi-san ne peut pas rattraper son retard.
En passant, cette fois, je vais essayer de calculer la formule Ne pas faire lors de l'élection à la représentation proportionnelle.
http://needtec.sakura.ne.jp/analyze_election/page/dondt/shuin_47
Entrez le nombre de votes et appuyez sur le bouton "Calculer" pour obtenir le nombre de sièges en fonction du nombre de votes. Si la cote d'approbation du parti est poussée telle quelle, le PLD obtiendra 140 sièges, et même la Société de restauration sera anéantie.
Au moment de l'élection de 2013 à la Chambre des conseillers, si vous saisissez le taux de vote pour chaque parti lors de la dernière élection de l'Assemblée métropolitaine de Tokyo, la différence entre le résultat estimé et le résultat réel est de 1 siège.
https://github.com/mima3/analyze_election
Fichier de calcul de formule réelle
dondt_util.py
# coding=utf-8
import os
import re
from collections import defaultdict
import math
import json
import copy
import operator
class political_party_info:
"""
Classe pour stocker les informations du parti
name :Nom de la fête
votes:Nombre de votes
max :Nombre de candidats (quel que soit le nombre de votes que vous obtenez, vous ne pouvez pas obtenir plus de sièges)
seats:Nombre de sièges acquis
"""
def __init__(self, name, votes, max):
self.name = name
self.votes = votes
self.max = max
self.seats = 0
def select_political_party(votes):
"""
Entrez le nom du parti, la valeur politique_party_Obtenez le nom du parti avec le plus de votes dans le dictionnaire avec info
"""
max = -1
ret = None
for k, v in votes.items():
#Si le nombre est le même, il sera décidé par tirage au sort, mais cette fois ce sera dans l'ordre d'inscription
if max < v.votes:
ret = k
max = v.votes
return ret
def dondt(votes_data, max):
"""
Par la méthode Don't
votes_data:Entrez le nom du parti, la valeur politique_party_Dictionnaire avec info
max:Nombre total de sièges
votes_data[x].Le nombre de sièges est stocké dans les sièges.
"""
tmp_votes = copy.deepcopy(votes_data)
for i in range(1, max+1):
s = select_political_party(tmp_votes)
if s is None:
return None
votes_data[s].seats += 1
tmp_votes[s].votes = math.floor(votes_data[s].votes / (votes_data[s].seats + 1))
if tmp_votes[s].max == votes_data[s].seats:
#Le nombre de candidats étant dépassé, le vote pour ce parti est invalide.
tmp_votes[s].votes = 0
return votes_data
Les fractions lors de la recherche d'un quotient sont arrondies. Si le nombre de votes est le même, il est initialement décidé par tirage au sort, mais ici c'est par ordre de code de caractère (l'ex-parti Midori a priorité sur LDP)
Voir ci-dessous pour savoir comment calculer la formule ne pas. http://www.pref.tochigi.lg.jp/senkyo/sangisenkyo/qanda/qanda-9.html
Normalement, le nombre de sièges dans le bloc de la circonscription proportionnelle et le nombre de candidats pour chaque parti doivent être créés à partir de la page du ministère de l'Intérieur et des Communications. Cependant, le ministère de l'Intérieur et des Communications ne le publie qu'en format PDF, qui ne peut être traité sous forme de texte.
Quel que soit le nombre de sièges dans le bloc proportionnel, il est difficile de saisir des données pour les candidats, j'ai donc essayé de créer un fichier CSV en grattant sur le Web la page d'accueil de l'Asahi Shimbun. Les URL suivantes sont ciblées. http://www.asahi.com/senkyo/sousenkyo47/kouho/B01.html ~ http://www.asahi.com/senkyo/sousenkyo47/kouho/B11.html
Il avait la même structure HTML que 2012, donc il sera probablement utilisable lors de la prochaine dissolution.
script/analyze_asahi_hirei.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import urllib2
import lxml.html
import re
import os.path
import urlparse
def print_area(url):
r = urllib2.urlopen(url, timeout=30)
html = r.read()
dom = lxml.html.fromstring(html)
parties = dom.xpath('//div[@class="snkH2Box"]/h2')
tables = dom.xpath('//table[@class="snkTbl01"]')
block = dom.xpath('//div[@class="BreadCrumb"]/h1')[0].text_content().encode('utf-8')
block = block[block.find(':')+len(':'):]
for i in range(0, len(parties)):
h2 = parties[i].text_content().encode('utf-8')
partyName = h2.split('\n')[0]
members = tables[i].xpath('tbody/tr')
for m in members:
name = m.xpath('td[@class="namae"]')[0].text_content().encode('utf-8')
lstNum = m.xpath('td[@class="lstNum"]')[0].text_content().encode('utf-8')
age = m.xpath('td[@class="age"]')[0].text_content().encode('utf-8')
status = m.xpath('td[@class="status"]')[0].text_content().encode('utf-8')
net = m.xpath('td[@class="net"]/ul')[0]
twitterEl = net.xpath('li[@id="twitter"]/a')
facebookEl = net.xpath('li[@id="facebook"]/a')
hpEl = net.xpath('li[@id="HomePage1"]/a')
areaEl = m.xpath('td[@class="w"]/a')
area = ''
twitter = ''
facebook = ''
hp = ''
if twitterEl:
twitter = twitterEl[0].attrib['href'].encode('utf-8')
if facebookEl:
facebook = facebookEl[0].attrib['href'].encode('utf-8')
if hpEl:
hp = hpEl[0].attrib['href'].encode('utf-8')
if areaEl:
area =areaEl[0].text_content().encode('utf-8')
print ('%s,%s,%s,%s,%s,%s,%s,%s,%s,%s' % (block, partyName,lstNum, name, age, status, area, twitter, facebook, hp))
def main(argvs, argc):
"""
Ce script obtient les candidats pour la petite circonscription à partir des informations contenues dans l'Asahi Shimbun.
"""
for i in range(1, 12):
url = ('http://www.asahi.com/senkyo/sousenkyo47/kouho/B%s.html' % str(i).zfill(2))
print_area(url)
if __name__ == '__main__':
argvs = sys.argv
argc = len(argvs)
sys.exit(main(argvs, argc))
** Données des candidats aux quartiers proportionnels avec demi-largeur pleine largeur ou «préfecture» après obtention des données d'Asahi Shimbun ** https://github.com/mima3/analyze_election/blob/master/script/candidate_shuin_47_hirei.csv
** Informations de bloc proportionnelles CSV créées en regardant les données Asahi Shimbun ** https://github.com/mima3/analyze_election/blob/master/script/block_shuin_47_hirei.csv
Recommended Posts