Archivio mensile:agosto 2015

Alla ricerca dell’antenato comune

“Alla ricerca dell’antenato comune”: con questo titolo presenterò, nel secondo semestre del prossimo anno accademico, una relazione all’interno dei seminari del Laboratorio di Cultura Digitale. L’iniziativa, come cita il sito di riferimento, “consiste in 18-20 seminari della durata di 2 ore ciascuno, tenuti da studiosi esterni, docenti dell’Università di Pisa e rappresentanti di enti/aziende operanti nel settore, sui temi rilevanti per Informatica Umanistica. Vuole costituire un’occasione di approfondimento sulla disciplina e un orientamento al mondo del lavoro e della ricerca nelle Digital Humanities.”

La frequenza è richiesta agli studenti della Laurea Magistrale in Informatica Umanistica che sono tenuti, al termine del secondo semestre, a presentare un loro elaborato ispirato dagli interventi presentati al seminario.

Ovviamente, anche nel mio percorso di studi ho dovuto affrontare questa prova e, grazie alla pubblicazione su iTunes degli interventi e alla piattaforma Moodle per la discussione, ho potuto superare l’ostacolo della presenza in aula, inconciliabile con l’orario lavorativo. Il mio elaborato finale, disponibile qui, verteva su Donald Knuth e il Literate Programming.

Adesso fa un certo effetto trovarsi dalla parte opposta della cattedra e quello che spero di ottenere è soprattutto trasmettere entusiasmo e suscitare riflessioni.

La proposta che ho presentato e che è stata accettata dalle coordinatrici del corso, Enrica Salvatori e Maria Simi, ha come oggetto l’evoluzione dei sistemi di simulazione informatica applicati alle genealogie ed agli studi demografici. Ho intenzione di passare in rassegna i principali lavori che hanno segnato questo tipo di ricerca per concludere, ovviamente, con il progetto Hochadelsdorf.

In particolare, sottolineerò il doppio passaggio, dai modelli matematici alle simulazioni in silico e da queste alle analisi condotte su dati reali grazie ai database genealogici disponibili online. Credo infatti che la sempre maggiore disponibilità di dati, opportunamente trattati, possa contribuire alla verifica dei modelli teorici, cosa, fino a pochi anni fa, impensabile se non a prezzo di enormi sforzi. L’aspetto collaborativo della rete infatti consente una raccolta distribuita e in parte verificabile dei dati, sia pure come materiale grezzo sul quale condurre le opportune analisi.

Calcolo dell’età

Può capitare, lavorando con le genealogie ma anche studiando fenomeni come le dinamiche di reclutamento, di dover calcolare l’età di un soggetto, di cui si conosca la data di nascita, sia rispetto alla data odierna, sia rispetto ad un’altra data di riferimento.

Qualche tempo fa, in un mio lavoro sull’età di inizio professione da parte di alcuni soggetti operanti nel mondo giudiziario, disponendo di un database MySQL, avevo applicato con successo la seguente interrogazione:

SELECT YEAR(DATE_FORMAT([dataInizio], '%Y­%m%d')) ­- YEAR(DATE_FORMAT([dataNascita], '%Y­%m%d')) ­- (DATE_FORMAT([dataInizio], '%m%d') <  DATE_FORMAT([dataNascita], '%m%d')) AS eta  FROM [tabella]

In pratica, per calcolare l’età di inizio professione, si è proceduto facendo la sottrazione tra l’anno di inizio professione e l’anno di nascita e si è sottratto 1 qualora giorno e mese di nascita fossero successive, rispetto all’anno solare, a giorno e mese di inizio professione. Questa formula può essere scritta

anno(data inizio) – anno(data nascita) – (giorno e mese inizio < giorno e mese nascita)

in considerazione del fatto che, in MySQL, il confronto produrrà un esito booleano che sarà interpretato come 0 (falso) o 1 (vero) andando a togliere tale valore dal risultato della sottrazione iniziale.

Sicuramente non è l’unico metodo e forse neanche il più immediato tuttavia non manca di eleganza.

Ho tentato di convertire le istruzioni nella sintassi di SQLServer, database che sto usando attualmente per il progetto Hochadelsdorf.

Al posto dell’istruzione DATE_FORMAT, ma solo a partire dalla versione 2012 di SQLServer, quella usata dal progetto, è possibile fare uso dell’istruzione FORMAT che accetta in ingresso un valore, un pattern di formattazione e una indicazione di cultura.

E’ possibile quindi riscrivere l’interrogazione con la seguente sintassi:

SELECT DATEPART(YEAR, [data_inizio]) - DATEPART(YEAR, [data_nascita]) - CASE WHEN FORMAT([data_inizio],'MMdd','it-IT') < FORMAT([data_nascita],'MMdd','it-IT') THEN 1 ELSE 0 END AS eta FROM [tabella]

ottenendo lo stesso risultato.

Al momento non so se questa interrogazione sarà necessaria nella mia ricerca ma ritengo utile condividerla, anche solo come promemoria per uso futuro.