4 . Kapitulua Datuak irakurri eta idatzi
Aurreko kapituluetan datu-egiturak nola sortu eta manipulatu ikusi dugu, baina askotan horrelako objektuetan jasotzen den informazioa nonbaitetik kargatu behar da. Are gehiago, kargatutako datuak landu ondoren, emaitzak gorde nahi izango dugu askotan. Kapitulu honetan datuak nola irakurtzen eta idazten diren ikusiko dugu. Gehien erabiltzen diren formatuak R lengoaiko berezko formatua eta csv-a dira.
4.1 Rko fitxategi formatua
R ingurunean sortu ditugun objektuak (bektoreak, matrizeak, etab.) zuzenean fitxategietan gorde daitezke save
funtzioa erabiliz. Funtzioaren erabilera oso erraza da, lehenik objektu zerrenda bat pasatu behar diogu eta, gero, fitxategiaren izena.
matrize.bat <- matrix(1:100, ncol=10)
bektore.bat <- c("A","B","C")
save(matrize.bat, bektore.bat, file="fitxategia.RData")
Goiko kodea erabiliz sortutako bi objektuak, matrize.bat
eta bektore.bat
fitxategia.RData izeneko fitxategi batean gorde ditugu. Kontutan izan file
argumentuari izen-bide osoa ez badiogu ematen, fitxategia R saioko lan-direktorioan gordeko dela.
Jakiteko zein den uneko lan-direktorioa getwd
funtzioa erabil dezakegu. Direktorioa aldatzeko, berriz, setwd
funtzioa erabil dezakegu edo, RStudio erabiliz gero, Session menuan Set Working Directory atalean aukera ezberdinak izango ditugu.
Goiko kodearekin sortzen dugun fitxategia formatu berezian dago, eta bakarrik Rn zabaldu daiteke. Horregatik, _*.RData_ hedapena erabiltzen da.
Gordetako informazioa R saioan berriro kargatzeko, load
funtzioa erabil dezakegu.
rm("matrize.bat","bektore.bat") # Bi objektuak ezabatu
matrize.bat
## Error in eval(expr, envir, enclos): object 'matrize.bat' not found
load(file="fitxategia.RData") # Kargatu fitxategia
matrize.bat
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] 1 11 21 31 41 51 61 71 81 91
## [2,] 2 12 22 32 42 52 62 72 82 92
## [3,] 3 13 23 33 43 53 63 73 83 93
## [4,] 4 14 24 34 44 54 64 74 84 94
## [5,] 5 15 25 35 45 55 65 75 85 95
## [6,] 6 16 26 36 46 56 66 76 86 96
## [7,] 7 17 27 37 47 57 67 77 87 97
## [8,] 8 18 28 38 48 58 68 78 88 98
## [9,] 9 19 29 39 49 59 69 79 89 99
## [10,] 10 20 30 40 50 60 70 80 90 100
Lehen esan bezala, kontuz fitxategiaren bide-izenarekin, fitxategia existitzen ez bada errore bat jasoko dugu eta.
load(file="asmatutako_izena.RData")
## Warning in readChar(con, 5L, useBytes = TRUE): cannot open compressed file
## 'asmatutako_izena.RData', probable reason 'No such file or directory'
## Error in readChar(con, 5L, useBytes = TRUE): cannot open the connection
4.2 Formatu estandarrak: CSV fitxategiak
R lengoaiaren fitxategi-formatua oso erabilgarria izan arren, datuak beste programekin trukatzeko ez du balio. Are gehiago, formatua bitarra denez, ezin dugu testu-editore arruntekin _*.RData_ formatuko fitxategietan gordetako edukia bistaratu. Hori dela eta, oso ohikoa da taulak gordetzeko formatu estandarrak erabiltzea.
Fitxategi-formatu hedatuena CSVa da (comma separated values, ingelesez). Fitxategi mota hauetan errenkadak taulen errenkadak dira eta zutabeak koma edo beste karaktere baten bidez banatzen dira. Hau da, honako testu hau testu-fitxategi batean (adibidea.csv) kopiatzen badugu …
1,2,3,4,5
5,4,3,2,1
1,1,1,1,1
2,2,2,2,2
… fitxategi horren edukia R sesioan karga dezakegu read.csv
funtzioa erabiliz
taula <- read.csv(file="adibidea.csv")
taula
## X1 X2 X3 X4 X5
## 1 5 4 3 2 1
## 2 1 1 1 1 1
## 3 2 2 2 2 2
Goiko adibidean, ohartu, fitxategian lau errenkada geneuzkala idatzita, baina kargatutako taulan bakarrik hiru agertzen zaizkigu. Hori gertatzen da read.csv
funtzioak lehenengo lerroa goiburuak (zutabeen izenak, alegia) izatea espero duelako. Izan ere, taula
objektuko zutabeen izenak (X1
etik X5
era) lehenengo errenkadako balioak dira, aurretik X gehituta, Rn zutabeen eta errenkedeen izenak ezin baitira zenbaki batekin hasi.
Arazoa konpontzeko biderik errazena (eta egokiena), fitxategian goiburua gehitzea da, honako hau idatziz, adibidez.
A,B,C,D,E
1,2,3,4,5
5,4,3,2,1
1,1,1,1,1
2,2,2,2,2
Beste konponbidea read.csv
funtzioari goibururik ez dagoela esatea da, header
argumentuari FALSE
balioa esleituz.
taula <- read.csv(file="adibidea.csv", header=FALSE)
taula
## V1 V2 V3 V4 V5
## 1 1 2 3 4 5
## 2 5 4 3 2 1
## 3 1 1 1 1 1
## 4 2 2 2 2 2
Ondoren, izenak jarri diezazkiokegu zutabeei honela:
colnames(taula) <- c("A", "B", "C", "D", "E")
taula
## A B C D E
## 1 1 2 3 4 5
## 2 5 4 3 2 1
## 3 1 1 1 1 1
## 4 2 2 2 2 2
read.csv
funtzioak beste argumentu erabilgarri gehiago ere baditu (denak ikusteko funtzioaren laguntza kontsultatu ?read.csv
exekutatuz):
sep
Argumentu honek zutabeak banatzeko erabili den karaketerea definitzeko balio du. Karaktere ohikoenak,
,;
, tartea eta tabuladorea dira. Azken hori adierazteko\t
kodea erabil daiteke.dec
Fitxategian agertzen diren balioak zenbakiak badira, Rk dezimalak.
karakterearen bidez banatuta daudela suposatuko du. Beste karaktere bat erabili bada dezimalak adierazteko (,
, adibidez), argumentu honen bidez definitu behar da interpretazioa ondo egiteko.skip
Zenbait kasutan, fitxategiaren hasieran kargatu behar ez den informazioa egon daiteke (iruzkinak, esate baterako). Argumentu honekin hasierako zenbat lerro baztertu behar diren adieraz dezakegu.
Rko terminalean sortutako matrizeak edota data.frame
ak CSV fitxategitan gorde daitezke, write.csv
funtzioa erabiliz. Funtzionamendua read.csv
funztioarenaren oso antzerakoa da, argumentu gehienak berdinak baitira. Haintzat hartzeko gauza bakarra da write.csv
funtzioak, defektuz, errenkaden izenak ere gordetzen dituela beti (edo, izenik ez badute, errenkadaren indizea). Informazio hori ez badugu nahi, row.names
argumentuari FALSE
balioa esleitu behar diogu.
write.csv(x=taula^2, file="adibidea_karratua.csv", row.names=FALSE)
taula.berbi <- read.csv(file="adibidea_karratua.csv")
taula.berbi
## A B C D E
## 1 1 4 9 16 25
## 2 25 16 9 4 1
## 3 1 1 1 1 1
## 4 4 4 4 4 4
Goiko kodean ikus daitekeen bezala, funtzioaren lehenengo atributua gorde nahi dugun taula da (gure kasuan,taula
ren karratua).
4.3 Testu fitxategiak
Ohikoena ez izan arren, tarteka testu fitxategietatik irakurri edota testu fitxategietan idatzi beharko dugu. Testu fitxategietatik bai irakurtzeko eta bai bertan idazteko, hasteko, fitxategiarekin konexioa ezarri behar dugu, file
funtzioa erabiliz. Funtzio horren argumentu nagusia description
da, non fitxategiaren bide-izena idatzi beharko dugun.
fitxategia <- file(description="adibidea_karratua.csv")
Behin fitxategia irekita, edukia lerroz lerro irakur dezakegu readLines
funtzioa erabiliz. Funtzio horrek karaktere-bektore bat itzuliko digu, non elementu bakoitza fitxategiaren lerro bat den.
lerroak <- readLines(fitxategia)
lerroak[2]
## [1] "1,4,9,16,25"
lerroak[3]
## [1] "25,16,9,4,1"
Oso garrantzitsua da fitxategia erabiltzen amaitu eta gero konexioa ixtea. Horretarako, close
funtzioa erabil dezakegu.
close(fitxategia)
Fitxategia irakurri beharrean bertan idatzi behar badugu, prozedura antzerakoa erabiliko dugu (alegia, konexioa ezarri, idatzi eta gero konexioa itxi), baina oraingo honetan writeLines
funtzioa erabiliko dugu nahi duguna idazteko.
fitxategia <- file(description="testu_fitxategia.txt")
writeLines("Nire testu fitxategia", con=fitxategia)
writeLines("---------------------", con=fitxategia)
writeLines("\tLerro bat", con=fitxategia)
writeLines("\tBeste lerro bat", con=fitxategia)
close(fitxategia)
Goiko adibideak testu_fitxategia.txt izeneko fitxategi bat sortzen du. Bertan, lau lerro idatzi ditugu, bakoitza writeLines
funtzioari behin dei eginez. Adibidean oso ohikoa den karaktere berezi bat agertzen da, \t
, tabuladorea sartzeko erabiltzen dena.
4.3.1 Terminalaren irteera
Kasu berezi moduan, R terminalean agertzen dena ere fitxategi batean idatzi/kopiatu daiteke sink
funtzioa erabiliz. Fitxategi hauek normalean _*.Rout_ hedapena izaten dute. sink
funtzioa exekutatzen dugunean, hortik aurrera terminalean agertzen diren irteera guztiak aukeratutako fitxategi horretan idatziko dira.
sink(file="Rko_irteera.Rout")
4+4
## [1] 8
c("Testu", "bat")
## [1] "Testu" "bat"
sink()
fitxategia <- file("Rko_irteera.Rout")
readLines(con=fitxategia)
## character(0)
close(fitxategia)
Goiko adibidean sink
funtzioa bi bider erabili dugu. Lehenengoan irteera(k) Rko_irteera.Rout fitxategian idazteko da. Bigarrena, argumenturik ez duena, fitxategiarekin konexioa itxi eta berriro irteerak terminalean idazteko da. Irteera bakarrik fitxategian agertzea nahi ez badugu (hau da, terminalean ere agertzea nahi badugu), split
argumentuari TRUE
balioa eman behar diogu.
sink(file="Rko_irteera.Rout", split=TRUE)
4+4
## [1] 8
c("Testu", "bat")
## [1] "Testu" "bat"
sink()
fitxategia <- file("Rko_irteera.Rout")
readLines(con=fitxategia)
## character(0)
close(fitxategia)
4.4 Hedapenak
Aurreko ataletan CSV eta testuko fitxategiak nola idatzi/irakurri ikusi dugu. Atal honetan bi hedapen ikusiko ditugu. Alde batetik, fitxategi konprimatuak nola erabili aztertuko dugu eta, bestetik, sarean dauden fitxategiak nola atzitu erakutsiko dugu.
4.4.1 Fitxategi konprimatuak
Testu fitxategiak (CSVak barne) ez dira oso bide eraginkorra informazioa gordetzeko. Hori dela eta, zenbait egoeratan informazioa konprimatzeko premia izango dugu. R lengoaian informazioa fitxategi konprimatutan gordetzea oso erraza da, gzfile
funtzioa erabiliz. Adibidez, aurreko ataletan erabili dugun matrizea fitxategi konprimatu batean gordetzeko hau egin dezakegu.
fitxategia <- gzfile(description="adibidea_bikoitza.csv.gz")
write.csv(x=taula*2, file=fitxategia, row.names=FALSE)
Irakurtzea are errazagoa da, fitxategia konprimatuta egon arren era berdinean irakurtzen baita.
taula.bikoitza <- read.csv(file="adibidea_bikoitza.csv.gz")
taula.bikoitza
## A B C D E
## 1 2 4 6 8 10
## 2 10 8 6 4 2
## 3 2 2 2 2 2
## 4 4 4 4 4 4
4.4.2 Sareko fitxategiak
Kapitulu honetan zehar file
funtzioa erabili dugu diskoan dauden fitxategiekin konexioak ezartzeko. Fitxategiak zerbitzari batean egonez gero, url
funtzioa erabil dezakegu konexioa ezartzeko. Hortik aurrera, era berdinean irakur dezakegu fitxategia.
f <- url(description="http://www.stats.ox.ac.uk/pub/datasets/csb/ch11b.dat")
edukia <- read.csv(file=f, header=FALSE, sep=" ")
head(edukia)
## V1 V2 V3 V4 V5
## 1 1 307 930 36.58 0
## 2 2 307 940 36.73 0
## 3 3 307 950 36.93 0
## 4 4 307 1000 37.15 0
## 5 5 307 1010 37.23 0
## 6 6 307 1020 37.24 0
4.5 Ariketak
1. Ariketa Gorde .RData fitxategi batean Rko saioan dituzun objetu guztiak. Gogoratu ls
funtzioak saioko objektuen zerrenda itzultzen duela.
2. Ariketa Erabili testu editore bat (edo kalkulu-orri bat) goiburua duen CSV fitxategi bat sortzeko. Bertan hiru zutabe sortu, Izena
, NAN
eta Nota
izenekoak. Sartu asmatutako datuak (nota zenbaki bat izan behar da), gorde fitxategia eta kargatu R terminalean. Ondo kargatu dira datuak? Kargatutako datuetan Nota
zutabea numeric
da? Ez bada, nola konponduko zenuke?
3. Ariketa Aurreko ariketan sortutako datuak erabiliz, idatzi, testu fitxategi batean, “Izena
, zure nota Nota
da.” esaldia ikasle bakoitzarentzat, errenkada bakoitzeko lerro bat idatziz.
4. ariketa Sartu Eustateko webgunean eta menuan aukeratu Gaiak. Bertan aukeratu Biztanleria->Biztanleriaren Mugimenduak->Jaiotzak eta aukeratu “Estatistika taulak”. Aukeren artean topatu “100 neska-izen ugarienen zerrenda” eta datuak csv formatuan deskargatu. Kargatu datuak eta fitxategi batean idatzi, komaz banatuta, gehien errepikatzen diren 10 izenak (lerro bat urte bakoitzeko).
5. Ariketa Sartu Eustateko webgunean eta menuan aukeratu Datu bankua. Bertan aukeratu Gizartea->Hezkuntza->Eskolatze-maila eta bertan lehenengo sarrera aukeratu. Egin eremu aukeraketa bat, esportatu datuak CSV fitxategi batera eta R terminalean kargatu datuak.