In [1]:
import pandas as pd
import numpy as np
In [2]:
MANDATY_SEJM = 460
In [3]:
path = '../dane/robocze/'
In [4]:
def_okr = pd.read_csv(path + 'def_okr_2015.csv', sep=';', index_col=0)
wyn_okr = pd.read_csv(path + 'kom_okr_2015.csv', sep=';', index_col=0)
wyn_okr.columns = wyn_okr.columns.astype('int')
wyn_okr.columns.name = 'Nr listy'
stat_okr = pd.read_csv(path + 'stat_okr_2015.csv', sep=';', index_col=0)
In [5]:
gl_man_global = stat_okr["Głosy ważne"].sum() / MANDATY_SEJM
In [6]:
gl_man_global
Out[6]:
33044.93695652174
In [7]:
wagi_glosow_2015 = pd.concat([def_okr, stat_okr["Głosy ważne"]], axis=1)
wagi_glosow_2015["Głosów na mandat"] = (wagi_glosow_2015["Głosy ważne"] / wagi_glosow_2015["Liczba mandatów"]).round().astype('int')
wagi_glosow_2015["Siła głosu 2015"] = gl_man_global / (wagi_glosow_2015["Głosy ważne"] / wagi_glosow_2015["Liczba mandatów"])
In [8]:
wagi_glosow_2015
Out[8]:
Okręg Liczba mandatów Głosy ważne Głosów na mandat Siła głosu 2015
Nr okręgu
1 Legnica 12 356779 29732 1.111442
2 Wałbrzych 8 234095 29262 1.129283
3 Wrocław 14 523371 37384 0.883941
4 Bydgoszcz 12 374277 31190 1.059481
5 Toruń 13 362510 27885 1.185027
6 Lublin 15 487720 32515 1.016309
7 Chełm 12 339686 28307 1.167370
8 Zielona Góra 12 346218 28852 1.145346
9 Łódź 10 359064 35906 0.920308
10 Piotrków Trybunalski 9 285721 31747 1.040891
11 Sieradz 12 369745 30812 1.072467
12 Kraków I (południe) 8 271577 33947 0.973424
13 Kraków II (północ) 14 542768 38769 0.852351
14 Nowy Sącz 10 310461 31046 1.064383
15 Tarnów 9 291641 32405 1.019762
16 Płock 10 300202 30020 1.100757
17 Radom 9 275342 30594 1.080127
18 Siedlce 12 375240 31270 1.056762
19 Warszawa I (miasto) 20 1095215 54761 0.603442
20 Warszawa II (okręg) 12 490616 40885 0.808248
21 Opole 12 338248 28187 1.172333
22 Krosno 11 326865 29715 1.112062
23 Rzeszów 15 507257 33817 0.977166
24 Białystok 14 435368 31098 1.062616
25 Gdańsk 12 427131 35594 0.928379
26 Gdynia 14 466708 33336 0.991260
27 Bielsko-Biała 9 337288 37476 0.881752
28 Częstochowa 7 236634 33805 0.977520
29 Gliwice 9 293667 32630 1.012727
30 Rybnik 9 289963 32218 1.025663
31 Katowice 12 411190 34266 0.964370
32 Sosnowiec 9 284643 31627 1.044833
33 Kielce 16 468690 29293 1.128078
34 Elbląg 8 200362 25045 1.319409
35 Olsztyn 10 266166 26617 1.241516
36 Kalisz 12 363184 30265 1.091841
37 Konin 9 277384 30820 1.072176
38 Piła 9 270273 30030 1.100385
39 Poznań 10 409886 40989 0.806198
40 Koszalin 8 217017 27127 1.218151
41 Szczecin 12 380499 31708 1.042156
In [9]:
def_okr = pd.read_csv(path + 'def_okr_2019.csv', sep=';', index_col=0)
wyn_okr = pd.read_csv(path + 'kom_okr_2019.csv', sep=';', index_col=0)
wyn_okr.columns = wyn_okr.columns.astype('int')
wyn_okr.columns.name = 'Nr listy'
stat_okr = pd.read_csv(path + 'stat_okr_2019.csv', sep=';', index_col=0)
stat_okr.rename(columns={"Liczba głosów ważnych oddanych łącznie na wszystkie listy kandydatów": "Głosy ważne"}, inplace=True)
In [10]:
stat_okr
Out[10]:
Nazwa Komisja otrzymała kart do głosowania Liczba wyborców uprawnionych do głosowania Nie wykorzystano kart do głosowania Liczba wyborców, którym wydano karty do głosowania Liczba wyborców głosujących przez pełnomocnika Liczba wyborców głosujących na podstawie zaświadczenia o prawie do głosowania Liczba wyborców, którym wysłano pakiety wyborcze Liczba otrzymanych kopert zwrotnych Liczba kopert zwrotnych, w których nie było oświadczenia o osobistym i tajnym oddaniu głosu ... Liczba kopert na kartę do głosowania wrzuconych do urny Liczba kart wyjętych z urny W tym liczba kart wyjętych z kopert na kartę do głosowania Liczba kart nieważnych Liczba kart ważnych Liczba głosów nieważnych W tym z powodu postawienia znaku „X” obok nazwiska dwóch lub większej liczby kandydatów z różnych list W tym z powodu niepostawienia znaku „X” obok nazwiska żadnego kandydata W tym z powodu postawienia znaku „X” wyłącznie obok nazwiska kandydata na liście, której rejestracja została unieważniona Głosy ważne
Numer okręgu
1 Okręg Wyborczy Nr 1 697907 757942 259666 438239 490 5597 37 35 6 ... 28 438194 28 84 438110 5674 3655 2019 0 432436
2 Okręg Wyborczy Nr 2 470923 514042 183904 287009 417 4854 44 42 2 ... 39 287015 39 37 286978 3976 2688 1288 0 283002
3 Okręg Wyborczy Nr 3 895625 1001757 235423 660182 630 8921 82 80 2 ... 78 660117 78 90 660027 5572 3230 2342 0 654455
4 Okręg Wyborczy Nr 4 712403 778558 245980 466427 480 3538 77 75 6 ... 69 466407 69 13 466394 6412 4389 2023 0 459982
5 Okręg Wyborczy Nr 5 742540 813079 284127 458383 575 5302 64 64 0 ... 64 458408 64 63 458345 6015 3914 2101 0 452330
6 Okręg Wyborczy Nr 6 862523 938157 291363 571149 952 4939 69 69 4 ... 64 571138 64 34 571104 5507 3176 2331 0 565597
7 Okręg Wyborczy Nr 7 690813 747526 284118 406690 782 3251 28 27 2 ... 25 406678 25 18 406660 5342 3530 1812 0 401318
8 Okręg Wyborczy Nr 8 713950 776935 269383 444548 465 3003 51 51 3 ... 48 444492 48 64 444428 6511 4369 2142 0 437917
9 Okręg Wyborczy Nr 9 566005 612800 147178 418814 414 2941 83 81 2 ... 78 418745 78 106 418639 3099 1632 1467 0 415540
10 Okręg Wyborczy Nr 10 521078 567583 170181 350868 399 1725 21 20 0 ... 20 350848 20 16 350832 4506 2973 1533 0 346326
11 Okręg Wyborczy Nr 11 701279 765170 234986 466274 531 2206 22 20 0 ... 20 466190 20 35 466155 5916 3738 2178 0 460239
12 Okręg Wyborczy Nr 12 465480 508888 145551 319925 402 1780 26 26 1 ... 25 319928 25 23 319905 3691 2335 1356 0 316214
13 Okręg Wyborczy Nr 13 862812 953716 208617 654148 733 9912 133 129 2 ... 127 654130 127 152 653978 4691 2379 2312 0 649287
14 Okręg Wyborczy Nr 14 576255 621580 201521 374708 465 10724 45 45 2 ... 42 374703 42 3 374700 4501 2801 1700 0 370199
15 Okręg Wyborczy Nr 15 533024 580610 181794 351124 445 1909 31 31 0 ... 31 351098 31 23 351075 3987 2481 1506 0 347088
16 Okręg Wyborczy Nr 16 594543 651882 218513 376018 516 1885 23 21 0 ... 21 376000 21 3 375997 5436 3388 2048 0 370561
17 Okręg Wyborczy Nr 17 511886 556858 173078 338801 442 1728 28 26 1 ... 25 338782 25 15 338767 3758 2152 1606 0 335009
18 Okręg Wyborczy Nr 18 684696 752277 225904 458770 599 2582 25 24 1 ... 23 458762 23 10 458752 5846 3347 2499 0 452906
19 Okręg Wyborczy Nr 19 1670076 1742400 279264 1390641 1164 38061 194 184 21 ... 164 1389970 164 447 1389523 7606 3476 4130 0 1381917
20 Okręg Wyborczy Nr 20 774331 856128 170104 604224 507 5330 96 95 2 ... 92 604128 92 68 604060 5333 2964 2369 0 598727
21 Okręg Wyborczy Nr 21 719838 779536 307303 412525 468 2414 29 29 0 ... 29 412469 29 17 412452 6013 4104 1909 0 406439
22 Okręg Wyborczy Nr 22 648912 701642 253336 395573 766 6939 31 31 2 ... 29 395556 29 7 395549 4968 3298 1670 0 390581
23 Okręg Wyborczy Nr 23 907022 988338 312711 594307 850 4375 41 40 1 ... 39 594277 38 19 594258 5472 3172 2300 0 588786
24 Okręg Wyborczy Nr 24 848752 922518 323189 525568 895 3680 62 62 2 ... 58 525560 58 17 525543 4965 2770 2195 0 520578
25 Okręg Wyborczy Nr 25 753982 831651 219856 534255 500 8501 99 99 4 ... 94 534071 94 46 534025 5196 3218 1978 0 528829
26 Okręg Wyborczy Nr 26 872627 935164 285392 587272 525 7362 100 99 13 ... 84 587233 84 43 587190 6468 3692 2776 0 580722
27 Okręg Wyborczy Nr 27 569412 605360 176394 393014 503 4575 38 38 5 ... 33 392959 33 12 392947 3691 2085 1606 0 389256
28 Okręg Wyborczy Nr 28 431901 470075 144067 287824 330 1864 42 40 0 ... 40 287791 40 14 287777 3260 2141 1119 0 284517
29 Okręg Wyborczy Nr 29 534418 581805 190114 344301 334 1759 30 29 1 ... 28 344292 28 8 344284 3637 2074 1563 0 340647
30 Okręg Wyborczy Nr 30 524127 558077 186917 337185 353 1107 27 27 1 ... 26 337148 26 18 337130 3294 1901 1393 0 333836
31 Okręg Wyborczy Nr 31 677792 740858 203558 474223 482 2886 52 51 2 ... 47 474144 47 21 474123 4490 2516 1974 0 469633
32 Okręg Wyborczy Nr 32 491534 537371 153020 338510 355 1516 42 41 2 ... 37 338481 37 7 338474 3043 1874 1169 0 335431
33 Okręg Wyborczy Nr 33 927566 998797 351202 576353 899 4587 33 32 0 ... 31 576308 31 32 576276 6385 4016 2369 0 569891
34 Okręg Wyborczy Nr 34 447186 484489 191809 255374 264 1772 20 20 2 ... 16 255370 16 11 255359 4540 3263 1277 0 250819
35 Okręg Wyborczy Nr 35 569496 619669 232809 336643 393 3804 33 32 4 ... 27 336647 27 12 336635 4951 3096 1855 0 331684
36 Okręg Wyborczy Nr 36 720895 782102 254203 466690 388 1897 56 56 2 ... 52 466669 52 8 466661 7509 5005 2504 0 459152
37 Okręg Wyborczy Nr 37 556500 606633 198030 358457 312 1504 33 31 2 ... 29 358437 29 21 358416 5375 3773 1602 0 353041
38 Okręg Wyborczy Nr 38 550788 601148 195405 355382 367 1825 18 18 0 ... 18 355334 18 13 355321 6270 4437 1833 0 349051
39 Okręg Wyborczy Nr 39 634485 709238 115525 518935 399 6156 61 60 4 ... 55 518801 55 135 518666 4139 2333 1806 0 514527
40 Okręg Wyborczy Nr 40 456863 498780 180203 276658 342 7719 27 27 1 ... 25 276638 25 13 276625 4914 3470 1444 0 271711
41 Okręg Wyborczy Nr 41 732615 802417 256060 476544 533 6380 51 50 5 ... 44 476444 44 127 476317 5788 3698 2090 0 470529

41 rows × 23 columns

In [11]:
gl_man_global = stat_okr["Głosy ważne"].sum() / MANDATY_SEJM
gl_man_global
Out[11]:
40153.717391304344
In [12]:
wagi_glosow_2019 = pd.concat([def_okr, stat_okr["Głosy ważne"]], axis=1)
wagi_glosow_2019["Głosów na mandat"] = (wagi_glosow_2019["Głosy ważne"] / wagi_glosow_2019["Liczba mandatów"]).round().astype('int')
wagi_glosow_2019["Siła głosu 2019"] = gl_man_global / (wagi_glosow_2019["Głosy ważne"] / wagi_glosow_2019["Liczba mandatów"])
In [13]:
wagi_glosow_2019
Out[13]:
Okręg Liczba mandatów Głosy ważne Głosów na mandat Siła głosu 2019
1 Legnica 12 432436 36036 1.114256
2 Wałbrzych 8 283002 35375 1.135079
3 Wrocław 14 654455 46747 0.858962
4 Bydgoszcz 12 459982 38332 1.047529
5 Toruń 13 452330 34795 1.154021
6 Lublin 15 565597 37706 1.064903
7 Chełm 12 401318 33443 1.200655
8 Zielona Góra 12 437917 36493 1.100310
9 Łódź 10 415540 41554 0.966302
10 Piotrków Trybunalski 9 346326 38481 1.043478
11 Sieradz 12 460239 38353 1.046944
12 Kraków 8 316214 39527 1.015862
13 Kraków 14 649287 46378 0.865799
14 Nowy Sącz 10 370199 37020 1.084652
15 Tarnów 9 347088 38565 1.041187
16 Płock 10 370561 37056 1.083593
17 Radom 9 335009 37223 1.078728
18 Siedlce 12 452906 37742 1.063895
19 Warszawa 20 1381917 69096 0.581131
20 Warszawa 12 598727 49894 0.804782
21 Opole 12 406439 33870 1.185527
22 Krosno 11 390581 35507 1.130856
23 Rzeszów 15 588786 39252 1.022962
24 Białystok 14 520578 37184 1.079861
25 Gdańsk 12 528829 44069 0.911154
26 Słupsk 14 580722 41480 0.968023
27 Bielsko-Biała 9 389256 43251 0.928395
28 Częstochowa 7 284517 40645 0.987906
29 Katowice 9 340647 37850 1.060874
30 Bielsko-Biała 9 333836 37093 1.082518
31 Katowice 12 469633 39136 1.026002
32 Katowice 9 335431 37270 1.077370
33 Kielce 16 569891 35618 1.127337
34 Elbląg 8 250819 31352 1.280723
35 Olsztyn 10 331684 33168 1.210602
36 Kalisz 12 459152 38263 1.049423
37 Konin 9 353041 39227 1.023630
38 Piła 9 349051 38783 1.035331
39 Poznań 10 514527 51453 0.780401
40 Koszalin 8 271711 33964 1.182248
41 Szczecin 12 470529 39211 1.024049
In [14]:
tabela = pd.concat([wagi_glosow_2015["Okręg"], wagi_glosow_2015["Siła głosu 2015"], wagi_glosow_2019["Siła głosu 2019"]], axis=1)
In [15]:
tabela
Out[15]:
Okręg Siła głosu 2015 Siła głosu 2019
1 Legnica 1.111442 1.114256
2 Wałbrzych 1.129283 1.135079
3 Wrocław 0.883941 0.858962
4 Bydgoszcz 1.059481 1.047529
5 Toruń 1.185027 1.154021
6 Lublin 1.016309 1.064903
7 Chełm 1.167370 1.200655
8 Zielona Góra 1.145346 1.100310
9 Łódź 0.920308 0.966302
10 Piotrków Trybunalski 1.040891 1.043478
11 Sieradz 1.072467 1.046944
12 Kraków I (południe) 0.973424 1.015862
13 Kraków II (północ) 0.852351 0.865799
14 Nowy Sącz 1.064383 1.084652
15 Tarnów 1.019762 1.041187
16 Płock 1.100757 1.083593
17 Radom 1.080127 1.078728
18 Siedlce 1.056762 1.063895
19 Warszawa I (miasto) 0.603442 0.581131
20 Warszawa II (okręg) 0.808248 0.804782
21 Opole 1.172333 1.185527
22 Krosno 1.112062 1.130856
23 Rzeszów 0.977166 1.022962
24 Białystok 1.062616 1.079861
25 Gdańsk 0.928379 0.911154
26 Gdynia 0.991260 0.968023
27 Bielsko-Biała 0.881752 0.928395
28 Częstochowa 0.977520 0.987906
29 Gliwice 1.012727 1.060874
30 Rybnik 1.025663 1.082518
31 Katowice 0.964370 1.026002
32 Sosnowiec 1.044833 1.077370
33 Kielce 1.128078 1.127337
34 Elbląg 1.319409 1.280723
35 Olsztyn 1.241516 1.210602
36 Kalisz 1.091841 1.049423
37 Konin 1.072176 1.023630
38 Piła 1.100385 1.035331
39 Poznań 0.806198 0.780401
40 Koszalin 1.218151 1.182248
41 Szczecin 1.042156 1.024049
In [16]:
wykres = pd.Series(100 * (tabela["Siła głosu 2019"] - 1))
wykres.index = [f'{okr} [{v:+2.0f}%]' for okr, v in zip(tabela["Okręg"], wykres)]
wykres.sort_values(inplace=True, ascending=False)
kolory = ['red' if v < 0 else 'green' for v in wykres]
wykres.plot(kind='barh', figsize=(6, 16), grid=True, color=kolory)
Out[16]:
<Axes: >
No description has been provided for this image
In [17]:
wykres = pd.Series(100 * (tabela["Siła głosu 2015"] - 1))
wykres.index = [f'{okr} [{v:+2.0f}%]' for okr, v in zip(tabela["Okręg"], wykres)]
wykres.sort_values(inplace=True, ascending=False)
kolory = ['red' if v < 0 else 'green' for v in wykres]
wykres.plot(kind='barh', figsize=(6, 16), grid=True, color=kolory)
Out[17]:
<Axes: >
No description has been provided for this image
In [18]:
tabela2 = wagi_glosow_2015[["Okręg", "Liczba mandatów"]].copy()
tabela2.rename(columns={"Liczba mandatów": "L. mandatów"}, inplace=True)
In [19]:
tabela2["Gł na mandat 2015"] = wagi_glosow_2015["Głosów na mandat"]
tabela2["Gł na mandat 2019"] = wagi_glosow_2019["Głosów na mandat"]
In [20]:
tabela2["Śr siła głosu"] = (wagi_glosow_2015["Siła głosu 2015"] + wagi_glosow_2019["Siła głosu 2019"])/2
In [21]:
tabela2
Out[21]:
Okręg L. mandatów Gł na mandat 2015 Gł na mandat 2019 Śr siła głosu
Nr okręgu
1 Legnica 12 29732 36036 1.112849
2 Wałbrzych 8 29262 35375 1.132181
3 Wrocław 14 37384 46747 0.871452
4 Bydgoszcz 12 31190 38332 1.053505
5 Toruń 13 27885 34795 1.169524
6 Lublin 15 32515 37706 1.040606
7 Chełm 12 28307 33443 1.184013
8 Zielona Góra 12 28852 36493 1.122828
9 Łódź 10 35906 41554 0.943305
10 Piotrków Trybunalski 9 31747 38481 1.042184
11 Sieradz 12 30812 38353 1.059706
12 Kraków I (południe) 8 33947 39527 0.994643
13 Kraków II (północ) 14 38769 46378 0.859075
14 Nowy Sącz 10 31046 37020 1.074518
15 Tarnów 9 32405 38565 1.030474
16 Płock 10 30020 37056 1.092175
17 Radom 9 30594 37223 1.079427
18 Siedlce 12 31270 37742 1.060329
19 Warszawa I (miasto) 20 54761 69096 0.592286
20 Warszawa II (okręg) 12 40885 49894 0.806515
21 Opole 12 28187 33870 1.178930
22 Krosno 11 29715 35507 1.121459
23 Rzeszów 15 33817 39252 1.000064
24 Białystok 14 31098 37184 1.071239
25 Gdańsk 12 35594 44069 0.919766
26 Gdynia 14 33336 41480 0.979641
27 Bielsko-Biała 9 37476 43251 0.905074
28 Częstochowa 7 33805 40645 0.982713
29 Gliwice 9 32630 37850 1.036800
30 Rybnik 9 32218 37093 1.054091
31 Katowice 12 34266 39136 0.995186
32 Sosnowiec 9 31627 37270 1.061102
33 Kielce 16 29293 35618 1.127708
34 Elbląg 8 25045 31352 1.300066
35 Olsztyn 10 26617 33168 1.226059
36 Kalisz 12 30265 38263 1.070632
37 Konin 9 30820 39227 1.047903
38 Piła 9 30030 38783 1.067858
39 Poznań 10 40989 51453 0.793299
40 Koszalin 8 27127 33964 1.200199
41 Szczecin 12 31708 39211 1.033102
In [ ]: