27 ottobre 2013

Ghost e i post in inglese

Poco tempo fa ho contribuito ad una campagna su kickstarter che ritengo molto interessante: Ghost.
Si tratta di un sistema di blogging estremamente semplice da usare (ancora non così semplice da installare se non sapete dove mettere le mani).

L'interfaccia di amministrazione è essenziale e a prova di bambino. Creare nuovi post, aggiornarli o cancellarli è velocissimo e scrivere nuovi post è estremamente veloce e piacevole!

Spinto dall'entusiasmo mi sono aperto un mio ghost blog: Tales of a Fractal Spectrum. Il sito è in inglese, il tema è disponibile gratuitamente sulla mia pagina github e da oggi mi concentrerò principalmente sull'aggiornamento di quel blog.

Potete anche provare voi. Per farlo partire sul vostro computer vi rimando alla documentazione ufficiale, se invece volete renderlo disponibile su internet usando un servizio gratuito, potete leggere qui e seguire le istruzioni: https://github.com/Laures/ghost-openshift-quickstart

Ieri e oggi ho passato un po' di tempo ad Angel Hack London, ci siamo divertiti a creare un semplice videogioco per il browser (funziona anche su smartphones e tablets) chiamato KLONE. Per giocare basta cliccare qui.

Grazie e a presto,
Marcello

03 maggio 2013

People of the Soil

Ho partecipato all'ultima NASA Space App Challenge poche settimane fa a Londra. Strano ma vero, il nostro progetto è stato selezionato per partecipare alla selezione finale.

Abbiamo realizzato un sistema economico per analizzare il terreno e salvare lo storico dei dati, condividerlo in un mega database internazionale (usando internet o sms) e rendere i dati fruibili attraverso una applicazione web molto leggera.

Il progetto con tanto di foto, descrizioni, codici, schemi e video di presentazione si trova qui: http://spaceappschallenge.org/project/people-of-the-soil/

Parte dei voti è popolare, per cui vi chiedo di andare alla pagina e votare per noi! (Serve twitter)

17 febbraio 2013

FORBIDDEN! Sondaggi elettorali fai da te :)

Strano ma vero... dopo tutto questo tempo eccomi qui di nuovo a scrivere qualcosa sul blog. E per scadere nel banale, voglio parlare di una moda del momento! Anzi due.

Innanzitutto questo post, come dice anche il titolo, parla di sondaggi elettorali. Visto che l'arretrata macchina dell'AgCom (e le improponibili leggi italiane - il silenzio elettorale in genere riguarda il giorno delle elezioni o quello precedente) hanno bloccato anche l'ultima idea carina per monitorare il panorama elettorale (vedi per il nostro bene - Manteblog) eccomi qua a spiegarvi come replicare il Sentimenter in piccolo, ovvero come farvi in casa i sondaggi elettorali grazie a twitter! La cosiddetta sentiment analysis dei social network sta riscuotendo molto successo ultimamente. Soprattutto quando è fatta a modo, sembra poter dare molte informazioni sugli andamenti degli indici di borsa, sulle previsioni elettorali... addirittura sui risultati di San Remo - Wired.

Qualche giorno fa un post di Riccardo, anzi due (andateli a leggere e date un'occhiata anche ai suoi post precedenti), mi ha fatto venire voglia di mettermi a trafficare con la sentiment analysis su twitter.

Ma di cosa sto parlando? In parole povere è possibile ottenere in maniera sistematica tutti i tweet fatti in un determinato periodo su un determinato argomento, estrapolarne il testo, stabilire in vari modi il grado di "apprezzamento" relativo ad ogni tweet, e creare una statistica di apprezzamento a partire da questi dati. Poi ognuno può usare questa statistica come vuole...

Nel nostro caso, dopo aver estratto il testo dai tweets, lo confronteremo con due vocabolari (la traduzione automatica dei vocabolari distribuiti dai Professori Hu e Liu) che potete scaricare da qui: Lexicon Italian e creeremo un plot a partire dai risultati.

Premetto che l'analisi che sto per presentare è incredibilmente meno precisa di quella fatta da Voices from the Blogs per Wired, in cui gruppi di persone lavorano direttamente ad un raffinamento dei risultati, e molto meno precisa di quella fatta da Riccardo, l'algoritmo che usa tiene conto anche dei rafforzativi (molto, tanto, incredibilmente, pochissimo, minimamente, ...) e delle negazioni (nel senso di parole che invertono il significato del testo che le segue).

Per ozio ho implementato l'analisi usando un linguaggio per analisi statistiche chiamato R, per comodità vi consiglio di usare Rstudio come interfaccia di lavoro. Infatti per R la funzione di analisi è già implementata e sono disponibili gratuitamente online i vocabolari che ho passato al traduttore automatico ed ho usato per le analisi.

Innanzitutto installate R ed R Studio. A questo punto aprite R Studio e verificate che le librerie che andremo ad usare siano installate. Farlo è semplicissimo, nella finestra con su scritto "Console" scrivete (premete Invio per gli accapo!)

library(RJSONIO)
library(plyr)
library(stringr)
library(twitteR)


Se uno di questi comandi dovesse dare errore, è sufficiente usare il comando install.package per installare la libreria mancante (assicuratevi di essere connessi ad internet). Se ad esempio non fosse disponibile la libreria plyr, nella stessa finestra "Console" eseguite il comando

install.packages('plyr', dependencies=T)

ed aspettate che abbia terminato il suo lavoro... Dopo aver installato tutte le librerie riprovate a dare i comandi "library" e stavolta dovrebbe funzionare tutto.

A questo punto la funzione per la sentiment analysis è stata gentilmente scritta da Jeffrey Breen ed è disponibile per il download dal suo spazio su gitHub.

La cosa migliore sarebbe scaricare il file sentiment.R in qualche cartella, usare il pannello in basso a destra in R per impostare la cartella in cui è salvato il file come "Working directory"(nel mio caso il comando che viene generato da Rstudio è setwd("Documents/twitter_sentiment")) e poi caricare la funzione sentiment facendo

source("sentiment.R") 

A questo punto posizionate i file positive_words_ita.txt e negative_words_ita.txt (che avete scaricato prima cliccando su Lexicon Italian) nella stessa cartella e iniziamo a divertirci.

I comandi che seguono servono per caricare i vocabolari

pos = scan("positive_words_ita.txt", what='character', comment.char=';')
neg = scan("negative_words_ita.txt", what='character', comment.char=';')


A questo punto possiamo scaricare i tweet relativi ad un argomento, come esempio userò San Remo (tramite il tag "#sanremo2013"), ovviamente sostituendo i nomi dei capi di partito o dei partiti a quel tag è possibile ottenere le informazioni per i sondaggi elettorali. Con il comando

SRtwitter = searchTwitter("#sanremo2013", n=500)
SRtwitter.text = laply(SRtwitter, function(t) t$getText())

stiamo scaricando (al massimo) 500 tweet contententi il tag #sanremo2013 e li stiamo salvando nella variabile SRtwitter e con la seconda funzione stiamo salvando nella variabile SRtwitter.text il testo dei tweets. Notate che aggiungendo le variabili opzionali  since="2013-2-15" e until="2013-2-17" possiamo chiedere ad R di scaricare solo i tweet scritti tra il 15 e il 17 febbraio... Notate anche che le API gratuite di twitter non permettono di scaricare più di 1500 tweet, quindi non usate n più grande di quel valore.

Siccome siamo italiani e usiamo un sacco di caratteri strani dobbiamo usare una procedura brutta da leggere e da scrivere per fare in modo che R rimuova dai tweet tutti i caratteri non leggibili o che li converta in un formato comprensibile. Per farlo basta scrivere

SRtwitter.text = enc2utf8(SRtwitter.text)
SRtwitter.text = iconv(SRtwitter.text, 'utf8', 'latin1', sub = "byte")
SRtwitter.text = iconv(SRtwitter.text, 'latin1', 'utf8', sub = "byte")


ed ecco che finalmente procediamo alla sentiment analysis! E la magia è che basta scrivere

scores = score.sentiment(SRtwitter.text, pos, neg)

ed aspettare che il computer faccia i suoi calcoli. Ora la "variabile" scores$score contiene per ogni tweet un punteggio che indica la positività, neutralità o negatività del tweet. Una analisi molto bruta dei dati può essere fatta con i seguenti comandi:

sprintf(fmt="Numero di tweet molto positivi: %d", sum(as.numeric(scores$score >= 2)))
sprintf(fmt="Numero di tweet molto negativi: %d", sum(as.numeric(scores$score <= -2)))
sprintf(fmt="Sentimento medio: %9.2f", mean(scores$score))
sprintf(fmt="Mediana: %9.2f", median(scores$score))
sprintf(fmt="Percentuale di voti molto positivi: %9.2f", sum(as.numeric(scores$score >= 2))*100/(sum(as.numeric(scores$score >= 2))+sum(as.numeric(scores$score <= -2))))


in questo caso sum(as.numeric(scores$score >= 2)) è il numero di commenti molto positivi (positività >= 2), mentre sum(as.numeric(scores$score <= -2)) conta quelli molto negativi, mean(scores$score) calcola il valore medio, median(scores$score) la mediana e l'ultima strana funzione è semplicemente la percentuale di tweet positivi sul totale dato dai tweet positivi più quelli negativi.

Un'altra cosa interessante è plottare l'istogramma dei sentimenti usando il comando hist(scores$score), magari confrontando come l'istogramma cambia nel tempo ripetendo l'analisi scaricando solo i tweet di un determinato giorno... o scaricando solo 100 tweet ogni mezz'ora... o ogni pochi secondi come ha fatto Riccardo.

Oppure potete scaricare politici.R, metterlo nella stessa cartella con gli altri files e caricarlo con il comando source("politici.R") per avere un bel grafico dell'andamento dei tweet riguardo i maggiori politici candidati alle elezioni negli ultimi 7 giorni :) ma mi raccomando, non pubblicate i risultati onilne, è vietato ;)

Questo ultimo file richiede le librerie ggplot2 e reshape2 quindi assicuratevi di averle installate. Se guadate il codice uso una funzione chiamata multiplot, l'ho presa dal Cookbook for R.

Ora avete il codice sorgente, dovete solo sbizzarrirvi! E se sistemate il vocabolario o fate sondaggi più precisi condividete il codice anche voi e fatemi sapere!!!


Non sono sondaggi affidabili o statistiche elettorali vere e proprie, ma i risultati possono essere interessanti.

Buon divertimento,
Marcello

21 dicembre 2012

Esperimento di Ipnosi - Video 1: Attaccato alla Sedia!

Provate e fatemi sapere come è andata!!!!!


Il video e il modo migliore di usarlo sono spiegati su Illusioni Mentali. Mi raccomando andate a leggere, provate il video e condividetelo!!!