Datan siirtämistä .SVO ja R:n data.framen välillä read.svo, write.svo

classic Classic list List threaded Threaded
15 messages Options
Reply | Threaded
Open this post in threaded view
|

Datan siirtämistä .SVO ja R:n data.framen välillä read.svo, write.svo

Petri Palmu
Survo R:ssä on hyviä toimintoja, että saa datat liikkumaan jouhevasti R:n data.framen ja .SVO-tiedostojen välillä.

DATA _K
X  Y
1  a

FILE LOAD _K TO R>D  / STRIP_WHITE=1 Tässä toimivat IND,VARS,...
FILE DEL K2

R CUR+1,CUR+2
D; # tulostaa data
write.svo(D, "K2.SVO");

#FILE LOAD +K2,CUR+1
      X Y
      1 a

##################

FILE COPY _K TO NEW K

R CUR+1,CUR+1
D <- read.svo("K.SVO");D; # tulostaa datan

Mitä optioita esim. write.svo():hon liittyy? Voiko siellä valita, että ko. tilanteessa (mahd. jo olemassa oleva) K2.SVO tuhotaan (ennen uuden luomista)? Näin ei tarvitsisi ennen R-koodia tehdä tuota FILE DELiä (muussa tapauksessa joutuu manuaalisesti vastaamaan Y/N). Mutta yleisemminkin kiinnostaa, mitä kaikkea read.svo ja write.svo pitävät sisällään :)
Reply | Threaded
Open this post in threaded view
|

Re: Datan siirtämistä .SVO ja R:n data.framen välillä read.svo, write.svo

Reijo Sund
Administrator
Petri Palmu wrote
Mitä optioita esim. write.svo():hon liittyy? Voiko siellä valita, että ko. tilanteessa (mahd. jo olemassa oleva) K2.SVO tuhotaan (ennen uuden luomista)?
Eli data liikkuu R:n suuntaan Survosta komennolla:
FILE LOAD KOE TO R>koe

R:stä Survo-tiedostoksi puolestaan voi käyttää komentoa:
FILE SAVE R>koe TO NEW KOE

Käytettäessä noita toimituskentässä, osa-aineistoihin rajoittavat täsmennykset toimivat. Tietyissä tilanteissa myös STRIP_WHITE=1 täsmennystä on hyödyllistä käyttää FILE LOADin kanssa, niin pääsee automaattisesti eroon ylimääräisistä välilyönneistä yms.

FILE SAVEn kanssa voi käyttää tuota komennon TO NEW -muotoa, jolloin vanhan datan päälle kirjoitetaan automaattisesti.

Noiden lisäksi on olemassa R-funktiot read.svo() ja write.svo(), jotka tekevät täsmälleen samat jutut kuin em. komennot, mutta ilman mahdollisuuksia täsmennyksiin yms. Nämä funktiot tarjoavat keinon lukea Survon datoja R:ään foreign-paketin tyylisellä tavalla ja voivat olla joskus myös hyödyllisiä joissain R:n scripteissä, mutta toimittaessa editorissa kannattaa kyllä käyttää suoraan noita FILE-komentoja täsmennyksineen.
Reply | Threaded
Open this post in threaded view
|

Re: Datan siirtämistä .SVO ja R:n data.framen välillä read.svo, write.svo

Sussa
Mistäköhän lähtisin etsimään mokaani, kun kumpikaan noista keinoista ei johda mihinkään?

Tässä ilmoitukset:

*R CUR+1,CUR+1
*READ.SVO(s5valfi)

could not find function "READ.SVO"

*FILE LOAD s5valfi TO R>fi

Cannot open data file

Ja olen varmistanut, että hakemistopolku on oikea ja sen päässä on juuri tuonniminen .svo -tiedosto.
Reply | Threaded
Open this post in threaded view
|

Re: Datan siirtämistä .SVO ja R:n data.framen välillä read.svo, write.svo

Kimmo Vehkalahti
Administrator
Hei,
Et tarvitse muuta kuin Survo-komennon (aktivoi ESC-napilla)

FILE LOAD s5valfi TO R>fi

niin Survo-datasi s5valfi (tiedosto s5valfi.svo) siirtyy R-dataksi fi.
- Kimmo
Reply | Threaded
Open this post in threaded view
|

Re: Datan siirtämistä .SVO ja R:n data.framen välillä read.svo, write.svo

Sussa
Kiitos, mutta kun se silloinkin sanoi, että Cannot open data file.

Laitoin vain kummatkin kokeilemani keinot varmuuden vuoksi esille.

2015-01-24 14:12 GMT+02:00 Kimmo Vehkalahti [via Survo Forum] <[hidden email]>:
Hei,
Et tarvitse muuta kuin Survo-komennon (aktivoi ESC-napilla)

FILE LOAD s5valfi TO R>fi

niin Survo-datasi s5valfi (tiedosto s5valfi.svo) siirtyy R-dataksi fi.
- Kimmo



If you reply to this email, your message will be added to the discussion below:
http://forum.survo.fi/Datan-siirtamista-SVO-ja-R-n-data-framen-valilla-read-svo-write-svo-tp523p535.html
To unsubscribe from Datan siirtämistä .SVO ja R:n data.framen välillä read.svo, write.svo, click here.
NAML

Reply | Threaded
Open this post in threaded view
|

Re: Datan siirtämistä .SVO ja R:n data.framen välillä read.svo, write.svo

Sussa
Okei, tiedoksi: kopioin tiedostot toisaalle ja sinne Survo löysikin, joten ongelma ratkesi sillä. Kiitos avusta!
Reply | Threaded
Open this post in threaded view
|

Re: Datan siirtämistä .SVO ja R:n data.framen välillä read.svo, write.svo

Petri Palmu
In reply to this post by Sussa
Sussa wrote
Mistäköhän lähtisin etsimään mokaani, kun kumpikaan noista keinoista ei johda mihinkään?

Tässä ilmoitukset:

*R CUR+1,CUR+1
*READ.SVO(s5valfi)

could not find function "READ.SVO"

*FILE LOAD s5valfi TO R>fi

Cannot open data file

Ja olen varmistanut, että hakemistopolku on oikea ja sen päässä on juuri tuonniminen .svo -tiedosto.

Heippa, R:ssä kaikki on eroa pienillä ja suurilla kirjaimilla ("Survo:n" osalta FILE LOAD = file load).  Lisäksi nimet annetaan joko ' ' tai " " sisällä.

read.svo():ssa ilmeisesti pitää myös olla perässä tiedostopääte .SVO.
Elikkäs:
d <- read.svo("s5.valfi.SVO");
str(d); head(d);

read.svo() on ihan kätevä funktio, jolla pääset mihin tahansa .SVO muotoiseen dataa käsiksi :)
Reply | Threaded
Open this post in threaded view
|

Re: Datan siirtämistä .SVO ja R:n data.framen välillä read.svo, write.svo

Sussa
Kiitos Petri - pidän mielessä.

Nyt yritin yhdistellä kolme tiedostoa (objektit fi, gb, ger alla) merge-komennolla ja se onnistui ilman kommervenkkejä, mutta kun fix-komennolla yritin katsoa lopputulosta, olivat kaikki solut tyhjiä. Eli sarakkeiden päällä olivat muuttujien nimet, mutta mitään lukarvoja ei ollut.

Tiedostoissa siis kaikissa samat muuttujanimet, taustatietomuuttujien nimiä lukuunottamatta, jolloin ymmärsin, että merge yhdistelisi kaikki identtiset muuttujat allekkain.

Mutta ei...

Tämä siis käyttämäni komento:

mydata1 = merge(fi, gb)
kokodata = merge(mydata1, ger)


2015-01-24 17:51 GMT+02:00 Petri Palmu [via Survo Forum] <[hidden email]>:
Sussa wrote
Mistäköhän lähtisin etsimään mokaani, kun kumpikaan noista keinoista ei johda mihinkään?

Tässä ilmoitukset:

*R CUR+1,CUR+1
*READ.SVO(s5valfi)

could not find function "READ.SVO"

*FILE LOAD s5valfi TO R>fi

Cannot open data file

Ja olen varmistanut, että hakemistopolku on oikea ja sen päässä on juuri tuonniminen .svo -tiedosto.

Heippa, R:ssä kaikki on eroa pienillä ja suurilla kirjaimilla ("Survo:n" osalta FILE LOAD = file load).  Lisäksi nimet annetaan joko ' ' tai " " sisällä.

read.svo():ssa ilmeisesti pitää myös olla perässä tiedostopääte .SVO.
Elikkäs:
d <- read.svo("s5.valfi.SVO");
str(d); head(d);

read.svo() on ihan kätevä funktio, jolla pääset mihin tahansa .SVO muotoiseen dataa käsiksi :)



If you reply to this email, your message will be added to the discussion below:
http://forum.survo.fi/Datan-siirtamista-SVO-ja-R-n-data-framen-valilla-read-svo-write-svo-tp523p538.html
To unsubscribe from Datan siirtämistä .SVO ja R:n data.framen välillä read.svo, write.svo, click here.
NAML

Reply | Threaded
Open this post in threaded view
|

Re: Datan siirtämistä .SVO ja R:n data.framen välillä read.svo, write.svo

Petri Palmu
In reply to this post by Sussa
Sussa wrote
Kiitos, mutta kun se silloinkin sanoi, että Cannot open data file.

Laitoin vain kummatkin kokeilemani keinot varmuuden vuoksi esille.

2015-01-24 14:12 GMT+02:00 Kimmo Vehkalahti [via Survo Forum] <
[hidden email]>:

> Hei,
> Et tarvitse muuta kuin Survo-komennon (aktivoi ESC-napilla)
>
> FILE LOAD s5valfi TO R>fi
>
> niin Survo-datasi s5valfi (tiedosto s5valfi.svo) siirtyy R-dataksi fi.
> - Kimmo
>
>
> ------------------------------
>  If you reply to this email, your message will be added to the discussion
> below:
>
> http://forum.survo.fi/Datan-siirtamista-SVO-ja-R-n-data-framen-valilla-read-svo-write-svo-tp523p535.html
>  To unsubscribe from Datan siirtämistä .SVO ja R:n data.framen välillä
> read.svo, write.svo, click here
> <http://forum.survo.fi/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=523&code=c3Vzc2FiQGdtYWlsLmNvbXw1MjN8LTE4NDU5NjQ2MzI=>
> .
> NAML
> <http://forum.survo.fi/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>
FILE LOADin lisäksi myös FILE COPY toimii siirrossa .SVO -> R:n data.frame (ks. tämän viestiketjun eka viesti :)
Reply | Threaded
Open this post in threaded view
|

Re: Datan siirtämistä .SVO ja R:n data.framen välillä read.svo, write.svo

Petri Palmu
In reply to this post by Sussa
Sussa wrote
Kiitos Petri - pidän mielessä.

Nyt yritin yhdistellä kolme tiedostoa (objektit fi, gb, ger alla)
merge-komennolla ja se onnistui ilman kommervenkkejä, mutta kun
fix-komennolla yritin katsoa lopputulosta, olivat kaikki solut tyhjiä. Eli
sarakkeiden päällä olivat muuttujien nimet, mutta mitään lukarvoja ei ollut.

Tiedostoissa siis kaikissa samat muuttujanimet, taustatietomuuttujien nimiä
lukuunottamatta, jolloin ymmärsin, että merge yhdistelisi kaikki identtiset
muuttujat allekkain.

Mutta ei...

Tämä siis käyttämäni komento:

mydata1 = merge(fi, gb)
kokodata = merge(mydata1, ger)


2015-01-24 17:51 GMT+02:00 Petri Palmu [via Survo Forum] <
[hidden email]>:

>  Sussa wrote
> Mistäköhän lähtisin etsimään mokaani, kun kumpikaan noista keinoista ei
> johda mihinkään?
>
> Tässä ilmoitukset:
>
> *R CUR+1,CUR+1
> *READ.SVO(s5valfi)
>
> could not find function "READ.SVO"
>
> *FILE LOAD s5valfi TO R>fi
>
> Cannot open data file
>
> Ja olen varmistanut, että hakemistopolku on oikea ja sen päässä on juuri
> tuonniminen .svo -tiedosto.
>
>
> Heippa, R:ssä kaikki on eroa pienillä ja suurilla kirjaimilla ("Survo:n"
> osalta FILE LOAD = file load).  Lisäksi nimet annetaan joko ' ' tai " "
> sisällä.
>
> read.svo():ssa ilmeisesti pitää myös olla perässä tiedostopääte .SVO.
> Elikkäs:
> d <- read.svo("s5.valfi.SVO");
> str(d); head(d);
>
> read.svo() on ihan kätevä funktio, jolla pääset mihin tahansa .SVO
> muotoiseen dataa käsiksi :)
>
>
> ------------------------------
>  If you reply to this email, your message will be added to the discussion
> below:
>
> http://forum.survo.fi/Datan-siirtamista-SVO-ja-R-n-data-framen-valilla-read-svo-write-svo-tp523p538.html
>  To unsubscribe from Datan siirtämistä .SVO ja R:n data.framen välillä
> read.svo, write.svo, click here
> <http://forum.survo.fi/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=523&code=c3Vzc2FiQGdtYWlsLmNvbXw1MjN8LTE4NDU5NjQ2MzI=>
> .
> NAML
> <http://forum.survo.fi/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>
Tuo merge() tuntuu aina joskus vähän oudolta.

?merge()

saat esiin ko. toiminnon parametrit. Kannattanee ilmoittaa parametrit,

merge(x=data1, y=data2, by="yhdistelyavain", all.x=TRUE, sort=TRUE...)

Tuo all.x tarkoittaa, että kaikki data1:n rivit otetaan mukaan lopputulokseen. Jos lisäät vielä all.y=TRUE, niin lopputulokseen tulee kaikki x ja y datan taustamuuttujien arvot.
by parametrilla ilmoitetaan minkä taustamuuttujan (tai muuttujien) suhteen yhdistely tehdään. data1 ja data2 taustamuuttujakenttien nimet voivat olla eri, esim. "sp" ja "sukup" (molemmat tarkoittaa sukupuolta). Mutta tällöin by:n sijaan by.x="sp", by.y="sukup". Ongelma varmasti selviää jos laitat molemmista datoista kuvauksen. R:n str(data) ja head(data) saat tiedostojen rakennetta näkyviin.
Luultavasti merge ei jostain syystä löydä yhtään samaa havaintoa täsmättävien taustatietojen välillä.
 



Reply | Threaded
Open this post in threaded view
|

Re: Datan siirtämistä .SVO ja R:n data.framen välillä read.svo, write.svo

Sussa
In reply to this post by Reijo Sund
Välillä sitä luulee, että on ymmärtänyt jotain ja rupeaa polleaksi. Kunnes sitten ihan perusasioihin kompastuu.

Yritän alla avata AINEISTO.SVO:n nuo listatut muuttujat ja viedä tiedot objektiin evop.
Sitten yritän tallentaa nämä tiedot EVOP.SVO-tiedostoksi ja lisätä sinne noita VAR-komentojen
uusia muuttujia.

Minnekään ei ilmesty EVOP.SVO-tiedostoa.

Mitä teen väärin?

VARS=SF01,SF02,SF03,SF04,SF05,SF06,SF07,SF08,SF09,SF10,SF11,&
      SF12,SF13,SF14,SF15,SF16,SF17,SF18,SF19,SF20,SF21,SF22,SF23,SF24,&
      SF25,SF26,SF27,SF28,SF29,SF30,SF31,SF32,SF33,SF34,SF35,SF36,SF37,&
      SF38,SF39,SF40,SF41,SF42,SF43,SF44,SF45,SF46,SF47,SF48,SF49,SF50,&
      SF51,SF52,SF53,SF54,SF55,SF56,SF57,SF58,SF59,SF60

FILE LOAD AINEISTO TO R>evop

FILE SAVE R>evop TO EVOP

VAR Dom1=SF11-SF46 TO EVOP
VAR Dom2=SF22-SF37 TO EVOP
VAR Dom3=SF39-SF24 TO EVOP
VAR Dom4=SF34-SF29 TO EVOP
VAR Dom5=SF44-SF19 TO EVOP

VAR Anx1=SF01-SF56 TO EVOP
VAR Anx2=SF31-SF26 TO EVOP
VAR Anx3=SF51-SF06 TO EVOP
VAR Anx4=SF07-SF52 TO EVOP
VAR Anx5=SF59-SF04 TO EVOP
Reply | Threaded
Open this post in threaded view
|

Re: Datan siirtämistä .SVO ja R:n data.framen välillä read.svo, write.svo

Reijo Sund
Administrator
Sussa wrote
Yritän alla avata AINEISTO.SVO:n nuo listatut muuttujat ja viedä tiedot objektiin evop.
Sitten yritän tallentaa nämä tiedot EVOP.SVO-tiedostoksi ja lisätä sinne noita VAR-komentojen
uusia muuttujia.

Minnekään ei ilmesty EVOP.SVO-tiedostoa.
Jos datalle ei tehdä mitään oikeasti tähdellistä R:n puolella tuossa vaiheessa, niin sitä on turha kierrättää sitä kautta ja jos on vain tarvetta uudelle tiedostolle, niin riittää komento:
FILE COPY AINEISTO TO NEW EVOP
Jos kuitenkin pitää siirtää jostain syystä R:stä tavaraa, niin tuohon voisi varmuuden vuoksi lisätä rajarivin ja täsmentää heti, että halutaan uuteen tiedostoon:
...............
FILE SAVE R>evop TO NEW EVOP

Kummassakin tapauksessa tiedosto EVOP.SVO syntyy nykyiseen työhakemistoon (hyvin todennäköisesti sama kuin missä AINEISTO.SVO on). Työhakemiston näet Survon ikkunan alapalkista kohdasta Path. Jos se viittaa erikoiseen hakemistoon jota et millään löydä, kuten esim. <Survo>, niin vaikkapa komennolla CD * tai sitten File-valikon Change Directory -kohdasta saat esiin hakemistonvaihtodialogin, jossa näkyy koko pitkä polkunimi. Tai R:n ikkunaan saat pitkän polun näkyviin aktivoimalla komennon R>getwd()

Entä pääsetko esim. komennolla FILE SHOW EVOP katsomaan tiedoston sisältöä? Jos kyllä, niin tiedosto on kyllä olemassa.

VAR-komennotkin antavat virheilmoituksen, jos tiedostoa ei ole olemassa. Niitä voisi muutenkin halutessa vähän tiivistää:
VAR Dom1,Dom2,Dom3,Dom4,Dom5,Anx1,Anx2,Anx3,Anx4,Anx5 TO EVOP
Dom1=SF11-SF46 Dom2=SF22-SF37 Dom3=SF39-SF24 Dom4=SF34-SF29 Dom5=SF44-SF19
Anx1=SF01-SF56 Anx2=SF31-SF26 Anx3=SF51-SF06 Anx4=SF07-SF52 Anx5=SF59-SF04
Reply | Threaded
Open this post in threaded view
|

Numeeristen muuttujien tyyppien käsittely R:n ja Survon datojen välillä

Petri Palmu
In reply to this post by Petri Palmu
Oli pientä tuskailua siinä, kun R:n datassa oli integer-tyyppisiä muuttujia, jotka saavat arvoja esim. 0,1,2 , jotka siten tallensin write.svo():lla .SVO-tiedostoksi. Survo tekee niistä Numeerisia TYPE = 1, joissa ei voi olla desimaaleja. Tarvitsen  type  = 4/8 muuttujia, kun teen muuttujamuunnoksia esim. X/2...

Pääsin tavoitteeseen, lähtötilanne

FILE STATUS data
..... 
 107 NA_   1 LATYO    LATYO (#####)
 108 NA_   1 SUTYO    SUTYO (#####)
 109 NA_   1 PAIVTYO  PAIVTYO (#######)

Lopputulos:

FILE STATUS data
....
107 NA_   8 LATYO    LATYO (###.#####)
108 NA_   8 SUTYO    SUTYO (###.#####)
109 NA_   8 PAIVTYO  PAIVTYO (###.#####)


Eli nyt voi tehdä esim. LATYO/2 tyyppisiä muunnoksia (tässä tapauksessa {0,1,2} -> {0,.5,1}).

Se miten ratkaisin asian oli:
## R-koodia, jolla luetaan lähtönä oleva Survo-tiedosto (jossa muuttujatyypit on väärät)
D <- read.svo(data.SVO);

# Pinotaan 1. havaintorivi datan päälle, jota käytetään "hämäämisessä" :)
D <- rbind(D[1,], D);

for(k in names(D)) {
 # jos muuttuja numeerinen niin tehdään desimaaliluku datan 1. riville
 # Muussa tapauksessa joku merkki (alla Z)
 if(class(D[,k]) %in% c("numeric", "integer")) { D[1,k] <- 999.99999} 
 else {D[1,k] <-  "Z"};
};
## Tallennetaan D tekstitiedostoksi (joka luetaan .SVO:ksi)
write.table(D, "d.txt",...); #
## Voisi myös suoraan Tallentaan write.svo():lla

Näin on saatu tekstitiedosto, jossa eka rivi on "hömppärivi"... mutta hömpän tarkoitus on ohjata Survon FILE SAVE toimintoa, niin että muuttujat ovat N TYPE = 4/8 (###.####), kuten tuossa yllä lopputuloksessa.
Oikeasti tässä huijataan R:ää, joka tuntuu tallettavan esim. 1.0000 tyyppiset luvut ilman desimaaleja (1) (esim. write.table(), joka taas ohjaa Survon tulkitsemaan, että data tyyppi on  N TYPE = 1....

Tässä vielä, miten loppusilaus hoituu, kun R:stä on talletettu tekstitiedoksi.

FILE DEL TMP1
....................
 MAXFIELDS=400 VARLEN=300
     FILTER=WIN2.BIN / Että ääkköset menee oikein...
FILE SAVE d.txt TO TMP1 / NAMES=1 FIRST=2 DELIMITER=TAB MISSING=NA
..................
Eka rivi veks...
FILE COPY TMP1 TO NEW data / SELECT=!C1 C1=ORDER,1
.......................
Prosessi jatkuu...

Kokeilin eri tapoja, mutta jotenkin tämä tuntui kaikkein yksinkertaisimmalta. Itse ongelman löysin kun vertasin kahden eri vuoden datoja, esim. tuossa lauantaityössä oli kaikki 0.5 arvoiset havainnot -> 0. Noiden vuosien aikana kyselyjärjestelmä on vaihtunut ja muutenkin raakadata tulee eri prosessien kautta... :)

Reply | Threaded
Open this post in threaded view
|

Re: Numeeristen muuttujien tyyppien käsittely R:n ja Survon datojen välillä

Kimmo Vehkalahti
Administrator
"tarkoitus on ohjata Survon FILE SAVE toimintoa"

Tuota voisi hyvin kutsua termillä "supervised learning".
- Kimmo
Reply | Threaded
Open this post in threaded view
|

Re: Numeeristen muuttujien tyyppien käsittely R:n ja Survon datojen välillä

Petri Palmu
Kimmo Vehkalahti wrote
"tarkoitus on ohjata Survon FILE SAVE toimintoa"

Tuota voisi hyvin kutsua termillä "supervised learning".
- Kimmo

Jokunen vuosi tässä on koitettu päästä Survon päänupin sisuksiin
.