17 febbraio 2013

data.table in R

Dopo circa due anni di utilizzo, posso dire che data.table sia la libreria alla quale non credo si possa rinunciare nello sviluppo di un qualunque script di analisi dati in R.
Esistono diversi tutorial in rete, moltissime discussioni nella relativa help-list , tante discussioni su Stack Overflow, quindi il progetto è davvero maturo e molto supportato.

Questa libreria permette di lavorare con i data.table, ossia una enhanced version of data.frame, così come specificato nella pagine ufficiali del progetto. E' possibile eseguire operazioni tipiche di data munging , ossia manipolazioni di dati grezzi al fine di ricavarne un formato finale "pulito" e più utile all'utente. Diviene facile lavorare con grossi volumi di dati (limitatamente alla RAM della macchina), eseguendo operazioni analoghe a quanto avviene nei db relazionali in SQL, utilizzando le altre librerie per la statistica e il data mining (già disponibili in R). Tra le modalità di "grouping" nei dati, quindi, diviene possibile eseguire (con opportuni accorgimenti) una qualunque funzione statistica più o meno avanzata...rendendo sostanzialmente illimitato il campo di applicazione!!!!

Tra le diversi funzionalità esistenti, sicuramente la più importante da evidenziare è la join. Con una sintassi davvero intuitiva e con un gran risparmio di tempo (...e codice...), è possibile (a mio parere) dimenticare un qualunque altro sistema, disponibile in R, per le operazioni di "merging" di dati. Tuttavia, invece di dilungarmi su questo aspetto già ampiamente trattato in rete, preferisco porre l'evienza sulla  rolling-join.
Quando si lavora con dati ordinati rispetto al tempo, quindi con dati in serie storica, diviene spesso necessario eseguire una rolling-join, nota anche con il termine di last observation carried forward (LOCF) join. Si tratta di un tipo di operazione che non è facile da realizzare nei linguaggi di analisi dati, SQL compreso, ma che in R diviene molto semplice. Mentre è complicato descrivere a parole l'utilità di questa funzionalità, è molto facile fare un esempio.
Immaginate di seguire la variazione di due prodotti (a e b) venduti da due diversi siti web, quindi di scaricare periodicamente le nuove quotazioni per ogni aggiornamento pubblicato dai siti.
In R si disporrà dei seguenti data.table:


che avranno i seguenti dati:


Quindi, i dati provenienti dal sito 2 evidenziano una maggiore frequenza di variazione di prezzo. 
Quello che si vuole è una join tra le due tabelle che indichi, in ogni istante, la quotazione esistente sui due siti.
Una normale join (in stile "data.table") fornisce il seguente output che, evidentemente, non è quello che ci interessa:

Il prezzo del prodotto a in data 18/02, non essendo cambiata la quotazione dal sito 1, rimane quello disponibile alla data più recente (stessa cosa deve accadere nelle altre date in cui vi è un NA).

La rolling-join fornisce proprio l'output che ci interessa:

rendendo immediato il confronto tra i prezzi.

Le funzionalità della libreria sono tantissime e un utilizzo continuo rende sempre più indispensabile l'uso dei data.table per gli utenti di R !!!!


07 maggio 2012

Big data in R

Segnalo questo interessantissimo post in cui sono riportati diversi link che trattano il problema del parallel computing e delle performance di R con grossi volumi di dati.

01 gennaio 2012

Algoritmi per il campionamento da popolazioni finite: un'analisi mediante simulazioni Monte Carlo

Inizio il nuovo anno con la condivisione delle slide della mia tesi di Ph.D. 
Mediante simulazioni Monte Carlo, ho testato il soddisfacimento di alcune proprietà (valide per costruzione) per i seguenti algoritmi di campionamento di tipo PPS (probability proportional to size):
  • Hanurav-Vijayan;
  • Rao-Sampford.
Ho effettuato l'analisi in tutti i software statistici che, al momento della realizzazione del mio lavoro di ricerca, mi risultavano essere gli unici a prevedere questi algoritmi: SAS, SPSS e R. In realtà, per l'algoritmo di Hanurav, ho provveduto alla scrittura del relativo codice in R, non essendo disponibile nelle library a me note.
I risultati sono interessanti e riassunti  nelle seguenti slide:


 

Spero di condividere al più presto il codice R di Hanurav-Vijayan in un package liberamente scaricabile.

29 dicembre 2011

RExcel e rpart

Nel numero di Dicembre di "The R Journal" è presente (tra gli altri) un articolo inerente lo sviluppo di "applicazioni" mediante RExcel e R. Nello specifico, abbiamo preso come esempio la libreria rpart, quindi gli Alberi di Classificazione, con un esempio di applicazione nel processo di approvazione di richiesta credito.

27 settembre 2011

RStudio per un agevole uso di R

Dopo un periodo di intenso utilizzo, posso concludere che RStudio sia  (... forse...) l'interfaccia più interessante per R (ovviamente, solo in base ad un mio personalissimo parere) . Attualmente, infatti, è divenuto uno strumento fondamentale che mi ha portato ad un utilizzo sempre più raro delle altre gui di cui ho sempre usufruito.
In particolare, tra le tante, evidenzio la possibilità di importare un dataset  in R (in "stile" csv), in maniera molto agevole e senza scrivere codice ... esattamente come accade con i software commerciali.
Il tutto avviene così come nelle immagini in basso, ossia disponendo di un menu sul lato destro della "schermata" del software:








Quindi, direi problemi risolti per il tanto noioso import di un csv!

05 giugno 2011

Rconsole: modificare le preferenze dell'interfaccia di R

Con questo post tratto un aspetto veramente banale, ma che ho notato essere molto irritante per i newbie (...e non solo...) di questo linguaggio! Effettivamente, mi sento di dire che non è affatto intuitivo il settaggio delle preferenze della GUI, ma che in realtà e tutto molto semplice con qualche piccolo accorgimento.
Innanzitutto, è necessario sottolineare che quando si installa R si sceglie un linguaggio che NON è quello che verrà poi impostato di default nella GUI di R.
Infatti, durante la fase di installazione (ossia, dopo il doppio click sull'installer exe), si otterrà la seguente finestra:


in cui si sta scegliendo la lingua per le finestre di dialogo relative alla sola installazione (che dovrebbe essere un approccio tipico di quanto accade, in genere, in Windows) e non alla lingua che si osserverà dopo nell'interfaccia di R.
Se non si cambiano le preferenze in Rconsole (e, dopo, vedremo come!), la lingua che si potrà osservare nei (pochi) menu presenti nella GUI di R e nei messaggi di output, sarà quella prevista per la macchina (pc) su cui avete installato R. Se, ad esempio, lavorate con Windows 7 in italiano, dopo l'installazione di R noterete che i menu saranno proprio in italiano. In pratica, quindi, la lingua di default prevista in R è quella impostata sulla macchina.
In genere, comunque, io consiglio sempre di impostare la lingua inglese. Oltre, infatti, ad essere una pratica sostanzialmente diffusa tra gli utenti (almeno in base a quanto riportato qui), capiterà sicuramente di volere discutere di problemi (e soluzioni) con il vastissimo gruppo di utenti che, nel mondo, sostengo questo linguaggio (gran punto di forza di R!!!). In tal caso, sarete costretti a scrivere in inglese e, in particolare, a riportare i messaggi di errore che vi restituirà il software (ovviamente, nessuno ci vieta di cercare aiuto nei forum italiani, come questo e quest'altro).
Quindi, la modifica delle preferenze dell'interfaccia di R, tra cui la lingua, è possibile dal menu "Modifica>Preferenze interfaccia..." :


Dopo il click si aprirà la seguente maschera che contiene tutte gli aspetti personalizzabili della GUI:

In particolare,  notiamo che per i singoli "aspetti" da modificare, nonostante stiamo lavorando con un menu in italiano, viene utilizzato il linguaggio inglese. Questo non è un errore, come spiegato meglio anche qui.
Oltre alla lingua, un'altra caratteristica molto importante è l'impostazione di una single o multiple document interface (SDI o MDI, ma non mi dilungo sulle differenze perché si tratta di un metodo di organizzazione delle GUI che non è specifico di R). Un tempo, se non ricordo male, il default era SDI, ma ora dovrebbe essere MDI (e credo che sia preferibile).
A questo punto, cambiare le lingua è immediato, in quanto basta impostare "EN" come di seguito:


L'aspetto che confonde tutti è che, probabilmente, viene naturale cliccare su "ok" o su "Apply" , ma  purtroppo non è così. Si otterrebbe, infatti, il seguente messaggio:


Il giusto "metodo" consiste nel salvare le impostazioni, prima di vederle attive: si cliccherà, quindi, su "save", scegliendo di salvare il file "Rconsole" nella relativa directory "\etc" che trovate nella cartella in cui è installato R (sostituendo il file già esistente). Normalmente, in Windows 7, sarà la seguente:  "C:\Program Files\R\R-2.13.0\etc":


A questo punto, sarà sufficiente cliccare su "cancel" (anche su ok, è la stessa cosa, ma otterrete nuovamente il messaggio di informazione di cui sopra), chiudere R e riaprirlo per vedere modificate le preferenze della GUI.
In pratica, quindi, Rconsole è un file di testo che contiene tutte le informazioni sulle preferenze di R. Se provate ad aprirlo con un editor di testo (blocco note), capirete che tutte le impostazioni possono essere modificate direttamente da qui.
L'aver impostato "EN" nella maschera che si apre da "Modifica>Preferenze interfaccia...", è equivalente a scrivere "language=EN" nel file Rconsole:


Infine, sottolineo che per modificare queste preferenze, dovrete agire da Amministratori. Se non sarà così, otterrete questo messaggio di errore, quando cercherete di salvare le nuove preferenze, cliccando su "save":


Per aprire R come amministratori, quindi, tasto destro sull'icona di R e "esegui come amministratore".
Infine, all'atto di salvare le preferenze, sarà fondamentale salvare il file Rconsole nella directory "\etc", appunto la directory di default per salvare le vostre preferenze della GUI!
Concludo dicendo che, probabilmente, troverete più comodo aprire direttamente il file Rconsole con il blocco note e cambiare direttamente le vostre preferenze! Anche in questo caso, inoltre, sarà necessario agire da Amministratori!

17 dicembre 2010

Installazione di RKWard su Windows

RKWard è un progetto molto curato in ambiente Linux, mentre è dichiaratamente un "progetto giovane" in ambiente Windows, con diversi bug legati soprattutto alle interfacce di selezione dei file e al download "interattivo" di file da internet (tipicamente, l'installazione di una libreria).
Tra le GUI che conosco è quella che, forse, si presenta con la migliore "veste grafica". 
Le maschere di dialogo con cui si interagisce sono perfettamente analoghe a software come SPSS o STATISTICA, in cui si seleziona il dataset di input, le variabili e le varie opzioni in base all'output che si vuole ottenere (...con questo non voglio dire che si tratta di strumenti equivalenti...). Ad esempio, questo è il menu per le statistiche descrittive:


L'output che si ottiene, inoltre, è analogo, ad esempio, a quanto si ottiene in SPSS, ossia un insieme di risultati in formato "report" (il tutto altamente personalizzabile). 

Per quanto riguarda l'installazione, che spesso è l'aspetto che blocca molti utenti (non molto esperti, in ambiente windows) nell'utilizzo di uno strumento software, nella pagina ufficiale si suggerisce il download di un "semplice" file .exe, così come avviene, in generale, in Windows.

Diversamente da quanto suggerito in tali pagine, io consiglio l'installazione personalizzata (della quale, comunque, se ne parla sempre nella pagina ufficiale). Quanto riporto di seguito, quindi, è consigliabile per chi dispone già di una versione di R installata sulla propria macchina. Preciso, inoltre, che ci riferiamo a Windows - 32 bit (XP, vista o 7).
Quindi, la prima cosa da fare è il download di:
Nello stesso ordine appena riportato, installate queste componenti.
Per quanto riguarda KDE, scegliete le impostazioni riportate negli screenshot qui di seguito (che dovrebbero presentarsi nello stesso ordine):

il complier mode è MinGW4


qui ho scelto il server ftp.unina.it







scegliere kdebase-workspace


A questo punto verranno scaricate una serie di pacchetti necessari al funzionamento corretto e sarà necessario un po' di tempo. Evidenzio che la seguente procedura prevede un'installazione su una macchina connessa ad internet!
Successivamente, si passerà all'installazione di RKWard. Si presenteranno due finestre in cui scegliere le directory di installazione di R e KDE (installato precedentemente). Se state usando questa "guida", immagino (e, in caso non sia così, consiglio) che abbiate una macchina con installazioni "standard" dei vari software che utilizzate. Quindi, la directory di riferimento sarà sempre quella in cui sono installati i programmi.
Ad esempio, nella maschera successiva ho selezionato la directory in cui è installato R: 



Analogamente, sceglierò quella in cui è installato KDE:


Al termine di questi step (se tutto è andato a buon fine) l'avvio di RKWard avviene diversamente da quanto siamo abituati con un generico "software" in Windows. Nella classica cartella "Programmi", infatti, non sarà disponibile la relativa directory.
Per il suo avvio, infatti, sarà necessario cliccare sul file rkward.bat che, se avete effettuato l'installazione in linea con quanto precedentemente indicato, sarà presente nella directory "\KDE\bin". Ad esempio, nella mia installazione su Vista, questa è la directory:






29 novembre 2010

20 settembre 2010

Importare in R le serie storiche di Yahoo! Finanza

Ho notato non essere chiaro, ad alcuni utenti di R, la possibilità di importazione "diretta" delle Serie Storiche disponibili in Yahoo! Finanza. Con una sola riga di codice, quindi, è possibile effettuare l'importazione del dataset e, quindi, lavorare con l'analisi delle serie storiche.
Dal sito è, in genere, disponibile il file csv relativo al titolo che ci interessa. Ad esempio, qui dovrebbero essere disponibili le quotazioni storiche del NASDAQ. In fondo alla schermata, è possibile cliccare su "Preleva i dati su foglio di calcolo" e salvare i dati in csv.
Per effettuare l'importazione direttamente in R, è sufficiente eseguire le seguenti istruzioni:
  • invece di cliccare su "Preleva i dati su foglio di calcolo", tasto destro > copia indirizzo;
  • digitare in R l'istruzione riportata di seguito (nelle prime tre righe, si può notare l'indirizzo che ho copiato al passo precedente).
  • Sucessivamente, in R sarà disponibile il data.frame "db" con i dati del NASDAQ.
db<-read.table("http://ichart.yahoo.com/table.csv?s=%5EIXIC&d=8&e=21&f=2010&g=d&a=1&b=5&c=1971&ignore=.csv",
dec=".",
sep=",",
header=T)

24 giugno 2010

Test F nel DOE per distribuzioni non normali

Chiunque si occupa di DOE (Design of Experiment), quindi di applicazioni della statistica in ambito industriale, si trova nella situazione di dover eseguire un test F per verificare la significatività dei trattamenti e delle loro interazioni. Parlando in un gergo più generale, non specifico della Statistica Industriale, tale analisi consiste (in genere) nell'esecuzione di una ANOVA, che sappiamo essere legata alle ipotesi di normalità e omoschedasticità.
La deviazione dall'assunto di normalità viene gestita mediante analisi non parametriche, mediante trasformazioni delle variabili, oppure giustificando il tutto mediante la robustezza del metodo allo scostamento da tale distribuzione.
In realtà, un'importante giustificazione è riportata in Design and Analysis of Experiments, noto testo di Montgomery. Secondo quanto evidenziaato, infatti, basta pensare al test F in un contesto non parametrico e, più precisamente, basato sulla teoria dei permutation test.
Nell'ipotesi nulla di assenza di diversa influenza tra trattamenti, è possibile costruire l'insieme di tutte le possibili suddivisioni (senza ripetizione) degli N elementi in k gruppi, dove k è il numero di fattori, N il numero totale di misurazioni (N=n * k). Per ognuna di queste suddivisioni, possiamo calcolare la statistica F (rapporto tra MSE) e considerare come si distribuisce al variare di tutte le possibili suddivisioni. A questo punto, secondo la metodologia che è alla base dei permutation test, è sufficiente verificare se il valore della F osservato mediante il nostro Disegno Fattoriale, è situato "troppo a destra" nella distribuzione ottenuta.
Ebbene, così come riportato nel testo citato, si dimostra che la distrubuzione "esatta" della statistica F calcolata in questo modo, distribuzione detta exact randomization distribution, è ben approssimata dalla distribuzione F di Snedecor, relativa all'ipotesi di normalità dei dati. Questo, in altri termini, significa che l'esecuzione di un Disegno Fattoriale mediante la F di Snedecor, quando non è valido l'assunto di normalità, può essere comunque visto come l'esecuzione di un test F non parametrico di tipo permutation test (continuando, quindi, a rimanere valido l'intero esperimento!).

20 maggio 2010

Grafici in PostgreSQL con R

Nel precedente post ho evidenziato le possibilità di integrazione di R in PostgreSQL, con un esempio sull'esecuzione di un test statistico per la normalità, direttamente nel db.
In questo breve post, faccio un altro esempio per la creazione di un grafico mediante un'opportuna funzione. Anche in questo caso, il motore di creazione dei grafici è R, eseguito in background mediante il linguaggio PL/R. Le potenzialità di questo metodo di lavoro sono evidenti: in Postgres è direttamente disponibile una vastissima gamma di grafici di alto livello.
Ovviamente ciò non significa che, in seguito alla chiamata della funzione, verrà visualizzato il grafico a video. L'esecuzione della procedura, invece, andrà a creare un grafico (nel mio caso, un file jpeg) in un'opportuna cartella.
Il codice per la creazione della funzione è il seguente e penso sia abbastanza immediato per gli utenti di R.

CREATE OR REPLACE FUNCTION createGraph(tb text)
RETURNS text AS
'
sql<-paste("select * from", tb)
rs<-pg.spi.exec(sql)
x<-rs[,1]
y<-rs[,2]
jpeg("graph.jpg")
plot(x,y)
dev.off()
print("done")
'
LANGUAGE 'plr';


L'utente dovrà successivamente scegliere un'opportuna tabella contenente dati da visualizzare in un grafico a due dimensioni. I dati saranno quelli contenuti in due specifici campi. Quindi, per esempio, la chiamata della funzione:

SELECT createGraph('tbOrdini');


andrà a creare un file jpg, contenente il grafico che in R visualizzo con il comando plot(x,y). Sottolineo che la directory di default in cui viene salvato il file è la cartella '...\PostgreSQL\8.X\data'. Ovviamente, è possibile cambiare il percorso in cui salvare il file .jpg, specificandolo nel comando jpeg (utilizzato in PL/R), ma questo potrebbe comportare qualche problema agli utenti Vista, nel caso dell'eventuale assenza di permessi in scrittura.
Ovviamente, l'esempio è volutamente semplice, ma può essere personalizzato ed esteso a situazioni più complesse.

05 marzo 2010

R in PostgreSQL

L'integrazione di R con i DBMS è un aspetto molto importante per la realizzazione di soluzioni analitiche in questo linguaggio. Se si lavora in ambito industriale, ad esempio, i dati saranno raccolti in un database. Quindi, sarà necessario sviluppare un'interfaccia "facile" al motore di calcolo e permettere all'utente di interrogare i dati, sia per estrarre informazioni "semplici" (in tal caso R dovrebbe essere superfluo), sia per applicare una qualche forma di sintesi. Se per quest'ultimo tipo di elaborazione, le funzioni di aggregazione previste nel db non fossero sufficienti, è possibile ricorrere ad R. Una prima possibilità, sicuramente molto più diffusa, è quella di lavorare importando i dati in R ed eseguendo, direttamente in tale ambiente, le necessarie elaborazioni. Tale tipo di approccio, ad esempio, lo si realizza facilmente mediante il package RODBC.
Esiste tuttavia un'altra possibilità che, in base ad una mia personale sensazione, è poco conosciuta. Nell'universo dei DBMS, esiste ed è molto diffuso PostgreSQL . Per tale tipo di database, è prevista la possibilità di utilizzare un particolare linguaggio procedurale, ossia PL/R, che permette di scrivere (ed utilizzare) direttamente in PostgreSQL, funzioni in linguaggio R (in realtà esiste anche la possibilità di lavorare in R mediante RPgSQL, ma spero di dedicarci un post a parte). Quindi, saranno disponibili tutte le normali funzioni già previste in R, nelle varie librerie, così come sarà possibile sviluppare nuove funzioni di PostrgreSQL, utilizzando la sintassi di R.
Per l'utilizzo di tali modalità, ovviamente, è necessario avere una certa conoscenza di questo database, oltre che una certa familiarità con R. Per le problematiche di installazione (in particolare, in ambiente Windows) ed utilizzo, in generale, si rimanda ai siti:
Oltre a fare questa segnalazione, quindi, intendo riportare degli esempi utili ad evidenziare le potenzialità di tale modalità di sviluppo.

Immaginiamo di progettare, in ambito industriale, un database che raccoglie dati sulla produzione di semilavorati in un centro siderurgico, ad esempio dei tubi di acciaio. Periodicamente, a campione, viene misurata e registrata la circonferenza esatta di tali prodotti che, ovviamente, deve rispettare determinati livelli di tolleranza prestabiliti. In tale processo industriale, quindi, ci si aspetta un "errore" nella produzione, ossia degli scostamenti dalla circonferenza media prevista. Per controlloare questo aspetto, ad esempio, si cercherà di testare l'ipotesi di normalità dei dati, quindi la casualità degli scarti. Nell'esempio che propongo successivamente, quindi, vado proprio ad eseguire un test statistico sulla normalità dei dati direttamente nel database, in maniera "nativa". A mio parere, questo è un risultato eccezionale! Non mi sembra esistano possibilità analoghe in altri DBMS!
Non è superfluo evidenziare che si tratta solo di un esempio! Nell'ambito del controllo statistico della qualità, il controllo della produzione è realizzato mediante processi più complessi.

Quindi, riepilogando, è sufficiente crare un'apposita funzione in PostgreSQL, mediante il seguente codice:

CREATE OR REPLACE FUNCTION testNormality(tb text, col text)
RETURNS double precision AS
'
sql<-paste("select", col, "from", tb)
rs<-pg.spi.exec(sql)
shapiro.test(rs[,1])$p.value
'
LANGUAGE 'plr';

In generale, in PostgreSQL è possibile utilizzare diversi estensioni di linguaggio procedurale (come pgSQL, Python, Java ...), che rendono altamente personalizzabili le funzioni presenti nel database. Nello specifico, qui stiamo usando il linguaggio PL/R che, appunto, mi permette di scrivere in R. La documentazione ufficiale la trovate qui. In particolare, si noti che tra gli apici va riportato il codice R, che verrà eseguito alla chiamata della funzione.
Nel nostro caso, quindi, sto definendo la funzione testNormality che prende in input due parametri di tipo testo: il nome di una tabella (tb) e il nome di un campo di quest'ultima (col). Tali informazioni vengono "passate" ad R in cui creo la stringa sql che, appunto è la query in linguaggio SQL:

SELECT col FROM tb;

10 febbraio 2010

Statistica e Scienza dell’Informazione: riflessioni di uno statistico

Non so quanti di voi siano informati del fatto che la SIS, Società Italiana di Statistica, dedica una sezione del sito per pubblicare il Sis-Magazine, giornale online ricco di riflessioni. Io ho l'impressione che sia poco conosciuto nel mondo di quelli che chiamo "statistici applicati", ossia quelli che lavorano per aziende private, ovviamente in ambito statistico. E' evidente che vengono trattati anche argomenti interessanti per questo tipo di utenti.
Ebbene, lo scorso mese è stato pubblicato un articolo (veramente bello) del prof. Isabella Verdinelli, ricco di riflessioni sulle similarità e differenze tra Metodi Statistici e Metodi di Machine Learning. Questo il link, invito tutti a leggerlo!
In merito a quanto scritto, io direi che uno statistico deve essere oggi anche un informatico: deve programmare, deve lavorare con i database, deve conoscere i sistemi operativi. Inoltre, non è pensabile oggi di proporre un metodo statistico senza valutare la sua fattibiltà da un punto di vista computazionale. Lo sforzo importante, in base a quelle che sono state le mie esperienze lavorative, sarebbe quello di "orientare" maggiormente all'informatica i corsi di laurea in Statistica (...ammesso ovviamente che questo oggi non stia già accadendo...).

22 dicembre 2009

SQL join in R

Consideriamo un classico esempio di 3 tabelle di un database, ognuna con i rispettivi campi:
  1. acquisti (codFornitore, numeroColli, codProdotto, codQualità)
  2. prodotti (codice, qualità, descrizione)
  3. fornitori (codice, nome)
I fornitori hanno un codice numerico ed un nome. Ogni prodotto ha un codice numerico ed uno di qualità e, per ognuna di queste combinazioni, c'è una descrizione. Infine, gli acquisti prevedono un codice di fornitori, uno di prodotto e di qualità, infine il numero colli acquistati.

In una situazione di questo tipo, è comune eseguire le operazioni di "congiunzione" (appunto, join) tra tabelle. Per ogni comando SQL in un db, esiste un analogo in R mediante la funzione merge. Riporto di seguito degli esempi di comparazione dei due linguaggi, ipotizzando di disporre in R dei relativi dataframe.

Visualizzo gli acquisti assieme al nome del fornitore.

Inner join in SQL:

SELECT a.*, b.nome
FROM acquisti AS a INNER JOIN fornitori AS b
ON a.codFornitore = b.codice;

Inner join in R:

>merge(acquisti,fornitori,by.x="codFornitore",by.y="codice")

Visualizzo gli acquisti assieme a tutti i fornitori, compresi quelli dai quali non ho comprato prodotti.

Right join in SQL:

SELECT a.*, b.nome
FROM Acquisti AS a RIGHT JOIN Fornitori AS b
ON b.codice = a.codFornitore;

Right join in R:

>merge(acquisti,fornitori,by.x="codFornitore",by.y="codice",all.y=T)

Visualizzo gli acquisti assieme alla descrizione del prodotto (descrizione relativa al tipo di prodotto ed alla sua qualità), compresi i prodotti che non sono stati acquistati.

Left join in SQL:

SELECT a.*, b.codFornitore, b.numeroColli
FROM Prodotti as a LEFT JOIN Acquisti as b
ON (a.qualità = b.codQualità) AND (a.codice = b.codProdotto);

Left join in R:

>merge(prodotti,acquisti,by.x=c("codice","qualità"),by.y=c("codProdotto","codQualità"),all.x=T)

Infine, solo per completezza, riporto il codice di una full, ma in tal caso il risultato è analogo alla left.

Full join in SQL:

SELECT a.*, b.codFornitore, b.numeroColli
FROM Prodotti as a FULL JOIN Acquisti as b
ON (a.qualità = b.codQualità) AND (a.codice = b.codProdotto);

Full join in R:

>merge(prodotti,acquisti,by.x=c("codice","qualità"),by.y=c("codProdotto","codQualità"),all.x=T,all.y=T)

Riassumendo, quindi, la logica in R è molto intuitiva, alla pari dell'SQL.
Con by.x e by.y, si determinano i campi su qui eseguire la join, ossia i campi da "legare". Mediante all.x e all.y si stabilisce se left, right o full join.
Per tutte le varianti della funzione, si rimanda all'help di R.

26 novembre 2009

Configurazione di natbib_ita in MikTex 2.8 per Vista

Mi arrivano parecchie richieste relative all'installazione su Vista di MikTex. Io ho effettuato alcune configurazioni e non ho avuto particolari problemi. Quindi, l'installazione rimane esattamente quella descritta in questo mio post. Ovviamente, è necessario procedere con privilegi da amministratore!
Qualche "problemino" di configurazione riguarda invece natbib_ita, il pacchetto per la gestione della bibliografia in italiano. In MikTex (versione >=2.7) sono già previsti alcuni file .bst che servono all'uso di bibtex, ma non quelli per lo "stile" italiano.
Quindi, qui scaricate quello che vi serve, e noterete i seguenti file:
  1. natbib.sty
  2. plain_ita.bst
  3. natbib_ita.bst
  4. natbib.bst
Gli altri file servono per testare la configurazione, consiglio di leggerli attentamente!!!
A questo punto:
  1. copiate il file natbib.sty in "C:\Program Files\MiKTeX 2.8\tex\latex\natbib" (cancellando quindi il file con lo stesso nome che trovate in questa cartella);
  2. copiate i rimaneti 3 file in "C:\Program Files\MiKTeX 2.8\bibtex\bst\base";
  3. tramite il "programma" miktex options (start -> tutti i programmi -> MikTex 2.8 -> Maintenance -> Settings), eseguite il refresh, ossia, nella scheda General, cliccate su "Refresh FNDB" e su "Update Formats".
Nelle configurazioni eseguite non ho riscontrato nessun problema. Per maggiori informazioni c'è sempre il sito del GUIT.