sapor 0.3.4 → 0.3.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/sapor/poll.rb +3 -5
- data/lib/sapor/regional_data/{european_union_france_2019.rb → european_union_27_france.rb} +10 -10
- data/lib/sapor/regional_data/european_union_france.rb +8 -8
- data/lib/sapor/regional_data/european_union_latvia.rb +5 -5
- data/lib/sapor/regional_data/european_union_luxembourg.rb +1 -1
- data/lib/sapor/regional_data/greece.rb +5 -5
- data/lib/sapor/regional_data/latvia-20181006.psv +104 -0
- data/lib/sapor/regional_data/latvia.rb +43 -44
- data/lib/sapor/regional_data/luxembourg-20131020.psv +0 -16
- data/lib/sapor/regional_data/luxembourg-20181014.psv +59 -0
- data/lib/sapor/regional_data/luxembourg.rb +26 -20
- data/lib/sapor.rb +1 -4
- data/sapor.gemspec +1 -1
- data/spec/unit/{european_union_france_2019_spec.rb → european_union_27_france_spec.rb} +11 -11
- data/spec/unit/european_union_france_spec.rb +2 -2
- data/spec/unit/greece_spec.rb +2 -2
- data/spec/unit/latvia_spec.rb +19 -17
- data/spec/unit/luxembourg_spec.rb +13 -12
- metadata +7 -14
- data/lib/sapor/regional_data/latvia_kpv.rb +0 -112
- data/lib/sapor/regional_data/latvia_kpv_p_par.rb +0 -112
- data/lib/sapor/regional_data/latvia_kpv_par.rb +0 -112
- data/spec/unit/latvia_kpv_p_par_spec.rb +0 -38
- data/spec/unit/latvia_kpv_par_spec.rb +0 -38
- data/spec/unit/latvia_kpv_spec.rb +0 -38
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f25fefeb34310d1cabbfa39e487ca17da86a423fb0c717f4e2171aeaa2efcf57
|
4
|
+
data.tar.gz: 668f74a5b33fb288533e5ffca9d0b6eb5e8b743bfa22311070c8b439cb830359
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f821ce4a0511660b8547873da615b74d7ccd90648cef7f623b9aa9fb44c3f0c56030574748bd5e9db30e55c03cca70dca63de6c29ae52ac12026bbbf743e1c3e
|
7
|
+
data.tar.gz: 11dc904bc2e19ff3d79342e795f04f6858d2ae2a7e30e5eef3a44fa61f32d1f89991c3b1fc47938379d5adffbea9e3d1fa2aaf2550c41ecd30efd5e4c13f9443
|
data/lib/sapor/poll.rb
CHANGED
@@ -43,6 +43,7 @@ module Sapor
|
|
43
43
|
EuropeanUnion27Denmark.instance,
|
44
44
|
EuropeanUnion27Estonia.instance,
|
45
45
|
EuropeanUnion27Finland.instance,
|
46
|
+
EuropeanUnion27France.instance,
|
46
47
|
EuropeanUnion27Ireland.instance,
|
47
48
|
EuropeanUnion27IrelandWithIa.instance,
|
48
49
|
EuropeanUnion27Italy.instance,
|
@@ -62,7 +63,6 @@ module Sapor
|
|
62
63
|
EuropeanUnionFinland.instance,
|
63
64
|
EuropeanUnionFlanders.instance,
|
64
65
|
EuropeanUnionFrance.instance,
|
65
|
-
EuropeanUnionFrance2019.instance,
|
66
66
|
EuropeanUnionFrenchCommunityOfBelgium.instance,
|
67
67
|
EuropeanUnionGermany.instance,
|
68
68
|
EuropeanUnionGreatBritain.instance,
|
@@ -84,8 +84,6 @@ module Sapor
|
|
84
84
|
EuropeanUnionSlovenia.instance,
|
85
85
|
EuropeanUnionSpain.instance,
|
86
86
|
EuropeanUnionSweden.instance].freeze
|
87
|
-
LATVIAN_AREAS = [Latvia.instance, LatviaKpv.instance, \
|
88
|
-
LatviaKpvPar.instance, LatviaKpvPPar.instance].freeze
|
89
87
|
NORWEGIAN_AREAS = [Norway.instance, NorwegianMunicipality::BERGEN,
|
90
88
|
NorwegianMunicipality::OSLO,
|
91
89
|
NorwegianMunicipality::TRONDHEIM].freeze
|
@@ -104,10 +102,10 @@ module Sapor
|
|
104
102
|
PortugalWithoutPaf.instance].freeze
|
105
103
|
AREAS_MAP = {}
|
106
104
|
(BELGIAN_AREAS + CATALONIAN_AREAS + DANISH_AREAS + EUROPEAN_UNION_AREAS + \
|
107
|
-
|
105
|
+
NORWEGIAN_AREAS + POLISH_AREAS + PORTUGUESE_AREAS + \
|
108
106
|
[Austria.instance, Estonia.instance, Finland.instance,
|
109
107
|
FinlandWithSin.instance, France.instance, Greece.instance,
|
110
|
-
Hungary.instance, Iceland.instance, Luxembourg.instance,
|
108
|
+
Hungary.instance, Iceland.instance, Latvia.instance, Luxembourg.instance,
|
111
109
|
Netherlands.instance, Slovakia.instance, Slovenia.instance,
|
112
110
|
Spain.instance, Sweden.instance, Sweden20140914.instance,
|
113
111
|
UnitedKingdom.instance, UnitedKingdomWithBrexit.instance,
|
@@ -21,11 +21,11 @@ module Sapor
|
|
21
21
|
#
|
22
22
|
# The regional data for the European Union: France.
|
23
23
|
#
|
24
|
-
class
|
24
|
+
class EuropeanUnion27France < Area
|
25
25
|
include Singleton
|
26
26
|
|
27
27
|
def area_code
|
28
|
-
'
|
28
|
+
'EU27[FR]'
|
29
29
|
end
|
30
30
|
|
31
31
|
def coalitions
|
@@ -57,18 +57,18 @@ module Sapor
|
|
57
57
|
['La France insoumise (GUE/NGL)',
|
58
58
|
'Nouveau Parti anticapitaliste (GUE/NGL)',
|
59
59
|
'Parti communiste français (GUE/NGL)'],
|
60
|
-
['Les Patriotes (EFDD)'],
|
61
60
|
['Les Républicains (EPP)'],
|
62
|
-
['
|
63
|
-
'
|
61
|
+
['Les Patriotes (*)', 'Lutte Ouvrière (*)',
|
62
|
+
'Mouvement des gilets jaunes (*)', 'Résistons! (*)',
|
63
|
+
'Union populaire républicaine (*)']].freeze
|
64
64
|
|
65
65
|
NO_OF_SEATS = 79
|
66
66
|
|
67
|
-
# Voter turnout on
|
68
|
-
# Source: Web page with the official results of the elections of 25 May
|
69
|
-
#
|
70
|
-
# https://en.wikipedia.org/wiki/
|
71
|
-
POPULATION_SIZE =
|
67
|
+
# Voter turnout on 26 May 2019
|
68
|
+
# Source: Web page with the official results of the elections of 25-26 May
|
69
|
+
# 2019, downloaded on 30 December 2019,
|
70
|
+
# https://en.wikipedia.org/wiki/2019_European_Parliament_election_in_France
|
71
|
+
POPULATION_SIZE = 22_655_174
|
72
72
|
|
73
73
|
THRESHOLD = 0.05
|
74
74
|
|
@@ -57,18 +57,18 @@ module Sapor
|
|
57
57
|
['La France insoumise (GUE/NGL)',
|
58
58
|
'Nouveau Parti anticapitaliste (GUE/NGL)',
|
59
59
|
'Parti communiste français (GUE/NGL)'],
|
60
|
-
['Les Patriotes (EFDD)'],
|
61
60
|
['Les Républicains (EPP)'],
|
62
|
-
['
|
63
|
-
'
|
61
|
+
['Les Patriotes (*)', 'Lutte Ouvrière (*)',
|
62
|
+
'Mouvement des gilets jaunes (*)', 'Résistons! (*)',
|
63
|
+
'Union populaire républicaine (*)']].freeze
|
64
64
|
|
65
65
|
NO_OF_SEATS = 74
|
66
66
|
|
67
|
-
# Voter turnout on
|
68
|
-
# Source: Web page with the official results of the elections of 25 May
|
69
|
-
#
|
70
|
-
# https://en.wikipedia.org/wiki/
|
71
|
-
POPULATION_SIZE =
|
67
|
+
# Voter turnout on 26 May 2019
|
68
|
+
# Source: Web page with the official results of the elections of 25-26 May
|
69
|
+
# 2019, downloaded on 30 December 2019,
|
70
|
+
# https://en.wikipedia.org/wiki/2019_European_Parliament_election_in_France
|
71
|
+
POPULATION_SIZE = 22_655_174
|
72
72
|
|
73
73
|
THRESHOLD = 0.05
|
74
74
|
|
@@ -48,16 +48,16 @@ module Sapor
|
|
48
48
|
|
49
49
|
COALITIONS = [['Attīstībai/Par! (RE)'],
|
50
50
|
['Jaunā Saskaņa (GUE/NGL)'],
|
51
|
-
['Jaunā
|
52
|
-
'KPV LV (EPP)',
|
51
|
+
['Jaunā VIENOTĪBA (EPP)', 'Jaunā konservatīvā partija (EPP)',
|
52
|
+
'Politiskā partija „KPV LV” (EPP)',
|
53
53
|
'Zaļo un Zemnieku savienība (EPP)'],
|
54
54
|
['Latvijas Krievu savienība (Greens/EFA)'],
|
55
|
-
['Latvijas Reģionu
|
55
|
+
['Latvijas Reģionu Apvienība (ECR)',
|
56
56
|
'Nacionālā apvienība „Visu Latvijai!”–„Tēvzemei un ' \
|
57
57
|
'Brīvībai/LNNK” (ECR)'],
|
58
58
|
['No sirds Latvijai (*)', 'Vienoti Latvijai (*)'],
|
59
|
-
['
|
60
|
-
'Sociāldemokrātiskā
|
59
|
+
['PROGRESĪVIE (S&D)',
|
60
|
+
'Sociāldemokrātiskā partija “Saskaņa” (S&D)']].freeze
|
61
61
|
|
62
62
|
NO_OF_SEATS = 8
|
63
63
|
|
@@ -50,7 +50,7 @@ module Sapor
|
|
50
50
|
['Chrëschtlech-Sozial Vollekspartei (EPP)'],
|
51
51
|
['déi gréng (Greens/EFA)',
|
52
52
|
'Piratepartei Lëtzebuerg (Greens/EFA)'],
|
53
|
-
['
|
53
|
+
['déi Lénk (GUE/NGL)'],
|
54
54
|
['Demokratesch Partei (RE)'],
|
55
55
|
['Kommunistesch Partei Lëtzebuerg (*)',
|
56
56
|
'Partei fir Integral Demokratie (*)'],
|
@@ -72,11 +72,11 @@ module Sapor
|
|
72
72
|
|
73
73
|
NO_OF_BONUS_SEATS = 50
|
74
74
|
|
75
|
-
# Number of registered voters on
|
76
|
-
# Source: Greek legislative election,
|
77
|
-
#
|
78
|
-
# URL: https://en.wikipedia.org/wiki/
|
79
|
-
POPULATION_SIZE =
|
75
|
+
# Number of registered voters on 7 July 2019
|
76
|
+
# Source: Greek legislative election, 7 July 2019, retrieved on 27
|
77
|
+
# December 2019.
|
78
|
+
# URL: https://en.wikipedia.org/wiki/2019_Greek_legislative_election
|
79
|
+
POPULATION_SIZE = 5_769_542
|
80
80
|
|
81
81
|
THRESHOLD = 0.03
|
82
82
|
|
@@ -0,0 +1,104 @@
|
|
1
|
+
# Statistical Analysis of Polling Results (SAPoR)
|
2
|
+
# Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
|
3
|
+
#
|
4
|
+
# This file is part of SAPoR.
|
5
|
+
#
|
6
|
+
# SAPoR is free software: you can redistribute it and/or modify it under the
|
7
|
+
# terms of the GNU General Public License as published by the Free Software
|
8
|
+
# Foundation, either version 3 of the License, or (at your option) any later
|
9
|
+
# version.
|
10
|
+
#
|
11
|
+
# SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
|
12
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
13
|
+
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
14
|
+
#
|
15
|
+
# You can find a copy of the GNU General Public License in /doc/gpl.txt
|
16
|
+
#
|
17
|
+
|
18
|
+
# Source: "13. Saeimas vēlēšanas". Retrieved on 28 December 2019.
|
19
|
+
# URL: https://sv2018.cvk.lv/pub/ElectionResults
|
20
|
+
|
21
|
+
Kurzeme | Politiskā partija „KPV LV” | 21,220
|
22
|
+
Kurzeme | Jaunā konservatīvā partija | 15,751
|
23
|
+
Kurzeme | Zaļo un Zemnieku savienība | 14,925
|
24
|
+
Kurzeme | Nacionālā apvienība „Visu Latvijai!”–„Tēvzemei un Brīvībai/LNNK” | 13,292
|
25
|
+
Kurzeme | Attīstībai/Par! | 11,830
|
26
|
+
Kurzeme | Sociāldemokrātiskā partija “Saskaņa” | 8,960
|
27
|
+
Kurzeme | Jaunā VIENOTĪBA | 5,839
|
28
|
+
Kurzeme | Latvijas Reģionu Apvienība | 5,661
|
29
|
+
Kurzeme | PROGRESĪVIE | 2,695
|
30
|
+
Kurzeme | No sirds Latvijai | 1,241
|
31
|
+
Kurzeme | Latvijas Krievu savienība | 912
|
32
|
+
Kurzeme | Latviešu Nacionālisti | 616
|
33
|
+
Kurzeme | Apvienība SKG | 330
|
34
|
+
Kurzeme | Par Alternatīvu | 207
|
35
|
+
Kurzeme | Latvijas centriskā partija | 150
|
36
|
+
Kurzeme | Rīcības partija | 106
|
37
|
+
|
38
|
+
Latgale | Sociāldemokrātiskā partija “Saskaņa” | 32,159
|
39
|
+
Latgale | Zaļo un Zemnieku savienība | 12,539
|
40
|
+
Latgale | Latvijas Krievu savienība | 9,561
|
41
|
+
Latgale | Jaunā konservatīvā partija | 7,900
|
42
|
+
Latgale | Politiskā partija „KPV LV” | 6,874
|
43
|
+
Latgale | Jaunā VIENOTĪBA | 5,067
|
44
|
+
Latgale | Nacionālā apvienība „Visu Latvijai!”–„Tēvzemei un Brīvībai/LNNK” | 4,465
|
45
|
+
Latgale | Attīstībai/Par! | 4,181
|
46
|
+
Latgale | Latvijas Reģionu Apvienība | 3,849
|
47
|
+
Latgale | No sirds Latvijai | 865
|
48
|
+
Latgale | PROGRESĪVIE | 840
|
49
|
+
Latgale | Apvienība SKG | 242
|
50
|
+
Latgale | Latviešu Nacionālisti | 209
|
51
|
+
Latgale | Rīcības partija | 204
|
52
|
+
Latgale | Par Alternatīvu | 168
|
53
|
+
Latgale | Latvijas centriskā partija | 154
|
54
|
+
|
55
|
+
Rīga | Sociāldemokrātiskā partija “Saskaņa” | 88,260
|
56
|
+
Rīga | Attīstībai/Par! | 39,209
|
57
|
+
Rīga | Politiskā partija „KPV LV” | 35,895
|
58
|
+
Rīga | Jaunā konservatīvā partija | 35,696
|
59
|
+
Rīga | Nacionālā apvienība „Visu Latvijai!”–„Tēvzemei un Brīvībai/LNNK” | 26,995
|
60
|
+
Rīga | Jaunā VIENOTĪBA | 19,536
|
61
|
+
Rīga | Zaļo un Zemnieku savienība | 14,103
|
62
|
+
Rīga | Latvijas Krievu savienība | 11,207
|
63
|
+
Rīga | PROGRESĪVIE | 9,936
|
64
|
+
Rīga | Latvijas Reģionu Apvienība | 6,066
|
65
|
+
Rīga | No sirds Latvijai | 2,003
|
66
|
+
Rīga | Par Alternatīvu | 1,265
|
67
|
+
Rīga | Latviešu Nacionālisti | 1,153
|
68
|
+
Rīga | Apvienība SKG | 396
|
69
|
+
Rīga | Rīcības partija | 282
|
70
|
+
Rīga | Latvijas centriskā partija | 226
|
71
|
+
|
72
|
+
Vidzeme | Jaunā konservatīvā partija | 38,893
|
73
|
+
Vidzeme | Politiskā partija „KPV LV” | 34,341
|
74
|
+
Vidzeme | Attīstībai/Par! | 33,651
|
75
|
+
Vidzeme | Nacionālā apvienība „Visu Latvijai!”–„Tēvzemei un Brīvībai/LNNK” | 31,466
|
76
|
+
Vidzeme | Zaļo un Zemnieku savienība | 27,448
|
77
|
+
Vidzeme | Sociāldemokrātiskā partija “Saskaņa” | 26,146
|
78
|
+
Vidzeme | Jaunā VIENOTĪBA | 16,940
|
79
|
+
Vidzeme | Latvijas Reģionu Apvienība | 14,458
|
80
|
+
Vidzeme | PROGRESĪVIE | 6,239
|
81
|
+
Vidzeme | Latvijas Krievu savienība | 3,061
|
82
|
+
Vidzeme | No sirds Latvijai | 1,844
|
83
|
+
Vidzeme | Latviešu Nacionālisti | 1,387
|
84
|
+
Vidzeme | Par Alternatīvu | 787
|
85
|
+
Vidzeme | Apvienība SKG | 506
|
86
|
+
Vidzeme | Rīcības partija | 297
|
87
|
+
Vidzeme | Latvijas centriskā partija | 211
|
88
|
+
|
89
|
+
Zemgale | Politiskā partija „KPV LV” | 21,934
|
90
|
+
Zemgale | Nacionālā apvienība „Visu Latvijai!”–„Tēvzemei un Brīvībai/LNNK” | 16,745
|
91
|
+
Zemgale | Jaunā konservatīvā partija | 16,454
|
92
|
+
Zemgale | Zaļo un Zemnieku savienība | 14,660
|
93
|
+
Zemgale | Attīstībai/Par! | 12,814
|
94
|
+
Zemgale | Sociāldemokrātiskā partija “Saskaņa” | 11,592
|
95
|
+
Zemgale | Jaunā VIENOTĪBA | 9,160
|
96
|
+
Zemgale | Latvijas Reģionu Apvienība | 4,984
|
97
|
+
Zemgale | PROGRESĪVIE | 2,368
|
98
|
+
Zemgale | Latvijas Krievu savienība | 2,273
|
99
|
+
Zemgale | No sirds Latvijai | 1,161
|
100
|
+
Zemgale | Latviešu Nacionālisti | 880
|
101
|
+
Zemgale | Par Alternatīvu | 473
|
102
|
+
Zemgale | Apvienība SKG | 261
|
103
|
+
Zemgale | Rīcības partija | 170
|
104
|
+
Zemgale | Latvijas centriskā partija | 156
|
@@ -27,52 +27,24 @@ module Sapor
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def coalitions
|
30
|
-
|
31
|
-
['KPV LV', 'Sociāldemokrātiskā Partija “Saskaņa”',
|
32
|
-
'Zaļo un Zemnieku savienība'],
|
33
|
-
['Kustība Par!',
|
34
|
-
'Nacionālā apvienība „Visu Latvijai!”–„Tēvzemei un Brīvībai/LNNK”',
|
35
|
-
'Vienotība', 'Zaļo un Zemnieku savienība'],
|
36
|
-
['Kustība Par!',
|
37
|
-
'Nacionālā apvienība „Visu Latvijai!”–„Tēvzemei un Brīvībai/LNNK”',
|
38
|
-
'Zaļo un Zemnieku savienība'],
|
39
|
-
['Kustība Par!', 'Jaunā konservatīvā partija',
|
40
|
-
'Nacionālā apvienība „Visu Latvijai!”–„Tēvzemei un Brīvībai/LNNK”',
|
41
|
-
'Vienotība'],
|
42
|
-
['Kustība Par!', 'Jaunā konservatīvā partija',
|
43
|
-
'Nacionālā apvienība „Visu Latvijai!”–„Tēvzemei un Brīvībai/LNNK”',
|
44
|
-
'Vienotība', 'Zaļo un Zemnieku savienība'],
|
45
|
-
['Kustība Par!', 'Jaunā konservatīvā partija',
|
46
|
-
'Nacionālā apvienība „Visu Latvijai!”–„Tēvzemei un Brīvībai/LNNK”',
|
47
|
-
'Zaļo un Zemnieku savienība'],
|
48
|
-
['Kustība Par!', 'Jaunā konservatīvā partija',
|
49
|
-
'Sociāldemokrātiskā Partija “Saskaņa”'],
|
50
|
-
['Kustība Par!', 'Sociāldemokrātiskā Partija “Saskaņa”'],
|
51
|
-
['Jaunā konservatīvā partija',
|
52
|
-
'Nacionālā apvienība „Visu Latvijai!”–„Tēvzemei un Brīvībai/LNNK”',
|
53
|
-
'Vienotība', 'Zaļo un Zemnieku savienība'],
|
54
|
-
['Jaunā konservatīvā partija',
|
55
|
-
'Nacionālā apvienība „Visu Latvijai!”–„Tēvzemei un Brīvībai/LNNK”',
|
56
|
-
'Zaļo un Zemnieku savienība'],
|
57
|
-
['Nacionālā apvienība „Visu Latvijai!”–„Tēvzemei un Brīvībai/LNNK”',
|
58
|
-
'Vienotība', 'Zaļo un Zemnieku savienība']]
|
30
|
+
COALITIONS
|
59
31
|
end
|
60
32
|
|
61
33
|
def no_of_seats
|
62
34
|
SEAT_DISTRIBUTION.values.inject(:+)
|
63
35
|
end
|
64
36
|
|
65
|
-
def
|
66
|
-
if @
|
67
|
-
@
|
68
|
-
summarize_election_results(
|
37
|
+
def overall_election_results_of_2018
|
38
|
+
if @overall_election_results_of_2018.nil?
|
39
|
+
@overall_election_results_of_2018 = \
|
40
|
+
summarize_election_results(election_results_of_2018)
|
69
41
|
end
|
70
|
-
@
|
42
|
+
@overall_election_results_of_2018
|
71
43
|
end
|
72
44
|
|
73
45
|
def population_size
|
74
|
-
# Voter turnout on
|
75
|
-
|
46
|
+
# Voter turnout on 6 October 2018
|
47
|
+
839_000
|
76
48
|
end
|
77
49
|
|
78
50
|
def seats(simulation)
|
@@ -85,24 +57,51 @@ module Sapor
|
|
85
57
|
|
86
58
|
private
|
87
59
|
|
88
|
-
|
89
|
-
|
60
|
+
AP_PARTY = 'Attīstībai/Par!'.freeze
|
61
|
+
JKP_PARTY = 'Jaunā konservatīvā partija'.freeze
|
62
|
+
JV_PARTY = 'Jaunā VIENOTĪBA'.freeze
|
63
|
+
KPVLV_PARTY = 'Politiskā partija „KPV LV”'.freeze
|
64
|
+
NA_PARTY = 'Nacionālā apvienība „Visu Latvijai!”–„Tēvzemei un ' \
|
65
|
+
'Brīvībai/LNNK”'.freeze
|
66
|
+
SDPS_PARTY = 'Sociāldemokrātiskā partija “Saskaņa”'.freeze
|
67
|
+
ZZS_PARTY = 'Zaļo un Zemnieku savienība'.freeze
|
68
|
+
|
69
|
+
COALITIONS = [[AP_PARTY, JKP_PARTY, JV_PARTY, KPVLV_PARTY],
|
70
|
+
[AP_PARTY, JKP_PARTY, JV_PARTY, KPVLV_PARTY, NA_PARTY],
|
71
|
+
[AP_PARTY, JKP_PARTY, JV_PARTY, NA_PARTY],
|
72
|
+
[AP_PARTY, JKP_PARTY, JV_PARTY, NA_PARTY, ZZS_PARTY],
|
73
|
+
[AP_PARTY, JKP_PARTY, KPVLV_PARTY, NA_PARTY],
|
74
|
+
[AP_PARTY, JKP_PARTY, NA_PARTY, ZZS_PARTY],
|
75
|
+
[AP_PARTY, JKP_PARTY, SDPS_PARTY],
|
76
|
+
[AP_PARTY, JV_PARTY, KPVLV_PARTY, NA_PARTY],
|
77
|
+
[AP_PARTY, JV_PARTY, NA_PARTY, ZZS_PARTY],
|
78
|
+
[AP_PARTY, NA_PARTY, ZZS_PARTY],
|
79
|
+
[AP_PARTY, SDPS_PARTY],
|
80
|
+
[JKP_PARTY, JV_PARTY, KPVLV_PARTY, NA_PARTY],
|
81
|
+
[JKP_PARTY, JV_PARTY, NA_PARTY, ZZS_PARTY],
|
82
|
+
[JKP_PARTY, NA_PARTY, ZZS_PARTY],
|
83
|
+
[KPVLV_PARTY, SDPS_PARTY],
|
84
|
+
[KPVLV_PARTY, SDPS_PARTY, ZZS_PARTY],
|
85
|
+
[NA_PARTY, JV_PARTY, ZZS_PARTY]].freeze
|
86
|
+
|
87
|
+
SEAT_DISTRIBUTION = { 'Kurzeme' => 12, 'Latgale' => 14, 'Rīga' => 35,
|
88
|
+
'Vidzeme' => 25, 'Zemgale' => 14 }.freeze
|
90
89
|
|
91
90
|
THRESHOLD = 0.05
|
92
91
|
|
93
|
-
def
|
94
|
-
if @
|
95
|
-
@
|
96
|
-
'latvia-
|
92
|
+
def election_results_of_2018
|
93
|
+
if @election_results_of_2018.nil?
|
94
|
+
@election_results_of_2018 = load_election_results(
|
95
|
+
'latvia-20181006.psv'
|
97
96
|
)
|
98
97
|
end
|
99
|
-
@
|
98
|
+
@election_results_of_2018
|
100
99
|
end
|
101
100
|
|
102
101
|
def electoral_system
|
103
102
|
if @electoral_system.nil?
|
104
103
|
@electoral_system = MultiDistrictProportional.new( \
|
105
|
-
|
104
|
+
overall_election_results_of_2018, election_results_of_2018,
|
106
105
|
SEAT_DISTRIBUTION, SainteLagueDenominators, 0, THRESHOLD
|
107
106
|
)
|
108
107
|
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# Statistical Analysis of Polling Results (SAPoR)
|
2
|
+
# Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
|
3
|
+
#
|
4
|
+
# This file is part of SAPoR.
|
5
|
+
#
|
6
|
+
# SAPoR is free software: you can redistribute it and/or modify it under the
|
7
|
+
# terms of the GNU General Public License as published by the Free Software
|
8
|
+
# Foundation, either version 3 of the License, or (at your option) any later
|
9
|
+
# version.
|
10
|
+
#
|
11
|
+
# SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
|
12
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
13
|
+
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
14
|
+
#
|
15
|
+
# You can find a copy of the GNU General Public License in /doc/gpl.txt
|
16
|
+
#
|
17
|
+
|
18
|
+
# Source: "Résultats officieux — Site officiel des élections // Grand-Duché de
|
19
|
+
# Luxembourg". Retrieved on 20 September 2018.
|
20
|
+
# URL: https://elections.public.lu/fr/elections-legislatives/2013/resultats.html
|
21
|
+
|
22
|
+
Centre | Chrëschtlech-Sozial Vollekspartei | 337,687
|
23
|
+
Centre | Demokratesch Partei | 280,144
|
24
|
+
Centre | déi gréng | 187,790
|
25
|
+
Centre | Lëtzebuerger Sozialistesch Aarbechterpartei | 135,968
|
26
|
+
Centre | Alternativ Demokratesch Reformpartei | 79,159
|
27
|
+
Centre | déi Lénk | 66,253
|
28
|
+
Centre | Piratepartei Lëtzebuerg | 59,537
|
29
|
+
Centre | Kommunistesch Partei Lëtzebuerg | 8,448
|
30
|
+
Centre | Demokratie | 3,949
|
31
|
+
|
32
|
+
Est | Chrëschtlech-Sozial Vollekspartei | 62,156
|
33
|
+
Est | Demokratesch Partei | 43,681
|
34
|
+
Est | déi gréng | 34,930
|
35
|
+
Est | Lëtzebuerger Sozialistesch Aarbechterpartei | 27,222
|
36
|
+
Est | Alternativ Demokratesch Reformpartei | 20,255
|
37
|
+
Est | Piratepartei Lëtzebuerg | 14,762
|
38
|
+
Est | déi Lénk | 6,984
|
39
|
+
Est | Kommunistesch Partei Lëtzebuerg | 1,396
|
40
|
+
|
41
|
+
Nord | Chrëschtlech-Sozial Vollekspartei | 111,067
|
42
|
+
Nord | Demokratesch Partei | 59,039
|
43
|
+
Nord | Lëtzebuerger Sozialistesch Aarbechterpartei | 54,682
|
44
|
+
Nord | déi gréng | 44,728
|
45
|
+
Nord | Alternativ Demokratesch Reformpartei | 33,751
|
46
|
+
Nord | Piratepartei Lëtzebuerg | 26,421
|
47
|
+
Nord | déi Lénk | 12,164
|
48
|
+
Nord | Kommunistesch Partei Lëtzebuerg | 2,734
|
49
|
+
|
50
|
+
Sud | Chrëschtlech-Sozial Vollekspartei | 488,471
|
51
|
+
Sud | Lëtzebuerger Sozialistesch Aarbechterpartei | 403,460
|
52
|
+
Sud | Demokratesch Partei | 214,216
|
53
|
+
Sud | déi gréng | 266,445
|
54
|
+
Sud | Alternativ Demokratesch Reformpartei | 159,223
|
55
|
+
Sud | déi Lénk | 108,193
|
56
|
+
Sud | Piratepartei Lëtzebuerg | 126,829
|
57
|
+
Sud | Kommunistesch Partei Lëtzebuerg | 32,338
|
58
|
+
Sud | Demokratie | 6,371
|
59
|
+
Sud | déi Konservativ | 9,516
|
@@ -27,29 +27,24 @@ module Sapor
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def coalitions
|
30
|
-
|
31
|
-
['Chrëschtlech-Sozial Vollekspartei',
|
32
|
-
'Lëtzebuerger Sozialistesch Aarbechterpartei'],
|
33
|
-
['Chrëschtlech-Sozial Vollekspartei', 'Demokratesch Partei'],
|
34
|
-
['déi gréng', 'Demokratesch Partei',
|
35
|
-
'Lëtzebuerger Sozialistesch Aarbechterpartei']]
|
30
|
+
COALITIONS
|
36
31
|
end
|
37
32
|
|
38
33
|
def no_of_seats
|
39
34
|
SEAT_DISTRIBUTION.values.inject(:+)
|
40
35
|
end
|
41
36
|
|
42
|
-
def
|
43
|
-
if @
|
44
|
-
@
|
45
|
-
summarize_election_results(
|
37
|
+
def overall_election_results_of_2018
|
38
|
+
if @overall_election_results_of_2018.nil?
|
39
|
+
@overall_election_results_of_2018 = \
|
40
|
+
summarize_election_results(election_results_of_2018)
|
46
41
|
end
|
47
|
-
@
|
42
|
+
@overall_election_results_of_2018
|
48
43
|
end
|
49
44
|
|
50
45
|
def population_size
|
51
|
-
# Voter turnout on
|
52
|
-
|
46
|
+
# Voter turnout on 14 October 2018 (note: multiple votes per voter)
|
47
|
+
3_529_969
|
53
48
|
end
|
54
49
|
|
55
50
|
def seats(simulation)
|
@@ -58,21 +53,32 @@ module Sapor
|
|
58
53
|
|
59
54
|
private
|
60
55
|
|
61
|
-
|
56
|
+
CSV_PARTY = 'Chrëschtlech-Sozial Vollekspartei'.freeze
|
57
|
+
DG_PARTY = 'déi gréng'.freeze
|
58
|
+
DP_PARTY = 'Demokratesch Partei'.freeze
|
59
|
+
LSAP_PARTY = 'Lëtzebuerger Sozialistesch Aarbechterpartei'.freeze
|
62
60
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
61
|
+
COALITIONS = [[CSV_PARTY],
|
62
|
+
[CSV_PARTY, LSAP_PARTY],
|
63
|
+
[CSV_PARTY, DP_PARTY],
|
64
|
+
[DG_PARTY, DP_PARTY, LSAP_PARTY]].freeze
|
65
|
+
|
66
|
+
SEAT_DISTRIBUTION = { 'Centre' => 21, 'Est' => 7, 'Nord' => 9,
|
67
|
+
'Sud' => 23 }.freeze
|
68
|
+
|
69
|
+
def election_results_of_2018
|
70
|
+
if @election_results_of_2018.nil?
|
71
|
+
@election_results_of_2018 = load_election_results(
|
72
|
+
'luxembourg-20181014.psv'
|
67
73
|
)
|
68
74
|
end
|
69
|
-
@
|
75
|
+
@election_results_of_2018
|
70
76
|
end
|
71
77
|
|
72
78
|
def electoral_system
|
73
79
|
if @electoral_system.nil?
|
74
80
|
@electoral_system = MultiDistrictProportional.new( \
|
75
|
-
|
81
|
+
overall_election_results_of_2018, election_results_of_2018,
|
76
82
|
SEAT_DISTRIBUTION, DhondtDenominators
|
77
83
|
)
|
78
84
|
end
|
data/lib/sapor.rb
CHANGED
@@ -67,6 +67,7 @@ require 'sapor/regional_data/european_union_27_croatia'
|
|
67
67
|
require 'sapor/regional_data/european_union_27_denmark'
|
68
68
|
require 'sapor/regional_data/european_union_27_estonia'
|
69
69
|
require 'sapor/regional_data/european_union_27_finland'
|
70
|
+
require 'sapor/regional_data/european_union_27_france'
|
70
71
|
require 'sapor/regional_data/european_union_27_ireland'
|
71
72
|
require 'sapor/regional_data/european_union_27_ireland_with_ia'
|
72
73
|
require 'sapor/regional_data/european_union_27_italy'
|
@@ -86,7 +87,6 @@ require 'sapor/regional_data/european_union_estonia'
|
|
86
87
|
require 'sapor/regional_data/european_union_finland'
|
87
88
|
require 'sapor/regional_data/european_union_flanders'
|
88
89
|
require 'sapor/regional_data/european_union_france'
|
89
|
-
require 'sapor/regional_data/european_union_france_2019'
|
90
90
|
require 'sapor/regional_data/european_union_french_community_of_belgium'
|
91
91
|
require 'sapor/regional_data/european_union_germany'
|
92
92
|
require 'sapor/regional_data/european_union_great_britain'
|
@@ -116,9 +116,6 @@ require 'sapor/regional_data/greece'
|
|
116
116
|
require 'sapor/regional_data/hungary'
|
117
117
|
require 'sapor/regional_data/iceland'
|
118
118
|
require 'sapor/regional_data/latvia'
|
119
|
-
require 'sapor/regional_data/latvia_kpv'
|
120
|
-
require 'sapor/regional_data/latvia_kpv_p_par'
|
121
|
-
require 'sapor/regional_data/latvia_kpv_par'
|
122
119
|
require 'sapor/regional_data/luxembourg'
|
123
120
|
require 'sapor/regional_data/netherlands'
|
124
121
|
require 'sapor/regional_data/norway'
|
data/sapor.gemspec
CHANGED
@@ -19,26 +19,26 @@
|
|
19
19
|
|
20
20
|
require 'spec_helper'
|
21
21
|
|
22
|
-
describe Sapor::
|
23
|
-
it 'returns
|
24
|
-
expect(Sapor::
|
22
|
+
describe Sapor::EuropeanUnion27France, '#area_code' do
|
23
|
+
it 'returns EU27[FR] as the area code' do
|
24
|
+
expect(Sapor::EuropeanUnion27France.instance.area_code).to eq('EU27[FR]')
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
describe Sapor::
|
28
|
+
describe Sapor::EuropeanUnion27France, '#no_of_seats' do
|
29
29
|
it 'returns 79 as the number of seats' do
|
30
|
-
expect(Sapor::
|
30
|
+
expect(Sapor::EuropeanUnion27France.instance.no_of_seats).to eq(79)
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
describe Sapor::
|
35
|
-
it 'returns a population size of
|
36
|
-
expect(Sapor::
|
37
|
-
eq(
|
34
|
+
describe Sapor::EuropeanUnion27France, '#population_size' do
|
35
|
+
it 'returns a population size of 22,655,174' do
|
36
|
+
expect(Sapor::EuropeanUnion27France.instance.population_size).to \
|
37
|
+
eq(22_655_174)
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
describe Sapor::
|
41
|
+
describe Sapor::EuropeanUnion27France, '#seats' do
|
42
42
|
it 'calculates the number of seats using the votes of the 2014 election' do
|
43
43
|
results = { 'Front national–Rassemblement bleu Marine (ENF)' => 4_712_461,
|
44
44
|
'Union pour un mouvement populaire (EPP)' => 3_943_819,
|
@@ -53,7 +53,7 @@ describe Sapor::EuropeanUnionFrance2019, '#seats' do
|
|
53
53
|
'Alliance écologiste indépendante (—)' => 211_759,
|
54
54
|
'Force vie' => 138_708, 'Europe citoyenne (—)' => 127_849,
|
55
55
|
'Parti du vote blanc (—)' => 110_090 }
|
56
|
-
seats = Sapor::
|
56
|
+
seats = Sapor::EuropeanUnion27France.instance.seats(results)
|
57
57
|
expect(seats['Front national–Rassemblement bleu Marine (ENF)']).to eq(22 + 1)
|
58
58
|
expect(seats['Union pour un mouvement populaire (EPP)']).to eq(18 + 2)
|
59
59
|
expect(seats['Parti socialiste–Parti radical de gauche (S&D)']).to eq(12 + 1)
|