23 ottobre 2007

Importare dati in R da Excel

Sono molte le ricerche per importare dati in R da Excel che da google portano al mio blog, così ho pensato di scrivere delle indicazioni specifiche.
Innanzitutto, come più ampiamente spiegato in questo mio vecchio post, io consiglio l'utilizzo della libreria Rcmdr che permette l'importazione stile "software commerciali" direttamente da un file di Excel, Stata, Minitab, Access, ecc... .
Ma se proprio non si vuol dar retta a questo mio consiglio :-), la procedura è riportata di seguito.
Immaginando di essere in Italia in cui il separatore decimale utilizzato è la virgola, la prima cosa da fare è salvare il foglio Excel in formato testo delimitato da tabulazione. Bisogna stare attenti a non salvare in txt utilizzando il separatore delle migliaia per le variabili (colonne di Excel) aventi Numero come Formato Celle (quindi, in Excel, per le celle con formato Numero: Formato Celle > Numero e togli il segno di spunta in corrispondenza di Usa separatore delle migliaia (,) ). Sto inoltre immaginando, come penso accada in genere, che la prima riga della tabella Excel indichi il nome delle variabili.
A questo punto il codice in R è semplicemente:
x<-read.delim2("C:/miaCartella/mioFile.txt") .
Notate che nell'indicazione del percorso del file si debba usare "/" invece di "\". A questo punto x sarà il data.frame in R corrispondente alla vostra tabella di Excel.
Infine, faccio notare come il seguente comando:
x<-read.table(file="C:/miaCartella/mioFile.txt", header=TRUE, sep="\t", dec=",")
sia perfettamente equivalente al precedente (l'help in linea può aiutare a charirsi le idee).

22 ottobre 2007

Aggiornare R e R(D)COM server

In base a quanto riportato dalle FAQ per Windows e in base alle mie esperienze, riporto la procedura da eseguire per l'aggiornamento di R e di R(D)COM all'ultima versione.
Tale aggiornamento in molti casi può non essere necessario in quanto l'utente può lavorare tranquillamente con una versione "vecchia" senza rendersene conto. In tale caso, comunque, la cosa sicuramente da non fare è l'aggiornamento delle librerie. Quest'ultimo, infatti, dovrebbe sempre essere preceduto da un aggiornamento di R.
Immaginate di lavorare con la 2.4.0 (questo è un episodio reale per il quale sono stato contattato) e di aggiornare le librerie (nella RGUI: Pacchetti > Aggiorna pacchetti...). Così facendo, nella cartella "library" vi ritroverete le librerie che utilizzate normalmente, aggiornate alle versioni più recenti che, in genere, potrebbero non essere più "funzionanti" con la vecchia versione di R con la quale stavate lavorando.
Quindi, la prima cosa da fare è rimouvere R (Pannello di controllo > Installazione applicazioni > Rimuovi o direttamente con unins000.exe). Tale operazione non cancellerà via la cartella library nella quale, appunto, restano tutti i pacchetti che normalmente siete abituati ad utilizzare. In tal modo, quindi, dopo aver installato la nuova versione di R (attualmente siamo alla 2.6.0), basterà sostituire il contenuto della nuova cartella library (C:\Programmi\R\R-2.6.0\library) con il contenuto della vecchia (C:\Programmi\R\R-2.4.0\library) ed effetture l'aggiornamento dei pacchetti (nella RGUI: Pacchetti > Aggiorna pacchetti...). In tal modo vi ritroverete tutte le librerie di cui disponevate, aggiornate e compatibili con la nuova release di R. In pratica, quindi, io non andrò a sostituire l'intera cartella, ma andrò a copiare il contenuto della vecchia library e ad incollarlo nella nuova, cliccando no al messaggio di Conferma sostituzione file di Windows relativo alle librerie standard già installate assieme alla nuova release di R.
Per quanto riguarda R(D)COM, la procedura è la solita per la rimozione (Pannello di controllo > Installazione applicazioni > Rimuovi o direttamente con unins000.exe ) e la solita per l'installazione (attualmente il setup più aggiornato è RSrv250_pl1.exe). Successivamente all'installazione si può eseguire un primo test tramite lo StatConnector Test : C:\Programmi\R\(D)COMServer\samples\Simple\simple.exe > Start R. Nella totalità delle installazioni che ho eseguito si ottiene il messaggio di errore: Run time error '462': The Remote server machine does not exist or is unavailable . Il problema sta nel settaggio del registro di Windows e, senza chiedersi cosa significhi :-), il problema si risolve tramite C:\Programmi\R\R-x.x.x\bin\RSetReg.exe . Successivamente, richiamando nuovamente lo StatConnector Test (a meno di altri errori) si otterrà una serie di messaggi di informazione che confermano il corretto funzionamento di R(D)COM Server.

11 giugno 2007

Indice di concentrazione di Gini in Excel

Download del file xls con la relativa funzione.


Tra le funzioni statistiche di excel non mi risulta disponibile l'indice di concentrazione di Gini e ho sviluppato la relativa funzione in vba.
La formula a cui mi riferisco è la seguente, dove le x_(i) sono ordinate in senso non decrescente:
Ai fini computazionali, mi è risultato conveniente esplicitare la formula nel seguente formato:

ossia come rapporto tra l'indice di disuguaglianza senza ripetizione (ossia con il denominatore pari a n(n-1) invece che n^2):


ed il suo massimo:

Inizialmente avevo optato per la seguente forma:

ma essa si base sull'ordinamento di un array che prevederebbe un po' di codice per essere effettuato, non essendo già prevista una relativa funzione standard in vba. Per l'indice di concentrazione in R si faccia riferimento alla libreria ineq. Ho anche avviato una discussione sulla mailing-list per dei chiarimenti sulla formula utilizzata (l'indice infatti non fornisce il valore 1 in caso di massima concentrazione), ma la risposta stava nella differenza tra indice distorto e non distorto.
Riporto di seguito il codice della funzione in vba :
'********************************************
Public Function gini(x As Range) As Double

Dim tb As Variant
Dim h As Long
Dim k As Long
Dim i As Long
Dim j As Long
Dim num As Double
Dim den As Double

tb = x.Value
num = 0
den = 0
For h = 1 To UBound(tb, 1)
For k = 1 To UBound(tb, 2)
If IsNull(tb(h, k)) Then
tb(h, k) = 0
End If
den = den + tb(h, k)
For i = 1 To UBound(tb, 1)
For j = 1 To UBound(tb, 2)
num = num + Abs(tb(h, k) - tb(i, j))
Next j
Next i
Next k
Next h

'INDICE DI DISUGUAGLIANZA
num = num / (UBound(tb, 1) * UBound(tb, 2)* _
(UBound(tb, 1) * UBound(tb, 2) - 1))

'MASSIMO DELL'INDICE DI DISUGUAGLIANZA
den = 2 * den / (UBound(tb, 1) * UBound(tb, 2))

If den = 0 Then
gini = 1
Else
gini = num / den
End If
End Function
'********************************************

24 maggio 2007

Usare R in Calc: ROOo

A causa di parecchio lavoro ho veramente poco tempo da dedicare al blog, ma questa notizia non può essere di certo trascurata. E' nato un progetto di integrazione tra R e Calc (il foglio elettronico di OpenOffice), curato sempre da Thomas Baier e company, sia in ambiente Windows che Linux. La notizia mi è giunta proprio oggi e, ovviamente, il tutto è in versione alpha / test. Io per lavoro uso sempre Excel, quindi non sono direttamente interessato, tuttavia il progetto è sicuramente importante per gli utenti di Calc. Info e downolad di ROOo a questo indirizzo.

15 marzo 2007

Firebird, Flamerobin e IBUtils

In alcuni lavoro che ho svolto (e che continuo a svolgere) mi sono trovato a sviluppare e gestire basi di dati. Nell'immenso universo dei possibili database, spesso per decisioni aziendali legate a motivazioni puramente economiche, mi sono trovato a dover scegliere tra tutte le possibilità a basso costo (diciamo pure aggratiss). La mia esperienza assolutamente positiva e, soprattutto, a costo nullo è legata ad un nome: Firebird.
Non intendo discutere di eventuali confronti con altri database (commerciali e non) non avendo le competenze per farlo ed essendo l'argomento già ampiamente trattato in rete (inoltre penso non si arriverebbe a conclusione, essendo i pareri discordanti). Voglio solo esprimere la mia totale soddisfazione nel gestire (ripeto: a costo nullo!!!) grossi database.
In particolare, in seguito alla continua ricerca in rete di "strumenti" (sempre aggratiss) per lavorare con Firebird e in seguito a ripetuti confronti tra tutto ciò che offre il web, mi sento di poter riassumere in due link quelli che sono attualmente i miei ferri del mestiere che, quindi, consiglio a tutti: Flamerobin, per lavorare via sql con tabelle e procedure, IBUtils per disegnare la struttura del db in maniera grafica e visuale.

02 marzo 2007

RDCOM Server V2.5 e RExcel V1.75

In riferimento a quanto già discusso nel mio precedente post, dopo un breve periodo di test è ora possibile scaricare la nuova versione di RDCOM e di RExcel. Il download può essere effettuato a questo indirizzo, ma Thomas Baier annuncia che presto sarà aggiornata la relativa pagina web.

13 febbraio 2007

Excel 2007 e R(D)COM

Un aspetto interessantissimo della nuova versione di Excel è sicuramente il suo nuovo e più ampio limite in termini di "dimensione": 1,048,576 "righe" e 16,384 "colonne" (rispettivamente records e campi per un informatico, casi e variabili per uno statistico :-). Questi limiti, infatti, rendono sicuramente possibile l'utilizzo di excel come piattaforma di "base" per la gestione di dataset abbastanza grandi. Leggendo questa mia affermazione, un dataminer che lavora con SAS si farà una bella risata nel pensare alle dimensioni (in termini di records, campi e terabyte) dei dataset che lui stesso reputa grandi!!!!! Tuttavia il passaggio da 65,536 a 1,048,576 records aumenta di molto le possibilità di usare Excel come strumento di analisi di dati. Ovviamente non sto pensando a questo foglio elettronico come al motore di analisi del dato, ma sto considerando la possibilità di interagire, tramite R(D)COM, con il software R. Quest'ultimo, infatti, permette sicuramente la possibilità di ricorrere ad un elevato numero di librerie di "funzioni" che, a volte, mi sembrano più aggiornate e più affidabili di quanto sviluppato nei software commerciali.
Attualmente sto seguendo (sulla mailing list) le discussioni degli sviluppatori relative agli aggiornamenti di R(D)COM (o meglio, aggiornamento di RExcel) per una release compatibile con Excel 2007 e, ovviamente, non tarderà ad arrivare una versione stabile.
Infine, ma non per importanza, bisogna sottolineare che le possibilità di utilizzo di R ed Excel per dataset "grandi" (...e ancora una volta ci saranno sicuramente pareri discordanti...) sono direttamente dipendenti dalla macchina sui cui girano i dati. Le possibilità di sfruttare questi nuovi e più ampi limiti di Excel, infatti, sono legati ad un doppio processore e a macchine con ram più consistenti di quelle a cui siamo stati abituati fino ad ora.