sapor 0.3.4 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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)
|