Explorarea şi analiza datelor (partea I)
Intenţia de transparenţă este probată întâi de modul în care se pot extrage datele; dacă nu pot face altceva decât să descarc, să tipăresc şi doar să mă uit la datele (pozate) respective, atunci este vorba numai de falsă transparenţă - dar acesta şi este cazul obişnuit la noi: site-urile instituţiilor publice oferă "*.DOC" (documente Microsoft Word Document), sau PDF, sau SWF (cadre Adobe Flash) şi JPG, iar programele şcolare de la noi chiar nu au legături cu "Open-", fiind subjugate produselor comerciale Microsoft şi educaţiei funcţionăreşti asociate, "point-and-click".
//data.gov.ro
inspiră încredere, din acest prim punct de vedere; datele sunt emise în format machine-readable, încât şi utilizatorul poate să le investigheze (cu propriile instrumente) şi le poate eventual restructura şi integra în vreun context propriu.
Vom folosi aici setul de date EVNAT-2015.csv, reprezentând rezultatele "Evaluării Naţionale". Am ales până la urmă acest set de date, fiindcă înregistrează suficient de multe observaţii individuale (linii de date), iar pe de altă parte - nu conţine decât datele brute respective (putem ignora că s-a intervenit asupra acestora pentru "anonimizare" şi probabil, pentru calculul câmpurilor de "notă finală" şi "medie"); în plus, acoperă o bună parte dintre greşelile tipice şi formatele defectuoase cu care ne-au obişnuit instituţiile noastre.
Experimentăm în Gnumeric (sau în Excel) şi în Google Sheets şi pe de altă parte experimentăm cu limbajele (specializate pe analiză statistică şi pe calcul numeric) GNU Octave şi R, pe seama aruncării zarurilor.
Poate că înţelegerea lucrurilor ar necesita un mic act de judecată. Cum adică "să dăm un exemplu…"? Ce "să dăm"? Ce este de dat într-o ecuaţie a sistemului: nişte coeficienţi - care pot fi aleşi oricum - şi un termen liber, care poate fi eventual dedus având dată o soluţie. Desigur (mai ales că am amintit de Excel, în cerinţa noastră), ar fi de bun simţ să evităm alegerile banale - recunoscând totuşi că putem reduce orice sistem liniar la o formă "banală", precum "2x=4, 2y=5, 2z=6".
Două exemple de reducere/acumulare funcţională
Funcţiile din libstdc++ (C++ Standard Library) sunt "parametrizate", iar std::__gcd() nu face excepţie, fiind definită pentru un tip de date - denumit _EuclidianRingElement - care permite "împărţirea cu rest" şi binecunoscutul algoritm al lui Euclid...
"Cel mai mare divizor comun" chiar merita scrierea unei funcţii separate gcd(a, b), indicată apoi ca parametru al reducerii; dar acum, operaţia care trebuie implicată în reducerea listei coeficienţilor până la valoarea finală este una extrem de banală - încât o vom modela direct în lista parametrilor reducerii, ca funcţie "anonimă" (sau, "expresie lambda").
Am putut lucra cu diverse tipuri de polinoame, în programul C++11 de mai sus; vedem astfel unele dintre avantajele conferite de conceptele de programare parametrizată specifice pentru C++11. Pe de altă parte însă, în Python calculul cu orice fel de numere (inclusiv cu numere complexe, sau cu întregi mari) este deja "nativ" - nu necesită neapărat demersuri explicite prealabile.
Teorema bisectoarei - obsesii şi dileme
În acest mediu, cel mai dificil de prins se dovedesc a fi justificările fireşti ale construcţiilor şi mai general, demonstraţiile unora sau altora dintre diversele proprietăţi geometrice sau algebrice (şi însăşi ideea că ar fi ceva de justificat este neaşteptată şi greu de înghiţit). Această dificultate este cu siguranţă urmarea directă a asimilării "practice" a matematicii la nivel de reţetar, sau de "memorator" - ce nevoie să ai de justificări şi demonstraţii ca să iei BAC-ul?!
vezi Cărţile mele (de programare)