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

sinteză: "Bacalaureat 2015 - de la forma microsoftizată, la R"

Python | bacalaureat | limbajul R
2016 aug

Ne-am ocupat anterior în cinci părţi (una în iulie, patru în august 2016) de rezultatele bacalaureatului din 2015 (prezentând diverse elemente de limbaj R, cu judecăţi statistice elementare), plecând de la setul de date (în formă "microsoftizată") preluat de la data.gov.ro. Între timp s-a insinuat cumva ideea de a reuni părţile respective într-o lucrare unică, eventual în format PDF.

Un timp mi s-a părut "cam mult" - nu-i uşor să transformi un document HTML complet, în PDF; dar în timp ce mă ocupam de textul Markdown rezultat de sub pandoc (urmând ca după ce voi fi făcut manual completările şi modificările necesare, să-l transform în PDF - iarăşi cu pandoc şi cu Latex) - am (re)descoperit că în Chrome dispunem de un meniu "Print..." care permite să obţii automat un PDF care imită nemaipomenit de bine, pagina HTML respectivă. Deci nu se mai pune problema de a transforma în "document PDF" - oricine va putea face aceasta, dacă doreşte.

Rămâne o singură problemă de ordin tehnic - să obţin cele 5 articole! Pentru fiecare articol la care lucrez, folosesc local (pe calculatorul de acasă) acelaşi fişier - pe care o să-l numesc aici "work.html" - în care (pentru articolul curent) rescriu o aceeaşi diviziune <div.inqsor> din <body>, pe care în final o înscriu în baza de date (întâi în cea locală, ca să mai fac o verificare şi în cele din urmă în baza de date de pe server); ca urmare, nu deţin textul-sursă şi dacă am nevoie de acesta - trebuie să-l extrag din baza de date.

Următorul program Python (redat aici după anumite "anonimizări", de înţeles) asigură conectarea bazei de date, selectarea articolelor după dată, extragerea acestora şi scrierea lor, unul după altul, într-un anumit fişier (îngrijindu-se de recunoaşterea şi păstrarea codificării "UTF-8"):

#!/usr/bin/python
# -*- coding: utf-8 -*-
import MySQLdb as mdb  # interfaţă Python pentru MySQL
import codecs  # rezolvă problemele de codificare-decodificare a caracterelor
conn = mdb.connect('localhost', 'user', 'password', 'DBname', charset='utf8');
cursor = conn.cursor()
cursor.execute("SELECT body FROM articole" +
               " where YEAR(creat)='2016' and MONTH(creat)>='07'")
out = codecs.open("sinteza.html", "w", 'utf-8')
for articol in cursor.fetchall():
    out.write(articol[0])
out.close()
cursor.close()
conn.close()

Ambalând conţinutul fişierului obţinut în diviziunea <div.inqsor> din "work.html", am putut urmări în browser cele 5 părţi reunite, de la un capăt la altul. Ca unul care caută mereu cuvintele, am "periat" totul din nou şi uneori, am reformulat mai precis sau am îndreptat câte ceva; poate-i relevant acest cel mai modest exemplu: în formularea iniţială ... instituim tabele de contingenţă "încrucişând" câte doi din cei 5 factori ... am schimbat "câte doi din cei" cu "câte doi dintre cei".

Am mai reţinut şi acest exemplu de reformulare (deasemenea "relevant"): iniţial (în §.5, la început) aveam "Şi noi aici, am şterge sau am ignora numele dacă ar fi existat - dar nu din raţiuni de confidenţialitate, ci pentru motivul că numele persoanelor sunt irelevante din punct de vedere statistic.", iar acum am formulat mai precis: "Şi noi aici, am şterge sau am abrevia numele dacă ar fi existat (mai ales fiindcă au fost scrise cu majuscule!) - dar nu din raţiuni de confidenţialitate...".

Rezultatul final este Bacalaureat - de la forma microsoftizată, la R.

vezi Cărţile mele (de programare)

docerpro | Prev | Next