momente şi schiţe de informatică şi matematică
To attain knowledge, write. To attain wisdom, rewrite.

Statistici pe judeţ, mediu şi grupe de medii, folosind R (partea a III-a)

Evaluare naţională | limbajul R
2016 apr

Setul de date evna.jMgf din [4] este organizat în "format lung": fiecare linie de date indică în coloana a patra ('freq') procentul de elevi corespunzător valorilor existente pe acea linie în primele trei coloane ('jud', 'Mediu' şi 'gap'); de exemplu, linia "Alba", "RURAL", "[1,5)", 29.221 spune că 29.22% dintre elevii din mediul rural din judeţul Alba au obţinut medii sub 5, iar linia următoare acesteia "Alba", "RURAL", "[5,6)", 14.961 spune că alţi 14.96% elevi (din acelaşi mediu şi judeţ ca la prima linie) au mediile între 5 şi 6. Primele trei coloane identifică unic liniile şi cum 'jud' este un "factor" cu 42 de nivele, 'Mediu' este un factor cu 2 nivele, iar 'gap' este un factor cu 7 nivele (încadrând aici şi categoria "absent") - au rezultat 42*2*7-7 = 581 linii de date; am scăzut 7, dat fiind că pe nivelul 40 din 'jud', corespunzător "M.Bucureşti", nu avem înregistrări pentru 'RURAL' (ci doar pentru 'URBAN').

Este drept că formatul lung este cerut în diverse funcţii statistice şi proceduri grafice (cum am folosit şi noi în [4]); dar în afara mediului R, formatul cel mai obişnuit este totuşi cel "larg" (de exemplu, în cazul tabelelor MySQL). Într-un format larg, am avea câte o singură linie pentru fiecare judeţ şi pe linia respectivă am avea procentele de elevi din judeţul respectiv, corespunzătoare categoriilor de medii; de fapt, am avea câte două astfel de linii - una pentru 'RURAL' şi una pentru 'URBAN' - încât am putea prefera să împărţim datele după cele două valori de 'Mediu'.

Următoarea secvenţă extrage din evna.jMgf datele pentru mediul 'RURAL' şi le organizează sub forma unei matrice cu 41 de linii şi 7 coloane de date (aparent sunt opt coloane, numai că prima nu este o "coloană de date" propriu-zisă, servind doar pentru a denumi liniile de date):

ev.rur <- subset(evna.jMgf, Mediu=='RURAL')  # 287 linii = 41*7 (41 judeţe, 7 intervale)
ev.rur.m <- matrix(ev.rur$freq, ncol=7, byrow=TRUE)  # 41 linii a 7 coloane
colnames(ev.rur.m) <- c(levels(ev.rur$gap), "abs")  # 6 categorii de medii plus "Absent"
rownames(ev.rur.m) <- levels(ev.rur$jud)[-40]  # fără 40:'M.Bucureşti' (nu are "RURAL")
round(ev.rur.m, 3)  # la afişare, foloseşte numai 3 zecimale (cu rotunjire)
                 [1,5)  [5,6)  [6,7)  [7,8)  [8,9) [9,10]    abs  # RURAL
Alba            29.221 14.961 15.573 15.311 12.336  8.574  4.024
Arad            32.229 20.635 17.322 12.836  8.972  2.830  5.176
Argeş           32.169 14.907 15.028 13.688 13.444  8.205  2.559
Bacău           28.043 18.834 17.814 13.193 10.899  5.163  6.055
Bihor           27.503 19.676 17.753 15.085  9.401  4.241  6.340
Bistriţa-Năsăud 28.934 20.981 15.341 13.875 12.972  5.189  2.707
Botoşani        28.554 22.948 18.582 11.934  9.291  4.325  4.365
Braşov          37.188 16.458 14.479 11.458  8.646  6.042  5.729
Brăila          16.379 20.197 18.719 18.966 13.670  8.621  3.448
Buzău           24.871 16.410 15.942 14.353 13.978  8.135  6.311
Caraş-Severin   35.048 21.143 14.762 12.286  8.667  3.238  4.857
Cluj            18.810 20.096 18.650 17.363 14.228  6.592  4.260
Constanţa       37.254 17.668 14.715 12.383 10.155  4.611  3.212
Covasna         23.357 21.119 22.517 17.203 10.070  2.797  2.937
Dâmboviţa       34.463 16.783 14.988 13.958 10.568  4.719  4.520
Dolj            39.274 15.391 13.078  9.211  9.410  5.423  8.214
Galaţi          24.291 19.326 15.647 15.913 13.564  6.560  4.699
Gorj            27.149 18.020 16.953 14.404 13.693  8.595  1.186
Harghita        33.639 17.408 16.165 16.885 10.275  2.487  3.141
Hunedoara       31.188 15.347 17.987 11.221 10.891  5.611  7.756
Ialomiţa        36.035 17.897 15.249 11.798 11.156  4.896  2.970
Iaşi            22.243 20.503 19.085 16.435 10.573  5.889  5.273
Ilfov           27.124 18.256 17.809 14.531 12.891  7.899  1.490
Maramureş       28.823 17.004 17.263 13.012 10.990  6.169  6.739
Mehedinţi       41.879 15.015 16.241 11.542  8.069  2.349  4.903
Mureş           32.781 17.068 17.470 11.697 10.994  4.016  5.974
Neamţ           31.008 15.676 15.207 13.141 14.518  8.010  2.441
Olt             24.989 16.113 14.383 12.289 11.243  6.736 14.247
Prahova         14.196 15.234 17.828 19.941 19.199 11.564  2.039
Satu-Mare       33.846 16.846 14.385 14.000 10.231  4.462  6.231
Sălaj           27.138 16.579 18.150 13.962 12.216  6.021  5.934
Sibiu           28.364 15.942 14.803 13.768 13.665  6.004  7.453
Suceava         24.347 18.694 19.311 15.534 11.805  8.147  2.162
Teleorman       39.323 17.812 14.535 11.416  8.721  4.757  3.436
Timiş           39.617 16.880 15.761 11.928  8.839  2.716  4.260
Tulcea          33.482 19.577 17.464 11.902  8.565  4.116  4.894
Vaslui          36.284 20.415 17.185 11.284  8.014  2.951  3.868
Vâlcea          30.863 14.952 16.358 14.058 12.588  5.367  5.815
Vrancea         30.233 18.929 14.440 11.466 10.708  6.923  7.301
Călăraşi        27.836 19.789 18.140 13.325  9.894  5.211  5.805
Giurgiu         37.349 16.523 14.630 10.270  8.721  7.401  5.106

Pentru celălalt caz, putem înlocui în comenzile redate mai sus 'RURAL' cu 'URBAN' (şi 'ev.rur' cu 'ev.urb') - obţinând tabelul următor, cu 42 de înregistrări:

                 [1,5)  [5,6)  [6,7)  [7,8)  [8,9) [9,10]   abs  # URBAN
Alba            11.640 11.052 14.580 15.579 21.634 24.397 1.117
Arad            16.458 13.793 17.085 17.398 18.025 15.622 1.620
Argeş           10.852  7.986 13.030 15.208 22.163 30.455 0.306
Bacău            8.534  9.652 13.297 15.949 21.334 28.086 3.148
Bihor           12.524 12.260 15.466 18.672 21.275 18.521 1.283
Bistriţa-Năsăud 13.035 11.187 15.564 17.899 19.455 21.887 0.973
Botoşani        10.062 10.000 14.969 18.571 22.671 23.106 0.621
Braşov          11.418 10.073 13.855 16.691 21.636 24.291 2.036
Brăila           1.820  5.854 14.557 17.405 27.532 32.674 0.158
Buzău            9.138  8.944 12.573 15.230 22.165 29.812 2.139
Caraş-Severin   17.695 13.149 14.692 17.289 18.750 17.045 1.380
Cluj             4.255  6.923 12.258 17.752 25.437 32.963 0.413
Constanţa       14.501 10.618 12.599 14.765 19.651 26.466 1.400
Covasna          9.759  9.989 19.403 21.355 22.158 15.040 2.296
Dâmboviţa       15.446  9.571 13.729 14.917 21.386 21.716 3.234
Dolj            14.498  8.663  9.936 13.331 19.519 33.062 0.990
Galaţi           7.535  8.245 13.209 15.603 25.089 29.699 0.621
Gorj            14.741 11.910 13.915 16.509 18.868 23.290 0.767
Harghita        16.465 13.398 17.433 20.178 21.308 10.896 0.323
Hunedoara       17.385 13.341 15.835 17.952 18.141 15.608 1.738
Ialomiţa        13.855 11.145 13.554 14.659 18.775 26.807 1.205
Iaşi             4.784  8.173 11.595 16.445 24.352 34.153 0.498
Ilfov           12.936 14.066 17.248 16.632 23.409 15.400 0.308
Maramureş       14.820 10.870 15.584 17.282 17.410 19.958 4.076
Mehedinţi       17.418 13.351 13.705 16.446 18.479 19.629 0.973
Mureş           11.859 10.817 16.186 15.144 21.354 22.556 2.083
Neamţ           12.756  8.544 11.252 13.779 21.540 31.468 0.662
Olt             10.952 11.512 12.757 13.317 18.233 26.011 7.218
Prahova          5.934  8.586 12.182 16.161 25.829 30.716 0.593
Satu-Mare       12.132 11.995 15.696 19.740 20.014 18.643 1.782
Sălaj            9.220  9.929 12.766 17.325 21.986 24.215 4.559
Sibiu            7.964  9.728 14.012 17.036 23.538 26.512 1.210
Suceava         13.020 12.338 16.155 16.667 18.371 22.529 0.920
Teleorman       15.959 10.570 15.751 15.959 18.342 22.902 0.518
Timiş           15.204 11.845 14.229 15.421 19.646 22.391 1.264
Tulcea          11.928 10.818 14.424 17.060 23.440 21.359 0.971
Vaslui           9.987 11.595 14.812 17.225 21.381 24.196 0.804
Vâlcea          10.285 10.595 14.374 17.410 20.694 24.659 1.983
Vrancea         10.791 10.791 11.781 12.050 21.583 31.835 1.169
M.Bucureşti     10.919  9.700 11.757 15.649 22.776 28.684 0.514
Călăraşi        12.719 10.852 15.753 19.020 19.370 20.303 1.984
Giurgiu         22.886 14.286 16.618 13.411 14.140 16.618 2.041

Anterior am vizualizat mediile judeţene pe cele două cazuri de 'Mediu', considerând diversele categorii de medii (conform celor şapte coloane obţinute şi mai sus) în [4] şi respectiv fără a face vreo disticţie, în [5]. Acum vom viza numai mediile peste 5, ignorând (spre deosebire de [4]) şi coloana procentelor de medii sub 5 şi coloana procentelor de absenţi.

Putem vizualiza foarte direct, tabelele de date de mai sus (excluzând însă coloanele 1 şi 7):

barplot(ev.rur.m[, 2:6], beside=TRUE)  # analog pentru matricea 'ev.urb.m'
legend("top", bty="n", title="Evaluare Naţională 2015 - RURAL", legend=c(""))


Barele verticale alăturate (având beside=TRUE în apelul barplot()) din fiecare grup - [5,6), [6,7), etc. - sunt asociate liniilor tabelului, reprezentând implicit judeţele; înălţimea barei este proporţională cu procentul mediilor de categoria respectivă, pentru judeţul corespunzător barei.

Dar transpunând în prealabil matricea respectivă şi elaborând cât se poate comanda barplot(), putem găsi o reprezentare grafică superioară:

barplot(
    t(ev.rur.m[, -c(1,7)]),  # exclude coloanele 1 şi 7 şi apoi transpune matricea
    beside=TRUE,  # pentru a alătura (nu suprapune) barele asociate coloanelor matricei
    ylim=c(0,25),  # procentele din matrice sunt mai mici decât 25
    col=palette()[1:5],  # culori asociate celor 5 bare
    las=2,  # pentru a scrie numele judeţelor perpendicular pe axă
    cex.names=0.7,  # reduce dimensiunea scrierii numelor judeţelor
    cex.axis=0.8,  # reduce dimensiunea scrierii gradaţiilor de pe axa verticală
    legend.text=TRUE,  # pentru a adăuga o "legendă", privitoare la bare
    args.legend=list(x="topleft", cex=0.65, horiz=TRUE),
    main="Evaluare Naţională 2015, RURAL"
); grid(NA, 5)  # adaugă linii de ghidaj orizontale

Prin efectul funcţiei t() (transpunerea matricei), denumirile liniilor (deci numele judeţelor) ajung să indice şi ele, coloane; câte una dintre acestea "acoperă" 5 bare verticale (coloanele originale, pentru grupele de medii), colorate distinct conform legendei adăugate graficului:

Desigur, cu imaginile tocmai redate se poate proceda ca de obicei când vrem o mai mare claritate: fie click-dreapta pe imagine obţinând un meniu din care alegem "View Image", fie folosim combinaţia de taste CTRL + Shift + '+' pentru "zoom".

Graficele respective servesc fireşte, pentru a compara (vizual) lucrurile şi a concluziona asupra mediilor judeţene - dar deja am mai făcut constatările cuvenite, de exemplu în [4]. Să observăm doar că barele pentru [9,10] sunt mult mai înalte la 'URBAN' decât la 'RURAL', iar cele pentru [5,6) şi [6,7) sunt mult mai înalte (nu prea este cazul de prudenţă: "sunt în medie mai înalte") în prima imagine decât în a doua.

vezi Cărţile mele (de programare)

docerpro | Prev | Next