R-ohjelmointi.org
Tilastotieteellistä ohjelmointia R-kielellä
Suurten tekstitiedostojen käsittely sqldf-paketilla
Suurten (taulukkomuotoisten) tekstitiedostojen käsittely R:ssä käy näppärimmin, jos tiedoston saa kokonaisuudessaan ladattua muistiin. Aina tämä ei kuitenkaan ole mahdollista, mutta jos levytilaa on kuitenkin tarpeeksi, voi tiedostosta tehdä esimerkiksi SQLite-tietokannan, ja tehdä hakuja siitä. SQLite on siitä näppärä tietokantamoottori, ettei se vaadi erillistä asennusta, vaan sen saa helposti asentamalla RSQLIte-paketin. Paketilla sqldf voi puolestaan tehdä helposti SQLite-tietokannan tesktitiedostosta R:ssä.
Oletetaan, että tekstitiedoston nimi on data.txt, ja siitä muodostettavan tietokannan nimeksi tulee datadb. Datadb:n tauluun df luetaan tekstitiedoston sisältö. R:ssä homma toimii seuraavasti:
# Ladataan paketti library(sqldf) # Tietokanta syntyy polkuun: setwd("C:/Users/Jarno Tuimala/Desktop") # Luodaan tyhjä tietokanta datadb sqldf("attach datadb as new") # Luetaan tekstitiedosto tietokannan tauluksi df read.csv.sql("C:\\Users\\Jarno Tuimala\\Desktop\\data.txt", sql = "create table df as select * from file", header=T, sep="\t", dbname = "datadb") |
Muodostuva tietokanta on tyypillisesti kooltaan runsaasti suurempi kuin alkuperäinen tiedosto. Tietokannasta voidaan tehdä tavanomaisia SQL-hakuja vaikkapa pakettia RSQLite käyttäen seuraavasti:
setwd("C:/Users/Jarno Tuimala/Desktop") library("RSQLite") # Muodostetaan yhteys tietokantaan con<-dbConnect("SQLite", "datadb") # Tehdään haku SQL:llä res<-dbSendQuery(con, 'select * from df where cylinder > 4') # Noudetaan data objektiin dat dat<-fetch(res, n=-1) # Tarvittaessa tyhjennetään haun tulos dbClearResult(res) |
Suurimmat tekstitiedostot, joita olen tähän tyyliin käsitellyt ovat olleet useita kymmeniä gigatavuja eli nykykäsityksen mukaan edelleen varsin pieniä, mutta kuitenkin sellaisia, ettei niiden käsittely muistissa onnistu suoraan.
Vastaa