Histograme in MySQL

Sunday, 10 July, Year 3 d.Tr. | Author: Mircea Popescu

Sa zicem ca dorim sa construim histograme pe un set de valori, ca de exemplu pe notele medii ale celor ~1400 de licee din Romania, calculate de Diana Coman. Cum procedam ?

O metoda ar fi sa folosim excel. De data asta, fiind vorba de o mie si nu de o suta de mii de linii, excel are sanse sa chiar functioneze. Spre deosebire de data trecuta. Aceasta metoda are dezavantajul ca-i lenta, si pe deasupra ca tre' sa ne introducem de mina binarele, intr-un set de celule, si sa tot selectam si sa apasam shift-control-nustiuce, de parca suntem maimute. Pai suntem ?!

O alta metoda ar fi sa folosim R, sau alt program dedicat chestiunilor serioase. Dezavantajul acestei alte metode este ca noi n-am auzit de R, si nici n-avem habar de chestii de-astea, ca suntem programatori, nu statisticieni.

Metoda pe care v-o propun eu se bazeaza in totalitate pe MySQL, dat fiind ca orice server oricit de prapadit tot ruleaza un LAMP acolo. Deci, creati o tabela la repezeala sa va tina datele, importati din CSV, dupa care :

SELECT count( round( nota *2 ) ) FROM bac GROUP BY round( nota *2 )

Care-i ideea ? Pai, poruncim serverului sa numere toate notele dupa ce le-a inmultit cu doi si a rotunjit rezultatele. Intrucit notele sunt de la 0 la 10, inmultindu-le cu 2 si rotunjind rezultatele iese un set de la 0 la 20, pe care se apuca sa-l numere. Acest set este in fapt echivalent cu histograma publicata de Diana in prima imagine, adica notele considerate din .50 in .50.

Rezultatele ?

3, 9, 27, 54, 121, 164, 163, 123, 157, 158, 161, 136, 107, 65, 17

Mbun. Hai sa incercam sa-i replicam al treilea grafic, cel ce socoteste la zecimi. Cum procedam ? Pai, in loc sa inmultim cu 2... inmultim cu 10. Rezultatele ?

1, 1, 1, 1, 3, 2, 3, 2, 3, 6, 8, 8, 14, 8, 10, 18, 4, 13, 30, 27, 19, 32, 24, 34, 32, 43, 31, 31, 41, 32, 23, 36, 22, 36, 18, 28, 19, 38, 26, 31, 26, 36, 20, 39, 32, 39, 28, 26, 35, 33, 27, 40, 25, 33, 31, 32, 15, 22, 25, 29, 10, 21, 11, 12, 17, 16, 9, 11, 3, 2, 1

Sa facem si-un grafic!

distrib_notemedii_licee-2011-1

Uite la el ce cinas si dragutel arata! Parca am fi oameni de stiinta si mai multe nu! (Diferentele fata de graficul echivalent produs de Diana survin in urma rotunjirilor, pe care le tratam in mod diferit : ea truncheaza, noi rotunjim).

Ziceam tura trecuta, in baza graficului celui de .50 ceva despre doua Romanii, ca intr-adevar, asa se si vadeste, ca ar fi doua. Insa acum, daca am crescut precizia (scazind granularitatea) parca cele doua de fapt... sunt trei. Adica, Romania saracilor (cu duhul, vorbim) exista in continuare clara si vizibila, o curba Gauss ingusta in jur de 4 si-un pic, da' parca in rest, Romaniile bogatilor nu-s una singura, ci doua, mai vagi.

Hai, asa de curiozitate, sa-i scoatem pe saraci din grafic. Nu se poate ? Ba sigur ca se poate. Le modelam prin simetrie fata de primul maxim prezenta, si harsti. Practic asta revine la a scadea din datele de mai sus setul interpolat

1, 1, 1, 1, 3, 2, 3, 2, 3, 6, 8, 8, 14, 8, 10, 18, 4, 13, 30, 27, 19, 32, 24, 34, 32, 43, 32, 34, 24, 32, 19, 27, 30, 13, 4, 18, 10, 8, 14, 8, 8, 6, 3, 2, 3, 2, 3, 1, 1, 1, 1

Normalizind asa taraneste (adica notind cu 0 toate valorile negative), rezulta un set mai ingust, si anume :

distrib_notemedii_licee-2011-1-tr

Mnoa, iata cum arata Romania fara saraci. Este ca-i Gauss ? Mnoa.

PS. Daca n-am fi normalizat taraneste, ci reflectam minusurile-n vecini iesea o curba mult mai "corecta" pe partea stinga. Da' daca ne-o fo' lene...

Comments feed : RSS 2.0. Leave your own comment below, or send a trackback.

26 Responses

  1. Mihai B`s avatar
    1
    Mihai Binsigna de prim sositinsigna de trolinsigna pentru 1000 de comentarii 
    Sunday, 10 July 2011

    mno drept ii ca de r nu am auzit. :D da' ce zici, statisticianule, oare cu spss se poate construi vreo histograma din asta cu 1000+ linii? :D

    oricum interesanta moda asta cu prelucrari de date. macar asa am auzit si eu de awk ala. si am tras niste orielly-uri sa vad despre ce-i vorba.

  2. Mircea Popescu`s avatar
    2
    Mircea Popescu 
    Monday, 11 July 2011

    Apai ar trebui sa se poata, ighen.

    Stai pe-aproape, ca urmeaza sa torn un set cu judete/specialiari mintenas, e in lucru.

  3. Sigur se poate si cu SPSS. De altfel imi pare ca R a fost facut ulterior, in esenta pentru a fi mai flexibil si accesibil (R e open-source).

  4. Asta ar mai fi de facut pe datele astea, de calculat cele doua (sau trei) potentiale distributii si evidentiate separat. In principiu s-ar putea prin medie si abaterea standard, n-ar trebui sa fie chiar ingrozitor de calculat.

  5. Mircea Popescu`s avatar
    5
    Mircea Popescu 
    Monday, 11 July 2011

    Dap, ar cam fi cazul.

  6. Adaug că mai toate limbajele de programare serioase, de la C la Python la Haskell au într-un fel sau altul binding-uri pentru gnuplot, sau pot genera fișiere sursă și fișierele de date.
    Sigur că în cazul ăsta, dacă avem stocate rezultatele într-o bază de date e mai convenabil lucrul direct cu MySQL, dar sigur merge o parsare rapidă și direct din CSV.

  7. Mircea Popescu`s avatar
    7
    Mircea Popescu 
    Monday, 11 July 2011

    Ia sa vedem ce poti face practic ?

  8. @Mircea Popescu Cu ce-i generat graficul ala?

  9. http://www.gnuplot.info/docs_4.0/gnuplot.html#set_datafile_separator

    There, solved. Dacă vrei pot pune aici un paste la un exemplu de histogramă în gnuplot, câteva linii de cod.

  10. Mircea Popescu`s avatar
    10
    Mircea Popescu 
    Monday, 11 July 2011

    @gheorghe Open office.

    @spyked Mnu, eu ziceam, ce poti face practic cu datele disponibile, in sensu' de ce grafice.

  11. Păi gnuplot știe cam orice fel e grafic științific, deci cam tot înafară de piechart-uri and co. Da' poate face bar chart-uri/histograme, curbe și mai tot ce ar fi util în general. În rest harvesting-ul pe date (medii, abateri și alte asemenea) le faci tu cu ce vrei. Eu aș folosi Haskell de exemplu, că pot face parsări de csv în una-două linii cu el. Dar asta zic, că la urma urmei lucrezi cu ce-ți e mai la îndemână.

  12. Mircea Popescu`s avatar
    12
    Mircea Popescu 
    Monday, 11 July 2011

    Pai baga mare mei!

  13. Cristian`s avatar
    13
    Cristian 
    Monday, 11 July 2011

    Ce păcat că mi-a luat gheorghe vorba din gură. Tare aș mai fi vrut să aflu cum poate MySQL să deseneze grafice :-)

  14. Cristian`s avatar
    14
    Cristian 
    Monday, 11 July 2011

    P.S. Dacă tot aplaudai gestul Dianei de a publica datele și spuneai că mulți au comentat aiurea, n-ar fi o treabă dacă ai face accesul gratuit la paginile referitoare la bac?

  15. pletzalcoatl`s avatar
    15
    pletzalcoatlinsigna de criptograf 
    Monday, 11 July 2011

    @Cristian N-ar fi o treaba daca ai face gratuit accesul la tine in frigider? Cred ca sunt ceva homeless si la tine pe strada gen.

  16. Cristian`s avatar
    16
    Cristian 
    Monday, 11 July 2011

    @pletzalcoatl: hai să nu exagerăm și să facem analogii forțate. Nu de alta, dar el dădea de înțeles că a publicat datele pentru Alba-Iulia (dacă nu mă-nșel) din marea lui bunăvoință. Și tot el se dădea nițel mai rotund ca cei de la minister și siveco. Dacă oamenii nu au acces la paginile alea chiar nu văd nicio șmecherie în tot demersul ăsta.

  17. Mircea Popescu`s avatar
    17
    Mircea Popescu 
    Monday, 11 July 2011

    @Cristian E, sa deseneze grafice nu poate.

    Orice utilizator poate citi (gratuit) cite trei articole diferite in fiecare zi. Daca-i utilizator nou poate citi inca patru in plus. Cu alte cuvinte, doleanta ta se inscrie undeva intre redundant si specios.

    @pletzalcoatl The real world is a relatively new thing in Romania. Patience is kinda required.

  18. Cristian`s avatar
    18
    Cristian 
    Tuesday, 12 July 2011

    @Mircea Popescu: afirmația (doleanța) mea pornea de la limita de 3 articole. Habar n-aveam de cele 4 articole suplimentare. De altfel dacă am înțeles eu bine descrierea sistemului de taxare, nu beneficiezi de acel bonus decât dacă intri cu un IP virgin. Nu mai vorbesc de cazul în care omul dă click din curiozitate sau greșeală pe link-uri care duc la alte subiecte și când vrea să mai citească ceva pe tema bacului se pomenește ca nu poate.

    Aici nu era vorba de lumea reală, imaginară sau cea a lui Harap-Alb, ci de cum mi s-ar fi părut mie frumos să fie lucrurile. Deci e vorba doar de o părere personală, nu de vreo axiomă. În fond e blogul tău și faci ce vrei cu el, sunt 100% de acord cu asta. De aia există pe lumea asta și expert sex change și stack exchange. Eu unul îl prefer pe cel din urmă.

  19. Mircea Popescu`s avatar
    19
    Mircea Popescu 
    Tuesday, 12 July 2011

    N-am chiar priceput ultima chestie, cum n-am prea priceput ideea din capul locului. Da' vorba ceea, timp este.

  20. Cristian`s avatar
    20
    Cristian 
    Tuesday, 12 July 2011

    Una e să ai tot felul de bariere și alta e să ai un sistem deschis. Asta era ideea, nu știu ce era așa de greu de înțeles când am dat și două exemple concrete din lumea „reală”.

  21. Mircea Popescu`s avatar
    21
    Mircea Popescu 
    Tuesday, 12 July 2011

    Tu esti aproximativ in situatia cuiva caruia i-am spus sa mearga la mine linistit, ca-i usa deschisa, el incearca sa intre pe geam, cade in tufa de trandafiri si se hartaneste tot, dupa care ma da in judecata ca de fapt "n-o fost deschis".

    In lumea reala, lucrurile sunt deschise asa cum sunt deschise ele, nu asa cum iti inchipui tu. Din motivul simplu ca singurul lucru care-i deschis din orice punct posibil sau imaginabil de vedere este acel lucru care nu exista. Observatie care de altfel se leaga destul de bine de troglodeala generala a Romaniei, fiind ea plina de diversi care abordeaza "deschiderea" cum ii duce pe ei capul, adica asa, ca si tine - chestie care-ti explica si schimbul cu pletz.

  22. Cristian`s avatar
    22
    Cristian 
    Wednesday, 13 July 2011

    Ți se pare că te dau în judecată? De intratul pe geam nu mai vorbesc, poate doar prin proxy :-) Repet, din partea mea poți proceda cum consideri tu de cuvință, dar asta nu înseamnă că trebuie neapărat să-mi și placă sau să fiu de acord cu asta.

    Cred ca înțeleg ce vrei să spui cu lucrul care nu există, dar asta nu înseamnă că nu pot fi sisteme mai mult sau mai puțin deschise. De asta am și oferit două exemple ca să nu se creadă că aș cere marea cu sarea. Apropo, dintre alea două ce crezi că preferă străinii? Să nu-mi spui că Polimedia :-)

  23. Mircea Popescu`s avatar
    23
    Mircea Popescu 
    Wednesday, 13 July 2011

    Apai daca nu vrei sa pricepi, n-o sa pricepi, ca de-aia educatia astora destepti de jumatate e exponential mai scumpa decit educatia alora prosti cu totul.

    Deci : exista doua clase de utilizatori pentru setul ala de date. Clasa #1, probabil mai numeroasa, sunt cetatenii care vor sa vaza ce-or facut ei, vecina de palier, Tincuta de peste drum, colega de banca si eventual varu' Sandel la Bac. Clasa #2, probabil mai putin numeroasa, sunt cetatenii care vor sa vaza datele in totul lor.

    Pe baza acestei analize de piata, plus modelari statistice a stakeholderilor in proiect scl, factorii de decizie au hotarit sa construiasca o interfata modulara, si anume : A) datele in intregul lor, in format text/csv (adica, cel mai portabil format posibil pentru asa ceva) vor fi puse la dispozitie pe un server, suspectat ca ar fi mai subtirel. 8Mb intr-o arhiva x Clasa #2 (mai putini) ; B) datele impartite pe judete, in format html (adica, cel mai accesibil format, pentru utilizatorul nesofisticat) vor fi puse la dispozitie pe un alt server, suspectat ca ar fi ceva mai tare. 2-3Mb per pagina x 50 de pagini x Clasa #1 (mai multi).

    Ca rezultat, aia care doresc datele pot lua datele. Aia care nu doresc datele, ci pur si simplu vor sa stie ce-o facut la Bac ei si diverse cunostiinte pot sa priveasca, simplu si direct (fara, de exemplu, sa aiba nevoie sa incarce un ditai fisier intr-un program specializat, ca de exemplu-n excel nu merge, admitind ca ar fi platit ei licenta de excel).

    Da, e adevarat ca serveru' ala care trage Gbps fara probleme nu este in acelasi timp si gratis. Da, e adevarat ca asta ar putea afecta utilizatoru' care nu are nici sofisticarea de-a folosi un CVS, da' are si neamuri si alte persoane de interes raspindite in mai mult de sapte judete.

    Si da, e adevarat ca se vor gasi diversi care sa ciriie in fata perfectiunii gindite sa fie perfecta si aplicate perfect ca "nu ie bine", pentru ca nu se muleaza pe reprezentarile defectuoase pe care si le facusera ei in capsorul lor cel aproximativ mobilat. Da' trage tu linie si vezi cam cit conteaza asta.

    Exemplele-s facute de cineva care intelege mai multe decit tine ca sa te ajute sa intelegi ceva ce tu nu reusesti sa intelegi de capul tau. Daca tu le abordezi pornind de la parerea complet eronata ca "de fapt tu stii", sigur ca poti aduce obiectii, da' trage linie si vezi cam cit conteaza si asta. Ca de inteles mai mult sigur nu ti-o iesit.

    Vezi cum zic ?

  24. Cristian`s avatar
    24
    Cristian 
    Wednesday, 13 July 2011

    Tu chiar crezi că eu aveam impresia că super-serverul ăla e moca? Dar dacă faci ceva pe bani, barem recunoaște asta clar și răspicat și nu te mai da salvatorul bacului românesc - omul care a aprins lumina acolo unde alții au stins-o. Nu de alta, dar ești precum companiile petroliere care mai plantează doi, trei copaci și se dau verzi după aia. De semi-SEO spam nici nu mai vorbesc.

    P.S. Apropo de cârâit, nu la fel cârâi și tu în fața perfecțiunii gândite de Bill Gates și anume Windows și Excel?

  1. [...] la alte discutii aici, despre Cele doua Romanii, precum si la diverse alte ilustratii si discutii (cum folosim MySQL, Note medii per judete, Topul liceelor din perspectiva elevului etc). Chestie care-a facut mai [...]

  2. [...] Histograme in MySQL [...]

Add your cents! »
    If this is your first comment, it will wait to be approved. This usually takes a few hours. Subsequent comments are not delayed.