-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmandatberegning.py
115 lines (95 loc) · 3 KB
/
mandatberegning.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import numpy as np
import random as rd
# 0-AP, 1-høyre, 2- frp,3- sv, 4-sp, 5-krf, 6-venstre, 7- MDG, 8-Rødt,9 andre
partier=np.array([ 'AP', 'høyre', '2- frp','3- sv', '4-sp', '5-krf', '6-venstre', '7- MDG', '8-Rødt','9 andre'])
def mandat_fra_pct_fylke(pct, ant_stemmer, ant_dirm,weight=[], div_14=True):
st_tall=0.01*pct*ant_stemmer
kvot=np.copy(st_tall)/1.4
if div_14:
kvot=st_tall/1.4
else:
kvot=np.copy(st_tall)
lenp=len(pct)
ant_dirm=int(ant_dirm)
kvot_s=np.zeros([lenp,ant_dirm])
mandater_s=np.zeros([lenp,ant_dirm])
for i in np.arange(ant_dirm):
ind_max=[j for j in np.arange(lenp) if kvot[j]==np.max(kvot)]
if (len(ind_max)>1 and i==(ant_dirm-1)):
print('Advarsel: siste mandatet fikk likt resultat for partier')
print(partier[ind_max])
ind_corr=ind_max[0]
if (i==0):
mandater_s[ind_corr,0]=1
else:
mandater_s[:,i]=mandater_s[:,i-1]
mandater_s[ind_corr,i]+=1
kvot[ind_corr]=st_tall[ind_corr]/((mandater_s[ind_corr,i])*2+1)
kvot_s[:,i]=kvot
return mandater_s,kvot_s,st_tall
def mandat_fra_stt_fylke(st_tall, ant_dirm,weight=[]):
#st_tall=0.01*pct*ant_stemmer
kvot=st_tall/1.4
lenp=len(st_tall)
ant_dirm=int(ant_dirm)
kvot_s=np.zeros([lenp,ant_dirm])
mandater_s=np.zeros([lenp,ant_dirm])
for i in np.arange(ant_dirm):
ind_max=[j for j in np.arange(lenp) if kvot[j]==np.max(kvot)]
if (len(ind_max)>1 and i==(ant_dirm-1)):
print('Advarsel: siste mandatet fikk likt resultat for partier')
print(partier[ind_max])
ind_corr=ind_max[0]
if (i==0):
mandater_s[ind_corr,0]=1
else:
mandater_s[:,i]=mandater_s[:,i-1]
mandater_s[ind_corr,i]+=1
kvot[ind_corr]=st_tall[ind_corr]/((mandater_s[ind_corr,i])*2+1)
kvot_s[:,i]=kvot
return mandater_s,kvot_s,st_tall
def mandater_fra_stemmetall(st_tall,ant_dirm):
kvot=st_tall/1.4
lenp=len(pct)
kvot_s=np.zeros([lenp,ant_dirm])
mandater_s=np.zeros([lenp,ant_dirm])
for i in np.arange(ant_dirm):
kvot_s[:,i]=kvot
ind_max=[j for j in np.arange(lenp) if kvot[j]==np.max(kvot)]
if (len(ind_max)>1 and i==(ant_dirm-1)):
print('Advarsel: siste mandatet fikk likt resultat for partier')
print(partier[ind_max])
ind_corr=ind_max[0]
if (i==0):
mandater_s[ind_corr,0]=1
else:
mandater_s[:,i]=mandater_s[:,i-1]
mandater_s[ind_corr,i]+=1
kvot[ind_corr]=st_tall[ind_corr]/((mandater_s[ind_corr,i])*2+1)
return mandater_s,kvot_s
def pert_mandatb(pct, std, ant_stemmer,ant_dirm, its):
lenp=len(pct)
mand_s=np.zeros([lenp,its])
kvot_s=np.zeros([lenp,its])
st_tall=np.zeros([lenp,its])
for i in np.arange(its):
pert_pct=rd.gauss(pct,std)
pert_pct=pert_pct*100./sum(pert_pct)
for k in np.arange(len(pert_pct)):
if (pert_pct[k]<0): pert_pct[k]=0.001
#print(pert_pct)
mand,kvot,st_talli=mandat_fra_pct_fylke(pert_pct,ant_stemmer, ant_dirm)
mand_s[:,i]=mand[:,-1]
st_tall[:,i]=st_talli
kvot_s[:,i]=kvot[:,-1]
return mand_s,kvot_s,st_tall
pct=np.array([29.0, #ap
26.6, #høyre
13.3, #frp
4.2, #sv
5.8, #sp
3.1, #krf
4.5, #venstre
3.7, #mdg
1.8, #rødt
1.4]) #andre