È possibile ricavare da subito informazioni interessanti da un set di dati, senza per forza dover essere geni della Matematica o dover ricorrere a sofisticati strumenti di indagine?

Le e-mail di ENRON

Un archivio pubblico di centinaia di migliaia di messaggi di posta elettronica è una buona palestra per esercitarsi nell'analisi dei dati usando strumenti semplici

Posso estrarre informazioni interessanti da un set di dati, anche se ho a disposizione soltanto risorse ridotte? È questa la domanda che si pongono in molti, soprattutto da quando l'analisi dei dati - complice anche la vasta diffusione della buzz word "big data" - è sempre più oggetto di attenzione.

In alcuni casi la risposta è sicuramente affermativa e si possono ottenere deduzioni in modo rapido, ricorrendo a strumenti semplici e di facile reperibilità. Questo nonostante circoli l'idea errata che vede solo gli esperti del settore capaci di interventi significativi, coadiuvati da software sofisticatissimi e, soprattutto, costosissimi.

Avvertenza

Nel seguito uso il sistema operativo Linux, sfruttandone alcuni strumenti a linea di comando. Anche se non sei un utente di Linux, potrai comunque comprendere i passi che ho compiuto via via per estrarre alcune interessanti informazioni dal set di dati.

Ci tengo anche a precisare che, per analizzare dati occorre una consolidata esperienza del settore analizzato, per evitare di riscoprire l'acqua calda o giungere a conclusioni fuorvianti.

La storia di ENRON, in poche parole


Primo passo: reperire l'archivio di email ENRON


Ricordiamoci che si tratta di un archivio che negli anni ha perduto molta della sua autenticità: alcuni ex dipendenti ENRON, infatti, hanno chiesto e ottenuto che l'archivio fosse modificato per eliminare, per esempio, i riferimenti ad aspetti personali delle loro vite. Nonostante siano state apportate modifiche, l'archivio conserva comunque un suo dignitoso valore didattico. E poi la nostra intenzione è di allenarci con l'analisi dei dati, non di scoprire le tresche all'interno di un'azienda andata in malora.

Secondo passo: dotarsi di strumenti per una prima analisi


Conteggi di controllo

La versione in mio possesso dell'archivio ENRON dichiara di contenere [...] 517404 messaggi di email, suddivisi nei folder di 150 ex dipendenti di ENRON. find . -maxdepth 2 -type d | wc -l che restituisce 152 come risultato. Considerando che find, nell'esplorare l'albero delle directory, include sia quella dalla quale abbiamo lanciato il comando che la figlia, contenente tutti i folder dei dipendenti ENRON dei quali abbiamo i messaggi, il conto conferma [...] Mediante il comando find . -type f | wc -l contiamo i file presenti nell'albero. Vediamo in dettaglio [...] find .: "trova, a partire dalla directory attuale..." -type f: "... i soli file..." | wc: "... e mentre lo fai, contali." Il risultato è 517404 cioè proprio quanto ci aspettavamo. Due file di supporto per le prime indagini Creiamo adesso un paio di file che ci serviranno per ricavare alcune prime interessanti informazioni. Chiameremo Date_e_orari.txt il file che, come è chiaro dal nome, conterrà i riferimenti temporali relativi all'invio di ogni messaggio. Lo creiamo col seguente comando: find . -type f -exec sh -c "head -2 {} | tail -1" \; > Date_e_orari.txt Chiameremo Mittenti.txt il file con gli indirizzi email del mittente di ogni messaggio. Lo creiamo col seguente comando: find . -type f -exec sh -c "head -3 {} | tail -1" \; > Mittenti.txt

La settimana media

Vediamo ora di analizzare i flussi di email, a seconda dei giorni della settimana. Mediante la serie di comandi grep -i Mon Date_e_orari.txt | wc grep -i Tue Date_e_orari.txt | wc grep -i Wed Date_e_orari.txt | wc grep -i Thu Date_e_orari.txt | wc grep -i Fri Date_e_orari.txt | wc grep -i Sat Date_e_orari.txt | wc grep -i Sun Date_e_orari.txt | wc otteniamo i seguenti risultati: Monday: 101127 Tuesday: 106425 Wednesday: 106510 Thursday: 96054 Friday: 86370 Saturday: 7112 Sunday: 13804

Numero di e-mail inviate, per giorni della settimana Una distribuzione secondo le aspettative Una conferma a quanto si sa: le probabilità che una email sia inviata diminuiscono con l'avvicinarsi del weekend, durante il quale, fra l'altro, l'attività è ridotta al minimo. La figura qui accanto mostra la distribuzione del numero di e-mail cumulativamente inviate, per ogni giorno della settimana.

Contare i mittenti

Contiamo quanti messaggi sono stati inviati da account interni all'azienda. Per farlo usiamo questo comando: grep -i @enron\.com Mittenti.txt | sort -u | wc che restituisce un conteggio pari a 6460. Se al comando appena utilizzato togliamo la parte di ordinamento ed eliminazione dei doppioni, cioè: grep -i @enron\.com Mittenti.txt | wc il risultato elaborato è pari a 427785. Dividendo questo valore per il numero di mittenti ENRON ottenuto precedentemente, ricaviamo 66,22, numero medio di messaggi inviati da ciascuno dei mittenti ENRON. Vedremo fra poco che questa media è lontana dal reale numero di messaggi inviati dai singoli mittenti dell'archivio [...] sarà infatti evidente come alcuni mittenti [... e la distribuzione del numero di messaggi segue una campana di Gauss...]

Email dall'esterno

Col comando [...] grep -i -v @enron\.com Mittenti.txt | wc che restituisce 89617. Sommato a 427785 cioè al numero di messaggi il cui mittente è un account ENRON, si ha 517402, cioè il numero totale di messaggi dell'archivio. I conti, anche stavolta, tornano.

Orari di invio

Concentriamoci adesso sui soli 150 ex dipendenti ENRON [...] [...] [...] [...]

La mappa delle connessioni

Per essere precisi dovremmo usare la parola grafo per indicare ciò che stiamo per creare.