VidicL13 / APPR-2015-16

Repozitorij z gradivi za predmet Analiza podatkov s programom R v študijskem letu 2015/16
MIT License
0 stars 0 forks source link

Počasen algoritm #5

Closed VidicL13 closed 8 years ago

VidicL13 commented 8 years ago

Ustvaril sem algoritm, ki je zalo počasen in me zanima ali imate kakšen predlog za izboljšavo. uvoz/uvoz podatkov.r

jaanos commented 8 years ago

V mapi uvoz vidim zadnjo spremembo pred 18 dnevi - si morda pozabil vključiti datoteko v commit?

VidicL13 commented 8 years ago

se mi je zdelo, da je nekaj narobe, uvoz podatko.r mi noče commitat oziroma niti stage-at. tako da prilagam kar kodo:

# če bom potreboval imena
all_dates <- dir("podatki/timestamped")

poskusni_list <- list.dirs("podatki/timestamped")
# odstranim samega sebe
poskusni_list <- poskusni_list[2:388]
# odstranim še mape, ki držijo potrebne podatke. Ostanejo le še mape clcoil in usdcad
list_brez_svoje_mape <- poskusni_list[-seq(1,length(poskusni_list),3)]

# poberem imena kar z datumom skupaj, za boljšo preglednost in identifikacijo
proba <- list.files(path = list_brez_svoje_mape, pattern = ".html", full.names = TRUE)

ime <- gsub("^.*?/(\\d{2,4}.*?)\\/.*?(\\/.*?)\\.html","^.*?/\\1\\/.*?\\2",proba)
imena <- gsub("^.*?/(\\d{2,4}.*?)\\/.*?(\\/.*?)\\.html","\\1\\2",proba)

# izbrišem še podvojene
imena <- unique(imena)
ime <- unique(ime)

# samo za timer
ptm <- proc.time()

# ustvarim data.frame velikosti 9x149 oz. 9x148, kjer je prvi stolpec namenjen 
# datumu, 2:5 so namenjeni clcoil in 6:9 so namenjeni usdcad
for (i in 1:length(ime)){

  y <- ifelse(gsub(ime[i], "Pravilno", proba) == "Pravilno.html", TRUE, FALSE)
  y <- proba[y]
  if (file.info(y[1])$size>1 & file.info(y[2])$size>1){
    number_of_rows <- min(sapply(read.csv(y[1]),NROW),sapply(read.csv(y[2]),NROW))
    assign("x",data.frame(read.csv(y[1])[1:number_of_rows, 1:2],
                          read.csv(y[1])[1:number_of_rows,4:5],
                          read.csv(y[1])[1:number_of_rows,3],
                          read.csv(y[2])[1:number_of_rows, 2]^-1,
                          read.csv(y[2])[1:number_of_rows, 4:5]^-1,
                          read.csv(y[2])[1:number_of_rows, 3]^-1))
    names(x) <- c("Date", "OilOpen", "OilHigh", "OilLow",
                  "OilClose", "CadOpen", "CadHigh", "CadLow", "CadClose")
    assign(imena[i], x)
    rm(x,y)
  }
  else
    rm(y)

}

cat(proc.time()-ptm)
jaanos commented 8 years ago

Ti ne dovoli, da bi datoteko obkljukal? Sicer svetujem, da se presledkom v imenih datotek izogibaš.

Če vstavljaš kodo v issue (ali kamorkoli v Markdown), potem pred njo postavi vrstico

```R

za njo pa vrstico


Tako bo koda kot taka prikazana in ustrezno pobarvana (`R` pomeni programski jezik R - namesto tega bi lahko uporabil tudi kak drug programski jezik za ustrezno barvanje). Na GitHubu imaš tudi zavihek _Preview_, kjer si lahko ogledaš, kako bo stvar izgledala.

Tako na hitro izgleda, da vsako datoteko bereš štirikrat. Namesto, da vsakič kličeš `read.csv`, raje naredi nekaj takega:

``` R
csv1 <- read.csv(y[1])
csv2 <- read.csv(y[2])
number_of_rows <- min(nrow(csv1), nrow(csv2))
x <- data.frame(csv1[1:number_of_rows, c(1,2,4,5,3)], csv2[1:number_of_rows, c(2,4,5,3)]^-1)

Podatkov imaš sicer veliko, tako da bo v vsakem primeru branje podatkov vzelo nekaj časa.

VidicL13 commented 8 years ago

hvala to mi je razpolovilo čas obdelave, in ko sem preimenoval datoteke, sem lahko commital.